(function(global) { 'use strict'; if (global.$traceurRuntime) { return; } function setupGlobals(global) { global.Reflect = global.Reflect || {}; global.Reflect.global = global.Reflect.global || global; } setupGlobals(global); var typeOf = function(x) { return typeof x; }; global.$traceurRuntime = { options: {}, setupGlobals: setupGlobals, typeof: typeOf }; })(typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this); (function() { function buildFromEncodedParts(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) { var out = []; if (opt_scheme) { out.push(opt_scheme, ':'); } if (opt_domain) { out.push('//'); if (opt_userInfo) { out.push(opt_userInfo, '@'); } out.push(opt_domain); if (opt_port) { out.push(':', opt_port); } } if (opt_path) { out.push(opt_path); } if (opt_queryData) { out.push('?', opt_queryData); } if (opt_fragment) { out.push('#', opt_fragment); } return out.join(''); } var splitRe = new RegExp('^' + '(?:' + '([^:/?#.]+)' + ':)?' + '(?://' + '(?:([^/?#]*)@)?' + '([\\w\\d\\-\\u0100-\\uffff.%]*)' + '(?::([0-9]+))?' + ')?' + '([^?#]+)?' + '(?:\\?([^#]*))?' + '(?:#(.*))?' + '$'); var ComponentIndex = { SCHEME: 1, USER_INFO: 2, DOMAIN: 3, PORT: 4, PATH: 5, QUERY_DATA: 6, FRAGMENT: 7 }; function split(uri) { return (uri.match(splitRe)); } function removeDotSegments(path) { if (path === '/') return '/'; var leadingSlash = path[0] === '/' ? '/' : ''; var trailingSlash = path.slice(-1) === '/' ? '/' : ''; var segments = path.split('/'); var out = []; var up = 0; for (var pos = 0; pos < segments.length; pos++) { var segment = segments[pos]; switch (segment) { case '': case '.': break; case '..': if (out.length) out.pop(); else up++; break; default: out.push(segment); } } if (!leadingSlash) { while (up-- > 0) { out.unshift('..'); } if (out.length === 0) out.push('.'); } return leadingSlash + out.join('/') + trailingSlash; } function joinAndCanonicalizePath(parts) { var path = parts[ComponentIndex.PATH] || ''; path = removeDotSegments(path); parts[ComponentIndex.PATH] = path; return buildFromEncodedParts(parts[ComponentIndex.SCHEME], parts[ComponentIndex.USER_INFO], parts[ComponentIndex.DOMAIN], parts[ComponentIndex.PORT], parts[ComponentIndex.PATH], parts[ComponentIndex.QUERY_DATA], parts[ComponentIndex.FRAGMENT]); } function canonicalizeUrl(url) { var parts = split(url); return joinAndCanonicalizePath(parts); } function resolveUrl(base, url) { var parts = split(url); var baseParts = split(base); if (parts[ComponentIndex.SCHEME]) { return joinAndCanonicalizePath(parts); } else { parts[ComponentIndex.SCHEME] = baseParts[ComponentIndex.SCHEME]; } for (var i = ComponentIndex.SCHEME; i <= ComponentIndex.PORT; i++) { if (!parts[i]) { parts[i] = baseParts[i]; } } if (parts[ComponentIndex.PATH][0] == '/') { return joinAndCanonicalizePath(parts); } var path = baseParts[ComponentIndex.PATH]; var index = path.lastIndexOf('/'); path = path.slice(0, index + 1) + parts[ComponentIndex.PATH]; parts[ComponentIndex.PATH] = path; return joinAndCanonicalizePath(parts); } function isAbsolute(name) { if (!name) return false; if (name[0] === '/') return true; var parts = split(name); if (parts[ComponentIndex.SCHEME]) return true; return false; } $traceurRuntime.canonicalizeUrl = canonicalizeUrl; $traceurRuntime.isAbsolute = isAbsolute; $traceurRuntime.removeDotSegments = removeDotSegments; $traceurRuntime.resolveUrl = resolveUrl; })(); (function(global) { 'use strict'; var $__3 = $traceurRuntime, canonicalizeUrl = $__3.canonicalizeUrl, resolveUrl = $__3.resolveUrl, isAbsolute = $__3.isAbsolute; var moduleInstantiators = Object.create(null); var baseURL; if (global.location && global.location.href) baseURL = resolveUrl(global.location.href, './'); else baseURL = ''; function UncoatedModuleEntry(url, uncoatedModule) { this.url = url; this.value_ = uncoatedModule; } function ModuleEvaluationError(erroneousModuleName, cause) { this.message = this.constructor.name + ': ' + this.stripCause(cause) + ' in ' + erroneousModuleName; if (!(cause instanceof ModuleEvaluationError) && cause.stack) this.stack = this.stripStack(cause.stack); else this.stack = ''; } ModuleEvaluationError.prototype = Object.create(Error.prototype); ModuleEvaluationError.prototype.constructor = ModuleEvaluationError; ModuleEvaluationError.prototype.stripError = function(message) { return message.replace(/.*Error:/, this.constructor.name + ':'); }; ModuleEvaluationError.prototype.stripCause = function(cause) { if (!cause) return ''; if (!cause.message) return cause + ''; return this.stripError(cause.message); }; ModuleEvaluationError.prototype.loadedBy = function(moduleName) { this.stack += '\n loaded by ' + moduleName; }; ModuleEvaluationError.prototype.stripStack = function(causeStack) { var stack = []; causeStack.split('\n').some(function(frame) { if (/UncoatedModuleInstantiator/.test(frame)) return true; stack.push(frame); }); stack[0] = this.stripError(stack[0]); return stack.join('\n'); }; function beforeLines(lines, number) { var result = []; var first = number - 3; if (first < 0) first = 0; for (var i = first; i < number; i++) { result.push(lines[i]); } return result; } function afterLines(lines, number) { var last = number + 1; if (last > lines.length - 1) last = lines.length - 1; var result = []; for (var i = number; i <= last; i++) { result.push(lines[i]); } return result; } function columnSpacing(columns) { var result = ''; for (var i = 0; i < columns - 1; i++) { result += '-'; } return result; } function UncoatedModuleInstantiator(url, func) { UncoatedModuleEntry.call(this, url, null); this.func = func; } UncoatedModuleInstantiator.prototype = Object.create(UncoatedModuleEntry.prototype); UncoatedModuleInstantiator.prototype.getUncoatedModule = function() { var $__2 = this; if (this.value_) return this.value_; try { var relativeRequire; if (typeof $traceurRuntime !== undefined && $traceurRuntime.require) { relativeRequire = $traceurRuntime.require.bind(null, this.url); } return this.value_ = this.func.call(global, relativeRequire); } catch (ex) { if (ex instanceof ModuleEvaluationError) { ex.loadedBy(this.url); throw ex; } if (ex.stack) { var lines = this.func.toString().split('\n'); var evaled = []; ex.stack.split('\n').some(function(frame, index) { if (frame.indexOf('UncoatedModuleInstantiator.getUncoatedModule') > 0) return true; var m = /(at\s[^\s]*\s).*>:(\d*):(\d*)\)/.exec(frame); if (m) { var line = parseInt(m[2], 10); evaled = evaled.concat(beforeLines(lines, line)); if (index === 1) { evaled.push(columnSpacing(m[3]) + '^ ' + $__2.url); } else { evaled.push(columnSpacing(m[3]) + '^'); } evaled = evaled.concat(afterLines(lines, line)); evaled.push('= = = = = = = = ='); } else { evaled.push(frame); } }); ex.stack = evaled.join('\n'); } throw new ModuleEvaluationError(this.url, ex); } }; function getUncoatedModuleInstantiator(name) { if (!name) return; var url = ModuleStore.normalize(name); return moduleInstantiators[url]; } ; var moduleInstances = Object.create(null); var liveModuleSentinel = {}; function Module(uncoatedModule) { var isLive = arguments[1]; var coatedModule = Object.create(null); Object.getOwnPropertyNames(uncoatedModule).forEach(function(name) { var getter, value; if (isLive === liveModuleSentinel) { var descr = Object.getOwnPropertyDescriptor(uncoatedModule, name); if (descr.get) getter = descr.get; } if (!getter) { value = uncoatedModule[name]; getter = function() { return value; }; } Object.defineProperty(coatedModule, name, { get: getter, enumerable: true }); }); Object.preventExtensions(coatedModule); return coatedModule; } var ModuleStore = { normalize: function(name, refererName, refererAddress) { if (typeof name !== 'string') throw new TypeError('module name must be a string, not ' + typeof name); if (isAbsolute(name)) return canonicalizeUrl(name); if (/[^\.]\/\.\.\//.test(name)) { throw new Error('module name embeds /../: ' + name); } if (name[0] === '.' && refererName) return resolveUrl(refererName, name); return canonicalizeUrl(name); }, get: function(normalizedName) { var m = getUncoatedModuleInstantiator(normalizedName); if (!m) return undefined; var moduleInstance = moduleInstances[m.url]; if (moduleInstance) return moduleInstance; moduleInstance = Module(m.getUncoatedModule(), liveModuleSentinel); return moduleInstances[m.url] = moduleInstance; }, set: function(normalizedName, module) { normalizedName = String(normalizedName); moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, function() { return module; }); moduleInstances[normalizedName] = module; }, get baseURL() { return baseURL; }, set baseURL(v) { baseURL = String(v); }, registerModule: function(name, deps, func) { var normalizedName = ModuleStore.normalize(name); if (moduleInstantiators[normalizedName]) throw new Error('duplicate module named ' + normalizedName); moduleInstantiators[normalizedName] = new UncoatedModuleInstantiator(normalizedName, func); }, bundleStore: Object.create(null), register: function(name, deps, func) { if (!deps || !deps.length && !func.length) { this.registerModule(name, deps, func); } else { this.bundleStore[name] = { deps: deps, execute: function() { var $__2 = arguments; var depMap = {}; deps.forEach(function(dep, index) { return depMap[dep] = $__2[index]; }); var registryEntry = func.call(this, depMap); registryEntry.execute.call(this); return registryEntry.exports; } }; } }, getAnonymousModule: function(func) { return new Module(func(), liveModuleSentinel); } }; var moduleStoreModule = new Module({ModuleStore: ModuleStore}); ModuleStore.set('@traceur/src/runtime/ModuleStore.js', moduleStoreModule); var setupGlobals = $traceurRuntime.setupGlobals; $traceurRuntime.setupGlobals = function(global) { setupGlobals(global); }; $traceurRuntime.ModuleStore = ModuleStore; $traceurRuntime.registerModule = ModuleStore.registerModule.bind(ModuleStore); $traceurRuntime.getModule = ModuleStore.get; $traceurRuntime.setModule = ModuleStore.set; $traceurRuntime.normalizeModuleName = ModuleStore.normalize; })(typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/new-unique-string.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/new-unique-string.js"; var random = Math.random; var counter = Date.now() % 1e9; function newUniqueString() { return '__$' + (random() * 1e9 >>> 1) + '$' + ++counter + '$__'; } return {get default() { return newUniqueString; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/has-native-symbols.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/has-native-symbols.js"; var v = !!Object.getOwnPropertySymbols && typeof Symbol === 'function'; function hasNativeSymbol() { return v; } return {get default() { return hasNativeSymbol; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/symbols.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/symbols.js"; var newUniqueString = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../new-unique-string.js", "traceur@0.0.112/src/runtime/modules/symbols.js")).default; var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/modules/symbols.js")).default; var $create = Object.create; var $defineProperty = Object.defineProperty; var $freeze = Object.freeze; var $getOwnPropertyNames = Object.getOwnPropertyNames; var $keys = Object.keys; var $TypeError = TypeError; function nonEnum(value) { return { configurable: true, enumerable: false, value: value, writable: true }; } var symbolInternalProperty = newUniqueString(); var symbolDescriptionProperty = newUniqueString(); var symbolDataProperty = newUniqueString(); var symbolValues = $create(null); var SymbolImpl = function Symbol(description) { var value = new SymbolValue(description); if (!(this instanceof SymbolImpl)) return value; throw new $TypeError('Symbol cannot be new\'ed'); }; $defineProperty(SymbolImpl.prototype, 'constructor', nonEnum(SymbolImpl)); $defineProperty(SymbolImpl.prototype, 'toString', nonEnum(function() { var symbolValue = this[symbolDataProperty]; return symbolValue[symbolInternalProperty]; })); $defineProperty(SymbolImpl.prototype, 'valueOf', nonEnum(function() { var symbolValue = this[symbolDataProperty]; if (!symbolValue) throw $TypeError('Conversion from symbol to string'); return symbolValue[symbolInternalProperty]; })); function SymbolValue(description) { var key = newUniqueString(); $defineProperty(this, symbolDataProperty, {value: this}); $defineProperty(this, symbolInternalProperty, {value: key}); $defineProperty(this, symbolDescriptionProperty, {value: description}); $freeze(this); symbolValues[key] = this; } $defineProperty(SymbolValue.prototype, 'constructor', nonEnum(SymbolImpl)); $defineProperty(SymbolValue.prototype, 'toString', { value: SymbolImpl.prototype.toString, enumerable: false }); $defineProperty(SymbolValue.prototype, 'valueOf', { value: SymbolImpl.prototype.valueOf, enumerable: false }); $freeze(SymbolValue.prototype); function isSymbolString(s) { return symbolValues[s]; } function removeSymbolKeys(array) { var rv = []; for (var i = 0; i < array.length; i++) { if (!isSymbolString(array[i])) { rv.push(array[i]); } } return rv; } function getOwnPropertyNames(object) { return removeSymbolKeys($getOwnPropertyNames(object)); } function keys(object) { return removeSymbolKeys($keys(object)); } function getOwnPropertySymbols(object) { var rv = []; var names = $getOwnPropertyNames(object); for (var i = 0; i < names.length; i++) { var symbol = symbolValues[names[i]]; if (symbol) { rv.push(symbol); } } return rv; } function polyfillSymbol(global) { var Object = global.Object; if (!hasNativeSymbol()) { global.Symbol = SymbolImpl; Object.getOwnPropertyNames = getOwnPropertyNames; Object.keys = keys; $defineProperty(Object, 'getOwnPropertySymbols', nonEnum(getOwnPropertySymbols)); } if (!global.Symbol.iterator) { global.Symbol.iterator = global.Symbol('Symbol.iterator'); } if (!global.Symbol.observer) { global.Symbol.observer = global.Symbol('Symbol.observer'); } } var g = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : (void 0); polyfillSymbol(g); var typeOf = hasNativeSymbol() ? function(x) { return typeof x; } : function(x) { return x instanceof SymbolValue ? 'symbol' : typeof x; }; return {get typeof() { return typeOf; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/typeof.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/typeof.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_symbols_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./symbols.js", "traceur@0.0.112/src/runtime/modules/typeof.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_symbols_46_js__.typeof; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/symbols.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/symbols.js"; var t = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/typeof.js", "traceur@0.0.112/src/runtime/symbols.js")).default; $traceurRuntime.typeof = t; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/createClass.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/createClass.js"; var $Object = Object; var $TypeError = TypeError; var $__1 = Object, create = $__1.create, defineProperties = $__1.defineProperties, defineProperty = $__1.defineProperty, getOwnPropertyDescriptor = $__1.getOwnPropertyDescriptor, getOwnPropertyNames = $__1.getOwnPropertyNames, getOwnPropertySymbols = $__1.getOwnPropertySymbols; function forEachPropertyKey(object, f) { getOwnPropertyNames(object).forEach(f); if (getOwnPropertySymbols) { getOwnPropertySymbols(object).forEach(f); } } function getDescriptors(object) { var descriptors = {}; forEachPropertyKey(object, function(key) { descriptors[key] = getOwnPropertyDescriptor(object, key); descriptors[key].enumerable = false; }); return descriptors; } var nonEnum = {enumerable: false}; function makePropertiesNonEnumerable(object) { forEachPropertyKey(object, function(key) { defineProperty(object, key, nonEnum); }); } function createClass(ctor, object, staticObject, superClass) { defineProperty(object, 'constructor', { value: ctor, configurable: true, enumerable: false, writable: true }); if (arguments.length > 3) { if (typeof superClass === 'function') ctor.__proto__ = superClass; ctor.prototype = create(getProtoParent(superClass), getDescriptors(object)); } else { makePropertiesNonEnumerable(object); ctor.prototype = object; } defineProperty(ctor, 'prototype', { configurable: false, writable: false }); return defineProperties(ctor, getDescriptors(staticObject)); } function getProtoParent(superClass) { if (typeof superClass === 'function') { var prototype = superClass.prototype; if ($Object(prototype) === prototype || prototype === null) return superClass.prototype; throw new $TypeError('super prototype must be an Object or null'); } if (superClass === null) return null; throw new $TypeError(("Super expression must either be null or a function, not " + typeof superClass + ".")); } return {get default() { return createClass; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/superConstructor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/superConstructor.js"; function superConstructor(ctor) { return ctor.__proto__; } return {get default() { return superConstructor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/superDescriptor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/superDescriptor.js"; var $__0 = Object, getOwnPropertyDescriptor = $__0.getOwnPropertyDescriptor, getPrototypeOf = $__0.getPrototypeOf; function superDescriptor(homeObject, name) { var proto = getPrototypeOf(homeObject); do { var result = getOwnPropertyDescriptor(proto, name); if (result) return result; proto = getPrototypeOf(proto); } while (proto); return undefined; } return {get default() { return superDescriptor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/superGet.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/superGet.js"; var superDescriptor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./superDescriptor.js", "traceur@0.0.112/src/runtime/modules/superGet.js")).default; function superGet(self, homeObject, name) { var descriptor = superDescriptor(homeObject, name); if (descriptor) { var value = descriptor.value; if (value) return value; if (!descriptor.get) return value; return descriptor.get.call(self); } return undefined; } return {get default() { return superGet; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/superSet.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/superSet.js"; var superDescriptor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./superDescriptor.js", "traceur@0.0.112/src/runtime/modules/superSet.js")).default; var $TypeError = TypeError; function superSet(self, homeObject, name, value) { var descriptor = superDescriptor(homeObject, name); if (descriptor && descriptor.set) { descriptor.set.call(self, value); return value; } throw $TypeError(("super has no setter '" + name + "'.")); } return {get default() { return superSet; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/classes.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/classes.js"; var createClass = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/createClass.js", "traceur@0.0.112/src/runtime/classes.js")).default; var superConstructor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/superConstructor.js", "traceur@0.0.112/src/runtime/classes.js")).default; var superGet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/superGet.js", "traceur@0.0.112/src/runtime/classes.js")).default; var superSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/superSet.js", "traceur@0.0.112/src/runtime/classes.js")).default; $traceurRuntime.createClass = createClass; $traceurRuntime.superConstructor = superConstructor; $traceurRuntime.superGet = superGet; $traceurRuntime.superSet = superSet; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/exportStar.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/exportStar.js"; var $__1 = Object, defineProperty = $__1.defineProperty, getOwnPropertyNames = $__1.getOwnPropertyNames; function exportStar(object) { var $__2 = arguments, $__3 = function(i) { var mod = $__2[i]; var names = getOwnPropertyNames(mod); var $__5 = function(j) { var name = names[j]; if (name === '__esModule' || name === 'default') { return 0; } defineProperty(object, name, { get: function() { return mod[name]; }, enumerable: true }); }, $__6; $__4: for (var j = 0; j < names.length; j++) { $__6 = $__5(j); switch ($__6) { case 0: continue $__4; } } }; for (var i = 1; i < arguments.length; i++) { $__3(i); } return object; } return {get default() { return exportStar; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/exportStar.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/exportStar.js"; var exportStar = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/exportStar.js", "traceur@0.0.112/src/runtime/exportStar.js")).default; $traceurRuntime.exportStar = exportStar; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/private-symbol.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/private-symbol.js"; var newUniqueString = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./new-unique-string.js", "traceur@0.0.112/src/runtime/private-symbol.js")).default; var $Symbol = typeof Symbol === 'function' ? Symbol : undefined; var $getOwnPropertySymbols = Object.getOwnPropertySymbols; var $create = Object.create; var privateNames = $create(null); function isPrivateSymbol(s) { return privateNames[s]; } ; function createPrivateSymbol() { var s = ($Symbol || newUniqueString)(); privateNames[s] = true; return s; } ; function hasPrivate(obj, sym) { return hasOwnProperty.call(obj, sym); } ; function deletePrivate(obj, sym) { if (!hasPrivate(obj, sym)) { return false; } delete obj[sym]; return true; } ; function setPrivate(obj, sym, val) { obj[sym] = val; } ; function getPrivate(obj, sym) { var val = obj[sym]; if (val === undefined) return undefined; return hasOwnProperty.call(obj, sym) ? val : undefined; } ; function init() { if ($getOwnPropertySymbols) { Object.getOwnPropertySymbols = function getOwnPropertySymbols(object) { var rv = []; var symbols = $getOwnPropertySymbols(object); for (var i = 0; i < symbols.length; i++) { var symbol = symbols[i]; if (!isPrivateSymbol(symbol)) { rv.push(symbol); } } return rv; }; } } return { get isPrivateSymbol() { return isPrivateSymbol; }, get createPrivateSymbol() { return createPrivateSymbol; }, get hasPrivate() { return hasPrivate; }, get deletePrivate() { return deletePrivate; }, get setPrivate() { return setPrivate; }, get getPrivate() { return getPrivate; }, get init() { return init; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/private-weak-map.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/private-weak-map.js"; var $WeakMap = typeof WeakMap === 'function' ? WeakMap : undefined; function isPrivateSymbol(s) { return false; } function createPrivateSymbol() { return new $WeakMap(); } function hasPrivate(obj, sym) { return sym.has(obj); } function deletePrivate(obj, sym) { return sym.delete(obj); } function setPrivate(obj, sym, val) { sym.set(obj, val); } function getPrivate(obj, sym) { return sym.get(obj); } function init() {} return { get isPrivateSymbol() { return isPrivateSymbol; }, get createPrivateSymbol() { return createPrivateSymbol; }, get hasPrivate() { return hasPrivate; }, get deletePrivate() { return deletePrivate; }, get setPrivate() { return setPrivate; }, get getPrivate() { return getPrivate; }, get init() { return init; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/private.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/private.js"; var sym = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./private-symbol.js", "traceur@0.0.112/src/runtime/private.js")); var weak = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./private-weak-map.js", "traceur@0.0.112/src/runtime/private.js")); var hasWeakMap = typeof WeakMap === 'function'; var m = hasWeakMap ? weak : sym; var isPrivateSymbol = m.isPrivateSymbol; var createPrivateSymbol = m.createPrivateSymbol; var hasPrivate = m.hasPrivate; var deletePrivate = m.deletePrivate; var setPrivate = m.setPrivate; var getPrivate = m.getPrivate; m.init(); return { get isPrivateSymbol() { return isPrivateSymbol; }, get createPrivateSymbol() { return createPrivateSymbol; }, get hasPrivate() { return hasPrivate; }, get deletePrivate() { return deletePrivate; }, get setPrivate() { return setPrivate; }, get getPrivate() { return getPrivate; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/properTailCalls.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/properTailCalls.js"; var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/modules/properTailCalls.js")), getPrivate = $__0.getPrivate, setPrivate = $__0.setPrivate, createPrivateSymbol = $__0.createPrivateSymbol; var $apply = Function.prototype.call.bind(Function.prototype.apply); var CONTINUATION_TYPE = Object.create(null); var isTailRecursiveName = null; function createContinuation(operand, thisArg, argsArray) { return [CONTINUATION_TYPE, operand, thisArg, argsArray]; } function isContinuation(object) { return object && object[0] === CONTINUATION_TYPE; } function $bind(operand, thisArg, args) { var argArray = [thisArg]; for (var i = 0; i < args.length; i++) { argArray[i + 1] = args[i]; } var func = $apply(Function.prototype.bind, operand, argArray); return func; } function $construct(func, argArray) { var object = new ($bind(func, null, argArray)); return object; } function isTailRecursive(func) { return !!getPrivate(func, isTailRecursiveName); } function tailCall(func, thisArg, argArray) { var continuation = argArray[0]; if (isContinuation(continuation)) { continuation = $apply(func, thisArg, continuation[3]); return continuation; } continuation = createContinuation(func, thisArg, argArray); while (true) { if (isTailRecursive(func)) { continuation = $apply(func, continuation[2], [continuation]); } else { continuation = $apply(func, continuation[2], continuation[3]); } if (!isContinuation(continuation)) { return continuation; } func = continuation[1]; } } function construct() { var object; if (isTailRecursive(this)) { object = $construct(this, [createContinuation(null, null, arguments)]); } else { object = $construct(this, arguments); } return object; } function setupProperTailCalls() { isTailRecursiveName = createPrivateSymbol(); Function.prototype.call = initTailRecursiveFunction(function call(thisArg) { var result = tailCall(function(thisArg) { var argArray = []; for (var i = 1; i < arguments.length; ++i) { argArray[i - 1] = arguments[i]; } var continuation = createContinuation(this, thisArg, argArray); return continuation; }, this, arguments); return result; }); Function.prototype.apply = initTailRecursiveFunction(function apply(thisArg, argArray) { var result = tailCall(function(thisArg, argArray) { var continuation = createContinuation(this, thisArg, argArray); return continuation; }, this, arguments); return result; }); } function initTailRecursiveFunction(func) { if (isTailRecursiveName === null) { setupProperTailCalls(); } setPrivate(func, isTailRecursiveName, true); return func; } return { get createContinuation() { return createContinuation; }, get tailCall() { return tailCall; }, get construct() { return construct; }, get initTailRecursiveFunction() { return initTailRecursiveFunction; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/initTailRecursiveFunction.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/initTailRecursiveFunction.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/modules/initTailRecursiveFunction.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__.initTailRecursiveFunction; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/call.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/call.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/modules/call.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__.tailCall; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/continuation.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/continuation.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/modules/continuation.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__.createContinuation; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/construct.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/construct.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/modules/construct.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_properTailCalls_46_js__.construct; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/properTailCalls.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/properTailCalls.js"; var initTailRecursiveFunction = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/initTailRecursiveFunction.js", "traceur@0.0.112/src/runtime/properTailCalls.js")).default; var call = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/call.js", "traceur@0.0.112/src/runtime/properTailCalls.js")).default; var continuation = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/continuation.js", "traceur@0.0.112/src/runtime/properTailCalls.js")).default; var construct = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/construct.js", "traceur@0.0.112/src/runtime/properTailCalls.js")).default; $traceurRuntime.initTailRecursiveFunction = initTailRecursiveFunction; $traceurRuntime.call = call; $traceurRuntime.continuation = continuation; $traceurRuntime.construct = construct; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/relativeRequire.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/relativeRequire.js"; var path; function relativeRequire(callerPath, requiredPath) { path = path || typeof require !== 'undefined' && require('path'); function isDirectory(path) { return path.slice(-1) === '/'; } function isAbsolute(path) { return path[0] === '/'; } function isRelative(path) { return path[0] === '.'; } if (isDirectory(requiredPath) || isAbsolute(requiredPath)) return; return isRelative(requiredPath) ? require(path.resolve(path.dirname(callerPath), requiredPath)) : require(requiredPath); } $traceurRuntime.require = relativeRequire; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/checkObjectCoercible.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/checkObjectCoercible.js"; var $TypeError = TypeError; function checkObjectCoercible(v) { if (v === null || v === undefined) { throw new $TypeError('Value cannot be converted to an Object'); } return v; } return {get default() { return checkObjectCoercible; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/spread.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/spread.js"; var checkObjectCoercible = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../checkObjectCoercible.js", "traceur@0.0.112/src/runtime/modules/spread.js")).default; function spread() { var rv = [], j = 0, iterResult; for (var i = 0; i < arguments.length; i++) { var valueToSpread = checkObjectCoercible(arguments[i]); if (typeof valueToSpread[Symbol.iterator] !== 'function') { throw new TypeError('Cannot spread non-iterable object.'); } var iter = valueToSpread[Symbol.iterator](); while (!(iterResult = iter.next()).done) { rv[j++] = iterResult.value; } } return rv; } return {get default() { return spread; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/spread.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/spread.js"; var spread = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/spread.js", "traceur@0.0.112/src/runtime/spread.js")).default; $traceurRuntime.spread = spread; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/iteratorToArray.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/iteratorToArray.js"; function iteratorToArray(iter) { var rv = []; var i = 0; var tmp; while (!(tmp = iter.next()).done) { rv[i++] = tmp.value; } return rv; } return {get default() { return iteratorToArray; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/destructuring.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/destructuring.js"; var iteratorToArray = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/iteratorToArray.js", "traceur@0.0.112/src/runtime/destructuring.js")).default; $traceurRuntime.iteratorToArray = iteratorToArray; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/async.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/async.js"; var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/modules/async.js")), createPrivateSymbol = $__12.createPrivateSymbol, getPrivate = $__12.getPrivate, setPrivate = $__12.setPrivate; var $__11 = Object, create = $__11.create, defineProperty = $__11.defineProperty; var observeName = createPrivateSymbol(); function AsyncGeneratorFunction() {} function AsyncGeneratorFunctionPrototype() {} AsyncGeneratorFunction.prototype = AsyncGeneratorFunctionPrototype; AsyncGeneratorFunctionPrototype.constructor = AsyncGeneratorFunction; defineProperty(AsyncGeneratorFunctionPrototype, 'constructor', {enumerable: false}); var AsyncGeneratorContext = function() { function AsyncGeneratorContext(observer) { var $__2 = this; this.decoratedObserver = createDecoratedGenerator(observer, function() { $__2.done = true; }); this.done = false; this.inReturn = false; } return ($traceurRuntime.createClass)(AsyncGeneratorContext, { throw: function(error) { if (!this.inReturn) { throw error; } }, yield: function(value) { if (this.done) { this.inReturn = true; throw undefined; } var result; try { result = this.decoratedObserver.next(value); } catch (e) { this.done = true; throw e; } if (result === undefined) { return; } if (result.done) { this.done = true; this.inReturn = true; throw undefined; } return result.value; }, yieldFor: function(observable) { var ctx = this; return observeForEach(observable[Symbol.observer].bind(observable), function(value) { if (ctx.done) { this.return(); return; } var result; try { result = ctx.decoratedObserver.next(value); } catch (e) { ctx.done = true; throw e; } if (result === undefined) { return; } if (result.done) { ctx.done = true; } return result; }); } }, {}); }(); AsyncGeneratorFunctionPrototype.prototype[Symbol.observer] = function(observer) { var observe = getPrivate(this, observeName); var ctx = new AsyncGeneratorContext(observer); schedule(function() { return observe(ctx); }).then(function(value) { if (!ctx.done) { ctx.decoratedObserver.return(value); } }).catch(function(error) { if (!ctx.done) { ctx.decoratedObserver.throw(error); } }); return ctx.decoratedObserver; }; defineProperty(AsyncGeneratorFunctionPrototype.prototype, Symbol.observer, {enumerable: false}); function initAsyncGeneratorFunction(functionObject) { functionObject.prototype = create(AsyncGeneratorFunctionPrototype.prototype); functionObject.__proto__ = AsyncGeneratorFunctionPrototype; return functionObject; } function createAsyncGeneratorInstance(observe, functionObject) { for (var args = [], $__10 = 2; $__10 < arguments.length; $__10++) args[$__10 - 2] = arguments[$__10]; var object = create(functionObject.prototype); setPrivate(object, observeName, observe); return object; } function observeForEach(observe, next) { return new Promise(function(resolve, reject) { var generator = observe({ next: function(value) { return next.call(generator, value); }, throw: function(error) { reject(error); }, return: function(value) { resolve(value); } }); }); } function schedule(asyncF) { return Promise.resolve().then(asyncF); } var generator = Symbol(); var onDone = Symbol(); var DecoratedGenerator = function() { function DecoratedGenerator(_generator, _onDone) { this[generator] = _generator; this[onDone] = _onDone; } return ($traceurRuntime.createClass)(DecoratedGenerator, { next: function(value) { var result = this[generator].next(value); if (result !== undefined && result.done) { this[onDone].call(this); } return result; }, throw: function(error) { this[onDone].call(this); return this[generator].throw(error); }, return: function(value) { this[onDone].call(this); return this[generator].return(value); } }, {}); }(); function createDecoratedGenerator(generator, onDone) { return new DecoratedGenerator(generator, onDone); } Array.prototype[Symbol.observer] = function(observer) { var done = false; var decoratedObserver = createDecoratedGenerator(observer, function() { return done = true; }); var $__6 = true; var $__7 = false; var $__8 = undefined; try { for (var $__4 = void 0, $__3 = (this)[Symbol.iterator](); !($__6 = ($__4 = $__3.next()).done); $__6 = true) { var value = $__4.value; { decoratedObserver.next(value); if (done) { return; } } } } catch ($__9) { $__7 = true; $__8 = $__9; } finally { try { if (!$__6 && $__3.return != null) { $__3.return(); } } finally { if ($__7) { throw $__8; } } } decoratedObserver.return(); return decoratedObserver; }; defineProperty(Array.prototype, Symbol.observer, {enumerable: false}); return { get initAsyncGeneratorFunction() { return initAsyncGeneratorFunction; }, get createAsyncGeneratorInstance() { return createAsyncGeneratorInstance; }, get observeForEach() { return observeForEach; }, get schedule() { return schedule; }, get createDecoratedGenerator() { return createDecoratedGenerator; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/initAsyncGeneratorFunction.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/initAsyncGeneratorFunction.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/initAsyncGeneratorFunction.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.initAsyncGeneratorFunction; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/createAsyncGeneratorInstance.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/createAsyncGeneratorInstance.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/createAsyncGeneratorInstance.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.createAsyncGeneratorInstance; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/observeForEach.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/observeForEach.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/observeForEach.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.observeForEach; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/schedule.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/schedule.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/schedule.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.schedule; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/createDecoratedGenerator.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/createDecoratedGenerator.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/modules/createDecoratedGenerator.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_async_46_js__.createDecoratedGenerator; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/async.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/async.js"; var initAsyncGeneratorFunction = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/initAsyncGeneratorFunction.js", "traceur@0.0.112/src/runtime/async.js")).default; var createAsyncGeneratorInstance = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/createAsyncGeneratorInstance.js", "traceur@0.0.112/src/runtime/async.js")).default; var observeForEach = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/observeForEach.js", "traceur@0.0.112/src/runtime/async.js")).default; var schedule = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/schedule.js", "traceur@0.0.112/src/runtime/async.js")).default; var createDecoratedGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/createDecoratedGenerator.js", "traceur@0.0.112/src/runtime/async.js")).default; $traceurRuntime.initAsyncGeneratorFunction = initAsyncGeneratorFunction; $traceurRuntime.createAsyncGeneratorInstance = createAsyncGeneratorInstance; $traceurRuntime.observeForEach = observeForEach; $traceurRuntime.schedule = schedule; $traceurRuntime.createDecoratedGenerator = createDecoratedGenerator; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/generators.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/generators.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/modules/generators.js")), createPrivateSymbol = $__2.createPrivateSymbol, getPrivate = $__2.getPrivate, setPrivate = $__2.setPrivate; var $TypeError = TypeError; var $__1 = Object, create = $__1.create, defineProperties = $__1.defineProperties, defineProperty = $__1.defineProperty; function nonEnum(value) { return { configurable: true, enumerable: false, value: value, writable: true }; } var ST_NEWBORN = 0; var ST_EXECUTING = 1; var ST_SUSPENDED = 2; var ST_CLOSED = 3; var END_STATE = -2; var RETHROW_STATE = -3; function getInternalError(state) { return new Error('Traceur compiler bug: invalid state in state machine: ' + state); } var RETURN_SENTINEL = {}; function GeneratorContext() { this.state = 0; this.GState = ST_NEWBORN; this.storedException = undefined; this.finallyFallThrough = undefined; this.sent_ = undefined; this.returnValue = undefined; this.oldReturnValue = undefined; this.tryStack_ = []; } GeneratorContext.prototype = { pushTry: function(catchState, finallyState) { if (finallyState !== null) { var finallyFallThrough = null; for (var i = this.tryStack_.length - 1; i >= 0; i--) { if (this.tryStack_[i].catch !== undefined) { finallyFallThrough = this.tryStack_[i].catch; break; } } if (finallyFallThrough === null) finallyFallThrough = RETHROW_STATE; this.tryStack_.push({ finally: finallyState, finallyFallThrough: finallyFallThrough }); } if (catchState !== null) { this.tryStack_.push({catch: catchState}); } }, popTry: function() { this.tryStack_.pop(); }, maybeUncatchable: function() { if (this.storedException === RETURN_SENTINEL) { throw RETURN_SENTINEL; } }, get sent() { this.maybeThrow(); return this.sent_; }, set sent(v) { this.sent_ = v; }, get sentIgnoreThrow() { return this.sent_; }, maybeThrow: function() { if (this.action === 'throw') { this.action = 'next'; throw this.sent_; } }, end: function() { switch (this.state) { case END_STATE: return this; case RETHROW_STATE: throw this.storedException; default: throw getInternalError(this.state); } }, handleException: function(ex) { this.GState = ST_CLOSED; this.state = END_STATE; throw ex; }, wrapYieldStar: function(iterator) { var ctx = this; return { next: function(v) { return iterator.next(v); }, throw: function(e) { var result; if (e === RETURN_SENTINEL) { if (iterator.return) { result = iterator.return(ctx.returnValue); if (!result.done) { ctx.returnValue = ctx.oldReturnValue; return result; } ctx.returnValue = result.value; } throw e; } if (iterator.throw) { return iterator.throw(e); } iterator.return && iterator.return(); throw $TypeError('Inner iterator does not have a throw method'); } }; } }; function nextOrThrow(ctx, moveNext, action, x) { switch (ctx.GState) { case ST_EXECUTING: throw new Error(("\"" + action + "\" on executing generator")); case ST_CLOSED: if (action == 'next') { return { value: undefined, done: true }; } if (x === RETURN_SENTINEL) { return { value: ctx.returnValue, done: true }; } throw x; case ST_NEWBORN: if (action === 'throw') { ctx.GState = ST_CLOSED; if (x === RETURN_SENTINEL) { return { value: ctx.returnValue, done: true }; } throw x; } if (x !== undefined) throw $TypeError('Sent value to newborn generator'); case ST_SUSPENDED: ctx.GState = ST_EXECUTING; ctx.action = action; ctx.sent = x; var value; try { value = moveNext(ctx); } catch (ex) { if (ex === RETURN_SENTINEL) { value = ctx; } else { throw ex; } } var done = value === ctx; if (done) value = ctx.returnValue; ctx.GState = done ? ST_CLOSED : ST_SUSPENDED; return { value: value, done: done }; } } var ctxName = createPrivateSymbol(); var moveNextName = createPrivateSymbol(); function GeneratorFunction() {} function GeneratorFunctionPrototype() {} GeneratorFunction.prototype = GeneratorFunctionPrototype; defineProperty(GeneratorFunctionPrototype, 'constructor', nonEnum(GeneratorFunction)); GeneratorFunctionPrototype.prototype = { constructor: GeneratorFunctionPrototype, next: function(v) { return nextOrThrow(getPrivate(this, ctxName), getPrivate(this, moveNextName), 'next', v); }, throw: function(v) { return nextOrThrow(getPrivate(this, ctxName), getPrivate(this, moveNextName), 'throw', v); }, return: function(v) { var ctx = getPrivate(this, ctxName); ctx.oldReturnValue = ctx.returnValue; ctx.returnValue = v; return nextOrThrow(ctx, getPrivate(this, moveNextName), 'throw', RETURN_SENTINEL); } }; defineProperties(GeneratorFunctionPrototype.prototype, { constructor: {enumerable: false}, next: {enumerable: false}, throw: {enumerable: false}, return: {enumerable: false} }); Object.defineProperty(GeneratorFunctionPrototype.prototype, Symbol.iterator, nonEnum(function() { return this; })); function createGeneratorInstance(innerFunction, functionObject, self) { var moveNext = getMoveNext(innerFunction, self); var ctx = new GeneratorContext(); var object = create(functionObject.prototype); setPrivate(object, ctxName, ctx); setPrivate(object, moveNextName, moveNext); return object; } function initGeneratorFunction(functionObject) { functionObject.prototype = create(GeneratorFunctionPrototype.prototype); functionObject.__proto__ = GeneratorFunctionPrototype; return functionObject; } function AsyncFunctionContext() { GeneratorContext.call(this); this.err = undefined; var ctx = this; ctx.result = new Promise(function(resolve, reject) { ctx.resolve = resolve; ctx.reject = reject; }); } AsyncFunctionContext.prototype = create(GeneratorContext.prototype); AsyncFunctionContext.prototype.end = function() { switch (this.state) { case END_STATE: this.resolve(this.returnValue); break; case RETHROW_STATE: this.reject(this.storedException); break; default: this.reject(getInternalError(this.state)); } }; AsyncFunctionContext.prototype.handleException = function() { this.state = RETHROW_STATE; }; function asyncWrap(innerFunction, self) { var moveNext = getMoveNext(innerFunction, self); var ctx = new AsyncFunctionContext(); ctx.createCallback = function(newState) { return function(value) { ctx.state = newState; ctx.value = value; moveNext(ctx); }; }; ctx.errback = function(err) { handleCatch(ctx, err); moveNext(ctx); }; moveNext(ctx); return ctx.result; } function getMoveNext(innerFunction, self) { return function(ctx) { while (true) { try { return innerFunction.call(self, ctx); } catch (ex) { handleCatch(ctx, ex); } } }; } function handleCatch(ctx, ex) { ctx.storedException = ex; var last = ctx.tryStack_[ctx.tryStack_.length - 1]; if (!last) { ctx.handleException(ex); return; } ctx.state = last.catch !== undefined ? last.catch : last.finally; if (last.finallyFallThrough !== undefined) ctx.finallyFallThrough = last.finallyFallThrough; } return { get createGeneratorInstance() { return createGeneratorInstance; }, get initGeneratorFunction() { return initGeneratorFunction; }, get asyncWrap() { return asyncWrap; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/asyncWrap.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/asyncWrap.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generators.js", "traceur@0.0.112/src/runtime/modules/asyncWrap.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__.asyncWrap; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/initGeneratorFunction.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/initGeneratorFunction.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generators.js", "traceur@0.0.112/src/runtime/modules/initGeneratorFunction.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__.initGeneratorFunction; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/createGeneratorInstance.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/createGeneratorInstance.js"; var $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generators.js", "traceur@0.0.112/src/runtime/modules/createGeneratorInstance.js")); return {get default() { return $__traceur_64_0_46_0_46_112_47_src_47_runtime_47_modules_47_generators_46_js__.createGeneratorInstance; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/generators.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/generators.js"; var asyncWrap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/asyncWrap.js", "traceur@0.0.112/src/runtime/generators.js")).default; var initGeneratorFunction = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/initGeneratorFunction.js", "traceur@0.0.112/src/runtime/generators.js")).default; var createGeneratorInstance = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/createGeneratorInstance.js", "traceur@0.0.112/src/runtime/generators.js")).default; $traceurRuntime.asyncWrap = asyncWrap; $traceurRuntime.initGeneratorFunction = initGeneratorFunction; $traceurRuntime.createGeneratorInstance = createGeneratorInstance; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/spawn.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/spawn.js"; function spawn(self, args, gen) { return new Promise(function(resolve, reject) { function fulfill(v) { try { step(gen.next(v)); } catch (e) { reject(e); } } function rejected(v) { try { step(gen.throw(v)); } catch (e) { reject(e); } } function step(res) { if (res.done) { resolve(res.value); } else { Promise.resolve(res.value).then(fulfill, rejected); } } step((gen = gen.apply(self, args)).next()); }); } return {get default() { return spawn; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/spawn.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/spawn.js"; var spawn = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/spawn.js", "traceur@0.0.112/src/runtime/spawn.js")).default; $traceurRuntime.spawn = spawn; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/getTemplateObject.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/getTemplateObject.js"; var $__1 = Object, defineProperty = $__1.defineProperty, freeze = $__1.freeze; var slice = Array.prototype.slice; var map = Object.create(null); function getTemplateObject(raw) { var cooked = arguments[1]; var key = raw.join('${}'); var templateObject = map[key]; if (templateObject) return templateObject; if (!cooked) { cooked = slice.call(raw); } return map[key] = freeze(defineProperty(cooked, 'raw', {value: freeze(raw)})); } return {get default() { return getTemplateObject; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/template.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/template.js"; var getTemplateObject = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/getTemplateObject.js", "traceur@0.0.112/src/runtime/template.js")).default; $traceurRuntime.getTemplateObject = getTemplateObject; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/modules/spreadProperties.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/modules/spreadProperties.js"; var $__1 = Object, defineProperty = $__1.defineProperty, getOwnPropertyNames = $__1.getOwnPropertyNames, getOwnPropertySymbols = $__1.getOwnPropertySymbols, propertyIsEnumerable = $__1.propertyIsEnumerable; function createDataProperty(o, p, v) { defineProperty(o, p, { configurable: true, enumerable: true, value: v, writable: true }); } function copyDataProperties(target, source) { if (source == null) { return; } var copy = function(keys) { for (var i = 0; i < keys.length; i++) { var nextKey = keys[i]; if (propertyIsEnumerable.call(source, nextKey)) { var propValue = source[nextKey]; createDataProperty(target, nextKey, propValue); } } }; copy(getOwnPropertyNames(source)); copy(getOwnPropertySymbols(source)); } var $__default = function() { var target = arguments[0]; for (var i = 1; i < arguments.length; i++) { copyDataProperties(target, arguments[i]); } return target; }; return {get default() { return $__default; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/jsx.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/jsx.js"; var spreadProperties = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./modules/spreadProperties.js", "traceur@0.0.112/src/runtime/jsx.js")).default; $traceurRuntime.spreadProperties = spreadProperties; return {}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/runtime-modules.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/runtime-modules.js"; $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./symbols.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./classes.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./exportStar.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./properTailCalls.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./relativeRequire.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./spread.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./destructuring.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./async.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generators.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./spawn.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./template.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./jsx.js", "traceur@0.0.112/src/runtime/runtime-modules.js")); return {}; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/runtime-modules.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/frozen-data.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/frozen-data.js"; function findIndex(arr, key) { for (var i = 0; i < arr.length; i += 2) { if (arr[i] === key) { return i; } } return -1; } function setFrozen(arr, key, val) { var i = findIndex(arr, key); if (i === -1) { arr.push(key, val); } } function getFrozen(arr, key) { var i = findIndex(arr, key); if (i !== -1) { return arr[i + 1]; } return undefined; } function hasFrozen(arr, key) { return findIndex(arr, key) !== -1; } function deleteFrozen(arr, key) { var i = findIndex(arr, key); if (i !== -1) { arr.splice(i, 2); return true; } return false; } return { get setFrozen() { return setFrozen; }, get getFrozen() { return getFrozen; }, get hasFrozen() { return hasFrozen; }, get deleteFrozen() { return deleteFrozen; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/utils.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/utils.js"; var $ceil = Math.ceil; var $floor = Math.floor; var $isFinite = isFinite; var $isNaN = isNaN; var $pow = Math.pow; var $min = Math.min; var $TypeError = TypeError; var $Object = Object; function toObject(x) { if (x == null) { throw $TypeError(); } return $Object(x); } function toUint32(x) { return x >>> 0; } function isObject(x) { return x && (typeof x === 'object' || typeof x === 'function'); } function isCallable(x) { return typeof x === 'function'; } function isNumber(x) { return typeof x === 'number'; } function toInteger(x) { x = +x; if ($isNaN(x)) return 0; if (x === 0 || !$isFinite(x)) return x; return x > 0 ? $floor(x) : $ceil(x); } var MAX_SAFE_LENGTH = $pow(2, 53) - 1; function toLength(x) { var len = toInteger(x); return len < 0 ? 0 : $min(len, MAX_SAFE_LENGTH); } function checkIterable(x) { return !isObject(x) ? undefined : x[Symbol.iterator]; } function isConstructor(x) { return isCallable(x); } function createIteratorResultObject(value, done) { return { value: value, done: done }; } function maybeDefine(object, name, descr) { if (!(name in object)) { Object.defineProperty(object, name, descr); } } function maybeDefineMethod(object, name, value) { maybeDefine(object, name, { value: value, configurable: true, enumerable: false, writable: true }); } function maybeDefineConst(object, name, value) { maybeDefine(object, name, { value: value, configurable: false, enumerable: false, writable: false }); } function maybeAddFunctions(object, functions) { for (var i = 0; i < functions.length; i += 2) { var name = functions[i]; var value = functions[i + 1]; maybeDefineMethod(object, name, value); } } function maybeAddConsts(object, consts) { for (var i = 0; i < consts.length; i += 2) { var name = consts[i]; var value = consts[i + 1]; maybeDefineConst(object, name, value); } } function maybeAddIterator(object, func, Symbol) { if (!Symbol || !Symbol.iterator || object[Symbol.iterator]) return; if (object['@@iterator']) func = object['@@iterator']; Object.defineProperty(object, Symbol.iterator, { value: func, configurable: true, enumerable: false, writable: true }); } var polyfills = []; function registerPolyfill(func) { polyfills.push(func); } function polyfillAll(global) { polyfills.forEach(function(f) { return f(global); }); } return { get toObject() { return toObject; }, get toUint32() { return toUint32; }, get isObject() { return isObject; }, get isCallable() { return isCallable; }, get isNumber() { return isNumber; }, get toInteger() { return toInteger; }, get toLength() { return toLength; }, get checkIterable() { return checkIterable; }, get isConstructor() { return isConstructor; }, get createIteratorResultObject() { return createIteratorResultObject; }, get maybeDefine() { return maybeDefine; }, get maybeDefineMethod() { return maybeDefineMethod; }, get maybeDefineConst() { return maybeDefineConst; }, get maybeAddFunctions() { return maybeAddFunctions; }, get maybeAddConsts() { return maybeAddConsts; }, get maybeAddIterator() { return maybeAddIterator; }, get registerPolyfill() { return registerPolyfill; }, get polyfillAll() { return polyfillAll; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Map.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Map.js"; var $__16 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/polyfills/Map.js")), createPrivateSymbol = $__16.createPrivateSymbol, getPrivate = $__16.getPrivate, setPrivate = $__16.setPrivate; var $__17 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../frozen-data.js", "traceur@0.0.112/src/runtime/polyfills/Map.js")), deleteFrozen = $__17.deleteFrozen, getFrozen = $__17.getFrozen, setFrozen = $__17.setFrozen; var $__18 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Map.js")), isObject = $__18.isObject, registerPolyfill = $__18.registerPolyfill; var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/polyfills/Map.js")).default; var $__9 = Object, defineProperty = $__9.defineProperty, getOwnPropertyDescriptor = $__9.getOwnPropertyDescriptor, hasOwnProperty = $__9.hasOwnProperty, isExtensible = $__9.isExtensible; var deletedSentinel = {}; var counter = 1; var hashCodeName = createPrivateSymbol(); function getHashCodeForObject(obj) { return getPrivate(obj, hashCodeName); } function getOrSetHashCodeForObject(obj) { var hash = getHashCodeForObject(obj); if (!hash) { hash = counter++; setPrivate(obj, hashCodeName, hash); } return hash; } function lookupIndex(map, key) { if (typeof key === 'string') { return map.stringIndex_[key]; } if (isObject(key)) { if (!isExtensible(key)) { return getFrozen(map.frozenData_, key); } var hc = getHashCodeForObject(key); if (hc === undefined) { return undefined; } return map.objectIndex_[hc]; } return map.primitiveIndex_[key]; } function initMap(map) { map.entries_ = []; map.objectIndex_ = Object.create(null); map.stringIndex_ = Object.create(null); map.primitiveIndex_ = Object.create(null); map.frozenData_ = []; map.deletedCount_ = 0; } var Map = function() { function Map() { var $__11, $__12; var iterable = arguments[0]; if (!isObject(this)) throw new TypeError('Map called on incompatible type'); if (hasOwnProperty.call(this, 'entries_')) { throw new TypeError('Map can not be reentrantly initialised'); } initMap(this); if (iterable !== null && iterable !== undefined) { var $__5 = true; var $__6 = false; var $__7 = undefined; try { for (var $__3 = void 0, $__2 = (iterable)[Symbol.iterator](); !($__5 = ($__3 = $__2.next()).done); $__5 = true) { var $__10 = $__3.value, key = ($__11 = $__10[Symbol.iterator](), ($__12 = $__11.next()).done ? void 0 : $__12.value), value = ($__12 = $__11.next()).done ? void 0 : $__12.value; { this.set(key, value); } } } catch ($__8) { $__6 = true; $__7 = $__8; } finally { try { if (!$__5 && $__2.return != null) { $__2.return(); } } finally { if ($__6) { throw $__7; } } } } } return ($traceurRuntime.createClass)(Map, { get size() { return this.entries_.length / 2 - this.deletedCount_; }, get: function(key) { var index = lookupIndex(this, key); if (index !== undefined) { return this.entries_[index + 1]; } }, set: function(key, value) { var index = lookupIndex(this, key); if (index !== undefined) { this.entries_[index + 1] = value; } else { index = this.entries_.length; this.entries_[index] = key; this.entries_[index + 1] = value; if (isObject(key)) { if (!isExtensible(key)) { setFrozen(this.frozenData_, key, index); } else { var hash = getOrSetHashCodeForObject(key); this.objectIndex_[hash] = index; } } else if (typeof key === 'string') { this.stringIndex_[key] = index; } else { this.primitiveIndex_[key] = index; } } return this; }, has: function(key) { return lookupIndex(this, key) !== undefined; }, delete: function(key) { var index = lookupIndex(this, key); if (index === undefined) { return false; } this.entries_[index] = deletedSentinel; this.entries_[index + 1] = undefined; this.deletedCount_++; if (isObject(key)) { if (!isExtensible(key)) { deleteFrozen(this.frozenData_, key); } else { var hash = getHashCodeForObject(key); delete this.objectIndex_[hash]; } } else if (typeof key === 'string') { delete this.stringIndex_[key]; } else { delete this.primitiveIndex_[key]; } return true; }, clear: function() { initMap(this); }, forEach: function(callbackFn) { var thisArg = arguments[1]; for (var i = 0; i < this.entries_.length; i += 2) { var key = this.entries_[i]; var value = this.entries_[i + 1]; if (key === deletedSentinel) continue; callbackFn.call(thisArg, value, key, this); } }, entries: $traceurRuntime.initGeneratorFunction(function $__13() { var i, key, value; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { case 0: i = 0; $ctx.state = 12; break; case 12: $ctx.state = (i < this.entries_.length) ? 8 : -2; break; case 4: i += 2; $ctx.state = 12; break; case 8: key = this.entries_[i]; value = this.entries_[i + 1]; $ctx.state = 9; break; case 9: $ctx.state = (key === deletedSentinel) ? 4 : 6; break; case 6: $ctx.state = 2; return [key, value]; case 2: $ctx.maybeThrow(); $ctx.state = 4; break; default: return $ctx.end(); } }, $__13, this); }), keys: $traceurRuntime.initGeneratorFunction(function $__14() { var i, key, value; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { case 0: i = 0; $ctx.state = 12; break; case 12: $ctx.state = (i < this.entries_.length) ? 8 : -2; break; case 4: i += 2; $ctx.state = 12; break; case 8: key = this.entries_[i]; value = this.entries_[i + 1]; $ctx.state = 9; break; case 9: $ctx.state = (key === deletedSentinel) ? 4 : 6; break; case 6: $ctx.state = 2; return key; case 2: $ctx.maybeThrow(); $ctx.state = 4; break; default: return $ctx.end(); } }, $__14, this); }), values: $traceurRuntime.initGeneratorFunction(function $__15() { var i, key, value; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { case 0: i = 0; $ctx.state = 12; break; case 12: $ctx.state = (i < this.entries_.length) ? 8 : -2; break; case 4: i += 2; $ctx.state = 12; break; case 8: key = this.entries_[i]; value = this.entries_[i + 1]; $ctx.state = 9; break; case 9: $ctx.state = (key === deletedSentinel) ? 4 : 6; break; case 6: $ctx.state = 2; return value; case 2: $ctx.maybeThrow(); $ctx.state = 4; break; default: return $ctx.end(); } }, $__15, this); }) }, {}); }(); defineProperty(Map.prototype, Symbol.iterator, { configurable: true, writable: true, value: Map.prototype.entries }); function needsPolyfill(global) { var $__10 = global, Map = $__10.Map, Symbol = $__10.Symbol; if (!Map || !hasNativeSymbol() || !Map.prototype[Symbol.iterator] || !Map.prototype.entries) { return true; } try { return new Map([[]]).size !== 1; } catch (e) { return false; } } function polyfillMap(global) { if (needsPolyfill(global)) { global.Map = Map; } } registerPolyfill(polyfillMap); return { get Map() { return Map; }, get polyfillMap() { return polyfillMap; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Map.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Set.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Set.js"; var $__18 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Set.js")), isObject = $__18.isObject, registerPolyfill = $__18.registerPolyfill; var Map = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Map.js", "traceur@0.0.112/src/runtime/polyfills/Set.js")).Map; var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/polyfills/Set.js")).default; var hasOwnProperty = Object.prototype.hasOwnProperty; var Set = function() { function Set() { var iterable = arguments[0]; if (!isObject(this)) throw new TypeError('Set called on incompatible type'); if (hasOwnProperty.call(this, 'map_')) { throw new TypeError('Set can not be reentrantly initialised'); } this.map_ = new Map(); if (iterable !== null && iterable !== undefined) { var $__6 = true; var $__7 = false; var $__8 = undefined; try { for (var $__4 = void 0, $__3 = (iterable)[Symbol.iterator](); !($__6 = ($__4 = $__3.next()).done); $__6 = true) { var item = $__4.value; { this.add(item); } } } catch ($__9) { $__7 = true; $__8 = $__9; } finally { try { if (!$__6 && $__3.return != null) { $__3.return(); } } finally { if ($__7) { throw $__8; } } } } } return ($traceurRuntime.createClass)(Set, { get size() { return this.map_.size; }, has: function(key) { return this.map_.has(key); }, add: function(key) { this.map_.set(key, key); return this; }, delete: function(key) { return this.map_.delete(key); }, clear: function() { return this.map_.clear(); }, forEach: function(callbackFn) { var thisArg = arguments[1]; var $__2 = this; return this.map_.forEach(function(value, key) { callbackFn.call(thisArg, key, key, $__2); }); }, values: $traceurRuntime.initGeneratorFunction(function $__12() { var $__13, $__14; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { case 0: $__13 = $ctx.wrapYieldStar(this.map_.keys()[Symbol.iterator]()); $ctx.sent = void 0; $ctx.action = 'next'; $ctx.state = 12; break; case 12: $__14 = $__13[$ctx.action]($ctx.sentIgnoreThrow); $ctx.state = 9; break; case 9: $ctx.state = ($__14.done) ? 3 : 2; break; case 3: $ctx.sent = $__14.value; $ctx.state = -2; break; case 2: $ctx.state = 12; return $__14.value; default: return $ctx.end(); } }, $__12, this); }), entries: $traceurRuntime.initGeneratorFunction(function $__15() { var $__16, $__17; return $traceurRuntime.createGeneratorInstance(function($ctx) { while (true) switch ($ctx.state) { case 0: $__16 = $ctx.wrapYieldStar(this.map_.entries()[Symbol.iterator]()); $ctx.sent = void 0; $ctx.action = 'next'; $ctx.state = 12; break; case 12: $__17 = $__16[$ctx.action]($ctx.sentIgnoreThrow); $ctx.state = 9; break; case 9: $ctx.state = ($__17.done) ? 3 : 2; break; case 3: $ctx.sent = $__17.value; $ctx.state = -2; break; case 2: $ctx.state = 12; return $__17.value; default: return $ctx.end(); } }, $__15, this); }) }, {}); }(); Object.defineProperty(Set.prototype, Symbol.iterator, { configurable: true, writable: true, value: Set.prototype.values }); Object.defineProperty(Set.prototype, 'keys', { configurable: true, writable: true, value: Set.prototype.values }); function needsPolyfill(global) { var $__11 = global, Set = $__11.Set, Symbol = $__11.Symbol; if (!Set || !hasNativeSymbol() || !Set.prototype[Symbol.iterator] || !Set.prototype.values) { return true; } try { return new Set([1]).size !== 1; } catch (e) { return false; } } function polyfillSet(global) { if (needsPolyfill(global)) { global.Set = Set; } } registerPolyfill(polyfillSet); return { get Set() { return Set; }, get polyfillSet() { return polyfillSet; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Set.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/node_modules/rsvp/lib/rsvp/asap.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/node_modules/rsvp/lib/rsvp/asap.js"; var len = 0; var toString = {}.toString; var vertxNext; function asap(callback, arg) { queue[len] = callback; queue[len + 1] = arg; len += 2; if (len === 2) { scheduleFlush(); } } var browserWindow = (typeof window !== 'undefined') ? window : undefined; var browserGlobal = browserWindow || {}; var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; function useNextTick() { var nextTick = process.nextTick; var version = process.versions.node.match(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/); if (Array.isArray(version) && version[1] === '0' && version[2] === '10') { nextTick = setImmediate; } return function() { nextTick(flush); }; } function useVertxTimer() { return function() { vertxNext(flush); }; } function useMutationObserver() { var iterations = 0; var observer = new BrowserMutationObserver(flush); var node = document.createTextNode(''); observer.observe(node, {characterData: true}); return function() { node.data = (iterations = ++iterations % 2); }; } function useMessageChannel() { var channel = new MessageChannel(); channel.port1.onmessage = flush; return function() { channel.port2.postMessage(0); }; } function useSetTimeout() { return function() { setTimeout(flush, 1); }; } var queue = new Array(1000); function flush() { for (var i = 0; i < len; i += 2) { var callback = queue[i]; var arg = queue[i + 1]; callback(arg); queue[i] = undefined; queue[i + 1] = undefined; } len = 0; } function attemptVertex() { try { var r = require; var vertx = r('vertx'); vertxNext = vertx.runOnLoop || vertx.runOnContext; return useVertxTimer(); } catch (e) { return useSetTimeout(); } } var scheduleFlush; if (isNode) { scheduleFlush = useNextTick(); } else if (BrowserMutationObserver) { scheduleFlush = useMutationObserver(); } else if (isWorker) { scheduleFlush = useMessageChannel(); } else if (browserWindow === undefined && typeof require === 'function') { scheduleFlush = attemptVertex(); } else { scheduleFlush = useSetTimeout(); } return {get default() { return asap; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Promise.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Promise.js"; var async = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../../node_modules/rsvp/lib/rsvp/asap.js", "traceur@0.0.112/src/runtime/polyfills/Promise.js")).default; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Promise.js")), isObject = $__9.isObject, registerPolyfill = $__9.registerPolyfill; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/polyfills/Promise.js")), createPrivateSymbol = $__10.createPrivateSymbol, getPrivate = $__10.getPrivate, setPrivate = $__10.setPrivate; var promiseRaw = {}; function isPromise(x) { return x && typeof x === 'object' && x.status_ !== undefined; } function idResolveHandler(x) { return x; } function idRejectHandler(x) { throw x; } function chain(promise) { var onResolve = arguments[1] !== (void 0) ? arguments[1] : idResolveHandler; var onReject = arguments[2] !== (void 0) ? arguments[2] : idRejectHandler; var deferred = getDeferred(promise.constructor); switch (promise.status_) { case undefined: throw TypeError; case 0: promise.onResolve_.push(onResolve, deferred); promise.onReject_.push(onReject, deferred); break; case +1: promiseEnqueue(promise.value_, [onResolve, deferred]); break; case -1: promiseEnqueue(promise.value_, [onReject, deferred]); break; } return deferred.promise; } function getDeferred(C) { if (this === $Promise) { var promise = promiseInit(new $Promise(promiseRaw)); return { promise: promise, resolve: function(x) { promiseResolve(promise, x); }, reject: function(r) { promiseReject(promise, r); } }; } else { var result = {}; result.promise = new C(function(resolve, reject) { result.resolve = resolve; result.reject = reject; }); return result; } } function promiseSet(promise, status, value, onResolve, onReject) { promise.status_ = status; promise.value_ = value; promise.onResolve_ = onResolve; promise.onReject_ = onReject; return promise; } function promiseInit(promise) { return promiseSet(promise, 0, undefined, [], []); } var Promise = function() { function Promise(resolver) { if (resolver === promiseRaw) return; if (typeof resolver !== 'function') throw new TypeError; var promise = promiseInit(this); try { resolver(function(x) { promiseResolve(promise, x); }, function(r) { promiseReject(promise, r); }); } catch (e) { promiseReject(promise, e); } } return ($traceurRuntime.createClass)(Promise, { catch: function(onReject) { return this.then(undefined, onReject); }, then: function(onResolve, onReject) { if (typeof onResolve !== 'function') onResolve = idResolveHandler; if (typeof onReject !== 'function') onReject = idRejectHandler; var that = this; var constructor = this.constructor; return chain(this, function(x) { x = promiseCoerce(constructor, x); return x === that ? onReject(new TypeError) : isPromise(x) ? x.then(onResolve, onReject) : onResolve(x); }, onReject); } }, { resolve: function(x) { if (this === $Promise) { if (isPromise(x)) { return x; } return promiseSet(new $Promise(promiseRaw), +1, x); } else { return new this(function(resolve, reject) { resolve(x); }); } }, reject: function(r) { if (this === $Promise) { return promiseSet(new $Promise(promiseRaw), -1, r); } else { return new this(function(resolve, reject) { reject(r); }); } }, all: function(values) { var deferred = getDeferred(this); var resolutions = []; try { var makeCountdownFunction = function(i) { return function(x) { resolutions[i] = x; if (--count === 0) deferred.resolve(resolutions); }; }; var count = 0; var i = 0; var $__4 = true; var $__5 = false; var $__6 = undefined; try { for (var $__2 = void 0, $__1 = (values)[Symbol.iterator](); !($__4 = ($__2 = $__1.next()).done); $__4 = true) { var value = $__2.value; { var countdownFunction = makeCountdownFunction(i); this.resolve(value).then(countdownFunction, function(r) { deferred.reject(r); }); ++i; ++count; } } } catch ($__7) { $__5 = true; $__6 = $__7; } finally { try { if (!$__4 && $__1.return != null) { $__1.return(); } } finally { if ($__5) { throw $__6; } } } if (count === 0) { deferred.resolve(resolutions); } } catch (e) { deferred.reject(e); } return deferred.promise; }, race: function(values) { var deferred = getDeferred(this); try { for (var i = 0; i < values.length; i++) { this.resolve(values[i]).then(function(x) { deferred.resolve(x); }, function(r) { deferred.reject(r); }); } } catch (e) { deferred.reject(e); } return deferred.promise; } }); }(); var $Promise = Promise; var $PromiseReject = $Promise.reject; function promiseResolve(promise, x) { promiseDone(promise, +1, x, promise.onResolve_); } function promiseReject(promise, r) { promiseDone(promise, -1, r, promise.onReject_); } function promiseDone(promise, status, value, reactions) { if (promise.status_ !== 0) return; promiseEnqueue(value, reactions); promiseSet(promise, status, value); } function promiseEnqueue(value, tasks) { async(function() { for (var i = 0; i < tasks.length; i += 2) { promiseHandle(value, tasks[i], tasks[i + 1]); } }); } function promiseHandle(value, handler, deferred) { try { var result = handler(value); if (result === deferred.promise) throw new TypeError; else if (isPromise(result)) chain(result, deferred.resolve, deferred.reject); else deferred.resolve(result); } catch (e) { try { deferred.reject(e); } catch (e) {} } } var thenableSymbol = createPrivateSymbol(); function promiseCoerce(constructor, x) { if (!isPromise(x) && isObject(x)) { var then; try { then = x.then; } catch (r) { var promise = $PromiseReject.call(constructor, r); setPrivate(x, thenableSymbol, promise); return promise; } if (typeof then === 'function') { var p = getPrivate(x, thenableSymbol); if (p) { return p; } else { var deferred = getDeferred(constructor); setPrivate(x, thenableSymbol, deferred.promise); try { then.call(x, deferred.resolve, deferred.reject); } catch (r) { deferred.reject(r); } return deferred.promise; } } } return x; } function polyfillPromise(global) { if (!global.Promise) global.Promise = Promise; } registerPolyfill(polyfillPromise); return { get Promise() { return Promise; }, get polyfillPromise() { return polyfillPromise; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Promise.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/StringIterator.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/StringIterator.js"; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/StringIterator.js")), createIteratorResultObject = $__3.createIteratorResultObject, isObject = $__3.isObject; var hasOwnProperty = Object.prototype.hasOwnProperty; var iteratedString = Symbol('iteratedString'); var stringIteratorNextIndex = Symbol('stringIteratorNextIndex'); var StringIterator = function() { var $__1; function StringIterator() {} return ($traceurRuntime.createClass)(StringIterator, ($__1 = {}, Object.defineProperty($__1, "next", { value: function() { var o = this; if (!isObject(o) || !hasOwnProperty.call(o, iteratedString)) { throw new TypeError('this must be a StringIterator object'); } var s = o[iteratedString]; if (s === undefined) { return createIteratorResultObject(undefined, true); } var position = o[stringIteratorNextIndex]; var len = s.length; if (position >= len) { o[iteratedString] = undefined; return createIteratorResultObject(undefined, true); } var first = s.charCodeAt(position); var resultString; if (first < 0xD800 || first > 0xDBFF || position + 1 === len) { resultString = String.fromCharCode(first); } else { var second = s.charCodeAt(position + 1); if (second < 0xDC00 || second > 0xDFFF) { resultString = String.fromCharCode(first); } else { resultString = String.fromCharCode(first) + String.fromCharCode(second); } } o[stringIteratorNextIndex] = position + resultString.length; return createIteratorResultObject(resultString, false); }, configurable: true, enumerable: true, writable: true }), Object.defineProperty($__1, Symbol.iterator, { value: function() { return this; }, configurable: true, enumerable: true, writable: true }), $__1), {}); }(); function createStringIterator(string) { var s = String(string); var iterator = Object.create(StringIterator.prototype); iterator[iteratedString] = s; iterator[stringIteratorNextIndex] = 0; return iterator; } return {get createStringIterator() { return createStringIterator; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/String.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/String.js"; var checkObjectCoercible = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../checkObjectCoercible.js", "traceur@0.0.112/src/runtime/polyfills/String.js")).default; var createStringIterator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./StringIterator.js", "traceur@0.0.112/src/runtime/polyfills/String.js")).createStringIterator; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/String.js")), maybeAddFunctions = $__3.maybeAddFunctions, maybeAddIterator = $__3.maybeAddIterator, registerPolyfill = $__3.registerPolyfill; var $toString = Object.prototype.toString; var $indexOf = String.prototype.indexOf; var $lastIndexOf = String.prototype.lastIndexOf; function startsWith(search) { var string = String(this); if (this == null || $toString.call(search) == '[object RegExp]') { throw TypeError(); } var stringLength = string.length; var searchString = String(search); var searchLength = searchString.length; var position = arguments.length > 1 ? arguments[1] : undefined; var pos = position ? Number(position) : 0; if (isNaN(pos)) { pos = 0; } var start = Math.min(Math.max(pos, 0), stringLength); return $indexOf.call(string, searchString, pos) == start; } function endsWith(search) { var string = String(this); if (this == null || $toString.call(search) == '[object RegExp]') { throw TypeError(); } var stringLength = string.length; var searchString = String(search); var searchLength = searchString.length; var pos = stringLength; if (arguments.length > 1) { var position = arguments[1]; if (position !== undefined) { pos = position ? Number(position) : 0; if (isNaN(pos)) { pos = 0; } } } var end = Math.min(Math.max(pos, 0), stringLength); var start = end - searchLength; if (start < 0) { return false; } return $lastIndexOf.call(string, searchString, start) == start; } function includes(search) { if (this == null) { throw TypeError(); } var string = String(this); if (search && $toString.call(search) == '[object RegExp]') { throw TypeError(); } var stringLength = string.length; var searchString = String(search); var searchLength = searchString.length; var position = arguments.length > 1 ? arguments[1] : undefined; var pos = position ? Number(position) : 0; if (pos != pos) { pos = 0; } var start = Math.min(Math.max(pos, 0), stringLength); if (searchLength + start > stringLength) { return false; } return $indexOf.call(string, searchString, pos) != -1; } function repeat(count) { if (this == null) { throw TypeError(); } var string = String(this); var n = count ? Number(count) : 0; if (isNaN(n)) { n = 0; } if (n < 0 || n == Infinity) { throw RangeError(); } if (n == 0) { return ''; } var result = ''; while (n--) { result += string; } return result; } function codePointAt(position) { if (this == null) { throw TypeError(); } var string = String(this); var size = string.length; var index = position ? Number(position) : 0; if (isNaN(index)) { index = 0; } if (index < 0 || index >= size) { return undefined; } var first = string.charCodeAt(index); var second; if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) { second = string.charCodeAt(index + 1); if (second >= 0xDC00 && second <= 0xDFFF) { return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; } } return first; } function raw(callsite) { var raw = callsite.raw; var len = raw.length >>> 0; if (len === 0) return ''; var s = ''; var i = 0; while (true) { s += raw[i]; if (i + 1 === len) return s; s += arguments[++i]; } } function fromCodePoint(_) { var codeUnits = []; var floor = Math.floor; var highSurrogate; var lowSurrogate; var index = -1; var length = arguments.length; if (!length) { return ''; } while (++index < length) { var codePoint = Number(arguments[index]); if (!isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint) { throw RangeError('Invalid code point: ' + codePoint); } if (codePoint <= 0xFFFF) { codeUnits.push(codePoint); } else { codePoint -= 0x10000; highSurrogate = (codePoint >> 10) + 0xD800; lowSurrogate = (codePoint % 0x400) + 0xDC00; codeUnits.push(highSurrogate, lowSurrogate); } } return String.fromCharCode.apply(null, codeUnits); } function stringPrototypeIterator() { var o = checkObjectCoercible(this); var s = String(o); return createStringIterator(s); } function polyfillString(global) { var String = global.String; maybeAddFunctions(String.prototype, ['codePointAt', codePointAt, 'endsWith', endsWith, 'includes', includes, 'repeat', repeat, 'startsWith', startsWith]); maybeAddFunctions(String, ['fromCodePoint', fromCodePoint, 'raw', raw]); maybeAddIterator(String.prototype, stringPrototypeIterator, Symbol); } registerPolyfill(polyfillString); return { get startsWith() { return startsWith; }, get endsWith() { return endsWith; }, get includes() { return includes; }, get repeat() { return repeat; }, get codePointAt() { return codePointAt; }, get raw() { return raw; }, get fromCodePoint() { return fromCodePoint; }, get stringPrototypeIterator() { return stringPrototypeIterator; }, get polyfillString() { return polyfillString; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/String.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/ArrayIterator.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/ArrayIterator.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/ArrayIterator.js")), toObject = $__2.toObject, toUint32 = $__2.toUint32, createIteratorResultObject = $__2.createIteratorResultObject; var ARRAY_ITERATOR_KIND_KEYS = 1; var ARRAY_ITERATOR_KIND_VALUES = 2; var ARRAY_ITERATOR_KIND_ENTRIES = 3; var ArrayIterator = function() { var $__1; function ArrayIterator() {} return ($traceurRuntime.createClass)(ArrayIterator, ($__1 = {}, Object.defineProperty($__1, "next", { value: function() { var iterator = toObject(this); var array = iterator.iteratorObject_; if (!array) { throw new TypeError('Object is not an ArrayIterator'); } var index = iterator.arrayIteratorNextIndex_; var itemKind = iterator.arrayIterationKind_; var length = toUint32(array.length); if (index >= length) { iterator.arrayIteratorNextIndex_ = Infinity; return createIteratorResultObject(undefined, true); } iterator.arrayIteratorNextIndex_ = index + 1; if (itemKind == ARRAY_ITERATOR_KIND_VALUES) return createIteratorResultObject(array[index], false); if (itemKind == ARRAY_ITERATOR_KIND_ENTRIES) return createIteratorResultObject([index, array[index]], false); return createIteratorResultObject(index, false); }, configurable: true, enumerable: true, writable: true }), Object.defineProperty($__1, Symbol.iterator, { value: function() { return this; }, configurable: true, enumerable: true, writable: true }), $__1), {}); }(); function createArrayIterator(array, kind) { var object = toObject(array); var iterator = new ArrayIterator; iterator.iteratorObject_ = object; iterator.arrayIteratorNextIndex_ = 0; iterator.arrayIterationKind_ = kind; return iterator; } function entries() { return createArrayIterator(this, ARRAY_ITERATOR_KIND_ENTRIES); } function keys() { return createArrayIterator(this, ARRAY_ITERATOR_KIND_KEYS); } function values() { return createArrayIterator(this, ARRAY_ITERATOR_KIND_VALUES); } return { get entries() { return entries; }, get keys() { return keys; }, get values() { return values; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Array.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Array.js"; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ArrayIterator.js", "traceur@0.0.112/src/runtime/polyfills/Array.js")), entries = $__9.entries, keys = $__9.keys, jsValues = $__9.values; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Array.js")), checkIterable = $__10.checkIterable, isCallable = $__10.isCallable, isConstructor = $__10.isConstructor, maybeAddFunctions = $__10.maybeAddFunctions, maybeAddIterator = $__10.maybeAddIterator, registerPolyfill = $__10.registerPolyfill, toInteger = $__10.toInteger, toLength = $__10.toLength, toObject = $__10.toObject; function from(arrLike) { var mapFn = arguments[1]; var thisArg = arguments[2]; var C = this; var items = toObject(arrLike); var mapping = mapFn !== undefined; var k = 0; var arr, len; if (mapping && !isCallable(mapFn)) { throw TypeError(); } if (checkIterable(items)) { arr = isConstructor(C) ? new C() : []; var $__3 = true; var $__4 = false; var $__5 = undefined; try { for (var $__1 = void 0, $__0 = (items)[Symbol.iterator](); !($__3 = ($__1 = $__0.next()).done); $__3 = true) { var item = $__1.value; { if (mapping) { arr[k] = mapFn.call(thisArg, item, k); } else { arr[k] = item; } k++; } } } catch ($__6) { $__4 = true; $__5 = $__6; } finally { try { if (!$__3 && $__0.return != null) { $__0.return(); } } finally { if ($__4) { throw $__5; } } } arr.length = k; return arr; } len = toLength(items.length); arr = isConstructor(C) ? new C(len) : new Array(len); for (; k < len; k++) { if (mapping) { arr[k] = typeof thisArg === 'undefined' ? mapFn(items[k], k) : mapFn.call(thisArg, items[k], k); } else { arr[k] = items[k]; } } arr.length = len; return arr; } function of() { for (var items = [], $__7 = 0; $__7 < arguments.length; $__7++) items[$__7] = arguments[$__7]; var C = this; var len = items.length; var arr = isConstructor(C) ? new C(len) : new Array(len); for (var k = 0; k < len; k++) { arr[k] = items[k]; } arr.length = len; return arr; } function fill(value) { var start = arguments[1] !== (void 0) ? arguments[1] : 0; var end = arguments[2]; var object = toObject(this); var len = toLength(object.length); var fillStart = toInteger(start); var fillEnd = end !== undefined ? toInteger(end) : len; fillStart = fillStart < 0 ? Math.max(len + fillStart, 0) : Math.min(fillStart, len); fillEnd = fillEnd < 0 ? Math.max(len + fillEnd, 0) : Math.min(fillEnd, len); while (fillStart < fillEnd) { object[fillStart] = value; fillStart++; } return object; } function find(predicate) { var thisArg = arguments[1]; return findHelper(this, predicate, thisArg); } function findIndex(predicate) { var thisArg = arguments[1]; return findHelper(this, predicate, thisArg, true); } function findHelper(self, predicate) { var thisArg = arguments[2]; var returnIndex = arguments[3] !== (void 0) ? arguments[3] : false; var object = toObject(self); var len = toLength(object.length); if (!isCallable(predicate)) { throw TypeError(); } for (var i = 0; i < len; i++) { var value = object[i]; if (predicate.call(thisArg, value, i, object)) { return returnIndex ? i : value; } } return returnIndex ? -1 : undefined; } function polyfillArray(global) { var $__8 = global, Array = $__8.Array, Object = $__8.Object, Symbol = $__8.Symbol; var values = jsValues; if (Symbol && Symbol.iterator && Array.prototype[Symbol.iterator]) { values = Array.prototype[Symbol.iterator]; } maybeAddFunctions(Array.prototype, ['entries', entries, 'keys', keys, 'values', values, 'fill', fill, 'find', find, 'findIndex', findIndex]); maybeAddFunctions(Array, ['from', from, 'of', of]); maybeAddIterator(Array.prototype, values, Symbol); maybeAddIterator(Object.getPrototypeOf([].values()), function() { return this; }, Symbol); } registerPolyfill(polyfillArray); return { get from() { return from; }, get of() { return of; }, get fill() { return fill; }, get find() { return find; }, get findIndex() { return findIndex; }, get polyfillArray() { return polyfillArray; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Array.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/assign.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/assign.js"; var keys = Object.keys; function assign(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; var props = source == null ? [] : keys(source); var p = void 0, length = props.length; for (p = 0; p < length; p++) { var name = props[p]; target[name] = source[name]; } } return target; } return {get default() { return assign; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Object.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Object.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Object.js")), maybeAddFunctions = $__2.maybeAddFunctions, registerPolyfill = $__2.registerPolyfill; var assign = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./assign.js", "traceur@0.0.112/src/runtime/polyfills/Object.js")).default; var $__0 = Object, defineProperty = $__0.defineProperty, getOwnPropertyDescriptor = $__0.getOwnPropertyDescriptor, getOwnPropertyNames = $__0.getOwnPropertyNames; function is(left, right) { if (left === right) return left !== 0 || 1 / left === 1 / right; return left !== left && right !== right; } function mixin(target, source) { var props = getOwnPropertyNames(source); var p, descriptor, length = props.length; for (p = 0; p < length; p++) { var name = props[p]; descriptor = getOwnPropertyDescriptor(source, props[p]); defineProperty(target, props[p], descriptor); } return target; } function polyfillObject(global) { var Object = global.Object; maybeAddFunctions(Object, ['assign', assign, 'is', is, 'mixin', mixin]); } registerPolyfill(polyfillObject); return { get assign() { return assign; }, get is() { return is; }, get mixin() { return mixin; }, get polyfillObject() { return polyfillObject; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Object.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Number.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Number.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Number.js")), isNumber = $__1.isNumber, maybeAddConsts = $__1.maybeAddConsts, maybeAddFunctions = $__1.maybeAddFunctions, registerPolyfill = $__1.registerPolyfill, toInteger = $__1.toInteger; var $abs = Math.abs; var $isFinite = isFinite; var $isNaN = isNaN; var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; var MIN_SAFE_INTEGER = -Math.pow(2, 53) + 1; var EPSILON = Math.pow(2, -52); function NumberIsFinite(number) { return isNumber(number) && $isFinite(number); } function isInteger(number) { return NumberIsFinite(number) && toInteger(number) === number; } function NumberIsNaN(number) { return isNumber(number) && $isNaN(number); } function isSafeInteger(number) { if (NumberIsFinite(number)) { var integral = toInteger(number); if (integral === number) return $abs(integral) <= MAX_SAFE_INTEGER; } return false; } function polyfillNumber(global) { var Number = global.Number; maybeAddConsts(Number, ['MAX_SAFE_INTEGER', MAX_SAFE_INTEGER, 'MIN_SAFE_INTEGER', MIN_SAFE_INTEGER, 'EPSILON', EPSILON]); maybeAddFunctions(Number, ['isFinite', NumberIsFinite, 'isInteger', isInteger, 'isNaN', NumberIsNaN, 'isSafeInteger', isSafeInteger]); } registerPolyfill(polyfillNumber); return { get MAX_SAFE_INTEGER() { return MAX_SAFE_INTEGER; }, get MIN_SAFE_INTEGER() { return MIN_SAFE_INTEGER; }, get EPSILON() { return EPSILON; }, get isFinite() { return NumberIsFinite; }, get isInteger() { return isInteger; }, get isNaN() { return NumberIsNaN; }, get isSafeInteger() { return isSafeInteger; }, get polyfillNumber() { return polyfillNumber; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Number.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/fround.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/fround.js"; var $isFinite = isFinite; var $isNaN = isNaN; var $__0 = Math, LN2 = $__0.LN2, abs = $__0.abs, floor = $__0.floor, log = $__0.log, min = $__0.min, pow = $__0.pow; function packIEEE754(v, ebits, fbits) { var bias = (1 << (ebits - 1)) - 1, s, e, f, ln, i, bits, str, bytes; function roundToEven(n) { var w = floor(n), f = n - w; if (f < 0.5) return w; if (f > 0.5) return w + 1; return w % 2 ? w + 1 : w; } if (v !== v) { e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0; } else if (v === Infinity || v === -Infinity) { e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0; } else if (v === 0) { e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0; } else { s = v < 0; v = abs(v); if (v >= pow(2, 1 - bias)) { e = min(floor(log(v) / LN2), 1023); f = roundToEven(v / pow(2, e) * pow(2, fbits)); if (f / pow(2, fbits) >= 2) { e = e + 1; f = 1; } if (e > bias) { e = (1 << ebits) - 1; f = 0; } else { e = e + bias; f = f - pow(2, fbits); } } else { e = 0; f = roundToEven(v / pow(2, 1 - bias - fbits)); } } bits = []; for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); } for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); } bits.push(s ? 1 : 0); bits.reverse(); str = bits.join(''); bytes = []; while (str.length) { bytes.push(parseInt(str.substring(0, 8), 2)); str = str.substring(8); } return bytes; } function unpackIEEE754(bytes, ebits, fbits) { var bits = [], i, j, b, str, bias, s, e, f; for (i = bytes.length; i; i -= 1) { b = bytes[i - 1]; for (j = 8; j; j -= 1) { bits.push(b % 2 ? 1 : 0); b = b >> 1; } } bits.reverse(); str = bits.join(''); bias = (1 << (ebits - 1)) - 1; s = parseInt(str.substring(0, 1), 2) ? -1 : 1; e = parseInt(str.substring(1, 1 + ebits), 2); f = parseInt(str.substring(1 + ebits), 2); if (e === (1 << ebits) - 1) { return f !== 0 ? NaN : s * Infinity; } else if (e > 0) { return s * pow(2, e - bias) * (1 + f / pow(2, fbits)); } else if (f !== 0) { return s * pow(2, -(bias - 1)) * (f / pow(2, fbits)); } else { return s < 0 ? -0 : 0; } } function unpackF32(b) { return unpackIEEE754(b, 8, 23); } function packF32(v) { return packIEEE754(v, 8, 23); } function fround(x) { if (x === 0 || !$isFinite(x) || $isNaN(x)) { return x; } return unpackF32(packF32(Number(x))); } return {get fround() { return fround; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/Math.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/Math.js"; var jsFround = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./fround.js", "traceur@0.0.112/src/runtime/polyfills/Math.js")).fround; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/Math.js")), maybeAddFunctions = $__3.maybeAddFunctions, registerPolyfill = $__3.registerPolyfill, toUint32 = $__3.toUint32; var $isFinite = isFinite; var $isNaN = isNaN; var $__0 = Math, abs = $__0.abs, ceil = $__0.ceil, exp = $__0.exp, floor = $__0.floor, log = $__0.log, pow = $__0.pow, sqrt = $__0.sqrt; function clz32(x) { x = toUint32(+x); if (x == 0) return 32; var result = 0; if ((x & 0xFFFF0000) === 0) { x <<= 16; result += 16; } ; if ((x & 0xFF000000) === 0) { x <<= 8; result += 8; } ; if ((x & 0xF0000000) === 0) { x <<= 4; result += 4; } ; if ((x & 0xC0000000) === 0) { x <<= 2; result += 2; } ; if ((x & 0x80000000) === 0) { x <<= 1; result += 1; } ; return result; } function imul(x, y) { x = toUint32(+x); y = toUint32(+y); var xh = (x >>> 16) & 0xffff; var xl = x & 0xffff; var yh = (y >>> 16) & 0xffff; var yl = y & 0xffff; return xl * yl + (((xh * yl + xl * yh) << 16) >>> 0) | 0; } function sign(x) { x = +x; if (x > 0) return 1; if (x < 0) return -1; return x; } function log10(x) { return log(x) * 0.434294481903251828; } function log2(x) { return log(x) * 1.442695040888963407; } function log1p(x) { x = +x; if (x < -1 || $isNaN(x)) { return NaN; } if (x === 0 || x === Infinity) { return x; } if (x === -1) { return -Infinity; } var result = 0; var n = 50; if (x < 0 || x > 1) { return log(1 + x); } for (var i = 1; i < n; i++) { if ((i % 2) === 0) { result -= pow(x, i) / i; } else { result += pow(x, i) / i; } } return result; } function expm1(x) { x = +x; if (x === -Infinity) { return -1; } if (!$isFinite(x) || x === 0) { return x; } return exp(x) - 1; } function cosh(x) { x = +x; if (x === 0) { return 1; } if ($isNaN(x)) { return NaN; } if (!$isFinite(x)) { return Infinity; } if (x < 0) { x = -x; } if (x > 21) { return exp(x) / 2; } return (exp(x) + exp(-x)) / 2; } function sinh(x) { x = +x; if (!$isFinite(x) || x === 0) { return x; } return (exp(x) - exp(-x)) / 2; } function tanh(x) { x = +x; if (x === 0) return x; if (!$isFinite(x)) return sign(x); var exp1 = exp(x); var exp2 = exp(-x); return (exp1 - exp2) / (exp1 + exp2); } function acosh(x) { x = +x; if (x < 1) return NaN; if (!$isFinite(x)) return x; return log(x + sqrt(x + 1) * sqrt(x - 1)); } function asinh(x) { x = +x; if (x === 0 || !$isFinite(x)) return x; if (x > 0) return log(x + sqrt(x * x + 1)); return -log(-x + sqrt(x * x + 1)); } function atanh(x) { x = +x; if (x === -1) { return -Infinity; } if (x === 1) { return Infinity; } if (x === 0) { return x; } if ($isNaN(x) || x < -1 || x > 1) { return NaN; } return 0.5 * log((1 + x) / (1 - x)); } function hypot(x, y) { var length = arguments.length; var args = new Array(length); var max = 0; for (var i = 0; i < length; i++) { var n = arguments[i]; n = +n; if (n === Infinity || n === -Infinity) return Infinity; n = abs(n); if (n > max) max = n; args[i] = n; } if (max === 0) max = 1; var sum = 0; var compensation = 0; for (var i = 0; i < length; i++) { var n = args[i] / max; var summand = n * n - compensation; var preliminary = sum + summand; compensation = (preliminary - sum) - summand; sum = preliminary; } return sqrt(sum) * max; } function trunc(x) { x = +x; if (x > 0) return floor(x); if (x < 0) return ceil(x); return x; } var fround, f32; if (typeof Float32Array === 'function') { f32 = new Float32Array(1); fround = function(x) { f32[0] = Number(x); return f32[0]; }; } else { fround = jsFround; } function cbrt(x) { x = +x; if (x === 0) return x; var negate = x < 0; if (negate) x = -x; var result = pow(x, 1 / 3); return negate ? -result : result; } function polyfillMath(global) { var Math = global.Math; maybeAddFunctions(Math, ['acosh', acosh, 'asinh', asinh, 'atanh', atanh, 'cbrt', cbrt, 'clz32', clz32, 'cosh', cosh, 'expm1', expm1, 'fround', fround, 'hypot', hypot, 'imul', imul, 'log10', log10, 'log1p', log1p, 'log2', log2, 'sign', sign, 'sinh', sinh, 'tanh', tanh, 'trunc', trunc]); } registerPolyfill(polyfillMath); return { get clz32() { return clz32; }, get imul() { return imul; }, get sign() { return sign; }, get log10() { return log10; }, get log2() { return log2; }, get log1p() { return log1p; }, get expm1() { return expm1; }, get cosh() { return cosh; }, get sinh() { return sinh; }, get tanh() { return tanh; }, get acosh() { return acosh; }, get asinh() { return asinh; }, get atanh() { return atanh; }, get hypot() { return hypot; }, get trunc() { return trunc; }, get fround() { return fround; }, get cbrt() { return cbrt; }, get polyfillMath() { return polyfillMath; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/Math.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/WeakMap.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/WeakMap.js"; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/polyfills/WeakMap.js")), createPrivateSymbol = $__5.createPrivateSymbol, deletePrivate = $__5.deletePrivate, getPrivate = $__5.getPrivate, hasPrivate = $__5.hasPrivate, setPrivate = $__5.setPrivate; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../frozen-data.js", "traceur@0.0.112/src/runtime/polyfills/WeakMap.js")), deleteFrozen = $__6.deleteFrozen, getFrozen = $__6.getFrozen, hasFrozen = $__6.hasFrozen, setFrozen = $__6.setFrozen; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/WeakMap.js")), isObject = $__7.isObject, registerPolyfill = $__7.registerPolyfill; var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/polyfills/WeakMap.js")).default; var $__2 = Object, defineProperty = $__2.defineProperty, getOwnPropertyDescriptor = $__2.getOwnPropertyDescriptor, isExtensible = $__2.isExtensible; var $TypeError = TypeError; var hasOwnProperty = Object.prototype.hasOwnProperty; var sentinel = {}; var WeakMap = function() { function WeakMap() { this.name_ = createPrivateSymbol(); this.frozenData_ = []; } return ($traceurRuntime.createClass)(WeakMap, { set: function(key, value) { if (!isObject(key)) throw new $TypeError('key must be an object'); if (!isExtensible(key)) { setFrozen(this.frozenData_, key, value); } else { setPrivate(key, this.name_, value); } return this; }, get: function(key) { if (!isObject(key)) return undefined; if (!isExtensible(key)) { return getFrozen(this.frozenData_, key); } return getPrivate(key, this.name_); }, delete: function(key) { if (!isObject(key)) return false; if (!isExtensible(key)) { return deleteFrozen(this.frozenData_, key); } return deletePrivate(key, this.name_); }, has: function(key) { if (!isObject(key)) return false; if (!isExtensible(key)) { return hasFrozen(this.frozenData_, key); } return hasPrivate(key, this.name_); } }, {}); }(); function needsPolyfill(global) { var $__4 = global, WeakMap = $__4.WeakMap, Symbol = $__4.Symbol; if (!WeakMap || !hasNativeSymbol()) { return true; } try { var o = {}; var wm = new WeakMap([[o, false]]); return wm.get(o); } catch (e) { return false; } } function polyfillWeakMap(global) { if (needsPolyfill(global)) { global.WeakMap = WeakMap; } } registerPolyfill(polyfillWeakMap); return { get WeakMap() { return WeakMap; }, get polyfillWeakMap() { return polyfillWeakMap; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/WeakMap.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/WeakSet.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/WeakSet.js"; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../private.js", "traceur@0.0.112/src/runtime/polyfills/WeakSet.js")), createPrivateSymbol = $__5.createPrivateSymbol, deletePrivate = $__5.deletePrivate, getPrivate = $__5.getPrivate, hasPrivate = $__5.hasPrivate, setPrivate = $__5.setPrivate; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../frozen-data.js", "traceur@0.0.112/src/runtime/polyfills/WeakSet.js")), deleteFrozen = $__6.deleteFrozen, getFrozen = $__6.getFrozen, setFrozen = $__6.setFrozen; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/WeakSet.js")), isObject = $__7.isObject, registerPolyfill = $__7.registerPolyfill; var hasNativeSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../has-native-symbols.js", "traceur@0.0.112/src/runtime/polyfills/WeakSet.js")).default; var $__2 = Object, defineProperty = $__2.defineProperty, isExtensible = $__2.isExtensible; var $TypeError = TypeError; var hasOwnProperty = Object.prototype.hasOwnProperty; var WeakSet = function() { function WeakSet() { this.name_ = createPrivateSymbol(); this.frozenData_ = []; } return ($traceurRuntime.createClass)(WeakSet, { add: function(value) { if (!isObject(value)) throw new $TypeError('value must be an object'); if (!isExtensible(value)) { setFrozen(this.frozenData_, value, value); } else { setPrivate(value, this.name_, true); } return this; }, delete: function(value) { if (!isObject(value)) return false; if (!isExtensible(value)) { return deleteFrozen(this.frozenData_, value); } return deletePrivate(value, this.name_); }, has: function(value) { if (!isObject(value)) return false; if (!isExtensible(value)) { return getFrozen(this.frozenData_, value) === value; } return hasPrivate(value, this.name_); } }, {}); }(); function needsPolyfill(global) { var $__4 = global, WeakSet = $__4.WeakSet, Symbol = $__4.Symbol; if (!WeakSet || !hasNativeSymbol()) { return true; } try { var o = {}; var wm = new WeakSet([[o]]); return !wm.has(o); } catch (e) { return false; } } function polyfillWeakSet(global) { if (needsPolyfill(global)) { global.WeakSet = WeakSet; } } registerPolyfill(polyfillWeakSet); return { get WeakSet() { return WeakSet; }, get polyfillWeakSet() { return polyfillWeakSet; } }; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/WeakSet.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/runtime/polyfills/polyfills.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/runtime/polyfills/polyfills.js"; var polyfillAll = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./utils.js", "traceur@0.0.112/src/runtime/polyfills/polyfills.js")).polyfillAll; polyfillAll(Reflect.global); var setupGlobals = $traceurRuntime.setupGlobals; $traceurRuntime.setupGlobals = function(global) { setupGlobals(global); polyfillAll(global); }; return {}; }); $traceurRuntime.getModule("traceur@0.0.112/src/runtime/polyfills/polyfills.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/util/SourceRange.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/SourceRange.js"; var SourceRange = function() { function SourceRange(start, end) { this.start = start; this.end = end; } return ($traceurRuntime.createClass)(SourceRange, {toString: function() { var str = this.start.source.contents; return str.slice(this.start.offset, this.end.offset); }}, {}); }(); return {get SourceRange() { return SourceRange; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/ErrorReporter.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/ErrorReporter.js"; var SourceRange = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SourceRange.js", "traceur@0.0.112/src/util/ErrorReporter.js")).SourceRange; var ErrorReporter = function() { function ErrorReporter() { this.hadError_ = false; } return ($traceurRuntime.createClass)(ErrorReporter, { reportError: function(location, message) { this.hadError_ = true; this.reportMessageInternal(location, message); }, reportMessageInternal: function(location, message) { if (location) message = (location.start + ": " + message); console.error(message); }, hadError: function() { return this.hadError_; }, clearError: function() { this.hadError_ = false; } }, {}); }(); function format(location, text) { var args = arguments[2]; var i = 0; text = text.replace(/%./g, function(s) { switch (s) { case '%s': return args && args[i++]; case '%%': return '%'; } return s; }); if (location) text = (location + ": " + text); return text; } ; ErrorReporter.format = format; return { get ErrorReporter() { return ErrorReporter; }, get format() { return format; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/MutedErrorReporter.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/MutedErrorReporter.js"; var ErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ErrorReporter.js", "traceur@0.0.112/src/util/MutedErrorReporter.js")).ErrorReporter; var MutedErrorReporter = function($__super) { function MutedErrorReporter() { $traceurRuntime.superConstructor(MutedErrorReporter).apply(this, arguments); } return ($traceurRuntime.createClass)(MutedErrorReporter, {reportMessageInternal: function(location, format, args) {}}, {}, $__super); }(ErrorReporter); return {get MutedErrorReporter() { return MutedErrorReporter; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/Options.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/Options.js"; function enumerableOnlyObject(obj) { var result = Object.create(null); Object.keys(obj).forEach(function(key) { Object.defineProperty(result, key, { enumerable: true, value: obj[key] }); }); return result; } var optionsV01 = enumerableOnlyObject({ annotations: false, arrayComprehension: false, arrowFunctions: true, asyncFunctions: false, asyncGenerators: false, blockBinding: true, classes: true, commentCallback: false, computedPropertyNames: true, debug: false, debugNames: false, defaultParameters: true, destructuring: true, exponentiation: false, exportFromExtended: false, forOf: true, forOn: false, freeVariableChecker: false, generatorComprehension: false, generators: true, importRuntime: false, inputSourceMap: false, jsx: false, lowResolutionSourceMap: false, memberVariables: false, moduleName: 'default', modules: 'bootstrap', numericLiterals: true, outputLanguage: 'es5', properTailCalls: false, propertyMethods: true, propertyNameShorthand: true, referrer: '', require: false, restParameters: true, script: false, sourceMaps: false, sourceRoot: false, spread: true, spreadProperties: false, symbols: true, templateLiterals: true, types: false, unicodeEscapeSequences: true, unicodeExpressions: true, validate: false }); var versionLockedOptions = optionsV01; var defaultValues = Object.create(null); var featureOptions = Object.create(null); var experimentalOptions = Object.create(null); var moduleOptions = ['amd', 'commonjs', 'closure', 'instantiate', 'inline', 'bootstrap', 'parse']; var EXPERIMENTAL = 0; var ON_BY_DEFAULT = 1; function addFeatureOption(name, kind) { featureOptions[name] = true; if (kind === EXPERIMENTAL) experimentalOptions[name] = true; var defaultValue = kind === ON_BY_DEFAULT; defaultValues[name] = defaultValue; } function addBoolOption(name) { defaultValues[name] = false; } addFeatureOption('arrowFunctions', ON_BY_DEFAULT); addFeatureOption('blockBinding', ON_BY_DEFAULT); addFeatureOption('classes', ON_BY_DEFAULT); addFeatureOption('computedPropertyNames', ON_BY_DEFAULT); addFeatureOption('defaultParameters', ON_BY_DEFAULT); addFeatureOption('destructuring', ON_BY_DEFAULT); addFeatureOption('forOf', ON_BY_DEFAULT); addFeatureOption('generators', ON_BY_DEFAULT); addFeatureOption('modules', 'SPECIAL'); addFeatureOption('numericLiterals', ON_BY_DEFAULT); addFeatureOption('propertyMethods', ON_BY_DEFAULT); addFeatureOption('propertyNameShorthand', ON_BY_DEFAULT); addFeatureOption('restParameters', ON_BY_DEFAULT); addFeatureOption('sourceMaps', 'SPECIAL'); addFeatureOption('spread', ON_BY_DEFAULT); addFeatureOption('symbols', ON_BY_DEFAULT); addFeatureOption('templateLiterals', ON_BY_DEFAULT); addFeatureOption('unicodeEscapeSequences', ON_BY_DEFAULT); addFeatureOption('unicodeExpressions', ON_BY_DEFAULT); addFeatureOption('properTailCalls', EXPERIMENTAL); addFeatureOption('annotations', EXPERIMENTAL); addFeatureOption('arrayComprehension', EXPERIMENTAL); addFeatureOption('asyncFunctions', EXPERIMENTAL); addFeatureOption('asyncGenerators', EXPERIMENTAL); addFeatureOption('exponentiation', EXPERIMENTAL); addFeatureOption('exportFromExtended', EXPERIMENTAL); addFeatureOption('forOn', EXPERIMENTAL); addFeatureOption('generatorComprehension', EXPERIMENTAL); addFeatureOption('importRuntime', EXPERIMENTAL); addFeatureOption('jsx', EXPERIMENTAL); addFeatureOption('memberVariables', EXPERIMENTAL); addFeatureOption('require', EXPERIMENTAL); addFeatureOption('spreadProperties', EXPERIMENTAL); addFeatureOption('types', EXPERIMENTAL); var transformOptionsPrototype = {}; Object.keys(featureOptions).forEach(function(name) { Object.defineProperty(transformOptionsPrototype, name, { get: function() { var v = this.proxiedOptions_[name]; if (v === 'parse') return false; return v; }, enumerable: true }); }); var parseOptionsPrototype = {}; Object.keys(featureOptions).forEach(function(name) { Object.defineProperty(parseOptionsPrototype, name, { get: function() { return !!this.proxiedOptions_[name]; }, enumerable: true }); }); addBoolOption('commentCallback'); addBoolOption('debug'); addBoolOption('debugNames'); addBoolOption('freeVariableChecker'); addBoolOption('script'); addBoolOption('validate'); var Options = function() { function Options() { var options = arguments[0] !== (void 0) ? arguments[0] : Object.create(null); this.reset(); Object.defineProperties(this, { modules_: { value: versionLockedOptions.modules, writable: true, enumerable: false }, sourceMaps_: { value: versionLockedOptions.sourceMaps, writable: true, enumerable: false }, sourceRoot_: { value: versionLockedOptions.sourceRoot, writable: true, enumerable: false }, transformOptions: { value: Object.create(transformOptionsPrototype, {proxiedOptions_: { value: this, enumerable: false }}), enumerable: false }, parseOptions: { value: Object.create(parseOptionsPrototype, {proxiedOptions_: { value: this, enumerable: false }}), enumerable: false } }); this.setFromObject(options); } return ($traceurRuntime.createClass)(Options, { set experimental(v) { var $__2 = this; v = coerceOptionValue(v); Object.keys(experimentalOptions).forEach(function(name) { $__2[name] = v; }); }, get experimental() { var $__2 = this; var value; Object.keys(experimentalOptions).every(function(name) { var currentValue = $__2[name]; if (value === undefined) { value = currentValue; return true; } if (currentValue !== value) { value = null; return false; } return true; }); return value; }, get atscript() { return this.types && this.annotations && this.memberVariables; }, set atscript(value) { this.types = value; this.annotations = value; this.memberVariables = value; }, get modules() { return this.modules_; }, set modules(value) { if (typeof value === 'boolean' && !value) value = 'bootstrap'; if (moduleOptions.indexOf(value) === -1) { throw new Error('Invalid \'modules\' option \'' + value + '\', not in ' + moduleOptions.join(', ')); } this.modules_ = value; }, get sourceMaps() { return this.sourceMaps_; }, set sourceMaps(value) { if (value === null || typeof value === 'boolean') { this.sourceMaps_ = value ? 'file' : false; return; } if (value === 'file' || value === 'inline' || value === 'memory') { this.sourceMaps_ = value; } else { throw new Error('Option sourceMaps should be ' + '[false|inline|file|memory], not ' + value); } }, reset: function() { var allOff = arguments[0]; var $__2 = this; var useDefault = allOff === undefined; Object.keys(defaultValues).forEach(function(name) { $__2[name] = useDefault && defaultValues[name]; }); this.setDefaults(); }, setDefaults: function() { this.modules = 'bootstrap'; this.moduleName = 'default'; this.outputLanguage = 'es5'; this.referrer = ''; this.sourceMaps = false; this.sourceRoot = false; this.lowResolutionSourceMap = false; this.inputSourceMap = false; }, setFromObject: function(object) { var $__2 = this; Object.keys(this).forEach(function(name) { if (name in object) $__2.setOption(name, object[name]); }); this.modules = object.modules || this.modules; if (typeof object.sourceMaps === 'boolean' || typeof object.sourceMaps === 'string') { this.sourceMaps = object.sourceMaps; } if (object.sourceRoot !== undefined) this.sourceRoot = object.sourceRoot; return this; }, setOption: function(name, value) { name = toCamelCase(name); if (name in this) { this[name] = value; } else { throw Error('Unknown option: ' + name); } }, diff: function(ref) { var $__2 = this; var mismatches = []; Object.keys(this).forEach(function(key) { if ($__2[key] !== ref[key]) { mismatches.push({ key: key, now: $traceurRuntime.options[key], v01: ref[key] }); } }); return mismatches; } }, { experimental: function() { return new Options(experimentalOptions); }, atscript: function() { return new Options({ types: true, annotations: true, memberVariables: true }); }, listUnknownOptions: function(obj) { var unknowns = []; Object.keys(obj).forEach(function(propName) { if (!(propName in optionsV01)) { unknowns.push(propName); } }); return unknowns; } }); }(); ; var descriptions = { experimental: 'Turns on all experimental features', require: 'Generate require function argument for node when modules=register', sourceMaps: 'Generate source map and (\'file\') write to .map' + ' or (\'inline\') append data URL' }; var CommandOptions = function($__super) { function CommandOptions() { $traceurRuntime.superConstructor(CommandOptions).apply(this, arguments); } return ($traceurRuntime.createClass)(CommandOptions, { parseCommand: function(s) { var re = /--([^=]+)(?:=(.+))?/; var m = re.exec(s); if (m) this.setOptionCoerced(m[1], m[2]); }, setOptionCoerced: function(name, value) { if (typeof value !== 'undefined' && value !== null) value = coerceOptionValue(value); else value = true; this.setOption(name, value); } }, { fromString: function(s) { return CommandOptions.fromArgv(s.split(/\s+/)); }, fromArgv: function(args) { var options = new CommandOptions(); args.forEach(function(arg) { return options.parseCommand(arg); }); return options; } }, $__super); }(Options); function coerceOptionValue(v) { switch (v) { case 'false': return false; case 'true': case true: return true; default: return !!v && String(v); } } function toCamelCase(s) { return s.replace(/-\w/g, function(ch) { return ch[1].toUpperCase(); }); } function toDashCase(s) { return s.replace(/[A-Z]/g, function(ch) { return '-' + ch.toLowerCase(); }); } function addOptions(flags, commandOptions) { flags.option('--referrer ', 'Bracket output code with System.referrerName=', function(name) { commandOptions.setOption('referrer', name); System.map = System.semverMap(name); return name; }); flags.option('--modules <' + moduleOptions.join(', ') + '>', 'select the output format for modules', function(moduleFormat) { commandOptions.modules = moduleFormat; }); flags.option('--moduleName [true|false|default]', 'true for named, false for anonymous modules; default depends on --modules', function(moduleName) { if (moduleName === 'true') moduleName = true; else if (moduleName === 'false') moduleName = false; else moduleName = 'default'; commandOptions.moduleName = moduleName; }); flags.option('--outputLanguage ', 'compilation target language', function(outputLanguage) { if (outputLanguage === 'es6' || outputLanguage === 'es5') commandOptions.outputLanguage = outputLanguage; else throw new Error('outputLanguage must be one of es5, es6'); }); flags.option('--source-maps [file|inline|memory]', 'sourceMaps generated to file or inline with data: URL', function(to) { return commandOptions.sourceMaps = to; }); flags.option('--source-root ', 'sourcemap sourceRoot value. false to omit, ' + 'true for directory of output file.', function(to) { if (to === 'false') to = false; else if (to === 'true') to = true; return commandOptions.sourceRoot = to; }); flags.option('--low-resolution-source-maps', 'Lower sourceMaps granularity to one mapping per output line', function() { return commandOptions.lowResolutionSourceMap = true; }); flags.option('--experimental', 'Turns on all experimental features', function() { commandOptions.experimental = true; }); flags.option('--atscript', 'Turns on all AtScript features', function() { commandOptions.atscript = true; }); Object.keys(commandOptions).forEach(function(name) { var dashedName = toDashCase(name); if (flags.optionFor('--' + name) || flags.optionFor('--' + dashedName)) { return; } else if (name in featureOptions) { flags.option('--' + dashedName + ' [true|false|parse]', descriptions[name]); flags.on(dashedName, function(value) { return commandOptions.setOptionCoerced(dashedName, value); }); } else if (commandOptions[name] !== null) { flags.option('--' + dashedName, descriptions[name]); flags.on(dashedName, function() { return commandOptions.setOption(dashedName, true); }); } else { throw new Error('Unexpected null commandOption ' + name); } }); commandOptions.setDefaults(); } return { get optionsV01() { return optionsV01; }, get versionLockedOptions() { return versionLockedOptions; }, get Options() { return Options; }, get CommandOptions() { return CommandOptions; }, get toDashCase() { return toDashCase; }, get addOptions() { return addOptions; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/webLoader.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/webLoader.js"; var webLoader = {load: function(url, callback, errback) { var xhr = new XMLHttpRequest(); xhr.onload = function() { if (xhr.status == 200 || xhr.status == 0) { callback(xhr.responseText); } else { var err; if (xhr.status === 404) err = 'File not found \'' + url + '\''; else err = xhr.status + xhr.statusText; errback(err); } xhr = null; }; xhr.onerror = function(err) { errback(err); }; xhr.open('GET', url, true); xhr.send(); return function() { xhr && xhr.abort(); }; }}; return {get webLoader() { return webLoader; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/WebPageTranscoder.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/WebPageTranscoder.js"; var ErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/ErrorReporter.js", "traceur@0.0.112/src/WebPageTranscoder.js")).ErrorReporter; var CommandOptions = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Options.js", "traceur@0.0.112/src/WebPageTranscoder.js")).CommandOptions; var webLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./loader/webLoader.js", "traceur@0.0.112/src/WebPageTranscoder.js")).webLoader; var scriptSelector = 'script[type="module"],script[type="text/traceur"]'; var WebPageTranscoder = function() { function WebPageTranscoder() { var url = arguments[0] !== (void 0) ? arguments[0] : document.location.href; var traceurOptions = arguments[1] !== (void 0) ? arguments[1] : new Options(); this.url = url; this.numPending_ = 0; this.numberInlined_ = 0; this.traceurOptions_ = traceurOptions; } return ($traceurRuntime.createClass)(WebPageTranscoder, { asyncLoad_: function(url, fncOfContent, onScriptsReady) { var $__3 = this; this.numPending_++; webLoader.load(url, function(content) { if (content) fncOfContent(content); else console.warn('Failed to load', url); if (--$__3.numPending_ <= 0) onScriptsReady(); }, function(error) { console.error('WebPageTranscoder FAILED to load ' + url, error.stack || error); }); }, addFileFromScriptElement: function(scriptElement, name, content) { var options = this.traceurOptions_; var elementOptionString = scriptElement.getAttribute('traceurOptions'); if (elementOptionString) { options = CommandOptions.fromString(elementOptionString); } var nameInfo = { address: name, referrerName: window.location.href, name: name, metadata: {traceurOptions: options} }; var loadingResult; if (scriptElement.type === 'module') loadingResult = System.module(content, nameInfo); else loadingResult = System.script(content, nameInfo); loadingResult.catch(function(error) { console.error(error.stack || error); }); }, nextInlineScriptName_: function() { this.numberInlined_ += 1; if (!this.inlineScriptNameBase_) { var segments = this.url.split('.'); segments.pop(); this.inlineScriptNameBase_ = segments.join('.'); } return this.inlineScriptNameBase_ + '_inline_script_' + this.numberInlined_ + '.js'; }, addFilesFromScriptElements: function(scriptElements, onScriptsReady) { for (var i = 0, length = scriptElements.length; i < length; i++) { var scriptElement = scriptElements[i]; if (!scriptElement.src) { var name = this.nextInlineScriptName_(); var content = scriptElement.textContent; this.addFileFromScriptElement(scriptElement, name, content); } else { var name$__4 = scriptElement.src; this.asyncLoad_(name$__4, this.addFileFromScriptElement.bind(this, scriptElement, name$__4), onScriptsReady); } } if (this.numPending_ <= 0) onScriptsReady(); }, get reporter() { if (!this.reporter_) { this.reporter_ = new ErrorReporter(); } return this.reporter_; }, putFile: function(file) { var scriptElement = document.createElement('script'); scriptElement.setAttribute('data-traceur-src-url', file.name); scriptElement.textContent = file.generatedSource; var parent = file.scriptElement.parentNode; parent.insertBefore(scriptElement, file.scriptElement || null); }, selectAndProcessScripts: function(done) { var selector = scriptSelector; var scripts = document.querySelectorAll(selector); if (!scripts.length) { done(); return; } this.addFilesFromScriptElements(scripts, function() { done(); }); }, run: function() { var done = arguments[0] !== (void 0) ? arguments[0] : function() {}; var $__3 = this; var ready = document.readyState; if (ready === 'complete' || ready === 'loaded') { this.selectAndProcessScripts(done); } else { document.addEventListener('DOMContentLoaded', function() { return $__3.selectAndProcessScripts(done); }, false); } } }, {}); }(); return { get scriptSelector() { return scriptSelector; }, get WebPageTranscoder() { return WebPageTranscoder; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/StringSet.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/StringSet.js"; function assertString(value) { if (typeof value !== 'string') throw new TypeError(); } var StringSet = function() { function StringSet() { this.storage_ = Object.create(null); } return ($traceurRuntime.createClass)(StringSet, { add: function(value) { assertString(value); this.storage_[value] = true; }, has: function(value) { assertString(value); return this.storage_[value] !== undefined; }, delete: function(value) { assertString(value); delete this.storage_[value]; }, isEmpty: function() { for (var _ in this.storage_) { return false; } return true; }, valuesAsArray: function() { return Object.keys(this.storage_); }, forEach: function(func) { for (var value in this.storage_) { func(value); } } }, {}); }(); return {get StringSet() { return StringSet; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/StringMap.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/StringMap.js"; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./StringSet.js", "traceur@0.0.112/src/util/StringMap.js")).StringSet; function assertString(value) { if (typeof value !== 'string') throw new TypeError(); } var StringMap = function() { function StringMap() { this.storage_ = Object.create(null); } return ($traceurRuntime.createClass)(StringMap, { set: function(key, value) { assertString(key); this.storage_[key] = value; }, get: function(key) { assertString(key); return this.storage_[key]; }, delete: function(key) { assertString(key); delete this.storage_[key]; }, has: function(key) { assertString(key); return this.storage_[key] !== undefined; }, keysAsArray: function() { return Object.keys(this.storage_); }, keysAsSet: function() { var set = new StringSet(); this.forEach(function(key) { return set.add(key); }); return set; }, forEach: function(func) { for (var key in this.storage_) { func(key, this.storage_[key]); } } }, {}); }(); return {get StringMap() { return StringMap; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/HTMLImportTranscoder.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/HTMLImportTranscoder.js"; var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/StringMap.js", "traceur@0.0.112/src/HTMLImportTranscoder.js")).StringMap; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./WebPageTranscoder.js", "traceur@0.0.112/src/HTMLImportTranscoder.js")), WebPageTranscoder = $__4.WebPageTranscoder, scriptSelector = $__4.scriptSelector; var importSelector = 'link[rel=import][href]'; var HTMLImportTranscoder = function() { function HTMLImportTranscoder() { this.importsToProcess_ = []; } return ($traceurRuntime.createClass)(HTMLImportTranscoder, { findAllChildrenHTMLImports_: function(parentImportNodes) { var foundImportNodes = []; for (var parentIndex = 0; parentIndex < parentImportNodes.length; parentIndex++) { var parentLink = parentImportNodes[parentIndex]; var childImportNodes = parentLink.import.querySelectorAll(importSelector); if (childImportNodes.length > 0) this.findAllChildrenHTMLImports_(childImportNodes); this.importsToProcess_.push(parentLink); } }, filterHTMLImports_: function(importNodes) { this.findAllChildrenHTMLImports_(importNodes); var importsToParse = []; var dupFilterMap = new StringMap(); for (var index = 0; index < this.importsToProcess_.length; index++) { var processLink = this.importsToProcess_[index]; if (!dupFilterMap.has(processLink.href)) { dupFilterMap.set(processLink.href, 0); var scripts = processLink.import.querySelectorAll(scriptSelector); if (scripts.length > 0) importsToParse.push({ href: processLink.href, scripts: scripts }); } } this.importsToProcess_ = []; return importsToParse; }, selectAndProcessHTMLImports: function(importNodes, done) { var importInfoList = this.filterHTMLImports_(importNodes); if (importInfoList.length === 0) done(); var processCount = importInfoList.length; importInfoList.forEach(function(importInfo) { var transcoder = new WebPageTranscoder(importInfo.href); transcoder.addFilesFromScriptElements(importInfo.scripts, function() { processCount--; if (processCount === 0 && done) done(); }); }); }, run: function() { var done = arguments[0] !== (void 0) ? arguments[0] : function() {}; var $__2 = this; var ready = document.readyState; if (ready === 'complete' || ready === 'loaded') { var importNodes = document.querySelectorAll(importSelector); if (importNodes.length > 0) this.selectAndProcessHTMLImports(importNodes, done); } else { document.addEventListener('HTMLImportsLoaded', function(event) { var importNodes = event.detail && event.detail.allImports ? event.detail.allImports : document.querySelectorAll(importSelector); if (importNodes.length > 0) $__2.selectAndProcessHTMLImports(importNodes, done); }); } } }, {}); }(); return {get HTMLImportTranscoder() { return HTMLImportTranscoder; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/CollectingErrorReporter.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/CollectingErrorReporter.js"; var ErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/ErrorReporter.js", "traceur@0.0.112/src/util/CollectingErrorReporter.js")).ErrorReporter; var MultipleErrors = function($__super) { function MultipleErrors(errors) { $traceurRuntime.superConstructor(MultipleErrors).call(this); this.message = errors ? errors.join('\n') : ''; this.name = 'MultipleErrors'; this.errors = errors; } return ($traceurRuntime.createClass)(MultipleErrors, {}, {}, $__super); }(Error); var CollectingErrorReporter = function($__super) { function CollectingErrorReporter() { $traceurRuntime.superConstructor(CollectingErrorReporter).call(this); this.errors = []; } return ($traceurRuntime.createClass)(CollectingErrorReporter, { reportMessageInternal: function(location, message) { this.errors.push((location.start + ": " + message)); }, errorsAsString: function() { return this.toError().message; }, toError: function() { return new MultipleErrors(this.errors); } }, {}, $__super); }(ErrorReporter); return { get MultipleErrors() { return MultipleErrors; }, get CollectingErrorReporter() { return CollectingErrorReporter; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util-imports.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util-imports.js"; $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/MutedErrorReporter.js", "traceur@0.0.112/src/util-imports.js")); var $__traceur_64_0_46_0_46_112_47_src_47_WebPageTranscoder_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./WebPageTranscoder.js", "traceur@0.0.112/src/util-imports.js")); var $__traceur_64_0_46_0_46_112_47_src_47_HTMLImportTranscoder_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./HTMLImportTranscoder.js", "traceur@0.0.112/src/util-imports.js")); var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Options.js", "traceur@0.0.112/src/util-imports.js")), addOptions = $__1.addOptions, CommandOptions = $__1.CommandOptions, Options = $__1.Options; var ErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/ErrorReporter.js", "traceur@0.0.112/src/util-imports.js")).ErrorReporter; var CollectingErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/CollectingErrorReporter.js", "traceur@0.0.112/src/util-imports.js")).CollectingErrorReporter; var util = { addOptions: addOptions, CommandOptions: CommandOptions, CollectingErrorReporter: CollectingErrorReporter, ErrorReporter: ErrorReporter, Options: Options }; return { get WebPageTranscoder() { return $__traceur_64_0_46_0_46_112_47_src_47_WebPageTranscoder_46_js__.WebPageTranscoder; }, get HTMLImportTranscoder() { return $__traceur_64_0_46_0_46_112_47_src_47_HTMLImportTranscoder_46_js__.HTMLImportTranscoder; }, get util() { return util; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/trees/ParseTreeType.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/trees/ParseTreeType.js"; var ANNOTATION = 'ANNOTATION'; var ANON_BLOCK = 'ANON_BLOCK'; var ARGUMENT_LIST = 'ARGUMENT_LIST'; var ARRAY_COMPREHENSION = 'ARRAY_COMPREHENSION'; var ARRAY_LITERAL = 'ARRAY_LITERAL'; var ARRAY_PATTERN = 'ARRAY_PATTERN'; var ARRAY_TYPE = 'ARRAY_TYPE'; var ARROW_FUNCTION = 'ARROW_FUNCTION'; var ASSIGNMENT_ELEMENT = 'ASSIGNMENT_ELEMENT'; var AWAIT_EXPRESSION = 'AWAIT_EXPRESSION'; var BINARY_EXPRESSION = 'BINARY_EXPRESSION'; var BINDING_ELEMENT = 'BINDING_ELEMENT'; var BINDING_IDENTIFIER = 'BINDING_IDENTIFIER'; var BLOCK = 'BLOCK'; var BREAK_STATEMENT = 'BREAK_STATEMENT'; var CALL_EXPRESSION = 'CALL_EXPRESSION'; var CALL_SIGNATURE = 'CALL_SIGNATURE'; var CASE_CLAUSE = 'CASE_CLAUSE'; var CATCH = 'CATCH'; var CLASS_DECLARATION = 'CLASS_DECLARATION'; var CLASS_EXPRESSION = 'CLASS_EXPRESSION'; var COMMA_EXPRESSION = 'COMMA_EXPRESSION'; var COMPREHENSION_FOR = 'COMPREHENSION_FOR'; var COMPREHENSION_IF = 'COMPREHENSION_IF'; var COMPUTED_PROPERTY_NAME = 'COMPUTED_PROPERTY_NAME'; var CONDITIONAL_EXPRESSION = 'CONDITIONAL_EXPRESSION'; var CONSTRUCT_SIGNATURE = 'CONSTRUCT_SIGNATURE'; var CONSTRUCTOR_TYPE = 'CONSTRUCTOR_TYPE'; var CONTINUE_STATEMENT = 'CONTINUE_STATEMENT'; var COVER_FORMALS = 'COVER_FORMALS'; var COVER_INITIALIZED_NAME = 'COVER_INITIALIZED_NAME'; var DEBUGGER_STATEMENT = 'DEBUGGER_STATEMENT'; var DEFAULT_CLAUSE = 'DEFAULT_CLAUSE'; var DO_WHILE_STATEMENT = 'DO_WHILE_STATEMENT'; var EMPTY_STATEMENT = 'EMPTY_STATEMENT'; var EXPORT_DECLARATION = 'EXPORT_DECLARATION'; var EXPORT_DEFAULT = 'EXPORT_DEFAULT'; var EXPORT_SPECIFIER = 'EXPORT_SPECIFIER'; var EXPORT_SPECIFIER_SET = 'EXPORT_SPECIFIER_SET'; var EXPORT_STAR = 'EXPORT_STAR'; var EXPRESSION_STATEMENT = 'EXPRESSION_STATEMENT'; var FINALLY = 'FINALLY'; var FOR_IN_STATEMENT = 'FOR_IN_STATEMENT'; var FOR_OF_STATEMENT = 'FOR_OF_STATEMENT'; var FOR_ON_STATEMENT = 'FOR_ON_STATEMENT'; var FOR_STATEMENT = 'FOR_STATEMENT'; var FORMAL_PARAMETER = 'FORMAL_PARAMETER'; var FORMAL_PARAMETER_LIST = 'FORMAL_PARAMETER_LIST'; var FORWARD_DEFAULT_EXPORT = 'FORWARD_DEFAULT_EXPORT'; var FUNCTION_BODY = 'FUNCTION_BODY'; var FUNCTION_DECLARATION = 'FUNCTION_DECLARATION'; var FUNCTION_EXPRESSION = 'FUNCTION_EXPRESSION'; var FUNCTION_TYPE = 'FUNCTION_TYPE'; var GENERATOR_COMPREHENSION = 'GENERATOR_COMPREHENSION'; var GET_ACCESSOR = 'GET_ACCESSOR'; var IDENTIFIER_EXPRESSION = 'IDENTIFIER_EXPRESSION'; var IF_STATEMENT = 'IF_STATEMENT'; var IMPORT_CLAUSE_PAIR = 'IMPORT_CLAUSE_PAIR'; var IMPORT_DECLARATION = 'IMPORT_DECLARATION'; var IMPORT_SPECIFIER = 'IMPORT_SPECIFIER'; var IMPORT_SPECIFIER_SET = 'IMPORT_SPECIFIER_SET'; var IMPORT_TYPE_CLAUSE = 'IMPORT_TYPE_CLAUSE'; var IMPORTED_BINDING = 'IMPORTED_BINDING'; var INDEX_SIGNATURE = 'INDEX_SIGNATURE'; var INTERFACE_DECLARATION = 'INTERFACE_DECLARATION'; var JSX_ATTRIBUTE = 'JSX_ATTRIBUTE'; var JSX_ELEMENT = 'JSX_ELEMENT'; var JSX_ELEMENT_NAME = 'JSX_ELEMENT_NAME'; var JSX_PLACEHOLDER = 'JSX_PLACEHOLDER'; var JSX_SPREAD_ATTRIBUTE = 'JSX_SPREAD_ATTRIBUTE'; var JSX_TEXT = 'JSX_TEXT'; var LABELLED_STATEMENT = 'LABELLED_STATEMENT'; var LITERAL_EXPRESSION = 'LITERAL_EXPRESSION'; var LITERAL_PROPERTY_NAME = 'LITERAL_PROPERTY_NAME'; var MEMBER_EXPRESSION = 'MEMBER_EXPRESSION'; var MEMBER_LOOKUP_EXPRESSION = 'MEMBER_LOOKUP_EXPRESSION'; var METHOD = 'METHOD'; var METHOD_SIGNATURE = 'METHOD_SIGNATURE'; var MODULE = 'MODULE'; var MODULE_SPECIFIER = 'MODULE_SPECIFIER'; var NAME_SPACE_EXPORT = 'NAME_SPACE_EXPORT'; var NAME_SPACE_IMPORT = 'NAME_SPACE_IMPORT'; var NAMED_EXPORT = 'NAMED_EXPORT'; var NEW_EXPRESSION = 'NEW_EXPRESSION'; var OBJECT_LITERAL = 'OBJECT_LITERAL'; var OBJECT_PATTERN = 'OBJECT_PATTERN'; var OBJECT_PATTERN_FIELD = 'OBJECT_PATTERN_FIELD'; var OBJECT_TYPE = 'OBJECT_TYPE'; var PAREN_EXPRESSION = 'PAREN_EXPRESSION'; var POSTFIX_EXPRESSION = 'POSTFIX_EXPRESSION'; var PREDEFINED_TYPE = 'PREDEFINED_TYPE'; var PROPERTY_NAME_ASSIGNMENT = 'PROPERTY_NAME_ASSIGNMENT'; var PROPERTY_NAME_SHORTHAND = 'PROPERTY_NAME_SHORTHAND'; var PROPERTY_SIGNATURE = 'PROPERTY_SIGNATURE'; var PROPERTY_VARIABLE_DECLARATION = 'PROPERTY_VARIABLE_DECLARATION'; var REST_PARAMETER = 'REST_PARAMETER'; var RETURN_STATEMENT = 'RETURN_STATEMENT'; var SCRIPT = 'SCRIPT'; var SET_ACCESSOR = 'SET_ACCESSOR'; var SPREAD_EXPRESSION = 'SPREAD_EXPRESSION'; var SPREAD_PATTERN_ELEMENT = 'SPREAD_PATTERN_ELEMENT'; var STATE_MACHINE = 'STATE_MACHINE'; var SUPER_EXPRESSION = 'SUPER_EXPRESSION'; var SWITCH_STATEMENT = 'SWITCH_STATEMENT'; var SYNTAX_ERROR_TREE = 'SYNTAX_ERROR_TREE'; var TEMPLATE_LITERAL_EXPRESSION = 'TEMPLATE_LITERAL_EXPRESSION'; var TEMPLATE_LITERAL_PORTION = 'TEMPLATE_LITERAL_PORTION'; var TEMPLATE_SUBSTITUTION = 'TEMPLATE_SUBSTITUTION'; var THIS_EXPRESSION = 'THIS_EXPRESSION'; var THROW_STATEMENT = 'THROW_STATEMENT'; var TRY_STATEMENT = 'TRY_STATEMENT'; var TYPE_ALIAS_DECLARATION = 'TYPE_ALIAS_DECLARATION'; var TYPE_ARGUMENTS = 'TYPE_ARGUMENTS'; var TYPE_NAME = 'TYPE_NAME'; var TYPE_PARAMETER = 'TYPE_PARAMETER'; var TYPE_PARAMETERS = 'TYPE_PARAMETERS'; var TYPE_REFERENCE = 'TYPE_REFERENCE'; var UNARY_EXPRESSION = 'UNARY_EXPRESSION'; var UNION_TYPE = 'UNION_TYPE'; var VARIABLE_DECLARATION = 'VARIABLE_DECLARATION'; var VARIABLE_DECLARATION_LIST = 'VARIABLE_DECLARATION_LIST'; var VARIABLE_STATEMENT = 'VARIABLE_STATEMENT'; var WHILE_STATEMENT = 'WHILE_STATEMENT'; var WITH_STATEMENT = 'WITH_STATEMENT'; var YIELD_EXPRESSION = 'YIELD_EXPRESSION'; return { get ANNOTATION() { return ANNOTATION; }, get ANON_BLOCK() { return ANON_BLOCK; }, get ARGUMENT_LIST() { return ARGUMENT_LIST; }, get ARRAY_COMPREHENSION() { return ARRAY_COMPREHENSION; }, get ARRAY_LITERAL() { return ARRAY_LITERAL; }, get ARRAY_PATTERN() { return ARRAY_PATTERN; }, get ARRAY_TYPE() { return ARRAY_TYPE; }, get ARROW_FUNCTION() { return ARROW_FUNCTION; }, get ASSIGNMENT_ELEMENT() { return ASSIGNMENT_ELEMENT; }, get AWAIT_EXPRESSION() { return AWAIT_EXPRESSION; }, get BINARY_EXPRESSION() { return BINARY_EXPRESSION; }, get BINDING_ELEMENT() { return BINDING_ELEMENT; }, get BINDING_IDENTIFIER() { return BINDING_IDENTIFIER; }, get BLOCK() { return BLOCK; }, get BREAK_STATEMENT() { return BREAK_STATEMENT; }, get CALL_EXPRESSION() { return CALL_EXPRESSION; }, get CALL_SIGNATURE() { return CALL_SIGNATURE; }, get CASE_CLAUSE() { return CASE_CLAUSE; }, get CATCH() { return CATCH; }, get CLASS_DECLARATION() { return CLASS_DECLARATION; }, get CLASS_EXPRESSION() { return CLASS_EXPRESSION; }, get COMMA_EXPRESSION() { return COMMA_EXPRESSION; }, get COMPREHENSION_FOR() { return COMPREHENSION_FOR; }, get COMPREHENSION_IF() { return COMPREHENSION_IF; }, get COMPUTED_PROPERTY_NAME() { return COMPUTED_PROPERTY_NAME; }, get CONDITIONAL_EXPRESSION() { return CONDITIONAL_EXPRESSION; }, get CONSTRUCT_SIGNATURE() { return CONSTRUCT_SIGNATURE; }, get CONSTRUCTOR_TYPE() { return CONSTRUCTOR_TYPE; }, get CONTINUE_STATEMENT() { return CONTINUE_STATEMENT; }, get COVER_FORMALS() { return COVER_FORMALS; }, get COVER_INITIALIZED_NAME() { return COVER_INITIALIZED_NAME; }, get DEBUGGER_STATEMENT() { return DEBUGGER_STATEMENT; }, get DEFAULT_CLAUSE() { return DEFAULT_CLAUSE; }, get DO_WHILE_STATEMENT() { return DO_WHILE_STATEMENT; }, get EMPTY_STATEMENT() { return EMPTY_STATEMENT; }, get EXPORT_DECLARATION() { return EXPORT_DECLARATION; }, get EXPORT_DEFAULT() { return EXPORT_DEFAULT; }, get EXPORT_SPECIFIER() { return EXPORT_SPECIFIER; }, get EXPORT_SPECIFIER_SET() { return EXPORT_SPECIFIER_SET; }, get EXPORT_STAR() { return EXPORT_STAR; }, get EXPRESSION_STATEMENT() { return EXPRESSION_STATEMENT; }, get FINALLY() { return FINALLY; }, get FOR_IN_STATEMENT() { return FOR_IN_STATEMENT; }, get FOR_OF_STATEMENT() { return FOR_OF_STATEMENT; }, get FOR_ON_STATEMENT() { return FOR_ON_STATEMENT; }, get FOR_STATEMENT() { return FOR_STATEMENT; }, get FORMAL_PARAMETER() { return FORMAL_PARAMETER; }, get FORMAL_PARAMETER_LIST() { return FORMAL_PARAMETER_LIST; }, get FORWARD_DEFAULT_EXPORT() { return FORWARD_DEFAULT_EXPORT; }, get FUNCTION_BODY() { return FUNCTION_BODY; }, get FUNCTION_DECLARATION() { return FUNCTION_DECLARATION; }, get FUNCTION_EXPRESSION() { return FUNCTION_EXPRESSION; }, get FUNCTION_TYPE() { return FUNCTION_TYPE; }, get GENERATOR_COMPREHENSION() { return GENERATOR_COMPREHENSION; }, get GET_ACCESSOR() { return GET_ACCESSOR; }, get IDENTIFIER_EXPRESSION() { return IDENTIFIER_EXPRESSION; }, get IF_STATEMENT() { return IF_STATEMENT; }, get IMPORT_CLAUSE_PAIR() { return IMPORT_CLAUSE_PAIR; }, get IMPORT_DECLARATION() { return IMPORT_DECLARATION; }, get IMPORT_SPECIFIER() { return IMPORT_SPECIFIER; }, get IMPORT_SPECIFIER_SET() { return IMPORT_SPECIFIER_SET; }, get IMPORT_TYPE_CLAUSE() { return IMPORT_TYPE_CLAUSE; }, get IMPORTED_BINDING() { return IMPORTED_BINDING; }, get INDEX_SIGNATURE() { return INDEX_SIGNATURE; }, get INTERFACE_DECLARATION() { return INTERFACE_DECLARATION; }, get JSX_ATTRIBUTE() { return JSX_ATTRIBUTE; }, get JSX_ELEMENT() { return JSX_ELEMENT; }, get JSX_ELEMENT_NAME() { return JSX_ELEMENT_NAME; }, get JSX_PLACEHOLDER() { return JSX_PLACEHOLDER; }, get JSX_SPREAD_ATTRIBUTE() { return JSX_SPREAD_ATTRIBUTE; }, get JSX_TEXT() { return JSX_TEXT; }, get LABELLED_STATEMENT() { return LABELLED_STATEMENT; }, get LITERAL_EXPRESSION() { return LITERAL_EXPRESSION; }, get LITERAL_PROPERTY_NAME() { return LITERAL_PROPERTY_NAME; }, get MEMBER_EXPRESSION() { return MEMBER_EXPRESSION; }, get MEMBER_LOOKUP_EXPRESSION() { return MEMBER_LOOKUP_EXPRESSION; }, get METHOD() { return METHOD; }, get METHOD_SIGNATURE() { return METHOD_SIGNATURE; }, get MODULE() { return MODULE; }, get MODULE_SPECIFIER() { return MODULE_SPECIFIER; }, get NAME_SPACE_EXPORT() { return NAME_SPACE_EXPORT; }, get NAME_SPACE_IMPORT() { return NAME_SPACE_IMPORT; }, get NAMED_EXPORT() { return NAMED_EXPORT; }, get NEW_EXPRESSION() { return NEW_EXPRESSION; }, get OBJECT_LITERAL() { return OBJECT_LITERAL; }, get OBJECT_PATTERN() { return OBJECT_PATTERN; }, get OBJECT_PATTERN_FIELD() { return OBJECT_PATTERN_FIELD; }, get OBJECT_TYPE() { return OBJECT_TYPE; }, get PAREN_EXPRESSION() { return PAREN_EXPRESSION; }, get POSTFIX_EXPRESSION() { return POSTFIX_EXPRESSION; }, get PREDEFINED_TYPE() { return PREDEFINED_TYPE; }, get PROPERTY_NAME_ASSIGNMENT() { return PROPERTY_NAME_ASSIGNMENT; }, get PROPERTY_NAME_SHORTHAND() { return PROPERTY_NAME_SHORTHAND; }, get PROPERTY_SIGNATURE() { return PROPERTY_SIGNATURE; }, get PROPERTY_VARIABLE_DECLARATION() { return PROPERTY_VARIABLE_DECLARATION; }, get REST_PARAMETER() { return REST_PARAMETER; }, get RETURN_STATEMENT() { return RETURN_STATEMENT; }, get SCRIPT() { return SCRIPT; }, get SET_ACCESSOR() { return SET_ACCESSOR; }, get SPREAD_EXPRESSION() { return SPREAD_EXPRESSION; }, get SPREAD_PATTERN_ELEMENT() { return SPREAD_PATTERN_ELEMENT; }, get STATE_MACHINE() { return STATE_MACHINE; }, get SUPER_EXPRESSION() { return SUPER_EXPRESSION; }, get SWITCH_STATEMENT() { return SWITCH_STATEMENT; }, get SYNTAX_ERROR_TREE() { return SYNTAX_ERROR_TREE; }, get TEMPLATE_LITERAL_EXPRESSION() { return TEMPLATE_LITERAL_EXPRESSION; }, get TEMPLATE_LITERAL_PORTION() { return TEMPLATE_LITERAL_PORTION; }, get TEMPLATE_SUBSTITUTION() { return TEMPLATE_SUBSTITUTION; }, get THIS_EXPRESSION() { return THIS_EXPRESSION; }, get THROW_STATEMENT() { return THROW_STATEMENT; }, get TRY_STATEMENT() { return TRY_STATEMENT; }, get TYPE_ALIAS_DECLARATION() { return TYPE_ALIAS_DECLARATION; }, get TYPE_ARGUMENTS() { return TYPE_ARGUMENTS; }, get TYPE_NAME() { return TYPE_NAME; }, get TYPE_PARAMETER() { return TYPE_PARAMETER; }, get TYPE_PARAMETERS() { return TYPE_PARAMETERS; }, get TYPE_REFERENCE() { return TYPE_REFERENCE; }, get UNARY_EXPRESSION() { return UNARY_EXPRESSION; }, get UNION_TYPE() { return UNION_TYPE; }, get VARIABLE_DECLARATION() { return VARIABLE_DECLARATION; }, get VARIABLE_DECLARATION_LIST() { return VARIABLE_DECLARATION_LIST; }, get VARIABLE_STATEMENT() { return VARIABLE_STATEMENT; }, get WHILE_STATEMENT() { return WHILE_STATEMENT; }, get WITH_STATEMENT() { return WITH_STATEMENT; }, get YIELD_EXPRESSION() { return YIELD_EXPRESSION; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/TokenType.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/TokenType.js"; var AMPERSAND = '&'; var AMPERSAND_EQUAL = '&='; var AND = '&&'; var ARROW = '=>'; var AT = '@'; var BACK_QUOTE = '`'; var BANG = '!'; var BAR = '|'; var BAR_EQUAL = '|='; var BREAK = 'break'; var CARET = '^'; var CARET_EQUAL = '^='; var CASE = 'case'; var CATCH = 'catch'; var CLASS = 'class'; var CLOSE_ANGLE = '>'; var CLOSE_CURLY = '}'; var CLOSE_PAREN = ')'; var CLOSE_SQUARE = ']'; var COLON = ':'; var COMMA = ','; var CONST = 'const'; var CONTINUE = 'continue'; var DEBUGGER = 'debugger'; var DEFAULT = 'default'; var DELETE = 'delete'; var DO = 'do'; var DOT_DOT_DOT = '...'; var ELSE = 'else'; var END_OF_FILE = 'End of File'; var ENUM = 'enum'; var EQUAL = '='; var EQUAL_EQUAL = '=='; var EQUAL_EQUAL_EQUAL = '==='; var ERROR = 'error'; var EXPORT = 'export'; var EXTENDS = 'extends'; var FALSE = 'false'; var FINALLY = 'finally'; var FOR = 'for'; var FUNCTION = 'function'; var GREATER_EQUAL = '>='; var IDENTIFIER = 'identifier'; var IF = 'if'; var IMPLEMENTS = 'implements'; var IMPORT = 'import'; var IN = 'in'; var INSTANCEOF = 'instanceof'; var INTERFACE = 'interface'; var JSX_IDENTIFIER = 'jsx identifier'; var LEFT_SHIFT = '<<'; var LEFT_SHIFT_EQUAL = '<<='; var LESS_EQUAL = '<='; var LET = 'let'; var MINUS = '-'; var MINUS_EQUAL = '-='; var MINUS_MINUS = '--'; var NEW = 'new'; var NO_SUBSTITUTION_TEMPLATE = 'no substitution template'; var NOT_EQUAL = '!='; var NOT_EQUAL_EQUAL = '!=='; var NULL = 'null'; var NUMBER = 'number literal'; var OPEN_ANGLE = '<'; var OPEN_CURLY = '{'; var OPEN_PAREN = '('; var OPEN_SQUARE = '['; var OR = '||'; var PACKAGE = 'package'; var PERCENT = '%'; var PERCENT_EQUAL = '%='; var PERIOD = '.'; var PLUS = '+'; var PLUS_EQUAL = '+='; var PLUS_PLUS = '++'; var PRIVATE = 'private'; var PROTECTED = 'protected'; var PUBLIC = 'public'; var QUESTION = '?'; var REGULAR_EXPRESSION = 'regular expression literal'; var RETURN = 'return'; var RIGHT_SHIFT = '>>'; var RIGHT_SHIFT_EQUAL = '>>='; var SEMI_COLON = ';'; var SLASH = '/'; var SLASH_EQUAL = '/='; var STAR = '*'; var STAR_EQUAL = '*='; var STAR_STAR = '**'; var STAR_STAR_EQUAL = '**='; var STATIC = 'static'; var STRING = 'string literal'; var SUPER = 'super'; var SWITCH = 'switch'; var TEMPLATE_HEAD = 'template head'; var TEMPLATE_MIDDLE = 'template middle'; var TEMPLATE_TAIL = 'template tail'; var THIS = 'this'; var THROW = 'throw'; var TILDE = '~'; var TRUE = 'true'; var TRY = 'try'; var TYPEOF = 'typeof'; var UNSIGNED_RIGHT_SHIFT = '>>>'; var UNSIGNED_RIGHT_SHIFT_EQUAL = '>>>='; var VAR = 'var'; var VOID = 'void'; var WHILE = 'while'; var WITH = 'with'; var YIELD = 'yield'; return { get AMPERSAND() { return AMPERSAND; }, get AMPERSAND_EQUAL() { return AMPERSAND_EQUAL; }, get AND() { return AND; }, get ARROW() { return ARROW; }, get AT() { return AT; }, get BACK_QUOTE() { return BACK_QUOTE; }, get BANG() { return BANG; }, get BAR() { return BAR; }, get BAR_EQUAL() { return BAR_EQUAL; }, get BREAK() { return BREAK; }, get CARET() { return CARET; }, get CARET_EQUAL() { return CARET_EQUAL; }, get CASE() { return CASE; }, get CATCH() { return CATCH; }, get CLASS() { return CLASS; }, get CLOSE_ANGLE() { return CLOSE_ANGLE; }, get CLOSE_CURLY() { return CLOSE_CURLY; }, get CLOSE_PAREN() { return CLOSE_PAREN; }, get CLOSE_SQUARE() { return CLOSE_SQUARE; }, get COLON() { return COLON; }, get COMMA() { return COMMA; }, get CONST() { return CONST; }, get CONTINUE() { return CONTINUE; }, get DEBUGGER() { return DEBUGGER; }, get DEFAULT() { return DEFAULT; }, get DELETE() { return DELETE; }, get DO() { return DO; }, get DOT_DOT_DOT() { return DOT_DOT_DOT; }, get ELSE() { return ELSE; }, get END_OF_FILE() { return END_OF_FILE; }, get ENUM() { return ENUM; }, get EQUAL() { return EQUAL; }, get EQUAL_EQUAL() { return EQUAL_EQUAL; }, get EQUAL_EQUAL_EQUAL() { return EQUAL_EQUAL_EQUAL; }, get ERROR() { return ERROR; }, get EXPORT() { return EXPORT; }, get EXTENDS() { return EXTENDS; }, get FALSE() { return FALSE; }, get FINALLY() { return FINALLY; }, get FOR() { return FOR; }, get FUNCTION() { return FUNCTION; }, get GREATER_EQUAL() { return GREATER_EQUAL; }, get IDENTIFIER() { return IDENTIFIER; }, get IF() { return IF; }, get IMPLEMENTS() { return IMPLEMENTS; }, get IMPORT() { return IMPORT; }, get IN() { return IN; }, get INSTANCEOF() { return INSTANCEOF; }, get INTERFACE() { return INTERFACE; }, get JSX_IDENTIFIER() { return JSX_IDENTIFIER; }, get LEFT_SHIFT() { return LEFT_SHIFT; }, get LEFT_SHIFT_EQUAL() { return LEFT_SHIFT_EQUAL; }, get LESS_EQUAL() { return LESS_EQUAL; }, get LET() { return LET; }, get MINUS() { return MINUS; }, get MINUS_EQUAL() { return MINUS_EQUAL; }, get MINUS_MINUS() { return MINUS_MINUS; }, get NEW() { return NEW; }, get NO_SUBSTITUTION_TEMPLATE() { return NO_SUBSTITUTION_TEMPLATE; }, get NOT_EQUAL() { return NOT_EQUAL; }, get NOT_EQUAL_EQUAL() { return NOT_EQUAL_EQUAL; }, get NULL() { return NULL; }, get NUMBER() { return NUMBER; }, get OPEN_ANGLE() { return OPEN_ANGLE; }, get OPEN_CURLY() { return OPEN_CURLY; }, get OPEN_PAREN() { return OPEN_PAREN; }, get OPEN_SQUARE() { return OPEN_SQUARE; }, get OR() { return OR; }, get PACKAGE() { return PACKAGE; }, get PERCENT() { return PERCENT; }, get PERCENT_EQUAL() { return PERCENT_EQUAL; }, get PERIOD() { return PERIOD; }, get PLUS() { return PLUS; }, get PLUS_EQUAL() { return PLUS_EQUAL; }, get PLUS_PLUS() { return PLUS_PLUS; }, get PRIVATE() { return PRIVATE; }, get PROTECTED() { return PROTECTED; }, get PUBLIC() { return PUBLIC; }, get QUESTION() { return QUESTION; }, get REGULAR_EXPRESSION() { return REGULAR_EXPRESSION; }, get RETURN() { return RETURN; }, get RIGHT_SHIFT() { return RIGHT_SHIFT; }, get RIGHT_SHIFT_EQUAL() { return RIGHT_SHIFT_EQUAL; }, get SEMI_COLON() { return SEMI_COLON; }, get SLASH() { return SLASH; }, get SLASH_EQUAL() { return SLASH_EQUAL; }, get STAR() { return STAR; }, get STAR_EQUAL() { return STAR_EQUAL; }, get STAR_STAR() { return STAR_STAR; }, get STAR_STAR_EQUAL() { return STAR_STAR_EQUAL; }, get STATIC() { return STATIC; }, get STRING() { return STRING; }, get SUPER() { return SUPER; }, get SWITCH() { return SWITCH; }, get TEMPLATE_HEAD() { return TEMPLATE_HEAD; }, get TEMPLATE_MIDDLE() { return TEMPLATE_MIDDLE; }, get TEMPLATE_TAIL() { return TEMPLATE_TAIL; }, get THIS() { return THIS; }, get THROW() { return THROW; }, get TILDE() { return TILDE; }, get TRUE() { return TRUE; }, get TRY() { return TRY; }, get TYPEOF() { return TYPEOF; }, get UNSIGNED_RIGHT_SHIFT() { return UNSIGNED_RIGHT_SHIFT; }, get UNSIGNED_RIGHT_SHIFT_EQUAL() { return UNSIGNED_RIGHT_SHIFT_EQUAL; }, get VAR() { return VAR; }, get VOID() { return VOID; }, get WHILE() { return WHILE; }, get WITH() { return WITH; }, get YIELD() { return YIELD; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/Token.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/Token.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/Token.js")), AMPERSAND_EQUAL = $__1.AMPERSAND_EQUAL, BAR_EQUAL = $__1.BAR_EQUAL, CARET_EQUAL = $__1.CARET_EQUAL, EQUAL = $__1.EQUAL, LEFT_SHIFT_EQUAL = $__1.LEFT_SHIFT_EQUAL, MINUS_EQUAL = $__1.MINUS_EQUAL, PERCENT_EQUAL = $__1.PERCENT_EQUAL, PLUS_EQUAL = $__1.PLUS_EQUAL, RIGHT_SHIFT_EQUAL = $__1.RIGHT_SHIFT_EQUAL, SLASH_EQUAL = $__1.SLASH_EQUAL, STAR_EQUAL = $__1.STAR_EQUAL, STAR_STAR_EQUAL = $__1.STAR_STAR_EQUAL, UNSIGNED_RIGHT_SHIFT_EQUAL = $__1.UNSIGNED_RIGHT_SHIFT_EQUAL; var Token = function() { function Token(type, location) { this.type = type; this.location = location; } return ($traceurRuntime.createClass)(Token, { toString: function() { return this.type; }, isAssignmentOperator: function() { return isAssignmentOperator(this.type); }, isKeyword: function() { return false; }, isStrictKeyword: function() { return false; } }, {}); }(); function isAssignmentOperator(type) { switch (type) { case AMPERSAND_EQUAL: case BAR_EQUAL: case CARET_EQUAL: case EQUAL: case LEFT_SHIFT_EQUAL: case MINUS_EQUAL: case PERCENT_EQUAL: case PLUS_EQUAL: case RIGHT_SHIFT_EQUAL: case SLASH_EQUAL: case STAR_EQUAL: case STAR_STAR_EQUAL: case UNSIGNED_RIGHT_SHIFT_EQUAL: return true; } return false; } return { get Token() { return Token; }, get isAssignmentOperator() { return isAssignmentOperator; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/JSON.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/JSON.js"; function transform(v) { var replacer = arguments[1] !== (void 0) ? arguments[1] : function(k, v) { return v; }; return transform_(replacer('', v), replacer); } function transform_(v, replacer) { var rv, tv; if (Array.isArray(v)) { var len = v.length; rv = Array(len); for (var i = 0; i < len; i++) { tv = transform_(replacer(String(i), v[i]), replacer); rv[i] = tv === undefined ? null : tv; } return rv; } if (v instanceof Object) { rv = {}; Object.keys(v).forEach(function(k) { tv = transform_(replacer(k, v[k]), replacer); if (tv !== undefined) { rv[k] = tv; } }); return rv; } return v; } return {get transform() { return transform; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/PredefinedName.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/PredefinedName.js"; var $ARGUMENTS = '$arguments'; var ANY = 'any'; var APPLY = 'apply'; var ARGUMENTS = 'arguments'; var ARRAY = 'Array'; var AS = 'as'; var ASYNC = 'async'; var ASYNC_STAR = 'async star'; var AWAIT = 'await'; var BIND = 'bind'; var CALL = 'call'; var CONFIGURABLE = 'configurable'; var CONSTRUCTOR = 'constructor'; var CREATE = 'create'; var CURRENT = 'current'; var DEFINE_PROPERTY = 'defineProperty'; var ENUMERABLE = 'enumerable'; var FREEZE = 'freeze'; var FROM = 'from'; var FUNCTION = 'Function'; var GET = 'get'; var HAS = 'has'; var LENGTH = 'length'; var MODULE = 'module'; var NEW = 'new'; var OBJECT = 'Object'; var OBJECT_NAME = 'Object'; var OF = 'of'; var ON = 'on'; var PREVENT_EXTENSIONS = 'preventExtensions'; var PROTOTYPE = 'prototype'; var PUSH = 'push'; var SET = 'set'; var SLICE = 'slice'; var THIS = 'this'; var TRACEUR_RUNTIME = '$traceurRuntime'; var TYPE = 'type'; var UNDEFINED = 'undefined'; var WRITABLE = 'writable'; return { get $ARGUMENTS() { return $ARGUMENTS; }, get ANY() { return ANY; }, get APPLY() { return APPLY; }, get ARGUMENTS() { return ARGUMENTS; }, get ARRAY() { return ARRAY; }, get AS() { return AS; }, get ASYNC() { return ASYNC; }, get ASYNC_STAR() { return ASYNC_STAR; }, get AWAIT() { return AWAIT; }, get BIND() { return BIND; }, get CALL() { return CALL; }, get CONFIGURABLE() { return CONFIGURABLE; }, get CONSTRUCTOR() { return CONSTRUCTOR; }, get CREATE() { return CREATE; }, get CURRENT() { return CURRENT; }, get DEFINE_PROPERTY() { return DEFINE_PROPERTY; }, get ENUMERABLE() { return ENUMERABLE; }, get FREEZE() { return FREEZE; }, get FROM() { return FROM; }, get FUNCTION() { return FUNCTION; }, get GET() { return GET; }, get HAS() { return HAS; }, get LENGTH() { return LENGTH; }, get MODULE() { return MODULE; }, get NEW() { return NEW; }, get OBJECT() { return OBJECT; }, get OBJECT_NAME() { return OBJECT_NAME; }, get OF() { return OF; }, get ON() { return ON; }, get PREVENT_EXTENSIONS() { return PREVENT_EXTENSIONS; }, get PROTOTYPE() { return PROTOTYPE; }, get PUSH() { return PUSH; }, get SET() { return SET; }, get SLICE() { return SLICE; }, get THIS() { return THIS; }, get TRACEUR_RUNTIME() { return TRACEUR_RUNTIME; }, get TYPE() { return TYPE; }, get UNDEFINED() { return UNDEFINED; }, get WRITABLE() { return WRITABLE; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/trees/ParseTree.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/trees/ParseTree.js"; var ParseTreeType = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeType.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")); var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../TokenType.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")), IDENTIFIER = $__2.IDENTIFIER, STAR = $__2.STAR, STRING = $__2.STRING, VAR = $__2.VAR; var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Token.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")).Token; var utilJSON = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/JSON.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")); var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PredefinedName.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")), ASYNC = $__4.ASYNC, ASYNC_STAR = $__4.ASYNC_STAR; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeType.js", "traceur@0.0.112/src/syntax/trees/ParseTree.js")), ARRAY_COMPREHENSION = $__5.ARRAY_COMPREHENSION, ARRAY_LITERAL = $__5.ARRAY_LITERAL, ARRAY_PATTERN = $__5.ARRAY_PATTERN, ARROW_FUNCTION = $__5.ARROW_FUNCTION, AWAIT_EXPRESSION = $__5.AWAIT_EXPRESSION, BINARY_EXPRESSION = $__5.BINARY_EXPRESSION, BINDING_IDENTIFIER = $__5.BINDING_IDENTIFIER, BLOCK = $__5.BLOCK, BREAK_STATEMENT = $__5.BREAK_STATEMENT, CALL_EXPRESSION = $__5.CALL_EXPRESSION, CLASS_DECLARATION = $__5.CLASS_DECLARATION, CLASS_EXPRESSION = $__5.CLASS_EXPRESSION, COMMA_EXPRESSION = $__5.COMMA_EXPRESSION, CONDITIONAL_EXPRESSION = $__5.CONDITIONAL_EXPRESSION, CONSTRUCTOR_TYPE = $__5.CONSTRUCTOR_TYPE, CONTINUE_STATEMENT = $__5.CONTINUE_STATEMENT, DEBUGGER_STATEMENT = $__5.DEBUGGER_STATEMENT, DO_WHILE_STATEMENT = $__5.DO_WHILE_STATEMENT, EMPTY_STATEMENT = $__5.EMPTY_STATEMENT, EXPORT_DECLARATION = $__5.EXPORT_DECLARATION, EXPRESSION_STATEMENT = $__5.EXPRESSION_STATEMENT, FOR_IN_STATEMENT = $__5.FOR_IN_STATEMENT, FOR_OF_STATEMENT = $__5.FOR_OF_STATEMENT, FOR_ON_STATEMENT = $__5.FOR_ON_STATEMENT, FOR_STATEMENT = $__5.FOR_STATEMENT, FORMAL_PARAMETER = $__5.FORMAL_PARAMETER, FUNCTION_DECLARATION = $__5.FUNCTION_DECLARATION, FUNCTION_EXPRESSION = $__5.FUNCTION_EXPRESSION, FUNCTION_TYPE = $__5.FUNCTION_TYPE, GENERATOR_COMPREHENSION = $__5.GENERATOR_COMPREHENSION, IDENTIFIER_EXPRESSION = $__5.IDENTIFIER_EXPRESSION, IF_STATEMENT = $__5.IF_STATEMENT, IMPORT_DECLARATION = $__5.IMPORT_DECLARATION, IMPORTED_BINDING = $__5.IMPORTED_BINDING, INTERFACE_DECLARATION = $__5.INTERFACE_DECLARATION, JSX_ELEMENT = $__5.JSX_ELEMENT, LABELLED_STATEMENT = $__5.LABELLED_STATEMENT, LITERAL_EXPRESSION = $__5.LITERAL_EXPRESSION, LITERAL_PROPERTY_NAME = $__5.LITERAL_PROPERTY_NAME, MEMBER_EXPRESSION = $__5.MEMBER_EXPRESSION, MEMBER_LOOKUP_EXPRESSION = $__5.MEMBER_LOOKUP_EXPRESSION, NEW_EXPRESSION = $__5.NEW_EXPRESSION, OBJECT_LITERAL = $__5.OBJECT_LITERAL, OBJECT_PATTERN = $__5.OBJECT_PATTERN, OBJECT_TYPE = $__5.OBJECT_TYPE, PAREN_EXPRESSION = $__5.PAREN_EXPRESSION, POSTFIX_EXPRESSION = $__5.POSTFIX_EXPRESSION, PREDEFINED_TYPE = $__5.PREDEFINED_TYPE, PROPERTY_NAME_SHORTHAND = $__5.PROPERTY_NAME_SHORTHAND, REST_PARAMETER = $__5.REST_PARAMETER, RETURN_STATEMENT = $__5.RETURN_STATEMENT, SPREAD_EXPRESSION = $__5.SPREAD_EXPRESSION, SPREAD_PATTERN_ELEMENT = $__5.SPREAD_PATTERN_ELEMENT, SUPER_EXPRESSION = $__5.SUPER_EXPRESSION, SWITCH_STATEMENT = $__5.SWITCH_STATEMENT, TEMPLATE_LITERAL_EXPRESSION = $__5.TEMPLATE_LITERAL_EXPRESSION, THIS_EXPRESSION = $__5.THIS_EXPRESSION, THROW_STATEMENT = $__5.THROW_STATEMENT, TRY_STATEMENT = $__5.TRY_STATEMENT, TYPE_ALIAS_DECLARATION = $__5.TYPE_ALIAS_DECLARATION, TYPE_NAME = $__5.TYPE_NAME, TYPE_REFERENCE = $__5.TYPE_REFERENCE, UNARY_EXPRESSION = $__5.UNARY_EXPRESSION, VARIABLE_DECLARATION = $__5.VARIABLE_DECLARATION, VARIABLE_STATEMENT = $__5.VARIABLE_STATEMENT, WHILE_STATEMENT = $__5.WHILE_STATEMENT, WITH_STATEMENT = $__5.WITH_STATEMENT, YIELD_EXPRESSION = $__5.YIELD_EXPRESSION; var ParseTree = function() { function ParseTree(location) { this.location = location; } return ($traceurRuntime.createClass)(ParseTree, { isPattern: function() { switch (this.type) { case ARRAY_PATTERN: case OBJECT_PATTERN: return true; default: return false; } }, isLeftHandSideExpression: function() { switch (this.type) { case ARRAY_PATTERN: case IDENTIFIER_EXPRESSION: case MEMBER_EXPRESSION: case MEMBER_LOOKUP_EXPRESSION: case OBJECT_PATTERN: return true; case PAREN_EXPRESSION: return this.expression.isLeftHandSideExpression(); default: return false; } }, isAssignmentExpression: function() { switch (this.type) { case ARRAY_COMPREHENSION: case ARRAY_LITERAL: case ARROW_FUNCTION: case AWAIT_EXPRESSION: case BINARY_EXPRESSION: case CALL_EXPRESSION: case CLASS_EXPRESSION: case CONDITIONAL_EXPRESSION: case FUNCTION_EXPRESSION: case GENERATOR_COMPREHENSION: case IDENTIFIER_EXPRESSION: case JSX_ELEMENT: case LITERAL_EXPRESSION: case MEMBER_EXPRESSION: case MEMBER_LOOKUP_EXPRESSION: case NEW_EXPRESSION: case OBJECT_LITERAL: case PAREN_EXPRESSION: case POSTFIX_EXPRESSION: case TEMPLATE_LITERAL_EXPRESSION: case SUPER_EXPRESSION: case THIS_EXPRESSION: case UNARY_EXPRESSION: case YIELD_EXPRESSION: return true; default: return false; } }, isMemberExpression: function() { switch (this.type) { case THIS_EXPRESSION: case CLASS_EXPRESSION: case SUPER_EXPRESSION: case IDENTIFIER_EXPRESSION: case JSX_ELEMENT: case LITERAL_EXPRESSION: case ARRAY_LITERAL: case OBJECT_LITERAL: case PAREN_EXPRESSION: case TEMPLATE_LITERAL_EXPRESSION: case FUNCTION_EXPRESSION: case MEMBER_LOOKUP_EXPRESSION: case MEMBER_EXPRESSION: case CALL_EXPRESSION: return true; case NEW_EXPRESSION: return this.args !== null; } return false; }, isExpression: function() { return this.isAssignmentExpression() || this.type === COMMA_EXPRESSION; }, isAssignmentOrSpread: function() { return this.isAssignmentExpression() || this.type === SPREAD_EXPRESSION; }, isRestParameter: function() { return this.type === REST_PARAMETER || (this.type === FORMAL_PARAMETER && this.parameter.isRestParameter()); }, isSpreadPatternElement: function() { return this.type === SPREAD_PATTERN_ELEMENT; }, isStatementListItem: function() { return this.isStatement() || this.isDeclaration() || this.type === TYPE_ALIAS_DECLARATION; }, isStatement: function() { switch (this.type) { case BLOCK: case VARIABLE_STATEMENT: case EMPTY_STATEMENT: case EXPRESSION_STATEMENT: case IF_STATEMENT: case CONTINUE_STATEMENT: case BREAK_STATEMENT: case RETURN_STATEMENT: case WITH_STATEMENT: case LABELLED_STATEMENT: case THROW_STATEMENT: case TRY_STATEMENT: case DEBUGGER_STATEMENT: return true; } return this.isBreakableStatement(); }, isDeclaration: function() { switch (this.type) { case FUNCTION_DECLARATION: case CLASS_DECLARATION: return true; } return this.isLexicalDeclaration(); }, isLexicalDeclaration: function() { switch (this.type) { case VARIABLE_STATEMENT: return this.declarations.declarationType !== VAR; } return false; }, isBreakableStatement: function() { switch (this.type) { case SWITCH_STATEMENT: return true; } return this.isIterationStatement(); }, isIterationStatement: function() { switch (this.type) { case DO_WHILE_STATEMENT: case FOR_IN_STATEMENT: case FOR_OF_STATEMENT: case FOR_ON_STATEMENT: case FOR_STATEMENT: case WHILE_STATEMENT: return true; } return false; }, isScriptElement: function() { switch (this.type) { case CLASS_DECLARATION: case EXPORT_DECLARATION: case FUNCTION_DECLARATION: case IMPORT_DECLARATION: case INTERFACE_DECLARATION: case VARIABLE_DECLARATION: case TYPE_ALIAS_DECLARATION: return true; } return this.isStatement(); }, isGenerator: function() { return this.functionKind !== null && this.functionKind.type === STAR; }, isAsyncFunction: function() { return this.functionKind !== null && this.functionKind.type === IDENTIFIER && this.functionKind.value === ASYNC; }, isAsyncGenerator: function() { return this.functionKind !== null && this.functionKind.type === IDENTIFIER && this.functionKind.value === ASYNC_STAR; }, isType: function() { switch (this.type) { case CONSTRUCTOR_TYPE: case FUNCTION_TYPE: case OBJECT_TYPE: case PREDEFINED_TYPE: case TYPE_NAME: case TYPE_REFERENCE: return true; } return false; }, getDirectivePrologueStringToken_: function() { var tree = this; if (tree.type !== EXPRESSION_STATEMENT || !(tree = tree.expression)) return null; if (tree.type !== LITERAL_EXPRESSION || !(tree = tree.literalToken)) return null; if (tree.type !== STRING) return null; return tree; }, isDirectivePrologue: function() { return this.getDirectivePrologueStringToken_() !== null; }, isUseStrictDirective: function() { var token = this.getDirectivePrologueStringToken_(); if (!token) return false; var v = token.value; return v === '"use strict"' || v === "'use strict'"; }, toJSON: function() { return utilJSON.transform(this, ParseTree.replacer); }, stringify: function() { var indent = arguments[0] !== (void 0) ? arguments[0] : 2; return JSON.stringify(this, ParseTree.replacer, indent); }, getStringValue: function() { switch (this.type) { case IDENTIFIER_EXPRESSION: case BINDING_IDENTIFIER: return this.identifierToken.toString(); case IMPORTED_BINDING: return this.binding.getStringValue(); case PROPERTY_NAME_SHORTHAND: return this.name.toString(); case LITERAL_PROPERTY_NAME: return this.literalToken.toString(); } throw new Error('Not yet implemented'); } }, { stripLocation: function(key, value) { if (key === 'location') { return undefined; } return value; }, replacer: function(k, v) { if (v instanceof ParseTree || v instanceof Token) { var rv = {type: v.type}; Object.keys(v).forEach(function(name) { if (name !== 'location') rv[name] = v[name]; }); return rv; } return v; } }); }(); return { get ParseTreeType() { return ParseTreeType; }, get ParseTree() { return ParseTree; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/trees/ParseTrees.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/trees/ParseTrees.js"; var ParseTree = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTree.js", "traceur@0.0.112/src/syntax/trees/ParseTrees.js")).ParseTree; var ParseTreeType = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeType.js", "traceur@0.0.112/src/syntax/trees/ParseTrees.js")); var ANNOTATION = ParseTreeType.ANNOTATION; var Annotation = function($__super) { function Annotation(location, name, args) { $traceurRuntime.superConstructor(Annotation).call(this, location); this.name = name; this.args = args; } return ($traceurRuntime.createClass)(Annotation, { transform: function(transformer) { return transformer.transformAnnotation(this); }, visit: function(visitor) { visitor.visitAnnotation(this); }, get type() { return ANNOTATION; } }, {}, $__super); }(ParseTree); var ANON_BLOCK = ParseTreeType.ANON_BLOCK; var AnonBlock = function($__super) { function AnonBlock(location, statements) { $traceurRuntime.superConstructor(AnonBlock).call(this, location); this.statements = statements; } return ($traceurRuntime.createClass)(AnonBlock, { transform: function(transformer) { return transformer.transformAnonBlock(this); }, visit: function(visitor) { visitor.visitAnonBlock(this); }, get type() { return ANON_BLOCK; } }, {}, $__super); }(ParseTree); var ARGUMENT_LIST = ParseTreeType.ARGUMENT_LIST; var ArgumentList = function($__super) { function ArgumentList(location, args) { $traceurRuntime.superConstructor(ArgumentList).call(this, location); this.args = args; } return ($traceurRuntime.createClass)(ArgumentList, { transform: function(transformer) { return transformer.transformArgumentList(this); }, visit: function(visitor) { visitor.visitArgumentList(this); }, get type() { return ARGUMENT_LIST; } }, {}, $__super); }(ParseTree); var ARRAY_COMPREHENSION = ParseTreeType.ARRAY_COMPREHENSION; var ArrayComprehension = function($__super) { function ArrayComprehension(location, comprehensionList, expression) { $traceurRuntime.superConstructor(ArrayComprehension).call(this, location); this.comprehensionList = comprehensionList; this.expression = expression; } return ($traceurRuntime.createClass)(ArrayComprehension, { transform: function(transformer) { return transformer.transformArrayComprehension(this); }, visit: function(visitor) { visitor.visitArrayComprehension(this); }, get type() { return ARRAY_COMPREHENSION; } }, {}, $__super); }(ParseTree); var ARRAY_LITERAL = ParseTreeType.ARRAY_LITERAL; var ArrayLiteral = function($__super) { function ArrayLiteral(location, elements) { $traceurRuntime.superConstructor(ArrayLiteral).call(this, location); this.elements = elements; } return ($traceurRuntime.createClass)(ArrayLiteral, { transform: function(transformer) { return transformer.transformArrayLiteral(this); }, visit: function(visitor) { visitor.visitArrayLiteral(this); }, get type() { return ARRAY_LITERAL; } }, {}, $__super); }(ParseTree); var ARRAY_PATTERN = ParseTreeType.ARRAY_PATTERN; var ArrayPattern = function($__super) { function ArrayPattern(location, elements) { $traceurRuntime.superConstructor(ArrayPattern).call(this, location); this.elements = elements; } return ($traceurRuntime.createClass)(ArrayPattern, { transform: function(transformer) { return transformer.transformArrayPattern(this); }, visit: function(visitor) { visitor.visitArrayPattern(this); }, get type() { return ARRAY_PATTERN; } }, {}, $__super); }(ParseTree); var ARRAY_TYPE = ParseTreeType.ARRAY_TYPE; var ArrayType = function($__super) { function ArrayType(location, elementType) { $traceurRuntime.superConstructor(ArrayType).call(this, location); this.elementType = elementType; } return ($traceurRuntime.createClass)(ArrayType, { transform: function(transformer) { return transformer.transformArrayType(this); }, visit: function(visitor) { visitor.visitArrayType(this); }, get type() { return ARRAY_TYPE; } }, {}, $__super); }(ParseTree); var ARROW_FUNCTION = ParseTreeType.ARROW_FUNCTION; var ArrowFunction = function($__super) { function ArrowFunction(location, functionKind, parameterList, body) { $traceurRuntime.superConstructor(ArrowFunction).call(this, location); this.functionKind = functionKind; this.parameterList = parameterList; this.body = body; } return ($traceurRuntime.createClass)(ArrowFunction, { transform: function(transformer) { return transformer.transformArrowFunction(this); }, visit: function(visitor) { visitor.visitArrowFunction(this); }, get type() { return ARROW_FUNCTION; } }, {}, $__super); }(ParseTree); var ASSIGNMENT_ELEMENT = ParseTreeType.ASSIGNMENT_ELEMENT; var AssignmentElement = function($__super) { function AssignmentElement(location, assignment, initializer) { $traceurRuntime.superConstructor(AssignmentElement).call(this, location); this.assignment = assignment; this.initializer = initializer; } return ($traceurRuntime.createClass)(AssignmentElement, { transform: function(transformer) { return transformer.transformAssignmentElement(this); }, visit: function(visitor) { visitor.visitAssignmentElement(this); }, get type() { return ASSIGNMENT_ELEMENT; } }, {}, $__super); }(ParseTree); var AWAIT_EXPRESSION = ParseTreeType.AWAIT_EXPRESSION; var AwaitExpression = function($__super) { function AwaitExpression(location, expression) { $traceurRuntime.superConstructor(AwaitExpression).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(AwaitExpression, { transform: function(transformer) { return transformer.transformAwaitExpression(this); }, visit: function(visitor) { visitor.visitAwaitExpression(this); }, get type() { return AWAIT_EXPRESSION; } }, {}, $__super); }(ParseTree); var BINARY_EXPRESSION = ParseTreeType.BINARY_EXPRESSION; var BinaryExpression = function($__super) { function BinaryExpression(location, left, operator, right) { $traceurRuntime.superConstructor(BinaryExpression).call(this, location); this.left = left; this.operator = operator; this.right = right; } return ($traceurRuntime.createClass)(BinaryExpression, { transform: function(transformer) { return transformer.transformBinaryExpression(this); }, visit: function(visitor) { visitor.visitBinaryExpression(this); }, get type() { return BINARY_EXPRESSION; } }, {}, $__super); }(ParseTree); var BINDING_ELEMENT = ParseTreeType.BINDING_ELEMENT; var BindingElement = function($__super) { function BindingElement(location, binding, initializer) { $traceurRuntime.superConstructor(BindingElement).call(this, location); this.binding = binding; this.initializer = initializer; } return ($traceurRuntime.createClass)(BindingElement, { transform: function(transformer) { return transformer.transformBindingElement(this); }, visit: function(visitor) { visitor.visitBindingElement(this); }, get type() { return BINDING_ELEMENT; } }, {}, $__super); }(ParseTree); var BINDING_IDENTIFIER = ParseTreeType.BINDING_IDENTIFIER; var BindingIdentifier = function($__super) { function BindingIdentifier(location, identifierToken) { $traceurRuntime.superConstructor(BindingIdentifier).call(this, location); this.identifierToken = identifierToken; } return ($traceurRuntime.createClass)(BindingIdentifier, { transform: function(transformer) { return transformer.transformBindingIdentifier(this); }, visit: function(visitor) { visitor.visitBindingIdentifier(this); }, get type() { return BINDING_IDENTIFIER; } }, {}, $__super); }(ParseTree); var BLOCK = ParseTreeType.BLOCK; var Block = function($__super) { function Block(location, statements) { $traceurRuntime.superConstructor(Block).call(this, location); this.statements = statements; } return ($traceurRuntime.createClass)(Block, { transform: function(transformer) { return transformer.transformBlock(this); }, visit: function(visitor) { visitor.visitBlock(this); }, get type() { return BLOCK; } }, {}, $__super); }(ParseTree); var BREAK_STATEMENT = ParseTreeType.BREAK_STATEMENT; var BreakStatement = function($__super) { function BreakStatement(location, name) { $traceurRuntime.superConstructor(BreakStatement).call(this, location); this.name = name; } return ($traceurRuntime.createClass)(BreakStatement, { transform: function(transformer) { return transformer.transformBreakStatement(this); }, visit: function(visitor) { visitor.visitBreakStatement(this); }, get type() { return BREAK_STATEMENT; } }, {}, $__super); }(ParseTree); var CALL_EXPRESSION = ParseTreeType.CALL_EXPRESSION; var CallExpression = function($__super) { function CallExpression(location, operand, args) { $traceurRuntime.superConstructor(CallExpression).call(this, location); this.operand = operand; this.args = args; } return ($traceurRuntime.createClass)(CallExpression, { transform: function(transformer) { return transformer.transformCallExpression(this); }, visit: function(visitor) { visitor.visitCallExpression(this); }, get type() { return CALL_EXPRESSION; } }, {}, $__super); }(ParseTree); var CALL_SIGNATURE = ParseTreeType.CALL_SIGNATURE; var CallSignature = function($__super) { function CallSignature(location, typeParameters, parameterList, returnType) { $traceurRuntime.superConstructor(CallSignature).call(this, location); this.typeParameters = typeParameters; this.parameterList = parameterList; this.returnType = returnType; } return ($traceurRuntime.createClass)(CallSignature, { transform: function(transformer) { return transformer.transformCallSignature(this); }, visit: function(visitor) { visitor.visitCallSignature(this); }, get type() { return CALL_SIGNATURE; } }, {}, $__super); }(ParseTree); var CASE_CLAUSE = ParseTreeType.CASE_CLAUSE; var CaseClause = function($__super) { function CaseClause(location, expression, statements) { $traceurRuntime.superConstructor(CaseClause).call(this, location); this.expression = expression; this.statements = statements; } return ($traceurRuntime.createClass)(CaseClause, { transform: function(transformer) { return transformer.transformCaseClause(this); }, visit: function(visitor) { visitor.visitCaseClause(this); }, get type() { return CASE_CLAUSE; } }, {}, $__super); }(ParseTree); var CATCH = ParseTreeType.CATCH; var Catch = function($__super) { function Catch(location, binding, catchBody) { $traceurRuntime.superConstructor(Catch).call(this, location); this.binding = binding; this.catchBody = catchBody; } return ($traceurRuntime.createClass)(Catch, { transform: function(transformer) { return transformer.transformCatch(this); }, visit: function(visitor) { visitor.visitCatch(this); }, get type() { return CATCH; } }, {}, $__super); }(ParseTree); var CLASS_DECLARATION = ParseTreeType.CLASS_DECLARATION; var ClassDeclaration = function($__super) { function ClassDeclaration(location, name, superClass, elements, annotations, typeParameters) { $traceurRuntime.superConstructor(ClassDeclaration).call(this, location); this.name = name; this.superClass = superClass; this.elements = elements; this.annotations = annotations; this.typeParameters = typeParameters; } return ($traceurRuntime.createClass)(ClassDeclaration, { transform: function(transformer) { return transformer.transformClassDeclaration(this); }, visit: function(visitor) { visitor.visitClassDeclaration(this); }, get type() { return CLASS_DECLARATION; } }, {}, $__super); }(ParseTree); var CLASS_EXPRESSION = ParseTreeType.CLASS_EXPRESSION; var ClassExpression = function($__super) { function ClassExpression(location, name, superClass, elements, annotations, typeParameters) { $traceurRuntime.superConstructor(ClassExpression).call(this, location); this.name = name; this.superClass = superClass; this.elements = elements; this.annotations = annotations; this.typeParameters = typeParameters; } return ($traceurRuntime.createClass)(ClassExpression, { transform: function(transformer) { return transformer.transformClassExpression(this); }, visit: function(visitor) { visitor.visitClassExpression(this); }, get type() { return CLASS_EXPRESSION; } }, {}, $__super); }(ParseTree); var COMMA_EXPRESSION = ParseTreeType.COMMA_EXPRESSION; var CommaExpression = function($__super) { function CommaExpression(location, expressions) { $traceurRuntime.superConstructor(CommaExpression).call(this, location); this.expressions = expressions; } return ($traceurRuntime.createClass)(CommaExpression, { transform: function(transformer) { return transformer.transformCommaExpression(this); }, visit: function(visitor) { visitor.visitCommaExpression(this); }, get type() { return COMMA_EXPRESSION; } }, {}, $__super); }(ParseTree); var COMPREHENSION_FOR = ParseTreeType.COMPREHENSION_FOR; var ComprehensionFor = function($__super) { function ComprehensionFor(location, left, iterator) { $traceurRuntime.superConstructor(ComprehensionFor).call(this, location); this.left = left; this.iterator = iterator; } return ($traceurRuntime.createClass)(ComprehensionFor, { transform: function(transformer) { return transformer.transformComprehensionFor(this); }, visit: function(visitor) { visitor.visitComprehensionFor(this); }, get type() { return COMPREHENSION_FOR; } }, {}, $__super); }(ParseTree); var COMPREHENSION_IF = ParseTreeType.COMPREHENSION_IF; var ComprehensionIf = function($__super) { function ComprehensionIf(location, expression) { $traceurRuntime.superConstructor(ComprehensionIf).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(ComprehensionIf, { transform: function(transformer) { return transformer.transformComprehensionIf(this); }, visit: function(visitor) { visitor.visitComprehensionIf(this); }, get type() { return COMPREHENSION_IF; } }, {}, $__super); }(ParseTree); var COMPUTED_PROPERTY_NAME = ParseTreeType.COMPUTED_PROPERTY_NAME; var ComputedPropertyName = function($__super) { function ComputedPropertyName(location, expression) { $traceurRuntime.superConstructor(ComputedPropertyName).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(ComputedPropertyName, { transform: function(transformer) { return transformer.transformComputedPropertyName(this); }, visit: function(visitor) { visitor.visitComputedPropertyName(this); }, get type() { return COMPUTED_PROPERTY_NAME; } }, {}, $__super); }(ParseTree); var CONDITIONAL_EXPRESSION = ParseTreeType.CONDITIONAL_EXPRESSION; var ConditionalExpression = function($__super) { function ConditionalExpression(location, condition, left, right) { $traceurRuntime.superConstructor(ConditionalExpression).call(this, location); this.condition = condition; this.left = left; this.right = right; } return ($traceurRuntime.createClass)(ConditionalExpression, { transform: function(transformer) { return transformer.transformConditionalExpression(this); }, visit: function(visitor) { visitor.visitConditionalExpression(this); }, get type() { return CONDITIONAL_EXPRESSION; } }, {}, $__super); }(ParseTree); var CONSTRUCT_SIGNATURE = ParseTreeType.CONSTRUCT_SIGNATURE; var ConstructSignature = function($__super) { function ConstructSignature(location, typeParameters, parameterList, returnType) { $traceurRuntime.superConstructor(ConstructSignature).call(this, location); this.typeParameters = typeParameters; this.parameterList = parameterList; this.returnType = returnType; } return ($traceurRuntime.createClass)(ConstructSignature, { transform: function(transformer) { return transformer.transformConstructSignature(this); }, visit: function(visitor) { visitor.visitConstructSignature(this); }, get type() { return CONSTRUCT_SIGNATURE; } }, {}, $__super); }(ParseTree); var CONSTRUCTOR_TYPE = ParseTreeType.CONSTRUCTOR_TYPE; var ConstructorType = function($__super) { function ConstructorType(location, typeParameters, parameterList, returnType) { $traceurRuntime.superConstructor(ConstructorType).call(this, location); this.typeParameters = typeParameters; this.parameterList = parameterList; this.returnType = returnType; } return ($traceurRuntime.createClass)(ConstructorType, { transform: function(transformer) { return transformer.transformConstructorType(this); }, visit: function(visitor) { visitor.visitConstructorType(this); }, get type() { return CONSTRUCTOR_TYPE; } }, {}, $__super); }(ParseTree); var CONTINUE_STATEMENT = ParseTreeType.CONTINUE_STATEMENT; var ContinueStatement = function($__super) { function ContinueStatement(location, name) { $traceurRuntime.superConstructor(ContinueStatement).call(this, location); this.name = name; } return ($traceurRuntime.createClass)(ContinueStatement, { transform: function(transformer) { return transformer.transformContinueStatement(this); }, visit: function(visitor) { visitor.visitContinueStatement(this); }, get type() { return CONTINUE_STATEMENT; } }, {}, $__super); }(ParseTree); var COVER_FORMALS = ParseTreeType.COVER_FORMALS; var CoverFormals = function($__super) { function CoverFormals(location, expressions) { $traceurRuntime.superConstructor(CoverFormals).call(this, location); this.expressions = expressions; } return ($traceurRuntime.createClass)(CoverFormals, { transform: function(transformer) { return transformer.transformCoverFormals(this); }, visit: function(visitor) { visitor.visitCoverFormals(this); }, get type() { return COVER_FORMALS; } }, {}, $__super); }(ParseTree); var COVER_INITIALIZED_NAME = ParseTreeType.COVER_INITIALIZED_NAME; var CoverInitializedName = function($__super) { function CoverInitializedName(location, name, equalToken, initializer) { $traceurRuntime.superConstructor(CoverInitializedName).call(this, location); this.name = name; this.equalToken = equalToken; this.initializer = initializer; } return ($traceurRuntime.createClass)(CoverInitializedName, { transform: function(transformer) { return transformer.transformCoverInitializedName(this); }, visit: function(visitor) { visitor.visitCoverInitializedName(this); }, get type() { return COVER_INITIALIZED_NAME; } }, {}, $__super); }(ParseTree); var DEBUGGER_STATEMENT = ParseTreeType.DEBUGGER_STATEMENT; var DebuggerStatement = function($__super) { function DebuggerStatement(location) { $traceurRuntime.superConstructor(DebuggerStatement).call(this, location); } return ($traceurRuntime.createClass)(DebuggerStatement, { transform: function(transformer) { return transformer.transformDebuggerStatement(this); }, visit: function(visitor) { visitor.visitDebuggerStatement(this); }, get type() { return DEBUGGER_STATEMENT; } }, {}, $__super); }(ParseTree); var DEFAULT_CLAUSE = ParseTreeType.DEFAULT_CLAUSE; var DefaultClause = function($__super) { function DefaultClause(location, statements) { $traceurRuntime.superConstructor(DefaultClause).call(this, location); this.statements = statements; } return ($traceurRuntime.createClass)(DefaultClause, { transform: function(transformer) { return transformer.transformDefaultClause(this); }, visit: function(visitor) { visitor.visitDefaultClause(this); }, get type() { return DEFAULT_CLAUSE; } }, {}, $__super); }(ParseTree); var DO_WHILE_STATEMENT = ParseTreeType.DO_WHILE_STATEMENT; var DoWhileStatement = function($__super) { function DoWhileStatement(location, body, condition) { $traceurRuntime.superConstructor(DoWhileStatement).call(this, location); this.body = body; this.condition = condition; } return ($traceurRuntime.createClass)(DoWhileStatement, { transform: function(transformer) { return transformer.transformDoWhileStatement(this); }, visit: function(visitor) { visitor.visitDoWhileStatement(this); }, get type() { return DO_WHILE_STATEMENT; } }, {}, $__super); }(ParseTree); var EMPTY_STATEMENT = ParseTreeType.EMPTY_STATEMENT; var EmptyStatement = function($__super) { function EmptyStatement(location) { $traceurRuntime.superConstructor(EmptyStatement).call(this, location); } return ($traceurRuntime.createClass)(EmptyStatement, { transform: function(transformer) { return transformer.transformEmptyStatement(this); }, visit: function(visitor) { visitor.visitEmptyStatement(this); }, get type() { return EMPTY_STATEMENT; } }, {}, $__super); }(ParseTree); var EXPORT_DECLARATION = ParseTreeType.EXPORT_DECLARATION; var ExportDeclaration = function($__super) { function ExportDeclaration(location, declaration, annotations) { $traceurRuntime.superConstructor(ExportDeclaration).call(this, location); this.declaration = declaration; this.annotations = annotations; } return ($traceurRuntime.createClass)(ExportDeclaration, { transform: function(transformer) { return transformer.transformExportDeclaration(this); }, visit: function(visitor) { visitor.visitExportDeclaration(this); }, get type() { return EXPORT_DECLARATION; } }, {}, $__super); }(ParseTree); var EXPORT_DEFAULT = ParseTreeType.EXPORT_DEFAULT; var ExportDefault = function($__super) { function ExportDefault(location, expression) { $traceurRuntime.superConstructor(ExportDefault).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(ExportDefault, { transform: function(transformer) { return transformer.transformExportDefault(this); }, visit: function(visitor) { visitor.visitExportDefault(this); }, get type() { return EXPORT_DEFAULT; } }, {}, $__super); }(ParseTree); var EXPORT_SPECIFIER = ParseTreeType.EXPORT_SPECIFIER; var ExportSpecifier = function($__super) { function ExportSpecifier(location, lhs, rhs) { $traceurRuntime.superConstructor(ExportSpecifier).call(this, location); this.lhs = lhs; this.rhs = rhs; } return ($traceurRuntime.createClass)(ExportSpecifier, { transform: function(transformer) { return transformer.transformExportSpecifier(this); }, visit: function(visitor) { visitor.visitExportSpecifier(this); }, get type() { return EXPORT_SPECIFIER; } }, {}, $__super); }(ParseTree); var EXPORT_SPECIFIER_SET = ParseTreeType.EXPORT_SPECIFIER_SET; var ExportSpecifierSet = function($__super) { function ExportSpecifierSet(location, specifiers) { $traceurRuntime.superConstructor(ExportSpecifierSet).call(this, location); this.specifiers = specifiers; } return ($traceurRuntime.createClass)(ExportSpecifierSet, { transform: function(transformer) { return transformer.transformExportSpecifierSet(this); }, visit: function(visitor) { visitor.visitExportSpecifierSet(this); }, get type() { return EXPORT_SPECIFIER_SET; } }, {}, $__super); }(ParseTree); var EXPORT_STAR = ParseTreeType.EXPORT_STAR; var ExportStar = function($__super) { function ExportStar(location) { $traceurRuntime.superConstructor(ExportStar).call(this, location); } return ($traceurRuntime.createClass)(ExportStar, { transform: function(transformer) { return transformer.transformExportStar(this); }, visit: function(visitor) { visitor.visitExportStar(this); }, get type() { return EXPORT_STAR; } }, {}, $__super); }(ParseTree); var EXPRESSION_STATEMENT = ParseTreeType.EXPRESSION_STATEMENT; var ExpressionStatement = function($__super) { function ExpressionStatement(location, expression) { $traceurRuntime.superConstructor(ExpressionStatement).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(ExpressionStatement, { transform: function(transformer) { return transformer.transformExpressionStatement(this); }, visit: function(visitor) { visitor.visitExpressionStatement(this); }, get type() { return EXPRESSION_STATEMENT; } }, {}, $__super); }(ParseTree); var FINALLY = ParseTreeType.FINALLY; var Finally = function($__super) { function Finally(location, block) { $traceurRuntime.superConstructor(Finally).call(this, location); this.block = block; } return ($traceurRuntime.createClass)(Finally, { transform: function(transformer) { return transformer.transformFinally(this); }, visit: function(visitor) { visitor.visitFinally(this); }, get type() { return FINALLY; } }, {}, $__super); }(ParseTree); var FOR_IN_STATEMENT = ParseTreeType.FOR_IN_STATEMENT; var ForInStatement = function($__super) { function ForInStatement(location, initializer, collection, body) { $traceurRuntime.superConstructor(ForInStatement).call(this, location); this.initializer = initializer; this.collection = collection; this.body = body; } return ($traceurRuntime.createClass)(ForInStatement, { transform: function(transformer) { return transformer.transformForInStatement(this); }, visit: function(visitor) { visitor.visitForInStatement(this); }, get type() { return FOR_IN_STATEMENT; } }, {}, $__super); }(ParseTree); var FOR_OF_STATEMENT = ParseTreeType.FOR_OF_STATEMENT; var ForOfStatement = function($__super) { function ForOfStatement(location, initializer, collection, body) { $traceurRuntime.superConstructor(ForOfStatement).call(this, location); this.initializer = initializer; this.collection = collection; this.body = body; } return ($traceurRuntime.createClass)(ForOfStatement, { transform: function(transformer) { return transformer.transformForOfStatement(this); }, visit: function(visitor) { visitor.visitForOfStatement(this); }, get type() { return FOR_OF_STATEMENT; } }, {}, $__super); }(ParseTree); var FOR_ON_STATEMENT = ParseTreeType.FOR_ON_STATEMENT; var ForOnStatement = function($__super) { function ForOnStatement(location, initializer, observable, body) { $traceurRuntime.superConstructor(ForOnStatement).call(this, location); this.initializer = initializer; this.observable = observable; this.body = body; } return ($traceurRuntime.createClass)(ForOnStatement, { transform: function(transformer) { return transformer.transformForOnStatement(this); }, visit: function(visitor) { visitor.visitForOnStatement(this); }, get type() { return FOR_ON_STATEMENT; } }, {}, $__super); }(ParseTree); var FOR_STATEMENT = ParseTreeType.FOR_STATEMENT; var ForStatement = function($__super) { function ForStatement(location, initializer, condition, increment, body) { $traceurRuntime.superConstructor(ForStatement).call(this, location); this.initializer = initializer; this.condition = condition; this.increment = increment; this.body = body; } return ($traceurRuntime.createClass)(ForStatement, { transform: function(transformer) { return transformer.transformForStatement(this); }, visit: function(visitor) { visitor.visitForStatement(this); }, get type() { return FOR_STATEMENT; } }, {}, $__super); }(ParseTree); var FORMAL_PARAMETER = ParseTreeType.FORMAL_PARAMETER; var FormalParameter = function($__super) { function FormalParameter(location, parameter, typeAnnotation, annotations) { $traceurRuntime.superConstructor(FormalParameter).call(this, location); this.parameter = parameter; this.typeAnnotation = typeAnnotation; this.annotations = annotations; } return ($traceurRuntime.createClass)(FormalParameter, { transform: function(transformer) { return transformer.transformFormalParameter(this); }, visit: function(visitor) { visitor.visitFormalParameter(this); }, get type() { return FORMAL_PARAMETER; } }, {}, $__super); }(ParseTree); var FORMAL_PARAMETER_LIST = ParseTreeType.FORMAL_PARAMETER_LIST; var FormalParameterList = function($__super) { function FormalParameterList(location, parameters) { $traceurRuntime.superConstructor(FormalParameterList).call(this, location); this.parameters = parameters; } return ($traceurRuntime.createClass)(FormalParameterList, { transform: function(transformer) { return transformer.transformFormalParameterList(this); }, visit: function(visitor) { visitor.visitFormalParameterList(this); }, get type() { return FORMAL_PARAMETER_LIST; } }, {}, $__super); }(ParseTree); var FORWARD_DEFAULT_EXPORT = ParseTreeType.FORWARD_DEFAULT_EXPORT; var ForwardDefaultExport = function($__super) { function ForwardDefaultExport(location, name) { $traceurRuntime.superConstructor(ForwardDefaultExport).call(this, location); this.name = name; } return ($traceurRuntime.createClass)(ForwardDefaultExport, { transform: function(transformer) { return transformer.transformForwardDefaultExport(this); }, visit: function(visitor) { visitor.visitForwardDefaultExport(this); }, get type() { return FORWARD_DEFAULT_EXPORT; } }, {}, $__super); }(ParseTree); var FUNCTION_BODY = ParseTreeType.FUNCTION_BODY; var FunctionBody = function($__super) { function FunctionBody(location, statements) { $traceurRuntime.superConstructor(FunctionBody).call(this, location); this.statements = statements; } return ($traceurRuntime.createClass)(FunctionBody, { transform: function(transformer) { return transformer.transformFunctionBody(this); }, visit: function(visitor) { visitor.visitFunctionBody(this); }, get type() { return FUNCTION_BODY; } }, {}, $__super); }(ParseTree); var FUNCTION_DECLARATION = ParseTreeType.FUNCTION_DECLARATION; var FunctionDeclaration = function($__super) { function FunctionDeclaration(location, name, functionKind, parameterList, typeAnnotation, annotations, body) { $traceurRuntime.superConstructor(FunctionDeclaration).call(this, location); this.name = name; this.functionKind = functionKind; this.parameterList = parameterList; this.typeAnnotation = typeAnnotation; this.annotations = annotations; this.body = body; } return ($traceurRuntime.createClass)(FunctionDeclaration, { transform: function(transformer) { return transformer.transformFunctionDeclaration(this); }, visit: function(visitor) { visitor.visitFunctionDeclaration(this); }, get type() { return FUNCTION_DECLARATION; } }, {}, $__super); }(ParseTree); var FUNCTION_EXPRESSION = ParseTreeType.FUNCTION_EXPRESSION; var FunctionExpression = function($__super) { function FunctionExpression(location, name, functionKind, parameterList, typeAnnotation, annotations, body) { $traceurRuntime.superConstructor(FunctionExpression).call(this, location); this.name = name; this.functionKind = functionKind; this.parameterList = parameterList; this.typeAnnotation = typeAnnotation; this.annotations = annotations; this.body = body; } return ($traceurRuntime.createClass)(FunctionExpression, { transform: function(transformer) { return transformer.transformFunctionExpression(this); }, visit: function(visitor) { visitor.visitFunctionExpression(this); }, get type() { return FUNCTION_EXPRESSION; } }, {}, $__super); }(ParseTree); var FUNCTION_TYPE = ParseTreeType.FUNCTION_TYPE; var FunctionType = function($__super) { function FunctionType(location, typeParameters, parameterList, returnType) { $traceurRuntime.superConstructor(FunctionType).call(this, location); this.typeParameters = typeParameters; this.parameterList = parameterList; this.returnType = returnType; } return ($traceurRuntime.createClass)(FunctionType, { transform: function(transformer) { return transformer.transformFunctionType(this); }, visit: function(visitor) { visitor.visitFunctionType(this); }, get type() { return FUNCTION_TYPE; } }, {}, $__super); }(ParseTree); var GENERATOR_COMPREHENSION = ParseTreeType.GENERATOR_COMPREHENSION; var GeneratorComprehension = function($__super) { function GeneratorComprehension(location, comprehensionList, expression) { $traceurRuntime.superConstructor(GeneratorComprehension).call(this, location); this.comprehensionList = comprehensionList; this.expression = expression; } return ($traceurRuntime.createClass)(GeneratorComprehension, { transform: function(transformer) { return transformer.transformGeneratorComprehension(this); }, visit: function(visitor) { visitor.visitGeneratorComprehension(this); }, get type() { return GENERATOR_COMPREHENSION; } }, {}, $__super); }(ParseTree); var GET_ACCESSOR = ParseTreeType.GET_ACCESSOR; var GetAccessor = function($__super) { function GetAccessor(location, isStatic, name, typeAnnotation, annotations, body) { $traceurRuntime.superConstructor(GetAccessor).call(this, location); this.isStatic = isStatic; this.name = name; this.typeAnnotation = typeAnnotation; this.annotations = annotations; this.body = body; } return ($traceurRuntime.createClass)(GetAccessor, { transform: function(transformer) { return transformer.transformGetAccessor(this); }, visit: function(visitor) { visitor.visitGetAccessor(this); }, get type() { return GET_ACCESSOR; } }, {}, $__super); }(ParseTree); var IDENTIFIER_EXPRESSION = ParseTreeType.IDENTIFIER_EXPRESSION; var IdentifierExpression = function($__super) { function IdentifierExpression(location, identifierToken) { $traceurRuntime.superConstructor(IdentifierExpression).call(this, location); this.identifierToken = identifierToken; } return ($traceurRuntime.createClass)(IdentifierExpression, { transform: function(transformer) { return transformer.transformIdentifierExpression(this); }, visit: function(visitor) { visitor.visitIdentifierExpression(this); }, get type() { return IDENTIFIER_EXPRESSION; } }, {}, $__super); }(ParseTree); var IF_STATEMENT = ParseTreeType.IF_STATEMENT; var IfStatement = function($__super) { function IfStatement(location, condition, ifClause, elseClause) { $traceurRuntime.superConstructor(IfStatement).call(this, location); this.condition = condition; this.ifClause = ifClause; this.elseClause = elseClause; } return ($traceurRuntime.createClass)(IfStatement, { transform: function(transformer) { return transformer.transformIfStatement(this); }, visit: function(visitor) { visitor.visitIfStatement(this); }, get type() { return IF_STATEMENT; } }, {}, $__super); }(ParseTree); var IMPORTED_BINDING = ParseTreeType.IMPORTED_BINDING; var ImportedBinding = function($__super) { function ImportedBinding(location, binding) { $traceurRuntime.superConstructor(ImportedBinding).call(this, location); this.binding = binding; } return ($traceurRuntime.createClass)(ImportedBinding, { transform: function(transformer) { return transformer.transformImportedBinding(this); }, visit: function(visitor) { visitor.visitImportedBinding(this); }, get type() { return IMPORTED_BINDING; } }, {}, $__super); }(ParseTree); var IMPORT_CLAUSE_PAIR = ParseTreeType.IMPORT_CLAUSE_PAIR; var ImportClausePair = function($__super) { function ImportClausePair(location, first, second) { $traceurRuntime.superConstructor(ImportClausePair).call(this, location); this.first = first; this.second = second; } return ($traceurRuntime.createClass)(ImportClausePair, { transform: function(transformer) { return transformer.transformImportClausePair(this); }, visit: function(visitor) { visitor.visitImportClausePair(this); }, get type() { return IMPORT_CLAUSE_PAIR; } }, {}, $__super); }(ParseTree); var IMPORT_DECLARATION = ParseTreeType.IMPORT_DECLARATION; var ImportDeclaration = function($__super) { function ImportDeclaration(location, importClause, moduleSpecifier) { $traceurRuntime.superConstructor(ImportDeclaration).call(this, location); this.importClause = importClause; this.moduleSpecifier = moduleSpecifier; } return ($traceurRuntime.createClass)(ImportDeclaration, { transform: function(transformer) { return transformer.transformImportDeclaration(this); }, visit: function(visitor) { visitor.visitImportDeclaration(this); }, get type() { return IMPORT_DECLARATION; } }, {}, $__super); }(ParseTree); var IMPORT_SPECIFIER = ParseTreeType.IMPORT_SPECIFIER; var ImportSpecifier = function($__super) { function ImportSpecifier(location, binding, name) { $traceurRuntime.superConstructor(ImportSpecifier).call(this, location); this.binding = binding; this.name = name; } return ($traceurRuntime.createClass)(ImportSpecifier, { transform: function(transformer) { return transformer.transformImportSpecifier(this); }, visit: function(visitor) { visitor.visitImportSpecifier(this); }, get type() { return IMPORT_SPECIFIER; } }, {}, $__super); }(ParseTree); var IMPORT_SPECIFIER_SET = ParseTreeType.IMPORT_SPECIFIER_SET; var ImportSpecifierSet = function($__super) { function ImportSpecifierSet(location, specifiers) { $traceurRuntime.superConstructor(ImportSpecifierSet).call(this, location); this.specifiers = specifiers; } return ($traceurRuntime.createClass)(ImportSpecifierSet, { transform: function(transformer) { return transformer.transformImportSpecifierSet(this); }, visit: function(visitor) { visitor.visitImportSpecifierSet(this); }, get type() { return IMPORT_SPECIFIER_SET; } }, {}, $__super); }(ParseTree); var IMPORT_TYPE_CLAUSE = ParseTreeType.IMPORT_TYPE_CLAUSE; var ImportTypeClause = function($__super) { function ImportTypeClause(location, clause) { $traceurRuntime.superConstructor(ImportTypeClause).call(this, location); this.clause = clause; } return ($traceurRuntime.createClass)(ImportTypeClause, { transform: function(transformer) { return transformer.transformImportTypeClause(this); }, visit: function(visitor) { visitor.visitImportTypeClause(this); }, get type() { return IMPORT_TYPE_CLAUSE; } }, {}, $__super); }(ParseTree); var INDEX_SIGNATURE = ParseTreeType.INDEX_SIGNATURE; var IndexSignature = function($__super) { function IndexSignature(location, name, indexType, typeAnnotation) { $traceurRuntime.superConstructor(IndexSignature).call(this, location); this.name = name; this.indexType = indexType; this.typeAnnotation = typeAnnotation; } return ($traceurRuntime.createClass)(IndexSignature, { transform: function(transformer) { return transformer.transformIndexSignature(this); }, visit: function(visitor) { visitor.visitIndexSignature(this); }, get type() { return INDEX_SIGNATURE; } }, {}, $__super); }(ParseTree); var INTERFACE_DECLARATION = ParseTreeType.INTERFACE_DECLARATION; var InterfaceDeclaration = function($__super) { function InterfaceDeclaration(location, name, typeParameters, extendsClause, objectType) { $traceurRuntime.superConstructor(InterfaceDeclaration).call(this, location); this.name = name; this.typeParameters = typeParameters; this.extendsClause = extendsClause; this.objectType = objectType; } return ($traceurRuntime.createClass)(InterfaceDeclaration, { transform: function(transformer) { return transformer.transformInterfaceDeclaration(this); }, visit: function(visitor) { visitor.visitInterfaceDeclaration(this); }, get type() { return INTERFACE_DECLARATION; } }, {}, $__super); }(ParseTree); var JSX_ATTRIBUTE = ParseTreeType.JSX_ATTRIBUTE; var JsxAttribute = function($__super) { function JsxAttribute(location, name, value) { $traceurRuntime.superConstructor(JsxAttribute).call(this, location); this.name = name; this.value = value; } return ($traceurRuntime.createClass)(JsxAttribute, { transform: function(transformer) { return transformer.transformJsxAttribute(this); }, visit: function(visitor) { visitor.visitJsxAttribute(this); }, get type() { return JSX_ATTRIBUTE; } }, {}, $__super); }(ParseTree); var JSX_ELEMENT = ParseTreeType.JSX_ELEMENT; var JsxElement = function($__super) { function JsxElement(location, name, attributes, children) { $traceurRuntime.superConstructor(JsxElement).call(this, location); this.name = name; this.attributes = attributes; this.children = children; } return ($traceurRuntime.createClass)(JsxElement, { transform: function(transformer) { return transformer.transformJsxElement(this); }, visit: function(visitor) { visitor.visitJsxElement(this); }, get type() { return JSX_ELEMENT; } }, {}, $__super); }(ParseTree); var JSX_ELEMENT_NAME = ParseTreeType.JSX_ELEMENT_NAME; var JsxElementName = function($__super) { function JsxElementName(location, names) { $traceurRuntime.superConstructor(JsxElementName).call(this, location); this.names = names; } return ($traceurRuntime.createClass)(JsxElementName, { transform: function(transformer) { return transformer.transformJsxElementName(this); }, visit: function(visitor) { visitor.visitJsxElementName(this); }, get type() { return JSX_ELEMENT_NAME; } }, {}, $__super); }(ParseTree); var JSX_PLACEHOLDER = ParseTreeType.JSX_PLACEHOLDER; var JsxPlaceholder = function($__super) { function JsxPlaceholder(location, expression) { $traceurRuntime.superConstructor(JsxPlaceholder).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(JsxPlaceholder, { transform: function(transformer) { return transformer.transformJsxPlaceholder(this); }, visit: function(visitor) { visitor.visitJsxPlaceholder(this); }, get type() { return JSX_PLACEHOLDER; } }, {}, $__super); }(ParseTree); var JSX_SPREAD_ATTRIBUTE = ParseTreeType.JSX_SPREAD_ATTRIBUTE; var JsxSpreadAttribute = function($__super) { function JsxSpreadAttribute(location, expression) { $traceurRuntime.superConstructor(JsxSpreadAttribute).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(JsxSpreadAttribute, { transform: function(transformer) { return transformer.transformJsxSpreadAttribute(this); }, visit: function(visitor) { visitor.visitJsxSpreadAttribute(this); }, get type() { return JSX_SPREAD_ATTRIBUTE; } }, {}, $__super); }(ParseTree); var JSX_TEXT = ParseTreeType.JSX_TEXT; var JsxText = function($__super) { function JsxText(location, value) { $traceurRuntime.superConstructor(JsxText).call(this, location); this.value = value; } return ($traceurRuntime.createClass)(JsxText, { transform: function(transformer) { return transformer.transformJsxText(this); }, visit: function(visitor) { visitor.visitJsxText(this); }, get type() { return JSX_TEXT; } }, {}, $__super); }(ParseTree); var LABELLED_STATEMENT = ParseTreeType.LABELLED_STATEMENT; var LabelledStatement = function($__super) { function LabelledStatement(location, name, statement) { $traceurRuntime.superConstructor(LabelledStatement).call(this, location); this.name = name; this.statement = statement; } return ($traceurRuntime.createClass)(LabelledStatement, { transform: function(transformer) { return transformer.transformLabelledStatement(this); }, visit: function(visitor) { visitor.visitLabelledStatement(this); }, get type() { return LABELLED_STATEMENT; } }, {}, $__super); }(ParseTree); var LITERAL_EXPRESSION = ParseTreeType.LITERAL_EXPRESSION; var LiteralExpression = function($__super) { function LiteralExpression(location, literalToken) { $traceurRuntime.superConstructor(LiteralExpression).call(this, location); this.literalToken = literalToken; } return ($traceurRuntime.createClass)(LiteralExpression, { transform: function(transformer) { return transformer.transformLiteralExpression(this); }, visit: function(visitor) { visitor.visitLiteralExpression(this); }, get type() { return LITERAL_EXPRESSION; } }, {}, $__super); }(ParseTree); var LITERAL_PROPERTY_NAME = ParseTreeType.LITERAL_PROPERTY_NAME; var LiteralPropertyName = function($__super) { function LiteralPropertyName(location, literalToken) { $traceurRuntime.superConstructor(LiteralPropertyName).call(this, location); this.literalToken = literalToken; } return ($traceurRuntime.createClass)(LiteralPropertyName, { transform: function(transformer) { return transformer.transformLiteralPropertyName(this); }, visit: function(visitor) { visitor.visitLiteralPropertyName(this); }, get type() { return LITERAL_PROPERTY_NAME; } }, {}, $__super); }(ParseTree); var MEMBER_EXPRESSION = ParseTreeType.MEMBER_EXPRESSION; var MemberExpression = function($__super) { function MemberExpression(location, operand, memberName) { $traceurRuntime.superConstructor(MemberExpression).call(this, location); this.operand = operand; this.memberName = memberName; } return ($traceurRuntime.createClass)(MemberExpression, { transform: function(transformer) { return transformer.transformMemberExpression(this); }, visit: function(visitor) { visitor.visitMemberExpression(this); }, get type() { return MEMBER_EXPRESSION; } }, {}, $__super); }(ParseTree); var MEMBER_LOOKUP_EXPRESSION = ParseTreeType.MEMBER_LOOKUP_EXPRESSION; var MemberLookupExpression = function($__super) { function MemberLookupExpression(location, operand, memberExpression) { $traceurRuntime.superConstructor(MemberLookupExpression).call(this, location); this.operand = operand; this.memberExpression = memberExpression; } return ($traceurRuntime.createClass)(MemberLookupExpression, { transform: function(transformer) { return transformer.transformMemberLookupExpression(this); }, visit: function(visitor) { visitor.visitMemberLookupExpression(this); }, get type() { return MEMBER_LOOKUP_EXPRESSION; } }, {}, $__super); }(ParseTree); var METHOD = ParseTreeType.METHOD; var Method = function($__super) { function Method(location, isStatic, functionKind, name, parameterList, typeAnnotation, annotations, body, debugName) { $traceurRuntime.superConstructor(Method).call(this, location); this.isStatic = isStatic; this.functionKind = functionKind; this.name = name; this.parameterList = parameterList; this.typeAnnotation = typeAnnotation; this.annotations = annotations; this.body = body; this.debugName = debugName; } return ($traceurRuntime.createClass)(Method, { transform: function(transformer) { return transformer.transformMethod(this); }, visit: function(visitor) { visitor.visitMethod(this); }, get type() { return METHOD; } }, {}, $__super); }(ParseTree); var METHOD_SIGNATURE = ParseTreeType.METHOD_SIGNATURE; var MethodSignature = function($__super) { function MethodSignature(location, name, optional, callSignature) { $traceurRuntime.superConstructor(MethodSignature).call(this, location); this.name = name; this.optional = optional; this.callSignature = callSignature; } return ($traceurRuntime.createClass)(MethodSignature, { transform: function(transformer) { return transformer.transformMethodSignature(this); }, visit: function(visitor) { visitor.visitMethodSignature(this); }, get type() { return METHOD_SIGNATURE; } }, {}, $__super); }(ParseTree); var MODULE = ParseTreeType.MODULE; var Module = function($__super) { function Module(location, scriptItemList, moduleName) { $traceurRuntime.superConstructor(Module).call(this, location); this.scriptItemList = scriptItemList; this.moduleName = moduleName; } return ($traceurRuntime.createClass)(Module, { transform: function(transformer) { return transformer.transformModule(this); }, visit: function(visitor) { visitor.visitModule(this); }, get type() { return MODULE; } }, {}, $__super); }(ParseTree); var MODULE_SPECIFIER = ParseTreeType.MODULE_SPECIFIER; var ModuleSpecifier = function($__super) { function ModuleSpecifier(location, token) { $traceurRuntime.superConstructor(ModuleSpecifier).call(this, location); this.token = token; } return ($traceurRuntime.createClass)(ModuleSpecifier, { transform: function(transformer) { return transformer.transformModuleSpecifier(this); }, visit: function(visitor) { visitor.visitModuleSpecifier(this); }, get type() { return MODULE_SPECIFIER; } }, {}, $__super); }(ParseTree); var NAME_SPACE_EXPORT = ParseTreeType.NAME_SPACE_EXPORT; var NameSpaceExport = function($__super) { function NameSpaceExport(location, name) { $traceurRuntime.superConstructor(NameSpaceExport).call(this, location); this.name = name; } return ($traceurRuntime.createClass)(NameSpaceExport, { transform: function(transformer) { return transformer.transformNameSpaceExport(this); }, visit: function(visitor) { visitor.visitNameSpaceExport(this); }, get type() { return NAME_SPACE_EXPORT; } }, {}, $__super); }(ParseTree); var NAME_SPACE_IMPORT = ParseTreeType.NAME_SPACE_IMPORT; var NameSpaceImport = function($__super) { function NameSpaceImport(location, binding) { $traceurRuntime.superConstructor(NameSpaceImport).call(this, location); this.binding = binding; } return ($traceurRuntime.createClass)(NameSpaceImport, { transform: function(transformer) { return transformer.transformNameSpaceImport(this); }, visit: function(visitor) { visitor.visitNameSpaceImport(this); }, get type() { return NAME_SPACE_IMPORT; } }, {}, $__super); }(ParseTree); var NAMED_EXPORT = ParseTreeType.NAMED_EXPORT; var NamedExport = function($__super) { function NamedExport(location, exportClause, moduleSpecifier) { $traceurRuntime.superConstructor(NamedExport).call(this, location); this.exportClause = exportClause; this.moduleSpecifier = moduleSpecifier; } return ($traceurRuntime.createClass)(NamedExport, { transform: function(transformer) { return transformer.transformNamedExport(this); }, visit: function(visitor) { visitor.visitNamedExport(this); }, get type() { return NAMED_EXPORT; } }, {}, $__super); }(ParseTree); var NEW_EXPRESSION = ParseTreeType.NEW_EXPRESSION; var NewExpression = function($__super) { function NewExpression(location, operand, args) { $traceurRuntime.superConstructor(NewExpression).call(this, location); this.operand = operand; this.args = args; } return ($traceurRuntime.createClass)(NewExpression, { transform: function(transformer) { return transformer.transformNewExpression(this); }, visit: function(visitor) { visitor.visitNewExpression(this); }, get type() { return NEW_EXPRESSION; } }, {}, $__super); }(ParseTree); var OBJECT_LITERAL = ParseTreeType.OBJECT_LITERAL; var ObjectLiteral = function($__super) { function ObjectLiteral(location, propertyNameAndValues) { $traceurRuntime.superConstructor(ObjectLiteral).call(this, location); this.propertyNameAndValues = propertyNameAndValues; } return ($traceurRuntime.createClass)(ObjectLiteral, { transform: function(transformer) { return transformer.transformObjectLiteral(this); }, visit: function(visitor) { visitor.visitObjectLiteral(this); }, get type() { return OBJECT_LITERAL; } }, {}, $__super); }(ParseTree); var OBJECT_PATTERN = ParseTreeType.OBJECT_PATTERN; var ObjectPattern = function($__super) { function ObjectPattern(location, fields) { $traceurRuntime.superConstructor(ObjectPattern).call(this, location); this.fields = fields; } return ($traceurRuntime.createClass)(ObjectPattern, { transform: function(transformer) { return transformer.transformObjectPattern(this); }, visit: function(visitor) { visitor.visitObjectPattern(this); }, get type() { return OBJECT_PATTERN; } }, {}, $__super); }(ParseTree); var OBJECT_PATTERN_FIELD = ParseTreeType.OBJECT_PATTERN_FIELD; var ObjectPatternField = function($__super) { function ObjectPatternField(location, name, element) { $traceurRuntime.superConstructor(ObjectPatternField).call(this, location); this.name = name; this.element = element; } return ($traceurRuntime.createClass)(ObjectPatternField, { transform: function(transformer) { return transformer.transformObjectPatternField(this); }, visit: function(visitor) { visitor.visitObjectPatternField(this); }, get type() { return OBJECT_PATTERN_FIELD; } }, {}, $__super); }(ParseTree); var OBJECT_TYPE = ParseTreeType.OBJECT_TYPE; var ObjectType = function($__super) { function ObjectType(location, typeMembers) { $traceurRuntime.superConstructor(ObjectType).call(this, location); this.typeMembers = typeMembers; } return ($traceurRuntime.createClass)(ObjectType, { transform: function(transformer) { return transformer.transformObjectType(this); }, visit: function(visitor) { visitor.visitObjectType(this); }, get type() { return OBJECT_TYPE; } }, {}, $__super); }(ParseTree); var PAREN_EXPRESSION = ParseTreeType.PAREN_EXPRESSION; var ParenExpression = function($__super) { function ParenExpression(location, expression) { $traceurRuntime.superConstructor(ParenExpression).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(ParenExpression, { transform: function(transformer) { return transformer.transformParenExpression(this); }, visit: function(visitor) { visitor.visitParenExpression(this); }, get type() { return PAREN_EXPRESSION; } }, {}, $__super); }(ParseTree); var POSTFIX_EXPRESSION = ParseTreeType.POSTFIX_EXPRESSION; var PostfixExpression = function($__super) { function PostfixExpression(location, operand, operator) { $traceurRuntime.superConstructor(PostfixExpression).call(this, location); this.operand = operand; this.operator = operator; } return ($traceurRuntime.createClass)(PostfixExpression, { transform: function(transformer) { return transformer.transformPostfixExpression(this); }, visit: function(visitor) { visitor.visitPostfixExpression(this); }, get type() { return POSTFIX_EXPRESSION; } }, {}, $__super); }(ParseTree); var PREDEFINED_TYPE = ParseTreeType.PREDEFINED_TYPE; var PredefinedType = function($__super) { function PredefinedType(location, typeToken) { $traceurRuntime.superConstructor(PredefinedType).call(this, location); this.typeToken = typeToken; } return ($traceurRuntime.createClass)(PredefinedType, { transform: function(transformer) { return transformer.transformPredefinedType(this); }, visit: function(visitor) { visitor.visitPredefinedType(this); }, get type() { return PREDEFINED_TYPE; } }, {}, $__super); }(ParseTree); var SCRIPT = ParseTreeType.SCRIPT; var Script = function($__super) { function Script(location, scriptItemList, moduleName) { $traceurRuntime.superConstructor(Script).call(this, location); this.scriptItemList = scriptItemList; this.moduleName = moduleName; } return ($traceurRuntime.createClass)(Script, { transform: function(transformer) { return transformer.transformScript(this); }, visit: function(visitor) { visitor.visitScript(this); }, get type() { return SCRIPT; } }, {}, $__super); }(ParseTree); var PROPERTY_NAME_ASSIGNMENT = ParseTreeType.PROPERTY_NAME_ASSIGNMENT; var PropertyNameAssignment = function($__super) { function PropertyNameAssignment(location, name, value) { $traceurRuntime.superConstructor(PropertyNameAssignment).call(this, location); this.name = name; this.value = value; } return ($traceurRuntime.createClass)(PropertyNameAssignment, { transform: function(transformer) { return transformer.transformPropertyNameAssignment(this); }, visit: function(visitor) { visitor.visitPropertyNameAssignment(this); }, get type() { return PROPERTY_NAME_ASSIGNMENT; } }, {}, $__super); }(ParseTree); var PROPERTY_NAME_SHORTHAND = ParseTreeType.PROPERTY_NAME_SHORTHAND; var PropertyNameShorthand = function($__super) { function PropertyNameShorthand(location, name) { $traceurRuntime.superConstructor(PropertyNameShorthand).call(this, location); this.name = name; } return ($traceurRuntime.createClass)(PropertyNameShorthand, { transform: function(transformer) { return transformer.transformPropertyNameShorthand(this); }, visit: function(visitor) { visitor.visitPropertyNameShorthand(this); }, get type() { return PROPERTY_NAME_SHORTHAND; } }, {}, $__super); }(ParseTree); var PROPERTY_VARIABLE_DECLARATION = ParseTreeType.PROPERTY_VARIABLE_DECLARATION; var PropertyVariableDeclaration = function($__super) { function PropertyVariableDeclaration(location, isStatic, name, typeAnnotation, annotations, initializer) { $traceurRuntime.superConstructor(PropertyVariableDeclaration).call(this, location); this.isStatic = isStatic; this.name = name; this.typeAnnotation = typeAnnotation; this.annotations = annotations; this.initializer = initializer; } return ($traceurRuntime.createClass)(PropertyVariableDeclaration, { transform: function(transformer) { return transformer.transformPropertyVariableDeclaration(this); }, visit: function(visitor) { visitor.visitPropertyVariableDeclaration(this); }, get type() { return PROPERTY_VARIABLE_DECLARATION; } }, {}, $__super); }(ParseTree); var PROPERTY_SIGNATURE = ParseTreeType.PROPERTY_SIGNATURE; var PropertySignature = function($__super) { function PropertySignature(location, name, optional, typeAnnotation) { $traceurRuntime.superConstructor(PropertySignature).call(this, location); this.name = name; this.optional = optional; this.typeAnnotation = typeAnnotation; } return ($traceurRuntime.createClass)(PropertySignature, { transform: function(transformer) { return transformer.transformPropertySignature(this); }, visit: function(visitor) { visitor.visitPropertySignature(this); }, get type() { return PROPERTY_SIGNATURE; } }, {}, $__super); }(ParseTree); var REST_PARAMETER = ParseTreeType.REST_PARAMETER; var RestParameter = function($__super) { function RestParameter(location, identifier) { $traceurRuntime.superConstructor(RestParameter).call(this, location); this.identifier = identifier; } return ($traceurRuntime.createClass)(RestParameter, { transform: function(transformer) { return transformer.transformRestParameter(this); }, visit: function(visitor) { visitor.visitRestParameter(this); }, get type() { return REST_PARAMETER; } }, {}, $__super); }(ParseTree); var RETURN_STATEMENT = ParseTreeType.RETURN_STATEMENT; var ReturnStatement = function($__super) { function ReturnStatement(location, expression) { $traceurRuntime.superConstructor(ReturnStatement).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(ReturnStatement, { transform: function(transformer) { return transformer.transformReturnStatement(this); }, visit: function(visitor) { visitor.visitReturnStatement(this); }, get type() { return RETURN_STATEMENT; } }, {}, $__super); }(ParseTree); var SET_ACCESSOR = ParseTreeType.SET_ACCESSOR; var SetAccessor = function($__super) { function SetAccessor(location, isStatic, name, parameterList, annotations, body) { $traceurRuntime.superConstructor(SetAccessor).call(this, location); this.isStatic = isStatic; this.name = name; this.parameterList = parameterList; this.annotations = annotations; this.body = body; } return ($traceurRuntime.createClass)(SetAccessor, { transform: function(transformer) { return transformer.transformSetAccessor(this); }, visit: function(visitor) { visitor.visitSetAccessor(this); }, get type() { return SET_ACCESSOR; } }, {}, $__super); }(ParseTree); var SPREAD_EXPRESSION = ParseTreeType.SPREAD_EXPRESSION; var SpreadExpression = function($__super) { function SpreadExpression(location, expression) { $traceurRuntime.superConstructor(SpreadExpression).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(SpreadExpression, { transform: function(transformer) { return transformer.transformSpreadExpression(this); }, visit: function(visitor) { visitor.visitSpreadExpression(this); }, get type() { return SPREAD_EXPRESSION; } }, {}, $__super); }(ParseTree); var SPREAD_PATTERN_ELEMENT = ParseTreeType.SPREAD_PATTERN_ELEMENT; var SpreadPatternElement = function($__super) { function SpreadPatternElement(location, lvalue) { $traceurRuntime.superConstructor(SpreadPatternElement).call(this, location); this.lvalue = lvalue; } return ($traceurRuntime.createClass)(SpreadPatternElement, { transform: function(transformer) { return transformer.transformSpreadPatternElement(this); }, visit: function(visitor) { visitor.visitSpreadPatternElement(this); }, get type() { return SPREAD_PATTERN_ELEMENT; } }, {}, $__super); }(ParseTree); var SUPER_EXPRESSION = ParseTreeType.SUPER_EXPRESSION; var SuperExpression = function($__super) { function SuperExpression(location) { $traceurRuntime.superConstructor(SuperExpression).call(this, location); } return ($traceurRuntime.createClass)(SuperExpression, { transform: function(transformer) { return transformer.transformSuperExpression(this); }, visit: function(visitor) { visitor.visitSuperExpression(this); }, get type() { return SUPER_EXPRESSION; } }, {}, $__super); }(ParseTree); var SWITCH_STATEMENT = ParseTreeType.SWITCH_STATEMENT; var SwitchStatement = function($__super) { function SwitchStatement(location, expression, caseClauses) { $traceurRuntime.superConstructor(SwitchStatement).call(this, location); this.expression = expression; this.caseClauses = caseClauses; } return ($traceurRuntime.createClass)(SwitchStatement, { transform: function(transformer) { return transformer.transformSwitchStatement(this); }, visit: function(visitor) { visitor.visitSwitchStatement(this); }, get type() { return SWITCH_STATEMENT; } }, {}, $__super); }(ParseTree); var SYNTAX_ERROR_TREE = ParseTreeType.SYNTAX_ERROR_TREE; var SyntaxErrorTree = function($__super) { function SyntaxErrorTree(location, nextToken, message) { $traceurRuntime.superConstructor(SyntaxErrorTree).call(this, location); this.nextToken = nextToken; this.message = message; } return ($traceurRuntime.createClass)(SyntaxErrorTree, { transform: function(transformer) { return transformer.transformSyntaxErrorTree(this); }, visit: function(visitor) { visitor.visitSyntaxErrorTree(this); }, get type() { return SYNTAX_ERROR_TREE; } }, {}, $__super); }(ParseTree); var TEMPLATE_LITERAL_EXPRESSION = ParseTreeType.TEMPLATE_LITERAL_EXPRESSION; var TemplateLiteralExpression = function($__super) { function TemplateLiteralExpression(location, operand, elements) { $traceurRuntime.superConstructor(TemplateLiteralExpression).call(this, location); this.operand = operand; this.elements = elements; } return ($traceurRuntime.createClass)(TemplateLiteralExpression, { transform: function(transformer) { return transformer.transformTemplateLiteralExpression(this); }, visit: function(visitor) { visitor.visitTemplateLiteralExpression(this); }, get type() { return TEMPLATE_LITERAL_EXPRESSION; } }, {}, $__super); }(ParseTree); var TEMPLATE_LITERAL_PORTION = ParseTreeType.TEMPLATE_LITERAL_PORTION; var TemplateLiteralPortion = function($__super) { function TemplateLiteralPortion(location, value) { $traceurRuntime.superConstructor(TemplateLiteralPortion).call(this, location); this.value = value; } return ($traceurRuntime.createClass)(TemplateLiteralPortion, { transform: function(transformer) { return transformer.transformTemplateLiteralPortion(this); }, visit: function(visitor) { visitor.visitTemplateLiteralPortion(this); }, get type() { return TEMPLATE_LITERAL_PORTION; } }, {}, $__super); }(ParseTree); var TEMPLATE_SUBSTITUTION = ParseTreeType.TEMPLATE_SUBSTITUTION; var TemplateSubstitution = function($__super) { function TemplateSubstitution(location, expression) { $traceurRuntime.superConstructor(TemplateSubstitution).call(this, location); this.expression = expression; } return ($traceurRuntime.createClass)(TemplateSubstitution, { transform: function(transformer) { return transformer.transformTemplateSubstitution(this); }, visit: function(visitor) { visitor.visitTemplateSubstitution(this); }, get type() { return TEMPLATE_SUBSTITUTION; } }, {}, $__super); }(ParseTree); var THIS_EXPRESSION = ParseTreeType.THIS_EXPRESSION; var ThisExpression = function($__super) { function ThisExpression(location) { $traceurRuntime.superConstructor(ThisExpression).call(this, location); } return ($traceurRuntime.createClass)(ThisExpression, { transform: function(transformer) { return transformer.transformThisExpression(this); }, visit: function(visitor) { visitor.visitThisExpression(this); }, get type() { return THIS_EXPRESSION; } }, {}, $__super); }(ParseTree); var THROW_STATEMENT = ParseTreeType.THROW_STATEMENT; var ThrowStatement = function($__super) { function ThrowStatement(location, value) { $traceurRuntime.superConstructor(ThrowStatement).call(this, location); this.value = value; } return ($traceurRuntime.createClass)(ThrowStatement, { transform: function(transformer) { return transformer.transformThrowStatement(this); }, visit: function(visitor) { visitor.visitThrowStatement(this); }, get type() { return THROW_STATEMENT; } }, {}, $__super); }(ParseTree); var TRY_STATEMENT = ParseTreeType.TRY_STATEMENT; var TryStatement = function($__super) { function TryStatement(location, body, catchBlock, finallyBlock) { $traceurRuntime.superConstructor(TryStatement).call(this, location); this.body = body; this.catchBlock = catchBlock; this.finallyBlock = finallyBlock; } return ($traceurRuntime.createClass)(TryStatement, { transform: function(transformer) { return transformer.transformTryStatement(this); }, visit: function(visitor) { visitor.visitTryStatement(this); }, get type() { return TRY_STATEMENT; } }, {}, $__super); }(ParseTree); var TYPE_ALIAS_DECLARATION = ParseTreeType.TYPE_ALIAS_DECLARATION; var TypeAliasDeclaration = function($__super) { function TypeAliasDeclaration(location, name, value) { $traceurRuntime.superConstructor(TypeAliasDeclaration).call(this, location); this.name = name; this.value = value; } return ($traceurRuntime.createClass)(TypeAliasDeclaration, { transform: function(transformer) { return transformer.transformTypeAliasDeclaration(this); }, visit: function(visitor) { visitor.visitTypeAliasDeclaration(this); }, get type() { return TYPE_ALIAS_DECLARATION; } }, {}, $__super); }(ParseTree); var TYPE_ARGUMENTS = ParseTreeType.TYPE_ARGUMENTS; var TypeArguments = function($__super) { function TypeArguments(location, args) { $traceurRuntime.superConstructor(TypeArguments).call(this, location); this.args = args; } return ($traceurRuntime.createClass)(TypeArguments, { transform: function(transformer) { return transformer.transformTypeArguments(this); }, visit: function(visitor) { visitor.visitTypeArguments(this); }, get type() { return TYPE_ARGUMENTS; } }, {}, $__super); }(ParseTree); var TYPE_NAME = ParseTreeType.TYPE_NAME; var TypeName = function($__super) { function TypeName(location, moduleName, name) { $traceurRuntime.superConstructor(TypeName).call(this, location); this.moduleName = moduleName; this.name = name; } return ($traceurRuntime.createClass)(TypeName, { transform: function(transformer) { return transformer.transformTypeName(this); }, visit: function(visitor) { visitor.visitTypeName(this); }, get type() { return TYPE_NAME; } }, {}, $__super); }(ParseTree); var TYPE_PARAMETER = ParseTreeType.TYPE_PARAMETER; var TypeParameter = function($__super) { function TypeParameter(location, identifierToken, extendsType) { $traceurRuntime.superConstructor(TypeParameter).call(this, location); this.identifierToken = identifierToken; this.extendsType = extendsType; } return ($traceurRuntime.createClass)(TypeParameter, { transform: function(transformer) { return transformer.transformTypeParameter(this); }, visit: function(visitor) { visitor.visitTypeParameter(this); }, get type() { return TYPE_PARAMETER; } }, {}, $__super); }(ParseTree); var TYPE_PARAMETERS = ParseTreeType.TYPE_PARAMETERS; var TypeParameters = function($__super) { function TypeParameters(location, parameters) { $traceurRuntime.superConstructor(TypeParameters).call(this, location); this.parameters = parameters; } return ($traceurRuntime.createClass)(TypeParameters, { transform: function(transformer) { return transformer.transformTypeParameters(this); }, visit: function(visitor) { visitor.visitTypeParameters(this); }, get type() { return TYPE_PARAMETERS; } }, {}, $__super); }(ParseTree); var TYPE_REFERENCE = ParseTreeType.TYPE_REFERENCE; var TypeReference = function($__super) { function TypeReference(location, typeName, args) { $traceurRuntime.superConstructor(TypeReference).call(this, location); this.typeName = typeName; this.args = args; } return ($traceurRuntime.createClass)(TypeReference, { transform: function(transformer) { return transformer.transformTypeReference(this); }, visit: function(visitor) { visitor.visitTypeReference(this); }, get type() { return TYPE_REFERENCE; } }, {}, $__super); }(ParseTree); var UNARY_EXPRESSION = ParseTreeType.UNARY_EXPRESSION; var UnaryExpression = function($__super) { function UnaryExpression(location, operator, operand) { $traceurRuntime.superConstructor(UnaryExpression).call(this, location); this.operator = operator; this.operand = operand; } return ($traceurRuntime.createClass)(UnaryExpression, { transform: function(transformer) { return transformer.transformUnaryExpression(this); }, visit: function(visitor) { visitor.visitUnaryExpression(this); }, get type() { return UNARY_EXPRESSION; } }, {}, $__super); }(ParseTree); var UNION_TYPE = ParseTreeType.UNION_TYPE; var UnionType = function($__super) { function UnionType(location, types) { $traceurRuntime.superConstructor(UnionType).call(this, location); this.types = types; } return ($traceurRuntime.createClass)(UnionType, { transform: function(transformer) { return transformer.transformUnionType(this); }, visit: function(visitor) { visitor.visitUnionType(this); }, get type() { return UNION_TYPE; } }, {}, $__super); }(ParseTree); var VARIABLE_DECLARATION = ParseTreeType.VARIABLE_DECLARATION; var VariableDeclaration = function($__super) { function VariableDeclaration(location, lvalue, typeAnnotation, initializer) { $traceurRuntime.superConstructor(VariableDeclaration).call(this, location); this.lvalue = lvalue; this.typeAnnotation = typeAnnotation; this.initializer = initializer; } return ($traceurRuntime.createClass)(VariableDeclaration, { transform: function(transformer) { return transformer.transformVariableDeclaration(this); }, visit: function(visitor) { visitor.visitVariableDeclaration(this); }, get type() { return VARIABLE_DECLARATION; } }, {}, $__super); }(ParseTree); var VARIABLE_DECLARATION_LIST = ParseTreeType.VARIABLE_DECLARATION_LIST; var VariableDeclarationList = function($__super) { function VariableDeclarationList(location, declarationType, declarations) { $traceurRuntime.superConstructor(VariableDeclarationList).call(this, location); this.declarationType = declarationType; this.declarations = declarations; } return ($traceurRuntime.createClass)(VariableDeclarationList, { transform: function(transformer) { return transformer.transformVariableDeclarationList(this); }, visit: function(visitor) { visitor.visitVariableDeclarationList(this); }, get type() { return VARIABLE_DECLARATION_LIST; } }, {}, $__super); }(ParseTree); var VARIABLE_STATEMENT = ParseTreeType.VARIABLE_STATEMENT; var VariableStatement = function($__super) { function VariableStatement(location, declarations) { $traceurRuntime.superConstructor(VariableStatement).call(this, location); this.declarations = declarations; } return ($traceurRuntime.createClass)(VariableStatement, { transform: function(transformer) { return transformer.transformVariableStatement(this); }, visit: function(visitor) { visitor.visitVariableStatement(this); }, get type() { return VARIABLE_STATEMENT; } }, {}, $__super); }(ParseTree); var WHILE_STATEMENT = ParseTreeType.WHILE_STATEMENT; var WhileStatement = function($__super) { function WhileStatement(location, condition, body) { $traceurRuntime.superConstructor(WhileStatement).call(this, location); this.condition = condition; this.body = body; } return ($traceurRuntime.createClass)(WhileStatement, { transform: function(transformer) { return transformer.transformWhileStatement(this); }, visit: function(visitor) { visitor.visitWhileStatement(this); }, get type() { return WHILE_STATEMENT; } }, {}, $__super); }(ParseTree); var WITH_STATEMENT = ParseTreeType.WITH_STATEMENT; var WithStatement = function($__super) { function WithStatement(location, expression, body) { $traceurRuntime.superConstructor(WithStatement).call(this, location); this.expression = expression; this.body = body; } return ($traceurRuntime.createClass)(WithStatement, { transform: function(transformer) { return transformer.transformWithStatement(this); }, visit: function(visitor) { visitor.visitWithStatement(this); }, get type() { return WITH_STATEMENT; } }, {}, $__super); }(ParseTree); var YIELD_EXPRESSION = ParseTreeType.YIELD_EXPRESSION; var YieldExpression = function($__super) { function YieldExpression(location, expression, isYieldFor) { $traceurRuntime.superConstructor(YieldExpression).call(this, location); this.expression = expression; this.isYieldFor = isYieldFor; } return ($traceurRuntime.createClass)(YieldExpression, { transform: function(transformer) { return transformer.transformYieldExpression(this); }, visit: function(visitor) { visitor.visitYieldExpression(this); }, get type() { return YIELD_EXPRESSION; } }, {}, $__super); }(ParseTree); return { get Annotation() { return Annotation; }, get AnonBlock() { return AnonBlock; }, get ArgumentList() { return ArgumentList; }, get ArrayComprehension() { return ArrayComprehension; }, get ArrayLiteral() { return ArrayLiteral; }, get ArrayPattern() { return ArrayPattern; }, get ArrayType() { return ArrayType; }, get ArrowFunction() { return ArrowFunction; }, get AssignmentElement() { return AssignmentElement; }, get AwaitExpression() { return AwaitExpression; }, get BinaryExpression() { return BinaryExpression; }, get BindingElement() { return BindingElement; }, get BindingIdentifier() { return BindingIdentifier; }, get Block() { return Block; }, get BreakStatement() { return BreakStatement; }, get CallExpression() { return CallExpression; }, get CallSignature() { return CallSignature; }, get CaseClause() { return CaseClause; }, get Catch() { return Catch; }, get ClassDeclaration() { return ClassDeclaration; }, get ClassExpression() { return ClassExpression; }, get CommaExpression() { return CommaExpression; }, get ComprehensionFor() { return ComprehensionFor; }, get ComprehensionIf() { return ComprehensionIf; }, get ComputedPropertyName() { return ComputedPropertyName; }, get ConditionalExpression() { return ConditionalExpression; }, get ConstructSignature() { return ConstructSignature; }, get ConstructorType() { return ConstructorType; }, get ContinueStatement() { return ContinueStatement; }, get CoverFormals() { return CoverFormals; }, get CoverInitializedName() { return CoverInitializedName; }, get DebuggerStatement() { return DebuggerStatement; }, get DefaultClause() { return DefaultClause; }, get DoWhileStatement() { return DoWhileStatement; }, get EmptyStatement() { return EmptyStatement; }, get ExportDeclaration() { return ExportDeclaration; }, get ExportDefault() { return ExportDefault; }, get ExportSpecifier() { return ExportSpecifier; }, get ExportSpecifierSet() { return ExportSpecifierSet; }, get ExportStar() { return ExportStar; }, get ExpressionStatement() { return ExpressionStatement; }, get Finally() { return Finally; }, get ForInStatement() { return ForInStatement; }, get ForOfStatement() { return ForOfStatement; }, get ForOnStatement() { return ForOnStatement; }, get ForStatement() { return ForStatement; }, get FormalParameter() { return FormalParameter; }, get FormalParameterList() { return FormalParameterList; }, get ForwardDefaultExport() { return ForwardDefaultExport; }, get FunctionBody() { return FunctionBody; }, get FunctionDeclaration() { return FunctionDeclaration; }, get FunctionExpression() { return FunctionExpression; }, get FunctionType() { return FunctionType; }, get GeneratorComprehension() { return GeneratorComprehension; }, get GetAccessor() { return GetAccessor; }, get IdentifierExpression() { return IdentifierExpression; }, get IfStatement() { return IfStatement; }, get ImportedBinding() { return ImportedBinding; }, get ImportClausePair() { return ImportClausePair; }, get ImportDeclaration() { return ImportDeclaration; }, get ImportSpecifier() { return ImportSpecifier; }, get ImportSpecifierSet() { return ImportSpecifierSet; }, get ImportTypeClause() { return ImportTypeClause; }, get IndexSignature() { return IndexSignature; }, get InterfaceDeclaration() { return InterfaceDeclaration; }, get JsxAttribute() { return JsxAttribute; }, get JsxElement() { return JsxElement; }, get JsxElementName() { return JsxElementName; }, get JsxPlaceholder() { return JsxPlaceholder; }, get JsxSpreadAttribute() { return JsxSpreadAttribute; }, get JsxText() { return JsxText; }, get LabelledStatement() { return LabelledStatement; }, get LiteralExpression() { return LiteralExpression; }, get LiteralPropertyName() { return LiteralPropertyName; }, get MemberExpression() { return MemberExpression; }, get MemberLookupExpression() { return MemberLookupExpression; }, get Method() { return Method; }, get MethodSignature() { return MethodSignature; }, get Module() { return Module; }, get ModuleSpecifier() { return ModuleSpecifier; }, get NameSpaceExport() { return NameSpaceExport; }, get NameSpaceImport() { return NameSpaceImport; }, get NamedExport() { return NamedExport; }, get NewExpression() { return NewExpression; }, get ObjectLiteral() { return ObjectLiteral; }, get ObjectPattern() { return ObjectPattern; }, get ObjectPatternField() { return ObjectPatternField; }, get ObjectType() { return ObjectType; }, get ParenExpression() { return ParenExpression; }, get PostfixExpression() { return PostfixExpression; }, get PredefinedType() { return PredefinedType; }, get Script() { return Script; }, get PropertyNameAssignment() { return PropertyNameAssignment; }, get PropertyNameShorthand() { return PropertyNameShorthand; }, get PropertyVariableDeclaration() { return PropertyVariableDeclaration; }, get PropertySignature() { return PropertySignature; }, get RestParameter() { return RestParameter; }, get ReturnStatement() { return ReturnStatement; }, get SetAccessor() { return SetAccessor; }, get SpreadExpression() { return SpreadExpression; }, get SpreadPatternElement() { return SpreadPatternElement; }, get SuperExpression() { return SuperExpression; }, get SwitchStatement() { return SwitchStatement; }, get SyntaxErrorTree() { return SyntaxErrorTree; }, get TemplateLiteralExpression() { return TemplateLiteralExpression; }, get TemplateLiteralPortion() { return TemplateLiteralPortion; }, get TemplateSubstitution() { return TemplateSubstitution; }, get ThisExpression() { return ThisExpression; }, get ThrowStatement() { return ThrowStatement; }, get TryStatement() { return TryStatement; }, get TypeAliasDeclaration() { return TypeAliasDeclaration; }, get TypeArguments() { return TypeArguments; }, get TypeName() { return TypeName; }, get TypeParameter() { return TypeParameter; }, get TypeParameters() { return TypeParameters; }, get TypeReference() { return TypeReference; }, get UnaryExpression() { return UnaryExpression; }, get UnionType() { return UnionType; }, get VariableDeclaration() { return VariableDeclaration; }, get VariableDeclarationList() { return VariableDeclarationList; }, get VariableStatement() { return VariableStatement; }, get WhileStatement() { return WhileStatement; }, get WithStatement() { return WithStatement; }, get YieldExpression() { return YieldExpression; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ParseTreeTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ParseTreeTransformer.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ParseTreeTransformer.js")), Annotation = $__2.Annotation, AnonBlock = $__2.AnonBlock, ArgumentList = $__2.ArgumentList, ArrayComprehension = $__2.ArrayComprehension, ArrayLiteral = $__2.ArrayLiteral, ArrayPattern = $__2.ArrayPattern, ArrayType = $__2.ArrayType, ArrowFunction = $__2.ArrowFunction, AssignmentElement = $__2.AssignmentElement, AwaitExpression = $__2.AwaitExpression, BinaryExpression = $__2.BinaryExpression, BindingElement = $__2.BindingElement, BindingIdentifier = $__2.BindingIdentifier, Block = $__2.Block, BreakStatement = $__2.BreakStatement, CallExpression = $__2.CallExpression, CallSignature = $__2.CallSignature, CaseClause = $__2.CaseClause, Catch = $__2.Catch, ClassDeclaration = $__2.ClassDeclaration, ClassExpression = $__2.ClassExpression, CommaExpression = $__2.CommaExpression, ComprehensionFor = $__2.ComprehensionFor, ComprehensionIf = $__2.ComprehensionIf, ComputedPropertyName = $__2.ComputedPropertyName, ConditionalExpression = $__2.ConditionalExpression, ConstructSignature = $__2.ConstructSignature, ConstructorType = $__2.ConstructorType, ContinueStatement = $__2.ContinueStatement, CoverFormals = $__2.CoverFormals, CoverInitializedName = $__2.CoverInitializedName, DebuggerStatement = $__2.DebuggerStatement, DefaultClause = $__2.DefaultClause, DoWhileStatement = $__2.DoWhileStatement, EmptyStatement = $__2.EmptyStatement, ExportDeclaration = $__2.ExportDeclaration, ExportDefault = $__2.ExportDefault, ExportSpecifier = $__2.ExportSpecifier, ExportSpecifierSet = $__2.ExportSpecifierSet, ExportStar = $__2.ExportStar, ExpressionStatement = $__2.ExpressionStatement, Finally = $__2.Finally, ForInStatement = $__2.ForInStatement, ForOfStatement = $__2.ForOfStatement, ForOnStatement = $__2.ForOnStatement, ForStatement = $__2.ForStatement, FormalParameter = $__2.FormalParameter, FormalParameterList = $__2.FormalParameterList, ForwardDefaultExport = $__2.ForwardDefaultExport, FunctionBody = $__2.FunctionBody, FunctionDeclaration = $__2.FunctionDeclaration, FunctionExpression = $__2.FunctionExpression, FunctionType = $__2.FunctionType, GeneratorComprehension = $__2.GeneratorComprehension, GetAccessor = $__2.GetAccessor, IdentifierExpression = $__2.IdentifierExpression, IfStatement = $__2.IfStatement, ImportedBinding = $__2.ImportedBinding, ImportClausePair = $__2.ImportClausePair, ImportDeclaration = $__2.ImportDeclaration, ImportSpecifier = $__2.ImportSpecifier, ImportSpecifierSet = $__2.ImportSpecifierSet, ImportTypeClause = $__2.ImportTypeClause, IndexSignature = $__2.IndexSignature, InterfaceDeclaration = $__2.InterfaceDeclaration, JsxAttribute = $__2.JsxAttribute, JsxElement = $__2.JsxElement, JsxElementName = $__2.JsxElementName, JsxPlaceholder = $__2.JsxPlaceholder, JsxSpreadAttribute = $__2.JsxSpreadAttribute, JsxText = $__2.JsxText, LabelledStatement = $__2.LabelledStatement, LiteralExpression = $__2.LiteralExpression, LiteralPropertyName = $__2.LiteralPropertyName, MemberExpression = $__2.MemberExpression, MemberLookupExpression = $__2.MemberLookupExpression, Method = $__2.Method, MethodSignature = $__2.MethodSignature, Module = $__2.Module, ModuleSpecifier = $__2.ModuleSpecifier, NameSpaceExport = $__2.NameSpaceExport, NameSpaceImport = $__2.NameSpaceImport, NamedExport = $__2.NamedExport, NewExpression = $__2.NewExpression, ObjectLiteral = $__2.ObjectLiteral, ObjectPattern = $__2.ObjectPattern, ObjectPatternField = $__2.ObjectPatternField, ObjectType = $__2.ObjectType, ParenExpression = $__2.ParenExpression, PostfixExpression = $__2.PostfixExpression, PredefinedType = $__2.PredefinedType, Script = $__2.Script, PropertyNameAssignment = $__2.PropertyNameAssignment, PropertyNameShorthand = $__2.PropertyNameShorthand, PropertyVariableDeclaration = $__2.PropertyVariableDeclaration, PropertySignature = $__2.PropertySignature, RestParameter = $__2.RestParameter, ReturnStatement = $__2.ReturnStatement, SetAccessor = $__2.SetAccessor, SpreadExpression = $__2.SpreadExpression, SpreadPatternElement = $__2.SpreadPatternElement, SuperExpression = $__2.SuperExpression, SwitchStatement = $__2.SwitchStatement, SyntaxErrorTree = $__2.SyntaxErrorTree, TemplateLiteralExpression = $__2.TemplateLiteralExpression, TemplateLiteralPortion = $__2.TemplateLiteralPortion, TemplateSubstitution = $__2.TemplateSubstitution, ThisExpression = $__2.ThisExpression, ThrowStatement = $__2.ThrowStatement, TryStatement = $__2.TryStatement, TypeAliasDeclaration = $__2.TypeAliasDeclaration, TypeArguments = $__2.TypeArguments, TypeName = $__2.TypeName, TypeParameter = $__2.TypeParameter, TypeParameters = $__2.TypeParameters, TypeReference = $__2.TypeReference, UnaryExpression = $__2.UnaryExpression, UnionType = $__2.UnionType, VariableDeclaration = $__2.VariableDeclaration, VariableDeclarationList = $__2.VariableDeclarationList, VariableStatement = $__2.VariableStatement, WhileStatement = $__2.WhileStatement, WithStatement = $__2.WithStatement, YieldExpression = $__2.YieldExpression; var ParseTreeTransformer = function() { function ParseTreeTransformer() {} return ($traceurRuntime.createClass)(ParseTreeTransformer, { transformAny: function(tree) { return tree === null ? null : tree.transform(this); }, transformList: function(list) { var $__1; var builder = null; for (var index = 0; index < list.length; index++) { var element = list[index]; var transformed = this.transformAny(element); if (builder != null || element != transformed) { if (builder === null) { builder = list.slice(0, index); } if (transformed instanceof AnonBlock) ($__1 = builder).push.apply($__1, $traceurRuntime.spread(transformed.statements)); else builder.push(transformed); } } return builder || list; }, transformStateMachine: function(tree) { throw Error('State machines should not live outside of the GeneratorTransformer.'); }, transformToBlockOrStatement: function(tree) { var transformed = this.transformAny(tree); if (transformed instanceof AnonBlock) { return new Block(transformed.location, transformed.statements); } return transformed; }, transformAnnotation: function(tree) { var name = this.transformAny(tree.name); var args = this.transformAny(tree.args); if (name === tree.name && args === tree.args) { return tree; } return new Annotation(tree.location, name, args); }, transformAnonBlock: function(tree) { var statements = this.transformList(tree.statements); if (statements === tree.statements) { return tree; } return new AnonBlock(tree.location, statements); }, transformArgumentList: function(tree) { var args = this.transformList(tree.args); if (args === tree.args) { return tree; } return new ArgumentList(tree.location, args); }, transformArrayComprehension: function(tree) { var comprehensionList = this.transformList(tree.comprehensionList); var expression = this.transformAny(tree.expression); if (comprehensionList === tree.comprehensionList && expression === tree.expression) { return tree; } return new ArrayComprehension(tree.location, comprehensionList, expression); }, transformArrayLiteral: function(tree) { var elements = this.transformList(tree.elements); if (elements === tree.elements) { return tree; } return new ArrayLiteral(tree.location, elements); }, transformArrayPattern: function(tree) { var elements = this.transformList(tree.elements); if (elements === tree.elements) { return tree; } return new ArrayPattern(tree.location, elements); }, transformArrayType: function(tree) { var elementType = this.transformAny(tree.elementType); if (elementType === tree.elementType) { return tree; } return new ArrayType(tree.location, elementType); }, transformArrowFunction: function(tree) { var parameterList = this.transformAny(tree.parameterList); var body = this.transformAny(tree.body); if (parameterList === tree.parameterList && body === tree.body) { return tree; } return new ArrowFunction(tree.location, tree.functionKind, parameterList, body); }, transformAssignmentElement: function(tree) { var assignment = this.transformAny(tree.assignment); var initializer = this.transformAny(tree.initializer); if (assignment === tree.assignment && initializer === tree.initializer) { return tree; } return new AssignmentElement(tree.location, assignment, initializer); }, transformAwaitExpression: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new AwaitExpression(tree.location, expression); }, transformBinaryExpression: function(tree) { var left = this.transformAny(tree.left); var right = this.transformAny(tree.right); if (left === tree.left && right === tree.right) { return tree; } return new BinaryExpression(tree.location, left, tree.operator, right); }, transformBindingElement: function(tree) { var binding = this.transformAny(tree.binding); var initializer = this.transformAny(tree.initializer); if (binding === tree.binding && initializer === tree.initializer) { return tree; } return new BindingElement(tree.location, binding, initializer); }, transformBindingIdentifier: function(tree) { return tree; }, transformBlock: function(tree) { var statements = this.transformList(tree.statements); if (statements === tree.statements) { return tree; } return new Block(tree.location, statements); }, transformBreakStatement: function(tree) { return tree; }, transformCallExpression: function(tree) { var operand = this.transformAny(tree.operand); var args = this.transformAny(tree.args); if (operand === tree.operand && args === tree.args) { return tree; } return new CallExpression(tree.location, operand, args); }, transformCallSignature: function(tree) { var typeParameters = this.transformAny(tree.typeParameters); var parameterList = this.transformAny(tree.parameterList); var returnType = this.transformAny(tree.returnType); if (typeParameters === tree.typeParameters && parameterList === tree.parameterList && returnType === tree.returnType) { return tree; } return new CallSignature(tree.location, typeParameters, parameterList, returnType); }, transformCaseClause: function(tree) { var expression = this.transformAny(tree.expression); var statements = this.transformList(tree.statements); if (expression === tree.expression && statements === tree.statements) { return tree; } return new CaseClause(tree.location, expression, statements); }, transformCatch: function(tree) { var binding = this.transformAny(tree.binding); var catchBody = this.transformAny(tree.catchBody); if (binding === tree.binding && catchBody === tree.catchBody) { return tree; } return new Catch(tree.location, binding, catchBody); }, transformClassDeclaration: function(tree) { var name = this.transformAny(tree.name); var superClass = this.transformAny(tree.superClass); var elements = this.transformList(tree.elements); var annotations = this.transformList(tree.annotations); var typeParameters = this.transformAny(tree.typeParameters); if (name === tree.name && superClass === tree.superClass && elements === tree.elements && annotations === tree.annotations && typeParameters === tree.typeParameters) { return tree; } return new ClassDeclaration(tree.location, name, superClass, elements, annotations, typeParameters); }, transformClassExpression: function(tree) { var name = this.transformAny(tree.name); var superClass = this.transformAny(tree.superClass); var elements = this.transformList(tree.elements); var annotations = this.transformList(tree.annotations); var typeParameters = this.transformAny(tree.typeParameters); if (name === tree.name && superClass === tree.superClass && elements === tree.elements && annotations === tree.annotations && typeParameters === tree.typeParameters) { return tree; } return new ClassExpression(tree.location, name, superClass, elements, annotations, typeParameters); }, transformCommaExpression: function(tree) { var expressions = this.transformList(tree.expressions); if (expressions === tree.expressions) { return tree; } return new CommaExpression(tree.location, expressions); }, transformComprehensionFor: function(tree) { var left = this.transformAny(tree.left); var iterator = this.transformAny(tree.iterator); if (left === tree.left && iterator === tree.iterator) { return tree; } return new ComprehensionFor(tree.location, left, iterator); }, transformComprehensionIf: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new ComprehensionIf(tree.location, expression); }, transformComputedPropertyName: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new ComputedPropertyName(tree.location, expression); }, transformConditionalExpression: function(tree) { var condition = this.transformAny(tree.condition); var left = this.transformAny(tree.left); var right = this.transformAny(tree.right); if (condition === tree.condition && left === tree.left && right === tree.right) { return tree; } return new ConditionalExpression(tree.location, condition, left, right); }, transformConstructSignature: function(tree) { var typeParameters = this.transformAny(tree.typeParameters); var parameterList = this.transformAny(tree.parameterList); var returnType = this.transformAny(tree.returnType); if (typeParameters === tree.typeParameters && parameterList === tree.parameterList && returnType === tree.returnType) { return tree; } return new ConstructSignature(tree.location, typeParameters, parameterList, returnType); }, transformConstructorType: function(tree) { var typeParameters = this.transformAny(tree.typeParameters); var parameterList = this.transformAny(tree.parameterList); var returnType = this.transformAny(tree.returnType); if (typeParameters === tree.typeParameters && parameterList === tree.parameterList && returnType === tree.returnType) { return tree; } return new ConstructorType(tree.location, typeParameters, parameterList, returnType); }, transformContinueStatement: function(tree) { return tree; }, transformCoverFormals: function(tree) { var expressions = this.transformList(tree.expressions); if (expressions === tree.expressions) { return tree; } return new CoverFormals(tree.location, expressions); }, transformCoverInitializedName: function(tree) { var initializer = this.transformAny(tree.initializer); if (initializer === tree.initializer) { return tree; } return new CoverInitializedName(tree.location, tree.name, tree.equalToken, initializer); }, transformDebuggerStatement: function(tree) { return tree; }, transformDefaultClause: function(tree) { var statements = this.transformList(tree.statements); if (statements === tree.statements) { return tree; } return new DefaultClause(tree.location, statements); }, transformDoWhileStatement: function(tree) { var body = this.transformToBlockOrStatement(tree.body); var condition = this.transformAny(tree.condition); if (body === tree.body && condition === tree.condition) { return tree; } return new DoWhileStatement(tree.location, body, condition); }, transformEmptyStatement: function(tree) { return tree; }, transformExportDeclaration: function(tree) { var declaration = this.transformAny(tree.declaration); var annotations = this.transformList(tree.annotations); if (declaration === tree.declaration && annotations === tree.annotations) { return tree; } return new ExportDeclaration(tree.location, declaration, annotations); }, transformExportDefault: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new ExportDefault(tree.location, expression); }, transformExportSpecifier: function(tree) { return tree; }, transformExportSpecifierSet: function(tree) { var specifiers = this.transformList(tree.specifiers); if (specifiers === tree.specifiers) { return tree; } return new ExportSpecifierSet(tree.location, specifiers); }, transformExportStar: function(tree) { return tree; }, transformExpressionStatement: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new ExpressionStatement(tree.location, expression); }, transformFinally: function(tree) { var block = this.transformAny(tree.block); if (block === tree.block) { return tree; } return new Finally(tree.location, block); }, transformForInStatement: function(tree) { var initializer = this.transformAny(tree.initializer); var collection = this.transformAny(tree.collection); var body = this.transformToBlockOrStatement(tree.body); if (initializer === tree.initializer && collection === tree.collection && body === tree.body) { return tree; } return new ForInStatement(tree.location, initializer, collection, body); }, transformForOfStatement: function(tree) { var initializer = this.transformAny(tree.initializer); var collection = this.transformAny(tree.collection); var body = this.transformToBlockOrStatement(tree.body); if (initializer === tree.initializer && collection === tree.collection && body === tree.body) { return tree; } return new ForOfStatement(tree.location, initializer, collection, body); }, transformForOnStatement: function(tree) { var initializer = this.transformAny(tree.initializer); var observable = this.transformAny(tree.observable); var body = this.transformToBlockOrStatement(tree.body); if (initializer === tree.initializer && observable === tree.observable && body === tree.body) { return tree; } return new ForOnStatement(tree.location, initializer, observable, body); }, transformForStatement: function(tree) { var initializer = this.transformAny(tree.initializer); var condition = this.transformAny(tree.condition); var increment = this.transformAny(tree.increment); var body = this.transformToBlockOrStatement(tree.body); if (initializer === tree.initializer && condition === tree.condition && increment === tree.increment && body === tree.body) { return tree; } return new ForStatement(tree.location, initializer, condition, increment, body); }, transformFormalParameter: function(tree) { var parameter = this.transformAny(tree.parameter); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); if (parameter === tree.parameter && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations) { return tree; } return new FormalParameter(tree.location, parameter, typeAnnotation, annotations); }, transformFormalParameterList: function(tree) { var parameters = this.transformList(tree.parameters); if (parameters === tree.parameters) { return tree; } return new FormalParameterList(tree.location, parameters); }, transformForwardDefaultExport: function(tree) { return tree; }, transformFunctionBody: function(tree) { var statements = this.transformList(tree.statements); if (statements === tree.statements) { return tree; } return new FunctionBody(tree.location, statements); }, transformFunctionDeclaration: function(tree) { var name = this.transformAny(tree.name); var parameterList = this.transformAny(tree.parameterList); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var body = this.transformAny(tree.body); if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) { return tree; } return new FunctionDeclaration(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body); }, transformFunctionExpression: function(tree) { var name = this.transformAny(tree.name); var parameterList = this.transformAny(tree.parameterList); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var body = this.transformAny(tree.body); if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) { return tree; } return new FunctionExpression(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body); }, transformFunctionType: function(tree) { var typeParameters = this.transformAny(tree.typeParameters); var parameterList = this.transformAny(tree.parameterList); var returnType = this.transformAny(tree.returnType); if (typeParameters === tree.typeParameters && parameterList === tree.parameterList && returnType === tree.returnType) { return tree; } return new FunctionType(tree.location, typeParameters, parameterList, returnType); }, transformGeneratorComprehension: function(tree) { var comprehensionList = this.transformList(tree.comprehensionList); var expression = this.transformAny(tree.expression); if (comprehensionList === tree.comprehensionList && expression === tree.expression) { return tree; } return new GeneratorComprehension(tree.location, comprehensionList, expression); }, transformGetAccessor: function(tree) { var name = this.transformAny(tree.name); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var body = this.transformAny(tree.body); if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) { return tree; } return new GetAccessor(tree.location, tree.isStatic, name, typeAnnotation, annotations, body); }, transformIdentifierExpression: function(tree) { return tree; }, transformIfStatement: function(tree) { var condition = this.transformAny(tree.condition); var ifClause = this.transformToBlockOrStatement(tree.ifClause); var elseClause = this.transformToBlockOrStatement(tree.elseClause); if (condition === tree.condition && ifClause === tree.ifClause && elseClause === tree.elseClause) { return tree; } return new IfStatement(tree.location, condition, ifClause, elseClause); }, transformImportedBinding: function(tree) { var binding = this.transformAny(tree.binding); if (binding === tree.binding) { return tree; } return new ImportedBinding(tree.location, binding); }, transformImportClausePair: function(tree) { var first = this.transformAny(tree.first); var second = this.transformAny(tree.second); if (first === tree.first && second === tree.second) { return tree; } return new ImportClausePair(tree.location, first, second); }, transformImportDeclaration: function(tree) { var importClause = this.transformAny(tree.importClause); var moduleSpecifier = this.transformAny(tree.moduleSpecifier); if (importClause === tree.importClause && moduleSpecifier === tree.moduleSpecifier) { return tree; } return new ImportDeclaration(tree.location, importClause, moduleSpecifier); }, transformImportSpecifier: function(tree) { var binding = this.transformAny(tree.binding); if (binding === tree.binding) { return tree; } return new ImportSpecifier(tree.location, binding, tree.name); }, transformImportSpecifierSet: function(tree) { var specifiers = this.transformList(tree.specifiers); if (specifiers === tree.specifiers) { return tree; } return new ImportSpecifierSet(tree.location, specifiers); }, transformImportTypeClause: function(tree) { var clause = this.transformAny(tree.clause); if (clause === tree.clause) { return tree; } return new ImportTypeClause(tree.location, clause); }, transformIndexSignature: function(tree) { var indexType = this.transformAny(tree.indexType); var typeAnnotation = this.transformAny(tree.typeAnnotation); if (indexType === tree.indexType && typeAnnotation === tree.typeAnnotation) { return tree; } return new IndexSignature(tree.location, tree.name, indexType, typeAnnotation); }, transformInterfaceDeclaration: function(tree) { var typeParameters = this.transformAny(tree.typeParameters); var objectType = this.transformAny(tree.objectType); if (typeParameters === tree.typeParameters && objectType === tree.objectType) { return tree; } return new InterfaceDeclaration(tree.location, tree.name, typeParameters, tree.extendsClause, objectType); }, transformJsxAttribute: function(tree) { var value = this.transformAny(tree.value); if (value === tree.value) { return tree; } return new JsxAttribute(tree.location, tree.name, value); }, transformJsxElement: function(tree) { var name = this.transformAny(tree.name); var attributes = this.transformList(tree.attributes); var children = this.transformList(tree.children); if (name === tree.name && attributes === tree.attributes && children === tree.children) { return tree; } return new JsxElement(tree.location, name, attributes, children); }, transformJsxElementName: function(tree) { return tree; }, transformJsxPlaceholder: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new JsxPlaceholder(tree.location, expression); }, transformJsxSpreadAttribute: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new JsxSpreadAttribute(tree.location, expression); }, transformJsxText: function(tree) { return tree; }, transformLabelledStatement: function(tree) { var statement = this.transformAny(tree.statement); if (statement === tree.statement) { return tree; } return new LabelledStatement(tree.location, tree.name, statement); }, transformLiteralExpression: function(tree) { return tree; }, transformLiteralPropertyName: function(tree) { return tree; }, transformMemberExpression: function(tree) { var operand = this.transformAny(tree.operand); if (operand === tree.operand) { return tree; } return new MemberExpression(tree.location, operand, tree.memberName); }, transformMemberLookupExpression: function(tree) { var operand = this.transformAny(tree.operand); var memberExpression = this.transformAny(tree.memberExpression); if (operand === tree.operand && memberExpression === tree.memberExpression) { return tree; } return new MemberLookupExpression(tree.location, operand, memberExpression); }, transformMethod: function(tree) { var name = this.transformAny(tree.name); var parameterList = this.transformAny(tree.parameterList); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var body = this.transformAny(tree.body); var debugName = this.transformAny(tree.debugName); if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body && debugName === tree.debugName) { return tree; } return new Method(tree.location, tree.isStatic, tree.functionKind, name, parameterList, typeAnnotation, annotations, body, debugName); }, transformMethodSignature: function(tree) { var name = this.transformAny(tree.name); var callSignature = this.transformAny(tree.callSignature); if (name === tree.name && callSignature === tree.callSignature) { return tree; } return new MethodSignature(tree.location, name, tree.optional, callSignature); }, transformModule: function(tree) { var scriptItemList = this.transformList(tree.scriptItemList); if (scriptItemList === tree.scriptItemList) { return tree; } return new Module(tree.location, scriptItemList, tree.moduleName); }, transformModuleSpecifier: function(tree) { return tree; }, transformNameSpaceExport: function(tree) { return tree; }, transformNameSpaceImport: function(tree) { var binding = this.transformAny(tree.binding); if (binding === tree.binding) { return tree; } return new NameSpaceImport(tree.location, binding); }, transformNamedExport: function(tree) { var exportClause = this.transformAny(tree.exportClause); var moduleSpecifier = this.transformAny(tree.moduleSpecifier); if (exportClause === tree.exportClause && moduleSpecifier === tree.moduleSpecifier) { return tree; } return new NamedExport(tree.location, exportClause, moduleSpecifier); }, transformNewExpression: function(tree) { var operand = this.transformAny(tree.operand); var args = this.transformAny(tree.args); if (operand === tree.operand && args === tree.args) { return tree; } return new NewExpression(tree.location, operand, args); }, transformObjectLiteral: function(tree) { var propertyNameAndValues = this.transformList(tree.propertyNameAndValues); if (propertyNameAndValues === tree.propertyNameAndValues) { return tree; } return new ObjectLiteral(tree.location, propertyNameAndValues); }, transformObjectPattern: function(tree) { var fields = this.transformList(tree.fields); if (fields === tree.fields) { return tree; } return new ObjectPattern(tree.location, fields); }, transformObjectPatternField: function(tree) { var name = this.transformAny(tree.name); var element = this.transformAny(tree.element); if (name === tree.name && element === tree.element) { return tree; } return new ObjectPatternField(tree.location, name, element); }, transformObjectType: function(tree) { var typeMembers = this.transformList(tree.typeMembers); if (typeMembers === tree.typeMembers) { return tree; } return new ObjectType(tree.location, typeMembers); }, transformParenExpression: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new ParenExpression(tree.location, expression); }, transformPostfixExpression: function(tree) { var operand = this.transformAny(tree.operand); if (operand === tree.operand) { return tree; } return new PostfixExpression(tree.location, operand, tree.operator); }, transformPredefinedType: function(tree) { return tree; }, transformScript: function(tree) { var scriptItemList = this.transformList(tree.scriptItemList); if (scriptItemList === tree.scriptItemList) { return tree; } return new Script(tree.location, scriptItemList, tree.moduleName); }, transformPropertyNameAssignment: function(tree) { var name = this.transformAny(tree.name); var value = this.transformAny(tree.value); if (name === tree.name && value === tree.value) { return tree; } return new PropertyNameAssignment(tree.location, name, value); }, transformPropertyNameShorthand: function(tree) { return tree; }, transformPropertyVariableDeclaration: function(tree) { var name = this.transformAny(tree.name); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var initializer = this.transformAny(tree.initializer); if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && initializer === tree.initializer) { return tree; } return new PropertyVariableDeclaration(tree.location, tree.isStatic, name, typeAnnotation, annotations, initializer); }, transformPropertySignature: function(tree) { var name = this.transformAny(tree.name); var typeAnnotation = this.transformAny(tree.typeAnnotation); if (name === tree.name && typeAnnotation === tree.typeAnnotation) { return tree; } return new PropertySignature(tree.location, name, tree.optional, typeAnnotation); }, transformRestParameter: function(tree) { var identifier = this.transformAny(tree.identifier); if (identifier === tree.identifier) { return tree; } return new RestParameter(tree.location, identifier); }, transformReturnStatement: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new ReturnStatement(tree.location, expression); }, transformSetAccessor: function(tree) { var name = this.transformAny(tree.name); var parameterList = this.transformAny(tree.parameterList); var annotations = this.transformList(tree.annotations); var body = this.transformAny(tree.body); if (name === tree.name && parameterList === tree.parameterList && annotations === tree.annotations && body === tree.body) { return tree; } return new SetAccessor(tree.location, tree.isStatic, name, parameterList, annotations, body); }, transformSpreadExpression: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new SpreadExpression(tree.location, expression); }, transformSpreadPatternElement: function(tree) { var lvalue = this.transformAny(tree.lvalue); if (lvalue === tree.lvalue) { return tree; } return new SpreadPatternElement(tree.location, lvalue); }, transformSuperExpression: function(tree) { return tree; }, transformSwitchStatement: function(tree) { var expression = this.transformAny(tree.expression); var caseClauses = this.transformList(tree.caseClauses); if (expression === tree.expression && caseClauses === tree.caseClauses) { return tree; } return new SwitchStatement(tree.location, expression, caseClauses); }, transformSyntaxErrorTree: function(tree) { return tree; }, transformTemplateLiteralExpression: function(tree) { var operand = this.transformAny(tree.operand); var elements = this.transformList(tree.elements); if (operand === tree.operand && elements === tree.elements) { return tree; } return new TemplateLiteralExpression(tree.location, operand, elements); }, transformTemplateLiteralPortion: function(tree) { return tree; }, transformTemplateSubstitution: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new TemplateSubstitution(tree.location, expression); }, transformThisExpression: function(tree) { return tree; }, transformThrowStatement: function(tree) { var value = this.transformAny(tree.value); if (value === tree.value) { return tree; } return new ThrowStatement(tree.location, value); }, transformTryStatement: function(tree) { var body = this.transformAny(tree.body); var catchBlock = this.transformAny(tree.catchBlock); var finallyBlock = this.transformAny(tree.finallyBlock); if (body === tree.body && catchBlock === tree.catchBlock && finallyBlock === tree.finallyBlock) { return tree; } return new TryStatement(tree.location, body, catchBlock, finallyBlock); }, transformTypeAliasDeclaration: function(tree) { var value = this.transformAny(tree.value); if (value === tree.value) { return tree; } return new TypeAliasDeclaration(tree.location, tree.name, value); }, transformTypeArguments: function(tree) { var args = this.transformList(tree.args); if (args === tree.args) { return tree; } return new TypeArguments(tree.location, args); }, transformTypeName: function(tree) { var moduleName = this.transformAny(tree.moduleName); if (moduleName === tree.moduleName) { return tree; } return new TypeName(tree.location, moduleName, tree.name); }, transformTypeParameter: function(tree) { var extendsType = this.transformAny(tree.extendsType); if (extendsType === tree.extendsType) { return tree; } return new TypeParameter(tree.location, tree.identifierToken, extendsType); }, transformTypeParameters: function(tree) { var parameters = this.transformList(tree.parameters); if (parameters === tree.parameters) { return tree; } return new TypeParameters(tree.location, parameters); }, transformTypeReference: function(tree) { var typeName = this.transformAny(tree.typeName); var args = this.transformAny(tree.args); if (typeName === tree.typeName && args === tree.args) { return tree; } return new TypeReference(tree.location, typeName, args); }, transformUnaryExpression: function(tree) { var operand = this.transformAny(tree.operand); if (operand === tree.operand) { return tree; } return new UnaryExpression(tree.location, tree.operator, operand); }, transformUnionType: function(tree) { var types = this.transformList(tree.types); if (types === tree.types) { return tree; } return new UnionType(tree.location, types); }, transformVariableDeclaration: function(tree) { var lvalue = this.transformAny(tree.lvalue); var typeAnnotation = this.transformAny(tree.typeAnnotation); var initializer = this.transformAny(tree.initializer); if (lvalue === tree.lvalue && typeAnnotation === tree.typeAnnotation && initializer === tree.initializer) { return tree; } return new VariableDeclaration(tree.location, lvalue, typeAnnotation, initializer); }, transformVariableDeclarationList: function(tree) { var declarations = this.transformList(tree.declarations); if (declarations === tree.declarations) { return tree; } return new VariableDeclarationList(tree.location, tree.declarationType, declarations); }, transformVariableStatement: function(tree) { var declarations = this.transformAny(tree.declarations); if (declarations === tree.declarations) { return tree; } return new VariableStatement(tree.location, declarations); }, transformWhileStatement: function(tree) { var condition = this.transformAny(tree.condition); var body = this.transformToBlockOrStatement(tree.body); if (condition === tree.condition && body === tree.body) { return tree; } return new WhileStatement(tree.location, condition, body); }, transformWithStatement: function(tree) { var expression = this.transformAny(tree.expression); var body = this.transformToBlockOrStatement(tree.body); if (expression === tree.expression && body === tree.body) { return tree; } return new WithStatement(tree.location, expression, body); }, transformYieldExpression: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) { return tree; } return new YieldExpression(tree.location, expression, tree.isYieldFor); } }, {}); }(); return {get ParseTreeTransformer() { return ParseTreeTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/AttachModuleNameTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/module/AttachModuleNameTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/module/AttachModuleNameTransformer.js")).ParseTreeTransformer; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/module/AttachModuleNameTransformer.js")), Module = $__2.Module, Script = $__2.Script; var AttachModuleNameTransformer = function($__super) { function AttachModuleNameTransformer(moduleName) { $traceurRuntime.superConstructor(AttachModuleNameTransformer).call(this); this.moduleName_ = moduleName; } return ($traceurRuntime.createClass)(AttachModuleNameTransformer, { transformModule: function(tree) { return new Module(tree.location, tree.scriptItemList, this.moduleName_); }, transformScript: function(tree) { return new Script(tree.location, tree.scriptItemList, this.moduleName_); } }, {}, $__super); }(ParseTreeTransformer); return {get AttachModuleNameTransformer() { return AttachModuleNameTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/IdentifierToken.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/IdentifierToken.js"; var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/IdentifierToken.js")).Token; var IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/IdentifierToken.js")).IDENTIFIER; var IdentifierToken = function($__super) { function IdentifierToken(location, value) { $traceurRuntime.superConstructor(IdentifierToken).call(this, IDENTIFIER, location); this.value = value; } return ($traceurRuntime.createClass)(IdentifierToken, {toString: function() { return this.value; }}, {}, $__super); }(Token); return {get IdentifierToken() { return IdentifierToken; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/LiteralToken.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/LiteralToken.js"; var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/LiteralToken.js")).Token; var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/LiteralToken.js")), NULL = $__11.NULL, NUMBER = $__11.NUMBER, STRING = $__11.STRING; var StringParser = function() { var $__2; function StringParser(value) { this.value = value; this.index = 0; } return ($traceurRuntime.createClass)(StringParser, ($__2 = {}, Object.defineProperty($__2, Symbol.iterator, { value: function() { return this; }, configurable: true, enumerable: true, writable: true }), Object.defineProperty($__2, "next", { value: function() { if (++this.index >= this.value.length - 1) return { value: undefined, done: true }; return { value: this.value[this.index], done: false }; }, configurable: true, enumerable: true, writable: true }), Object.defineProperty($__2, "parse", { value: function() { if (this.value.indexOf('\\') === -1) return this.value.slice(1, -1); var result = ''; var $__6 = true; var $__7 = false; var $__8 = undefined; try { for (var $__4 = void 0, $__3 = (this)[Symbol.iterator](); !($__6 = ($__4 = $__3.next()).done); $__6 = true) { var ch = $__4.value; { result += ch === '\\' ? this.parseEscapeSequence() : ch; } } } catch ($__9) { $__7 = true; $__8 = $__9; } finally { try { if (!$__6 && $__3.return != null) { $__3.return(); } } finally { if ($__7) { throw $__8; } } } return result; }, configurable: true, enumerable: true, writable: true }), Object.defineProperty($__2, "parseEscapeSequence", { value: function() { var ch = this.next().value; switch (ch) { case '\n': case '\r': case '\u2028': case '\u2029': return ''; case '0': return '\0'; case 'b': return '\b'; case 'f': return '\f'; case 'n': return '\n'; case 'r': return '\r'; case 't': return '\t'; case 'v': return '\v'; case 'x': return String.fromCharCode(parseInt(this.next().value + this.next().value, 16)); case 'u': { var nextValue = this.next().value; if (nextValue === '{') { var hexDigits = ''; while ((nextValue = this.next().value) !== '}') { hexDigits += nextValue; } var codePoint = parseInt(hexDigits, 16); if (codePoint <= 0xFFFF) { return String.fromCharCode(codePoint); } var high = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800; var low = (codePoint - 0x10000) % 0x400 + 0xDC00; return String.fromCharCode(high, low); } return String.fromCharCode(parseInt(nextValue + this.next().value + this.next().value + this.next().value, 16)); } default: if (Number(ch) < 8) throw new Error('Octal literals are not supported'); return ch; } }, configurable: true, enumerable: true, writable: true }), $__2), {}); }(); var LiteralToken = function($__super) { function LiteralToken(type, value, location) { $traceurRuntime.superConstructor(LiteralToken).call(this, type, location); this.value = value; } return ($traceurRuntime.createClass)(LiteralToken, { toString: function() { return this.value; }, get processedValue() { switch (this.type) { case NULL: return null; case NUMBER: { var value = this.value; if (value.charCodeAt(0) === 48) { switch (value.charCodeAt(1)) { case 66: case 98: return parseInt(this.value.slice(2), 2); case 79: case 111: return parseInt(this.value.slice(2), 8); } } return Number(this.value); } case STRING: { var parser = new StringParser(this.value); return parser.parse(); } default: throw new Error('Not implemented'); } } }, {}, $__super); }(Token); return {get LiteralToken() { return LiteralToken; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/assert.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/assert.js"; function assert(b) { if (!b && $traceurRuntime.options.debug) throw Error('Assertion failed'); } return {get assert() { return assert; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ParseTreeFactory.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js"; var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/IdentifierToken.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")).IdentifierToken; var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")).LiteralToken; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTree.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")), ParseTree = $__3.ParseTree, ParseTreeType = $__3.ParseTreeType; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")), CALL = $__4.CALL, CREATE = $__4.CREATE, DEFINE_PROPERTY = $__4.DEFINE_PROPERTY, FREEZE = $__4.FREEZE, OBJECT = $__4.OBJECT, UNDEFINED = $__4.UNDEFINED; var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Token.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")).Token; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")), EQUAL = $__6.EQUAL, FALSE = $__6.FALSE, NULL = $__6.NULL, NUMBER = $__6.NUMBER, STRING = $__6.STRING, TRUE = $__6.TRUE, VOID = $__6.VOID; var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")).assert; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ParseTreeFactory.js")), ArgumentList = $__8.ArgumentList, ArrayLiteral = $__8.ArrayLiteral, BindingElement = $__8.BindingElement, BinaryExpression = $__8.BinaryExpression, BindingIdentifier = $__8.BindingIdentifier, Block = $__8.Block, BreakStatement = $__8.BreakStatement, CallExpression = $__8.CallExpression, CaseClause = $__8.CaseClause, Catch = $__8.Catch, ClassDeclaration = $__8.ClassDeclaration, CommaExpression = $__8.CommaExpression, ConditionalExpression = $__8.ConditionalExpression, ContinueStatement = $__8.ContinueStatement, DefaultClause = $__8.DefaultClause, DoWhileStatement = $__8.DoWhileStatement, EmptyStatement = $__8.EmptyStatement, ExpressionStatement = $__8.ExpressionStatement, Finally = $__8.Finally, ForInStatement = $__8.ForInStatement, ForOfStatement = $__8.ForOfStatement, ForStatement = $__8.ForStatement, FormalParameter = $__8.FormalParameter, FormalParameterList = $__8.FormalParameterList, FunctionBody = $__8.FunctionBody, FunctionExpression = $__8.FunctionExpression, IdentifierExpression = $__8.IdentifierExpression, IfStatement = $__8.IfStatement, ImportedBinding = $__8.ImportedBinding, LiteralExpression = $__8.LiteralExpression, LiteralPropertyName = $__8.LiteralPropertyName, MemberExpression = $__8.MemberExpression, MemberLookupExpression = $__8.MemberLookupExpression, NewExpression = $__8.NewExpression, ObjectLiteral = $__8.ObjectLiteral, ParenExpression = $__8.ParenExpression, PostfixExpression = $__8.PostfixExpression, Script = $__8.Script, PropertyNameAssignment = $__8.PropertyNameAssignment, RestParameter = $__8.RestParameter, ReturnStatement = $__8.ReturnStatement, SpreadExpression = $__8.SpreadExpression, SwitchStatement = $__8.SwitchStatement, ThisExpression = $__8.ThisExpression, ThrowStatement = $__8.ThrowStatement, TryStatement = $__8.TryStatement, UnaryExpression = $__8.UnaryExpression, VariableDeclaration = $__8.VariableDeclaration, VariableDeclarationList = $__8.VariableDeclarationList, VariableStatement = $__8.VariableStatement, WhileStatement = $__8.WhileStatement, WithStatement = $__8.WithStatement; var slice = Array.prototype.slice.call.bind(Array.prototype.slice); var map = Array.prototype.map.call.bind(Array.prototype.map); function createOperatorToken(operator) { return new Token(operator, null); } function createIdentifierToken(identifier) { return new IdentifierToken(null, identifier); } function createStringLiteralToken(value) { return new LiteralToken(STRING, JSON.stringify(value), null); } function createBooleanLiteralToken(value) { return new Token(value ? TRUE : FALSE, null); } function createNullLiteralToken() { return new LiteralToken(NULL, 'null', null); } function createNumberLiteralToken(value) { return new LiteralToken(NUMBER, String(value), null); } function createEmptyParameterList() { return new FormalParameterList(null, []); } function createFormalParameter(name) { var bindingIdentifier = createBindingIdentifier(name); return new FormalParameter(null, new BindingElement(null, bindingIdentifier, null), null, []); } function createArgumentList(list) { return new ArgumentList(null, list); } function createEmptyArgumentList() { return createArgumentList([]); } function createArrayLiteral(list) { return new ArrayLiteral(null, list); } function createEmptyArrayLiteral() { return createArrayLiteral([]); } function createAssignmentExpression(lhs, rhs) { return new BinaryExpression(null, lhs, createOperatorToken(EQUAL), rhs); } function createBinaryExpression(left, operator, right) { return new BinaryExpression(null, left, operator, right); } function createBindingIdentifier(identifier) { if (typeof identifier === 'string') identifier = createIdentifierToken(identifier); else if (identifier.type === ParseTreeType.BINDING_IDENTIFIER) return identifier; else if (identifier.type === ParseTreeType.IDENTIFIER_EXPRESSION) return new BindingIdentifier(identifier.location, identifier.identifierToken); return new BindingIdentifier(null, identifier); } function createImportedBinding(name) { var bindingIdentifier = createBindingIdentifier(name); return new ImportedBinding(bindingIdentifier.location, bindingIdentifier); } function createEmptyStatement() { return new EmptyStatement(null); } function createEmptyBlock() { return createBlock([]); } function createBlock(statements) { return new Block(null, statements); } function createFunctionBody(statements) { return new FunctionBody(null, statements); } function createScopedExpression(body, scope) { assert(body.type === 'FUNCTION_BODY'); return createCallCall(createParenExpression(createFunctionExpression(createEmptyParameterList(), body)), scope); } function createImmediatelyInvokedFunctionExpression(body) { assert(body.type === 'FUNCTION_BODY'); return createCallExpression(createParenExpression(createFunctionExpression(createEmptyParameterList(), body))); } function createCallExpression(operand) { var args = arguments[1] !== (void 0) ? arguments[1] : createEmptyArgumentList(); return new CallExpression(null, operand, args); } function createBreakStatement() { var name = arguments[0] !== (void 0) ? arguments[0] : null; return new BreakStatement(null, name); } function createCallCall(func, thisExpression) { return createCallExpression(createMemberExpression(func, CALL), createArgumentList([thisExpression])); } function createCaseClause(expression, statements) { return new CaseClause(null, expression, statements); } function createCatch(identifier, catchBody) { identifier = createBindingIdentifier(identifier); return new Catch(null, identifier, catchBody); } function createClassDeclaration(name, superClass, elements) { return new ClassDeclaration(null, name, superClass, elements, []); } function createCommaExpression(expressions) { return new CommaExpression(null, expressions); } function createConditionalExpression(condition, left, right) { return new ConditionalExpression(null, condition, left, right); } function createContinueStatement() { var name = arguments[0] !== (void 0) ? arguments[0] : null; return new ContinueStatement(null, name); } function createDefaultClause(statements) { return new DefaultClause(null, statements); } function createDoWhileStatement(body, condition) { return new DoWhileStatement(null, body, condition); } function createAssignmentStatement(lhs, rhs) { return createExpressionStatement(createAssignmentExpression(lhs, rhs)); } function createCallStatement(operand) { var args = arguments[1]; return createExpressionStatement(createCallExpression(operand, args)); } function createExpressionStatement(expression) { return new ExpressionStatement(null, expression); } function createFinally(block) { return new Finally(null, block); } function createForOfStatement(initializer, collection, body) { return new ForOfStatement(null, initializer, collection, body); } function createForInStatement(initializer, collection, body) { return new ForInStatement(null, initializer, collection, body); } function createForStatement(variables, condition, increment, body) { return new ForStatement(null, variables, condition, increment, body); } function createFunctionExpression(parameterList, body) { assert(body.type === 'FUNCTION_BODY'); return new FunctionExpression(null, null, false, parameterList, null, [], body); } function createIdentifierExpression(identifier) { if (typeof identifier === 'string') identifier = createIdentifierToken(identifier); else if (identifier instanceof BindingIdentifier) identifier = identifier.identifierToken; return new IdentifierExpression(null, identifier); } function createUndefinedExpression() { return createIdentifierExpression(UNDEFINED); } function createIfStatement(condition, ifClause) { var elseClause = arguments[2] !== (void 0) ? arguments[2] : null; return new IfStatement(null, condition, ifClause, elseClause); } function createStringLiteral(value) { return new LiteralExpression(null, createStringLiteralToken(value)); } function createBooleanLiteral(value) { return new LiteralExpression(null, createBooleanLiteralToken(value)); } function createTrueLiteral() { return createBooleanLiteral(true); } function createFalseLiteral() { return createBooleanLiteral(false); } function createNullLiteral() { return new LiteralExpression(null, createNullLiteralToken()); } function createNumberLiteral(value) { return new LiteralExpression(null, createNumberLiteralToken(value)); } function createMemberExpression(operand, memberName) { for (var memberNames = [], $__0 = 2; $__0 < arguments.length; $__0++) memberNames[$__0 - 2] = arguments[$__0]; if (typeof operand === 'string' || operand instanceof IdentifierToken) operand = createIdentifierExpression(operand); if (typeof memberName === 'string') memberName = createIdentifierToken(memberName); if (memberName instanceof LiteralToken) memberName = new LiteralExpression(null, memberName); var tree = memberName instanceof LiteralExpression ? new MemberLookupExpression(null, operand, memberName) : new MemberExpression(null, operand, memberName); for (var i = 0; i < memberNames.length; i++) { tree = createMemberExpression(tree, memberNames[i]); } return tree; } function createMemberLookupExpression(operand, memberExpression) { return new MemberLookupExpression(null, operand, memberExpression); } function createThisExpression() { return new ThisExpression(null); } function createNewExpression(operand, args) { return new NewExpression(null, operand, args); } function createObjectFreeze(value) { return createCallExpression(createMemberExpression(OBJECT, FREEZE), createArgumentList([value])); } function createObjectCreate(protoExpression) { var descriptors = arguments[1]; var argumentList = [protoExpression]; if (descriptors) argumentList.push(descriptors); return createCallExpression(createMemberExpression(OBJECT, CREATE), createArgumentList(argumentList)); } function createObjectLiteralForDescriptor(descr) { var propertyNameAndValues = Object.keys(descr).map(function(name) { var value = descr[name]; if (!(value instanceof ParseTree)) value = createBooleanLiteral(!!value); return createPropertyNameAssignment(name, value); }); return createObjectLiteral(propertyNameAndValues); } function createDefineProperty(tree, name, descr) { if (typeof name === 'string') name = createStringLiteral(name); return createCallExpression(createMemberExpression(OBJECT, DEFINE_PROPERTY), createArgumentList([tree, name, createObjectLiteralForDescriptor(descr)])); } function createObjectLiteral(propertyNameAndValues) { return new ObjectLiteral(null, propertyNameAndValues); } function createParenExpression(expression) { return new ParenExpression(null, expression); } function createPostfixExpression(operand, operator) { return new PostfixExpression(null, operand, operator); } function createScript(scriptItemList) { return new Script(null, scriptItemList, null); } function createPropertyNameAssignment(identifier, value) { if (typeof identifier === 'string') identifier = createLiteralPropertyName(identifier); return new PropertyNameAssignment(null, identifier, value); } function createLiteralPropertyName(name) { return new LiteralPropertyName(null, createIdentifierToken(name)); } function createRestParameter(identifier) { var rest = new RestParameter(null, createBindingIdentifier(identifier)); return new FormalParameter(null, rest, null, []); } function createReturnStatement(expression) { return new ReturnStatement(null, expression); } function createSpreadExpression(expression) { return new SpreadExpression(null, expression); } function createSwitchStatement(expression, caseClauses) { return new SwitchStatement(null, expression, caseClauses); } function createThrowStatement(value) { return new ThrowStatement(null, value); } function createTryStatement(body, catchBlock) { var finallyBlock = arguments[2] !== (void 0) ? arguments[2] : null; return new TryStatement(null, body, catchBlock, finallyBlock); } function createUnaryExpression(operator, operand) { return new UnaryExpression(null, operator, operand); } function createUseStrictDirective() { return createExpressionStatement(createStringLiteral('use strict')); } function createVariableDeclarationList(binding, identifierOrDeclarations) { var initializer = arguments[2]; if (identifierOrDeclarations instanceof Array) { var declarations = identifierOrDeclarations; return new VariableDeclarationList(null, binding, declarations); } var identifier = identifierOrDeclarations; return createVariableDeclarationList(binding, [createVariableDeclaration(identifier, initializer)]); } function createVariableDeclaration(identifier, initializer) { if (!(identifier instanceof ParseTree) || identifier.type !== ParseTreeType.BINDING_IDENTIFIER && identifier.type !== ParseTreeType.OBJECT_PATTERN && identifier.type !== ParseTreeType.ARRAY_PATTERN) { identifier = createBindingIdentifier(identifier); } return new VariableDeclaration(null, identifier, null, initializer); } function createVariableStatement(listOrBinding) { var identifier = arguments[1]; var initializer = arguments[2]; if (listOrBinding instanceof VariableDeclarationList) return new VariableStatement(null, listOrBinding); var binding = listOrBinding; var list = createVariableDeclarationList(binding, identifier, initializer); return createVariableStatement(list); } function createVoid0() { return createParenExpression(createUnaryExpression(createOperatorToken(VOID), createNumberLiteral(0))); } function createWhileStatement(condition, body) { return new WhileStatement(null, condition, body); } function createWithStatement(expression, body) { return new WithStatement(null, expression, body); } function createAssignStateStatement(state) { return createAssignmentStatement(createMemberExpression('$ctx', 'state'), createNumberLiteral(state)); } return { get createOperatorToken() { return createOperatorToken; }, get createIdentifierToken() { return createIdentifierToken; }, get createStringLiteralToken() { return createStringLiteralToken; }, get createBooleanLiteralToken() { return createBooleanLiteralToken; }, get createNullLiteralToken() { return createNullLiteralToken; }, get createNumberLiteralToken() { return createNumberLiteralToken; }, get createEmptyParameterList() { return createEmptyParameterList; }, get createFormalParameter() { return createFormalParameter; }, get createArgumentList() { return createArgumentList; }, get createEmptyArgumentList() { return createEmptyArgumentList; }, get createArrayLiteral() { return createArrayLiteral; }, get createEmptyArrayLiteral() { return createEmptyArrayLiteral; }, get createAssignmentExpression() { return createAssignmentExpression; }, get createBinaryExpression() { return createBinaryExpression; }, get createBindingIdentifier() { return createBindingIdentifier; }, get createImportedBinding() { return createImportedBinding; }, get createEmptyStatement() { return createEmptyStatement; }, get createEmptyBlock() { return createEmptyBlock; }, get createBlock() { return createBlock; }, get createFunctionBody() { return createFunctionBody; }, get createScopedExpression() { return createScopedExpression; }, get createImmediatelyInvokedFunctionExpression() { return createImmediatelyInvokedFunctionExpression; }, get createCallExpression() { return createCallExpression; }, get createBreakStatement() { return createBreakStatement; }, get createCaseClause() { return createCaseClause; }, get createCatch() { return createCatch; }, get createClassDeclaration() { return createClassDeclaration; }, get createCommaExpression() { return createCommaExpression; }, get createConditionalExpression() { return createConditionalExpression; }, get createContinueStatement() { return createContinueStatement; }, get createDefaultClause() { return createDefaultClause; }, get createDoWhileStatement() { return createDoWhileStatement; }, get createAssignmentStatement() { return createAssignmentStatement; }, get createCallStatement() { return createCallStatement; }, get createExpressionStatement() { return createExpressionStatement; }, get createFinally() { return createFinally; }, get createForOfStatement() { return createForOfStatement; }, get createForInStatement() { return createForInStatement; }, get createForStatement() { return createForStatement; }, get createFunctionExpression() { return createFunctionExpression; }, get createIdentifierExpression() { return createIdentifierExpression; }, get createUndefinedExpression() { return createUndefinedExpression; }, get createIfStatement() { return createIfStatement; }, get createStringLiteral() { return createStringLiteral; }, get createBooleanLiteral() { return createBooleanLiteral; }, get createTrueLiteral() { return createTrueLiteral; }, get createFalseLiteral() { return createFalseLiteral; }, get createNullLiteral() { return createNullLiteral; }, get createNumberLiteral() { return createNumberLiteral; }, get createMemberExpression() { return createMemberExpression; }, get createMemberLookupExpression() { return createMemberLookupExpression; }, get createThisExpression() { return createThisExpression; }, get createNewExpression() { return createNewExpression; }, get createObjectFreeze() { return createObjectFreeze; }, get createObjectCreate() { return createObjectCreate; }, get createObjectLiteralForDescriptor() { return createObjectLiteralForDescriptor; }, get createDefineProperty() { return createDefineProperty; }, get createObjectLiteral() { return createObjectLiteral; }, get createParenExpression() { return createParenExpression; }, get createPostfixExpression() { return createPostfixExpression; }, get createScript() { return createScript; }, get createPropertyNameAssignment() { return createPropertyNameAssignment; }, get createLiteralPropertyName() { return createLiteralPropertyName; }, get createRestParameter() { return createRestParameter; }, get createReturnStatement() { return createReturnStatement; }, get createSwitchStatement() { return createSwitchStatement; }, get createThrowStatement() { return createThrowStatement; }, get createTryStatement() { return createTryStatement; }, get createUnaryExpression() { return createUnaryExpression; }, get createUseStrictDirective() { return createUseStrictDirective; }, get createVariableDeclarationList() { return createVariableDeclarationList; }, get createVariableDeclaration() { return createVariableDeclaration; }, get createVariableStatement() { return createVariableStatement; }, get createVoid0() { return createVoid0; }, get createWhileStatement() { return createWhileStatement; }, get createWithStatement() { return createWithStatement; }, get createAssignStateStatement() { return createAssignStateStatement; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/ParseTreeVisitor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/ParseTreeVisitor.js"; var ParseTreeVisitor = function() { function ParseTreeVisitor() {} return ($traceurRuntime.createClass)(ParseTreeVisitor, { visitAny: function(tree) { tree !== null && tree.visit(this); }, visit: function(tree) { this.visitAny(tree); }, visitList: function(list) { if (list) { for (var i = 0; i < list.length; i++) { this.visitAny(list[i]); } } }, visitStateMachine: function(tree) { throw Error('State machines should not live outside of the GeneratorTransformer.'); }, visitAnnotation: function(tree) { this.visitAny(tree.name); this.visitAny(tree.args); }, visitAnonBlock: function(tree) { this.visitList(tree.statements); }, visitArgumentList: function(tree) { this.visitList(tree.args); }, visitArrayComprehension: function(tree) { this.visitList(tree.comprehensionList); this.visitAny(tree.expression); }, visitArrayLiteral: function(tree) { this.visitList(tree.elements); }, visitArrayPattern: function(tree) { this.visitList(tree.elements); }, visitArrayType: function(tree) { this.visitAny(tree.elementType); }, visitArrowFunction: function(tree) { this.visitAny(tree.parameterList); this.visitAny(tree.body); }, visitAssignmentElement: function(tree) { this.visitAny(tree.assignment); this.visitAny(tree.initializer); }, visitAwaitExpression: function(tree) { this.visitAny(tree.expression); }, visitBinaryExpression: function(tree) { this.visitAny(tree.left); this.visitAny(tree.right); }, visitBindingElement: function(tree) { this.visitAny(tree.binding); this.visitAny(tree.initializer); }, visitBindingIdentifier: function(tree) {}, visitBlock: function(tree) { this.visitList(tree.statements); }, visitBreakStatement: function(tree) {}, visitCallExpression: function(tree) { this.visitAny(tree.operand); this.visitAny(tree.args); }, visitCallSignature: function(tree) { this.visitAny(tree.typeParameters); this.visitAny(tree.parameterList); this.visitAny(tree.returnType); }, visitCaseClause: function(tree) { this.visitAny(tree.expression); this.visitList(tree.statements); }, visitCatch: function(tree) { this.visitAny(tree.binding); this.visitAny(tree.catchBody); }, visitClassDeclaration: function(tree) { this.visitAny(tree.name); this.visitAny(tree.superClass); this.visitList(tree.elements); this.visitList(tree.annotations); this.visitAny(tree.typeParameters); }, visitClassExpression: function(tree) { this.visitAny(tree.name); this.visitAny(tree.superClass); this.visitList(tree.elements); this.visitList(tree.annotations); this.visitAny(tree.typeParameters); }, visitCommaExpression: function(tree) { this.visitList(tree.expressions); }, visitComprehensionFor: function(tree) { this.visitAny(tree.left); this.visitAny(tree.iterator); }, visitComprehensionIf: function(tree) { this.visitAny(tree.expression); }, visitComputedPropertyName: function(tree) { this.visitAny(tree.expression); }, visitConditionalExpression: function(tree) { this.visitAny(tree.condition); this.visitAny(tree.left); this.visitAny(tree.right); }, visitConstructSignature: function(tree) { this.visitAny(tree.typeParameters); this.visitAny(tree.parameterList); this.visitAny(tree.returnType); }, visitConstructorType: function(tree) { this.visitAny(tree.typeParameters); this.visitAny(tree.parameterList); this.visitAny(tree.returnType); }, visitContinueStatement: function(tree) {}, visitCoverFormals: function(tree) { this.visitList(tree.expressions); }, visitCoverInitializedName: function(tree) { this.visitAny(tree.initializer); }, visitDebuggerStatement: function(tree) {}, visitDefaultClause: function(tree) { this.visitList(tree.statements); }, visitDoWhileStatement: function(tree) { this.visitAny(tree.body); this.visitAny(tree.condition); }, visitEmptyStatement: function(tree) {}, visitExportDeclaration: function(tree) { this.visitAny(tree.declaration); this.visitList(tree.annotations); }, visitExportDefault: function(tree) { this.visitAny(tree.expression); }, visitExportSpecifier: function(tree) {}, visitExportSpecifierSet: function(tree) { this.visitList(tree.specifiers); }, visitExportStar: function(tree) {}, visitExpressionStatement: function(tree) { this.visitAny(tree.expression); }, visitFinally: function(tree) { this.visitAny(tree.block); }, visitForInStatement: function(tree) { this.visitAny(tree.initializer); this.visitAny(tree.collection); this.visitAny(tree.body); }, visitForOfStatement: function(tree) { this.visitAny(tree.initializer); this.visitAny(tree.collection); this.visitAny(tree.body); }, visitForOnStatement: function(tree) { this.visitAny(tree.initializer); this.visitAny(tree.observable); this.visitAny(tree.body); }, visitForStatement: function(tree) { this.visitAny(tree.initializer); this.visitAny(tree.condition); this.visitAny(tree.increment); this.visitAny(tree.body); }, visitFormalParameter: function(tree) { this.visitAny(tree.parameter); this.visitAny(tree.typeAnnotation); this.visitList(tree.annotations); }, visitFormalParameterList: function(tree) { this.visitList(tree.parameters); }, visitForwardDefaultExport: function(tree) {}, visitFunctionBody: function(tree) { this.visitList(tree.statements); }, visitFunctionDeclaration: function(tree) { this.visitAny(tree.name); this.visitAny(tree.parameterList); this.visitAny(tree.typeAnnotation); this.visitList(tree.annotations); this.visitAny(tree.body); }, visitFunctionExpression: function(tree) { this.visitAny(tree.name); this.visitAny(tree.parameterList); this.visitAny(tree.typeAnnotation); this.visitList(tree.annotations); this.visitAny(tree.body); }, visitFunctionType: function(tree) { this.visitAny(tree.typeParameters); this.visitAny(tree.parameterList); this.visitAny(tree.returnType); }, visitGeneratorComprehension: function(tree) { this.visitList(tree.comprehensionList); this.visitAny(tree.expression); }, visitGetAccessor: function(tree) { this.visitAny(tree.name); this.visitAny(tree.typeAnnotation); this.visitList(tree.annotations); this.visitAny(tree.body); }, visitIdentifierExpression: function(tree) {}, visitIfStatement: function(tree) { this.visitAny(tree.condition); this.visitAny(tree.ifClause); this.visitAny(tree.elseClause); }, visitImportedBinding: function(tree) { this.visitAny(tree.binding); }, visitImportClausePair: function(tree) { this.visitAny(tree.first); this.visitAny(tree.second); }, visitImportDeclaration: function(tree) { this.visitAny(tree.importClause); this.visitAny(tree.moduleSpecifier); }, visitImportSpecifier: function(tree) { this.visitAny(tree.binding); }, visitImportSpecifierSet: function(tree) { this.visitList(tree.specifiers); }, visitImportTypeClause: function(tree) { this.visitAny(tree.clause); }, visitIndexSignature: function(tree) { this.visitAny(tree.indexType); this.visitAny(tree.typeAnnotation); }, visitInterfaceDeclaration: function(tree) { this.visitAny(tree.typeParameters); this.visitAny(tree.objectType); }, visitJsxAttribute: function(tree) { this.visitAny(tree.value); }, visitJsxElement: function(tree) { this.visitAny(tree.name); this.visitList(tree.attributes); this.visitList(tree.children); }, visitJsxElementName: function(tree) {}, visitJsxPlaceholder: function(tree) { this.visitAny(tree.expression); }, visitJsxSpreadAttribute: function(tree) { this.visitAny(tree.expression); }, visitJsxText: function(tree) {}, visitLabelledStatement: function(tree) { this.visitAny(tree.statement); }, visitLiteralExpression: function(tree) {}, visitLiteralPropertyName: function(tree) {}, visitMemberExpression: function(tree) { this.visitAny(tree.operand); }, visitMemberLookupExpression: function(tree) { this.visitAny(tree.operand); this.visitAny(tree.memberExpression); }, visitMethod: function(tree) { this.visitAny(tree.name); this.visitAny(tree.parameterList); this.visitAny(tree.typeAnnotation); this.visitList(tree.annotations); this.visitAny(tree.body); this.visitAny(tree.debugName); }, visitMethodSignature: function(tree) { this.visitAny(tree.name); this.visitAny(tree.callSignature); }, visitModule: function(tree) { this.visitList(tree.scriptItemList); }, visitModuleSpecifier: function(tree) {}, visitNameSpaceExport: function(tree) {}, visitNameSpaceImport: function(tree) { this.visitAny(tree.binding); }, visitNamedExport: function(tree) { this.visitAny(tree.exportClause); this.visitAny(tree.moduleSpecifier); }, visitNewExpression: function(tree) { this.visitAny(tree.operand); this.visitAny(tree.args); }, visitObjectLiteral: function(tree) { this.visitList(tree.propertyNameAndValues); }, visitObjectPattern: function(tree) { this.visitList(tree.fields); }, visitObjectPatternField: function(tree) { this.visitAny(tree.name); this.visitAny(tree.element); }, visitObjectType: function(tree) { this.visitList(tree.typeMembers); }, visitParenExpression: function(tree) { this.visitAny(tree.expression); }, visitPostfixExpression: function(tree) { this.visitAny(tree.operand); }, visitPredefinedType: function(tree) {}, visitScript: function(tree) { this.visitList(tree.scriptItemList); }, visitPropertyNameAssignment: function(tree) { this.visitAny(tree.name); this.visitAny(tree.value); }, visitPropertyNameShorthand: function(tree) {}, visitPropertyVariableDeclaration: function(tree) { this.visitAny(tree.name); this.visitAny(tree.typeAnnotation); this.visitList(tree.annotations); this.visitAny(tree.initializer); }, visitPropertySignature: function(tree) { this.visitAny(tree.name); this.visitAny(tree.typeAnnotation); }, visitRestParameter: function(tree) { this.visitAny(tree.identifier); }, visitReturnStatement: function(tree) { this.visitAny(tree.expression); }, visitSetAccessor: function(tree) { this.visitAny(tree.name); this.visitAny(tree.parameterList); this.visitList(tree.annotations); this.visitAny(tree.body); }, visitSpreadExpression: function(tree) { this.visitAny(tree.expression); }, visitSpreadPatternElement: function(tree) { this.visitAny(tree.lvalue); }, visitSuperExpression: function(tree) {}, visitSwitchStatement: function(tree) { this.visitAny(tree.expression); this.visitList(tree.caseClauses); }, visitSyntaxErrorTree: function(tree) {}, visitTemplateLiteralExpression: function(tree) { this.visitAny(tree.operand); this.visitList(tree.elements); }, visitTemplateLiteralPortion: function(tree) {}, visitTemplateSubstitution: function(tree) { this.visitAny(tree.expression); }, visitThisExpression: function(tree) {}, visitThrowStatement: function(tree) { this.visitAny(tree.value); }, visitTryStatement: function(tree) { this.visitAny(tree.body); this.visitAny(tree.catchBlock); this.visitAny(tree.finallyBlock); }, visitTypeAliasDeclaration: function(tree) { this.visitAny(tree.value); }, visitTypeArguments: function(tree) { this.visitList(tree.args); }, visitTypeName: function(tree) { this.visitAny(tree.moduleName); }, visitTypeParameter: function(tree) { this.visitAny(tree.extendsType); }, visitTypeParameters: function(tree) { this.visitList(tree.parameters); }, visitTypeReference: function(tree) { this.visitAny(tree.typeName); this.visitAny(tree.args); }, visitUnaryExpression: function(tree) { this.visitAny(tree.operand); }, visitUnionType: function(tree) { this.visitList(tree.types); }, visitVariableDeclaration: function(tree) { this.visitAny(tree.lvalue); this.visitAny(tree.typeAnnotation); this.visitAny(tree.initializer); }, visitVariableDeclarationList: function(tree) { this.visitList(tree.declarations); }, visitVariableStatement: function(tree) { this.visitAny(tree.declarations); }, visitWhileStatement: function(tree) { this.visitAny(tree.condition); this.visitAny(tree.body); }, visitWithStatement: function(tree) { this.visitAny(tree.expression); this.visitAny(tree.body); }, visitYieldExpression: function(tree) { this.visitAny(tree.expression); } }, {}); }(); return {get ParseTreeVisitor() { return ParseTreeVisitor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindVisitor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/FindVisitor.js"; var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/codegeneration/FindVisitor.js")).ParseTreeVisitor; var FindVisitor = function($__super) { function FindVisitor() { var keepOnGoing = arguments[0]; $traceurRuntime.superConstructor(FindVisitor).call(this); this.found_ = false; this.shouldContinue_ = true; this.keepOnGoing_ = keepOnGoing; } return ($traceurRuntime.createClass)(FindVisitor, { get found() { return this.found_; }, set found(v) { if (v) { this.found_ = true; if (!this.keepOnGoing_) this.shouldContinue_ = false; } }, visitAny: function(tree) { this.shouldContinue_ && tree && tree.visit(this); }, visitList: function(list) { if (list) { for (var i = 0; this.shouldContinue_ && i < list.length; i++) { this.visitAny(list[i]); } } } }, {}, $__super); }(ParseTreeVisitor); return {get FindVisitor() { return FindVisitor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/SyntaxErrorReporter.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/SyntaxErrorReporter.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ErrorReporter.js", "traceur@0.0.112/src/util/SyntaxErrorReporter.js")), ErrorReporter = $__1.ErrorReporter, format = $__1.format; var SyntaxErrorReporter = function($__super) { function SyntaxErrorReporter() { $traceurRuntime.superConstructor(SyntaxErrorReporter).apply(this, arguments); } return ($traceurRuntime.createClass)(SyntaxErrorReporter, {reportMessageInternal: function(location, message) { var s = format(location, message); throw new SyntaxError(s); }}, {}, $__super); }(ErrorReporter); return {get SyntaxErrorReporter() { return SyntaxErrorReporter; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/JsxIdentifierToken.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/JsxIdentifierToken.js"; var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/JsxIdentifierToken.js")).Token; var JSX_IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/JsxIdentifierToken.js")).JSX_IDENTIFIER; var JsxIdentifierToken = function($__super) { function JsxIdentifierToken(location, value) { $traceurRuntime.superConstructor(JsxIdentifierToken).call(this, JSX_IDENTIFIER, location); this.value = value; } return ($traceurRuntime.createClass)(JsxIdentifierToken, {toString: function() { return this.value; }}, {}, $__super); }(Token); return {get JsxIdentifierToken() { return JsxIdentifierToken; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/Keywords.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/Keywords.js"; var keywords = ['break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'else', 'export', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', 'while', 'with', 'enum', 'extends', 'null', 'true', 'false']; var strictKeywords = ['implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield']; var keywordsByName = Object.create(null); var NORMAL_KEYWORD = 1; var STRICT_KEYWORD = 2; keywords.forEach(function(value) { keywordsByName[value] = NORMAL_KEYWORD; }); strictKeywords.forEach(function(value) { keywordsByName[value] = STRICT_KEYWORD; }); function getKeywordType(value) { return keywordsByName[value]; } function isStrictKeyword(value) { return getKeywordType(value) === STRICT_KEYWORD; } return { get NORMAL_KEYWORD() { return NORMAL_KEYWORD; }, get STRICT_KEYWORD() { return STRICT_KEYWORD; }, get getKeywordType() { return getKeywordType; }, get isStrictKeyword() { return isStrictKeyword; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/KeywordToken.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/KeywordToken.js"; var STRICT_KEYWORD = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Keywords.js", "traceur@0.0.112/src/syntax/KeywordToken.js")).STRICT_KEYWORD; var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/KeywordToken.js")).Token; var KeywordToken = function($__super) { function KeywordToken(type, keywordType, location) { $traceurRuntime.superConstructor(KeywordToken).call(this, type, location); this.isStrictKeyword_ = keywordType === STRICT_KEYWORD; } return ($traceurRuntime.createClass)(KeywordToken, { isKeyword: function() { return true; }, isStrictKeyword: function() { return this.isStrictKeyword_; } }, {}, $__super); }(Token); return {get KeywordToken() { return KeywordToken; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/unicode-tables.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/unicode-tables.js"; var idStartTable = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 442, 443, 443, 444, 447, 448, 451, 452, 659, 660, 660, 661, 687, 688, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 883, 884, 884, 886, 887, 890, 890, 891, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1599, 1600, 1600, 1601, 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, 2226, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2417, 2418, 2432, 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, 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, 3653, 3654, 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, 4348, 4349, 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, 5873, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6210, 6211, 6211, 6212, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 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, 7287, 7288, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7467, 7468, 7530, 7531, 7543, 7544, 7544, 7545, 7578, 7579, 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, 8472, 8472, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8494, 8494, 8495, 8500, 8501, 8504, 8505, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8578, 8579, 8580, 8581, 8584, 11264, 11310, 11312, 11358, 11360, 11387, 11388, 11389, 11390, 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, 12293, 12293, 12294, 12294, 12295, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12347, 12347, 12348, 12348, 12353, 12438, 12443, 12444, 12445, 12446, 12447, 12447, 12449, 12538, 12540, 12542, 12543, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 40980, 40981, 40981, 40982, 42124, 42192, 42231, 42232, 42237, 42240, 42507, 42508, 42508, 42512, 42527, 42538, 42539, 42560, 42605, 42606, 42606, 42623, 42623, 42624, 42651, 42652, 42653, 42656, 42725, 42726, 42735, 42775, 42783, 42786, 42863, 42864, 42864, 42865, 42887, 42888, 42888, 42891, 42894, 42896, 42925, 42928, 42929, 42999, 42999, 43000, 43001, 43002, 43002, 43003, 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, 43488, 43492, 43494, 43494, 43495, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43631, 43632, 43632, 43633, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43740, 43741, 43741, 43744, 43754, 43762, 43762, 43763, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43871, 43876, 43877, 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, 65391, 65392, 65392, 65393, 65437, 65438, 65439, 65440, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66352, 66368, 66369, 66369, 66370, 66377, 66378, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66639, 66640, 66717, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68147, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70144, 70161, 70163, 70187, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70493, 70497, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71168, 71215, 71236, 71236, 71296, 71338, 71840, 71903, 71935, 71935, 72384, 72440, 73728, 74648, 74752, 74862, 77824, 78894, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93952, 94020, 94032, 94032, 94099, 94111, 110592, 110593, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 124928, 125124, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 194560, 195101]; var idContinueTable = [183, 183, 768, 879, 903, 903, 1155, 1159, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1552, 1562, 1611, 1631, 1632, 1641, 1648, 1648, 1750, 1756, 1759, 1764, 1767, 1768, 1770, 1773, 1776, 1785, 1809, 1809, 1840, 1866, 1958, 1968, 1984, 1993, 2027, 2035, 2070, 2073, 2075, 2083, 2085, 2087, 2089, 2093, 2137, 2139, 2276, 2306, 2307, 2307, 2362, 2362, 2363, 2363, 2364, 2364, 2366, 2368, 2369, 2376, 2377, 2380, 2381, 2381, 2382, 2383, 2385, 2391, 2402, 2403, 2406, 2415, 2433, 2433, 2434, 2435, 2492, 2492, 2494, 2496, 2497, 2500, 2503, 2504, 2507, 2508, 2509, 2509, 2519, 2519, 2530, 2531, 2534, 2543, 2561, 2562, 2563, 2563, 2620, 2620, 2622, 2624, 2625, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2662, 2671, 2672, 2673, 2677, 2677, 2689, 2690, 2691, 2691, 2748, 2748, 2750, 2752, 2753, 2757, 2759, 2760, 2761, 2761, 2763, 2764, 2765, 2765, 2786, 2787, 2790, 2799, 2817, 2817, 2818, 2819, 2876, 2876, 2878, 2878, 2879, 2879, 2880, 2880, 2881, 2884, 2887, 2888, 2891, 2892, 2893, 2893, 2902, 2902, 2903, 2903, 2914, 2915, 2918, 2927, 2946, 2946, 3006, 3007, 3008, 3008, 3009, 3010, 3014, 3016, 3018, 3020, 3021, 3021, 3031, 3031, 3046, 3055, 3072, 3072, 3073, 3075, 3134, 3136, 3137, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3170, 3171, 3174, 3183, 3201, 3201, 3202, 3203, 3260, 3260, 3262, 3262, 3263, 3263, 3264, 3268, 3270, 3270, 3271, 3272, 3274, 3275, 3276, 3277, 3285, 3286, 3298, 3299, 3302, 3311, 3329, 3329, 3330, 3331, 3390, 3392, 3393, 3396, 3398, 3400, 3402, 3404, 3405, 3405, 3415, 3415, 3426, 3427, 3430, 3439, 3458, 3459, 3530, 3530, 3535, 3537, 3538, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3633, 3633, 3636, 3642, 3655, 3662, 3664, 3673, 3761, 3761, 3764, 3769, 3771, 3772, 3784, 3789, 3792, 3801, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3903, 3953, 3966, 3967, 3967, 3968, 3972, 3974, 3975, 3981, 3991, 3993, 4028, 4038, 4038, 4139, 4140, 4141, 4144, 4145, 4145, 4146, 4151, 4152, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4160, 4169, 4182, 4183, 4184, 4185, 4190, 4192, 4194, 4196, 4199, 4205, 4209, 4212, 4226, 4226, 4227, 4228, 4229, 4230, 4231, 4236, 4237, 4237, 4239, 4239, 4240, 4249, 4250, 4252, 4253, 4253, 4957, 4959, 4969, 4977, 5906, 5908, 5938, 5940, 5970, 5971, 6002, 6003, 6068, 6069, 6070, 6070, 6071, 6077, 6078, 6085, 6086, 6086, 6087, 6088, 6089, 6099, 6109, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6313, 6313, 6432, 6434, 6435, 6438, 6439, 6440, 6441, 6443, 6448, 6449, 6450, 6450, 6451, 6456, 6457, 6459, 6470, 6479, 6576, 6592, 6600, 6601, 6608, 6617, 6618, 6618, 6679, 6680, 6681, 6682, 6683, 6683, 6741, 6741, 6742, 6742, 6743, 6743, 6744, 6750, 6752, 6752, 6753, 6753, 6754, 6754, 6755, 6756, 6757, 6764, 6765, 6770, 6771, 6780, 6783, 6783, 6784, 6793, 6800, 6809, 6832, 6845, 6912, 6915, 6916, 6916, 6964, 6964, 6965, 6965, 6966, 6970, 6971, 6971, 6972, 6972, 6973, 6977, 6978, 6978, 6979, 6980, 6992, 7001, 7019, 7027, 7040, 7041, 7042, 7042, 7073, 7073, 7074, 7077, 7078, 7079, 7080, 7081, 7082, 7082, 7083, 7085, 7088, 7097, 7142, 7142, 7143, 7143, 7144, 7145, 7146, 7148, 7149, 7149, 7150, 7150, 7151, 7153, 7154, 7155, 7204, 7211, 7212, 7219, 7220, 7221, 7222, 7223, 7232, 7241, 7248, 7257, 7376, 7378, 7380, 7392, 7393, 7393, 7394, 7400, 7405, 7405, 7410, 7411, 7412, 7412, 7416, 7417, 7616, 7669, 7676, 7679, 8255, 8256, 8276, 8276, 8400, 8412, 8417, 8417, 8421, 8432, 11503, 11505, 11647, 11647, 11744, 11775, 12330, 12333, 12334, 12335, 12441, 12442, 42528, 42537, 42607, 42607, 42612, 42621, 42655, 42655, 42736, 42737, 43010, 43010, 43014, 43014, 43019, 43019, 43043, 43044, 43045, 43046, 43047, 43047, 43136, 43137, 43188, 43203, 43204, 43204, 43216, 43225, 43232, 43249, 43264, 43273, 43302, 43309, 43335, 43345, 43346, 43347, 43392, 43394, 43395, 43395, 43443, 43443, 43444, 43445, 43446, 43449, 43450, 43451, 43452, 43452, 43453, 43456, 43472, 43481, 43493, 43493, 43504, 43513, 43561, 43566, 43567, 43568, 43569, 43570, 43571, 43572, 43573, 43574, 43587, 43587, 43596, 43596, 43597, 43597, 43600, 43609, 43643, 43643, 43644, 43644, 43645, 43645, 43696, 43696, 43698, 43700, 43703, 43704, 43710, 43711, 43713, 43713, 43755, 43755, 43756, 43757, 43758, 43759, 43765, 43765, 43766, 43766, 44003, 44004, 44005, 44005, 44006, 44007, 44008, 44008, 44009, 44010, 44012, 44012, 44013, 44013, 44016, 44025, 64286, 64286, 65024, 65039, 65056, 65069, 65075, 65076, 65101, 65103, 65296, 65305, 65343, 65343, 66045, 66045, 66272, 66272, 66422, 66426, 66720, 66729, 68097, 68099, 68101, 68102, 68108, 68111, 68152, 68154, 68159, 68159, 68325, 68326, 69632, 69632, 69633, 69633, 69634, 69634, 69688, 69702, 69734, 69743, 69759, 69761, 69762, 69762, 69808, 69810, 69811, 69814, 69815, 69816, 69817, 69818, 69872, 69881, 69888, 69890, 69927, 69931, 69932, 69932, 69933, 69940, 69942, 69951, 70003, 70003, 70016, 70017, 70018, 70018, 70067, 70069, 70070, 70078, 70079, 70080, 70096, 70105, 70188, 70190, 70191, 70193, 70194, 70195, 70196, 70196, 70197, 70197, 70198, 70199, 70367, 70367, 70368, 70370, 70371, 70378, 70384, 70393, 70401, 70401, 70402, 70403, 70460, 70460, 70462, 70463, 70464, 70464, 70465, 70468, 70471, 70472, 70475, 70477, 70487, 70487, 70498, 70499, 70502, 70508, 70512, 70516, 70832, 70834, 70835, 70840, 70841, 70841, 70842, 70842, 70843, 70846, 70847, 70848, 70849, 70849, 70850, 70851, 70864, 70873, 71087, 71089, 71090, 71093, 71096, 71099, 71100, 71101, 71102, 71102, 71103, 71104, 71216, 71218, 71219, 71226, 71227, 71228, 71229, 71229, 71230, 71230, 71231, 71232, 71248, 71257, 71339, 71339, 71340, 71340, 71341, 71341, 71342, 71343, 71344, 71349, 71350, 71350, 71351, 71351, 71360, 71369, 71904, 71913, 92768, 92777, 92912, 92916, 92976, 92982, 93008, 93017, 94033, 94078, 94095, 94098, 113821, 113822, 119141, 119142, 119143, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 120782, 120831, 125136, 125142, 917760, 917999]; return { get idStartTable() { return idStartTable; }, get idContinueTable() { return idContinueTable; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/Scanner.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/Scanner.js"; var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./IdentifierToken.js", "traceur@0.0.112/src/syntax/Scanner.js")).IdentifierToken; var JsxIdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./JsxIdentifierToken.js", "traceur@0.0.112/src/syntax/Scanner.js")).JsxIdentifierToken; var KeywordToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./KeywordToken.js", "traceur@0.0.112/src/syntax/Scanner.js")).KeywordToken; var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LiteralToken.js", "traceur@0.0.112/src/syntax/Scanner.js")).LiteralToken; var SourceRange = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SourceRange.js", "traceur@0.0.112/src/syntax/Scanner.js")).SourceRange; var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/Scanner.js")).Token; var getKeywordType = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Keywords.js", "traceur@0.0.112/src/syntax/Scanner.js")).getKeywordType; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./unicode-tables.js", "traceur@0.0.112/src/syntax/Scanner.js")), idContinueTable = $__10.idContinueTable, idStartTable = $__10.idStartTable; var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/Scanner.js")), AMPERSAND = $__11.AMPERSAND, AMPERSAND_EQUAL = $__11.AMPERSAND_EQUAL, AND = $__11.AND, ARROW = $__11.ARROW, AT = $__11.AT, BANG = $__11.BANG, BAR = $__11.BAR, BAR_EQUAL = $__11.BAR_EQUAL, CARET = $__11.CARET, CARET_EQUAL = $__11.CARET_EQUAL, CLOSE_ANGLE = $__11.CLOSE_ANGLE, CLOSE_CURLY = $__11.CLOSE_CURLY, CLOSE_PAREN = $__11.CLOSE_PAREN, CLOSE_SQUARE = $__11.CLOSE_SQUARE, COLON = $__11.COLON, COMMA = $__11.COMMA, DOT_DOT_DOT = $__11.DOT_DOT_DOT, END_OF_FILE = $__11.END_OF_FILE, EQUAL = $__11.EQUAL, EQUAL_EQUAL = $__11.EQUAL_EQUAL, EQUAL_EQUAL_EQUAL = $__11.EQUAL_EQUAL_EQUAL, ERROR = $__11.ERROR, GREATER_EQUAL = $__11.GREATER_EQUAL, LEFT_SHIFT = $__11.LEFT_SHIFT, LEFT_SHIFT_EQUAL = $__11.LEFT_SHIFT_EQUAL, LESS_EQUAL = $__11.LESS_EQUAL, MINUS = $__11.MINUS, MINUS_EQUAL = $__11.MINUS_EQUAL, MINUS_MINUS = $__11.MINUS_MINUS, NO_SUBSTITUTION_TEMPLATE = $__11.NO_SUBSTITUTION_TEMPLATE, NOT_EQUAL = $__11.NOT_EQUAL, NOT_EQUAL_EQUAL = $__11.NOT_EQUAL_EQUAL, NUMBER = $__11.NUMBER, OPEN_ANGLE = $__11.OPEN_ANGLE, OPEN_CURLY = $__11.OPEN_CURLY, OPEN_PAREN = $__11.OPEN_PAREN, OPEN_SQUARE = $__11.OPEN_SQUARE, OR = $__11.OR, PERCENT = $__11.PERCENT, PERCENT_EQUAL = $__11.PERCENT_EQUAL, PERIOD = $__11.PERIOD, PLUS = $__11.PLUS, PLUS_EQUAL = $__11.PLUS_EQUAL, PLUS_PLUS = $__11.PLUS_PLUS, QUESTION = $__11.QUESTION, REGULAR_EXPRESSION = $__11.REGULAR_EXPRESSION, RIGHT_SHIFT = $__11.RIGHT_SHIFT, RIGHT_SHIFT_EQUAL = $__11.RIGHT_SHIFT_EQUAL, SEMI_COLON = $__11.SEMI_COLON, SLASH = $__11.SLASH, SLASH_EQUAL = $__11.SLASH_EQUAL, STAR = $__11.STAR, STAR_EQUAL = $__11.STAR_EQUAL, STAR_STAR = $__11.STAR_STAR, STAR_STAR_EQUAL = $__11.STAR_STAR_EQUAL, STRING = $__11.STRING, TEMPLATE_HEAD = $__11.TEMPLATE_HEAD, TEMPLATE_MIDDLE = $__11.TEMPLATE_MIDDLE, TEMPLATE_TAIL = $__11.TEMPLATE_TAIL, TILDE = $__11.TILDE, UNSIGNED_RIGHT_SHIFT = $__11.UNSIGNED_RIGHT_SHIFT, UNSIGNED_RIGHT_SHIFT_EQUAL = $__11.UNSIGNED_RIGHT_SHIFT_EQUAL; var isWhitespaceArray = []; for (var i = 0; i < 128; i++) { isWhitespaceArray[i] = i >= 9 && i <= 13 || i === 0x20; } function isWhitespace(code) { if (code < 128) return isWhitespaceArray[code]; switch (code) { case 0xA0: case 0xFEFF: case 0x2028: case 0x2029: return true; } return false; } function isLineTerminator(code) { switch (code) { case 10: case 13: case 0x2028: case 0x2029: return true; } return false; } function isDecimalDigit(code) { return code >= 48 && code <= 57; } var isHexDigitArray = []; for (var i$__0 = 0; i$__0 < 128; i$__0++) { isHexDigitArray[i$__0] = i$__0 >= 48 && i$__0 <= 57 || i$__0 >= 65 && i$__0 <= 70 || i$__0 >= 97 && i$__0 <= 102; } function isHexDigit(code) { return code < 128 && isHexDigitArray[code]; } function isBinaryDigit(code) { return code === 48 || code === 49; } function isOctalDigit(code) { return code >= 48 && code <= 55; } var isIdentifierStartArray = []; for (var i$__1 = 0; i$__1 < 128; i$__1++) { isIdentifierStartArray[i$__1] = i$__1 === 36 || i$__1 >= 65 && i$__1 <= 90 || i$__1 === 95 || i$__1 >= 97 && i$__1 <= 122; } function isIdentifierStart(code) { return code < 128 ? isIdentifierStartArray[code] : inTable(idStartTable, code); } var isIdentifierPartArray = []; for (var i$__2 = 0; i$__2 < 128; i$__2++) { isIdentifierPartArray[i$__2] = isIdentifierStart(i$__2) || isDecimalDigit(i$__2); } function isIdentifierPart(code) { return code < 128 ? isIdentifierPartArray[code] : inTable(idStartTable, code) || inTable(idContinueTable, code) || code === 8204 || code === 8205; } function inTable(table, code) { for (var i = 0; i < table.length; ) { if (code < table[i++]) return false; if (code <= table[i++]) return true; } return false; } function isRegularExpressionChar(code) { switch (code) { case 47: return false; case 91: case 92: return true; } return !isLineTerminator(code); } function isRegularExpressionFirstChar(code) { return isRegularExpressionChar(code) && code !== 42; } var index, input, length, token, lastToken, lookaheadToken, currentCharCode, lineNumberTable, errorReporter, currentParser, options; function init(reporter, file, parser, traceurOptions) { errorReporter = reporter; lineNumberTable = file.lineNumberTable; input = file.contents; length = file.contents.length; setIndex(0); currentParser = parser; options = traceurOptions; } function getLastToken() { return lastToken; } function nextRegularExpressionLiteralToken() { lastToken = nextRegularExpressionLiteralToken2(); token = scanToken(); return lastToken; } function nextTemplateLiteralToken() { var t = nextTemplateLiteralToken2(); token = scanToken(); return t; } function setIndex(i) { index = i; lastToken = null; token = null; lookaheadToken = null; updateCurrentCharCode(); } function getPosition() { return getPositionByOffset(getOffset()); } function getPositionByOffset(offset) { return lineNumberTable.getSourcePosition(offset); } function nextCloseAngle() { switch (token.type) { case GREATER_EQUAL: case RIGHT_SHIFT: case RIGHT_SHIFT_EQUAL: case UNSIGNED_RIGHT_SHIFT: case UNSIGNED_RIGHT_SHIFT_EQUAL: setIndex(index - token.type.length + 1); lastToken = createToken(CLOSE_ANGLE, index); token = scanToken(); return lastToken; } return nextToken(); } function getTokenRange(startOffset) { return lineNumberTable.getSourceRange(startOffset, index); } function getOffset() { return token ? token.location.start.offset : index; } function nextRegularExpressionLiteralToken2() { var beginIndex = index - token.toString().length; if (token.type === SLASH_EQUAL) { skipRegularExpressionBodyContinuation(); } else { skipRegularExpressionBody(beginIndex); } if (currentCharCode !== 47) { reportError('Expected \'/\' in regular expression literal', beginIndex); return new LiteralToken(REGULAR_EXPRESSION, getTokenString(beginIndex), getTokenRange(beginIndex)); } next(); while (isIdentifierPart(currentCharCode)) { next(); } return new LiteralToken(REGULAR_EXPRESSION, getTokenString(beginIndex), getTokenRange(beginIndex)); } function skipRegularExpressionBody(beginIndex) { if (!isRegularExpressionFirstChar(currentCharCode)) { reportError('Expected regular expression first char', beginIndex); return; } skipRegularExpressionBodyContinuation(); } function skipRegularExpressionBodyContinuation() { while (!isAtEnd() && isRegularExpressionChar(currentCharCode)) { if (!skipRegularExpressionChar()) { return; } } } function skipRegularExpressionChar() { switch (currentCharCode) { case 92: return skipRegularExpressionBackslashSequence(); case 91: return skipRegularExpressionClass(); default: next(); return true; } } function skipRegularExpressionBackslashSequence() { var beginIndex = index; next(); if (isLineTerminator(currentCharCode) || isAtEnd()) { reportError('New line not allowed in regular expression literal', beginIndex, index); return false; } next(); return true; } function skipRegularExpressionClass() { var beginIndex = index; next(); while (!isAtEnd() && peekRegularExpressionClassChar()) { if (!skipRegularExpressionClassChar()) { return false; } } if (currentCharCode !== 93) { reportError('\']\' expected', beginIndex, index); return false; } next(); return true; } function peekRegularExpressionClassChar() { return currentCharCode !== 93 && !isLineTerminator(currentCharCode); } function skipRegularExpressionClassChar() { if (currentCharCode === 92) { return skipRegularExpressionBackslashSequence(); } next(); return true; } function skipTemplateCharacter() { while (!isAtEnd()) { switch (currentCharCode) { case 96: return; case 92: skipStringLiteralEscapeSequence(); break; case 36: { var code = input.charCodeAt(index + 1); if (code === 123) return; next(); break; } default: next(); } } } function scanTemplateStart(beginIndex) { if (isAtEnd()) { reportError('Unterminated template literal', beginIndex, index); return lastToken = createToken(END_OF_FILE, beginIndex); } return nextTemplateLiteralTokenShared(NO_SUBSTITUTION_TEMPLATE, TEMPLATE_HEAD); } function nextTemplateLiteralToken2() { if (isAtEnd()) { reportError('Expected \'}\' after expression in template literal', index, index); return createToken(END_OF_FILE, index); } if (token.type !== CLOSE_CURLY) { reportError('Expected \'}\' after expression in template literal', index, index); return createToken(ERROR, index); } return nextTemplateLiteralTokenShared(TEMPLATE_TAIL, TEMPLATE_MIDDLE); } function nextTemplateLiteralTokenShared(endType, middleType) { var beginIndex = index; skipTemplateCharacter(); if (isAtEnd()) { reportError('Unterminated template literal'); return createToken(ERROR, beginIndex); } var value = getTokenString(beginIndex); switch (currentCharCode) { case 96: next(); return lastToken = new LiteralToken(endType, value, getTokenRange(beginIndex - 1)); case 36: next(); next(); return lastToken = new LiteralToken(middleType, value, getTokenRange(beginIndex - 1)); } } function peekJsxToken() { return token || (token = scanJsxToken()); } function nextJsxToken() { lastToken = peekJsxToken(); token = null; return lastToken; } function scanJsxToken() { skipComments(); var beginIndex = index; switch (currentCharCode) { case 34: case 39: return scanJsxStringLiteral(beginIndex, currentCharCode); case 62: next(); return createToken(CLOSE_ANGLE, beginIndex); } if (!isIdentifierStart(currentCharCode)) { return scanToken(); } next(); while (isIdentifierPart(currentCharCode) || currentCharCode === 45) { next(); } var value = input.slice(beginIndex, index); return new JsxIdentifierToken(getTokenRange(beginIndex), value); } function scanJsxStringLiteral(beginIndex, terminator) { next(); while (!isAtEnd() && currentCharCode !== terminator) { next(); } if (currentCharCode !== terminator) { reportError('Unterminated String Literal', beginIndex); } else { next(); } return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex)); } function nextJsxTextToken() { lastToken = token || scanJsxTextToken(); token = null; return lastToken; } function skipJsxText() { while (!isAtEnd() && peekJsxText()) { next(); } } function isJsxTextChar(code) { switch (code) { case 60: case 123: return false; } return true; } function skipJsxText() { while (!isAtEnd() && isJsxTextChar(currentCharCode)) { next(); } } function scanJsxTextToken() { var beginIndex = index; if (isAtEnd()) { return createToken(END_OF_FILE, beginIndex); } skipJsxText(); if (beginIndex === index) { switch (currentCharCode) { case 60: next(); return createToken(OPEN_ANGLE, beginIndex); case 123: next(); return createToken(OPEN_CURLY, beginIndex); } } return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex)); } function nextToken() { var t = peekToken(); token = lookaheadToken || scanToken(); lookaheadToken = null; lastToken = t; return t; } function peekTokenNoLineTerminator() { var t = peekToken(); var start = lastToken.location.end.offset; var end = t.location.start.offset; for (var i = start; i < end; i++) { if (isLineTerminator(input.charCodeAt(i))) { return null; } } return t; } function peek(expectedType) { return peekToken().type === expectedType; } function peekLookahead(expectedType) { return peekTokenLookahead().type === expectedType; } function peekToken() { return token || (token = scanToken()); } function peekType() { return peekToken().type; } function peekLocation() { return peekToken().location; } function peekTokenLookahead() { if (!token) token = scanToken(); if (!lookaheadToken) lookaheadToken = scanToken(); return lookaheadToken; } function skipWhitespace() { while (!isAtEnd() && peekWhitespace()) { next(); } } function peekWhitespace() { return isWhitespace(currentCharCode); } function skipComments() { while (skipComment()) {} } function skipComment() { skipWhitespace(); var code = currentCharCode; if (code === 47) { code = input.charCodeAt(index + 1); switch (code) { case 47: skipSingleLineComment(); return true; case 42: skipMultiLineComment(); return true; } } return false; } function commentCallback(start, index) { if (options.commentCallback) currentParser.handleComment(lineNumberTable.getSourceRange(start, index)); } function skipSingleLineComment() { var start = index; index += 2; while (!isAtEnd() && !isLineTerminator(input.charCodeAt(index++))) {} updateCurrentCharCode(); commentCallback(start, index); } function skipMultiLineComment() { var start = index; var i = input.indexOf('*/', index + 2); if (i !== -1) index = i + 2; else index = length; updateCurrentCharCode(); commentCallback(start, index); } function scanToken() { skipComments(); var beginIndex = index; if (isAtEnd()) return createToken(END_OF_FILE, beginIndex); var code = currentCharCode; next(); switch (code) { case 123: return createToken(OPEN_CURLY, beginIndex); case 125: return createToken(CLOSE_CURLY, beginIndex); case 40: return createToken(OPEN_PAREN, beginIndex); case 41: return createToken(CLOSE_PAREN, beginIndex); case 91: return createToken(OPEN_SQUARE, beginIndex); case 93: return createToken(CLOSE_SQUARE, beginIndex); case 46: switch (currentCharCode) { case 46: if (input.charCodeAt(index + 1) === 46) { next(); next(); return createToken(DOT_DOT_DOT, beginIndex); } break; default: if (isDecimalDigit(currentCharCode)) return scanNumberPostPeriod(beginIndex); } return createToken(PERIOD, beginIndex); case 59: return createToken(SEMI_COLON, beginIndex); case 44: return createToken(COMMA, beginIndex); case 126: return createToken(TILDE, beginIndex); case 63: return createToken(QUESTION, beginIndex); case 58: return createToken(COLON, beginIndex); case 60: switch (currentCharCode) { case 60: next(); if (currentCharCode === 61) { next(); return createToken(LEFT_SHIFT_EQUAL, beginIndex); } return createToken(LEFT_SHIFT, beginIndex); case 61: next(); return createToken(LESS_EQUAL, beginIndex); default: return createToken(OPEN_ANGLE, beginIndex); } case 62: switch (currentCharCode) { case 62: next(); switch (currentCharCode) { case 61: next(); return createToken(RIGHT_SHIFT_EQUAL, beginIndex); case 62: next(); if (currentCharCode === 61) { next(); return createToken(UNSIGNED_RIGHT_SHIFT_EQUAL, beginIndex); } return createToken(UNSIGNED_RIGHT_SHIFT, beginIndex); default: return createToken(RIGHT_SHIFT, beginIndex); } case 61: next(); return createToken(GREATER_EQUAL, beginIndex); default: return createToken(CLOSE_ANGLE, beginIndex); } case 61: if (currentCharCode === 61) { next(); if (currentCharCode === 61) { next(); return createToken(EQUAL_EQUAL_EQUAL, beginIndex); } return createToken(EQUAL_EQUAL, beginIndex); } if (currentCharCode === 62 && options.arrowFunctions) { next(); return createToken(ARROW, beginIndex); } return createToken(EQUAL, beginIndex); case 33: if (currentCharCode === 61) { next(); if (currentCharCode === 61) { next(); return createToken(NOT_EQUAL_EQUAL, beginIndex); } return createToken(NOT_EQUAL, beginIndex); } return createToken(BANG, beginIndex); case 42: if (currentCharCode === 61) { next(); return createToken(STAR_EQUAL, beginIndex); } if (currentCharCode === 42 && options.exponentiation) { next(); if (currentCharCode === 61) { next(); return createToken(STAR_STAR_EQUAL, beginIndex); } return createToken(STAR_STAR, beginIndex); } return createToken(STAR, beginIndex); case 37: if (currentCharCode === 61) { next(); return createToken(PERCENT_EQUAL, beginIndex); } return createToken(PERCENT, beginIndex); case 94: if (currentCharCode === 61) { next(); return createToken(CARET_EQUAL, beginIndex); } return createToken(CARET, beginIndex); case 47: if (currentCharCode === 61) { next(); return createToken(SLASH_EQUAL, beginIndex); } return createToken(SLASH, beginIndex); case 43: switch (currentCharCode) { case 43: next(); return createToken(PLUS_PLUS, beginIndex); case 61: next(); return createToken(PLUS_EQUAL, beginIndex); default: return createToken(PLUS, beginIndex); } case 45: switch (currentCharCode) { case 45: next(); return createToken(MINUS_MINUS, beginIndex); case 61: next(); return createToken(MINUS_EQUAL, beginIndex); default: return createToken(MINUS, beginIndex); } case 38: switch (currentCharCode) { case 38: next(); return createToken(AND, beginIndex); case 61: next(); return createToken(AMPERSAND_EQUAL, beginIndex); default: return createToken(AMPERSAND, beginIndex); } case 124: switch (currentCharCode) { case 124: next(); return createToken(OR, beginIndex); case 61: next(); return createToken(BAR_EQUAL, beginIndex); default: return createToken(BAR, beginIndex); } case 96: return scanTemplateStart(beginIndex); case 64: return createToken(AT, beginIndex); case 48: return scanPostZero(beginIndex); case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: return scanPostDigit(beginIndex); case 34: case 39: return scanStringLiteral(beginIndex, code); default: return scanIdentifierOrKeyword(beginIndex, code); } } function scanNumberPostPeriod(beginIndex) { skipDecimalDigits(); return scanExponentOfNumericLiteral(beginIndex); } function scanPostDigit(beginIndex) { skipDecimalDigits(); return scanFractionalNumericLiteral(beginIndex); } function scanPostZero(beginIndex) { switch (currentCharCode) { case 46: return scanFractionalNumericLiteral(beginIndex); case 88: case 120: next(); if (!isHexDigit(currentCharCode)) { reportError('Hex Integer Literal must contain at least one digit', beginIndex); } skipHexDigits(); return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex)); case 66: case 98: if (!options.numericLiterals) break; next(); if (!isBinaryDigit(currentCharCode)) { reportError('Binary Integer Literal must contain at least one digit', beginIndex); } skipBinaryDigits(); return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex)); case 79: case 111: if (!options.numericLiterals) break; next(); if (!isOctalDigit(currentCharCode)) { reportError('Octal Integer Literal must contain at least one digit', beginIndex); } skipOctalDigits(); return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex)); case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: return scanPostDigit(beginIndex); } return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex)); } function createToken(type, beginIndex) { return new Token(type, getTokenRange(beginIndex)); } function readUnicodeEscapeSequence() { var beginIndex = index; if (currentCharCode === 117) { next(); if (skipHexDigit() && skipHexDigit() && skipHexDigit() && skipHexDigit()) { return parseInt(getTokenString(beginIndex + 1), 16); } } reportError('Invalid unicode escape sequence in identifier', beginIndex - 1); return 0; } function scanIdentifierOrKeyword(beginIndex, code) { var escapedCharCodes; if (code === 92) { code = readUnicodeEscapeSequence(); escapedCharCodes = [code]; } if (!isIdentifierStart(code)) { reportError(("Character code '" + code + "' is not a valid identifier start char"), beginIndex); return createToken(ERROR, beginIndex); } for (; ; ) { code = currentCharCode; if (isIdentifierPart(code)) { next(); } else if (code === 92) { next(); code = readUnicodeEscapeSequence(); if (!escapedCharCodes) escapedCharCodes = []; escapedCharCodes.push(code); if (!isIdentifierPart(code)) return createToken(ERROR, beginIndex); } else { break; } } var value = input.slice(beginIndex, index); var keywordType = getKeywordType(value); if (keywordType) return new KeywordToken(value, keywordType, getTokenRange(beginIndex)); if (escapedCharCodes) { var i = 0; value = value.replace(/\\u..../g, function(s) { return String.fromCharCode(escapedCharCodes[i++]); }); } return new IdentifierToken(getTokenRange(beginIndex), value); } function scanStringLiteral(beginIndex, terminator) { while (peekStringLiteralChar(terminator)) { if (!skipStringLiteralChar()) { return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex)); } } if (currentCharCode !== terminator) { reportError('Unterminated String Literal', beginIndex); } else { next(); } return new LiteralToken(STRING, getTokenString(beginIndex), getTokenRange(beginIndex)); } function getTokenString(beginIndex) { return input.substring(beginIndex, index); } function peekStringLiteralChar(terminator) { return !isAtEnd() && currentCharCode !== terminator && !isLineTerminator(currentCharCode); } function skipStringLiteralChar() { if (currentCharCode === 92) { return skipStringLiteralEscapeSequence(); } next(); return true; } function skipStringLiteralEscapeSequence() { next(); if (isAtEnd()) { reportError('Unterminated string literal escape sequence'); return false; } if (isLineTerminator(currentCharCode)) { skipLineTerminator(); return true; } var code = currentCharCode; next(); switch (code) { case 39: case 34: case 92: case 98: case 102: case 110: case 114: case 116: case 118: case 48: return true; case 120: return skipHexDigit() && skipHexDigit(); case 117: return skipUnicodeEscapeSequence(); default: return true; } } function skipUnicodeEscapeSequence() { if (currentCharCode === 123 && options.unicodeEscapeSequences) { next(); var beginIndex = index; if (!isHexDigit(currentCharCode)) { reportError('Hex digit expected', beginIndex); return false; } skipHexDigits(); if (currentCharCode !== 125) { reportError('Hex digit expected', beginIndex); return false; } var codePoint = getTokenString(beginIndex, index); if (parseInt(codePoint, 16) > 0x10FFFF) { reportError('The code point in a Unicode escape sequence cannot exceed 10FFFF', beginIndex); return false; } next(); return true; } return skipHexDigit() && skipHexDigit() && skipHexDigit() && skipHexDigit(); } function skipHexDigit() { if (!isHexDigit(currentCharCode)) { reportError('Hex digit expected'); return false; } next(); return true; } function skipLineTerminator() { var first = currentCharCode; next(); if (first === 13 && currentCharCode === 10) { next(); } } function scanFractionalNumericLiteral(beginIndex) { if (currentCharCode === 46) { next(); skipDecimalDigits(); } return scanExponentOfNumericLiteral(beginIndex); } function scanExponentOfNumericLiteral(beginIndex) { switch (currentCharCode) { case 101: case 69: next(); switch (currentCharCode) { case 43: case 45: next(); break; } if (!isDecimalDigit(currentCharCode)) { reportError('Exponent part must contain at least one digit', beginIndex); } skipDecimalDigits(); break; default: break; } return new LiteralToken(NUMBER, getTokenString(beginIndex), getTokenRange(beginIndex)); } function skipDecimalDigits() { while (isDecimalDigit(currentCharCode)) { next(); } } function skipHexDigits() { while (isHexDigit(currentCharCode)) { next(); } } function skipBinaryDigits() { while (isBinaryDigit(currentCharCode)) { next(); } } function skipOctalDigits() { while (isOctalDigit(currentCharCode)) { next(); } } function isAtEnd() { return index === length; } function next() { index++; updateCurrentCharCode(); } function updateCurrentCharCode() { currentCharCode = input.charCodeAt(index); } function reportError(message) { var startIndex = arguments[1] !== (void 0) ? arguments[1] : index; var endIndex = arguments[2] !== (void 0) ? arguments[2] : index; var start = getPositionByOffset(startIndex); var end = getPositionByOffset(endIndex); var location = new SourceRange(start, end); errorReporter.reportError(location, message); } return { get isWhitespace() { return isWhitespace; }, get isLineTerminator() { return isLineTerminator; }, get isIdentifierPart() { return isIdentifierPart; }, get init() { return init; }, get getLastToken() { return getLastToken; }, get nextRegularExpressionLiteralToken() { return nextRegularExpressionLiteralToken; }, get nextTemplateLiteralToken() { return nextTemplateLiteralToken; }, get setIndex() { return setIndex; }, get getPosition() { return getPosition; }, get nextCloseAngle() { return nextCloseAngle; }, get peekJsxToken() { return peekJsxToken; }, get nextJsxToken() { return nextJsxToken; }, get nextJsxTextToken() { return nextJsxTextToken; }, get nextToken() { return nextToken; }, get peekTokenNoLineTerminator() { return peekTokenNoLineTerminator; }, get peek() { return peek; }, get peekLookahead() { return peekLookahead; }, get peekToken() { return peekToken; }, get peekType() { return peekType; }, get peekLocation() { return peekLocation; }, get peekTokenLookahead() { return peekTokenLookahead; }, get isAtEnd() { return isAtEnd; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ConstructorValidator.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/ConstructorValidator.js"; var SUPER_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/ConstructorValidator.js")).SUPER_EXPRESSION; var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/FindVisitor.js", "traceur@0.0.112/src/semantics/ConstructorValidator.js")).FindVisitor; var ConstructorValidator = function($__super) { function ConstructorValidator(reporter) { $traceurRuntime.superConstructor(ConstructorValidator).call(this); this.reporter_ = reporter; this.hasError = false; } return ($traceurRuntime.createClass)(ConstructorValidator, { visitClassExpression: function(tree) { this.visitAny(tree.superClass); }, visitClassDeclaration: function(tree) { this.visitAny(tree.superClass); }, visitThisExpression: function(tree) { this.reportError_(tree.location, 'this'); }, visitCallExpression: function(tree) { if (tree.operand.type === SUPER_EXPRESSION) { this.visitAny(tree.args); this.found = true; return; } $traceurRuntime.superGet(this, ConstructorValidator.prototype, "visitCallExpression").call(this, tree); }, visitSuperExpression: function(tree) { this.reportError_(tree.location, 'super property'); }, reportError_: function(location, kind) { this.reporter_.reportError(location, ("'" + kind + "' is not allowed before super()")); this.hasError = true; this.found = true; } }, {}, $__super); }(FindVisitor); function validateConstructor(tree, reporter) { var visitor = new ConstructorValidator(reporter); visitor.visitAny(tree); if (visitor.hasError) return false; if (visitor.found) return true; reporter.reportError(tree.location, 'Derived constructor must call super()'); return false; } return {get validateConstructor() { return validateConstructor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/staticsemantics/validateParameters.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/staticsemantics/validateParameters.js"; var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/staticsemantics/validateParameters.js")).ParseTreeVisitor; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/staticsemantics/validateParameters.js")).StringSet; var isStrictKeyword = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Keywords.js", "traceur@0.0.112/src/staticsemantics/validateParameters.js")).isStrictKeyword; var ParameterValidationVisitor = function($__super) { function ParameterValidationVisitor(isStrict, reporter) { $traceurRuntime.superConstructor(ParameterValidationVisitor).call(this); this.reporter_ = reporter; this.names_ = new StringSet(); this.errors_ = []; this.reportStrictKeywords_ = isStrict; this.reportDuplicates_ = isStrict; } return ($traceurRuntime.createClass)(ParameterValidationVisitor, { visitBindingIdentifier: function(tree) { var name = tree.identifierToken.toString(); if (this.reportStrictKeywords_ && (isStrictKeyword(name) || name === 'eval' || name === 'arguments')) { this.reporter_.reportError(tree.location, (name + " is a reserved identifier")); } if (this.names_.has(name)) { this.maybeReportDuplicateError_(name, tree.location); } this.names_.add(name); }, visitBindingElement: function(tree) { if (tree.initializer !== null) { this.reportEarlierErrors_(); } this.visitAny(tree.binding); }, visitRestParameter: function(tree) { this.reportEarlierErrors_(); this.visitAny(tree.identifier); }, visitFormalParameter: function(tree) { this.visitAny(tree.parameter); }, visitArrayPattern: function(tree) { this.reportEarlierErrors_(); $traceurRuntime.superGet(this, ParameterValidationVisitor.prototype, "visitArrayPattern").call(this, tree); }, visitObjectPattern: function(tree) { this.reportEarlierErrors_(); $traceurRuntime.superGet(this, ParameterValidationVisitor.prototype, "visitObjectPattern").call(this, tree); }, reportDuplicateError_: function(name, location) { this.reporter_.reportError(location, ("Duplicate parameter name " + name)); }, maybeReportDuplicateError_: function(name, location) { if (this.reportDuplicates_) { this.reportDuplicateError_(name, location); } else { this.errors_.push(name, location); } }, reportEarlierErrors_: function() { if (!this.reportDuplicates_) { this.reportDuplicates_ = true; for (var i = 0; i < this.errors_.length; i += 2) { var name = this.errors_[i]; var location = this.errors_[i + 1]; this.reportDuplicateError_(name, location); } } } }, {}, $__super); }(ParseTreeVisitor); var $__default = function(tree, isStrict, reporter) { new ParameterValidationVisitor(isStrict, reporter).visitAny(tree); }; return {get default() { return $__default; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/staticsemantics/isValidSimpleAssignmentTarget.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/staticsemantics/isValidSimpleAssignmentTarget.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/staticsemantics/isValidSimpleAssignmentTarget.js")), IDENTIFIER_EXPRESSION = $__1.IDENTIFIER_EXPRESSION, MEMBER_EXPRESSION = $__1.MEMBER_EXPRESSION, MEMBER_LOOKUP_EXPRESSION = $__1.MEMBER_LOOKUP_EXPRESSION, PAREN_EXPRESSION = $__1.PAREN_EXPRESSION; function isValidSimpleAssignmentTarget(tree, isStrict) { switch (tree.type) { case IDENTIFIER_EXPRESSION: { if (!isStrict) return true; var value = tree.identifierToken.value; return value !== 'arguments' && value !== 'eval'; } case PAREN_EXPRESSION: return isValidSimpleAssignmentTarget(tree.expression, isStrict); case MEMBER_EXPRESSION: case MEMBER_LOOKUP_EXPRESSION: return true; default: return false; } } return {get default() { return isValidSimpleAssignmentTarget; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/Parser.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/Parser.js"; var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/FindVisitor.js", "traceur@0.0.112/src/syntax/Parser.js")).FindVisitor; var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./IdentifierToken.js", "traceur@0.0.112/src/syntax/Parser.js")).IdentifierToken; var $__25 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./trees/ParseTreeType.js", "traceur@0.0.112/src/syntax/Parser.js")), ARRAY_LITERAL = $__25.ARRAY_LITERAL, BINDING_IDENTIFIER = $__25.BINDING_IDENTIFIER, CALL_EXPRESSION = $__25.CALL_EXPRESSION, COMPUTED_PROPERTY_NAME = $__25.COMPUTED_PROPERTY_NAME, COVER_FORMALS = $__25.COVER_FORMALS, FORMAL_PARAMETER_LIST = $__25.FORMAL_PARAMETER_LIST, IDENTIFIER_EXPRESSION = $__25.IDENTIFIER_EXPRESSION, LITERAL_PROPERTY_NAME = $__25.LITERAL_PROPERTY_NAME, OBJECT_LITERAL = $__25.OBJECT_LITERAL, REST_PARAMETER = $__25.REST_PARAMETER, SYNTAX_ERROR_TREE = $__25.SYNTAX_ERROR_TREE; var Options = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Options.js", "traceur@0.0.112/src/syntax/Parser.js")).Options; var $__27 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PredefinedName.js", "traceur@0.0.112/src/syntax/Parser.js")), AS = $__27.AS, ASYNC = $__27.ASYNC, ASYNC_STAR = $__27.ASYNC_STAR, AWAIT = $__27.AWAIT, CONSTRUCTOR = $__27.CONSTRUCTOR, FROM = $__27.FROM, GET = $__27.GET, OF = $__27.OF, ON = $__27.ON, SET = $__27.SET, TYPE = $__27.TYPE; var SyntaxErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SyntaxErrorReporter.js", "traceur@0.0.112/src/syntax/Parser.js")).SyntaxErrorReporter; var $__29 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Scanner.js", "traceur@0.0.112/src/syntax/Parser.js")), getLastToken = $__29.getLastToken, getPosition = $__29.getPosition, initScanner = $__29.init, isAtEnd = $__29.isAtEnd, nextCloseAngle = $__29.nextCloseAngle, nextJsxTextToken = $__29.nextJsxTextToken, nextJsxToken = $__29.nextJsxToken, nextRegularExpressionLiteralToken = $__29.nextRegularExpressionLiteralToken, nextTemplateLiteralToken = $__29.nextTemplateLiteralToken, nextToken = $__29.nextToken, peek = $__29.peek, peekJsxToken = $__29.peekJsxToken, peekLocation = $__29.peekLocation, peekLookahead = $__29.peekLookahead, peekToken = $__29.peekToken, peekTokenLookahead = $__29.peekTokenLookahead, peekTokenNoLineTerminator = $__29.peekTokenNoLineTerminator, peekType = $__29.peekType, resetScanner = $__29.setIndex; var SourceRange = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SourceRange.js", "traceur@0.0.112/src/syntax/Parser.js")).SourceRange; var $__31 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Token.js", "traceur@0.0.112/src/syntax/Parser.js")), Token = $__31.Token, isAssignmentOperator = $__31.isAssignmentOperator; var getKeywordType = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Keywords.js", "traceur@0.0.112/src/syntax/Parser.js")).getKeywordType; var validateConstructor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/ConstructorValidator.js", "traceur@0.0.112/src/syntax/Parser.js")).validateConstructor; var validateParameters = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/validateParameters.js", "traceur@0.0.112/src/syntax/Parser.js")).default; var isValidSimpleAssignmentTarget = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/isValidSimpleAssignmentTarget.js", "traceur@0.0.112/src/syntax/Parser.js")).default; var $__36 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/Parser.js")), AMPERSAND = $__36.AMPERSAND, AND = $__36.AND, ARROW = $__36.ARROW, AT = $__36.AT, BANG = $__36.BANG, BAR = $__36.BAR, BREAK = $__36.BREAK, CARET = $__36.CARET, CASE = $__36.CASE, CATCH = $__36.CATCH, CLASS = $__36.CLASS, CLOSE_ANGLE = $__36.CLOSE_ANGLE, CLOSE_CURLY = $__36.CLOSE_CURLY, CLOSE_PAREN = $__36.CLOSE_PAREN, CLOSE_SQUARE = $__36.CLOSE_SQUARE, COLON = $__36.COLON, COMMA = $__36.COMMA, CONST = $__36.CONST, CONTINUE = $__36.CONTINUE, DEBUGGER = $__36.DEBUGGER, DEFAULT = $__36.DEFAULT, DELETE = $__36.DELETE, DO = $__36.DO, DOT_DOT_DOT = $__36.DOT_DOT_DOT, ELSE = $__36.ELSE, END_OF_FILE = $__36.END_OF_FILE, EQUAL = $__36.EQUAL, EQUAL_EQUAL = $__36.EQUAL_EQUAL, EQUAL_EQUAL_EQUAL = $__36.EQUAL_EQUAL_EQUAL, ERROR = $__36.ERROR, EXPORT = $__36.EXPORT, EXTENDS = $__36.EXTENDS, FALSE = $__36.FALSE, FINALLY = $__36.FINALLY, FOR = $__36.FOR, FUNCTION = $__36.FUNCTION, GREATER_EQUAL = $__36.GREATER_EQUAL, IDENTIFIER = $__36.IDENTIFIER, IF = $__36.IF, IMPLEMENTS = $__36.IMPLEMENTS, IMPORT = $__36.IMPORT, IN = $__36.IN, INSTANCEOF = $__36.INSTANCEOF, INTERFACE = $__36.INTERFACE, JSX_IDENTIFIER = $__36.JSX_IDENTIFIER, LEFT_SHIFT = $__36.LEFT_SHIFT, LESS_EQUAL = $__36.LESS_EQUAL, LET = $__36.LET, MINUS = $__36.MINUS, MINUS_MINUS = $__36.MINUS_MINUS, NEW = $__36.NEW, NO_SUBSTITUTION_TEMPLATE = $__36.NO_SUBSTITUTION_TEMPLATE, NOT_EQUAL = $__36.NOT_EQUAL, NOT_EQUAL_EQUAL = $__36.NOT_EQUAL_EQUAL, NULL = $__36.NULL, NUMBER = $__36.NUMBER, OPEN_ANGLE = $__36.OPEN_ANGLE, OPEN_CURLY = $__36.OPEN_CURLY, OPEN_PAREN = $__36.OPEN_PAREN, OPEN_SQUARE = $__36.OPEN_SQUARE, OR = $__36.OR, PACKAGE = $__36.PACKAGE, PERCENT = $__36.PERCENT, PERIOD = $__36.PERIOD, PLUS = $__36.PLUS, PLUS_PLUS = $__36.PLUS_PLUS, PRIVATE = $__36.PRIVATE, PROTECTED = $__36.PROTECTED, PUBLIC = $__36.PUBLIC, QUESTION = $__36.QUESTION, RETURN = $__36.RETURN, RIGHT_SHIFT = $__36.RIGHT_SHIFT, SEMI_COLON = $__36.SEMI_COLON, SLASH = $__36.SLASH, SLASH_EQUAL = $__36.SLASH_EQUAL, STAR = $__36.STAR, STAR_STAR = $__36.STAR_STAR, STATIC = $__36.STATIC, STRING = $__36.STRING, SUPER = $__36.SUPER, SWITCH = $__36.SWITCH, TEMPLATE_HEAD = $__36.TEMPLATE_HEAD, TEMPLATE_TAIL = $__36.TEMPLATE_TAIL, THIS = $__36.THIS, THROW = $__36.THROW, TILDE = $__36.TILDE, TRUE = $__36.TRUE, TRY = $__36.TRY, TYPEOF = $__36.TYPEOF, UNSIGNED_RIGHT_SHIFT = $__36.UNSIGNED_RIGHT_SHIFT, VAR = $__36.VAR, VOID = $__36.VOID, WHILE = $__36.WHILE, WITH = $__36.WITH, YIELD = $__36.YIELD; var $__37 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./trees/ParseTrees.js", "traceur@0.0.112/src/syntax/Parser.js")), ArgumentList = $__37.ArgumentList, ArrayComprehension = $__37.ArrayComprehension, ArrayLiteral = $__37.ArrayLiteral, ArrayPattern = $__37.ArrayPattern, ArrayType = $__37.ArrayType, ArrowFunction = $__37.ArrowFunction, AssignmentElement = $__37.AssignmentElement, AwaitExpression = $__37.AwaitExpression, BinaryExpression = $__37.BinaryExpression, BindingElement = $__37.BindingElement, BindingIdentifier = $__37.BindingIdentifier, Block = $__37.Block, BreakStatement = $__37.BreakStatement, CallExpression = $__37.CallExpression, CallSignature = $__37.CallSignature, CaseClause = $__37.CaseClause, Catch = $__37.Catch, ClassDeclaration = $__37.ClassDeclaration, ClassExpression = $__37.ClassExpression, CommaExpression = $__37.CommaExpression, ComprehensionFor = $__37.ComprehensionFor, ComprehensionIf = $__37.ComprehensionIf, ComputedPropertyName = $__37.ComputedPropertyName, ConditionalExpression = $__37.ConditionalExpression, ConstructSignature = $__37.ConstructSignature, ConstructorType = $__37.ConstructorType, ContinueStatement = $__37.ContinueStatement, CoverFormals = $__37.CoverFormals, CoverInitializedName = $__37.CoverInitializedName, DebuggerStatement = $__37.DebuggerStatement, Annotation = $__37.Annotation, DefaultClause = $__37.DefaultClause, DoWhileStatement = $__37.DoWhileStatement, EmptyStatement = $__37.EmptyStatement, ExportDeclaration = $__37.ExportDeclaration, ExportDefault = $__37.ExportDefault, ExportSpecifier = $__37.ExportSpecifier, ExportSpecifierSet = $__37.ExportSpecifierSet, ExportStar = $__37.ExportStar, ExpressionStatement = $__37.ExpressionStatement, Finally = $__37.Finally, ForInStatement = $__37.ForInStatement, ForOfStatement = $__37.ForOfStatement, ForOnStatement = $__37.ForOnStatement, ForStatement = $__37.ForStatement, FormalParameter = $__37.FormalParameter, FormalParameterList = $__37.FormalParameterList, ForwardDefaultExport = $__37.ForwardDefaultExport, FunctionBody = $__37.FunctionBody, FunctionDeclaration = $__37.FunctionDeclaration, FunctionExpression = $__37.FunctionExpression, FunctionType = $__37.FunctionType, GeneratorComprehension = $__37.GeneratorComprehension, GetAccessor = $__37.GetAccessor, IdentifierExpression = $__37.IdentifierExpression, IfStatement = $__37.IfStatement, ImportClausePair = $__37.ImportClausePair, ImportDeclaration = $__37.ImportDeclaration, ImportSpecifier = $__37.ImportSpecifier, ImportSpecifierSet = $__37.ImportSpecifierSet, ImportedBinding = $__37.ImportedBinding, ImportTypeClause = $__37.ImportTypeClause, IndexSignature = $__37.IndexSignature, InterfaceDeclaration = $__37.InterfaceDeclaration, JsxAttribute = $__37.JsxAttribute, JsxElement = $__37.JsxElement, JsxElementName = $__37.JsxElementName, JsxPlaceholder = $__37.JsxPlaceholder, JsxSpreadAttribute = $__37.JsxSpreadAttribute, JsxText = $__37.JsxText, LabelledStatement = $__37.LabelledStatement, LiteralExpression = $__37.LiteralExpression, LiteralPropertyName = $__37.LiteralPropertyName, MemberExpression = $__37.MemberExpression, MemberLookupExpression = $__37.MemberLookupExpression, Method = $__37.Method, MethodSignature = $__37.MethodSignature, Module = $__37.Module, ModuleSpecifier = $__37.ModuleSpecifier, NameSpaceExport = $__37.NameSpaceExport, NameSpaceImport = $__37.NameSpaceImport, NamedExport = $__37.NamedExport, NewExpression = $__37.NewExpression, ObjectLiteral = $__37.ObjectLiteral, ObjectPattern = $__37.ObjectPattern, ObjectPatternField = $__37.ObjectPatternField, ObjectType = $__37.ObjectType, ParenExpression = $__37.ParenExpression, PostfixExpression = $__37.PostfixExpression, PredefinedType = $__37.PredefinedType, PropertyNameAssignment = $__37.PropertyNameAssignment, PropertyNameShorthand = $__37.PropertyNameShorthand, PropertySignature = $__37.PropertySignature, PropertyVariableDeclaration = $__37.PropertyVariableDeclaration, RestParameter = $__37.RestParameter, ReturnStatement = $__37.ReturnStatement, Script = $__37.Script, SetAccessor = $__37.SetAccessor, SpreadExpression = $__37.SpreadExpression, SpreadPatternElement = $__37.SpreadPatternElement, SuperExpression = $__37.SuperExpression, SwitchStatement = $__37.SwitchStatement, SyntaxErrorTree = $__37.SyntaxErrorTree, TemplateLiteralExpression = $__37.TemplateLiteralExpression, TemplateLiteralPortion = $__37.TemplateLiteralPortion, TemplateSubstitution = $__37.TemplateSubstitution, ThisExpression = $__37.ThisExpression, ThrowStatement = $__37.ThrowStatement, TryStatement = $__37.TryStatement, TypeAliasDeclaration = $__37.TypeAliasDeclaration, TypeArguments = $__37.TypeArguments, TypeName = $__37.TypeName, TypeParameter = $__37.TypeParameter, TypeParameters = $__37.TypeParameters, TypeReference = $__37.TypeReference, UnaryExpression = $__37.UnaryExpression, UnionType = $__37.UnionType, VariableDeclaration = $__37.VariableDeclaration, VariableDeclarationList = $__37.VariableDeclarationList, VariableStatement = $__37.VariableStatement, WhileStatement = $__37.WhileStatement, WithStatement = $__37.WithStatement, YieldExpression = $__37.YieldExpression; var ALLOW_IN = true; var NO_IN = false; var INITIALIZER_REQUIRED = true; var INITIALIZER_OPTIONAL = false; var ValidateObjectLiteral = function($__super) { function ValidateObjectLiteral() { $traceurRuntime.superConstructor(ValidateObjectLiteral).call(this); this.errorToken = null; } return ($traceurRuntime.createClass)(ValidateObjectLiteral, {visitCoverInitializedName: function(tree) { this.errorToken = tree.equalToken; this.found = true; }}, {}, $__super); }(FindVisitor); function containsInitializer(declarations) { return declarations.some(function(v) { return v.initializer; }); } var FUNCTION_STATE_SCRIPT = 1; var FUNCTION_STATE_MODULE = 1 << 1; var FUNCTION_STATE_FUNCTION = 1 << 2; var FUNCTION_STATE_ARROW = 1 << 3; var FUNCTION_STATE_METHOD = 1 << 4; var FUNCTION_STATE_DERIVED_CONSTRUCTOR = 1 << 5; var FUNCTION_STATE_GENERATOR = 1 << 6; var FUNCTION_STATE_ASYNC = 1 << 7; var FUNCTION_STATE_LENIENT = FUNCTION_STATE_METHOD | FUNCTION_STATE_GENERATOR | FUNCTION_STATE_ASYNC | FUNCTION_STATE_DERIVED_CONSTRUCTOR; var FunctionState = function() { function FunctionState(outer, kind) { this.outer = outer; this.kind = kind; } return ($traceurRuntime.createClass)(FunctionState, { isTopMost: function() { return this.kind & (FUNCTION_STATE_SCRIPT | FUNCTION_STATE_MODULE); }, isMethod: function() { return this.kind & FUNCTION_STATE_METHOD; }, isDerivedConstructor: function() { return this.kind & FUNCTION_STATE_DERIVED_CONSTRUCTOR; }, isArrowFunction: function() { return this.kind & FUNCTION_STATE_ARROW; }, isGenerator: function() { return this.kind & FUNCTION_STATE_GENERATOR; }, isAsyncFunction: function() { return this.kind & FUNCTION_STATE_ASYNC; }, isAsyncGenerator: function() { return this.isGenerator() && this.isAsyncFunction(); } }, {}); }(); var Parser = function() { function Parser(file) { var errorReporter = arguments[1] !== (void 0) ? arguments[1] : new SyntaxErrorReporter(); var options = arguments[2] !== (void 0) ? arguments[2] : new Options(); this.errorReporter_ = errorReporter; initScanner(errorReporter, file, this, options); this.options_ = options; this.coverInitializedNameCount_ = 0; this.strictMode_ = false; this.annotations_ = []; this.functionState_ = null; } return ($traceurRuntime.createClass)(Parser, { get allowYield_() { return this.functionState_.isGenerator(); }, get allowAwait_() { return this.functionState_.isAsyncFunction(); }, get allowForOn_() { return this.functionState_.isAsyncFunction(); }, parseScript: function() { this.strictMode_ = false; var start = this.getTreeStartLocation_(); var fs = this.pushFunctionState_(FUNCTION_STATE_SCRIPT); var scriptItemList = this.parseStatementList_(true); this.eat_(END_OF_FILE); this.popFunctionState_(fs); return new Script(this.getTreeLocation_(start), scriptItemList, null); }, pushFunctionState_: function(kind) { return this.functionState_ = new FunctionState(this.functionState_, kind); }, popFunctionState_: function(fs) { if (fs != this.functionState_) { throw new Error('Internal error'); } this.functionState_ = this.functionState_.outer; }, parseStatementList_: function(checkUseStrictDirective) { var result = []; var type; while ((type = peekType()) !== CLOSE_CURLY && type !== END_OF_FILE) { var statement = this.parseStatementListItem_(type); if (checkUseStrictDirective) { if (!statement.isDirectivePrologue()) { checkUseStrictDirective = false; } else if (statement.isUseStrictDirective()) { this.strictMode_ = true; checkUseStrictDirective = false; } } result.push(statement); } return result; }, parseStatementListItem_: function(type) { switch (type) { case LET: case CONST: if (this.options_.blockBinding) { return this.parseVariableStatement_(); } break; case CLASS: if (this.options_.classes) { return this.parseClassDeclaration_(); } break; case FUNCTION: return this.parseFunctionDeclaration_(); case IDENTIFIER: if (this.options_.types && this.peekPredefinedString_(TYPE) && peekLookahead(IDENTIFIER)) { return this.parseTypeAliasDeclaration_(); } break; } return this.parseStatementWithType_(type); }, parseModule: function() { var start = this.getTreeStartLocation_(); var fs = this.pushFunctionState_(FUNCTION_STATE_MODULE); var scriptItemList = this.parseModuleItemList_(); this.eat_(END_OF_FILE); this.popFunctionState_(fs); return new Module(this.getTreeLocation_(start), scriptItemList, null); }, parseModuleItemList_: function() { this.strictMode_ = true; var result = []; var type; while ((type = peekType()) !== END_OF_FILE) { var statement = this.parseModuleItem_(type); result.push(statement); } return result; }, parseModuleItem_: function(type) { switch (type) { case IMPORT: return this.parseImportDeclaration_(); case EXPORT: return this.parseExportDeclaration_(); case AT: if (this.options_.annotations) return this.parseAnnotatedDeclarations_(true); break; } return this.parseStatementListItem_(type); }, parseModuleSpecifier_: function() { var start = this.getTreeStartLocation_(); var token = this.eat_(STRING); return new ModuleSpecifier(this.getTreeLocation_(start), token); }, parseNameSpaceImport_: function() { var start = this.getTreeStartLocation_(); this.eat_(STAR); this.eatId_(AS); var binding = this.parseImportedBinding_(); return new NameSpaceImport(this.getTreeLocation_(start), binding); }, parseImportDeclaration_: function() { var start = this.getTreeStartLocation_(); this.eat_(IMPORT); var importClause = null; if (!peek(STRING)) { importClause = this.parseImportClause_(true, this.options_.types); this.eatId_(FROM); } var moduleSpecifier = this.parseModuleSpecifier_(); this.eatPossibleImplicitSemiColon_(); return new ImportDeclaration(this.getTreeLocation_(start), importClause, moduleSpecifier); }, parseImportClause_: function(allowImportedDefaultBinding, allowType) { switch (peekType()) { case STAR: return this.parseNameSpaceImport_(); case OPEN_CURLY: return this.parseImportSpecifierSet_(); case IDENTIFIER: if (allowType && this.peekPredefinedString_(TYPE)) { var start = this.getTreeStartLocation_(); var t = peekTokenLookahead(); if (t.type === OPEN_CURLY || t.type === IDENTIFIER && t.value !== FROM) { this.eatId_(TYPE); var clause = this.parseImportClause_(allowImportedDefaultBinding, false); return new ImportTypeClause(this.getTreeLocation_(start), clause); } } if (allowImportedDefaultBinding) { var start$__4 = this.getTreeStartLocation_(); var importedBinding = this.parseImportedBinding_(); if (this.eatIf_(COMMA)) { var second = this.parseImportClause_(false, false); return new ImportClausePair(this.getTreeLocation_(start$__4), importedBinding, second); } return importedBinding; } break; } return this.parseUnexpectedToken_(); }, parseImportSpecifierSet_: function() { var start = this.getTreeStartLocation_(); var specifiers = []; this.eat_(OPEN_CURLY); while (!peek(CLOSE_CURLY) && !isAtEnd()) { specifiers.push(this.parseImportSpecifier_()); if (!this.eatIf_(COMMA)) break; } this.eat_(CLOSE_CURLY); return new ImportSpecifierSet(this.getTreeLocation_(start), specifiers); }, parseImportedBinding_: function() { var start = this.getTreeStartLocation_(); var binding = this.parseBindingIdentifier_(); return new ImportedBinding(this.getTreeLocation_(start), binding); }, parseImportSpecifier_: function() { var start = this.getTreeStartLocation_(); var token = peekToken(); var isKeyword = token.isKeyword(); var binding; var name = this.eatIdName_(); if (isKeyword || this.peekPredefinedString_(AS)) { this.eatId_(AS); binding = this.parseImportedBinding_(); } else { binding = new ImportedBinding(name.location, new BindingIdentifier(name.location, name)); name = null; } return new ImportSpecifier(this.getTreeLocation_(start), binding, name); }, parseExportDeclaration_: function() { var start = this.getTreeStartLocation_(); this.eat_(EXPORT); var exportTree; var annotations = this.popAnnotations_(); var type = peekType(); switch (type) { case CONST: case LET: if (this.options_.blockBinding) { exportTree = this.parseVariableStatement_(); break; } return this.parseUnexpectedToken_(); case VAR: exportTree = this.parseVariableStatement_(); break; case FUNCTION: exportTree = this.parseFunctionDeclaration_(); break; case CLASS: exportTree = this.parseClassDeclaration_(); break; case DEFAULT: exportTree = this.parseExportDefault_(); break; case OPEN_CURLY: case STAR: exportTree = this.parseNamedExport_(); break; case IDENTIFIER: if (this.options_.asyncFunctions && this.peekPredefinedString_(ASYNC)) { var asyncToken = this.eatId_(); exportTree = this.parseAsyncFunctionDeclaration_(asyncToken); } else if (this.options_.types && this.peekPredefinedString_(TYPE) && peekLookahead(IDENTIFIER)) { exportTree = this.parseTypeAliasDeclaration_(); } else if (this.options_.exportFromExtended) { exportTree = this.parseNamedExport_(); } else { return this.parseUnexpectedToken_(); } break; default: { var token = peekToken(); if (!token.isKeyword()) { return this.parseUnexpectedToken_(); } exportTree = this.parseNamedExport_(); } } return new ExportDeclaration(this.getTreeLocation_(start), exportTree, annotations); }, parseExportDefault_: function() { var start = this.getTreeStartLocation_(); var defaultToken = this.eat_(DEFAULT); if (this.options_.exportFromExtended && this.peekPredefinedString_(FROM)) { var idName = new IdentifierToken(defaultToken.location, DEFAULT); var namedExport = new ForwardDefaultExport(this.getTreeLocation_(start), idName); this.eatId_(FROM); var moduleSpecifier = this.parseModuleSpecifier_(); return new NamedExport(this.getTreeLocation_(start), namedExport, moduleSpecifier); } var exportValue; switch (peekType()) { case FUNCTION: { var tree = this.parseFunctionExpression_(); if (tree.name) { tree = new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body); } exportValue = tree; break; } case CLASS: { if (!this.options_.classes) { return this.parseSyntaxError_('Unexpected reserved word'); } var tree$__5 = this.parseClassExpression_(); if (tree$__5.name) { tree$__5 = new ClassDeclaration(tree$__5.location, tree$__5.name, tree$__5.superClass, tree$__5.elements, tree$__5.annotations, tree$__5.typeParameters); } exportValue = tree$__5; break; } default: exportValue = this.parseAssignmentExpression_(ALLOW_IN); this.eatPossibleImplicitSemiColon_(); } return new ExportDefault(this.getTreeLocation_(start), exportValue); }, parseNamedExport_: function() { var start = this.getTreeStartLocation_(); var exportClause, moduleSpecifier = null; switch (peekType()) { case OPEN_CURLY: exportClause = this.parseExportSpecifierSet_(); if (this.peekPredefinedString_(FROM)) { this.eatId_(FROM); moduleSpecifier = this.parseModuleSpecifier_(); } else { this.validateExportSpecifierSet_(exportClause); } break; case STAR: exportClause = this.parseExportStar_(); this.eatId_(FROM); moduleSpecifier = this.parseModuleSpecifier_(); break; default: exportClause = this.parseForwardDefaultExport_(); this.eatId_(FROM); moduleSpecifier = this.parseModuleSpecifier_(); break; } this.eatPossibleImplicitSemiColon_(); return new NamedExport(this.getTreeLocation_(start), exportClause, moduleSpecifier); }, parseExportStar_: function() { var start = this.getTreeStartLocation_(); this.eat_(STAR); if (this.peekPredefinedString_(AS)) { this.eatId_(AS); var name = this.eatIdName_(); return new NameSpaceExport(this.getTreeLocation_(start), name); } return new ExportStar(this.getTreeLocation_(start)); }, parseExportSpecifierSet_: function() { var start = this.getTreeStartLocation_(); this.eat_(OPEN_CURLY); var specifiers = [this.parseExportSpecifier_()]; while (this.eatIf_(COMMA)) { if (peek(CLOSE_CURLY)) break; specifiers.push(this.parseExportSpecifier_()); } this.eat_(CLOSE_CURLY); return new ExportSpecifierSet(this.getTreeLocation_(start), specifiers); }, parseExportSpecifier_: function() { var start = this.getTreeStartLocation_(); var lhs = this.eatIdName_(); var rhs = null; if (this.peekPredefinedString_(AS)) { this.eatId_(); rhs = this.eatIdName_(); } return new ExportSpecifier(this.getTreeLocation_(start), lhs, rhs); }, parseForwardDefaultExport_: function() { var start = this.getTreeStartLocation_(); var idName = this.eatIdName_(); return new ForwardDefaultExport(this.getTreeLocation_(start), idName); }, validateExportSpecifierSet_: function(tree) { for (var i = 0; i < tree.specifiers.length; i++) { var specifier = tree.specifiers[i]; if (getKeywordType(specifier.lhs.value)) { this.reportError_(specifier.lhs.location, ("Unexpected token " + specifier.lhs.value)); } } }, peekId_: function(type) { if (type === IDENTIFIER) return true; if (this.strictMode_) return false; return peekToken().isStrictKeyword(); }, peekIdName_: function(token) { return token.type === IDENTIFIER || token.isKeyword(); }, parseClassShared_: function(constr) { var start = this.getTreeStartLocation_(); var strictMode = this.strictMode_; this.strictMode_ = true; this.eat_(CLASS); var name = null; var typeParameters = null; var annotations = []; if (constr === ClassDeclaration || !peek(EXTENDS) && !peek(OPEN_CURLY)) { name = this.parseBindingIdentifier_(); if (this.options_.types) { typeParameters = this.parseTypeParametersOpt_(); } annotations = this.popAnnotations_(); } var superClass = null; if (this.eatIf_(EXTENDS)) { superClass = this.parseLeftHandSideExpression_(); superClass = this.coverFormalsToParenExpression_(superClass); } this.eat_(OPEN_CURLY); var elements = this.parseClassElements_(superClass); this.eat_(CLOSE_CURLY); this.strictMode_ = strictMode; return new constr(this.getTreeLocation_(start), name, superClass, elements, annotations, typeParameters); }, parseClassDeclaration_: function() { return this.parseClassShared_(ClassDeclaration); }, parseClassExpression_: function() { return this.parseClassShared_(ClassExpression); }, parseClassElements_: function(derivedClass) { var result = []; while (true) { var type = peekType(); if (type === SEMI_COLON) { nextToken(); } else if (this.peekClassElement_(peekType())) { result.push(this.parseClassElement_(derivedClass)); } else { break; } } return result; }, peekClassElement_: function(type) { return this.peekPropertyName_(type) || type === STAR && this.options_.generators || type === AT && this.options_.annotations; }, parsePropertyName_: function() { if (peek(OPEN_SQUARE)) return this.parseComputedPropertyName_(); return this.parseLiteralPropertyName_(); }, parseLiteralPropertyName_: function() { var start = this.getTreeStartLocation_(); var token = nextToken(); return new LiteralPropertyName(this.getTreeLocation_(start), token); }, parseComputedPropertyName_: function() { var start = this.getTreeStartLocation_(); this.eat_(OPEN_SQUARE); var expression = this.parseAssignmentExpression_(ALLOW_IN); this.eat_(CLOSE_SQUARE); return new ComputedPropertyName(this.getTreeLocation_(start), expression); }, parseStatement: function() { var fs = this.pushFunctionState_(FUNCTION_STATE_LENIENT); var result = this.parseModuleItem_(peekType()); this.popFunctionState_(fs); return result; }, parseStatements: function() { var fs = this.pushFunctionState_(FUNCTION_STATE_LENIENT); var result = this.parseModuleItemList_(); this.popFunctionState_(fs); return result; }, parseStatement_: function() { return this.parseStatementWithType_(peekType()); }, parseStatementWithType_: function(type) { switch (type) { case RETURN: return this.parseReturnStatement_(); case VAR: return this.parseVariableStatement_(); case IF: return this.parseIfStatement_(); case FOR: return this.parseForStatement_(); case BREAK: return this.parseBreakStatement_(); case SWITCH: return this.parseSwitchStatement_(); case THROW: return this.parseThrowStatement_(); case WHILE: return this.parseWhileStatement_(); case AT: if (this.options_.annotations) return this.parseAnnotatedDeclarations_(false); break; case CONTINUE: return this.parseContinueStatement_(); case DEBUGGER: return this.parseDebuggerStatement_(); case DO: return this.parseDoWhileStatement_(); case OPEN_CURLY: return this.parseBlock_(); case SEMI_COLON: return this.parseEmptyStatement_(); case TRY: return this.parseTryStatement_(); case WITH: return this.parseWithStatement_(); case INTERFACE: if (this.options_.types) { return this.parseInterfaceDeclaration_(); } } return this.parseFallThroughStatement_(); }, parseFunctionDeclaration_: function() { return this.parseFunction_(FunctionDeclaration); }, parseFunctionExpression_: function() { return this.parseFunction_(FunctionExpression); }, parseAsyncFunctionDeclaration_: function(asyncToken) { return this.parseAsyncFunction_(asyncToken, FunctionDeclaration); }, parseAsyncFunctionExpression_: function(asyncToken) { return this.parseAsyncFunction_(asyncToken, FunctionExpression); }, peekAsyncStar_: function() { return this.options_.asyncGenerators && peek(STAR); }, parseAsyncFunction_: function(asyncToken, ctor) { var start = asyncToken.location.start; this.eat_(FUNCTION); var kind = FUNCTION_STATE_FUNCTION | FUNCTION_STATE_ASYNC; if (this.peekAsyncStar_()) { kind |= FUNCTION_STATE_GENERATOR; this.eat_(STAR); asyncToken = new IdentifierToken(asyncToken.location, ASYNC_STAR); } var fs = this.pushFunctionState_(kind); var f = this.parseFunction2_(start, asyncToken, ctor); this.popFunctionState_(fs); return f; }, parseFunction_: function(ctor) { var start = this.getTreeStartLocation_(); this.eat_(FUNCTION); var functionKind = null; var kind = FUNCTION_STATE_FUNCTION; if (this.options_.generators && peek(STAR)) { functionKind = this.eat_(STAR); kind |= FUNCTION_STATE_GENERATOR; } var fs = this.pushFunctionState_(kind); var f = this.parseFunction2_(start, functionKind, ctor); this.popFunctionState_(fs); return f; }, parseFunction2_: function(start, functionKind, ctor) { var name = null; var annotations = []; if (ctor === FunctionDeclaration || this.peekBindingIdentifier_(peekType())) { name = this.parseBindingIdentifier_(); annotations = this.popAnnotations_(); } this.eat_(OPEN_PAREN); var parameters = this.parseFormalParameters_(); this.eat_(CLOSE_PAREN); var typeAnnotation = this.parseTypeAnnotationOpt_(); var body = this.parseFunctionBody_(parameters); return new ctor(this.getTreeLocation_(start), name, functionKind, parameters, typeAnnotation, annotations, body); }, peekRest_: function(type) { return type === DOT_DOT_DOT && this.options_.restParameters; }, parseFormalParameters_: function() { var start = this.getTreeStartLocation_(); var formals = []; this.pushAnnotations_(); var type = peekType(); if (this.peekRest_(type)) { formals.push(this.parseFormalRestParameter_()); } else { if (this.peekFormalParameter_(peekType())) formals.push(this.parseFormalParameter_(INITIALIZER_OPTIONAL)); while (this.eatIf_(COMMA)) { this.pushAnnotations_(); if (this.peekRest_(peekType())) { formals.push(this.parseFormalRestParameter_()); break; } formals.push(this.parseFormalParameter_(INITIALIZER_OPTIONAL)); } } return new FormalParameterList(this.getTreeLocation_(start), formals); }, peekFormalParameter_: function(type) { return this.peekBindingElement_(type); }, parseFormalParameter_: function(initializerAllowed) { var start = this.getTreeStartLocation_(); var binding = this.parseBindingElementBinding_(); var typeAnnotation = this.parseTypeAnnotationOpt_(); var initializer = this.parseBindingElementInitializer_(initializerAllowed); return new FormalParameter(this.getTreeLocation_(start), new BindingElement(this.getTreeLocation_(start), binding, initializer), typeAnnotation, this.popAnnotations_()); }, parseFormalRestParameter_: function() { var start = this.getTreeStartLocation_(); var restParameter = this.parseRestParameter_(); var typeAnnotation = this.parseTypeAnnotationOpt_(); return new FormalParameter(this.getTreeLocation_(start), restParameter, typeAnnotation, this.popAnnotations_()); }, parseRestParameter_: function() { var start = this.getTreeStartLocation_(); this.eat_(DOT_DOT_DOT); var id = this.parseBindingIdentifier_(); var typeAnnotation = this.parseTypeAnnotationOpt_(); return new RestParameter(this.getTreeLocation_(start), id, typeAnnotation); }, parseFunctionBody_: function(params) { var start = this.getTreeStartLocation_(); this.eat_(OPEN_CURLY); var strictMode = this.strictMode_; var result = this.parseStatementList_(!strictMode); validateParameters(params, this.strictMode_, this.errorReporter_); this.strictMode_ = strictMode; this.eat_(CLOSE_CURLY); return new FunctionBody(this.getTreeLocation_(start), result); }, parseSpreadExpression_: function() { var start = this.getTreeStartLocation_(); this.eat_(DOT_DOT_DOT); var operand = this.parseAssignmentExpression_(ALLOW_IN); return new SpreadExpression(this.getTreeLocation_(start), operand); }, parseBlock_: function() { var start = this.getTreeStartLocation_(); this.eat_(OPEN_CURLY); var result = this.parseStatementList_(false); this.eat_(CLOSE_CURLY); return new Block(this.getTreeLocation_(start), result); }, parseVariableStatement_: function() { var start = this.getTreeStartLocation_(); var declarations = this.parseVariableDeclarationList_(ALLOW_IN, INITIALIZER_REQUIRED); this.checkInitializers_(declarations); this.eatPossibleImplicitSemiColon_(); return new VariableStatement(this.getTreeLocation_(start), declarations); }, parseVariableDeclarationList_: function(allowIn, initializerRequired) { var type = peekType(); switch (type) { case CONST: case LET: case VAR: nextToken(); break; default: throw Error('unreachable'); } var start = this.getTreeStartLocation_(); var declarations = []; declarations.push(this.parseVariableDeclaration_(type, allowIn, initializerRequired)); while (this.eatIf_(COMMA)) { declarations.push(this.parseVariableDeclaration_(type, allowIn, initializerRequired)); } return new VariableDeclarationList(this.getTreeLocation_(start), type, declarations); }, parseVariableDeclaration_: function(binding, noIn, initializerRequired) { var initRequired = initializerRequired !== INITIALIZER_OPTIONAL; var start = this.getTreeStartLocation_(); var lvalue; var typeAnnotation; if (this.peekPattern_(peekType())) { lvalue = this.parseBindingPattern_(); typeAnnotation = null; } else { lvalue = this.parseBindingIdentifier_(); typeAnnotation = this.parseTypeAnnotationOpt_(); } var init = null; if (peek(EQUAL)) { init = this.parseInitializer_(noIn); } else if (lvalue.isPattern() && initRequired) { this.reportError_(lvalue.location, 'destructuring must have an initializer'); } return new VariableDeclaration(this.getTreeLocation_(start), lvalue, typeAnnotation, init); }, parseInitializer_: function(allowIn) { this.eat_(EQUAL); return this.parseAssignmentExpression_(allowIn); }, parseInitializerOpt_: function(allowIn) { if (this.eatIf_(EQUAL)) return this.parseAssignmentExpression_(allowIn); return null; }, parseEmptyStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(SEMI_COLON); return new EmptyStatement(this.getTreeLocation_(start)); }, parseFallThroughStatement_: function() { var start = this.getTreeStartLocation_(); var expression; switch (peekType()) { case OPEN_CURLY: return this.parseUnexpectedToken_(); case FUNCTION: case CLASS: return this.parseUnexpectedReservedWord_(peekToken()); case LET: { var token = peekLookahead(OPEN_SQUARE); if (token) { return this.parseSyntaxError_("A statement cannot start with 'let ['"); } } } if (this.options_.asyncFunctions && this.peekPredefinedString_(ASYNC) && peekLookahead(FUNCTION)) { var asyncToken = this.eatId_(); var functionToken = peekTokenNoLineTerminator(); if (functionToken !== null) return this.parseAsyncFunctionDeclaration_(asyncToken); expression = new IdentifierExpression(this.getTreeLocation_(start), asyncToken); } else { expression = this.parseExpression_(ALLOW_IN); } if (expression.type === IDENTIFIER_EXPRESSION) { if (this.eatIf_(COLON)) { var nameToken = expression.identifierToken; var statement = this.parseStatement_(); return new LabelledStatement(this.getTreeLocation_(start), nameToken, statement); } } this.eatPossibleImplicitSemiColon_(); return new ExpressionStatement(this.getTreeLocation_(start), expression); }, parseIfStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(IF); this.eat_(OPEN_PAREN); var condition = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); var ifClause = this.parseStatement_(); var elseClause = null; if (this.eatIf_(ELSE)) { elseClause = this.parseStatement_(); } return new IfStatement(this.getTreeLocation_(start), condition, ifClause, elseClause); }, parseDoWhileStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(DO); var body = this.parseStatement_(); this.eat_(WHILE); this.eat_(OPEN_PAREN); var condition = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); this.eatPossibleImplicitSemiColon_(); return new DoWhileStatement(this.getTreeLocation_(start), body, condition); }, parseWhileStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(WHILE); this.eat_(OPEN_PAREN); var condition = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); var body = this.parseStatement_(); return new WhileStatement(this.getTreeLocation_(start), condition, body); }, parseForStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(FOR); this.eat_(OPEN_PAREN); var type = peekType(); if (this.peekVariableDeclarationList_(type)) { var variables = this.parseVariableDeclarationList_(NO_IN, INITIALIZER_OPTIONAL); var declarations = variables.declarations; if (declarations.length > 1 || containsInitializer(declarations)) { return this.parseForStatement2_(start, variables); } type = peekType(); if (type === IN) { return this.parseForInStatement_(start, variables); } else if (this.peekOf_()) { return this.parseForOfStatement_(start, variables); } else if (this.allowForOn_ && this.peekOn_()) { return this.parseForOnStatement_(start, variables); } else { this.checkInitializers_(variables); return this.parseForStatement2_(start, variables); } } if (type === SEMI_COLON) { return this.parseForStatement2_(start, null); } var coverInitializedNameCount = this.coverInitializedNameCount_; var initializer = this.parseExpressionAllowPattern_(NO_IN); type = peekType(); if ((type === IN || this.peekOf_() || this.allowForOn_ && this.peekOn_())) { initializer = this.transformLeftHandSideExpression_(initializer); this.validateAssignmentTarget_(initializer, 'assignment'); if (this.peekOf_()) { return this.parseForOfStatement_(start, initializer); } else if (this.allowForOn_ && this.peekOn_()) { return this.parseForOnStatement_(start, initializer); } return this.parseForInStatement_(start, initializer); } this.ensureNoCoverInitializedNames_(initializer, coverInitializedNameCount); return this.parseForStatement2_(start, initializer); }, peekOf_: function() { return this.options_.forOf && this.peekPredefinedString_(OF); }, peekOn_: function() { return this.options_.forOn && this.peekPredefinedString_(ON); }, parseForOfStatement_: function(start, initializer) { this.eatId_(); var collection = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); var body = this.parseStatement_(); return new ForOfStatement(this.getTreeLocation_(start), initializer, collection, body); }, parseForOnStatement_: function(start, initializer) { this.eatId_(); var observable = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); var body = this.parseStatement_(); return new ForOnStatement(this.getTreeLocation_(start), initializer, observable, body); }, checkInitializers_: function(variables) { if (this.options_.blockBinding && variables.declarationType === CONST) { var type = variables.declarationType; for (var i = 0; i < variables.declarations.length; i++) { if (!this.checkInitializer_(type, variables.declarations[i])) { break; } } } }, checkInitializer_: function(type, declaration) { if (this.options_.blockBinding && type === CONST && declaration.initializer === null) { this.reportError_(declaration.location, 'const variables must have an initializer'); return false; } return true; }, peekVariableDeclarationList_: function(type) { switch (type) { case VAR: return true; case CONST: case LET: return this.options_.blockBinding; default: return false; } }, parseForStatement2_: function(start, initializer) { this.eat_(SEMI_COLON); var condition = null; if (!peek(SEMI_COLON)) { condition = this.parseExpression_(ALLOW_IN); } this.eat_(SEMI_COLON); var increment = null; if (!peek(CLOSE_PAREN)) { increment = this.parseExpression_(ALLOW_IN); } this.eat_(CLOSE_PAREN); var body = this.parseStatement_(); return new ForStatement(this.getTreeLocation_(start), initializer, condition, increment, body); }, parseForInStatement_: function(start, initializer) { this.eat_(IN); var collection = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); var body = this.parseStatement_(); return new ForInStatement(this.getTreeLocation_(start), initializer, collection, body); }, parseContinueStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(CONTINUE); var name = null; if (!this.peekImplicitSemiColon_()) { name = this.eatIdOpt_(); } this.eatPossibleImplicitSemiColon_(); return new ContinueStatement(this.getTreeLocation_(start), name); }, parseBreakStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(BREAK); var name = null; if (!this.peekImplicitSemiColon_()) { name = this.eatIdOpt_(); } this.eatPossibleImplicitSemiColon_(); return new BreakStatement(this.getTreeLocation_(start), name); }, parseReturnStatement_: function() { var start = this.getTreeStartLocation_(); var returnToken = this.eat_(RETURN); if (this.functionState_.isTopMost()) { this.reportError_(returnToken.location, 'Illegal return statement'); } var expression = null; if (!this.peekImplicitSemiColon_()) { expression = this.parseExpression_(ALLOW_IN); } this.eatPossibleImplicitSemiColon_(); return new ReturnStatement(this.getTreeLocation_(start), expression); }, parseYieldExpression_: function(allowIn) { var start = this.getTreeStartLocation_(); this.eat_(YIELD); var expression = null; var isYieldFor = false; var token = peekTokenNoLineTerminator(); if (token !== null) { switch (token.type) { case CLOSE_CURLY: case CLOSE_PAREN: case CLOSE_SQUARE: case COLON: case COMMA: case END_OF_FILE: case SEMI_COLON: break; default: isYieldFor = this.eatIf_(STAR); expression = this.parseAssignmentExpression_(allowIn); } } return new YieldExpression(this.getTreeLocation_(start), expression, isYieldFor); }, parseWithStatement_: function() { var start = this.getTreeStartLocation_(); var withToken = this.eat_(WITH); if (this.strictMode_) { this.reportError_(withToken.location, 'Strict mode code may not include a with statement'); } this.eat_(OPEN_PAREN); var expression = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); var body = this.parseStatement_(); return new WithStatement(this.getTreeLocation_(start), expression, body); }, parseSwitchStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(SWITCH); this.eat_(OPEN_PAREN); var expression = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); this.eat_(OPEN_CURLY); var caseClauses = this.parseCaseClauses_(); this.eat_(CLOSE_CURLY); return new SwitchStatement(this.getTreeLocation_(start), expression, caseClauses); }, parseCaseClauses_: function() { var foundDefaultClause = false; var result = []; while (true) { var start = this.getTreeStartLocation_(); switch (peekType()) { case CASE: { nextToken(); var expression = this.parseExpression_(ALLOW_IN); this.eat_(COLON); var statements = this.parseCaseStatementsOpt_(); result.push(new CaseClause(this.getTreeLocation_(start), expression, statements)); break; } case DEFAULT: { var defaultToken = nextToken(); if (foundDefaultClause) { this.reportError_(defaultToken.location, 'Switch statements may have at most one \'default\' clause'); } else { foundDefaultClause = true; } this.eat_(COLON); result.push(new DefaultClause(this.getTreeLocation_(start), this.parseCaseStatementsOpt_())); break; } default: return result; } } }, parseCaseStatementsOpt_: function() { var result = []; var type; while (true) { switch (type = peekType()) { case CASE: case DEFAULT: case CLOSE_CURLY: case END_OF_FILE: return result; } result.push(this.parseStatementListItem_(type)); } }, parseThrowStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(THROW); var value = null; if (!this.peekImplicitSemiColon_()) { value = this.parseExpression_(ALLOW_IN); } this.eatPossibleImplicitSemiColon_(); return new ThrowStatement(this.getTreeLocation_(start), value); }, parseTryStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(TRY); var body = this.parseBlock_(); var catchBlock = null; if (peek(CATCH)) { catchBlock = this.parseCatch_(); } var finallyBlock = null; if (peek(FINALLY)) { finallyBlock = this.parseFinallyBlock_(); } if (catchBlock === null && finallyBlock === null) { var token = peekToken(); this.reportError_(token.location, "'catch' or 'finally' expected."); } return new TryStatement(this.getTreeLocation_(start), body, catchBlock, finallyBlock); }, parseCatch_: function() { var start = this.getTreeStartLocation_(); var catchBlock; this.eat_(CATCH); this.eat_(OPEN_PAREN); var binding; if (this.peekPattern_(peekType())) binding = this.parseBindingPattern_(); else binding = this.parseBindingIdentifier_(); this.eat_(CLOSE_PAREN); var catchBody = this.parseBlock_(); catchBlock = new Catch(this.getTreeLocation_(start), binding, catchBody); return catchBlock; }, parseFinallyBlock_: function() { var start = this.getTreeStartLocation_(); this.eat_(FINALLY); var finallyBlock = this.parseBlock_(); return new Finally(this.getTreeLocation_(start), finallyBlock); }, parseDebuggerStatement_: function() { var start = this.getTreeStartLocation_(); this.eat_(DEBUGGER); this.eatPossibleImplicitSemiColon_(); return new DebuggerStatement(this.getTreeLocation_(start)); }, parsePrimaryExpression_: function() { switch (peekType()) { case CLASS: return this.options_.classes ? this.parseClassExpression_() : this.parseUnexpectedReservedWord_(peekToken()); case THIS: return this.parseThisExpression_(); case IDENTIFIER: { var identifier = this.parseIdentifierExpression_(); if (this.options_.asyncFunctions && identifier.identifierToken.value === ASYNC) { var token$__6 = peekTokenNoLineTerminator(); if (token$__6 && token$__6.type === FUNCTION) { var asyncToken = identifier.identifierToken; return this.parseAsyncFunctionExpression_(asyncToken); } } return identifier; } case NUMBER: case STRING: case TRUE: case FALSE: case NULL: return this.parseLiteralExpression_(); case OPEN_SQUARE: return this.parseArrayLiteral_(); case OPEN_CURLY: return this.parseObjectLiteral_(); case OPEN_PAREN: return this.parsePrimaryExpressionStartingWithParen_(); case SLASH: case SLASH_EQUAL: return this.parseRegularExpressionLiteral_(); case NO_SUBSTITUTION_TEMPLATE: case TEMPLATE_HEAD: if (this.options_.templateLiterals) { return this.parseTemplateLiteral_(null); } break; case IMPLEMENTS: case INTERFACE: case PACKAGE: case PRIVATE: case PROTECTED: case PUBLIC: case STATIC: case YIELD: if (this.strictMode_) { this.reportReservedIdentifier_(nextToken()); } return this.parseIdentifierExpression_(); case OPEN_ANGLE: if (this.options_.jsx) { return this.parseJsxElement_(); } break; case END_OF_FILE: return this.parseSyntaxError_('Unexpected end of input'); } var token = peekToken(); if (token.isKeyword()) { return this.parseUnexpectedReservedWord_(token); } return this.parseUnexpectedToken_(token); }, parseSuperExpression_: function(isNew) { var start = this.getTreeStartLocation_(); var fs = this.functionState_; while (fs && fs.isArrowFunction()) { fs = fs.outer; } var superToken = this.eat_(SUPER); if (!fs || !fs.isMethod()) { this.reportError_(superToken.location, 'super is only allowed in methods'); } var operand = new SuperExpression(this.getTreeLocation_(start)); var type = peekType(); if (isNew) { if (type === OPEN_SQUARE) { return this.parseMemberLookupExpression_(start, operand); } return this.parseMemberExpression_(start, operand); } switch (type) { case OPEN_SQUARE: return this.parseMemberLookupExpression_(start, operand); case PERIOD: return this.parseMemberExpression_(start, operand); case OPEN_PAREN: { var superCall = this.parseCallExpression_(start, operand); if (!fs.isDerivedConstructor()) { this.reportError_(superToken.location, 'super call is only allowed in derived constructor'); } return superCall; } } return this.parseUnexpectedToken_(); }, parseThisExpression_: function() { var start = this.getTreeStartLocation_(); this.eat_(THIS); return new ThisExpression(this.getTreeLocation_(start)); }, peekBindingIdentifier_: function(type) { return this.peekId_(type); }, parseBindingIdentifier_: function() { var start = this.getTreeStartLocation_(); var identifier = this.eatId_(); return new BindingIdentifier(this.getTreeLocation_(start), identifier); }, parseIdentifierExpression_: function() { var start = this.getTreeStartLocation_(); var identifier = this.eatId_(); return new IdentifierExpression(this.getTreeLocation_(start), identifier); }, parseIdentifierNameExpression_: function() { var start = this.getTreeStartLocation_(); var identifier = this.eatIdName_(); return new IdentifierExpression(this.getTreeLocation_(start), identifier); }, parseLiteralExpression_: function() { var start = this.getTreeStartLocation_(); var literal = this.nextLiteralToken_(); return new LiteralExpression(this.getTreeLocation_(start), literal); }, nextLiteralToken_: function() { return nextToken(); }, parseRegularExpressionLiteral_: function() { var start = this.getTreeStartLocation_(); var literal = nextRegularExpressionLiteralToken(); return new LiteralExpression(this.getTreeLocation_(start), literal); }, peekSpread_: function(type) { return type === DOT_DOT_DOT && this.options_.spread; }, parseArrayLiteral_: function() { var start = this.getTreeStartLocation_(); var expression; var elements = []; this.eat_(OPEN_SQUARE); var type = peekType(); if (type === FOR && this.options_.arrayComprehension) return this.parseArrayComprehension_(start); while (true) { type = peekType(); if (type === COMMA) { expression = null; } else if (this.peekSpread_(type)) { expression = this.parseSpreadExpression_(); } else if (type === CLOSE_SQUARE || type === END_OF_FILE) { break; } else { expression = this.parseAssignmentExpression_(ALLOW_IN); } elements.push(expression); type = peekType(); if (type !== CLOSE_SQUARE) this.eat_(COMMA); } this.eat_(CLOSE_SQUARE); return new ArrayLiteral(this.getTreeLocation_(start), elements); }, parseArrayComprehension_: function(start) { var list = this.parseComprehensionList_(); var expression = this.parseAssignmentExpression_(ALLOW_IN); this.eat_(CLOSE_SQUARE); return new ArrayComprehension(this.getTreeLocation_(start), list, expression); }, parseComprehensionList_: function() { var list = [this.parseComprehensionFor_()]; while (true) { var type = peekType(); switch (type) { case FOR: list.push(this.parseComprehensionFor_()); break; case IF: list.push(this.parseComprehensionIf_()); break; default: return list; } } }, parseComprehensionFor_: function() { var start = this.getTreeStartLocation_(); this.eat_(FOR); this.eat_(OPEN_PAREN); var left = this.parseForBinding_(); this.eatId_(OF); var iterator = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); return new ComprehensionFor(this.getTreeLocation_(start), left, iterator); }, parseComprehensionIf_: function() { var start = this.getTreeStartLocation_(); this.eat_(IF); this.eat_(OPEN_PAREN); var expression = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); return new ComprehensionIf(this.getTreeLocation_(start), expression); }, parseObjectLiteral_: function() { var start = this.getTreeStartLocation_(); var result = []; this.eat_(OPEN_CURLY); while (this.peekPropertyDefinition_(peekType())) { var propertyDefinition = this.parsePropertyDefinition_(); result.push(propertyDefinition); if (!this.eatIf_(COMMA)) break; } this.eat_(CLOSE_CURLY); return new ObjectLiteral(this.getTreeLocation_(start), result); }, parsePropertyDefinition: function() { var fs = this.pushFunctionState_(FUNCTION_STATE_SCRIPT); var result = this.parsePropertyDefinition_(); this.popFunctionState_(fs); return result; }, parsePropertyDefinition_: function() { var start = this.getTreeStartLocation_(); var functionKind = null; var isStatic = false; if (this.options_.generators && this.options_.propertyMethods && peek(STAR)) { var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD | FUNCTION_STATE_GENERATOR); var m = this.parseGeneratorMethod_(start, isStatic, []); this.popFunctionState_(fs); return m; } if (this.options_.spreadProperties && peek(DOT_DOT_DOT)) { return this.parseSpreadExpression_(); } var token = peekToken(); var name = this.parsePropertyName_(); if (this.options_.propertyMethods && peek(OPEN_PAREN)) { var fs$__7 = this.pushFunctionState_(FUNCTION_STATE_METHOD); var m$__8 = this.parseMethod_(start, isStatic, functionKind, name, []); this.popFunctionState_(fs$__7); return m$__8; } if (this.eatIf_(COLON)) { var value = this.parseAssignmentExpression_(ALLOW_IN); return new PropertyNameAssignment(this.getTreeLocation_(start), name, value); } var type = peekType(); if (name.type === LITERAL_PROPERTY_NAME) { var nameLiteral = name.literalToken; if (nameLiteral.value === GET && this.peekPropertyName_(type)) { return this.parseGetAccessor_(start, isStatic, []); } if (nameLiteral.value === SET && this.peekPropertyName_(type)) { return this.parseSetAccessor_(start, isStatic, []); } if (this.options_.asyncFunctions && nameLiteral.value === ASYNC && (this.peekPropertyName_(type) || this.peekAsyncStar_())) { var async = nameLiteral; var kind = FUNCTION_STATE_METHOD | FUNCTION_STATE_ASYNC; if (this.peekAsyncStar_()) { kind |= FUNCTION_STATE_GENERATOR; this.eat_(STAR); async = new IdentifierToken(async.location, ASYNC_STAR); } var name$__9 = this.parsePropertyName_(); var fs$__10 = this.pushFunctionState_(kind); var m$__11 = this.parseMethod_(start, isStatic, async, name$__9, []); this.popFunctionState_(fs$__10); return m$__11; } if (this.options_.propertyNameShorthand && (nameLiteral.type === IDENTIFIER || nameLiteral.isStrictKeyword() && !this.strictMode_ || nameLiteral.type === YIELD && this.allowYield_)) { if (peek(EQUAL)) { token = nextToken(); var coverInitializedNameCount = this.coverInitializedNameCount_; var expr = this.parseAssignmentExpression_(ALLOW_IN); this.ensureNoCoverInitializedNames_(expr, coverInitializedNameCount); this.coverInitializedNameCount_++; return new CoverInitializedName(this.getTreeLocation_(start), nameLiteral, token, expr); } return new PropertyNameShorthand(this.getTreeLocation_(start), nameLiteral); } if (this.strictMode_ && nameLiteral.isStrictKeyword()) this.reportReservedIdentifier_(nameLiteral); } if (name.type === COMPUTED_PROPERTY_NAME) token = peekToken(); return this.parseUnexpectedToken_(token); }, parseClassElement_: function(derivedClass) { var start = this.getTreeStartLocation_(); var annotations = this.parseAnnotations_(); var type = peekType(); var isStatic = false, functionKind = null; switch (type) { case STATIC: { var staticToken = nextToken(); type = peekType(); switch (type) { case OPEN_PAREN: { var location = this.getTreeLocation_(start); var name = new LiteralPropertyName(location, staticToken); var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD); var m = this.parseMethod_(start, isStatic, functionKind, name, annotations); this.popFunctionState_(fs); return m; } default: isStatic = true; if (type === STAR && this.options_.generators) return this.parseGeneratorMethod_(start, true, annotations); return this.parseClassElement2_(start, isStatic, annotations, derivedClass); } break; } case STAR: return this.parseGeneratorMethod_(start, isStatic, annotations); default: return this.parseClassElement2_(start, isStatic, annotations, derivedClass); } }, parseGeneratorMethod_: function(start, isStatic, annotations) { var functionKind = this.eat_(STAR); var name = this.parsePropertyName_(); var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD | FUNCTION_STATE_GENERATOR); var m = this.parseMethod_(start, isStatic, functionKind, name, annotations); this.popFunctionState_(fs); return m; }, parseMethod_: function(start, isStatic, functionKind, name, annotations) { this.eat_(OPEN_PAREN); var parameterList = this.parseFormalParameters_(); this.eat_(CLOSE_PAREN); var typeAnnotation = this.parseTypeAnnotationOpt_(); var body = this.parseFunctionBody_(parameterList); return new Method(this.getTreeLocation_(start), isStatic, functionKind, name, parameterList, typeAnnotation, annotations, body, null); }, parsePropertyVariableDeclaration_: function(start, isStatic, name, annotations) { var typeAnnotation = this.parseTypeAnnotationOpt_(); var initializer = this.parseInitializerOpt_(ALLOW_IN); this.eat_(SEMI_COLON); return new PropertyVariableDeclaration(this.getTreeLocation_(start), isStatic, name, typeAnnotation, annotations, initializer); }, parseClassElement2_: function(start, isStatic, annotations, derivedClass) { var functionKind = null; var name = this.parsePropertyName_(); var type = peekType(); if (name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === GET && this.peekPropertyName_(type)) { return this.parseGetAccessor_(start, isStatic, annotations); } if (name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === SET && this.peekPropertyName_(type)) { return this.parseSetAccessor_(start, isStatic, annotations); } if (this.options_.asyncFunctions && name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === ASYNC && (this.peekPropertyName_(type) || this.peekAsyncStar_())) { var async = name.literalToken; var kind = FUNCTION_STATE_METHOD | FUNCTION_STATE_ASYNC; if (this.peekAsyncStar_()) { kind |= FUNCTION_STATE_GENERATOR; this.eat_(STAR); async = new IdentifierToken(async.location, ASYNC_STAR); } name = this.parsePropertyName_(); var fs = this.pushFunctionState_(kind); var m = this.parseMethod_(start, isStatic, async, name, annotations); this.popFunctionState_(fs); return m; } if (!this.options_.memberVariables || type === OPEN_PAREN) { var kind$__12 = FUNCTION_STATE_METHOD; var isDerivedConstructor = derivedClass && !isStatic && functionKind === null && name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === CONSTRUCTOR; if (isDerivedConstructor) { kind$__12 |= FUNCTION_STATE_DERIVED_CONSTRUCTOR; } var fs$__13 = this.pushFunctionState_(kind$__12); var m$__14 = this.parseMethod_(start, isStatic, functionKind, name, annotations); this.popFunctionState_(fs$__13); if (isDerivedConstructor) { validateConstructor(m$__14, this.errorReporter_); } return m$__14; } return this.parsePropertyVariableDeclaration_(start, isStatic, name, annotations); }, parseGetAccessor_: function(start, isStatic, annotations) { var name = this.parsePropertyName_(); var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD); this.eat_(OPEN_PAREN); this.eat_(CLOSE_PAREN); var typeAnnotation = this.parseTypeAnnotationOpt_(); var body = this.parseFunctionBody_(null); this.popFunctionState_(fs); return new GetAccessor(this.getTreeLocation_(start), isStatic, name, typeAnnotation, annotations, body); }, parseSetAccessor_: function(start, isStatic, annotations) { var name = this.parsePropertyName_(); var fs = this.pushFunctionState_(FUNCTION_STATE_METHOD); this.eat_(OPEN_PAREN); var parameterList = this.parsePropertySetParameterList_(); this.eat_(CLOSE_PAREN); var body = this.parseFunctionBody_(parameterList); this.popFunctionState_(fs); return new SetAccessor(this.getTreeLocation_(start), isStatic, name, parameterList, annotations, body); }, peekPropertyDefinition_: function(type) { return this.peekPropertyName_(type) || type === STAR && this.options_.propertyMethods && this.options_.generators || type === DOT_DOT_DOT && this.options_.spreadProperties; }, peekPropertyName_: function(type) { switch (type) { case IDENTIFIER: case STRING: case NUMBER: return true; case OPEN_SQUARE: return this.options_.computedPropertyNames; default: return peekToken().isKeyword(); } }, peekPredefinedString_: function(string) { var token = peekToken(); return token.type === IDENTIFIER && token.value === string; }, parsePropertySetParameterList_: function() { var start = this.getTreeStartLocation_(); var binding; this.pushAnnotations_(); if (this.peekPattern_(peekType())) binding = this.parseBindingPattern_(); else binding = this.parseBindingIdentifier_(); var typeAnnotation = this.parseTypeAnnotationOpt_(); var parameter = new FormalParameter(this.getTreeLocation_(start), new BindingElement(this.getTreeLocation_(start), binding, null), typeAnnotation, this.popAnnotations_()); return new FormalParameterList(parameter.location, [parameter]); }, parsePrimaryExpressionStartingWithParen_: function() { var start = this.getTreeStartLocation_(); this.eat_(OPEN_PAREN); if (peek(FOR) && this.options_.generatorComprehension) return this.parseGeneratorComprehension_(start); return this.parseCoverFormals_(start); }, parseSyntaxError_: function(message) { var token = nextToken(); this.reportError_(token.location, message); return new SyntaxErrorTree(token.location, token, message); }, parseUnexpectedToken_: function() { var token = arguments[0] !== (void 0) ? arguments[0] : peekToken(); if (token.type === NO_SUBSTITUTION_TEMPLATE) { return this.parseSyntaxError_('Unexpected token `'); } return this.parseSyntaxError_(("Unexpected token " + token)); }, parseUnexpectedReservedWord_: function(token) { return this.parseSyntaxError_(("Unexpected reserved word " + token)); }, parseExpression_: function(allowIn) { var coverInitializedNameCount = this.coverInitializedNameCount_; var expression = this.parseExpressionAllowPattern_(allowIn); this.ensureNoCoverInitializedNames_(expression, coverInitializedNameCount); return expression; }, parseExpression: function() { var fs = this.pushFunctionState_(FUNCTION_STATE_LENIENT); var expression = this.parseExpression_(ALLOW_IN); this.popFunctionState_(fs); return expression; }, parseExpressionAllowPattern_: function(allowIn) { var start = this.getTreeStartLocation_(); var expression = this.parseAssignmentExpression_(allowIn); if (peek(COMMA)) { var expressions = [expression]; while (this.eatIf_(COMMA)) { expressions.push(this.parseAssignmentExpression_(allowIn)); } return new CommaExpression(this.getTreeLocation_(start), expressions); } return expression; }, parseAssignmentExpression_: function(allowIn) { if (this.allowYield_ && peek(YIELD)) return this.parseYieldExpression_(allowIn); var start = this.getTreeStartLocation_(); var validAsyncParen = false; if (this.options_.asyncFunctions && this.peekPredefinedString_(ASYNC)) { var asyncToken = peekToken(); var maybeOpenParenToken = peekTokenLookahead(); validAsyncParen = maybeOpenParenToken.type === OPEN_PAREN && asyncToken.location.end.line === maybeOpenParenToken.location.start.line; } var left = this.parseConditional_(allowIn); var type = peekType(); if (this.options_.asyncFunctions && left.type === IDENTIFIER_EXPRESSION && left.identifierToken.value === ASYNC && type === IDENTIFIER) { if (peekTokenNoLineTerminator() !== null) { var bindingIdentifier = this.parseBindingIdentifier_(); var asyncToken$__15 = left.identifierToken; return this.parseArrowFunction_(start, bindingIdentifier, asyncToken$__15); } } if (type === ARROW && peekTokenNoLineTerminator() !== null) { if (left.type === COVER_FORMALS || left.type === IDENTIFIER_EXPRESSION) return this.parseArrowFunction_(start, left, null); if (validAsyncParen && left.type === CALL_EXPRESSION) { var asyncToken$__16 = left.operand.identifierToken; return this.parseArrowFunction_(start, left.args, asyncToken$__16); } } left = this.coverFormalsToParenExpression_(left); if (this.peekAssignmentOperator_(type)) { if (type === EQUAL) left = this.transformLeftHandSideExpression_(left); this.validateAssignmentTarget_(left, 'assignment'); var operator = nextToken(); var right = this.parseAssignmentExpression_(allowIn); return new BinaryExpression(this.getTreeLocation_(start), left, operator, right); } return left; }, transformLeftHandSideExpression_: function(tree) { switch (tree.type) { case ARRAY_LITERAL: case OBJECT_LITERAL: resetScanner(tree.location.start.offset); return this.parseAssignmentPattern_(); } return tree; }, peekAssignmentOperator_: function(type) { return isAssignmentOperator(type); }, parseConditional_: function(allowIn) { var start = this.getTreeStartLocation_(); var condition = this.parseBinaryExpression_(allowIn); if (this.eatIf_(QUESTION)) { condition = this.toPrimaryExpression_(condition); var left = this.parseAssignmentExpression_(ALLOW_IN); this.eat_(COLON); var right = this.parseAssignmentExpression_(allowIn); return new ConditionalExpression(this.getTreeLocation_(start), condition, left, right); } return condition; }, getPrecedence_: function(type, allowIn) { switch (type) { case OR: return 1; case AND: return 2; case BAR: return 3; case CARET: return 4; case AMPERSAND: return 5; case EQUAL_EQUAL: case EQUAL_EQUAL_EQUAL: case NOT_EQUAL: case NOT_EQUAL_EQUAL: return 6; case CLOSE_ANGLE: case GREATER_EQUAL: case INSTANCEOF: case LESS_EQUAL: case OPEN_ANGLE: return 7; case IN: return allowIn ? 7 : 0; case LEFT_SHIFT: case RIGHT_SHIFT: case UNSIGNED_RIGHT_SHIFT: return 8; case MINUS: case PLUS: return 9; case SLASH: case STAR: case PERCENT: return 10; case STAR_STAR: return this.options_.exponentiation ? 11 : 0; default: return 0; } }, parseBinaryExpression_: function(allowIn) { var start = this.getTreeStartLocation_(); var left = this.parseUnaryExpression_(); return this.parseBinaryExpressionHelper_(start, left, -1, allowIn); }, parseBinaryExpressionHelper_: function(start, left, minPrec, allowIn) { var type = peekType(); var prec = this.getPrecedence_(type, allowIn); if (prec === 0) { return left; } var leftToRight = type !== STAR_STAR; if (leftToRight ? prec > minPrec : prec >= minPrec) { var token = nextToken(); var rightStart = this.getTreeStartLocation_(); var rightUnary = this.parseUnaryExpression_(); var right = this.parseBinaryExpressionHelper_(rightStart, rightUnary, prec, allowIn); left = this.toPrimaryExpression_(left); right = this.toPrimaryExpression_(right); var node = new BinaryExpression(this.getTreeLocation_(start), left, token, right); return this.parseBinaryExpressionHelper_(start, node, minPrec, allowIn); } return left; }, parseUnaryExpression_: function() { var start = this.getTreeStartLocation_(); if (this.allowAwait_ && this.peekPredefinedString_(AWAIT)) { this.eatId_(); var operand; if (this.allowYield_ && peek(YIELD)) { operand = this.parseYieldExpression_(ALLOW_IN); } else { operand = this.parseUnaryExpression_(); operand = this.toPrimaryExpression_(operand); } return new AwaitExpression(this.getTreeLocation_(start), operand); } if (this.peekUnaryOperator_(peekType())) { var operator = nextToken(); var operand$__17 = this.parseUnaryExpression_(); operand$__17 = this.toPrimaryExpression_(operand$__17); if (operand$__17.type !== SYNTAX_ERROR_TREE) { switch (operator.type) { case PLUS_PLUS: case MINUS_MINUS: this.validateAssignmentTarget_(operand$__17, 'prefix operation'); } } return new UnaryExpression(this.getTreeLocation_(start), operator, operand$__17); } return this.parsePostfixExpression_(); }, peekUnaryOperator_: function(type) { switch (type) { case DELETE: case VOID: case TYPEOF: case PLUS_PLUS: case MINUS_MINUS: case PLUS: case MINUS: case TILDE: case BANG: return true; default: return false; } }, parsePostfixExpression_: function() { var start = this.getTreeStartLocation_(); var operand = this.parseLeftHandSideExpression_(); while (this.peekPostfixOperator_(peekType())) { operand = this.toPrimaryExpression_(operand); var operator = nextToken(); this.validateAssignmentTarget_(operand, 'postfix operation'); operand = new PostfixExpression(this.getTreeLocation_(start), operand, operator); } return operand; }, peekPostfixOperator_: function(type) { switch (type) { case PLUS_PLUS: case MINUS_MINUS: { var token = peekTokenNoLineTerminator(); return token !== null; } } return false; }, parseLeftHandSideExpression_: function() { var start = this.getTreeStartLocation_(); var operand = this.parseNewExpression_(); if (!(operand instanceof NewExpression) || operand.args !== null) { loop: while (true) { switch (peekType()) { case OPEN_PAREN: operand = this.toPrimaryExpression_(operand); operand = this.parseCallExpression_(start, operand); break; case OPEN_SQUARE: operand = this.toPrimaryExpression_(operand); operand = this.parseMemberLookupExpression_(start, operand); break; case PERIOD: operand = this.toPrimaryExpression_(operand); operand = this.parseMemberExpression_(start, operand); break; case NO_SUBSTITUTION_TEMPLATE: case TEMPLATE_HEAD: if (!this.options_.templateLiterals) break loop; operand = this.toPrimaryExpression_(operand); if (this.options_.templateLiterals) { operand = this.parseTemplateLiteral_(operand); } break; default: break loop; } } } return operand; }, parseMemberExpressionNoNew_: function() { var start = this.getTreeStartLocation_(); var operand; if (peekType() === FUNCTION) { operand = this.parseFunctionExpression_(); } else { operand = this.parsePrimaryExpression_(); } loop: while (true) { switch (peekType()) { case OPEN_SQUARE: operand = this.toPrimaryExpression_(operand); operand = this.parseMemberLookupExpression_(start, operand); break; case PERIOD: operand = this.toPrimaryExpression_(operand); operand = this.parseMemberExpression_(start, operand); break; case NO_SUBSTITUTION_TEMPLATE: case TEMPLATE_HEAD: if (!this.options_.templateLiterals) break loop; operand = this.toPrimaryExpression_(operand); operand = this.parseTemplateLiteral_(operand); break; default: break loop; } } return operand; }, parseMemberExpression_: function(start, operand) { this.eat_(PERIOD); var name = this.eatIdName_(); return new MemberExpression(this.getTreeLocation_(start), operand, name); }, parseMemberLookupExpression_: function(start, operand) { this.eat_(OPEN_SQUARE); var member = this.parseExpression_(ALLOW_IN); this.eat_(CLOSE_SQUARE); return new MemberLookupExpression(this.getTreeLocation_(start), operand, member); }, parseCallExpression_: function(start, operand) { var args = this.parseArguments_(); return new CallExpression(this.getTreeLocation_(start), operand, args); }, parseNewExpression_: function() { var operand, start; switch (peekType()) { case NEW: { start = this.getTreeStartLocation_(); this.eat_(NEW); if (peek(SUPER)) { operand = this.parseSuperExpression_(true); } else { operand = this.toPrimaryExpression_(this.parseNewExpression_()); } var args = null; if (peek(OPEN_PAREN)) { args = this.parseArguments_(); } return new NewExpression(this.getTreeLocation_(start), operand, args); } case SUPER: return this.parseSuperExpression_(false); default: return this.parseMemberExpressionNoNew_(); } }, parseArguments_: function() { var start = this.getTreeStartLocation_(); var args = []; this.eat_(OPEN_PAREN); if (!peek(CLOSE_PAREN)) { args.push(this.parseArgument_()); while (this.eatIf_(COMMA)) { args.push(this.parseArgument_()); } } this.eat_(CLOSE_PAREN); return new ArgumentList(this.getTreeLocation_(start), args); }, parseArgument_: function() { if (this.peekSpread_(peekType())) return this.parseSpreadExpression_(); return this.parseAssignmentExpression_(ALLOW_IN); }, parseArrowFunction_: function(start, tree, asyncToken) { var $__3 = this; var formals; var kind = FUNCTION_STATE_ARROW; if (asyncToken && asyncToken.value === ASYNC) { kind |= FUNCTION_STATE_ASYNC; } var fs = this.pushFunctionState_(kind); var makeFormals = function(tree) { return new FormalParameterList($__3.getTreeLocation_(start), [new FormalParameter(tree.location, new BindingElement(tree.location, tree, null), null, [])]); }; switch (tree.type) { case IDENTIFIER_EXPRESSION: formals = makeFormals(new BindingIdentifier(tree.location, tree.identifierToken)); break; case BINDING_IDENTIFIER: formals = makeFormals(tree); break; case FORMAL_PARAMETER_LIST: formals = tree; break; default: formals = this.toFormalParameters_(start, tree, asyncToken); } this.eat_(ARROW); var body = this.parseConciseBody_(formals); this.popFunctionState_(fs); return new ArrowFunction(this.getTreeLocation_(start), asyncToken, formals, body); }, parseCoverFormals_: function(start) { var expressions = []; if (!peek(CLOSE_PAREN)) { do { var type = peekType(); if (this.peekRest_(type)) { expressions.push(this.parseRestParameter_()); break; } else { expressions.push(this.parseAssignmentExpression_(ALLOW_IN)); } if (this.eatIf_(COMMA)) continue; } while (!peek(CLOSE_PAREN) && !isAtEnd()); } this.eat_(CLOSE_PAREN); return new CoverFormals(this.getTreeLocation_(start), expressions); }, ensureNoCoverInitializedNames_: function(tree, coverInitializedNameCount) { if (coverInitializedNameCount === this.coverInitializedNameCount_) return; var finder = new ValidateObjectLiteral(); finder.visitAny(tree); if (finder.found) { var token = finder.errorToken; this.reportError_(token.location, ("Unexpected token " + token)); } }, toPrimaryExpression_: function(tree) { if (tree.type === COVER_FORMALS) return this.coverFormalsToParenExpression_(tree); return tree; }, validateCoverFormalsAsParenExpression_: function(tree) { for (var i = 0; i < tree.expressions.length; i++) { if (tree.expressions[i].type === REST_PARAMETER) { var token = new Token(DOT_DOT_DOT, tree.expressions[i].location); this.reportError_(token.location, ("Unexpected token " + token)); return; } } }, coverFormalsToParenExpression_: function(tree) { if (tree.type === COVER_FORMALS) { var expressions = tree.expressions; if (expressions.length === 0) { var message = 'Unexpected token )'; this.reportError_(tree.location, message); } else { this.validateCoverFormalsAsParenExpression_(tree); var expression; if (expressions.length > 1) expression = new CommaExpression(expressions[0].location, expressions); else expression = expressions[0]; return new ParenExpression(tree.location, expression); } } return tree; }, toFormalParameters_: function(start, tree, asyncToken) { resetScanner(start.offset); return this.parseArrowFormalParameters_(asyncToken); }, parseArrowFormalParameters_: function(asyncToken) { if (asyncToken) this.eat_(IDENTIFIER); this.eat_(OPEN_PAREN); var parameters = this.parseFormalParameters_(); this.eat_(CLOSE_PAREN); return parameters; }, peekArrow_: function(type) { return type === ARROW && this.options_.arrowFunctions; }, parseConciseBody_: function(params) { if (peek(OPEN_CURLY)) return this.parseFunctionBody_(params); validateParameters(params, this.strictMode_, this.errorReporter_); return this.parseAssignmentExpression_(ALLOW_IN); }, parseGeneratorComprehension_: function(start) { var comprehensionList = this.parseComprehensionList_(); var expression = this.parseAssignmentExpression_(ALLOW_IN); this.eat_(CLOSE_PAREN); return new GeneratorComprehension(this.getTreeLocation_(start), comprehensionList, expression); }, parseForBinding_: function() { if (this.peekPattern_(peekType())) return this.parseBindingPattern_(); return this.parseBindingIdentifier_(); }, peekPattern_: function(type) { return this.options_.destructuring && (this.peekObjectPattern_(type) || this.peekArrayPattern_(type)); }, peekArrayPattern_: function(type) { return type === OPEN_SQUARE; }, peekObjectPattern_: function(type) { return type === OPEN_CURLY; }, parseBindingPattern_: function() { return this.parsePattern_(true); }, parsePattern_: function(useBinding) { if (this.peekArrayPattern_(peekType())) return this.parseArrayPattern_(useBinding); return this.parseObjectPattern_(useBinding); }, parseArrayBindingPattern_: function() { return this.parseArrayPattern_(true); }, parsePatternElement_: function(useBinding) { return useBinding ? this.parseBindingElement_() : this.parseAssignmentElement_(); }, parsePatternRestElement_: function(useBinding) { return useBinding ? this.parseBindingRestElement_() : this.parseAssignmentRestElement_(); }, parseArrayPattern_: function(useBinding) { var start = this.getTreeStartLocation_(); var elements = []; this.eat_(OPEN_SQUARE); while (true) { var type = peekType(); if (type === COMMA) { elements.push(null); } else if (this.peekSpread_(type)) { elements.push(this.parsePatternRestElement_(useBinding)); break; } else if (type === CLOSE_SQUARE || type === END_OF_FILE) { break; } else { elements.push(this.parsePatternElement_(useBinding)); } type = peekType(); if (type !== CLOSE_SQUARE) { this.eat_(COMMA); } } this.eat_(CLOSE_SQUARE); return new ArrayPattern(this.getTreeLocation_(start), elements); }, parseBindingElementList_: function(elements) { this.parseElisionOpt_(elements); elements.push(this.parseBindingElement_()); while (this.eatIf_(COMMA)) { this.parseElisionOpt_(elements); elements.push(this.parseBindingElement_()); } }, parseElisionOpt_: function(elements) { while (this.eatIf_(COMMA)) { elements.push(null); } }, peekBindingElement_: function(type) { return this.peekBindingIdentifier_(type) || this.peekPattern_(type); }, parseBindingElement_: function() { var start = this.getTreeStartLocation_(); var binding = this.parseBindingElementBinding_(); var initializer = this.parseBindingElementInitializer_(INITIALIZER_OPTIONAL); return new BindingElement(this.getTreeLocation_(start), binding, initializer); }, parseBindingElementBinding_: function() { if (this.peekPattern_(peekType())) return this.parseBindingPattern_(); return this.parseBindingIdentifier_(); }, parseBindingElementInitializer_: function(initializerRequired) { if (peek(EQUAL) || initializerRequired) { return this.parseInitializer_(ALLOW_IN); } return null; }, parseBindingRestElement_: function() { var start = this.getTreeStartLocation_(); this.eat_(DOT_DOT_DOT); var identifier = this.parseBindingIdentifier_(); return new SpreadPatternElement(this.getTreeLocation_(start), identifier); }, parseObjectPattern_: function(useBinding) { var start = this.getTreeStartLocation_(); var elements = []; this.eat_(OPEN_CURLY); var type; while ((type = peekType()) !== CLOSE_CURLY && type !== END_OF_FILE) { elements.push(this.parsePatternProperty_(useBinding)); if (!this.eatIf_(COMMA)) break; } this.eat_(CLOSE_CURLY); return new ObjectPattern(this.getTreeLocation_(start), elements); }, parsePatternProperty_: function(useBinding) { var start = this.getTreeStartLocation_(); var name = this.parsePropertyName_(); var requireColon = name.type !== LITERAL_PROPERTY_NAME || !name.literalToken.isStrictKeyword() && name.literalToken.type !== IDENTIFIER; if (requireColon || peek(COLON)) { this.eat_(COLON); var element = this.parsePatternElement_(useBinding); return new ObjectPatternField(this.getTreeLocation_(start), name, element); } var token = name.literalToken; if (this.strictMode_ && token.isStrictKeyword()) this.reportReservedIdentifier_(token); if (useBinding) { var binding = new BindingIdentifier(name.location, token); var initializer$__18 = this.parseInitializerOpt_(ALLOW_IN); return new BindingElement(this.getTreeLocation_(start), binding, initializer$__18); } var assignment = new IdentifierExpression(name.location, token); var initializer = this.parseInitializerOpt_(ALLOW_IN); return new AssignmentElement(this.getTreeLocation_(start), assignment, initializer); }, parseAssignmentPattern_: function() { return this.parsePattern_(false); }, parseArrayAssignmentPattern_: function() { return this.parseArrayPattern_(false); }, parseAssignmentElement_: function() { var start = this.getTreeStartLocation_(); var assignment = this.parseDestructuringAssignmentTarget_(); var initializer = this.parseInitializerOpt_(ALLOW_IN); return new AssignmentElement(this.getTreeLocation_(start), assignment, initializer); }, parseDestructuringAssignmentTarget_: function() { switch (peekType()) { case OPEN_SQUARE: return this.parseArrayAssignmentPattern_(); case OPEN_CURLY: return this.parseObjectAssignmentPattern_(); } var expression = this.parseLeftHandSideExpression_(); expression = this.coverFormalsToParenExpression_(expression); this.validateAssignmentTarget_(expression, 'assignment'); return expression; }, parseAssignmentRestElement_: function() { var start = this.getTreeStartLocation_(); this.eat_(DOT_DOT_DOT); var id = this.parseDestructuringAssignmentTarget_(); return new SpreadPatternElement(this.getTreeLocation_(start), id); }, parseObjectAssignmentPattern_: function() { return this.parseObjectPattern_(false); }, parseAssignmentProperty_: function() { return this.parsePatternProperty_(false); }, parseTemplateLiteral_: function(operand) { var start = operand ? operand.location.start : this.getTreeStartLocation_(); var token = nextToken(); var elements = [new TemplateLiteralPortion(token.location, token)]; if (token.type === NO_SUBSTITUTION_TEMPLATE) { return new TemplateLiteralExpression(this.getTreeLocation_(start), operand, elements); } var expression = this.parseExpression_(ALLOW_IN); elements.push(new TemplateSubstitution(expression.location, expression)); while (expression.type !== SYNTAX_ERROR_TREE) { token = nextTemplateLiteralToken(); if (token.type === ERROR || token.type === END_OF_FILE) break; elements.push(new TemplateLiteralPortion(token.location, token)); if (token.type === TEMPLATE_TAIL) break; expression = this.parseExpression_(ALLOW_IN); elements.push(new TemplateSubstitution(expression.location, expression)); } return new TemplateLiteralExpression(this.getTreeLocation_(start), operand, elements); }, parseTypeAnnotationOpt_: function() { if (this.options_.types && this.eatOpt_(COLON)) { return this.parseType_(); } return null; }, parseType_: function() { switch (peekType()) { case NEW: return this.parseConstructorType_(); case OPEN_PAREN: case OPEN_ANGLE: return this.parseFunctionType_(); } var start = this.getTreeStartLocation_(); var elementType = this.parsePrimaryType_(); return this.parseUnionTypeSuffix_(start, elementType); }, parsePrimaryType_: function() { var start = this.getTreeStartLocation_(); var elementType, token; switch (peekType()) { case VOID: token = nextToken(); elementType = new PredefinedType(this.getTreeLocation_(start), token); break; case IDENTIFIER: switch (peekToken().value) { case 'any': case 'boolean': case 'number': case 'string': case 'symbol': token = nextToken(); elementType = new PredefinedType(this.getTreeLocation_(start), token); break; default: elementType = this.parseTypeReference_(); } break; case TYPEOF: elementType = this.parseTypeQuery_(start); break; case OPEN_CURLY: elementType = this.parseObjectType_(); break; default: return this.parseUnexpectedToken_(); } return this.parseArrayTypeSuffix_(start, elementType); }, parseTypeReference_: function() { var start = this.getTreeStartLocation_(); var typeName = this.parseTypeName_(); var args = null; if (peek(OPEN_ANGLE)) { var args$__19 = this.parseTypeArguments_(); return new TypeReference(this.getTreeLocation_(start), typeName, args$__19); } return typeName; }, parseUnionTypeSuffix_: function(start, elementType) { if (peek(BAR)) { var types = [elementType]; this.eat_(BAR); while (true) { types.push(this.parsePrimaryType_()); if (!this.eatIf_(BAR)) { break; } } return new UnionType(this.getTreeLocation_(start), types); } return elementType; }, parseArrayTypeSuffix_: function(start, elementType) { var token = peekTokenNoLineTerminator(); if (token && token.type === OPEN_SQUARE) { this.eat_(OPEN_SQUARE); this.eat_(CLOSE_SQUARE); elementType = new ArrayType(this.getTreeLocation_(start), elementType); return this.parseArrayTypeSuffix_(start, elementType); } return elementType; }, parseTypeArguments_: function() { var start = this.getTreeStartLocation_(); this.eat_(OPEN_ANGLE); var args = [this.parseType_()]; while (peek(COMMA)) { this.eat_(COMMA); args.push(this.parseType_()); } var token = nextCloseAngle(); if (token.type !== CLOSE_ANGLE) { return this.parseUnexpectedToken_(token); } return new TypeArguments(this.getTreeLocation_(start), args); }, parseConstructorType_: function() { var start = this.getTreeStartLocation_(); this.eat_(NEW); var typeParameters = this.parseTypeParametersOpt_(); this.eat_(OPEN_PAREN); var parameterList = this.parseFormalParameters_(); this.eat_(CLOSE_PAREN); this.eat_(ARROW); var returnType = this.parseType_(); return new ConstructorType(this.getTreeLocation_(start), typeParameters, parameterList, returnType); }, parseObjectType_: function() { var start = this.getTreeStartLocation_(); var typeMembers = []; this.eat_(OPEN_CURLY); var type; while (this.peekTypeMember_(type = peekType())) { typeMembers.push(this.parseTypeMember_(type)); if (!this.eatIf_(SEMI_COLON)) { break; } } this.eat_(CLOSE_CURLY); return new ObjectType(this.getTreeLocation_(start), typeMembers); }, peekTypeMember_: function(type) { switch (type) { case NEW: case OPEN_PAREN: case OPEN_ANGLE: case OPEN_SQUARE: case IDENTIFIER: case STRING: case NUMBER: return true; default: return peekToken().isKeyword(); } }, parseTypeMember_: function(type) { switch (type) { case NEW: return this.parseConstructSignature_(); case OPEN_PAREN: case OPEN_ANGLE: return this.parseCallSignature_(); case OPEN_SQUARE: return this.parseIndexSignature_(); } var start = this.getTreeStartLocation_(); var propertyName = this.parseLiteralPropertyName_(); var isOpt = this.eatIf_(QUESTION); type = peekType(); if (type === OPEN_ANGLE || type === OPEN_PAREN) { var callSignature = this.parseCallSignature_(); return new MethodSignature(this.getTreeLocation_(start), propertyName, isOpt, callSignature); } var typeAnnotation = this.parseTypeAnnotationOpt_(); return new PropertySignature(this.getTreeLocation_(start), propertyName, isOpt, typeAnnotation); }, parseCallSignature_: function() { var start = this.getTreeStartLocation_(); var typeParameters = this.parseTypeParametersOpt_(); this.eat_(OPEN_PAREN); var parameterList = this.parseFormalParameters_(); this.eat_(CLOSE_PAREN); var returnType = this.parseTypeAnnotationOpt_(); return new CallSignature(this.getTreeLocation_(start), typeParameters, parameterList, returnType); }, parseConstructSignature_: function() { var start = this.getTreeStartLocation_(); this.eat_(NEW); var typeParameters = this.parseTypeParametersOpt_(); this.eat_(OPEN_PAREN); var parameterList = this.parseFormalParameters_(); this.eat_(CLOSE_PAREN); var returnType = this.parseTypeAnnotationOpt_(); return new ConstructSignature(this.getTreeLocation_(start), typeParameters, parameterList, returnType); }, parseIndexSignature_: function() { var start = this.getTreeStartLocation_(); this.eat_(OPEN_SQUARE); var id = this.eatId_(); this.eat_(COLON); var typeName; var typeStart = this.getTreeStartLocation_(); if (this.peekPredefinedString_('string')) { typeName = this.eatId_('string'); } else { typeName = this.eatId_('number'); } var indexType = new PredefinedType(this.getTreeLocation_(typeStart), typeName); this.eat_(CLOSE_SQUARE); this.eat_(COLON); var typeAnnotation = this.parseType_(); return new IndexSignature(this.getTreeLocation_(start), id, indexType, typeAnnotation); }, parseFunctionType_: function() { var start = this.getTreeStartLocation_(); var typeParameters = this.parseTypeParametersOpt_(); this.eat_(OPEN_PAREN); var parameterList = this.parseFormalParameters_(); this.eat_(CLOSE_PAREN); this.eat_(ARROW); var returnType = this.parseType_(); return new FunctionType(this.getTreeLocation_(start), typeParameters, parameterList, returnType); }, parseTypeQuery_: function(start) { throw 'NYI'; }, peekTypeParameters_: function() { return peek(OPEN_ANGLE); }, parseTypeParametersOpt_: function() { if (peek(OPEN_ANGLE)) { return this.parseTypeParameters_(); } return null; }, parseTypeParameters_: function() { var start = this.getTreeStartLocation_(); this.eat_(OPEN_ANGLE); var parameters = [this.parseTypeParameter_()]; while (peek(COMMA)) { this.eat_(COMMA); parameters.push(this.parseTypeParameter_()); } this.eat_(CLOSE_ANGLE); return new TypeParameters(this.getTreeLocation_(start), parameters); }, parseTypeParameter_: function() { var start = this.getTreeStartLocation_(); var id = this.eatId_(); var extendsType = null; if (this.eatIf_(EXTENDS)) { extendsType = this.parseType_(); } return new TypeParameter(this.getTreeLocation_(start), id, extendsType); }, parseNamedOrPredefinedType_: function() { var start = this.getTreeStartLocation_(); switch (peekToken().value) { case 'any': case 'number': case 'boolean': case 'string': { var token = nextToken(); return new PredefinedType(this.getTreeLocation_(start), token); } default: return this.parseTypeName_(); } }, parseTypeName_: function() { var start = this.getTreeStartLocation_(); var id = this.eatId_(); var typeName = new TypeName(this.getTreeLocation_(start), null, id); while (this.eatIf_(PERIOD)) { var memberName = this.eatIdName_(); typeName = new TypeName(this.getTreeLocation_(start), typeName, memberName); } return typeName; }, parseInterfaceDeclaration_: function() { var start = this.getTreeStartLocation_(); this.eat_(INTERFACE); var name = this.eatId_(); var typeParameters = this.parseTypeParametersOpt_(); var extendsClause; if (this.eatIf_(EXTENDS)) { extendsClause = this.parseInterfaceExtendsClause_(); } else { extendsClause = []; } var objectType = this.parseObjectType_(); return new InterfaceDeclaration(this.getTreeLocation_(start), name, typeParameters, extendsClause, objectType); }, parseInterfaceExtendsClause_: function() { var result = [this.parseTypeReference_()]; while (this.eatIf_(COMMA)) { result.push(this.parseTypeReference_()); } return result; }, parseAnnotatedDeclarations_: function(parsingModuleItem) { this.pushAnnotations_(); var declaration; var type = peekType(); if (parsingModuleItem) { declaration = this.parseModuleItem_(type); } else { declaration = this.parseStatementListItem_(type); } if (this.annotations_.length > 0) { this.reportError_(this.annotations_[0].location, 'Unsupported annotated expression'); } return declaration; }, parseAnnotations_: function() { var annotations = []; while (this.eatIf_(AT)) { annotations.push(this.parseAnnotation_()); } return annotations; }, pushAnnotations_: function() { this.annotations_ = this.parseAnnotations_(); }, popAnnotations_: function() { var annotations = this.annotations_; this.annotations_ = []; return annotations; }, parseAnnotation_: function() { var start = this.getTreeStartLocation_(); var expression = this.parseMemberExpressionNoNew_(); var args = null; if (peek(OPEN_PAREN)) args = this.parseArguments_(); return new Annotation(this.getTreeLocation_(start), expression, args); }, parseTypeAliasDeclaration_: function() { var start = this.getTreeStartLocation_(); this.eatId_(TYPE); var name = this.eatId_(); this.eat_(EQUAL); var type = this.parseType_(); this.eatPossibleImplicitSemiColon_(); return new TypeAliasDeclaration(this.getTreeLocation_(start), name, type); }, parseJsxElement_: function() { var token = this.eatJsx_(OPEN_ANGLE); return this.parseJsxElementContinuation_(token.location.start); }, parseJsxElementContinuation_: function(start) { var name = this.parseJsxElementName_(); var attrs = this.parseJsxAttributes_(); var children = []; switch (peekJsxToken().type) { case SLASH: nextJsxToken(); this.eat_(CLOSE_ANGLE); break; case CLOSE_ANGLE: { nextJsxTextToken(); loop: while (true) { var token = nextJsxTextToken(); switch (token.type) { case STRING: { children.push(new JsxText(token.location, token)); continue; } case OPEN_CURLY: { var start$__20 = token.location.start; var expression = null; if (!peek(CLOSE_CURLY)) { expression = this.parseAssignmentExpression_(ALLOW_IN); } this.eatJsx_(CLOSE_CURLY); var placeHolder = new JsxPlaceholder(this.getTreeLocation_(start$__20), expression); children.push(placeHolder); continue; } case OPEN_ANGLE: { var start$__21 = token.location.start; if (peekJsxToken().type === SLASH) { nextJsxToken(); break loop; } var subElement = this.parseJsxElementContinuation_(start$__21); children.push(subElement); resetScanner(subElement.location.end.offset); continue; } default: return this.parseSyntaxError_('Unexpected token'); } } var closeName = this.parseJsxElementName_(); if (!jsxNamesEqual(name, closeName)) { this.reportError_(closeName.location, ("Non matching JSX closing tag. Expected " + jsxNameToString(name) + ", found " + jsxNameToString(closeName))); } this.eat_(CLOSE_ANGLE); break; } default: return this.parseSyntaxError_('Unexpected token'); } var element = new JsxElement(this.getTreeLocation_(start), name, attrs, children); return element; }, parseJsxElementName_: function() { var tokens = []; var id = this.eatJsx_(JSX_IDENTIFIER); var start = id.location.start; tokens.push(id); while (peekJsxToken().type === PERIOD) { nextJsxToken(); var id$__22 = this.eatJsx_(JSX_IDENTIFIER); tokens.push(id$__22); } return new JsxElementName(this.getTreeLocation_(start), tokens); }, parseJsxAttributes_: function() { var attributes = []; loop: while (true) { switch (peekJsxToken().type) { case JSX_IDENTIFIER: attributes.push(this.parseJsxAttribute_()); break; case OPEN_CURLY: attributes.push(this.parseJsxSpreadAttribute_()); break; default: break loop; } } return attributes; }, parseJsxAttribute_: function() { var name = this.eatJsx_(JSX_IDENTIFIER); var start = name.location.start; var value = null; if (peekJsxToken().type === EQUAL) { this.eatJsx_(EQUAL); value = this.parseJsxAttributeValue_(); } return new JsxAttribute(this.getTreeLocation_(start), name, value); }, parseJsxAttributeValue_: function() { var token = peekJsxToken(); var start = token.location.start; switch (token.type) { case STRING: nextJsxToken(); return new LiteralExpression(this.getTreeLocation_(start), token); case OPEN_CURLY: { nextJsxToken(); var expr = this.parseAssignmentExpression_(ALLOW_IN); this.eatJsx_(CLOSE_CURLY); return new JsxPlaceholder(this.getTreeLocation_(start), expr); } case OPEN_ANGLE: return this.parseJsxElement_(); } return this.parseSyntaxError_('Unexpected token'); }, parseJsxSpreadAttribute_: function() { var token = peekJsxToken(); var start = token.location.start; nextJsxToken(); this.eatJsx_(DOT_DOT_DOT); var expr = this.parseAssignmentExpression_(ALLOW_IN); this.eatJsx_(CLOSE_CURLY); return new JsxSpreadAttribute(this.getTreeLocation_(start), expr); }, eatPossibleImplicitSemiColon_: function() { var token = peekTokenNoLineTerminator(); if (!token) return; switch (token.type) { case SEMI_COLON: nextToken(); return; case END_OF_FILE: case CLOSE_CURLY: return; } this.reportError_(token.location, 'Semi-colon expected'); }, peekImplicitSemiColon_: function() { switch (peekType()) { case SEMI_COLON: case CLOSE_CURLY: case END_OF_FILE: return true; } var token = peekTokenNoLineTerminator(); return token === null; }, eatOpt_: function(expectedTokenType) { if (peek(expectedTokenType)) return nextToken(); return null; }, eatIdOpt_: function() { return peek(IDENTIFIER) ? this.eatId_() : null; }, eatId_: function() { var expected = arguments[0]; var token = nextToken(); if (token.type === IDENTIFIER) { if (expected && token.value !== expected) this.reportExpectedError_(token, expected); return token; } if (token.isStrictKeyword()) { if (this.strictMode_) { this.reportReservedIdentifier_(token); } else { return new IdentifierToken(token.location, token.type); } } else { this.reportExpectedError_(token, expected || 'identifier'); } return token; }, eatIdName_: function() { var t = nextToken(); if (t.type !== IDENTIFIER) { if (!t.isKeyword()) { this.reportExpectedError_(t, 'identifier'); return null; } return new IdentifierToken(t.location, t.type); } return t; }, eat_: function(expectedTokenType) { return this.isExpectedToken_(nextToken(), expectedTokenType); }, eatIf_: function(expectedTokenType) { if (peek(expectedTokenType)) { nextToken(); return true; } return false; }, eatJsx_: function(expectedTokenType) { return this.isExpectedToken_(nextJsxToken(), expectedTokenType); }, isExpectedToken_: function(token, expectedTokenType) { if (token.type !== expectedTokenType) { this.reportExpectedError_(token, expectedTokenType); } return token; }, reportExpectedError_: function(token, expected) { this.reportError_(token.location, ("Unexpected token " + token)); }, getTreeStartLocation_: function() { return peekLocation().start; }, getTreeEndLocation_: function() { return getLastToken().location.end; }, getTreeLocation_: function(start) { return new SourceRange(start, this.getTreeEndLocation_()); }, handleComment: function(range) {}, isAtEnd: function() { return isAtEnd(); }, reportError_: function(location, message) { this.errorReporter_.reportError(location, message); }, reportReservedIdentifier_: function(token) { this.reportError_(token.location, (token.type + " is a reserved identifier")); }, validateAssignmentTarget_: function(tree, operation) { if (!tree.isPattern() && !isValidSimpleAssignmentTarget(tree, this.strictMode_)) { this.reportError_(tree.location, ("Invalid left-hand side expression in " + operation)); } } }, {}); }(); function jsxNamesEqual(name, other) { if (name.names.length !== other.names.length) { return false; } for (var i = 0; i < name.names.length; i++) { if (name.names[i].value !== other.names[i].value) { return false; } } return true; } function jsxNameToString(name) { return name.names.join('.'); } return {get Parser() { return Parser; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/SourcePosition.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/SourcePosition.js"; var SourcePosition = function() { function SourcePosition(source, offset) { this.source = source; this.offset = offset; this.line_ = -1; this.column_ = -1; } return ($traceurRuntime.createClass)(SourcePosition, { get line() { if (this.line_ === -1) this.line_ = this.source.lineNumberTable.getLine(this.offset); return this.line_; }, get column() { if (this.column_ === -1) this.column_ = this.source.lineNumberTable.getColumn(this.offset); return this.column_; }, toString: function() { var name = this.source ? this.source.name : ''; return (name + ":" + (this.line + 1) + ":" + (this.column + 1)); } }, {}); }(); return {get SourcePosition() { return SourcePosition; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/LineNumberTable.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/LineNumberTable.js"; var SourcePosition = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SourcePosition.js", "traceur@0.0.112/src/syntax/LineNumberTable.js")).SourcePosition; var SourceRange = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/SourceRange.js", "traceur@0.0.112/src/syntax/LineNumberTable.js")).SourceRange; var isLineTerminator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Scanner.js", "traceur@0.0.112/src/syntax/LineNumberTable.js")).isLineTerminator; var MAX_INT_REPRESENTATION = 9007199254740992; function computeLineStartOffsets(source) { var lineStartOffsets = [0]; var k = 1; for (var index = 0; index < source.length; index++) { var code = source.charCodeAt(index); if (isLineTerminator(code)) { if (code === 13 && source.charCodeAt(index + 1) === 10) { index++; } lineStartOffsets[k++] = index + 1; } } lineStartOffsets[k++] = MAX_INT_REPRESENTATION; return lineStartOffsets; } var LineNumberTable = function() { function LineNumberTable(sourceFile) { this.sourceFile_ = sourceFile; this.lineStartOffsets_ = null; this.lastLine_ = 0; this.lastOffset_ = -1; } return ($traceurRuntime.createClass)(LineNumberTable, { ensureLineStartOffsets_: function() { if (!this.lineStartOffsets_) { this.lineStartOffsets_ = computeLineStartOffsets(this.sourceFile_.contents); } }, getSourcePosition: function(offset) { return new SourcePosition(this.sourceFile_, offset); }, getLine: function(offset) { if (offset === this.lastOffset_) return this.lastLine_; this.ensureLineStartOffsets_(); if (offset < 0) return 0; var line; if (offset < this.lastOffset_) { for (var i = this.lastLine_; i >= 0; i--) { if (this.lineStartOffsets_[i] <= offset) { line = i; break; } } } else { for (var i$__1 = this.lastLine_; true; i$__1++) { if (this.lineStartOffsets_[i$__1] > offset) { line = i$__1 - 1; break; } } } this.lastLine_ = line; this.lastOffset_ = offset; return line; }, offsetOfLine: function(line) { this.ensureLineStartOffsets_(); return this.lineStartOffsets_[line]; }, getColumn: function(offset) { var line = this.getLine(offset); return offset - this.lineStartOffsets_[line]; }, getSourceRange: function(startOffset, endOffset) { return new SourceRange(this.getSourcePosition(startOffset), this.getSourcePosition(endOffset)); } }, {}); }(); return {get LineNumberTable() { return LineNumberTable; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/SourceFile.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/SourceFile.js"; var LineNumberTable = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LineNumberTable.js", "traceur@0.0.112/src/syntax/SourceFile.js")).LineNumberTable; var SourceFile = function() { function SourceFile(name, contents) { this.name = name; this.contents = contents; this.lineNumberTable = new LineNumberTable(this); } return ($traceurRuntime.createClass)(SourceFile, {}, {}); }(); return {get SourceFile() { return SourceFile; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/PlaceholderParser.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/PlaceholderParser.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")), ARGUMENT_LIST = $__2.ARGUMENT_LIST, BLOCK = $__2.BLOCK, EXPRESSION_STATEMENT = $__2.EXPRESSION_STATEMENT, FUNCTION_BODY = $__2.FUNCTION_BODY, IDENTIFIER_EXPRESSION = $__2.IDENTIFIER_EXPRESSION; var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/IdentifierToken.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).IdentifierToken; var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).LiteralToken; var CollectingErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/CollectingErrorReporter.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).CollectingErrorReporter; var Options = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Options.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).Options; var ParseTree = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTree.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).ParseTree; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).ParseTreeTransformer; var Parser = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Parser.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).Parser; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")), LiteralExpression = $__10.LiteralExpression, LiteralPropertyName = $__10.LiteralPropertyName, TypeName = $__10.TypeName; var SourceFile = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/SourceFile.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).SourceFile; var IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")).IDENTIFIER; var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/PlaceholderParser.js")), createArrayLiteral = $__13.createArrayLiteral, createBindingIdentifier = $__13.createBindingIdentifier, createBlock = $__13.createBlock, createBooleanLiteral = $__13.createBooleanLiteral, createCommaExpression = $__13.createCommaExpression, createExpressionStatement = $__13.createExpressionStatement, createFunctionBody = $__13.createFunctionBody, createIdentifierExpression = $__13.createIdentifierExpression, createIdentifierToken = $__13.createIdentifierToken, createMemberExpression = $__13.createMemberExpression, createNullLiteral = $__13.createNullLiteral, createNumberLiteral = $__13.createNumberLiteral, createParenExpression = $__13.createParenExpression, createStringLiteral = $__13.createStringLiteral, createVoid0 = $__13.createVoid0; var NOT_FOUND = {}; function makeParseFunction(doParse) { var cache = new Map(); return function(sourceLiterals) { for (var values = [], $__1 = 1; $__1 < arguments.length; $__1++) values[$__1 - 1] = arguments[$__1]; return parse(sourceLiterals, values, doParse, cache); }; } var parseExpression = makeParseFunction(function(p) { return p.parseExpression(); }); var parseStatement = makeParseFunction(function(p) { return p.parseStatement(); }); var parseModule = makeParseFunction(function(p) { return p.parseModule(); }); var parseScript = makeParseFunction(function(p) { return p.parseScript(); }); var parseStatements = makeParseFunction(function(p) { return p.parseStatements(); }); var parsePropertyDefinition = makeParseFunction(function(p) { return p.parsePropertyDefinition(); }); function parse(sourceLiterals, values, doParse, cache) { var tree = cache.get(sourceLiterals); if (!tree) { var source = insertPlaceholderIdentifiers(sourceLiterals); var errorReporter = new CollectingErrorReporter(); var parser = getParser(source, errorReporter); tree = doParse(parser); if (errorReporter.hadError() || !tree || !parser.isAtEnd()) { throw new Error(("Internal error trying to parse:\n\n" + source + "\n\n" + errorReporter.errorsAsString())); } cache.set(sourceLiterals, tree); } if (!values.length) return tree; if (tree instanceof ParseTree) return new PlaceholderTransformer(values).transformAny(tree); return new PlaceholderTransformer(values).transformList(tree); } var PREFIX = '$__placeholder__'; function insertPlaceholderIdentifiers(sourceLiterals) { var source = sourceLiterals[0]; for (var i = 1; i < sourceLiterals.length; i++) { source += PREFIX + String(i - 1) + sourceLiterals[i]; } return source; } var counter = 0; function getParser(source, errorReporter) { var file = new SourceFile(null, source); var options = new Options(); options.experimental = true; return new Parser(file, errorReporter, options); } function convertValueToExpression(value) { if (value instanceof ParseTree) return value; if (value instanceof IdentifierToken) return createIdentifierExpression(value); if (value instanceof LiteralToken) return new LiteralExpression(value.location, value); if (Array.isArray(value)) { if (value[0] instanceof ParseTree) { if (value.length === 1) return value[0]; if (value[0].isStatement()) return createBlock(value); else return createParenExpression(createCommaExpression(value)); } return createArrayLiteral(value.map(convertValueToExpression)); } if (value === null) return createNullLiteral(); if (value === undefined) return createVoid0(); switch (typeof value) { case 'string': return createStringLiteral(value); case 'boolean': return createBooleanLiteral(value); case 'number': return createNumberLiteral(value); } throw new Error('Not implemented'); } function convertValueToIdentifierToken(value) { if (value instanceof IdentifierToken) return value; return createIdentifierToken(value); } function convertValueToType(value) { if (value === null) return null; if (value instanceof ParseTree) return value; if (typeof value === 'string') { return new TypeName(null, null, convertValueToIdentifierToken(value)); } if (value instanceof IdentifierToken) { return new TypeName(null, null, value); } throw new Error('Not implemented'); } var PlaceholderTransformer = function($__super) { function PlaceholderTransformer(values) { $traceurRuntime.superConstructor(PlaceholderTransformer).call(this); this.values = values; } return ($traceurRuntime.createClass)(PlaceholderTransformer, { getValueAt: function(index) { return this.values[index]; }, getValue_: function(str) { if (str.indexOf(PREFIX) !== 0) return NOT_FOUND; return this.getValueAt(Number(str.slice(PREFIX.length))); }, transformIdentifierExpression: function(tree) { var value = this.getValue_(tree.identifierToken.value); if (value === NOT_FOUND) return tree; return convertValueToExpression(value); }, transformBindingIdentifier: function(tree) { var value = this.getValue_(tree.identifierToken.value); if (value === NOT_FOUND) return tree; return createBindingIdentifier(value); }, transformExpressionStatement: function(tree) { if (tree.expression.type === IDENTIFIER_EXPRESSION) { var transformedExpression = this.transformIdentifierExpression(tree.expression); if (transformedExpression === tree.expression) return tree; if (transformedExpression.isStatementListItem() || transformedExpression.type === FUNCTION_BODY) { return transformedExpression; } return createExpressionStatement(transformedExpression); } return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformExpressionStatement").call(this, tree); }, transformBlock: function(tree) { if (tree.statements.length === 1 && tree.statements[0].type === EXPRESSION_STATEMENT) { var transformedStatement = this.transformExpressionStatement(tree.statements[0]); if (transformedStatement === tree.statements[0]) return tree; if (transformedStatement.type === BLOCK) return transformedStatement; } return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformBlock").call(this, tree); }, transformFunctionBody: function(tree) { if (tree.statements.length === 1 && tree.statements[0].type === EXPRESSION_STATEMENT) { var transformedStatement = this.transformExpressionStatement(tree.statements[0]); if (transformedStatement.type === FUNCTION_BODY) return transformedStatement; if (transformedStatement === tree.statements[0]) return tree; if (transformedStatement.type === BLOCK) return createFunctionBody(transformedStatement.statements); } return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformFunctionBody").call(this, tree); }, transformMemberExpression: function(tree) { var value = this.getValue_(tree.memberName.value); if (value === NOT_FOUND) return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformMemberExpression").call(this, tree); var operand = this.transformAny(tree.operand); return createMemberExpression(operand, value); }, transformLiteralPropertyName: function(tree) { if (tree.literalToken.type === IDENTIFIER) { var value = this.getValue_(tree.literalToken.value); if (value !== NOT_FOUND) { return new LiteralPropertyName(null, convertValueToIdentifierToken(value)); } } return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformLiteralPropertyName").call(this, tree); }, transformArgumentList: function(tree) { if (tree.args.length === 1 && tree.args[0].type === IDENTIFIER_EXPRESSION) { var arg0 = this.transformAny(tree.args[0]); if (arg0 === tree.args[0]) return tree; if (arg0.type === ARGUMENT_LIST) return arg0; } return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformArgumentList").call(this, tree); }, transformTypeName: function(tree) { var value = this.getValue_(tree.name.value); if (value === NOT_FOUND) return $traceurRuntime.superGet(this, PlaceholderTransformer.prototype, "transformTypeName").call(this, tree); var moduleName = this.transformAny(tree.moduleName); if (moduleName !== null) { return new TypeName(null, moduleName, convertValueToIdentifierToken(value)); } return convertValueToType(value); } }, {}, $__super); }(ParseTreeTransformer); return { get parseExpression() { return parseExpression; }, get parseStatement() { return parseStatement; }, get parseModule() { return parseModule; }, get parseScript() { return parseScript; }, get parseStatements() { return parseStatements; }, get parsePropertyDefinition() { return parsePropertyDefinition; }, get PlaceholderTransformer() { return PlaceholderTransformer; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/PrependStatements.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/PrependStatements.js"; function prependStatements(statements) { var $__1; for (var statementsToPrepend = [], $__0 = 1; $__0 < arguments.length; $__0++) statementsToPrepend[$__0 - 1] = arguments[$__0]; if (!statements.length) return statementsToPrepend; if (!statementsToPrepend.length) return statements; var transformed = []; var inProlog = true; statements.forEach(function(statement) { var $__1; if (inProlog && !statement.isDirectivePrologue()) { ($__1 = transformed).push.apply($__1, $traceurRuntime.spread(statementsToPrepend)); inProlog = false; } transformed.push(statement); }); if (inProlog) { ($__1 = transformed).push.apply($__1, $traceurRuntime.spread(statementsToPrepend)); } return transformed; } return {get prependStatements() { return prependStatements; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js"; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")), CONST = $__5.CONST, VAR = $__5.VAR; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")), ImportDeclaration = $__6.ImportDeclaration, ImportedBinding = $__6.ImportedBinding, ImportSpecifier = $__6.ImportSpecifier, ImportSpecifierSet = $__6.ImportSpecifierSet, Module = $__6.Module, ModuleSpecifier = $__6.ModuleSpecifier, Script = $__6.Script; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")).StringSet; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")), createBindingIdentifier = $__8.createBindingIdentifier, createIdentifierToken = $__8.createIdentifierToken, createIdentifierExpression = $__8.createIdentifierExpression, createMemberExpression = $__8.createMemberExpression, createStringLiteral = $__8.createStringLiteral, createStringLiteralToken = $__8.createStringLiteralToken, createVariableStatement = $__8.createVariableStatement; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")).parseExpression; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/ImportRuntimeTrait.js")).prependStatements; function toTempName(name) { return ("$__" + name); } function getDeclarationType(options) { return options.parseOptions.blockBinding && !options.transformOptions.blockBinding ? CONST : VAR; } function ImportRuntimeTrait(ParseTreeTransformerClass) { return function($__super) { function $__0() { var $__4; for (var args = [], $__3 = 0; $__3 < arguments.length; $__3++) args[$__3] = arguments[$__3]; ($__4 = $traceurRuntime.superConstructor($__0)).call.apply($__4, $traceurRuntime.spread([this], args)); this.importedNames = new StringSet(); this._existingImports = new StringSet(); } return ($traceurRuntime.createClass)($__0, { getRuntimeExpression: function(name) { if (this.options.importRuntime) { this.addImportedName(name); return createIdentifierExpression(toTempName(name)); } return createMemberExpression('$traceurRuntime', name); }, get requiredNames() { return this.importedNames; }, addImportedName: function(name) { this.importedNames.add(name); }, transformScript: function(tree) { var transformed = $traceurRuntime.superGet(this, $__0.prototype, "transformScript").call(this, tree); if (tree === transformed) { return tree; } if (!this.options.importRuntime) { return transformed; } var scriptItemList = this.addRuntimeImports(transformed.scriptItemList); return new Script(tree.location, scriptItemList, tree.moduleName); }, transformModule: function(tree) { var transformed = $traceurRuntime.superGet(this, $__0.prototype, "transformModule").call(this, tree); if (tree === transformed) { return tree; } if (!this.options.importRuntime) { return transformed; } var scriptItemList = this.addRuntimeImports(transformed.scriptItemList); return new Module(tree.location, scriptItemList, tree.moduleName); }, transformImportedBinding: function(tree) { this._existingImports.add(tree.binding.getStringValue()); return $traceurRuntime.superGet(this, $__0.prototype, "transformImportedBinding").call(this, tree); }, _getModuleSpecifier: function(name) { var base = 'traceur/dist/commonjs'; if (this.options.modules === 'parse') { base = 'traceur/src'; } var moduleId = createStringLiteralToken((base + "/runtime/modules/" + name + ".js")); return new ModuleSpecifier(null, moduleId); }, getRuntimeImports: function() { var $__2 = this; return this.importedNames.valuesAsArray().filter(function(name) { return !$__2._existingImports.has(toTempName(name)); }).map(function(name) { var def = createIdentifierToken('default'); var binding = new ImportedBinding(null, createBindingIdentifier(toTempName(name))); var specifier = new ImportSpecifier(null, binding, def); return new ImportDeclaration(null, new ImportSpecifierSet(null, [specifier]), $__2._getModuleSpecifier(name)); }); }, addRuntimeImports: function(scriptItemList) { var runtimeImports = this.getRuntimeImports(); return prependStatements.apply((void 0), $traceurRuntime.spread([scriptItemList], runtimeImports)); } }, {}, $__super); }(ParseTreeTransformerClass); } return {get default() { return ImportRuntimeTrait; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/TempVarTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/TempVarTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")).ParseTreeTransformer; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")), Module = $__6.Module, Script = $__6.Script; var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")).ARGUMENTS; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")).StringSet; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")), LET = $__9.LET, VAR = $__9.VAR; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")), createFunctionBody = $__10.createFunctionBody, createThisExpression = $__10.createThisExpression, createIdentifierExpression = $__10.createIdentifierExpression, createVariableDeclaration = $__10.createVariableDeclaration, createVariableDeclarationList = $__10.createVariableDeclarationList, createVariableStatement = $__10.createVariableStatement; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/TempVarTransformer.js")).prependStatements; var TempVarStatement = function() { function TempVarStatement(name, initializer) { this.name = name; this.initializer = initializer; } return ($traceurRuntime.createClass)(TempVarStatement, {}, {}); }(); var TempScope = function() { function TempScope() { this.identifiers = []; } return ($traceurRuntime.createClass)(TempScope, { push: function(identifier) { this.identifiers.push(identifier); }, pop: function() { return this.identifiers.pop(); }, release: function(obj) { for (var i = this.identifiers.length - 1; i >= 0; i--) { obj.releaseTempName(this.identifiers[i]); } } }, {}); }(); var VarScope = function() { function VarScope(options) { this.thisName = null; this.argumentName = null; this.tempVarStatements = []; this.declarationType_ = options.blockBinding && !options.transformOptions.blockBinding ? LET : VAR; } return ($traceurRuntime.createClass)(VarScope, { push: function(tempVarStatement) { this.tempVarStatements.push(tempVarStatement); }, pop: function() { return this.tempVarStatements.pop(); }, release: function(obj) { for (var i = this.tempVarStatements.length - 1; i >= 0; i--) { obj.releaseTempName(this.tempVarStatements[i].name); } }, isEmpty: function() { return !this.tempVarStatements.length; }, createVariableStatement: function() { var declarations = []; var seenNames = new StringSet(); for (var i = 0; i < this.tempVarStatements.length; i++) { var $__4 = this.tempVarStatements[i], name = $__4.name, initializer = $__4.initializer; if (seenNames.has(name)) { if (initializer) throw new Error('Invalid use of TempVarTransformer'); continue; } seenNames.add(name); declarations.push(createVariableDeclaration(name, initializer)); } return createVariableStatement(createVariableDeclarationList(this.declarationType_, declarations)); } }, {}); }(); var TempVarTransformer = function($__super) { function TempVarTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(TempVarTransformer).call(this); this.identifierGenerator = identifierGenerator; this.reporter = reporter; this.options = options; this.tempVarStack_ = [new VarScope(this.options)]; this.tempScopeStack_ = [new TempScope()]; this.namePool_ = []; } return ($traceurRuntime.createClass)(TempVarTransformer, { transformStatements_: function(statements) { this.tempVarStack_.push(new VarScope(this.options)); var transformedStatements = this.transformList(statements); var vars = this.tempVarStack_.pop(); if (vars.isEmpty()) return transformedStatements; var variableStatement = vars.createVariableStatement(); vars.release(this); return prependStatements(transformedStatements, variableStatement); }, transformScript: function(tree) { var scriptItemList = this.transformStatements_(tree.scriptItemList); if (scriptItemList === tree.scriptItemList) { return tree; } return new Script(tree.location, scriptItemList, tree.moduleName); }, transformModule: function(tree) { var scriptItemList = this.transformStatements_(tree.scriptItemList); if (scriptItemList === tree.scriptItemList) { return tree; } return new Module(tree.location, scriptItemList, tree.moduleName); }, transformFunctionBody: function(tree) { this.pushTempScope(); var statements = this.transformStatements_(tree.statements); this.popTempScope(); if (statements === tree.statements) return tree; return createFunctionBody(statements); }, getTempIdentifier: function() { var name = this.getName_(); this.tempScopeStack_[this.tempScopeStack_.length - 1].push(name); return name; }, getName_: function() { return this.namePool_.length ? this.namePool_.pop() : this.identifierGenerator.generateUniqueIdentifier(); }, addTempVar: function() { var initializer = arguments[0] !== (void 0) ? arguments[0] : null; var vars = this.tempVarStack_[this.tempVarStack_.length - 1]; var name = this.getName_(); vars.push(new TempVarStatement(name, initializer)); return name; }, registerTempVarName: function(name) { var vars = this.tempVarStack_[this.tempVarStack_.length - 1]; vars.push(new TempVarStatement(name, null)); }, addTempVarForThis: function() { var varScope = this.tempVarStack_[this.tempVarStack_.length - 1]; return varScope.thisName || (varScope.thisName = this.addTempVar(createThisExpression())); }, addTempVarForArguments: function() { var varScope = this.tempVarStack_[this.tempVarStack_.length - 1]; return varScope.argumentName || (varScope.argumentName = this.addTempVar(createIdentifierExpression(ARGUMENTS))); }, pushTempScope: function() { this.tempScopeStack_.push(new TempScope()); }, popTempScope: function() { this.tempScopeStack_.pop().release(this); }, releaseTempName: function(name) { this.namePool_.push(name); } }, {}, $__super); }(ParseTreeTransformer); return {get TempVarTransformer() { return TempVarTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/bindingsInDestructuringPattern.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/bindingsInDestructuringPattern.js"; var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/semantics/bindingsInDestructuringPattern.js")).ParseTreeVisitor; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/semantics/bindingsInDestructuringPattern.js")).StringSet; var BindingsInDestructuringPatternVisitor = function($__super) { function BindingsInDestructuringPatternVisitor() { $traceurRuntime.superConstructor(BindingsInDestructuringPatternVisitor).call(this); this.bindings = new StringSet(); } return ($traceurRuntime.createClass)(BindingsInDestructuringPatternVisitor, { visitBindingIdentifier: function(tree) { this.bindings.add(tree.getStringValue()); }, visitBindingElement: function(tree) { this.visitAny(tree.binding); }, visitVariableDeclaration: function(tree) { this.visitAny(tree.lvalue); } }, {}, $__super); }(ParseTreeVisitor); function bindingsInDestructuringPattern(tree) { var v = new BindingsInDestructuringPatternVisitor(); v.visitAny(tree); return v.bindings; } return {get default() { return bindingsInDestructuringPattern; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/DestructuringTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js"; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")), ARRAY_LITERAL = $__8.ARRAY_LITERAL, ARRAY_PATTERN = $__8.ARRAY_PATTERN, ASSIGNMENT_ELEMENT = $__8.ASSIGNMENT_ELEMENT, BINDING_ELEMENT = $__8.BINDING_ELEMENT, BINDING_IDENTIFIER = $__8.BINDING_IDENTIFIER, BLOCK = $__8.BLOCK, CALL_EXPRESSION = $__8.CALL_EXPRESSION, COMPUTED_PROPERTY_NAME = $__8.COMPUTED_PROPERTY_NAME, IDENTIFIER_EXPRESSION = $__8.IDENTIFIER_EXPRESSION, LITERAL_EXPRESSION = $__8.LITERAL_EXPRESSION, MEMBER_EXPRESSION = $__8.MEMBER_EXPRESSION, MEMBER_LOOKUP_EXPRESSION = $__8.MEMBER_LOOKUP_EXPRESSION, OBJECT_LITERAL = $__8.OBJECT_LITERAL, OBJECT_PATTERN_FIELD = $__8.OBJECT_PATTERN_FIELD, OBJECT_PATTERN = $__8.OBJECT_PATTERN, PAREN_EXPRESSION = $__8.PAREN_EXPRESSION, VARIABLE_DECLARATION_LIST = $__8.VARIABLE_DECLARATION_LIST, VARIABLE_STATEMENT = $__8.VARIABLE_STATEMENT; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")), AnonBlock = $__9.AnonBlock, AssignmentElement = $__9.AssignmentElement, BindingElement = $__9.BindingElement, Catch = $__9.Catch, ExportDeclaration = $__9.ExportDeclaration, ForInStatement = $__9.ForInStatement, ForOfStatement = $__9.ForOfStatement, ForOnStatement = $__9.ForOnStatement, VariableDeclarationList = $__9.VariableDeclarationList, VariableStatement = $__9.VariableStatement; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).default; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).TempVarTransformer; var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")), EQUAL = $__12.EQUAL, LET = $__12.LET, VAR = $__12.VAR; var bindingsInDestructuringPattern = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/bindingsInDestructuringPattern.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).default; var $__14 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")), createAssignmentExpression = $__14.createAssignmentExpression, createBindingIdentifier = $__14.createBindingIdentifier, createBlock = $__14.createBlock, createCommaExpression = $__14.createCommaExpression, createExpressionStatement = $__14.createExpressionStatement, createFunctionBody = $__14.createFunctionBody, createIdentifierExpression = $__14.createIdentifierExpression, createMemberExpression = $__14.createMemberExpression, createMemberLookupExpression = $__14.createMemberLookupExpression, createParenExpression = $__14.createParenExpression, createVariableDeclaration = $__14.createVariableDeclaration, createVariableDeclarationList = $__14.createVariableDeclarationList, createVariableStatement = $__14.createVariableStatement; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).parseExpression; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/DestructuringTransformer.js")).prependStatements; var Desugaring = function() { function Desugaring(rvalue) { this.rvalue = rvalue; this.expressions = []; this.pendingExpressions = []; } return ($traceurRuntime.createClass)(Desugaring, { createIterator: function(iterId) { this.pendingExpressions.push(parseExpression($traceurRuntime.getTemplateObject(["", " = ", "[Symbol.iterator]()"]), iterId, this.rvalue)); }, createInitializer: function(expression) { if (this.pendingExpressions.length === 0) return expression; var expressions = this.pendingExpressions; this.pendingExpressions = []; expressions.push(expression); return createParenExpression(createCommaExpression(expressions)); }, skipHole: function(iterId) { this.pendingExpressions.push(parseExpression($traceurRuntime.getTemplateObject(["", ".next()"]), iterId)); } }, {}); }(); var AssignmentExpressionDesugaring = function($__super) { function AssignmentExpressionDesugaring(rvalue) { $traceurRuntime.superConstructor(AssignmentExpressionDesugaring).call(this, rvalue); } return ($traceurRuntime.createClass)(AssignmentExpressionDesugaring, { assign: function(lvalue, rvalue) { lvalue = lvalue instanceof AssignmentElement ? lvalue.assignment : lvalue; rvalue = this.createInitializer(rvalue); this.expressions.push(createAssignmentExpression(lvalue, rvalue)); }, createAssignmentExpression: function(tempId, rvalue) { var $__6; var expressions = this.expressions; expressions.unshift(createAssignmentExpression(tempId, rvalue)); ($__6 = expressions).push.apply($__6, $traceurRuntime.spread(this.pendingExpressions, [tempId])); return createParenExpression(createCommaExpression(expressions)); } }, {}, $__super); }(Desugaring); var VariableDeclarationDesugaring = function($__super) { function VariableDeclarationDesugaring(rvalue) { $traceurRuntime.superConstructor(VariableDeclarationDesugaring).call(this, rvalue); } return ($traceurRuntime.createClass)(VariableDeclarationDesugaring, { assign: function(lvalue, rvalue) { var binding = lvalue instanceof BindingElement ? lvalue.binding : createBindingIdentifier(lvalue); rvalue = this.createInitializer(rvalue); this.expressions.push(createVariableDeclaration(binding, rvalue)); }, get declarations() { return this.expressions; } }, {}, $__super); }(Desugaring); var DestructuringTransformer = function($__super) { function DestructuringTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(DestructuringTransformer).call(this, identifierGenerator, reporter, options); this.parameterDeclarations = null; } return ($traceurRuntime.createClass)(DestructuringTransformer, { transformArrayPattern: function(tree) { throw new Error('unreachable'); }, transformObjectPattern: function(tree) { throw new Error('unreachable'); }, transformBinaryExpression: function(tree) { this.pushTempScope(); var rv; if (tree.operator.type === EQUAL && tree.left.isPattern()) { rv = this.transformAny(this.desugarAssignment_(tree.left, tree.right)); } else { rv = $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformBinaryExpression").call(this, tree); } this.popTempScope(); return rv; }, desugarAssignment_: function(lvalue, rvalue) { var tempId = createIdentifierExpression(this.addTempVar()); var desugaring = new AssignmentExpressionDesugaring(tempId); this.desugarPattern_(desugaring, lvalue); return desugaring.createAssignmentExpression(tempId, rvalue); }, transformVariableDeclarationList: function(tree) { var $__4 = this; if (!hasDestructuring(tree)) { return $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformVariableDeclarationList").call(this, tree); } var desugaredDeclarations = []; tree.declarations.forEach(function(declaration) { var $__6; if (declaration.lvalue.isPattern()) { ($__6 = desugaredDeclarations).push.apply($__6, $traceurRuntime.spread($__4.desugarVariableDeclaration_(declaration))); } else { desugaredDeclarations.push(declaration); } }); var transformedTree = this.transformVariableDeclarationList(createVariableDeclarationList(tree.declarationType, desugaredDeclarations)); return transformedTree; }, transformForInStatement: function(tree) { return this.transformForInOrOfOrOn_(tree, $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformForInStatement"), ForInStatement); }, transformForOfStatement: function(tree) { return this.transformForInOrOfOrOn_(tree, $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformForOfStatement"), ForOfStatement); }, transformForOnStatement: function(tree) { return this.transformForInOrOfOrOn_(tree, $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformForOnStatement"), ForOnStatement); }, transformForInOrOfOrOn_: function(tree, superMethod, constr) { var $__6; if (!tree.initializer.isPattern() && (tree.initializer.type !== VARIABLE_DECLARATION_LIST || !hasDestructuring(tree.initializer))) { return superMethod.call(this, tree); } this.pushTempScope(); var declarationType, lvalue; if (tree.initializer.isPattern()) { declarationType = null; lvalue = tree.initializer; } else { declarationType = tree.initializer.declarationType; lvalue = tree.initializer.declarations[0].lvalue; } var statements = []; var binding = this.desugarBinding_(lvalue, statements, declarationType); var initializer = createVariableDeclarationList(VAR, binding, null); var collection = this.transformAny(tree.collection); var body = this.transformAny(tree.body); if (body.type === BLOCK) ($__6 = statements).push.apply($__6, $traceurRuntime.spread(body.statements)); else statements.push(body); body = createBlock(statements); this.popTempScope(); return new constr(tree.location, initializer, collection, body); }, transformAssignmentElement: function(tree) { throw new Error('unreachable'); }, transformBindingElement: function(tree) { if (!tree.binding.isPattern() || tree.initializer) return tree; if (this.parameterDeclarations === null) { this.parameterDeclarations = []; this.pushTempScope(); } var varName = this.getTempIdentifier(); var binding = createBindingIdentifier(varName); var initializer = createIdentifierExpression(varName); var decl = createVariableDeclaration(tree.binding, initializer); this.parameterDeclarations.push(decl); return new BindingElement(null, binding, null); }, transformFunctionBody: function(tree) { if (this.parameterDeclarations === null) return $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformFunctionBody").call(this, tree); var list = createVariableDeclarationList(VAR, this.parameterDeclarations); var statement = createVariableStatement(list); var statements = prependStatements(tree.statements, statement); var newBody = createFunctionBody(statements); this.parameterDeclarations = null; var result = $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformFunctionBody").call(this, newBody); this.popTempScope(); return result; }, transformCatch: function(tree) { var $__6; if (!tree.binding.isPattern()) return $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformCatch").call(this, tree); var body = this.transformAny(tree.catchBody); var statements = []; var kind = this.options.blockBinding ? LET : VAR; var binding = this.desugarBinding_(tree.binding, statements, kind); ($__6 = statements).push.apply($__6, $traceurRuntime.spread(body.statements)); return new Catch(tree.location, binding, createBlock(statements)); }, transformExportDeclaration: function(tree) { if (tree.declaration.type === VARIABLE_STATEMENT && hasDestructuring(tree.declaration.declarations)) { var names = bindingsInDestructuringPattern(tree.declaration.declarations); var declaration = this.transformAny(tree.declaration); var statements = []; var $__5 = declaration.declarations, declarations = $__5.declarations, declarationType = $__5.declarationType; for (var i = 0; i < declarations.length; i++) { var declaration$__7 = declarations[i]; var statement = new VariableStatement(declaration$__7.location, new VariableDeclarationList(declaration$__7.location, declarationType, [declaration$__7])); if (names.has(declarations[i].lvalue.getStringValue())) { statement = new ExportDeclaration(statement.location, statement, []); } statements.push(statement); } return new AnonBlock(null, statements); } return $traceurRuntime.superGet(this, DestructuringTransformer.prototype, "transformExportDeclaration").call(this, tree); }, desugarBinding_: function(bindingTree, statements, declarationType) { var varName = this.getTempIdentifier(); var binding = createBindingIdentifier(varName); var idExpr = createIdentifierExpression(varName); var desugaring; if (declarationType === null) desugaring = new AssignmentExpressionDesugaring(idExpr); else desugaring = new VariableDeclarationDesugaring(idExpr); this.desugarPattern_(desugaring, bindingTree); if (declarationType === null) { statements.push(createExpressionStatement(createCommaExpression(desugaring.expressions))); } else { statements.push(createVariableStatement(this.transformVariableDeclarationList(createVariableDeclarationList(declarationType, desugaring.declarations)))); } return binding; }, desugarVariableDeclaration_: function(tree) { var tempRValueName = this.getTempIdentifier(); var tempRValueIdent = createIdentifierExpression(tempRValueName); var desugaring; var initializer; switch (tree.initializer.type) { case ARRAY_LITERAL: case CALL_EXPRESSION: case IDENTIFIER_EXPRESSION: case LITERAL_EXPRESSION: case MEMBER_EXPRESSION: case MEMBER_LOOKUP_EXPRESSION: case OBJECT_LITERAL: case PAREN_EXPRESSION: initializer = tree.initializer; } desugaring = new VariableDeclarationDesugaring(tempRValueIdent); desugaring.assign(desugaring.rvalue, tree.initializer); var initializerFound = this.desugarPattern_(desugaring, tree.lvalue); if (initializerFound || desugaring.declarations.length > 2) { return desugaring.declarations; } if (!initializer) { initializer = createParenExpression(tree.initializer); } desugaring = new VariableDeclarationDesugaring(initializer); this.desugarPattern_(desugaring, tree.lvalue); return desugaring.declarations; }, desugarPattern_: function(desugaring, tree) { var $__4 = this; var initializerFound = false; var pattern; switch (tree.type) { case ARRAY_PATTERN: { pattern = tree; this.pushTempScope(); var iterId = createIdentifierExpression(this.addTempVar()); var iterObjectId = createIdentifierExpression(this.addTempVar()); desugaring.createIterator(iterId); for (var i = 0; i < pattern.elements.length; i++) { var lvalue = pattern.elements[i]; if (lvalue === null) { desugaring.skipHole(iterId); continue; } else if (lvalue.isSpreadPatternElement()) { var iteratorToArray = this.getRuntimeExpression('iteratorToArray'); desugaring.assign(lvalue.lvalue, parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), iteratorToArray, iterId)); } else { if (lvalue.initializer) { initializerFound = true; } desugaring.assign(lvalue, this.createConditionalIterExpression(iterObjectId, iterId, lvalue.initializer)); } } this.popTempScope(); break; } case OBJECT_PATTERN: { pattern = tree; var elementHelper = function(lvalue, initializer) { if (initializer) initializerFound = true; var lookup = $__4.createConditionalMemberExpression(desugaring.rvalue, lvalue, initializer); desugaring.assign(lvalue, lookup); }; pattern.fields.forEach(function(field) { var lookup; switch (field.type) { case ASSIGNMENT_ELEMENT: elementHelper(field.assignment, field.initializer); break; case BINDING_ELEMENT: elementHelper(field.binding, field.initializer); break; case OBJECT_PATTERN_FIELD: { if (field.element.initializer) initializerFound = true; var name = field.name; lookup = $__4.createConditionalMemberExpression(desugaring.rvalue, name, field.element.initializer); desugaring.assign(field.element, lookup); break; } default: throw Error('unreachable'); } }); break; } case PAREN_EXPRESSION: return this.desugarPattern_(desugaring, tree.expression); default: throw new Error('unreachable'); } if (desugaring instanceof VariableDeclarationDesugaring && desugaring.declarations.length === 0) { desugaring.assign(createBindingIdentifier(this.getTempIdentifier()), desugaring.rvalue); } return initializerFound; }, createConditionalMemberExpression: function(rvalue, name, initializer) { if (name.type === COMPUTED_PROPERTY_NAME) { return this.createConditionalMemberLookupExpression(rvalue, name.expression, initializer); } var token; switch (name.type) { case BINDING_IDENTIFIER: case IDENTIFIER_EXPRESSION: token = name.identifierToken; break; default: token = name.literalToken; } if (!initializer) return createMemberExpression(rvalue, token); var tempIdent = createIdentifierExpression(this.addTempVar()); return parseExpression($traceurRuntime.getTemplateObject(["(", " = ", ".", ") === void 0 ?\n ", " : ", ""]), tempIdent, rvalue, token, initializer, tempIdent); }, createConditionalMemberLookupExpression: function(rvalue, index, initializer) { if (!initializer) return createMemberLookupExpression(rvalue, index); var tempIdent = createIdentifierExpression(this.addTempVar()); return parseExpression($traceurRuntime.getTemplateObject(["(", " = ", "[", "]) === void 0 ?\n ", " : ", ""]), tempIdent, rvalue, index, initializer, tempIdent); }, createConditionalIterExpression: function(iterObjectId, iterId, initializer) { var expr = parseExpression($traceurRuntime.getTemplateObject(["(", " =\n ", ".next()).done ? void 0 : ", ".value"]), iterObjectId, iterId, iterObjectId); if (!initializer) { return expr; } var tempIdent = createIdentifierExpression(this.addTempVar()); return parseExpression($traceurRuntime.getTemplateObject(["(", " = ", ") === void 0 ?\n ", " : ", ""]), tempIdent, expr, initializer, tempIdent); } }, {}, $__super); }(ImportRuntimeTrait(TempVarTransformer)); function hasDestructuring(tree) { return tree.declarations.some(function(declaration) { return declaration.lvalue.isPattern(); }); } return {get DestructuringTransformer() { return DestructuringTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ModuleSymbol.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/module/ModuleSymbol.js"; var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/StringMap.js", "traceur@0.0.112/src/codegeneration/module/ModuleSymbol.js")).StringMap; var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/assert.js", "traceur@0.0.112/src/codegeneration/module/ModuleSymbol.js")).assert; var ExportsList = function() { function ExportsList(normalizedName) { this.exports_ = new StringMap(); if (normalizedName !== null) this.normalizedName = normalizedName.replace(/\\/g, '/'); else this.normalizedName = null; } return ($traceurRuntime.createClass)(ExportsList, { addExport: function(name, tree) { assert(!this.exports_.has(name)); this.exports_.set(name, tree); }, getExport: function(name) { return this.exports_.get(name); }, getExports: function() { return this.exports_.keysAsArray(); }, addExportsFromModule: function(module) { var $__2 = this; Object.getOwnPropertyNames(module).forEach(function(name) { $__2.addExport(name, true); }); } }, {}); }(); var ModuleSymbol = function($__super) { function ModuleSymbol(tree, normalizedName) { $traceurRuntime.superConstructor(ModuleSymbol).call(this, normalizedName); this.tree = tree; this.imports_ = new StringMap(); } return ($traceurRuntime.createClass)(ModuleSymbol, { addImport: function(name, tree) { assert(!this.imports_.has(name)); this.imports_.set(name, tree); }, getImport: function(name) { return this.imports_.get(name); } }, {}, $__super); }(ExportsList); return { get ExportsList() { return ExportsList; }, get ModuleSymbol() { return ModuleSymbol; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js"; var ExportsList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleSymbol.js", "traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js")).ExportsList; var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js")).ParseTreeVisitor; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/module/ModuleVisitor.js")), EXPORT_DECLARATION = $__3.EXPORT_DECLARATION, IMPORT_DECLARATION = $__3.IMPORT_DECLARATION; var ModuleVisitor = function($__super) { function ModuleVisitor(reporter, loader, moduleSymbol) { $traceurRuntime.superConstructor(ModuleVisitor).call(this); this.reporter = reporter; this.loader_ = loader; this.moduleSymbol = moduleSymbol; } return ($traceurRuntime.createClass)(ModuleVisitor, { getExportsListForModuleSpecifier: function(name) { var referrer = this.moduleSymbol.normalizedName; return this.loader_.getExportsListForModuleSpecifier(name, referrer); }, visitFunctionDeclaration: function(tree) {}, visitFunctionExpression: function(tree) {}, visitFunctionBody: function(tree) {}, visitBlock: function(tree) {}, visitClassDeclaration: function(tree) {}, visitClassExpression: function(tree) {}, visitModuleElement_: function(element) { switch (element.type) { case EXPORT_DECLARATION: case IMPORT_DECLARATION: this.visitAny(element); } }, visitScript: function(tree) { tree.scriptItemList.forEach(this.visitModuleElement_, this); }, visitModule: function(tree) { tree.scriptItemList.forEach(this.visitModuleElement_, this); }, reportError: function(tree, message) { this.reporter.reportError(tree.location, message); } }, {}, $__super); }(ParseTreeVisitor); return {get ModuleVisitor() { return ModuleVisitor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ExportVisitor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/module/ExportVisitor.js"; var ModuleVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleVisitor.js", "traceur@0.0.112/src/codegeneration/module/ExportVisitor.js")).ModuleVisitor; var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/assert.js", "traceur@0.0.112/src/codegeneration/module/ExportVisitor.js")).assert; var ExportVisitor = function($__super) { function ExportVisitor(reporter, loader, moduleSymbol) { $traceurRuntime.superConstructor(ExportVisitor).call(this, reporter, loader, moduleSymbol); this.inExport_ = false; this.moduleSpecifier = null; } return ($traceurRuntime.createClass)(ExportVisitor, { addExport_: function(name, tree) { assert(typeof name === 'string'); if (this.inExport_) this.addExport(name, tree); }, addExport: function(name, tree) { var moduleSymbol = this.moduleSymbol; var existingExport = moduleSymbol.getExport(name); if (existingExport) { this.reportError(tree, ("Duplicate export. '" + name + "' was previously ") + ("exported at " + existingExport.location.start)); } else { moduleSymbol.addExport(name, tree); } }, visitClassDeclaration: function(tree) { this.addExport_(tree.name.identifierToken.value, tree); }, visitExportDeclaration: function(tree) { this.inExport_ = true; this.visitAny(tree.declaration); this.inExport_ = false; }, visitNamedExport: function(tree) { this.moduleSpecifier = tree.moduleSpecifier; this.visitAny(tree.exportClause); this.moduleSpecifier = null; }, visitExportDefault: function(tree) { this.addExport_('default', tree); }, visitExportSpecifier: function(tree) { this.addExport_((tree.rhs || tree.lhs).value, tree); }, visitExportStar: function(tree) { var $__1 = this; var name = this.moduleSpecifier.token.processedValue; var exportList = this.getExportsListForModuleSpecifier(name); if (exportList) { exportList.getExports().forEach(function(name) { return $__1.addExport(name, tree); }); } }, visitNameSpaceExport: function(tree) { this.addExport_(tree.name.value, tree); }, visitForwardDefaultExport: function(tree) { this.addExport_(tree.name.value, tree); }, visitFunctionDeclaration: function(tree) { this.addExport_(tree.name.getStringValue(), tree); }, visitVariableDeclaration: function(tree) { this.visitAny(tree.lvalue); }, visitBindingIdentifier: function(tree) { this.addExport_(tree.getStringValue(), tree); }, visitBindingElement: function(tree) { this.visitAny(tree.binding); }, visitTypeAliasDeclaration: function(tree) { this.addExport(tree.name.value, tree); } }, {}, $__super); }(ModuleVisitor); return {get ExportVisitor() { return ExportVisitor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/DirectExportVisitor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/module/DirectExportVisitor.js"; var ExportVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExportVisitor.js", "traceur@0.0.112/src/codegeneration/module/DirectExportVisitor.js")).ExportVisitor; var TYPE_ALIAS_DECLARATION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/module/DirectExportVisitor.js")).TYPE_ALIAS_DECLARATION; var DirectExportVisitor = function($__super) { function DirectExportVisitor() { $traceurRuntime.superConstructor(DirectExportVisitor).call(this, null, null, null); this.namedExports = []; this.starExports = []; } return ($traceurRuntime.createClass)(DirectExportVisitor, { addExport: function(name, tree) { this.namedExports.push({ name: name, tree: tree, moduleSpecifier: this.moduleSpecifier }); }, visitExportStar: function(tree) { this.starExports.push(this.moduleSpecifier); }, hasExports: function() { return this.namedExports.length !== 0 || this.starExports.length !== 0; }, getNonTypeNamedExports: function() { return this.namedExports.filter(function(exp) { return exp.tree.type !== TYPE_ALIAS_DECLARATION; }); } }, {}, $__super); }(ExportVisitor); return {get DirectExportVisitor() { return DirectExportVisitor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js"; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js")), AnonBlock = $__5.AnonBlock, ImportDeclaration = $__5.ImportDeclaration, ImportSpecifier = $__5.ImportSpecifier, ImportSpecifierSet = $__5.ImportSpecifierSet, Module = $__5.Module; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js")).ParseTreeTransformer; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js")), ANON_BLOCK = $__7.ANON_BLOCK, IMPORT_CLAUSE_PAIR = $__7.IMPORT_CLAUSE_PAIR, IMPORT_DECLARATION = $__7.IMPORT_DECLARATION, IMPORT_SPECIFIER_SET = $__7.IMPORT_SPECIFIER_SET, IMPORTED_BINDING = $__7.IMPORTED_BINDING, NAME_SPACE_IMPORT = $__7.NAME_SPACE_IMPORT; var createIdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ImportSimplifyingTransformer.js")).createIdentifierToken; var ImportSimplifyingTransformer = function($__super) { function ImportSimplifyingTransformer() { $traceurRuntime.superConstructor(ImportSimplifyingTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(ImportSimplifyingTransformer, { transformModule: function(tree) { var $__2; var statements = []; for (var i = 0; i < tree.scriptItemList.length; i++) { var item = tree.scriptItemList[i]; switch (item.type) { case IMPORT_DECLARATION: { var transformed = this.transformAny(item); if (transformed.type === ANON_BLOCK) { ($__2 = statements).push.apply($__2, $traceurRuntime.spread(transformed.statements)); } else { statements.push(transformed); } break; } default: statements.push(item); } } return new Module(tree.location, statements, tree.moduleName); }, transformImportDeclaration: function(tree) { var importClause = tree.importClause; if (importClause === null) { var set = new ImportSpecifierSet(null, []); return new ImportDeclaration(tree.location, set, tree.moduleSpecifier); } if (importClause.type === NAME_SPACE_IMPORT) { return tree; } if (importClause.type === IMPORTED_BINDING) { var specifier = this.transformAny(importClause); var set$__3 = new ImportSpecifierSet(null, [specifier]); return new ImportDeclaration(tree.location, set$__3, tree.moduleSpecifier); } if (importClause.type === IMPORT_CLAUSE_PAIR) { var $__1 = importClause, first = $__1.first, second = $__1.second; if (second.type === IMPORT_SPECIFIER_SET) { var defaultSpecifier = this.transformAny(first); var specifiers = $traceurRuntime.spread([defaultSpecifier], second.specifiers); var set$__4 = new ImportSpecifierSet(first.location, specifiers); return new ImportDeclaration(tree.location, set$__4, tree.moduleSpecifier); } var firstImport = new ImportDeclaration(tree.location, first, tree.moduleSpecifier); firstImport = this.transformAny(firstImport); var secondImport = new ImportDeclaration(tree.location, second, tree.moduleSpecifier); return new AnonBlock(null, [firstImport, secondImport]); } return $traceurRuntime.superGet(this, ImportSimplifyingTransformer.prototype, "transformImportDeclaration").call(this, tree); }, transformImportSpecifier: function(tree) { return tree; }, transformImportedBinding: function(tree) { var name = createIdentifierToken('default'); return new ImportSpecifier(tree.location, tree, name); } }, {}, $__super); }(ParseTreeTransformer); return {get ImportSimplifyingTransformer() { return ImportSimplifyingTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/util/url.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/util/url.js"; var canonicalizeUrl = $traceurRuntime.canonicalizeUrl; var isAbsolute = $traceurRuntime.isAbsolute; var removeDotSegments = $traceurRuntime.removeDotSegments; var resolveUrl = $traceurRuntime.resolveUrl; return { get canonicalizeUrl() { return canonicalizeUrl; }, get isAbsolute() { return isAbsolute; }, get removeDotSegments() { return removeDotSegments; }, get resolveUrl() { return resolveUrl; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SkipFunctionsTransformerTrait.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/SkipFunctionsTransformerTrait.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/SkipFunctionsTransformerTrait.js")), ArrowFunction = $__1.ArrowFunction, FunctionDeclaration = $__1.FunctionDeclaration, FunctionExpression = $__1.FunctionExpression, GetAccessor = $__1.GetAccessor, Method = $__1.Method, SetAccessor = $__1.SetAccessor; function SkipFunctionsTransformerTrait(ParseTreeTransformer) { return function($__super) { function SkipFunctionsTransformer() { $traceurRuntime.superConstructor(SkipFunctionsTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(SkipFunctionsTransformer, { transformFunctionDeclaration: function(tree) { var annotations = this.transformList(tree.annotations); if (annotations === tree.annotations) { return tree; } return new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, annotations, tree.body); }, transformFunctionExpression: function(tree) { var annotations = this.transformList(tree.annotations); if (annotations === tree.annotations) { return tree; } return new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, annotations, tree.body); }, transformSetAccessor: function(tree) { var name = this.transformAny(tree.name); var annotations = this.transformList(tree.annotations); if (name === tree.name && annotations === tree.annotations) { return tree; } return new SetAccessor(tree.location, tree.isStatic, name, tree.parameterList, annotations, tree.body); }, transformGetAccessor: function(tree) { var name = this.transformAny(tree.name); var annotations = this.transformList(tree.annotations); if (name === tree.name && annotations === tree.annotations) { return tree; } return new GetAccessor(tree.location, tree.isStatic, name, annotations, tree.body); }, transformMethod: function(tree) { var name = this.transformAny(tree.name); var annotations = this.transformList(tree.annotations); if (name === tree.name && annotations === tree.annotations) { return tree; } return new Method(tree.location, tree.isStatic, tree.functionKind, name, tree.parameterList, tree.typeAnnotation, annotations, tree.body, tree.debugName); }, transformArrowFunction: function(tree) { return tree; } }, {}, $__super); }(ParseTreeTransformer); } return {get default() { return SkipFunctionsTransformerTrait; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ModuleTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ModuleTransformer.js"; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")), AnonBlock = $__8.AnonBlock, BindingElement = $__8.BindingElement, EmptyStatement = $__8.EmptyStatement, LiteralPropertyName = $__8.LiteralPropertyName, Module = $__8.Module, ObjectPattern = $__8.ObjectPattern, ObjectPatternField = $__8.ObjectPatternField, Script = $__8.Script; var DestructuringTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./DestructuringTransformer.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).DestructuringTransformer; var DirectExportVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./module/DirectExportVisitor.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).DirectExportVisitor; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).default; var ImportSimplifyingTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportSimplifyingTransformer.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).ImportSimplifyingTransformer; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).TempVarTransformer; var $__14 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")), CLASS_DECLARATION = $__14.CLASS_DECLARATION, EXPORT_DEFAULT = $__14.EXPORT_DEFAULT, EXPORT_SPECIFIER = $__14.EXPORT_SPECIFIER, FORWARD_DEFAULT_EXPORT = $__14.FORWARD_DEFAULT_EXPORT, FUNCTION_DECLARATION = $__14.FUNCTION_DECLARATION, IMPORT_SPECIFIER_SET = $__14.IMPORT_SPECIFIER_SET, IMPORT_TYPE_CLAUSE = $__14.IMPORT_TYPE_CLAUSE, NAME_SPACE_EXPORT = $__14.NAME_SPACE_EXPORT; var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).VAR; var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).assert; var $__17 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/url.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")), resolveUrl = $__17.resolveUrl, canonicalizeUrl = $__17.canonicalizeUrl; var $__18 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")), createArgumentList = $__18.createArgumentList, createExpressionStatement = $__18.createExpressionStatement, createIdentifierExpression = $__18.createIdentifierExpression, createIdentifierToken = $__18.createIdentifierToken, createMemberExpression = $__18.createMemberExpression, createObjectLiteral = $__18.createObjectLiteral, createUseStrictDirective = $__18.createUseStrictDirective, createVariableStatement = $__18.createVariableStatement, createVoid0 = $__18.createVoid0; var $__19 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")), parseExpression = $__19.parseExpression, parsePropertyDefinition = $__19.parsePropertyDefinition, parseStatement = $__19.parseStatement, parseStatements = $__19.parseStatements; var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).default; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).ParseTreeTransformer; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/ModuleTransformer.js")).prependStatements; function removeUseStrictDirectives(tree) { var result = tree.scriptItemList.filter(function(tree) { return !tree.isUseStrictDirective(); }); return new Module(tree.location, result, tree.moduleName); } var DestructImportVarStatement = function($__super) { function DestructImportVarStatement() { $traceurRuntime.superConstructor(DestructImportVarStatement).apply(this, arguments); } return ($traceurRuntime.createClass)(DestructImportVarStatement, {createGuardedExpression: function(tree) { return tree; }}, {}, $__super); }(DestructuringTransformer); var ModuleTransformer = function($__super) { function ModuleTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(ModuleTransformer).call(this, identifierGenerator, reporter, options); this.exportVisitor = new DirectExportVisitor(); this.importSimplifier_ = new ImportSimplifyingTransformer(); this.moduleName = null; } return ($traceurRuntime.createClass)(ModuleTransformer, { getTempVarNameForModuleName: function(moduleName) { return '$__' + moduleName.replace(/[^a-zA-Z0-9$]/g, function(c) { return '_' + String(c.charCodeAt(0)) + '_'; }) + '__'; }, getModuleName: function(tree) { return tree.moduleName; }, getTempVarNameForModuleSpecifier: function(moduleSpecifier) { var name = moduleSpecifier.token.processedValue; if (name[0] === '.' && this.moduleName) { name = resolveUrl(this.moduleName, name); } else { name = canonicalizeUrl(name); } return this.getTempVarNameForModuleName(name); }, transformScript: function(tree) { this.moduleName = tree.moduleName; return $traceurRuntime.superGet(this, ModuleTransformer.prototype, "transformScript").call(this, tree); }, transformModule: function(tree) { tree = removeUseStrictDirectives(tree); tree = this.importSimplifier_.transformModule(tree); var replaceThis = new ReplaceThis(); tree = replaceThis.transformAny(tree); this.moduleName = this.getModuleName(tree); this.pushTempScope(); var statements = this.transformList(tree.scriptItemList); statements = this.addExportStatement(statements); var runtimeImports = this.transformList(this.getRuntimeImports()); statements = prependStatements.apply((void 0), $traceurRuntime.spread([statements], runtimeImports)); this.popTempScope(); statements = this.wrapModule(this.moduleProlog().concat(statements)); return new Script(tree.location, statements, null); }, moduleProlog: function() { var statements = [createUseStrictDirective()]; if (this.moduleName) { statements.push(parseStatement($traceurRuntime.getTemplateObject(["var __moduleName = ", ";"]), this.moduleName)); } return statements; }, wrapModule: function(statements) { var functionExpression; if (this.options.transformOptions.require) { functionExpression = parseExpression($traceurRuntime.getTemplateObject(["function(require) {\n ", "\n }"]), statements); } else { functionExpression = parseExpression($traceurRuntime.getTemplateObject(["function() {\n ", "\n }"]), statements); } if (this.moduleName === null) { return parseStatements($traceurRuntime.getTemplateObject(["$traceurRuntime.ModuleStore.getAnonymousModule(\n ", ");"]), functionExpression); } return parseStatements($traceurRuntime.getTemplateObject(["$traceurRuntime.registerModule(", ", [], ", ");"]), this.moduleName, functionExpression); }, getGetterExport: function(exp) { var returnExpression = this.getGetterExportReturnExpression(exp); return parsePropertyDefinition($traceurRuntime.getTemplateObject(["get ", "() { return ", "; }"]), exp.name, returnExpression); }, getGetterExportReturnExpression: function($__4) { var $__5 = $__4, name = $__5.name, tree = $__5.tree, moduleSpecifier = $__5.moduleSpecifier; var returnExpression; switch (tree.type) { case EXPORT_DEFAULT: switch (tree.expression.type) { case CLASS_DECLARATION: case FUNCTION_DECLARATION: return createIdentifierExpression(tree.expression.name); default: return createIdentifierExpression('$__default'); } break; case EXPORT_SPECIFIER: if (moduleSpecifier) { var idName = this.getTempVarNameForModuleSpecifier(moduleSpecifier); return createMemberExpression(idName, tree.lhs); } return createIdentifierExpression(tree.lhs); case NAME_SPACE_EXPORT: { var idName$__6 = this.getTempVarNameForModuleSpecifier(moduleSpecifier); return createIdentifierExpression(idName$__6); } case FORWARD_DEFAULT_EXPORT: { var idName$__7 = this.getTempVarNameForModuleSpecifier(moduleSpecifier); return createMemberExpression(idName$__7, 'default'); } default: return createIdentifierExpression(name); } }, getExportProperties: function() { var $__3 = this; return this.exportVisitor.getNonTypeNamedExports().map(function(exp) { return $__3.getGetterExport(exp); }).concat(this.exportVisitor.namedExports.map(function(exp) { return $__3.getSetterExport(exp); })).filter(function(e) { return e; }); }, getSetterExport: function($__4) { var $__5 = $__4, name = $__5.name, tree = $__5.tree, moduleSpecifier = $__5.moduleSpecifier; return null; }, getExportObject: function() { var exportObject = createObjectLiteral(this.getExportProperties()); if (this.hasStarExports()) { return this.getExportStar(exportObject); } return exportObject; }, getExportStar: function(exportObject) { var $__3 = this; var starExports = this.exportVisitor.starExports; var starIdents = starExports.map(function(moduleSpecifier) { return createIdentifierExpression($__3.getTempVarNameForModuleSpecifier(moduleSpecifier)); }); var args = createArgumentList($traceurRuntime.spread([exportObject], starIdents)); var runtime = this.getRuntimeExpression('exportStar'); return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), runtime, args); }, addExportStatement: function(statements) { var exportObject = this.getExportObject(); statements.push(parseStatement($traceurRuntime.getTemplateObject(["return ", ""]), exportObject)); return statements; }, hasExports: function() { return this.exportVisitor.hasExports(); }, hasStarExports: function() { return this.exportVisitor.starExports.length > 0; }, transformExportDeclaration: function(tree) { this.exportVisitor.visitAny(tree); return this.transformAny(tree.declaration); }, transformExportDefault: function(tree) { switch (tree.expression.type) { case CLASS_DECLARATION: case FUNCTION_DECLARATION: return tree.expression; } return parseStatement($traceurRuntime.getTemplateObject(["var $__default = ", ""]), tree.expression); }, transformNamedExport: function(tree) { var moduleSpecifier = tree.moduleSpecifier; if (moduleSpecifier) { var expression = this.transformAny(moduleSpecifier); var idName = this.getTempVarNameForModuleSpecifier(moduleSpecifier); return createVariableStatement(VAR, idName, expression); } return new AnonBlock(null, []); }, transformModuleSpecifier: function(tree) { assert(this.moduleName); var name = tree.token.processedValue; return parseExpression($traceurRuntime.getTemplateObject(["$traceurRuntime.getModule(\n $traceurRuntime.normalizeModuleName(", ", ", "));"]), name, this.moduleName); }, transformImportDeclaration: function(tree) { if (tree.importClause.type === IMPORT_TYPE_CLAUSE) { return new AnonBlock(null, []); } if (tree.importClause.type === IMPORT_SPECIFIER_SET && tree.importClause.specifiers.length === 0) { return createExpressionStatement(this.transformAny(tree.moduleSpecifier)); } var binding = this.transformAny(tree.importClause); var initializer = this.transformAny(tree.moduleSpecifier); var varStatement = createVariableStatement(VAR, binding, initializer); if (this.options.transformOptions.destructuring || !this.options.parseOptions.destructuring) { var destructuringTransformer = new DestructImportVarStatement(this.identifierGenerator, this.reporter, this.options); varStatement = varStatement.transform(destructuringTransformer); } return varStatement; }, transformImportSpecifierSet: function(tree) { var fields = this.transformList(tree.specifiers); return new ObjectPattern(null, fields); }, transformNameSpaceImport: function(tree) { return tree.binding.binding; }, transformImportSpecifier: function(tree) { var binding = tree.binding.binding; var bindingElement = new BindingElement(binding.location, binding, null); if (tree.name) { var name = new LiteralPropertyName(tree.name.location, tree.name); return new ObjectPatternField(tree.location, name, bindingElement); } return bindingElement; } }, {}, $__super); }(ImportRuntimeTrait(TempVarTransformer)); var ReplaceThis = function($__super) { function ReplaceThis() { $traceurRuntime.superConstructor(ReplaceThis).apply(this, arguments); } return ($traceurRuntime.createClass)(ReplaceThis, {transformThisExpression: function(tree) { return createVoid0(); }}, {}, $__super); }(SkipFunctionsTransformerTrait(ParseTreeTransformer)); return {get ModuleTransformer() { return ModuleTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/globalThis.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/globalThis.js"; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/globalThis.js")).parseExpression; var expr; function globalThis() { if (!expr) expr = parseExpression($traceurRuntime.getTemplateObject(["Reflect.global"])); return expr; } var $__default = globalThis; return {get default() { return $__default; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AmdTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/AmdTransformer.js"; var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")).ModuleTransformer; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")), createIdentifierExpression = $__3.createIdentifierExpression, createFormalParameter = $__3.createFormalParameter, createStringLiteralToken = $__3.createStringLiteralToken; var globalThis = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./globalThis.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")).default; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")), parseExpression = $__5.parseExpression, parseStatement = $__5.parseStatement, parseStatements = $__5.parseStatements, parsePropertyDefinition = $__5.parsePropertyDefinition; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AmdTransformer.js")), FormalParameterList = $__6.FormalParameterList, FunctionBody = $__6.FunctionBody, FunctionExpression = $__6.FunctionExpression; var AmdTransformer = function($__super) { function AmdTransformer(identifierGenerator, reporter) { var options = arguments[2]; $traceurRuntime.superConstructor(AmdTransformer).call(this, identifierGenerator, reporter, options); this.dependencies = []; this.anonymousModule = options && !options.bundle && options.moduleName !== true; } return ($traceurRuntime.createClass)(AmdTransformer, { getModuleName: function(tree) { if (this.anonymousModule) return null; return tree.moduleName; }, getExportProperties: function() { var properties = $traceurRuntime.superGet(this, AmdTransformer.prototype, "getExportProperties").call(this); if (this.exportVisitor.hasExports()) properties.push(parsePropertyDefinition($traceurRuntime.getTemplateObject(["__esModule: true"]))); return properties; }, moduleProlog: function() { var locals = this.dependencies.map(function(dep) { var local = createIdentifierExpression(dep.local); return parseStatement($traceurRuntime.getTemplateObject(["if (!", " || !", ".__esModule)\n ", " = {default: ", "}"]), local, local, local, local); }); return $traceurRuntime.superGet(this, AmdTransformer.prototype, "moduleProlog").call(this).concat(locals); }, wrapModule: function(statements) { var depPaths = this.dependencies.map(function(dep) { return dep.path; }); var formals = this.dependencies.map(function(dep) { return createFormalParameter(dep.local); }); var parameterList = new FormalParameterList(null, formals); var body = new FunctionBody(null, statements); var func = new FunctionExpression(null, null, null, parameterList, null, [], body); if (this.moduleName) { return parseStatements($traceurRuntime.getTemplateObject(["define(", ", ", ", ", ");"]), this.moduleName, depPaths, func); } else { return parseStatements($traceurRuntime.getTemplateObject(["define(", ", ", ");"]), depPaths, func); } }, transformModuleSpecifier: function(tree) { var localName = this.getTempIdentifier(); var value = tree.token.processedValue; var stringLiteral = createStringLiteralToken(value.replace(/\.js$/, '')); this.dependencies.push({ path: stringLiteral, local: localName }); return createIdentifierExpression(localName); } }, {}, $__super); }(ModuleTransformer); return {get AmdTransformer() { return AmdTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/staticsemantics/PropName.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/staticsemantics/PropName.js"; var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/staticsemantics/PropName.js")), COMPUTED_PROPERTY_NAME = $__0.COMPUTED_PROPERTY_NAME, GET_ACCESSOR = $__0.GET_ACCESSOR, LITERAL_PROPERTY_NAME = $__0.LITERAL_PROPERTY_NAME, METHOD = $__0.METHOD, PROPERTY_NAME_ASSIGNMENT = $__0.PROPERTY_NAME_ASSIGNMENT, PROPERTY_NAME_SHORTHAND = $__0.PROPERTY_NAME_SHORTHAND, SET_ACCESSOR = $__0.SET_ACCESSOR; var IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/staticsemantics/PropName.js")).IDENTIFIER; function propName(tree) { switch (tree.type) { case LITERAL_PROPERTY_NAME: { var token = tree.literalToken; if (token.isKeyword() || token.type === IDENTIFIER) return token.toString(); return String(tree.literalToken.processedValue); } case COMPUTED_PROPERTY_NAME: return ''; case PROPERTY_NAME_SHORTHAND: return tree.name.toString(); case METHOD: case PROPERTY_NAME_ASSIGNMENT: case GET_ACCESSOR: case SET_ACCESSOR: return propName(tree.name); } } return {get propName() { return propName; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")).ParseTreeTransformer; var CONSTRUCTOR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")).CONSTRUCTOR; var STRING = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")).STRING; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")), AnonBlock = $__8.AnonBlock, ClassDeclaration = $__8.ClassDeclaration, ExportDeclaration = $__8.ExportDeclaration, FormalParameter = $__8.FormalParameter, FunctionDeclaration = $__8.FunctionDeclaration, GetAccessor = $__8.GetAccessor, LiteralExpression = $__8.LiteralExpression, Method = $__8.Method, SetAccessor = $__8.SetAccessor; var propName = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/PropName.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")).propName; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")), createArgumentList = $__10.createArgumentList, createArrayLiteral = $__10.createArrayLiteral, createAssignmentStatement = $__10.createAssignmentStatement, createIdentifierExpression = $__10.createIdentifierExpression, createMemberExpression = $__10.createMemberExpression, createNewExpression = $__10.createNewExpression, createStringLiteralToken = $__10.createStringLiteralToken; var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AnnotationsTransformer.js")), parseExpression = $__11.parseExpression, parseStatement = $__11.parseStatement; var AnnotationsScope = function() { function AnnotationsScope() { this.className = null; this.isExport = false; this.constructorParameters = []; this.annotations = []; this.metadata = []; } return ($traceurRuntime.createClass)(AnnotationsScope, {get inClassScope() { return this.className !== null; }}, {}); }(); var AnnotationsTransformer = function($__super) { function AnnotationsTransformer() { $traceurRuntime.superConstructor(AnnotationsTransformer).call(this); this.stack_ = [new AnnotationsScope()]; } return ($traceurRuntime.createClass)(AnnotationsTransformer, { transformExportDeclaration: function(tree) { var $__3; var scope = this.pushAnnotationScope_(); scope.isExport = true; ($__3 = scope.annotations).push.apply($__3, $traceurRuntime.spread(tree.annotations)); var declaration = this.transformAny(tree.declaration); if (declaration !== tree.declaration || tree.annotations.length > 0) tree = new ExportDeclaration(tree.location, declaration, []); return this.appendMetadata_(tree); }, transformClassDeclaration: function(tree) { var $__3, $__4; var elementsChanged = false; var exportAnnotations = this.scope.isExport ? this.scope.annotations : []; var scope = this.pushAnnotationScope_(); scope.className = tree.name; ($__3 = scope.annotations).push.apply($__3, $traceurRuntime.spread(exportAnnotations, tree.annotations)); tree = $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformClassDeclaration").call(this, tree); ($__4 = scope.metadata).unshift.apply($__4, $traceurRuntime.spread(this.transformMetadata_(createIdentifierExpression(tree.name), scope.annotations, scope.constructorParameters))); if (tree.annotations.length > 0) { tree = new ClassDeclaration(tree.location, tree.name, tree.superClass, tree.elements, [], null); } return this.appendMetadata_(tree); }, transformFunctionDeclaration: function(tree) { var $__3, $__4; var exportAnnotations = this.scope.isExport ? this.scope.annotations : []; var scope = this.pushAnnotationScope_(); ($__3 = scope.annotations).push.apply($__3, $traceurRuntime.spread(exportAnnotations, tree.annotations)); ($__4 = scope.metadata).push.apply($__4, $traceurRuntime.spread(this.transformMetadata_(createIdentifierExpression(tree.name), scope.annotations, tree.parameterList.parameters))); tree = $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformFunctionDeclaration").call(this, tree); if (tree.annotations.length > 0) { tree = new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, [], tree.body); } return this.appendMetadata_(tree); }, transformFormalParameter: function(tree) { if (tree.annotations.length > 0) { tree = new FormalParameter(tree.location, tree.parameter, tree.typeAnnotation, []); } return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformFormalParameter").call(this, tree); }, transformGetAccessor: function(tree) { var $__3; if (!this.scope.inClassScope) return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformGetAccessor").call(this, tree); ($__3 = this.scope.metadata).push.apply($__3, $traceurRuntime.spread(this.transformMetadata_(this.transformAccessor_(tree, this.scope.className, 'get'), tree.annotations, []))); if (tree.annotations.length > 0) { tree = new GetAccessor(tree.location, tree.isStatic, tree.name, tree.typeAnnotation, [], tree.body); } return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformGetAccessor").call(this, tree); }, transformSetAccessor: function(tree) { var $__3; if (!this.scope.inClassScope) return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformSetAccessor").call(this, tree); ($__3 = this.scope.metadata).push.apply($__3, $traceurRuntime.spread(this.transformMetadata_(this.transformAccessor_(tree, this.scope.className, 'set'), tree.annotations, tree.parameterList.parameters))); var parameterList = this.transformAny(tree.parameterList); if (parameterList !== tree.parameterList || tree.annotations.length > 0) { tree = new SetAccessor(tree.location, tree.isStatic, tree.name, parameterList, [], tree.body); } return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformSetAccessor").call(this, tree); }, transformMethod: function(tree) { var $__3, $__4; if (!this.scope.inClassScope) return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformMethod").call(this, tree); if (!tree.isStatic && propName(tree) === CONSTRUCTOR) { ($__3 = this.scope.annotations).push.apply($__3, $traceurRuntime.spread(tree.annotations)); this.scope.constructorParameters = tree.parameterList.parameters; } else { ($__4 = this.scope.metadata).push.apply($__4, $traceurRuntime.spread(this.transformMetadata_(this.transformPropertyMethod_(tree, this.scope.className), tree.annotations, tree.parameterList.parameters))); } var parameterList = this.transformAny(tree.parameterList); if (parameterList !== tree.parameterList || tree.annotations.length > 0) { tree = new Method(tree.location, tree.isStatic, tree.functionKind, tree.name, parameterList, tree.typeAnnotation, [], tree.body, tree.debugName); } return $traceurRuntime.superGet(this, AnnotationsTransformer.prototype, "transformMethod").call(this, tree); }, appendMetadata_: function(tree) { var $__3; var metadata = this.stack_.pop().metadata; if (metadata.length > 0) { if (this.scope.isExport) { ($__3 = this.scope.metadata).push.apply($__3, $traceurRuntime.spread(metadata)); } else { tree = new AnonBlock(null, $traceurRuntime.spread([tree], metadata)); } } return tree; }, transformClassReference_: function(tree, className) { var parent = createIdentifierExpression(className); if (!tree.isStatic) parent = createMemberExpression(parent, 'prototype'); return parent; }, transformPropertyMethod_: function(tree, className) { return createMemberExpression(this.transformClassReference_(tree, className), tree.name.literalToken); }, transformAccessor_: function(tree, className, accessor) { var args = createArgumentList([this.transformClassReference_(tree, className), this.createLiteralStringExpression_(tree.name)]); var descriptor = parseExpression($traceurRuntime.getTemplateObject(["Object.getOwnPropertyDescriptor(", ")"]), args); return createMemberExpression(descriptor, accessor); }, transformParameters_: function(parameters) { var $__2 = this; var hasParameterMetadata = false; parameters = parameters.map(function(param) { var $__3; var metadata = []; if (param.typeAnnotation) metadata.push($__2.transformAny(param.typeAnnotation)); if (param.annotations && param.annotations.length > 0) ($__3 = metadata).push.apply($__3, $traceurRuntime.spread($__2.transformAnnotations_(param.annotations))); if (metadata.length > 0) { hasParameterMetadata = true; return createArrayLiteral(metadata); } return createArrayLiteral([]); }); return hasParameterMetadata ? parameters : []; }, transformAnnotations_: function(annotations) { return annotations.map(function(annotation) { return createNewExpression(annotation.name, annotation.args); }); }, transformMetadata_: function(target, annotations, parameters) { var metadataStatements = []; if (annotations !== null) { annotations = this.transformAnnotations_(annotations); if (annotations.length > 0) { metadataStatements.push(this.createDefinePropertyStatement_(target, 'annotations', createArrayLiteral(annotations))); } } if (parameters !== null) { parameters = this.transformParameters_(parameters); if (parameters.length > 0) { metadataStatements.push(this.createDefinePropertyStatement_(target, 'parameters', createArrayLiteral(parameters))); } } return metadataStatements; }, createDefinePropertyStatement_: function(target, property, value) { return parseStatement($traceurRuntime.getTemplateObject(["Object.defineProperty(", ", ", ",\n {get: function() {return ", "}});"]), target, property, value); }, createLiteralStringExpression_: function(tree) { var token = tree.literalToken; if (tree.literalToken.type !== STRING) token = createStringLiteralToken(tree.literalToken.value); return new LiteralExpression(null, token); }, get scope() { return this.stack_[this.stack_.length - 1]; }, pushAnnotationScope_: function() { var scope = new AnnotationsScope(); this.stack_.push(scope); return scope; } }, {}, $__super); }(ParseTreeTransformer); return {get AnnotationsTransformer() { return AnnotationsTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindInFunctionScope.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/FindInFunctionScope.js"; var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindVisitor.js", "traceur@0.0.112/src/codegeneration/FindInFunctionScope.js")).FindVisitor; var FindInFunctionScope = function($__super) { function FindInFunctionScope() { $traceurRuntime.superConstructor(FindInFunctionScope).apply(this, arguments); } return ($traceurRuntime.createClass)(FindInFunctionScope, { visitFunctionDeclaration: function(tree) { this.visitList(tree.annotations); }, visitFunctionExpression: function(tree) { this.visitList(tree.annotations); }, visitSetAccessor: function(tree) { this.visitAny(tree.name); this.visitList(tree.annotations); }, visitGetAccessor: function(tree) { this.visitAny(tree.name); this.visitList(tree.annotations); }, visitMethod: function(tree) { this.visitAny(tree.name); this.visitList(tree.annotations); } }, {}, $__super); }(FindVisitor); return {get FindInFunctionScope() { return FindInFunctionScope; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/util.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/util.js"; var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/util.js")), IDENTIFIER_EXPRESSION = $__0.IDENTIFIER_EXPRESSION, LITERAL_EXPRESSION = $__0.LITERAL_EXPRESSION, PAREN_EXPRESSION = $__0.PAREN_EXPRESSION, UNARY_EXPRESSION = $__0.UNARY_EXPRESSION; var UNDEFINED = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/semantics/util.js")).UNDEFINED; var VOID = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/util.js")).VOID; function hasUseStrict(list) { for (var i = 0; i < list.length; i++) { if (!list[i].isDirectivePrologue()) return false; if (list[i].isUseStrictDirective()) return true; } return false; } function isUndefined(tree) { if (tree.type === PAREN_EXPRESSION) return isUndefined(tree.expression); return tree.type === IDENTIFIER_EXPRESSION && tree.identifierToken.value === UNDEFINED; } function isVoidExpression(tree) { if (tree.type === PAREN_EXPRESSION) return isVoidExpression(tree.expression); return tree.type === UNARY_EXPRESSION && tree.operator.type === VOID && isLiteralExpression(tree.operand); } function isLiteralExpression(tree) { if (tree.type === PAREN_EXPRESSION) return isLiteralExpression(tree.expression); return tree.type === LITERAL_EXPRESSION; } return { get hasUseStrict() { return hasUseStrict; }, get isUndefined() { return isUndefined; }, get isVoidExpression() { return isVoidExpression; }, get isLiteralExpression() { return isLiteralExpression; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/isTreeStrict.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/isTreeStrict.js"; var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/isTreeStrict.js")), ARROW_FUNCTION = $__0.ARROW_FUNCTION, CLASS_DECLARATION = $__0.CLASS_DECLARATION, CLASS_EXPRESSION = $__0.CLASS_EXPRESSION, FUNCTION_BODY = $__0.FUNCTION_BODY, FUNCTION_DECLARATION = $__0.FUNCTION_DECLARATION, FUNCTION_EXPRESSION = $__0.FUNCTION_EXPRESSION, GET_ACCESSOR = $__0.GET_ACCESSOR, METHOD = $__0.METHOD, MODULE = $__0.MODULE, SCRIPT = $__0.SCRIPT, SET_ACCESSOR = $__0.SET_ACCESSOR; var hasUseStrict = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util.js", "traceur@0.0.112/src/semantics/isTreeStrict.js")).hasUseStrict; function isTreeStrict(tree) { switch (tree.type) { case CLASS_DECLARATION: case CLASS_EXPRESSION: case MODULE: return true; case FUNCTION_BODY: return hasUseStrict(tree.statements); case FUNCTION_EXPRESSION: case FUNCTION_DECLARATION: case METHOD: return isTreeStrict(tree.body); case ARROW_FUNCTION: if (tree.body.type === FUNCTION_BODY) { return isTreeStrict(tree.body); } return false; case GET_ACCESSOR: case SET_ACCESSOR: return isTreeStrict(tree.body); case SCRIPT: return hasUseStrict(tree.scriptItemList); default: return false; } } return {get isTreeStrict() { return isTreeStrict; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/Scope.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/Scope.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/Scope.js")), BLOCK = $__2.BLOCK, CATCH = $__2.CATCH, FUNCTION_EXPRESSION = $__2.FUNCTION_EXPRESSION; var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringMap.js", "traceur@0.0.112/src/semantics/Scope.js")).StringMap; var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/Scope.js")).VAR; var isTreeStrict = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./isTreeStrict.js", "traceur@0.0.112/src/semantics/Scope.js")).isTreeStrict; function reportDuplicateVar(reporter, tree, name) { reporter.reportError(tree.location, ("Duplicate declaration, " + name)); } var Scope = function() { function Scope(parent, tree) { this.parent = parent; this.tree = tree; this.variableDeclarations_ = new StringMap(); this.lexicalDeclarations_ = new StringMap(); this.strictMode = parent && parent.strictMode || isTreeStrict(tree); this.inGenerator = parent ? parent.inGenerator || false : false; } return ($traceurRuntime.createClass)(Scope, { addBinding: function(tree, type, reporter) { if (type === VAR) { this.addVar(tree, reporter); } else { this.addDeclaration(tree, type, reporter); } }, addVar: function(tree, reporter) { var name = tree.getStringValue(); if (this.lexicalDeclarations_.has(name) && !this.isFunctionExpressionName(name)) { reportDuplicateVar(reporter, tree, name); return; } this.variableDeclarations_.set(name, { type: VAR, tree: tree, scope: this }); if (!this.isVarScope && this.parent) { this.parent.addVar(tree, reporter); } }, addDeclaration: function(tree, type, reporter) { var name = tree.getStringValue(); if ((this.lexicalDeclarations_.has(name) || this.variableDeclarations_.has(name)) && !this.isFunctionExpressionName(name)) { reportDuplicateVar(reporter, tree, name); return; } this.lexicalDeclarations_.set(name, { type: type, tree: tree, scope: this }); }, renameBinding: function(oldName, newTree, newType, reporter) { var name = newTree.getStringValue(); if (newType === VAR) { if (this.lexicalDeclarations_.has(oldName)) { this.lexicalDeclarations_.delete(oldName); this.addVar(newTree, reporter); } } else if (this.variableDeclarations_.has(oldName)) { this.variableDeclarations_.delete(oldName); this.addDeclaration(newTree, newType, reporter); if (!this.isVarScope && this.parent) { this.parent.renameBinding(oldName, newTree, newType); } } }, get isVarScope() { switch (this.tree.type) { case BLOCK: case CATCH: return false; } return true; }, getVarScope: function() { if (this.isVarScope) { return this; } if (this.parent) { return this.parent.getVarScope(); } return null; }, isFunctionExpressionName: function(name) { var b = this.getBindingByName(name); return b && b.scope.tree.type === FUNCTION_EXPRESSION && b.scope.tree.name === b.tree; }, getBinding: function(tree) { var name = tree.getStringValue(); return this.getBindingByName(name); }, getBindingByName: function(name) { var b = this.variableDeclarations_.get(name); if (b && this.isVarScope) { return b; } b = this.lexicalDeclarations_.get(name); if (b) { return b; } if (this.parent) { return this.parent.getBindingByName(name); } return null; }, getAllBindingNames: function() { var names = this.variableDeclarations_.keysAsSet(); this.lexicalDeclarations_.forEach(function(name) { return names.add(name); }); return names; }, getVariableBindingNames: function() { return this.variableDeclarations_.keysAsSet(); }, getLexicalBindingNames: function() { return this.lexicalDeclarations_.keysAsSet(); }, hasBindingName: function(name) { return this.lexicalDeclarations_.has(name) || this.variableDeclarations_.has(name); }, hasLexicalBindingName: function(name) { return this.lexicalDeclarations_.has(name); }, hasVariableBindingName: function(name) { return this.variableDeclarations_.has(name); } }, {}); }(); return {get Scope() { return Scope; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ScopeVisitor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/ScopeVisitor.js"; var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/semantics/ScopeVisitor.js")).ParseTreeVisitor; var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/ScopeVisitor.js")).VAR; var Scope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Scope.js", "traceur@0.0.112/src/semantics/ScopeVisitor.js")).Scope; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/ScopeVisitor.js")), COMPREHENSION_FOR = $__6.COMPREHENSION_FOR, VARIABLE_DECLARATION_LIST = $__6.VARIABLE_DECLARATION_LIST; var ScopeVisitor = function($__super) { function ScopeVisitor() { $traceurRuntime.superConstructor(ScopeVisitor).call(this); this.map_ = new Map(); this.scope = null; this.withBlockCounter_ = 0; } return ($traceurRuntime.createClass)(ScopeVisitor, { getScopeForTree: function(tree) { return this.map_.get(tree); }, createScope: function(tree) { return new Scope(this.scope, tree); }, pushScope: function(tree) { var scope = this.createScope(tree); this.map_.set(tree, scope); return this.scope = scope; }, popScope: function(scope) { if (this.scope !== scope) { throw new Error('ScopeVisitor scope mismatch'); } this.scope = scope.parent; }, visitScript: function(tree) { var scope = this.pushScope(tree); $traceurRuntime.superGet(this, ScopeVisitor.prototype, "visitScript").call(this, tree); this.popScope(scope); }, visitModule: function(tree) { var scope = this.pushScope(tree); $traceurRuntime.superGet(this, ScopeVisitor.prototype, "visitModule").call(this, tree); this.popScope(scope); }, visitBlock: function(tree) { var scope = this.pushScope(tree); $traceurRuntime.superGet(this, ScopeVisitor.prototype, "visitBlock").call(this, tree); this.popScope(scope); }, visitCatch: function(tree) { var scope = this.pushScope(tree); this.visitAny(tree.binding); this.visitList(tree.catchBody.statements); this.popScope(scope); }, visitFunctionBodyForScope: function(tree) { var parameterList = arguments[1] !== (void 0) ? arguments[1] : tree.parameterList; var scope = this.pushScope(tree); this.visitAny(parameterList); scope.inGenerator = tree.functionKind && tree.isGenerator(); this.visitAny(tree.body); this.popScope(scope); }, visitFunctionExpression: function(tree) { this.visitFunctionBodyForScope(tree); }, visitFunctionDeclaration: function(tree) { this.visitAny(tree.name); this.visitFunctionBodyForScope(tree); }, visitArrowFunction: function(tree) { this.visitFunctionBodyForScope(tree); }, visitGetAccessor: function(tree) { this.visitFunctionBodyForScope(tree, null); }, visitSetAccessor: function(tree) { this.visitFunctionBodyForScope(tree); }, visitMethod: function(tree) { this.visitFunctionBodyForScope(tree); }, visitClassDeclaration: function(tree) { this.visitAny(tree.superClass); var scope = this.pushScope(tree); this.visitAny(tree.name); this.visitList(tree.elements); this.popScope(scope); }, visitClassExpression: function(tree) { this.visitAny(tree.superClass); var scope; if (tree.name) { scope = this.pushScope(tree); this.visitAny(tree.name); } this.visitList(tree.elements); if (tree.name) { this.popScope(scope); } }, visitWithStatement: function(tree) { this.visitAny(tree.expression); this.withBlockCounter_++; this.visitAny(tree.body); this.withBlockCounter_--; }, get inWithBlock() { return this.withBlockCounter_ > 0; }, visitLoop_: function(tree, func) { if (tree.initializer.type !== VARIABLE_DECLARATION_LIST || tree.initializer.declarationType === VAR) { func(); return; } var scope = this.pushScope(tree); func(); this.popScope(scope); }, visitForInStatement: function(tree) { var $__1 = this; this.visitLoop_(tree, function() { return $traceurRuntime.superGet($__1, ScopeVisitor.prototype, "visitForInStatement").call($__1, tree); }); }, visitForOfStatement: function(tree) { var $__1 = this; this.visitLoop_(tree, function() { return $traceurRuntime.superGet($__1, ScopeVisitor.prototype, "visitForOfStatement").call($__1, tree); }); }, visitForStatement: function(tree) { var $__1 = this; if (!tree.initializer) { $traceurRuntime.superGet(this, ScopeVisitor.prototype, "visitForStatement").call(this, tree); } else { this.visitLoop_(tree, function() { return $traceurRuntime.superGet($__1, ScopeVisitor.prototype, "visitForStatement").call($__1, tree); }); } }, visitComprehension_: function(tree) { var scopes = []; for (var i = 0; i < tree.comprehensionList.length; i++) { var scope = null; if (tree.comprehensionList[i].type === COMPREHENSION_FOR) { scope = this.pushScope(tree.comprehensionList[i]); } scopes.push(scope); this.visitAny(tree.comprehensionList[i]); } this.visitAny(tree.expression); for (var i$__2 = scopes.length - 1; i$__2 >= 0; i$__2--) { if (scopes[i$__2]) { this.popScope(scopes[i$__2]); } } }, visitArrayComprehension: function(tree) { this.visitComprehension_(tree); }, visitGeneratorComprehension: function(tree) { this.visitComprehension_(tree); }, visitPredefinedType: function(tree) {}, visitTypeArguments: function(tree) {}, visitFunctionType: function(tree) {} }, {}, $__super); }(ParseTreeVisitor); return {get ScopeVisitor() { return ScopeVisitor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ScopeChainBuilder.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/ScopeChainBuilder.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/ScopeChainBuilder.js")), CONST = $__1.CONST, LET = $__1.LET, VAR = $__1.VAR; var ScopeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeVisitor.js", "traceur@0.0.112/src/semantics/ScopeChainBuilder.js")).ScopeVisitor; var ScopeChainBuilder = function($__super) { function ScopeChainBuilder(reporter) { $traceurRuntime.superConstructor(ScopeChainBuilder).call(this); this.reporter = reporter; this.declarationType_ = null; } return ($traceurRuntime.createClass)(ScopeChainBuilder, { visitCatch: function(tree) { var scope = this.pushScope(tree); this.declarationType_ = LET; this.visitAny(tree.binding); this.visitList(tree.catchBody.statements); this.popScope(scope); }, visitImportedBinding: function(tree) { this.declarationType_ = CONST; $traceurRuntime.superGet(this, ScopeChainBuilder.prototype, "visitImportedBinding").call(this, tree); }, visitVariableDeclarationList: function(tree) { this.declarationType_ = tree.declarationType; $traceurRuntime.superGet(this, ScopeChainBuilder.prototype, "visitVariableDeclarationList").call(this, tree); }, visitBindingIdentifier: function(tree) { this.declareVariable(tree); }, visitFunctionExpression: function(tree) { var scope = this.pushScope(tree); if (tree.name) { this.declarationType_ = CONST; this.visitAny(tree.name); } this.visitAny(tree.parameterList); scope.inGenerator = tree.isGenerator(); this.visitAny(tree.body); this.popScope(scope); }, visitFormalParameter: function(tree) { this.declarationType_ = VAR; $traceurRuntime.superGet(this, ScopeChainBuilder.prototype, "visitFormalParameter").call(this, tree); }, visitFunctionDeclaration: function(tree) { if (this.scope) { if (this.scope.isVarScope) { this.declarationType_ = VAR; this.visitAny(tree.name); } else { if (!this.scope.strictMode) { var varScope = this.scope.getVarScope(); if (varScope) { varScope.addVar(tree.name, this.reporter); } } this.declarationType_ = LET; this.visitAny(tree.name); } } this.visitFunctionBodyForScope(tree, tree.parameterList, tree.body); }, visitClassDeclaration: function(tree) { this.visitAny(tree.superClass); this.declarationType_ = LET; this.visitAny(tree.name); var scope = this.pushScope(tree); this.declarationType_ = CONST; this.visitAny(tree.name); this.visitList(tree.elements); this.popScope(scope); }, visitClassExpression: function(tree) { this.visitAny(tree.superClass); var scope; if (tree.name) { scope = this.pushScope(tree); this.declarationType_ = CONST; this.visitAny(tree.name); } this.visitList(tree.elements); if (tree.name) { this.popScope(scope); } }, visitComprehensionFor: function(tree) { this.declarationType_ = LET; $traceurRuntime.superGet(this, ScopeChainBuilder.prototype, "visitComprehensionFor").call(this, tree); }, declareVariable: function(tree) { this.scope.addBinding(tree, this.declarationType_, this.reporter); } }, {}, $__super); }(ScopeVisitor); return {get ScopeChainBuilder() { return ScopeChainBuilder; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/VariableBinder.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/VariableBinder.js"; var ScopeChainBuilder = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeChainBuilder.js", "traceur@0.0.112/src/semantics/VariableBinder.js")).ScopeChainBuilder; function variablesInBlock(tree) { var includeFunctionScope = arguments[1]; var builder = new ScopeChainBuilder(null); builder.visitAny(tree); var scope = builder.getScopeForTree(tree); var names = scope.getLexicalBindingNames(); if (!includeFunctionScope) { return names; } var variableBindingNames = scope.getVariableBindingNames(); variableBindingNames.forEach(function(name) { return names.add(name); }); return names; } function variablesInFunction(tree) { var builder = new ScopeChainBuilder(null); builder.visitAny(tree); var scope = builder.getScopeForTree(tree); return scope.getAllBindingNames(); } return { get variablesInBlock() { return variablesInBlock; }, get variablesInFunction() { return variablesInFunction; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ScopeTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ScopeTransformer.js"; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")), ARGUMENTS = $__4.ARGUMENTS, THIS = $__4.THIS; var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).FindInFunctionScope; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).ParseTreeTransformer; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")), FunctionDeclaration = $__7.FunctionDeclaration, FunctionExpression = $__7.FunctionExpression, GetAccessor = $__7.GetAccessor, Method = $__7.Method, SetAccessor = $__7.SetAccessor; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).StringSet; var VARIABLE_DECLARATION_LIST = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).VARIABLE_DECLARATION_LIST; var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")).VAR; var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/VariableBinder.js", "traceur@0.0.112/src/codegeneration/ScopeTransformer.js")), variablesInBlock = $__11.variablesInBlock, variablesInFunction = $__11.variablesInFunction; var FindNames = function($__super) { function FindNames(names) { $traceurRuntime.superConstructor(FindNames).call(this); this.names = names; } return ($traceurRuntime.createClass)(FindNames, {visitBindingIdentifier: function(tree) { this.names.add(tree.getStringValue()); }}, {}, $__super); }(FindInFunctionScope); function getLexicalBindingNames(tree) { var names = new StringSet(); if (tree !== null && tree.type === VARIABLE_DECLARATION_LIST && tree.declarationType !== VAR) { var visitor = new FindNames(names); for (var i = 0; i < tree.declarations.length; i++) { visitor.visitAny(tree.declarations[i].lvalue); } } return names; } var ScopeTransformer = function($__super) { function ScopeTransformer(varName) { $traceurRuntime.superConstructor(ScopeTransformer).call(this); this.varName_ = varName; } return ($traceurRuntime.createClass)(ScopeTransformer, { transformBlock: function(tree) { if (variablesInBlock(tree).has(this.varName_)) { return tree; } return $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformBlock").call(this, tree); }, sameTreeIfNameInLoopInitializer_: function(tree) { var names = getLexicalBindingNames(tree.initializer); if (names.has(this.varName_)) { return tree; } return null; }, transformForStatement: function(tree) { return this.sameTreeIfNameInLoopInitializer_(tree) || $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformForStatement").call(this, tree); }, transformForInStatement: function(tree) { return this.sameTreeIfNameInLoopInitializer_(tree) || $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformForInStatement").call(this, tree); }, transformForOfStatement: function(tree) { return this.sameTreeIfNameInLoopInitializer_(tree) || $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformForOfStatement").call(this, tree); }, transformForOnStatement: function(tree) { return this.sameTreeIfNameInLoopInitializer_(tree) || $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformForOnStatement").call(this, tree); }, transformThisExpression: function(tree) { if (this.varName_ !== THIS) return tree; return $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformThisExpression").call(this, tree); }, transformParameterListAndBody_: function(tree) { if (this.getDoNotRecurse(tree)) return tree; return { parameterList: this.transformAny(tree.parameterList), body: this.transformAny(tree.body) }; }, transformFunctionDeclaration: function(tree) { var name = this.transformAny(tree.name); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var $__3 = this.transformParameterListAndBody_(tree), parameterList = $__3.parameterList, body = $__3.body; if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) { return tree; } return new FunctionDeclaration(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body); }, transformFunctionExpression: function(tree) { var name = this.transformAny(tree.name); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var $__3 = this.transformParameterListAndBody_(tree), parameterList = $__3.parameterList, body = $__3.body; if (name === tree.name && parameterList === tree.parameterList && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) { return tree; } return new FunctionExpression(tree.location, name, tree.functionKind, parameterList, typeAnnotation, annotations, body); }, transformMethod: function(tree) { var name = this.transformAny(tree.name); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var $__3 = this.transformParameterListAndBody_(tree), parameterList = $__3.parameterList, body = $__3.body; if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && parameterList === tree.parameterList && body === tree.body) { return tree; } return new Method(tree.location, tree.isStatic, tree.functionKind, name, parameterList, typeAnnotation, annotations, body, tree.debugName); }, transformGetAccessor: function(tree) { var name = this.transformAny(tree.name); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var body = this.getDoNotRecurse(tree) ? tree.body : this.transformAny(tree.body); if (name === tree.name && typeAnnotation === tree.typeAnnotation && annotations === tree.annotations && body === tree.body) { return tree; } return new GetAccessor(tree.location, tree.isStatic, name, typeAnnotation, annotations, body); }, transformSetAccessor: function(tree) { var name = this.transformAny(tree.name); var annotations = this.transformList(tree.annotations); var $__3 = this.transformParameterListAndBody_(tree), parameterList = $__3.parameterList, body = $__3.body; if (name === tree.name && annotations === tree.annotations && parameterList === tree.parameterList && body === tree.body) { return tree; } return new SetAccessor(tree.location, tree.isStatic, name, parameterList, annotations, body); }, getDoNotRecurse: function(tree) { return this.varName_ === ARGUMENTS || this.varName_ === THIS || variablesInFunction(tree).has(this.varName_); }, transformCatch: function(tree) { if (!tree.binding.isPattern() && this.varName_ === tree.binding.identifierToken.value) { return tree; } return $traceurRuntime.superGet(this, ScopeTransformer.prototype, "transformCatch").call(this, tree); } }, {}, $__super); }(ParseTreeTransformer); return {get ScopeTransformer() { return ScopeTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AlphaRenamer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/AlphaRenamer.js"; var ScopeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeTransformer.js", "traceur@0.0.112/src/codegeneration/AlphaRenamer.js")).ScopeTransformer; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AlphaRenamer.js")), FunctionDeclaration = $__2.FunctionDeclaration, FunctionExpression = $__2.FunctionExpression; var THIS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/AlphaRenamer.js")).THIS; var createIdentifierExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AlphaRenamer.js")).createIdentifierExpression; var AlphaRenamer = function($__super) { function AlphaRenamer(varName, newName) { $traceurRuntime.superConstructor(AlphaRenamer).call(this, varName); this.newName_ = newName; } return ($traceurRuntime.createClass)(AlphaRenamer, { transformIdentifierExpression: function(tree) { if (this.varName_ === tree.identifierToken.value) { return createIdentifierExpression(this.newName_); } else { return tree; } }, transformThisExpression: function(tree) { if (this.varName_ !== THIS) return tree; return createIdentifierExpression(this.newName_); }, transformFunctionDeclaration: function(tree) { if (this.varName_ === tree.name) { tree = new FunctionDeclaration(tree.location, this.newName_, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body); } return $traceurRuntime.superGet(this, AlphaRenamer.prototype, "transformFunctionDeclaration").call(this, tree); }, transformFunctionExpression: function(tree) { if (this.varName_ === tree.name) { tree = new FunctionExpression(tree.location, this.newName_, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body); } return $traceurRuntime.superGet(this, AlphaRenamer.prototype, "transformFunctionExpression").call(this, tree); } }, {rename: function(tree, varName, newName) { return new AlphaRenamer(varName, newName).transformAny(tree); }}, $__super); }(ScopeTransformer); return {get AlphaRenamer() { return AlphaRenamer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindThisOrArguments.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/FindThisOrArguments.js"; var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/FindThisOrArguments.js")).ARGUMENTS; var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/FindThisOrArguments.js")).FindInFunctionScope; var FindThisOrArguments = function($__super) { function FindThisOrArguments() { $traceurRuntime.superConstructor(FindThisOrArguments).call(this); this.foundThis = false; this.foundArguments = false; } return ($traceurRuntime.createClass)(FindThisOrArguments, { visitThisExpression: function(tree) { this.foundThis = true; this.found = this.foundArguments; }, visitIdentifierExpression: function(tree) { if (tree.identifierToken.value === ARGUMENTS) { this.foundArguments = true; this.found = this.foundThis; } } }, {}, $__super); }(FindInFunctionScope); return {get FindThisOrArguments() { return FindThisOrArguments; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js"; var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js")), ARGUMENTS = $__0.ARGUMENTS, THIS = $__0.THIS; var AlphaRenamer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AlphaRenamer.js", "traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js")).AlphaRenamer; var FindThisOrArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindThisOrArguments.js", "traceur@0.0.112/src/codegeneration/alphaRenameThisAndArguments.js")).FindThisOrArguments; function alphaRenameThisAndArguments(tempVarTransformer, tree) { var finder = new FindThisOrArguments(); finder.visitAny(tree); if (finder.foundArguments) { var argumentsTempName = tempVarTransformer.addTempVarForArguments(); tree = AlphaRenamer.rename(tree, ARGUMENTS, argumentsTempName); } if (finder.foundThis) { var thisTempName = tempVarTransformer.addTempVarForThis(); tree = AlphaRenamer.rename(tree, THIS, thisTempName); } return tree; } return {get default() { return alphaRenameThisAndArguments; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js"; var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")).default; var FunctionExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")).FunctionExpression; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")).TempVarTransformer; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")), LET = $__4.LET, STAR = $__4.STAR, VAR = $__4.VAR; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")), COMPREHENSION_FOR = $__5.COMPREHENSION_FOR, COMPREHENSION_IF = $__5.COMPREHENSION_IF; var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Token.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")).Token; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ComprehensionTransformer.js")), createCallExpression = $__7.createCallExpression, createEmptyParameterList = $__7.createEmptyParameterList, createForOfStatement = $__7.createForOfStatement, createFunctionBody = $__7.createFunctionBody, createIfStatement = $__7.createIfStatement, createParenExpression = $__7.createParenExpression, createVariableDeclarationList = $__7.createVariableDeclarationList; var ComprehensionTransformer = function($__super) { function ComprehensionTransformer() { $traceurRuntime.superConstructor(ComprehensionTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(ComprehensionTransformer, {transformComprehension: function(tree, statement, isGenerator) { var prefix = arguments[3]; var suffix = arguments[4]; var bindingKind = isGenerator || !this.options.blockBinding ? VAR : LET; var statements = prefix ? [prefix] : []; for (var i = tree.comprehensionList.length - 1; i >= 0; i--) { var item = tree.comprehensionList[i]; switch (item.type) { case COMPREHENSION_IF: { var expression = this.transformAny(item.expression); statement = createIfStatement(expression, statement); break; } case COMPREHENSION_FOR: { var left = this.transformAny(item.left); var iterator = this.transformAny(item.iterator); var initializer = createVariableDeclarationList(bindingKind, left, null); statement = createForOfStatement(initializer, iterator, statement); break; } default: throw new Error('Unreachable.'); } } statement = alphaRenameThisAndArguments(this, statement); statements.push(statement); if (suffix) statements.push(suffix); var functionKind = isGenerator ? new Token(STAR, null) : null; var func = new FunctionExpression(null, null, functionKind, createEmptyParameterList(), null, [], createFunctionBody(statements)); return createParenExpression(createCallExpression(func)); }}, {}, $__super); }(TempVarTransformer); return {get ComprehensionTransformer() { return ComprehensionTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js"; var ComprehensionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ComprehensionTransformer.js", "traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js")).ComprehensionTransformer; var createIdentifierExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js")).createIdentifierExpression; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ArrayComprehensionTransformer.js")).parseStatement; var ArrayComprehensionTransformer = function($__super) { function ArrayComprehensionTransformer() { $traceurRuntime.superConstructor(ArrayComprehensionTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(ArrayComprehensionTransformer, {transformArrayComprehension: function(tree) { this.pushTempScope(); var expression = this.transformAny(tree.expression); var index = createIdentifierExpression(this.getTempIdentifier()); var result = createIdentifierExpression(this.getTempIdentifier()); var tempVarsStatatement = parseStatement($traceurRuntime.getTemplateObject(["var ", " = 0, ", " = [];"]), index, result); var statement = parseStatement($traceurRuntime.getTemplateObject(["", "[", "++] = ", ";"]), result, index, expression); var returnStatement = parseStatement($traceurRuntime.getTemplateObject(["return ", ";"]), result); var functionKind = null; result = this.transformComprehension(tree, statement, functionKind, tempVarsStatatement, returnStatement); this.popTempScope(); return result; }}, {}, $__super); }(ComprehensionTransformer); return {get ArrayComprehensionTransformer() { return ArrayComprehensionTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ParenTrait.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ParenTrait.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ParenTrait.js")), ArgumentList = $__2.ArgumentList, ArrayLiteral = $__2.ArrayLiteral, BinaryExpression = $__2.BinaryExpression, ConditionalExpression = $__2.ConditionalExpression, ExpressionStatement = $__2.ExpressionStatement, NewExpression = $__2.NewExpression, ParenExpression = $__2.ParenExpression, PropertyNameAssignment = $__2.PropertyNameAssignment, VariableDeclaration = $__2.VariableDeclaration; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ParenTrait.js")), CALL_EXPRESSION = $__3.CALL_EXPRESSION, COMMA_EXPRESSION = $__3.COMMA_EXPRESSION, FUNCTION_EXPRESSION = $__3.FUNCTION_EXPRESSION, OBJECT_LITERAL = $__3.OBJECT_LITERAL, OBJECT_PATTERN = $__3.OBJECT_PATTERN, TEMPLATE_LITERAL_EXPRESSION = $__3.TEMPLATE_LITERAL_EXPRESSION, YIELD_EXPRESSION = $__3.YIELD_EXPRESSION; function wrap(tree) { return new ParenExpression(tree.location, tree); } function ParenTrait(ParseTreeTransformerClass) { return function($__super) { function $__0() { $traceurRuntime.superConstructor($__0).apply(this, arguments); } return ($traceurRuntime.createClass)($__0, { transformVariableDeclaration: function(tree) { var lvalue = this.transformAny(tree.lvalue); var typeAnnotation = this.transformAny(tree.typeAnnotation); var initializer = this.transformAny(tree.initializer); if (initializer !== null && initializer.type === COMMA_EXPRESSION) { initializer = wrap(initializer); } else if (tree.lvalue === lvalue && tree.typeAnnotation === typeAnnotation && tree.initializer === initializer) { return tree; } return new VariableDeclaration(tree.location, lvalue, typeAnnotation, initializer); }, transformExpressionStatement: function(tree) { var expression = this.transformAny(tree.expression); switch (expression.type) { case OBJECT_LITERAL: case OBJECT_PATTERN: case FUNCTION_EXPRESSION: expression = wrap(expression); break; } if (tree.expression === expression) { return tree; } return new ExpressionStatement(tree.location, expression); }, transformNewExpression: function(tree) { var operand = this.transformAny(tree.operand); var args = this.transformAny(tree.args); switch (operand.type) { case CALL_EXPRESSION: case TEMPLATE_LITERAL_EXPRESSION: operand = wrap(operand); } if (operand === tree.operand && args === tree.args) { return tree; } return new NewExpression(tree.location, operand, args); }, transformExpressionList_: function(list) { var expressions = this.transformList(list); var newList = null; for (var i = 0; i < list.length; i++) { var expression = expressions[i]; if (expression !== null && expression.type === COMMA_EXPRESSION) { expression = wrap(expression); if (newList === null) { newList = expressions.slice(0, i); } newList.push(expression); } else if (newList !== null) { newList.push(expression); } } if (newList !== null) { return newList; } return expressions; }, transformArgumentList: function(tree) { var args = this.transformExpressionList_(tree.args); if (tree.args === args) { return tree; } return new ArgumentList(tree.location, args); }, transformArrayLiteral: function(tree) { var elements = this.transformExpressionList_(tree.elements); if (tree.elements === elements) { return tree; } return new ArrayLiteral(tree.location, elements); }, transformPropertyNameAssignment: function(tree) { var name = this.transformAny(tree.name); var value = this.transformAny(tree.value); if (value.type === COMMA_EXPRESSION) { value = wrap(value); } else if (name === tree.name && value === tree.value) { return tree; } return new PropertyNameAssignment(tree.location, name, value); }, transformBinaryExpression: function(tree) { var left = this.transformAny(tree.left); var right = this.transformAny(tree.right); if (commaOrYield(left.type)) { left = wrap(left); } if (commaOrYield(right.type)) { right = wrap(right); } if (left === tree.left && right === tree.right) { return tree; } return new BinaryExpression(tree.location, left, tree.operator, right); }, transformConditionalExpression: function(tree) { var condition = this.transformAny(tree.condition); var left = this.transformAny(tree.left); var right = this.transformAny(tree.right); if (commaOrYield(condition.type)) { condition = wrap(condition); } if (left.type == COMMA_EXPRESSION) { left = wrap(left); } if (right.type == COMMA_EXPRESSION) { right = wrap(right); } if (condition === tree.condition && left === tree.left && right === tree.right) { return tree; } return new ConditionalExpression(tree.location, condition, left, right); } }, {}, $__super); }(ParseTreeTransformerClass); } function commaOrYield(type) { return type === COMMA_EXPRESSION || type == YIELD_EXPRESSION; } return {get ParenTrait() { return ParenTrait; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")), ARGUMENTS = $__1.ARGUMENTS, CONSTRUCTOR = $__1.CONSTRUCTOR, THIS = $__1.THIS; var AlphaRenamer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AlphaRenamer.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).AlphaRenamer; var FunctionExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).FunctionExpression; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).TempVarTransformer; var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).ParenTrait; var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).default; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")), FUNCTION_BODY = $__7.FUNCTION_BODY, LITERAL_PROPERTY_NAME = $__7.LITERAL_PROPERTY_NAME; var FindThisOrArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindThisOrArguments.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")).FindThisOrArguments; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ArrowFunctionTransformer.js")), createAssignmentExpression = $__9.createAssignmentExpression, createCommaExpression = $__9.createCommaExpression, createFunctionBody = $__9.createFunctionBody, createIdentifierExpression = $__9.createIdentifierExpression, createReturnStatement = $__9.createReturnStatement, createThisExpression = $__9.createThisExpression; function convertConciseBody(tree) { if (tree.type !== FUNCTION_BODY) return createFunctionBody([createReturnStatement(tree)]); return tree; } var ArrowFunctionTransformer = function($__super) { function ArrowFunctionTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(ArrowFunctionTransformer).call(this, identifierGenerator, reporter, options); this.inDerivedClass_ = false; this.inConstructor_ = false; } return ($traceurRuntime.createClass)(ArrowFunctionTransformer, { transformArrowFunction: function(tree) { if (this.inDerivedClass_ && this.inConstructor_) { return this.transformUsingCommaExpression_(tree); } return this.transformUsingTempVar_(tree); }, transformUsingCommaExpression_: function(tree) { var finder = new FindThisOrArguments(); var argumentsTempName, thisTempName; finder.visitAny(tree); if (finder.foundArguments) { argumentsTempName = this.addTempVar(); tree = AlphaRenamer.rename(tree, ARGUMENTS, argumentsTempName); } if (finder.foundThis) { thisTempName = this.addTempVar(); tree = AlphaRenamer.rename(tree, THIS, thisTempName); } var parameterList = this.transformAny(tree.parameterList); var body = this.transformAny(tree.body); body = convertConciseBody(body); var functionExpression = new FunctionExpression(tree.location, null, tree.functionKind, parameterList, null, [], body); var expressions = []; if (argumentsTempName) { expressions.push(createAssignmentExpression(createIdentifierExpression(argumentsTempName), createIdentifierExpression(ARGUMENTS))); } if (thisTempName) { expressions.push(createAssignmentExpression(createIdentifierExpression(thisTempName), createThisExpression())); } if (expressions.length === 0) { return functionExpression; } expressions.push(functionExpression); return createCommaExpression(expressions); }, transformUsingTempVar_: function(tree) { var alphaRenamed = alphaRenameThisAndArguments(this, tree); var parameterList = this.transformAny(alphaRenamed.parameterList); var body = this.transformAny(alphaRenamed.body); body = convertConciseBody(body); var functionExpression = new FunctionExpression(tree.location, null, tree.functionKind, parameterList, null, [], body); return functionExpression; }, transformClassExpression: function(tree) { var inDerivedClass = this.inDerivedClass_; this.inDerivedClass_ = tree.superClass !== null; var result = $traceurRuntime.superGet(this, ArrowFunctionTransformer.prototype, "transformClassExpression").call(this, tree); this.inDerivedClass_ = inDerivedClass; return result; }, transformClassDeclaration: function(tree) { var inDerivedClass = this.inDerivedClass_; this.inDerivedClass_ = tree.superClass !== null; var result = $traceurRuntime.superGet(this, ArrowFunctionTransformer.prototype, "transformClassDeclaration").call(this, tree); this.inDerivedClass_ = inDerivedClass; return result; }, transformMethod: function(tree) { var inConstructor = this.inConstructor_; this.inConstructor_ = !tree.isStatic && tree.functionKind === null && tree.name.type === LITERAL_PROPERTY_NAME && tree.name.literalToken.value === CONSTRUCTOR; var result = $traceurRuntime.superGet(this, ArrowFunctionTransformer.prototype, "transformMethod").call(this, tree); this.inConstructor_ = inConstructor; return result; } }, {transform: function(tempVarTransformer, tree) { tree = alphaRenameThisAndArguments(tempVarTransformer, tree); var body = convertConciseBody(tree.body); return new FunctionExpression(tree.location, null, tree.functionKind, tree.parameterList, null, [], body); }}, $__super); }(ParenTrait(TempVarTransformer)); return {get ArrowFunctionTransformer() { return ArrowFunctionTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js"; var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).default; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")), createArgumentList = $__2.createArgumentList, createBlock = $__2.createBlock, createFunctionBody = $__2.createFunctionBody, id = $__2.createIdentifierExpression, createMemberExpression = $__2.createMemberExpression, createThisExpression = $__2.createThisExpression, createVariableDeclaration = $__2.createVariableDeclaration, createVariableDeclarationList = $__2.createVariableDeclarationList, createVariableStatement = $__2.createVariableStatement; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).parseStatement; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).default; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).TempVarTransformer; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")), AwaitExpression = $__6.AwaitExpression, Block = $__6.Block, CallExpression = $__6.CallExpression, Catch = $__6.Catch; var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).default; var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).ARGUMENTS; var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformer.js")).VAR; var AsyncGeneratorTransformer = function($__super) { function AsyncGeneratorTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(AsyncGeneratorTransformer).call(this, identifierGenerator, reporter, options); this.variableDeclarations_ = []; this.ctx_ = id(this.getTempIdentifier()); } return ($traceurRuntime.createClass)(AsyncGeneratorTransformer, { transformYieldExpression: function(tree) { var argList = createArgumentList([tree.expression]); if (tree.isYieldFor) { return new AwaitExpression(tree.location, new CallExpression(null, createMemberExpression(this.ctx_, 'yieldFor'), argList)); } return new CallExpression(tree.location, createMemberExpression(this.ctx_, 'yield'), argList); }, transformCatch: function(tree) { var body = tree.catchBody; body = new Block(body.location, $traceurRuntime.spread([parseStatement($traceurRuntime.getTemplateObject(["\n if (", ".inReturn) {\n throw undefined;\n }"]), this.ctx_)], body.statements)); return new Catch(tree.location, tree.binding, body); }, transformAsyncGeneratorBody_: function(tree, name) { tree = this.transformAny(tree); tree = alphaRenameThisAndArguments(this, tree); var statements = []; if (this.variableDeclarations_.length > 0) { statements.push(createVariableStatement(createVariableDeclarationList(VAR, this.variableDeclarations_))); } var body = createBlock(tree.statements); var createAsyncGeneratorInstance = this.getRuntimeExpression('createAsyncGeneratorInstance'); statements.push(parseStatement($traceurRuntime.getTemplateObject(["\n return ", "(\n async function (", ") {\n ", "\n }, ", ");"]), createAsyncGeneratorInstance, this.ctx_, body, name)); return createFunctionBody(statements); }, addTempVarForArguments: function() { var tmpVarName = this.getTempIdentifier(); this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, id(ARGUMENTS))); return tmpVarName; }, addTempVarForThis: function() { var tmpVarName = this.getTempIdentifier(); this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createThisExpression())); return tmpVarName; } }, {transformAsyncGeneratorBody: function(identifierGenerator, reporter, options, body, name) { return new AsyncGeneratorTransformer(identifierGenerator, reporter, options).transformAsyncGeneratorBody_(body, name); }}, $__super); }(SkipFunctionsTransformerTrait(ImportRuntimeTrait(TempVarTransformer))); return {get AsyncGeneratorTransformer() { return AsyncGeneratorTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js"; var AsyncGeneratorTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AsyncGeneratorTransformer.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")).AsyncGeneratorTransformer; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")).TempVarTransformer; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")), AnonBlock = $__3.AnonBlock, FunctionDeclaration = $__3.FunctionDeclaration, FunctionExpression = $__3.FunctionExpression; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")).default; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")), createBindingIdentifier = $__5.createBindingIdentifier, id = $__5.createIdentifierExpression, createIdentifierToken = $__5.createIdentifierToken; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AsyncGeneratorTransformPass.js")), parseExpression = $__6.parseExpression, parseStatement = $__6.parseStatement; var AsyncGeneratorTransformPass = function($__super) { function AsyncGeneratorTransformPass(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(AsyncGeneratorTransformPass).call(this, identifierGenerator, reporter, options); this.transformOptions_ = options.transformOptions; this.inBlock_ = false; } return ($traceurRuntime.createClass)(AsyncGeneratorTransformPass, { needsTransform_: function(tree) { return this.transformOptions_.asyncGenerators && tree.isAsyncGenerator(); }, transformFunctionDeclaration: function(tree) { if (!this.needsTransform_(tree)) return $traceurRuntime.superGet(this, AsyncGeneratorTransformPass.prototype, "transformFunctionDeclaration").call(this, tree); var nameIdExpression = id(tree.name.identifierToken); var initAsyncGeneratorFunction = this.getRuntimeExpression('initAsyncGeneratorFunction'); var setupPrototypeExpression = parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initAsyncGeneratorFunction, nameIdExpression); var tmpVar = id(this.inBlock_ ? this.getTempIdentifier() : this.addTempVar(setupPrototypeExpression)); var funcDecl = this.transformFunction_(tree, FunctionDeclaration, tmpVar); if (!this.inBlock_) return funcDecl; return new AnonBlock(null, [funcDecl, parseStatement($traceurRuntime.getTemplateObject(["var ", " = ", ""]), tmpVar, setupPrototypeExpression)]); }, transformFunctionExpression: function(tree) { if (!this.needsTransform_(tree)) { return $traceurRuntime.superGet(this, AsyncGeneratorTransformPass.prototype, "transformFunctionExpression").call(this, tree); } var name; if (!tree.name) { name = createIdentifierToken(this.getTempIdentifier()); tree = new FunctionExpression(tree.location, createBindingIdentifier(name), tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body); } else { name = tree.name.identifierToken; } var functionExpression = this.transformFunction_(tree, FunctionExpression, id(name)); var initAsyncGeneratorFunction = this.getRuntimeExpression('initAsyncGeneratorFunction'); return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initAsyncGeneratorFunction, functionExpression); }, transformFunction_: function(tree, constructor, nameExpression) { var body = $traceurRuntime.superGet(this, AsyncGeneratorTransformPass.prototype, "transformAny").call(this, tree.body); body = AsyncGeneratorTransformer.transformAsyncGeneratorBody(this.identifierGenerator, this.reporter, this.options, body, nameExpression); var functionKind = null; return new constructor(tree.location, tree.name, functionKind, tree.parameterList, tree.typeAnnotation || null, tree.annotations || null, body); }, transformBlock: function(tree) { var inBlock = this.inBlock_; this.inBlock_ = true; var rv = $traceurRuntime.superGet(this, AsyncGeneratorTransformPass.prototype, "transformBlock").call(this, tree); this.inBlock_ = inBlock; return rv; } }, {}, $__super); }(ImportRuntimeTrait(TempVarTransformer)); return {get AsyncGeneratorTransformPass() { return AsyncGeneratorTransformPass; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindArguments.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/FindArguments.js"; var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/FindArguments.js")).ARGUMENTS; var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/FindArguments.js")).FindInFunctionScope; var FindArguments = function($__super) { function FindArguments() { $traceurRuntime.superConstructor(FindArguments).apply(this, arguments); } return ($traceurRuntime.createClass)(FindArguments, {visitIdentifierExpression: function(tree) { if (tree.identifierToken.value === ARGUMENTS) { this.found = true; } }}, {}, $__super); }(FindInFunctionScope); return {get default() { return FindArguments; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js"; var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).ARGUMENTS; var FindArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindArguments.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).default; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")), FunctionBody = $__3.FunctionBody, FunctionDeclaration = $__3.FunctionDeclaration, FunctionExpression = $__3.FunctionExpression, Method = $__3.Method, YieldExpression = $__3.YieldExpression; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).default; var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).ParenTrait; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).parseStatement; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")).TempVarTransformer; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/AsyncToGeneratorTransformer.js")), createIdentifierExpression = $__8.createIdentifierExpression, createNullLiteral = $__8.createNullLiteral; var AsyncToGeneratorTransformer = function($__super) { function AsyncToGeneratorTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(AsyncToGeneratorTransformer).call(this, identifierGenerator, reporter, options); this.inAsyncFunction_ = false; } return ($traceurRuntime.createClass)(AsyncToGeneratorTransformer, { transformFunctionDeclaration: function(tree) { if (tree.isAsyncFunction()) { return this.transformFunctionShared_(tree, FunctionDeclaration); } return $traceurRuntime.superGet(this, AsyncToGeneratorTransformer.prototype, "transformFunctionDeclaration").call(this, tree); }, transformFunctionExpression: function(tree) { if (tree.isAsyncFunction()) { return this.transformFunctionShared_(tree, FunctionExpression); } return $traceurRuntime.superGet(this, AsyncToGeneratorTransformer.prototype, "transformFunctionExpression").call(this, tree); }, transformFunctionShared_: function(tree, ctor) { var parameterList = this.transformAny(tree.parameterList); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var body = this.transformAsyncBody_(tree.body); return new ctor(tree.location, tree.name, null, parameterList, typeAnnotation, annotations, body); }, transformAsyncBody_: function(body) { var inAsyncFunction = this.inAsyncFunction_; this.inAsyncFunction_ = true; body = this.transformFunctionBody(body); var spawn = this.getRuntimeExpression('spawn'); body = wrapBodyInSpawn(body, spawn); this.inAsyncFunction_ = inAsyncFunction; return body; }, transformMethod: function(tree) { if (tree.isAsyncFunction()) { var name = this.transformAny(tree.name); var parameterList = this.transformAny(tree.parameterList); var typeAnnotation = this.transformAny(tree.typeAnnotation); var annotations = this.transformList(tree.annotations); var body = this.transformAsyncBody_(tree.body); return new Method(tree.location, tree.isStatic, null, name, parameterList, typeAnnotation, annotations, body, tree.debugName); } return $traceurRuntime.superGet(this, AsyncToGeneratorTransformer.prototype, "transformMethod").call(this, tree); }, transformAwaitExpression: function(tree) { if (this.inAsyncFunction_) { var expression = this.transformAny(tree.expression); return new YieldExpression(tree.location, expression, false); } return $traceurRuntime.superGet(this, AsyncToGeneratorTransformer.prototype, "transformAwaitExpression").call(this, tree); } }, {}, $__super); }(ImportRuntimeTrait(ParenTrait(TempVarTransformer))); function wrapBodyInSpawn(body, spawn) { var visitor = new FindArguments(); visitor.visitAny(body); var argExpr = visitor.found ? createIdentifierExpression(ARGUMENTS) : createNullLiteral(); var statement = parseStatement($traceurRuntime.getTemplateObject(["return ", "(this, ", ", function*() { ", " });"]), spawn, argExpr, body); return new FunctionBody(body.location, [statement]); } return {get AsyncToGeneratorTransformer() { return AsyncToGeneratorTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FindIdentifiers.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/FindIdentifiers.js"; var ScopeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/ScopeVisitor.js", "traceur@0.0.112/src/codegeneration/FindIdentifiers.js")).ScopeVisitor; var FindIdentifiers = function($__super) { function FindIdentifiers(tree, filterFunction) { $traceurRuntime.superConstructor(FindIdentifiers).call(this); this.filterFunction_ = filterFunction; this.found_ = false; this.visitAny(tree); } return ($traceurRuntime.createClass)(FindIdentifiers, { visitIdentifierExpression: function(tree) { if (this.filterFunction_(tree.identifierToken.value, this.scope.tree)) { this.found = true; } }, get found() { return this.found_; }, set found(v) { if (v) { this.found_ = true; } }, visitAny: function(tree) { !this.found_ && tree && tree.visit(this); }, visitList: function(list) { if (list) { for (var i = 0; !this.found_ && i < list.length; i++) { this.visitAny(list[i]); } } } }, {}, $__super); }(ScopeVisitor); return {get FindIdentifiers() { return FindIdentifiers; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).ParseTreeTransformer; var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).default; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).parseStatement; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")), AnonBlock = $__6.AnonBlock, BreakStatement = $__6.BreakStatement, ContinueStatement = $__6.ContinueStatement, FormalParameterList = $__6.FormalParameterList, FunctionExpression = $__6.FunctionExpression, ReturnStatement = $__6.ReturnStatement, YieldExpression = $__6.YieldExpression; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")), createArgumentList = $__7.createArgumentList, createAssignmentStatement = $__7.createAssignmentStatement, createAssignmentExpression = $__7.createAssignmentExpression, createBlock = $__7.createBlock, createCallExpression = $__7.createCallExpression, createCaseClause = $__7.createCaseClause, createDefaultClause = $__7.createDefaultClause, createExpressionStatement = $__7.createExpressionStatement, createFunctionBody = $__7.createFunctionBody, createFunctionExpression = $__7.createFunctionExpression, createIdentifierExpression = $__7.createIdentifierExpression, createNumberLiteral = $__7.createNumberLiteral, createObjectLiteralForDescriptor = $__7.createObjectLiteralForDescriptor, createSwitchStatement = $__7.createSwitchStatement, createThisExpression = $__7.createThisExpression, createVariableDeclaration = $__7.createVariableDeclaration, createVariableDeclarationList = $__7.createVariableDeclarationList, createVariableStatement = $__7.createVariableStatement, createVoid0 = $__7.createVoid0; var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).ARGUMENTS; var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).default; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).StringSet; var Token = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Token.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")).Token; var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/FnExtractAbruptCompletions.js")), STAR = $__12.STAR, VAR = $__12.VAR; var FnExtractAbruptCompletions = function($__super) { function FnExtractAbruptCompletions(idGenerator, requestParentLabel) { $traceurRuntime.superConstructor(FnExtractAbruptCompletions).call(this); this.idGenerator_ = idGenerator; this.inLoop_ = 0; this.inBreakble_ = 0; this.variableDeclarations_ = []; this.extractedStatements_ = []; this.requestParentLabel_ = requestParentLabel; this.labelledStatements_ = new StringSet(); } return ($traceurRuntime.createClass)(FnExtractAbruptCompletions, { createIIFE: function(body, paramList, argsList, inGenerator) { body = this.transformAny(body); body = alphaRenameThisAndArguments(this, body); var tmpFnName = this.idGenerator_.generateUniqueIdentifier(); var functionKind = inGenerator ? new Token(STAR, null) : null; var functionExpression = new FunctionExpression(null, null, functionKind, new FormalParameterList(null, paramList), null, [], createFunctionBody(body.statements || [body])); this.variableDeclarations_.push(createVariableDeclaration(tmpFnName, functionExpression)); var functionCall = createCallExpression(createIdentifierExpression(tmpFnName), createArgumentList(argsList)); if (inGenerator) { functionCall = new YieldExpression(null, functionCall, true); } var loopBody = null; if (this.extractedStatements_.length || this.hasReturns) { var tmpVarName = createIdentifierExpression(this.idGenerator_.generateUniqueIdentifier()); this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, null)); var maybeReturn; if (this.hasReturns) { maybeReturn = parseStatement($traceurRuntime.getTemplateObject(["if (typeof ", " === \"object\")\n return ", ".v;"]), tmpVarName, tmpVarName); } if (this.extractedStatements_.length) { var caseClauses = this.extractedStatements_.map(function(statement, index) { return createCaseClause(createNumberLiteral(index), [statement]); }); if (maybeReturn) { caseClauses.push(createDefaultClause([maybeReturn])); } loopBody = createBlock([createExpressionStatement(createAssignmentExpression(tmpVarName, functionCall)), createSwitchStatement(tmpVarName, caseClauses)]); } else { loopBody = createBlock([createExpressionStatement(createAssignmentExpression(tmpVarName, functionCall)), maybeReturn]); } } else { loopBody = createBlock([createExpressionStatement(functionCall)]); } return { variableStatements: createVariableStatement(createVariableDeclarationList(VAR, this.variableDeclarations_)), loopBody: loopBody }; }, addTempVarForArguments: function() { var tmpVarName = this.idGenerator_.generateUniqueIdentifier(); this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createIdentifierExpression(ARGUMENTS))); return tmpVarName; }, addTempVarForThis: function() { var tmpVarName = this.idGenerator_.generateUniqueIdentifier(); this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createThisExpression())); return tmpVarName; }, transformAny: function(tree) { if (tree) { if (tree.isBreakableStatement()) this.inBreakble_++; if (tree.isIterationStatement()) this.inLoop_++; tree = $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformAny").call(this, tree); if (tree.isBreakableStatement()) this.inBreakble_--; if (tree.isIterationStatement()) this.inLoop_--; } return tree; }, transformReturnStatement: function(tree) { this.hasReturns = true; return new ReturnStatement(tree.location, createObjectLiteralForDescriptor({v: tree.expression || createVoid0()})); }, transformAbruptCompletion_: function(tree) { this.extractedStatements_.push(tree); var index = this.extractedStatements_.length - 1; return parseStatement($traceurRuntime.getTemplateObject(["return ", ";"]), index); }, transformBreakStatement: function(tree) { if (!tree.name) { if (this.inBreakble_) { return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformBreakStatement").call(this, tree); } else { tree = new BreakStatement(tree.location, this.requestParentLabel_()); } } else if (this.labelledStatements_.has(tree.name.value)) { return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformBreakStatement").call(this, tree); } return this.transformAbruptCompletion_(tree); }, transformContinueStatement: function(tree) { if (!tree.name) { if (this.inLoop_) { return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformContinueStatement").call(this, tree); } else { tree = new ContinueStatement(tree.location, this.requestParentLabel_()); } } else if (this.labelledStatements_.has(tree.name.value)) { return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformContinueStatement").call(this, tree); } return this.transformAbruptCompletion_(tree); }, transformLabelledStatement: function(tree) { this.labelledStatements_.add(tree.name.value); return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformLabelledStatement").call(this, tree); }, transformVariableStatement: function(tree) { var $__2 = this; if (tree.declarations.declarationType === VAR) { var assignments = []; tree.declarations.declarations.forEach(function(variableDeclaration) { var variableName = variableDeclaration.lvalue.getStringValue(); var initializer = $traceurRuntime.superGet($__2, FnExtractAbruptCompletions.prototype, "transformAny").call($__2, variableDeclaration.initializer); $__2.variableDeclarations_.push(createVariableDeclaration(variableName, null)); assignments.push(createAssignmentStatement(createIdentifierExpression(variableName), initializer)); }); return new AnonBlock(null, assignments); } return $traceurRuntime.superGet(this, FnExtractAbruptCompletions.prototype, "transformVariableStatement").call(this, tree); } }, {createIIFE: function(idGenerator, body, paramList, argsList, requestParentLabel, inGenerator) { return new FnExtractAbruptCompletions(idGenerator, requestParentLabel).createIIFE(body, paramList, argsList, inGenerator); }}, $__super); }(SkipFunctionsTransformerTrait(ParseTreeTransformer)); return {get FnExtractAbruptCompletions() { return FnExtractAbruptCompletions; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ScopeReferences.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/ScopeReferences.js"; var Scope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Scope.js", "traceur@0.0.112/src/semantics/ScopeReferences.js")).Scope; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/semantics/ScopeReferences.js")).StringSet; var ScopeReferences = function($__super) { function ScopeReferences(parent, tree) { $traceurRuntime.superConstructor(ScopeReferences).call(this, parent, tree); this.freeVars_ = new StringSet(); } return ($traceurRuntime.createClass)(ScopeReferences, { addReference: function(name) { this.freeVars_.add(name); }, hasFreeVariable: function(name) { return this.freeVars_.has(name); } }, {}, $__super); }(Scope); return {get ScopeReferences() { return ScopeReferences; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js"; var ScopeChainBuilder = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeChainBuilder.js", "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js")).ScopeChainBuilder; var ScopeReferences = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeReferences.js", "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js")).ScopeReferences; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js")), FUNCTION_DECLARATION = $__3.FUNCTION_DECLARATION, FUNCTION_EXPRESSION = $__3.FUNCTION_EXPRESSION, GET_ACCESSOR = $__3.GET_ACCESSOR, IDENTIFIER_EXPRESSION = $__3.IDENTIFIER_EXPRESSION, METHOD = $__3.METHOD, MODULE = $__3.MODULE, SET_ACCESSOR = $__3.SET_ACCESSOR; var TYPEOF = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/ScopeChainBuilderWithReferences.js")).TYPEOF; function hasArgumentsInScope(scope) { for (; scope; scope = scope.parent) { switch (scope.tree.type) { case FUNCTION_DECLARATION: case FUNCTION_EXPRESSION: case GET_ACCESSOR: case METHOD: case SET_ACCESSOR: return true; } } return false; } function inModuleScope(scope) { for (; scope; scope = scope.parent) { if (scope.tree.type === MODULE) { return true; } } return false; } var ScopeChainBuilderWithReferences = function($__super) { function ScopeChainBuilderWithReferences() { $traceurRuntime.superConstructor(ScopeChainBuilderWithReferences).apply(this, arguments); } return ($traceurRuntime.createClass)(ScopeChainBuilderWithReferences, { createScope: function(tree) { return new ScopeReferences(this.scope, tree); }, visitIdentifierExpression: function(tree) { if (this.inWithBlock) { return; } var scope = this.scope; var name = tree.getStringValue(); if (name === 'arguments' && hasArgumentsInScope(scope)) { return; } if (name === '__moduleName' && inModuleScope(scope)) { return; } this.referenceFound(tree, name); }, visitUnaryExpression: function(tree) { if (tree.operator.type === TYPEOF && tree.operand.type === IDENTIFIER_EXPRESSION) { var scope = this.scope; var binding = scope.getBinding(tree.operand); if (!binding) { scope.addVar(tree.operand, this.reporter); } } else { $traceurRuntime.superGet(this, ScopeChainBuilderWithReferences.prototype, "visitUnaryExpression").call(this, tree); } }, referenceFound: function(tree, name) { this.scope.addReference(name); } }, {}, $__super); }(ScopeChainBuilder); return {get ScopeChainBuilderWithReferences() { return ScopeChainBuilderWithReferences; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js"; var AlphaRenamer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AlphaRenamer.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).AlphaRenamer; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")), ANON_BLOCK = $__7.ANON_BLOCK, BINDING_IDENTIFIER = $__7.BINDING_IDENTIFIER, FOR_IN_STATEMENT = $__7.FOR_IN_STATEMENT, FOR_OF_STATEMENT = $__7.FOR_OF_STATEMENT, VARIABLE_DECLARATION_LIST = $__7.VARIABLE_DECLARATION_LIST; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")), AnonBlock = $__8.AnonBlock, BindingElement = $__8.BindingElement, BindingIdentifier = $__8.BindingIdentifier, Block = $__8.Block, Catch = $__8.Catch, DoWhileStatement = $__8.DoWhileStatement, ForInStatement = $__8.ForInStatement, ForStatement = $__8.ForStatement, FormalParameter = $__8.FormalParameter, FunctionBody = $__8.FunctionBody, FunctionExpression = $__8.FunctionExpression, LabelledStatement = $__8.LabelledStatement, LiteralPropertyName = $__8.LiteralPropertyName, Module = $__8.Module, ObjectPatternField = $__8.ObjectPatternField, Script = $__8.Script, VariableDeclaration = $__8.VariableDeclaration, VariableDeclarationList = $__8.VariableDeclarationList, VariableStatement = $__8.VariableStatement, WhileStatement = $__8.WhileStatement; var IdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/IdentifierToken.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).IdentifierToken; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).ParseTreeTransformer; var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).VAR; var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")), createBindingIdentifier = $__12.createBindingIdentifier, createIdentifierExpression = $__12.createIdentifierExpression, createIdentifierToken = $__12.createIdentifierToken; var FindIdentifiers = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindIdentifiers.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).FindIdentifiers; var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindVisitor.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).FindVisitor; var FnExtractAbruptCompletions = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FnExtractAbruptCompletions.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).FnExtractAbruptCompletions; var ScopeChainBuilderWithReferences = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/ScopeChainBuilderWithReferences.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).ScopeChainBuilderWithReferences; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).parseExpression; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/BlockBindingTransformer.js")).prependStatements; function varNeedsInitializer(tree, loopTree) { if (loopTree === null) return false; var type = loopTree.type; if (type !== FOR_IN_STATEMENT && type !== FOR_OF_STATEMENT) return true; return loopTree.initializer.declarations[0] !== tree; } var BlockBindingTransformer = function($__super) { function BlockBindingTransformer(idGenerator, reporter, tree) { var scopeBuilder = arguments[3]; var latestScope = arguments[4]; $traceurRuntime.superConstructor(BlockBindingTransformer).call(this); this.idGenerator_ = idGenerator; this.reporter_ = reporter; if (!scopeBuilder) { scopeBuilder = new ScopeChainBuilderWithReferences(reporter); scopeBuilder.visitAny(tree); } this.scopeBuilder_ = scopeBuilder; this.labelledLoops_ = new Map(); this.prependStatement_ = []; this.prependBlockStatement_ = []; this.blockRenames_ = []; this.rootTree_ = tree; if (latestScope) { this.scope_ = latestScope; } else { this.pushScope(tree); } this.usedVars_ = this.scope_.getAllBindingNames(); this.maybeRename_ = false; this.inObjectPattern_ = false; this.currentLoopTree_ = null; } return ($traceurRuntime.createClass)(BlockBindingTransformer, { getVariableName_: function(variable) { var lvalue = variable.lvalue; if (lvalue.type === BINDING_IDENTIFIER) { return lvalue.getStringValue(); } throw new Error('Unexpected destructuring declaration found.'); }, flushRenames: function(tree) { tree = renameAll(this.blockRenames_, tree); this.blockRenames_.length = 0; return tree; }, pushScope: function(tree) { var scope = this.scopeBuilder_.getScopeForTree(tree); if (!scope) throw new Error('BlockBindingTransformer tree with no scope'); if (this.scope_) this.scope_.blockBindingRenames = this.blockRenames_; this.scope_ = scope; this.blockRenames_ = []; return scope; }, popScope: function(scope) { if (this.scope_ !== scope) { throw new Error('BlockBindingTransformer scope mismatch'); } this.scope_ = scope.parent; this.blockRenames_ = this.scope_ && this.scope_.blockBindingRenames || []; }, revisitTreeForScopes: function(tree) { this.scopeBuilder_.scope = this.scope_; this.scopeBuilder_.visitAny(tree); this.scopeBuilder_.scope = null; }, needsRename_: function(name) { if (this.usedVars_.has(name)) return true; var scope = this.scope_; var parent = scope.parent; if (!parent || scope.isVarScope) return false; var varScope = scope.getVarScope(); if (varScope && varScope.hasFreeVariable(name)) { return true; } var parentBinding = parent.getBindingByName(name); if (!parentBinding) return false; var currentBinding = scope.getBindingByName(name); if (currentBinding.tree === parentBinding.tree) return false; return true; }, newNameFromOrig: function(origName, renames) { var newName; if (this.needsRename_(origName)) { newName = origName + this.idGenerator_.generateUniqueIdentifier(); renames.push(new Rename(origName, newName)); } else { this.usedVars_.add(origName); newName = origName; } return newName; }, transformFunctionBody: function(tree) { if (tree === this.rootTree_ || !this.rootTree_) { tree = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformFunctionBody").call(this, tree); if (this.prependStatement_.length || this.blockRenames_.length) { var statements = prependStatements.apply((void 0), $traceurRuntime.spread([tree.statements], this.prependStatement_)); tree = new FunctionBody(tree.location, statements); tree = this.flushRenames(tree); } } else { var functionTransform = new BlockBindingTransformer(this.idGenerator_, this.reporter_, tree, this.scopeBuilder_, this.scope_); var functionBodyTree = functionTransform.transformAny(tree); if (functionBodyTree === tree) { return tree; } tree = new FunctionBody(tree.location, functionBodyTree.statements); } return tree; }, transformScript: function(tree) { if (tree === this.rootTree_ || !this.rootTree_) { tree = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformScript").call(this, tree); if (this.prependStatement_.length || this.blockRenames_.length) { var scriptItemList = prependStatements.apply((void 0), $traceurRuntime.spread([tree.scriptItemList], this.prependStatement_)); tree = new Script(tree.location, scriptItemList, tree.moduleName); tree = this.flushRenames(tree); } } else { var functionTransform = new BlockBindingTransformer(this.idGenerator_, this.reporter_, tree, this.scopeBuilder_); var newTree = functionTransform.transformAny(tree); if (newTree === tree) { return tree; } tree = new Script(tree.location, newTree.scriptItemList, tree.moduleName); } return tree; }, transformModule: function(tree) { if (tree === this.rootTree_ || !this.rootTree_) { tree = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformModule").call(this, tree); if (this.prependStatement_.length || this.blockRenames_.length) { var scriptItemList = prependStatements.apply((void 0), $traceurRuntime.spread([tree.scriptItemList], this.prependStatement_)); tree = new Module(tree.location, scriptItemList, tree.moduleName); tree = this.flushRenames(tree); } } else { var functionTransform = new BlockBindingTransformer(this.idGenerator_, this.reporter_, tree, this.scopeBuilder_); var newTree = functionTransform.transformAny(tree); if (newTree === tree) { return tree; } tree = new Module(tree.location, newTree.scriptItemList, tree.moduleName); } return tree; }, transformVariableStatement: function(tree) { var declarations = this.transformAny(tree.declarations); if (declarations.type === ANON_BLOCK) { return declarations; } if (declarations === tree.declarations) { return tree; } return new VariableStatement(tree.location, declarations); }, transformVariableDeclarationList: function(tree) { if (tree.declarationType === VAR) { return $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformVariableDeclarationList").call(this, tree); } this.maybeRename_ = !this.scope_.isVarScope; var declarations = this.transformList(tree.declarations); this.maybeRename_ = false; return new VariableDeclarationList(tree.location, VAR, declarations); }, transformVariableDeclaration: function(tree) { var maybeRename = this.maybeRename_; var lvalue = this.transformAny(tree.lvalue); this.maybeRename_ = false; var initializer = null; if (tree.initializer) { initializer = this.transformAny(tree.initializer); } else if (varNeedsInitializer(tree, this.currentLoopTree_)) { initializer = parseExpression($traceurRuntime.getTemplateObject(["void 0"])); } this.maybeRename_ = maybeRename; if (tree.lvalue === lvalue && tree.initializer === initializer) { return tree; } return new VariableDeclaration(tree.location, lvalue, tree.typeAnnotation, initializer); }, transformBindingIdentifier: function(tree) { if (this.maybeRename_) { var origName = tree.getStringValue(); var newName = this.newNameFromOrig(origName, this.blockRenames_); if (origName === newName) { return tree; } var newToken = new IdentifierToken(tree.location, newName); var bindingIdentifier = new BindingIdentifier(tree.location, newToken); this.scope_.renameBinding(origName, bindingIdentifier, VAR, this.reporter_); return bindingIdentifier; } return $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformBindingIdentifier").call(this, tree); }, transformBindingElement: function(tree) { var maybeRename = this.maybeRename_; var inObjectPattern = this.inObjectPattern_; var binding = this.transformAny(tree.binding); this.maybeRename_ = false; this.inObjectPattern_ = false; var initializer = this.transformAny(tree.initializer); this.maybeRename_ = maybeRename; this.inObjectPattern_ = inObjectPattern; if (tree.binding === binding && tree.initializer === initializer) { return tree; } var bindingElement = new BindingElement(tree.location, binding, initializer); if (this.inObjectPattern_ && tree.binding !== binding && tree.binding.type === BINDING_IDENTIFIER) { return new ObjectPatternField(tree.location, new LiteralPropertyName(tree.location, tree.binding.identifierToken), bindingElement); } return bindingElement; }, transformObjectPattern: function(tree) { var inObjectPattern = this.inObjectPattern_; this.inObjectPattern_ = true; var transformed = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformObjectPattern").call(this, tree); this.inObjectPattern_ = inObjectPattern; return transformed; }, transformObjectPatternField: function(tree) { var name = this.transformAny(tree.name); this.inObjectPattern_ = false; var element = this.transformAny(tree.element); this.inObjectPattern_ = true; if (tree.name === name && tree.element === element) { return tree; } return new ObjectPatternField(tree.location, name, element); }, transformBlock: function(tree) { var scope = this.pushScope(tree); var outerPrepends = this.prependBlockStatement_; this.prependBlockStatement_ = []; tree = $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformBlock").call(this, tree); if (this.prependBlockStatement_.length) { tree = new Block(tree.location, prependStatements.apply((void 0), $traceurRuntime.spread([tree.statements], this.prependBlockStatement_))); } this.prependBlockStatement_ = outerPrepends; tree = this.flushRenames(tree); this.popScope(scope); return tree; }, transformCatch: function(tree) { var scope = this.pushScope(tree); var binding = this.transformAny(tree.binding); var statements = this.transformList(tree.catchBody.statements); if (binding !== tree.binding || statements !== tree.catchBody.statements) { tree = new Catch(tree.location, binding, new Block(tree.catchBody.location, statements)); } tree = this.flushRenames(tree); this.popScope(scope); return tree; }, transformFunctionForScope_: function(func, tree) { var scope = this.pushScope(tree); tree = func(); tree = this.flushRenames(tree); this.popScope(scope); return tree; }, transformGetAccessor: function(tree) { var $__3 = this; return this.transformFunctionForScope_(function() { return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformGetAccessor").call($__3, tree); }, tree); }, transformSetAccessor: function(tree) { var $__3 = this; return this.transformFunctionForScope_(function() { return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformSetAccessor").call($__3, tree); }, tree); }, transformFunctionExpression: function(tree) { var $__3 = this; return this.transformFunctionForScope_(function() { return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformFunctionExpression").call($__3, tree); }, tree); }, transformFunctionDeclaration: function(tree) { var $__3 = this; if (!this.scope_.isVarScope) { var origName = tree.name.getStringValue(); var newName = this.newNameFromOrig(origName, this.blockRenames_); var functionExpression = new FunctionExpression(tree.location, null, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body); this.revisitTreeForScopes(functionExpression); functionExpression = this.transformAny(functionExpression); var bindingIdentifier = createBindingIdentifier(newName); var statement = new VariableStatement(tree.location, new VariableDeclarationList(tree.location, VAR, [new VariableDeclaration(tree.location, bindingIdentifier, null, functionExpression)])); this.scope_.renameBinding(origName, bindingIdentifier, VAR, this.reporter_); this.prependBlockStatement_.push(statement); return new AnonBlock(null, []); } return this.transformFunctionForScope_(function() { return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformFunctionDeclaration").call($__3, tree); }, tree); }, transformLoop_: function(func, tree, loopFactory) { var $__3 = this; var scope, initializerIsBlockBinding; if (tree.initializer && tree.initializer.type === VARIABLE_DECLARATION_LIST && tree.initializer.declarationType !== VAR) { initializerIsBlockBinding = true; } if (initializerIsBlockBinding) { scope = this.pushScope(tree); } var finder = new FindBlockBindingInLoop(tree, this.scopeBuilder_); finder.visitAny(tree); if (!finder.found) { var callFunc = function() { var currentLoopTree = $__3.currentLoopTree_; $__3.currentLoopTree_ = tree; var rv = func(tree); $__3.currentLoopTree_ = currentLoopTree; return rv; }; if (!initializerIsBlockBinding) { return callFunc(); } var renames = []; var initializer = new VariableDeclarationList(null, VAR, tree.initializer.declarations.map(function(declaration) { var origName = $__3.getVariableName_(declaration); var newName = $__3.newNameFromOrig(origName, renames); var bindingIdentifier = createBindingIdentifier(newName); $__3.scope_.renameBinding(origName, bindingIdentifier, VAR, $__3.reporter_); return new VariableDeclaration(null, bindingIdentifier, null, declaration.initializer); })); initializer = renameAll(renames, initializer); tree = loopFactory(initializer, renames, renameAll(renames, tree.body)); this.revisitTreeForScopes(tree); tree = callFunc(); } else { var iifeParameterList = []; var iifeArgumentList = []; var renames$__4 = []; var initializer$__5 = null; if (tree.initializer) { if (tree.initializer.type === VARIABLE_DECLARATION_LIST && tree.initializer.declarationType !== VAR) { initializer$__5 = new VariableDeclarationList(null, VAR, tree.initializer.declarations.map(function(declaration) { var origName = $__3.getVariableName_(declaration); var newName = $__3.newNameFromOrig(origName, renames$__4); iifeArgumentList.push(createIdentifierExpression(newName)); iifeParameterList.push(new FormalParameter(null, new BindingElement(null, createBindingIdentifier(origName), null), null, [])); var bindingIdentifier = createBindingIdentifier(newName); $__3.scope_.renameBinding(origName, bindingIdentifier, VAR, $__3.reporter_); return new VariableDeclaration(null, bindingIdentifier, null, declaration.initializer); })); initializer$__5 = renameAll(renames$__4, initializer$__5); } else { initializer$__5 = this.transformAny(tree.initializer); } } var loopLabel = this.labelledLoops_.get(tree); var iifeInfo = FnExtractAbruptCompletions.createIIFE(this.idGenerator_, tree.body, iifeParameterList, iifeArgumentList, function() { return loopLabel = loopLabel || createIdentifierToken($__3.idGenerator_.generateUniqueIdentifier()); }, this.scope_.inGenerator); tree = loopFactory(initializer$__5, renames$__4, iifeInfo.loopBody); if (loopLabel) { tree = new LabelledStatement(tree.location, loopLabel, tree); } tree = new AnonBlock(tree.location, [iifeInfo.variableStatements, tree]); this.revisitTreeForScopes(tree); tree = this.transformAny(tree); } if (initializerIsBlockBinding) { tree = this.flushRenames(tree); this.popScope(scope); } return tree; }, transformForInStatement: function(tree) { var $__3 = this; return this.transformLoop_(function(t) { return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformForInStatement").call($__3, t); }, tree, function(initializer, renames, body) { return new ForInStatement(tree.location, initializer, renameAll(renames, tree.collection), body); }); }, transformForStatement: function(tree) { var $__3 = this; return this.transformLoop_(function(t) { return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformForStatement").call($__3, t); }, tree, function(initializer, renames, body) { return new ForStatement(tree.location, initializer, renameAll(renames, tree.condition), renameAll(renames, tree.increment), body); }); }, transformWhileStatement: function(tree) { var $__3 = this; return this.transformLoop_(function(t) { return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformWhileStatement").call($__3, t); }, tree, function(initializer, renames, body) { return new WhileStatement(tree.location, renameAll(renames, tree.condition), body); }); }, transformDoWhileStatement: function(tree) { var $__3 = this; return this.transformLoop_(function(t) { return $traceurRuntime.superGet($__3, BlockBindingTransformer.prototype, "transformDoWhileStatement").call($__3, t); }, tree, function(initializer, renames, body) { return new DoWhileStatement(tree.location, body, renameAll(renames, tree.condition)); }); }, transformLabelledStatement: function(tree) { if (tree.statement.isIterationStatement()) { this.labelledLoops_.set(tree.statement, tree.name.value); var statement = this.transformAny(tree.statement); if (!statement.isStatement()) { return statement; } if (statement === tree.statement) { return tree; } return new LabelledStatement(tree.location, tree.name, statement); } return $traceurRuntime.superGet(this, BlockBindingTransformer.prototype, "transformLabelledStatement").call(this, tree); } }, {}, $__super); }(ParseTreeTransformer); var Rename = function() { function Rename(oldName, newName) { this.oldName = oldName; this.newName = newName; } return ($traceurRuntime.createClass)(Rename, {}, {}); }(); function renameAll(renames, tree) { renames.forEach(function(rename) { tree = AlphaRenamer.rename(tree, rename.oldName, rename.newName); }); return tree; } var FindBlockBindingInLoop = function($__super) { function FindBlockBindingInLoop(tree, scopeBuilder) { $traceurRuntime.superConstructor(FindBlockBindingInLoop).call(this); this.scopeBuilder_ = scopeBuilder; this.topScope_ = scopeBuilder.getScopeForTree(tree) || scopeBuilder.getScopeForTree(tree.body); this.outOfScope_ = null; this.acceptLoop_ = tree.isIterationStatement(); } return ($traceurRuntime.createClass)(FindBlockBindingInLoop, { visitForInStatement: function(tree) { var $__3 = this; this.visitLoop_(tree, function() { return $traceurRuntime.superGet($__3, FindBlockBindingInLoop.prototype, "visitForInStatement").call($__3, tree); }); }, visitForStatement: function(tree) { var $__3 = this; this.visitLoop_(tree, function() { return $traceurRuntime.superGet($__3, FindBlockBindingInLoop.prototype, "visitForStatement").call($__3, tree); }); }, visitWhileStatement: function(tree) { var $__3 = this; this.visitLoop_(tree, function() { return $traceurRuntime.superGet($__3, FindBlockBindingInLoop.prototype, "visitWhileStatement").call($__3, tree); }); }, visitDoWhileStatement: function(tree) { var $__3 = this; this.visitLoop_(tree, function() { return $traceurRuntime.superGet($__3, FindBlockBindingInLoop.prototype, "visitDoWhileStatement").call($__3, tree); }); }, visitLoop_: function(tree, func) { if (this.acceptLoop_) { this.acceptLoop_ = false; } else if (!this.outOfScope_) { this.outOfScope_ = this.scopeBuilder_.getScopeForTree(tree) || this.scopeBuilder_.getScopeForTree(tree.body); } func(); }, visitArrowFunction: function(tree) { this.visitFunction_(tree); }, visitFunctionDeclaration: function(tree) { this.visitFunction_(tree); }, visitFunctionExpression: function(tree) { this.visitFunction_(tree); }, visitGetAccessor: function(tree) { this.visitFunction_(tree); }, visitMethod: function(tree) { this.visitFunction_(tree); }, visitSetAccessor: function(tree) { this.visitFunction_(tree); }, visitFunction_: function(tree) { var $__3 = this; this.found = new FindIdentifiers(tree, function(identifierToken, identScope) { identScope = $__3.scopeBuilder_.getScopeForTree(identScope); var fnScope = $__3.outOfScope_ || $__3.scopeBuilder_.getScopeForTree(tree); if (identScope.hasLexicalBindingName(identifierToken)) { return false; } while (identScope !== fnScope && (identScope = identScope.parent)) { if (identScope.hasLexicalBindingName(identifierToken)) { return false; } } while (fnScope = fnScope.parent) { if (fnScope.hasLexicalBindingName(identifierToken)) { return true; } if (fnScope.hasVariableBindingName(identifierToken)) { return false; } if (fnScope === $__3.topScope_) break; } return false; }).found; } }, {}, $__super); }(FindVisitor); return {get BlockBindingTransformer() { return BlockBindingTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js")), FunctionBody = $__1.FunctionBody, Script = $__1.Script; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js")).ParseTreeTransformer; var createUseStrictDirective = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js")).createUseStrictDirective; var hasUseStrict = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/util.js", "traceur@0.0.112/src/codegeneration/MakeStrictTransformer.js")).hasUseStrict; function prepend(statements) { return $traceurRuntime.spread([createUseStrictDirective()], statements); } var MakeStrictTransformer = function($__super) { function MakeStrictTransformer() { $traceurRuntime.superConstructor(MakeStrictTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(MakeStrictTransformer, { transformScript: function(tree) { if (hasUseStrict(tree.scriptItemList)) return tree; return new Script(tree.location, prepend(tree.scriptItemList), tree.moduleName); }, transformFunctionBody: function(tree) { if (hasUseStrict(tree.statements)) return tree; return new FunctionBody(tree.location, prepend(tree.statements)); } }, {transformTree: function(tree) { return new MakeStrictTransformer().transformAny(tree); }}, $__super); }(ParseTreeTransformer); return {get MakeStrictTransformer() { return MakeStrictTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ClassTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ClassTransformer.js"; var CONSTRUCTOR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).CONSTRUCTOR; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")), AnonBlock = $__3.AnonBlock, ClassExpression = $__3.ClassExpression, ExportDeclaration = $__3.ExportDeclaration, ExportSpecifier = $__3.ExportSpecifier, ExportSpecifierSet = $__3.ExportSpecifierSet, FunctionDeclaration = $__3.FunctionDeclaration, FunctionExpression = $__3.FunctionExpression, GetAccessor = $__3.GetAccessor, Method = $__3.Method, NamedExport = $__3.NamedExport, SetAccessor = $__3.SetAccessor; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")), CLASS_DECLARATION = $__4.CLASS_DECLARATION, COMPUTED_PROPERTY_NAME = $__4.COMPUTED_PROPERTY_NAME, EXPORT_DEFAULT = $__4.EXPORT_DEFAULT, GET_ACCESSOR = $__4.GET_ACCESSOR, LITERAL_PROPERTY_NAME = $__4.LITERAL_PROPERTY_NAME, METHOD = $__4.METHOD, SET_ACCESSOR = $__4.SET_ACCESSOR; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).TempVarTransformer; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")), CONST = $__6.CONST, LET = $__6.LET, VAR = $__6.VAR, STRING = $__6.STRING; var MakeStrictTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MakeStrictTransformer.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).MakeStrictTransformer; var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).ParenTrait; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).default; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")), createBindingIdentifier = $__10.createBindingIdentifier, id = $__10.createIdentifierExpression, createIdentifierToken = $__10.createIdentifierToken, createObjectLiteral = $__10.createObjectLiteral, createVariableStatement = $__10.createVariableStatement; var hasUseStrict = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/util.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")).hasUseStrict; var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ClassTransformer.js")), parseExpression = $__12.parseExpression, parsePropertyDefinition = $__12.parsePropertyDefinition, parseStatement = $__12.parseStatement; function methodNameFromTree(tree) { if (tree.type === COMPUTED_PROPERTY_NAME) { return ''; } if (tree.literalToken && tree.literalToken.type === STRING) { return tree.getStringValue().substr(1, -1); } return tree.getStringValue(); } function classMethodDebugName(className, methodName, isStatic) { if (isStatic) { return createBindingIdentifier('$__' + className + '_' + methodName); } return createBindingIdentifier('$__' + className + '_prototype_' + methodName); } function functionExpressionToDeclaration(tree, name) { if (tree.name === null) { name = createBindingIdentifier(name); } else { name = tree.name; } return new FunctionDeclaration(tree.location, name, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body); } function removeStaticModifier(tree) { switch (tree.type) { case GET_ACCESSOR: return new GetAccessor(tree.location, false, tree.name, tree.typeAnnotation, tree.annotations, tree.body); case SET_ACCESSOR: return new SetAccessor(tree.location, false, tree.name, tree.parameterList, tree.annotations, tree.body); case METHOD: return new Method(tree.location, false, tree.functionKind, tree.name, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body, tree.debugName); default: throw new Error('unreachable'); } } function isConstructor(tree) { if (tree.type !== METHOD || tree.isStatic || tree.functionKind !== null) { return false; } var name = tree.name; return name.type === LITERAL_PROPERTY_NAME && name.literalToken.value === CONSTRUCTOR; } var ClassTransformer = function($__super) { function ClassTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(ClassTransformer).call(this, identifierGenerator, reporter, options); this.strictCount_ = 0; this.state_ = null; } return ($traceurRuntime.createClass)(ClassTransformer, { transformModule: function(tree) { this.strictCount_ = 1; return $traceurRuntime.superGet(this, ClassTransformer.prototype, "transformModule").call(this, tree); }, transformScript: function(tree) { this.strictCount_ = hasUseStrict(tree.scriptItemList) ? 1 : 0; return $traceurRuntime.superGet(this, ClassTransformer.prototype, "transformScript").call(this, tree); }, transformFunctionBody: function(tree) { var useStrict = hasUseStrict(tree.statements) ? 1 : 0; this.strictCount_ += useStrict; var result = $traceurRuntime.superGet(this, ClassTransformer.prototype, "transformFunctionBody").call(this, tree); this.strictCount_ -= useStrict; return result; }, makeStrict_: function(tree) { if (this.strictCount_) return tree; return MakeStrictTransformer.transformTree(tree); }, transformClassDeclaration: function(tree) { var classExpression = new ClassExpression(tree.location, tree.name, tree.superClass, tree.elements, tree.annotations, tree.typeParameters); var transformed = this.transformClassExpression(classExpression); var useLet = !this.options.transformOptions.blockBinding && this.options.parseOptions.blockBinding; return createVariableStatement(useLet ? LET : VAR, tree.name, transformed); }, transformClassExpression: function(tree) { var superClass = this.transformAny(tree.superClass); var elements = this.transformList(tree.elements); var annotations = this.transformList(tree.annotations); var constructor = null; var protoElements = elements.filter(function(tree) { if (tree.isStatic) return false; if (isConstructor(tree)) { constructor = tree; return false; } return true; }); var staticElements = elements.filter(function(tree) { return tree.isStatic; }).map(removeStaticModifier); var protoObject = createObjectLiteral(protoElements); var staticObject = createObjectLiteral(staticElements); if (!constructor) { constructor = this.getDefaultConstructor_(tree); } var func = new FunctionExpression(tree.location, tree.name, null, constructor.parameterList, null, annotations, constructor.body); var expression; var createClass = this.getRuntimeExpression('createClass'); if (tree.name) { var functionStatement; var name = tree.name.identifierToken; var nameId = id(("" + name)); if (!this.options.transformOptions.blockBinding && this.options.parseOptions.blockBinding) { functionStatement = createVariableStatement(CONST, tree.name, func); } else { functionStatement = functionExpressionToDeclaration(func, name); } if (superClass) { expression = parseExpression($traceurRuntime.getTemplateObject(["function($__super) {\n ", ";\n return (", ")(", ", ", ",\n ", ", $__super);\n }(", ")"]), functionStatement, createClass, nameId, protoObject, staticObject, superClass); } else { expression = parseExpression($traceurRuntime.getTemplateObject(["function() {\n ", ";\n return (", ")(", ", ", ", ", ");\n }()"]), functionStatement, createClass, nameId, protoObject, staticObject); } } else { if (superClass) { expression = parseExpression($traceurRuntime.getTemplateObject(["(", ")(", ", ", ", ", ", ", ")"]), createClass, func, protoObject, staticObject, superClass); } else { expression = parseExpression($traceurRuntime.getTemplateObject(["(", ")(", ", ", ", ", ")"]), createClass, func, protoObject, staticObject); } } return this.makeStrict_(expression); }, transformExportDeclaration: function(tree) { if (tree.declaration.type === EXPORT_DEFAULT && tree.declaration.expression.type === CLASS_DECLARATION) { return this.transformExportDefaultClass_(tree.declaration); } return $traceurRuntime.superGet(this, ClassTransformer.prototype, "transformExportDeclaration").call(this, tree); }, transformExportDefaultClass_: function(tree) { var name = tree.expression.name.identifierToken; var specifier = new ExportSpecifier(name.location, name, createIdentifierToken('default')); var exportTree = new ExportSpecifierSet(name.location, [specifier]); var named = new NamedExport(name.location, exportTree, null); var exp = new ExportDeclaration(name.location, named, []); var classTree = this.transformAny(tree.expression); return new AnonBlock(null, [classTree, exp]); }, getDefaultConstructor_: function(tree) { if (tree.superClass) { var name = id(tree.name.identifierToken); var superConstructor = this.getRuntimeExpression('superConstructor'); return parsePropertyDefinition($traceurRuntime.getTemplateObject(["constructor() {\n ", "(", ").apply(this, arguments)\n }"]), superConstructor, name); } return parsePropertyDefinition($traceurRuntime.getTemplateObject(["constructor() {}"])); } }, {}, $__super); }(ImportRuntimeTrait(ParenTrait(TempVarTransformer))); return {get ClassTransformer() { return ClassTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js"; var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")).ModuleTransformer; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")), createIdentifierExpression = $__4.createIdentifierExpression, createMemberExpression = $__4.createMemberExpression, createPropertyNameAssignment = $__4.createPropertyNameAssignment; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")), EXPORT_DEFAULT = $__5.EXPORT_DEFAULT, EXPORT_SPECIFIER = $__5.EXPORT_SPECIFIER; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")), parseExpression = $__6.parseExpression, parseStatement = $__6.parseStatement, parseStatements = $__6.parseStatements; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/ClosureModuleTransformer.js")).prependStatements; var ClosureModuleTransformer = function($__super) { function ClosureModuleTransformer() { $traceurRuntime.superConstructor(ClosureModuleTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(ClosureModuleTransformer, { moduleProlog: function() { if (!this.moduleName) { throw new Error('Closure modules (goog.module) require a moduleName'); } return parseStatements($traceurRuntime.getTemplateObject(["goog.module(", ");"]), this.moduleName); }, wrapModule: function(statements) { if (this.hasStarExports()) { throw new Error('Closure modules (goog.module) do not support "export *"'); } return statements; }, addExportStatement: function(statements) { if (!this.hasExports()) return statements; var exportObject = this.getExportObject(); statements.push(parseStatement($traceurRuntime.getTemplateObject(["exports = ", ""]), exportObject)); return statements; }, getGetterExport: function($__1) { var $__2 = $__1, name = $__2.name, tree = $__2.tree, moduleSpecifier = $__2.moduleSpecifier; var expression; switch (tree.type) { case EXPORT_DEFAULT: expression = createIdentifierExpression('$__default'); break; case EXPORT_SPECIFIER: if (moduleSpecifier) { var idName = this.getTempVarNameForModuleSpecifier(moduleSpecifier); expression = createMemberExpression(idName, tree.lhs); } else { expression = createPropertyNameAssignment(name, tree.lhs); } break; default: expression = createIdentifierExpression(name); break; } return createPropertyNameAssignment(name, expression); }, transformModuleSpecifier: function(tree) { var moduleName = tree.token.processedValue; return parseExpression($traceurRuntime.getTemplateObject(["goog.require(", ")"]), moduleName); } }, {}, $__super); }(ModuleTransformer); return {get ClosureModuleTransformer() { return ClosureModuleTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js"; var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).ModuleTransformer; var NAMED_EXPORT = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).NAMED_EXPORT; var AnonBlock = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).AnonBlock; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")), parseExpression = $__6.parseExpression, parsePropertyDefinition = $__6.parsePropertyDefinition, parseStatement = $__6.parseStatement; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")), createExpressionStatement = $__7.createExpressionStatement, createObjectLiteral = $__7.createObjectLiteral, createObjectLiteralForDescriptor = $__7.createObjectLiteralForDescriptor, createPropertyNameAssignment = $__7.createPropertyNameAssignment; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).prependStatements; var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindVisitor.js", "traceur@0.0.112/src/codegeneration/CommonJsModuleTransformer.js")).FindVisitor; var CommonJsModuleTransformer = function($__super) { function CommonJsModuleTransformer(identifierGenerator, reporter) { var options = arguments[2]; $traceurRuntime.superConstructor(CommonJsModuleTransformer).call(this, identifierGenerator, reporter, options); this.anonymousModule = options && !options.bundle && options.moduleName !== true; this.namedExportsWithModuleSpecifiers_ = []; this.isImportingDefault_ = false; this.needsInteropRequire_ = false; } return ($traceurRuntime.createClass)(CommonJsModuleTransformer, { getModuleName: function(tree) { if (this.anonymousModule) return null; return tree.moduleName; }, wrapModule: function(statements) { if (this.needsInteropRequire_) { var req = parseStatement($traceurRuntime.getTemplateObject(["function $__interopRequire(id) {\n id = require(id);\n return id && id.__esModule && id || {default: id};\n }"])); return prependStatements(statements, req); } return statements; }, addExportStatement: function(statements) { if (!this.hasExports()) { return statements; } var descr = this.getExportDescriptors(); var exportObject = parseExpression($traceurRuntime.getTemplateObject(["Object.defineProperties(module.exports, ", ")"]), descr); if (this.hasStarExports()) { exportObject = this.getExportStar(exportObject); } return prependStatements.apply((void 0), $traceurRuntime.spread([statements], this.namedExportsWithModuleSpecifiers_, [createExpressionStatement(exportObject)])); }, getExportDescriptors: function() { var $__2 = this; var properties = this.exportVisitor.getNonTypeNamedExports().map(function(exp) { var f = parseExpression($traceurRuntime.getTemplateObject(["function() { return ", "; }"]), $__2.getGetterExportReturnExpression(exp)); return createPropertyNameAssignment(exp.name, createObjectLiteralForDescriptor({ enumerable: true, get: f })); }); properties.unshift(parsePropertyDefinition($traceurRuntime.getTemplateObject(["__esModule: {value: true}"]))); return createObjectLiteral(properties); }, transformExportDeclaration: function(tree) { this.checkForDefaultImport_(tree); this.exportVisitor.visitAny(tree); var transformed = this.transformAny(tree.declaration); if (tree.declaration.type == NAMED_EXPORT && tree.declaration.moduleSpecifier !== null) { this.namedExportsWithModuleSpecifiers_.push(transformed); return new AnonBlock(null, []); } return transformed; }, transformImportDeclaration: function(tree) { this.checkForDefaultImport_(tree); return $traceurRuntime.superGet(this, CommonJsModuleTransformer.prototype, "transformImportDeclaration").call(this, tree); }, checkForDefaultImport_: function(tree) { var finder = new FindDefault(); finder.visitAny(tree); this.isImportingDefault_ = finder.found; }, transformModuleSpecifier: function(tree) { var moduleName = tree.token.processedValue; if (this.isImportingDefault_) { this.needsInteropRequire_ = true; return parseExpression($traceurRuntime.getTemplateObject(["$__interopRequire(", ")"]), moduleName); } return parseExpression($traceurRuntime.getTemplateObject(["require(", ")"]), moduleName); } }, {}, $__super); }(ModuleTransformer); var FindDefault = function($__super) { function FindDefault() { $traceurRuntime.superConstructor(FindDefault).apply(this, arguments); } return ($traceurRuntime.createClass)(FindDefault, { visitImportSpecifier: function(tree) { this.found = tree.name !== null && tree.name.value === 'default'; }, visitNameSpaceImport: function(tree) { this.found = true; }, visitNameSpaceExport: function(tree) { this.found = true; }, visitExportSpecifier: function(tree) { this.found = tree.lhs !== null && tree.lhs.value === 'default'; } }, {}, $__super); }(FindVisitor); return {get CommonJsModuleTransformer() { return CommonJsModuleTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ParameterTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ParameterTransformer.js"; var FunctionBody = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ParameterTransformer.js")).FunctionBody; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ParameterTransformer.js")).TempVarTransformer; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/ParameterTransformer.js")).prependStatements; var stack = []; var ParameterTransformer = function($__super) { function ParameterTransformer() { $traceurRuntime.superConstructor(ParameterTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(ParameterTransformer, { transformArrowFunction: function(tree) { stack.push([]); return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformArrowFunction").call(this, tree); }, transformFunctionDeclaration: function(tree) { stack.push([]); return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformFunctionDeclaration").call(this, tree); }, transformFunctionExpression: function(tree) { stack.push([]); return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformFunctionExpression").call(this, tree); }, transformGetAccessor: function(tree) { stack.push([]); return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformGetAccessor").call(this, tree); }, transformSetAccessor: function(tree) { stack.push([]); return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformSetAccessor").call(this, tree); }, transformMethod: function(tree) { stack.push([]); return $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformMethod").call(this, tree); }, transformFunctionBody: function(tree) { var transformedTree = $traceurRuntime.superGet(this, ParameterTransformer.prototype, "transformFunctionBody").call(this, tree); var statements = stack.pop(); if (!statements.length) return transformedTree; statements = prependStatements.apply((void 0), $traceurRuntime.spread([transformedTree.statements], statements)); return new FunctionBody(transformedTree.location, statements); }, get parameterStatements() { return stack[stack.length - 1]; }, transformConstructorType: function(tree) { return tree; }, transformFunctionType: function(tree) { return tree; } }, {}, $__super); }(TempVarTransformer); return {get ParameterTransformer() { return ParameterTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/util.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")), isUndefined = $__1.isUndefined, isVoidExpression = $__1.isVoidExpression; var FormalParameterList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")).FormalParameterList; var ParameterTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParameterTransformer.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")).ParameterTransformer; var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")).ARGUMENTS; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")), NOT_EQUAL_EQUAL = $__5.NOT_EQUAL_EQUAL, VAR = $__5.VAR; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/DefaultParametersTransformer.js")), createBinaryExpression = $__6.createBinaryExpression, createConditionalExpression = $__6.createConditionalExpression, createIdentifierExpression = $__6.createIdentifierExpression, createMemberLookupExpression = $__6.createMemberLookupExpression, createNumberLiteral = $__6.createNumberLiteral, createOperatorToken = $__6.createOperatorToken, createVariableStatement = $__6.createVariableStatement, createVoid0 = $__6.createVoid0; function createDefaultAssignment(index, binding, initializer) { var argumentsExpression = createMemberLookupExpression(createIdentifierExpression(ARGUMENTS), createNumberLiteral(index)); var assignmentExpression; if (initializer === null || isUndefined(initializer) || isVoidExpression(initializer)) { assignmentExpression = argumentsExpression; } else { assignmentExpression = createConditionalExpression(createBinaryExpression(argumentsExpression, createOperatorToken(NOT_EQUAL_EQUAL), createVoid0()), argumentsExpression, initializer); } return createVariableStatement(VAR, binding, assignmentExpression); } var DefaultParametersTransformer = function($__super) { function DefaultParametersTransformer() { $traceurRuntime.superConstructor(DefaultParametersTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(DefaultParametersTransformer, {transformFormalParameterList: function(tree) { var parameters = []; var changed = false; var defaultToUndefined = false; for (var i = 0; i < tree.parameters.length; i++) { var param = this.transformAny(tree.parameters[i]); if (param !== tree.parameters[i]) changed = true; if (param.isRestParameter() || !param.parameter.initializer && !defaultToUndefined) { parameters.push(param); } else { defaultToUndefined = true; changed = true; this.parameterStatements.push(createDefaultAssignment(i, param.parameter.binding, param.parameter.initializer)); } } if (!changed) return tree; return new FormalParameterList(tree.location, parameters); }}, {}, $__super); }(ParameterTransformer); return {get DefaultParametersTransformer() { return DefaultParametersTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/assignmentOperatorToBinaryOperator.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/assignmentOperatorToBinaryOperator.js"; var $__0 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/assignmentOperatorToBinaryOperator.js")), AMPERSAND = $__0.AMPERSAND, AMPERSAND_EQUAL = $__0.AMPERSAND_EQUAL, BAR = $__0.BAR, BAR_EQUAL = $__0.BAR_EQUAL, CARET = $__0.CARET, CARET_EQUAL = $__0.CARET_EQUAL, LEFT_SHIFT = $__0.LEFT_SHIFT, LEFT_SHIFT_EQUAL = $__0.LEFT_SHIFT_EQUAL, MINUS = $__0.MINUS, MINUS_EQUAL = $__0.MINUS_EQUAL, PERCENT = $__0.PERCENT, PERCENT_EQUAL = $__0.PERCENT_EQUAL, PLUS = $__0.PLUS, PLUS_EQUAL = $__0.PLUS_EQUAL, RIGHT_SHIFT = $__0.RIGHT_SHIFT, RIGHT_SHIFT_EQUAL = $__0.RIGHT_SHIFT_EQUAL, SLASH = $__0.SLASH, SLASH_EQUAL = $__0.SLASH_EQUAL, STAR = $__0.STAR, STAR_EQUAL = $__0.STAR_EQUAL, STAR_STAR = $__0.STAR_STAR, STAR_STAR_EQUAL = $__0.STAR_STAR_EQUAL, UNSIGNED_RIGHT_SHIFT = $__0.UNSIGNED_RIGHT_SHIFT, UNSIGNED_RIGHT_SHIFT_EQUAL = $__0.UNSIGNED_RIGHT_SHIFT_EQUAL; function assignmentOperatorToBinaryOperator(type) { switch (type) { case STAR_EQUAL: return STAR; case STAR_STAR_EQUAL: return STAR_STAR; case SLASH_EQUAL: return SLASH; case PERCENT_EQUAL: return PERCENT; case PLUS_EQUAL: return PLUS; case MINUS_EQUAL: return MINUS; case LEFT_SHIFT_EQUAL: return LEFT_SHIFT; case RIGHT_SHIFT_EQUAL: return RIGHT_SHIFT; case UNSIGNED_RIGHT_SHIFT_EQUAL: return UNSIGNED_RIGHT_SHIFT; case AMPERSAND_EQUAL: return AMPERSAND; case CARET_EQUAL: return CARET; case BAR_EQUAL: return BAR; default: throw Error('unreachable'); } } var $__default = assignmentOperatorToBinaryOperator; return {get default() { return $__default; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")).ParseTreeTransformer; var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")), createAssignmentExpression = $__13.createAssignmentExpression, createCommaExpression = $__13.createCommaExpression, id = $__13.createIdentifierExpression, createMemberExpression = $__13.createMemberExpression, createNumberLiteral = $__13.createNumberLiteral, createOperatorToken = $__13.createOperatorToken, createParenExpression = $__13.createParenExpression; var $__14 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")), AND = $__14.AND, EQUAL = $__14.EQUAL, MINUS = $__14.MINUS, MINUS_EQUAL = $__14.MINUS_EQUAL, MINUS_MINUS = $__14.MINUS_MINUS, OR = $__14.OR, PLUS = $__14.PLUS, PLUS_EQUAL = $__14.PLUS_EQUAL, PLUS_PLUS = $__14.PLUS_PLUS; var $__15 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")), COMMA_EXPRESSION = $__15.COMMA_EXPRESSION, IDENTIFIER_EXPRESSION = $__15.IDENTIFIER_EXPRESSION, MEMBER_EXPRESSION = $__15.MEMBER_EXPRESSION, MEMBER_LOOKUP_EXPRESSION = $__15.MEMBER_LOOKUP_EXPRESSION, PROPERTY_NAME_ASSIGNMENT = $__15.PROPERTY_NAME_ASSIGNMENT, SPREAD_EXPRESSION = $__15.SPREAD_EXPRESSION, TEMPLATE_LITERAL_PORTION = $__15.TEMPLATE_LITERAL_PORTION; var $__16 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")), ArgumentList = $__16.ArgumentList, ArrayLiteral = $__16.ArrayLiteral, AwaitExpression = $__16.AwaitExpression, BinaryExpression = $__16.BinaryExpression, CallExpression = $__16.CallExpression, ClassExpression = $__16.ClassExpression, ConditionalExpression = $__16.ConditionalExpression, MemberExpression = $__16.MemberExpression, MemberLookupExpression = $__16.MemberLookupExpression, NewExpression = $__16.NewExpression, ObjectLiteral = $__16.ObjectLiteral, PropertyNameAssignment = $__16.PropertyNameAssignment, SpreadExpression = $__16.SpreadExpression, TemplateLiteralExpression = $__16.TemplateLiteralExpression, TemplateSubstitution = $__16.TemplateSubstitution, UnaryExpression = $__16.UnaryExpression, YieldExpression = $__16.YieldExpression; var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")).assert; var assignmentOperatorToBinaryOperator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./assignmentOperatorToBinaryOperator.js", "traceur@0.0.112/src/codegeneration/ExplodeExpressionTransformer.js")).default; var CommaExpressionBuilder = function() { function CommaExpressionBuilder(tempVar) { this.tempVar = tempVar; this.expressions = []; } return ($traceurRuntime.createClass)(CommaExpressionBuilder, { add: function(tree) { var $__2; if (tree.type === COMMA_EXPRESSION) ($__2 = this.expressions).push.apply($__2, $traceurRuntime.spread(getExpressions(tree))); return this; }, build: function(tree) { var tempVar = this.tempVar; this.expressions.push(createAssignmentExpression(tempVar, tree), tempVar); return createCommaExpression(this.expressions); } }, {}); }(); function getResult(tree) { if (tree.type === COMMA_EXPRESSION) return tree.expressions[tree.expressions.length - 1]; return tree; } function getExpressions(tree) { if (tree.type === COMMA_EXPRESSION) return tree.expressions.slice(0, -1); return []; } var ExplodeExpressionTransformer = function($__super) { function ExplodeExpressionTransformer(tempVarTransformer) { $traceurRuntime.superConstructor(ExplodeExpressionTransformer).call(this); this.tempVarTransformer_ = tempVarTransformer; } return ($traceurRuntime.createClass)(ExplodeExpressionTransformer, { addTempVar: function() { var tmpId = this.tempVarTransformer_.addTempVar(); return id(tmpId); }, transformUnaryExpression: function(tree) { if (tree.operator.type === PLUS_PLUS) return this.transformUnaryNumeric_(tree, PLUS_EQUAL); if (tree.operator.type === MINUS_MINUS) return this.transformUnaryNumeric_(tree, MINUS_EQUAL); var operand = this.transformAny(tree.operand); if (operand === tree.operand) return tree; var expressions = $traceurRuntime.spread(getExpressions(operand), [new UnaryExpression(tree.location, tree.operator, getResult(operand))]); return createCommaExpression(expressions); }, transformUnaryNumeric_: function(tree, operator) { return this.transformAny(new BinaryExpression(tree.location, tree.operand, createOperatorToken(operator), createNumberLiteral(1))); }, transformPostfixExpression: function(tree) { if (tree.operand.type === MEMBER_EXPRESSION) return this.transformPostfixMemberExpression_(tree); if (tree.operand.type === MEMBER_LOOKUP_EXPRESSION) return this.transformPostfixMemberLookupExpression_(tree); assert(tree.operand.type === IDENTIFIER_EXPRESSION); var operand = tree.operand; var tmp = this.addTempVar(); var operator = tree.operator.type === PLUS_PLUS ? PLUS : MINUS; var expressions = [createAssignmentExpression(tmp, operand), createAssignmentExpression(operand, new BinaryExpression(tree.location, tmp, createOperatorToken(operator), createNumberLiteral(1))), tmp]; return createCommaExpression(expressions); }, transformPostfixMemberExpression_: function(tree) { var memberName = tree.operand.memberName; var operand = this.transformAny(tree.operand.operand); var tmp = this.addTempVar(); var memberExpression = new MemberExpression(tree.operand.location, getResult(operand), memberName); var operator = tree.operator.type === PLUS_PLUS ? PLUS : MINUS; var expressions = $traceurRuntime.spread(getExpressions(operand), [createAssignmentExpression(tmp, memberExpression), createAssignmentExpression(memberExpression, new BinaryExpression(tree.location, tmp, createOperatorToken(operator), createNumberLiteral(1))), tmp]); return createCommaExpression(expressions); }, transformPostfixMemberLookupExpression_: function(tree) { var memberExpression = this.transformAny(tree.operand.memberExpression); var operand = this.transformAny(tree.operand.operand); var tmp = this.addTempVar(); var memberLookupExpression = new MemberLookupExpression(null, getResult(operand), getResult(memberExpression)); var operator = tree.operator.type === PLUS_PLUS ? PLUS : MINUS; var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), [createAssignmentExpression(tmp, memberLookupExpression), createAssignmentExpression(memberLookupExpression, new BinaryExpression(tree.location, tmp, createOperatorToken(operator), createNumberLiteral(1))), tmp]); return createCommaExpression(expressions); }, transformYieldExpression: function(tree) { if (tree.expression === null) { return this.createCommaExpressionBuilder_().build(new YieldExpression(tree.location, null, false)); } var expression = this.transformAny(tree.expression); return this.createCommaExpressionBuilder_().add(expression).build(new YieldExpression(tree.location, getResult(expression), tree.isYieldFor)); }, transformAwaitExpression: function(tree) { var expression = this.transformAny(tree.expression); return this.createCommaExpressionBuilder_().add(expression).build(new AwaitExpression(tree.location, getResult(expression))); }, transformParenExpression: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) return tree; var result = getResult(expression); if (result.type === IDENTIFIER_EXPRESSION) return expression; return this.createCommaExpressionBuilder_().add(expression).build(result); }, transformCommaExpression: function(tree) { var expressions = this.transformList(tree.expressions); if (expressions === tree.expressions) return tree; var builder = new CommaExpressionBuilder(null); for (var i = 0; i < expressions.length; i++) { builder.add(expressions[i]); } return createCommaExpression($traceurRuntime.spread(builder.expressions, [getResult(expressions[expressions.length - 1])])); }, transformMemberExpression: function(tree) { var operand = this.transformAny(tree.operand); return this.createCommaExpressionBuilder_().add(operand).build(new MemberExpression(tree.location, getResult(operand), tree.memberName)); }, transformMemberLookupExpression: function(tree) { var operand = this.transformAny(tree.operand); var memberExpression = this.transformAny(tree.memberExpression); return this.createCommaExpressionBuilder_().add(operand).add(memberExpression).build(new MemberLookupExpression(tree.location, getResult(operand), getResult(memberExpression))); }, transformBinaryExpression: function(tree) { if (tree.operator.isAssignmentOperator()) return this.transformAssignmentExpression_(tree); var left = this.transformAny(tree.left); var right = this.transformAny(tree.right); if (left === tree.left && right === tree.right) return tree; if (tree.operator.type === OR) return this.transformOr_(left, right); if (tree.operator.type === AND) return this.transformAnd_(left, right); var expressions = $traceurRuntime.spread(getExpressions(left), getExpressions(right), [new BinaryExpression(tree.location, getResult(left), tree.operator, getResult(right))]); return createCommaExpression(expressions); }, transformAssignmentExpression_: function(tree) { var left = tree.left; if (left.type === MEMBER_EXPRESSION) return this.transformAssignMemberExpression_(tree); if (left.type === MEMBER_LOOKUP_EXPRESSION) return this.transformAssignMemberLookupExpression_(tree); assert(tree.left.type === IDENTIFIER_EXPRESSION); if (tree.operator.type === EQUAL) { left = this.transformAny(left); var right$__3 = this.transformAny(tree.right); var expressions$__4 = $traceurRuntime.spread(getExpressions(right$__3), [createAssignmentExpression(left, getResult(right$__3)), getResult(right$__3)]); return createCommaExpression(expressions$__4); } var right = this.transformAny(tree.right); var tmp = this.addTempVar(); var binop = createOperatorToken(assignmentOperatorToBinaryOperator(tree.operator.type)); var expressions = $traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(tmp, new BinaryExpression(tree.location, left, binop, getResult(right))), createAssignmentExpression(left, tmp), tmp]); return createCommaExpression(expressions); }, transformAssignMemberExpression_: function(tree) { var left = tree.left; if (tree.operator.type === EQUAL) { var operand$__5 = this.transformAny(left.operand); var right$__6 = this.transformAny(tree.right); var expressions$__7 = $traceurRuntime.spread(getExpressions(operand$__5), getExpressions(right$__6), [new BinaryExpression(tree.location, new MemberExpression(left.location, getResult(operand$__5), left.memberName), tree.operator, getResult(right$__6)), getResult(right$__6)]); return createCommaExpression(expressions$__7); } var operand = this.transformAny(left.operand); var right = this.transformAny(tree.right); var tmp = this.addTempVar(); var memberExpression = new MemberExpression(left.location, getResult(operand), left.memberName); var tmp2 = this.addTempVar(); var binop = createOperatorToken(assignmentOperatorToBinaryOperator(tree.operator.type)); var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(right), [createAssignmentExpression(tmp, memberExpression), createAssignmentExpression(tmp2, new BinaryExpression(tree.location, tmp, binop, getResult(right))), createAssignmentExpression(memberExpression, tmp2), tmp2]); return createCommaExpression(expressions); }, transformAssignMemberLookupExpression_: function(tree) { var left = tree.left; if (tree.operator.type === EQUAL) { var operand$__8 = this.transformAny(left.operand); var memberExpression$__9 = this.transformAny(left.memberExpression); var right$__10 = this.transformAny(tree.right); var expressions$__11 = $traceurRuntime.spread(getExpressions(operand$__8), getExpressions(memberExpression$__9), getExpressions(right$__10), [new BinaryExpression(tree.location, new MemberLookupExpression(left.location, getResult(operand$__8), getResult(memberExpression$__9)), tree.operator, getResult(right$__10)), getResult(right$__10)]); return createCommaExpression(expressions$__11); } var operand = this.transformAny(left.operand); var memberExpression = this.transformAny(left.memberExpression); var right = this.transformAny(tree.right); var tmp = this.addTempVar(); var memberLookupExpression = new MemberLookupExpression(left.location, getResult(operand), getResult(memberExpression)); var tmp2 = this.addTempVar(); var binop = createOperatorToken(assignmentOperatorToBinaryOperator(tree.operator.type)); var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), getExpressions(right), [createAssignmentExpression(tmp, memberLookupExpression), createAssignmentExpression(tmp2, new BinaryExpression(tree.location, tmp, binop, getResult(right))), createAssignmentExpression(memberLookupExpression, tmp2), tmp2]); return createCommaExpression(expressions); }, transformArrayLiteral: function(tree) { var elements = this.transformList(tree.elements); if (elements === tree.elements) return tree; var builder = this.createCommaExpressionBuilder_(); var results = []; for (var i = 0; i < elements.length; i++) { builder.add(elements[i]); results.push(getResult(elements[i])); } return builder.build(new ArrayLiteral(tree.location, results)); }, transformObjectLiteral: function(tree) { var propertyNameAndValues = this.transformList(tree.propertyNameAndValues); if (propertyNameAndValues === tree.propertyNameAndValues) return tree; var builder = this.createCommaExpressionBuilder_(); var results = []; for (var i = 0; i < propertyNameAndValues.length; i++) { if (propertyNameAndValues[i].type === PROPERTY_NAME_ASSIGNMENT) { builder.add(propertyNameAndValues[i].value); results.push(new PropertyNameAssignment(propertyNameAndValues[i].location, propertyNameAndValues[i].name, getResult(propertyNameAndValues[i].value))); } else { results.push(propertyNameAndValues[i]); } } return builder.build(new ObjectLiteral(tree.location, results)); }, transformTemplateLiteralExpression: function(tree) { var operand = this.transformAny(tree.operand); var elements = this.transformList(tree.elements); if (!operand && operand === tree.operand && elements === tree.elements) return tree; var builder = this.createCommaExpressionBuilder_(); if (operand) builder.add(operand); var results = []; for (var i = 0; i < elements.length; i++) { if (elements[i].type === TEMPLATE_LITERAL_PORTION) { results.push(elements[i]); } else { var expression = elements[i].expression; builder.add(expression); var result = getResult(expression); results.push(new TemplateSubstitution(expression.location, result)); } } return builder.build(new TemplateLiteralExpression(tree.location, operand && getResult(operand), results)); }, transformCallExpression: function(tree) { if (tree.operand.type === MEMBER_EXPRESSION) return this.transformCallMemberExpression_(tree); if (tree.operand.type === MEMBER_LOOKUP_EXPRESSION) return this.transformCallMemberLookupExpression_(tree); return this.transformCallAndNew_(tree, CallExpression); }, transformNewExpression: function(tree) { return this.transformCallAndNew_(tree, NewExpression); }, transformCallAndNew_: function(tree, ctor) { var operand = this.transformAny(tree.operand); var args = this.transformAny(tree.args); var builder = this.createCommaExpressionBuilder_().add(operand); var argResults = []; args.args.forEach(function(arg) { builder.add(arg); argResults.push(getResult(arg)); }); return builder.build(new ctor(tree.location, getResult(operand), new ArgumentList(args.location, argResults))); }, transformCallMemberExpression_: function(tree) { var memberName = tree.operand.memberName; var operand = this.transformAny(tree.operand.operand); var tmp = this.addTempVar(); var memberExpresssion = new MemberExpression(tree.operand.location, getResult(operand), memberName); var args = this.transformAny(tree.args); var expressions = $traceurRuntime.spread(getExpressions(operand), [createAssignmentExpression(tmp, memberExpresssion)]); var argResults = [getResult(operand)]; args.args.forEach(function(arg) { var $__2; ($__2 = expressions).push.apply($__2, $traceurRuntime.spread(getExpressions(arg))); argResults.push(getResult(arg)); }); var callExpression = new CallExpression(tree.location, createMemberExpression(tmp, 'call'), new ArgumentList(args.location, argResults)); var tmp2 = this.addTempVar(); expressions.push(createAssignmentExpression(tmp2, callExpression), tmp2); return createCommaExpression(expressions); }, transformCallMemberLookupExpression_: function(tree) { var operand = this.transformAny(tree.operand.operand); var memberExpression = this.transformAny(tree.operand.memberExpression); var tmp = this.addTempVar(); var lookupExpresssion = new MemberLookupExpression(tree.operand.location, getResult(operand), getResult(memberExpression)); var args = this.transformAny(tree.args); var expressions = $traceurRuntime.spread(getExpressions(operand), getExpressions(memberExpression), [createAssignmentExpression(tmp, lookupExpresssion)]); var argResults = [getResult(operand)]; args.args.forEach(function(arg, i) { var $__2; ($__2 = expressions).push.apply($__2, $traceurRuntime.spread(getExpressions(arg))); var result = getResult(arg); if (tree.args.args[i].type === SPREAD_EXPRESSION) result = new SpreadExpression(arg.location, result); argResults.push(result); }); var callExpression = new CallExpression(tree.location, createMemberExpression(tmp, 'call'), new ArgumentList(args.location, argResults)); var tmp2 = this.addTempVar(); expressions.push(createAssignmentExpression(tmp2, callExpression), tmp2); return createCommaExpression(expressions); }, transformConditionalExpression: function(tree) { var condition = this.transformAny(tree.condition); var left = this.transformAny(tree.left); var right = this.transformAny(tree.right); if (condition === tree.condition && left === tree.left && right === tree.right) return tree; var res = this.addTempVar(); var leftTree = createCommaExpression($traceurRuntime.spread(getExpressions(left), [createAssignmentExpression(res, getResult(left))])); var rightTree = createCommaExpression($traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(res, getResult(right))])); var expressions = $traceurRuntime.spread(getExpressions(condition), [new ConditionalExpression(tree.location, getResult(condition), createParenExpression(leftTree), createParenExpression(rightTree)), res]); return createCommaExpression(expressions); }, transformOr_: function(left, right) { var res = this.addTempVar(); var leftTree = createCommaExpression([createAssignmentExpression(res, getResult(left))]); var rightTree = createCommaExpression($traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(res, getResult(right))])); var expressions = $traceurRuntime.spread(getExpressions(left), [new ConditionalExpression(left.location, getResult(left), createParenExpression(leftTree), createParenExpression(rightTree)), res]); return createCommaExpression(expressions); }, transformAnd_: function(left, right) { var res = this.addTempVar(); var leftTree = createCommaExpression($traceurRuntime.spread(getExpressions(right), [createAssignmentExpression(res, getResult(right))])); var rightTree = createCommaExpression([createAssignmentExpression(res, getResult(left))]); var expressions = $traceurRuntime.spread(getExpressions(left), [new ConditionalExpression(left.location, getResult(left), createParenExpression(leftTree), createParenExpression(rightTree)), res]); return createCommaExpression(expressions); }, transformSpreadExpression: function(tree) { var expression = this.transformAny(tree.expression); if (expression === tree.expression) return tree; var result = getResult(expression); if (result.type !== SPREAD_EXPRESSION) result = new SpreadExpression(result.location, result); var expressions = $traceurRuntime.spread(getExpressions(expression), [result]); return createCommaExpression(expressions); }, transformFunctionExpression: function(tree) { return this.createCommaExpressionBuilder_().build(tree); }, transformArrowFunction: function(tree) { return this.createCommaExpressionBuilder_().build(tree); }, transformClassExpression: function(tree) { var superClass = this.transformAny(tree.superClass); if (superClass === tree.superClass) { return this.createCommaExpressionBuilder_().build(tree); } var builder = this.createCommaExpressionBuilder_(); builder.add(superClass); return builder.build(new ClassExpression(tree.location, tree.name, getResult(superClass), tree.elements, tree.annotations, tree.typeParameters)); }, transformFunctionBody: function(tree) { return tree; }, createCommaExpressionBuilder_: function() { return new CommaExpressionBuilder(this.addTempVar()); } }, {}, $__super); }(ParseTreeTransformer); return {get ExplodeExpressionTransformer() { return ExplodeExpressionTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js"; var ExplodeExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExplodeExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")).ExplodeExpressionTransformer; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")).TempVarTransformer; var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")).ParenTrait; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")), STAR_STAR = $__4.STAR_STAR, STAR_STAR_EQUAL = $__4.STAR_STAR_EQUAL; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ExponentiationTransformer.js")).parseExpression; var ExponentiationTransformer = function($__super) { function ExponentiationTransformer() { $traceurRuntime.superConstructor(ExponentiationTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(ExponentiationTransformer, {transformBinaryExpression: function(tree) { switch (tree.operator.type) { case STAR_STAR: { var left = this.transformAny(tree.left); var right = this.transformAny(tree.right); return parseExpression($traceurRuntime.getTemplateObject(["Math.pow(", ", ", ")"]), left, right); } case STAR_STAR_EQUAL: { var exploded = new ExplodeExpressionTransformer(this).transformAny(tree); return this.transformAny(exploded); } } return $traceurRuntime.superGet(this, ExponentiationTransformer.prototype, "transformBinaryExpression").call(this, tree); }}, {}, $__super); }(ParenTrait(TempVarTransformer)); return {get ExponentiationTransformer() { return ExponentiationTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ForOfTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ForOfTransformer.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")), FOR_OF_STATEMENT = $__1.FOR_OF_STATEMENT, VARIABLE_DECLARATION_LIST = $__1.VARIABLE_DECLARATION_LIST, LABELLED_STATEMENT = $__1.LABELLED_STATEMENT; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")).TempVarTransformer; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")), id = $__3.createIdentifierExpression, createMemberExpression = $__3.createMemberExpression, createVariableStatement = $__3.createVariableStatement; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")), parseStatement = $__4.parseStatement, parseStatements = $__4.parseStatements; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ForOfTransformer.js")), AnonBlock = $__5.AnonBlock, LabelledStatement = $__5.LabelledStatement; var ForOfTransformer = function($__super) { function ForOfTransformer() { $traceurRuntime.superConstructor(ForOfTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(ForOfTransformer, { transformForOfStatement: function(original) { return this.transformForOfStatement_(original, []); }, transformForOfStatement_: function(original, labelSet) { var tree = $traceurRuntime.superGet(this, ForOfTransformer.prototype, "transformForOfStatement").call(this, original); var iter = id(this.getTempIdentifier()); var result = id(this.getTempIdentifier()); var label = id(this.getTempIdentifier()); var normalCompletion = id(this.getTempIdentifier()); var throwCompletion = id(this.getTempIdentifier()); var exception = id(this.getTempIdentifier()); var ex = id(this.getTempIdentifier()); var labelledStatement; var innerStatement; var assignment; if (tree.initializer.type === VARIABLE_DECLARATION_LIST) { assignment = createVariableStatement(tree.initializer.declarationType, tree.initializer.declarations[0].lvalue, createMemberExpression(result, 'value')); } else { assignment = parseStatement($traceurRuntime.getTemplateObject(["", " = ", ".value;"]), tree.initializer, result); } innerStatement = parseStatement($traceurRuntime.getTemplateObject(["\n for (var ", ",\n ", " = (", ")[Symbol.iterator]();\n !(", " = (", " = ", ".next()).done);\n ", " = true) {\n ", "\n ", "\n }"]), result, iter, tree.collection, normalCompletion, result, iter, normalCompletion, assignment, tree.body); while (labelledStatement = labelSet.pop()) { innerStatement = new LabelledStatement(labelledStatement.location, labelledStatement.name, innerStatement); } return new AnonBlock(null, parseStatements($traceurRuntime.getTemplateObject(["\n var ", " = true;\n var ", " = false;\n var ", " = undefined;\n try {\n ", "\n } catch (", ") {\n ", " = true;\n ", " = ", ";\n } finally {\n try {\n if (!", " && ", ".return != null) {\n ", ".return();\n }\n } finally {\n if (", ") {\n throw ", ";\n }\n }\n }"]), normalCompletion, throwCompletion, exception, innerStatement, ex, throwCompletion, exception, ex, normalCompletion, iter, iter, throwCompletion, exception)); }, transformLabelledStatement: function(tree) { var labelSet = [tree]; var statement = tree.statement; while (statement.type === LABELLED_STATEMENT) { labelSet.push(statement); statement = statement.statement; } if (statement.type !== FOR_OF_STATEMENT) { return $traceurRuntime.superGet(this, ForOfTransformer.prototype, "transformLabelledStatement").call(this, tree); } return this.transformForOfStatement_(statement, labelSet); } }, {}, $__super); }(TempVarTransformer); return {get ForOfTransformer() { return ForOfTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).ParseTreeTransformer; var alphaRenameThisAndArguments = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./alphaRenameThisAndArguments.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).default; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")), parseStatement = $__4.parseStatement, parseStatements = $__4.parseStatements; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")), AnonBlock = $__5.AnonBlock, Block = $__5.Block, ContinueStatement = $__5.ContinueStatement, LabelledStatement = $__5.LabelledStatement, ReturnStatement = $__5.ReturnStatement; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).StringSet; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")), createAssignmentStatement = $__7.createAssignmentStatement, createCaseClause = $__7.createCaseClause, createDefaultClause = $__7.createDefaultClause, id = $__7.createIdentifierExpression, createNumberLiteral = $__7.createNumberLiteral, createSwitchStatement = $__7.createSwitchStatement, createThisExpression = $__7.createThisExpression, createVariableStatement = $__7.createVariableStatement, createVariableDeclaration = $__7.createVariableDeclaration, createVariableDeclarationList = $__7.createVariableDeclarationList, createVoid0 = $__7.createVoid0; var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).default; var ARGUMENTS = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).ARGUMENTS; var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")).VAR; var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/InnerForOnTransformer.js")), VARIABLE_DECLARATION_LIST = $__11.VARIABLE_DECLARATION_LIST, BLOCK = $__11.BLOCK; var InnerForOnTransformer = function($__super) { function InnerForOnTransformer(tempIdGenerator, labelSet, options) { var $__1; $traceurRuntime.superConstructor(InnerForOnTransformer).call(this); this.idGenerator_ = tempIdGenerator; this.inLoop_ = 0; this.inBreakble_ = 0; this.variableDeclarations_ = []; this.extractedStatements_ = []; this.labelSet_ = labelSet; this.labelledStatements_ = new StringSet(); this.observer_ = id(this.idGenerator_.getTempIdentifier()); this.result_ = id(this.idGenerator_.getTempIdentifier()); this.parentLabels_ = new StringSet(); this.labelSet_.forEach(($__1 = this, function(tree) { $__1.parentLabels_.add(tree.name.value); })); this.options = options; } return ($traceurRuntime.createClass)(InnerForOnTransformer, { transform: function(tree) { var value = id(this.idGenerator_.getTempIdentifier()); var assignment; if (tree.initializer.type === VARIABLE_DECLARATION_LIST) { assignment = createVariableStatement(tree.initializer.declarationType, tree.initializer.declarations[0].lvalue, value); } else { assignment = parseStatement($traceurRuntime.getTemplateObject(["\n ", " = ", ";"]), tree.initializer, value); } var body; if (tree.body.type === BLOCK) { body = new Block(tree.body.location, $traceurRuntime.spread([assignment], tree.body.statements)); } else { body = new Block(null, [assignment, tree.body]); } body = this.transformAny(body); body = alphaRenameThisAndArguments(this, body); this.variableDeclarations_.push(createVariableDeclaration(this.result_, createVoid0())); var caseClauses = this.extractedStatements_.map(function(statement, index) { return createCaseClause(createNumberLiteral(index), [statement]); }); caseClauses.push(createCaseClause(createVoid0(), [new ContinueStatement(null, null)])); caseClauses.push(createDefaultClause(parseStatements($traceurRuntime.getTemplateObject(["\n return ", ".v;"]), this.result_))); var switchStatement = createSwitchStatement(this.result_, caseClauses); var observeForEach = this.idGenerator_.getRuntimeExpression('observeForEach'); var statement = parseStatement($traceurRuntime.getTemplateObject(["\n do {\n ", "\n await ", "(\n ", "[Symbol.observer].bind(", "),\n async function (", ") {\n var ", " = this;\n try {\n ", "\n } catch (e) {\n ", ".throw(e);\n }\n });\n ", "\n } while (false);"]), createVariableStatement(createVariableDeclarationList(VAR, this.variableDeclarations_)), observeForEach, tree.observable, tree.observable, value, this.observer_, body, this.observer_, switchStatement); var labelledStatement; while (labelledStatement = this.labelSet_.pop()) { statement = new LabelledStatement(labelledStatement.location, labelledStatement.name, statement); } return statement; }, addTempVarForArguments: function() { var tmpVarName = this.idGenerator_.generateUniqueIdentifier(); this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, id(ARGUMENTS))); return tmpVarName; }, addTempVarForThis: function() { var tmpVarName = this.idGenerator_.generateUniqueIdentifier(); this.variableDeclarations_.push(createVariableDeclaration(tmpVarName, createThisExpression())); return tmpVarName; }, transformAny: function(tree) { if (tree) { if (tree.isBreakableStatement()) this.inBreakble_++; if (tree.isIterationStatement()) this.inLoop_++; tree = $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformAny").call(this, tree); if (tree.isBreakableStatement()) this.inBreakble_--; if (tree.isIterationStatement()) this.inLoop_--; } return tree; }, transformReturnStatement: function(tree) { return new AnonBlock(tree.location, parseStatements($traceurRuntime.getTemplateObject(["\n ", ".return();\n ", " = {v: ", "};\n return;"]), this.observer_, this.result_, (tree.expression || createVoid0()))); }, transformAbruptCompletion_: function(tree) { this.extractedStatements_.push(tree); var index = this.extractedStatements_.length - 1; return new AnonBlock(null, parseStatements($traceurRuntime.getTemplateObject(["\n ", ".return();\n ", " = ", ";\n return;"]), this.observer_, this.result_, index)); }, transformBreakStatement: function(tree) { if (!tree.name) { if (this.inBreakble_) { return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformBreakStatement").call(this, tree); } return this.transformAbruptCompletion_(new ContinueStatement(tree.location, null)); } if (this.labelledStatements_.has(tree.name.value)) { return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformBreakStatement").call(this, tree); } return this.transformAbruptCompletion_(tree); }, transformContinueStatement: function(tree) { if (!tree.name) { if (this.inLoop_) { return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformContinueStatement").call(this, tree); } return new ReturnStatement(tree.location, null); } if (this.labelledStatements_.has(tree.name.value)) { return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformContinueStatement").call(this, tree); } if (this.parentLabels_.has(tree.name.value)) { return new ReturnStatement(tree.location, null); } return this.transformAbruptCompletion_(tree); }, transformLabelledStatement: function(tree) { this.labelledStatements_.add(tree.name.value); return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformLabelledStatement").call(this, tree); }, transformVariableStatement: function(tree) { var $__1 = this; if (tree.declarations.declarationType === VAR) { var assignments = []; tree.declarations.declarations.forEach(function(variableDeclaration) { var variableName = variableDeclaration.lvalue.getStringValue(); var initializer = $traceurRuntime.superGet($__1, InnerForOnTransformer.prototype, "transformAny").call($__1, variableDeclaration.initializer); $__1.variableDeclarations_.push(createVariableDeclaration(variableName, null)); assignments.push(createAssignmentStatement(id(variableName), initializer)); }); return new AnonBlock(null, assignments); } return $traceurRuntime.superGet(this, InnerForOnTransformer.prototype, "transformVariableStatement").call(this, tree); } }, {transform: function(tempIdGenerator, tree, labelSet) { return new InnerForOnTransformer(tempIdGenerator, labelSet).transform(tree); }}, $__super); }(SkipFunctionsTransformerTrait(ParseTreeTransformer)); return {get InnerForOnTransformer() { return InnerForOnTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ForOnTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ForOnTransformer.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ForOnTransformer.js")), FOR_ON_STATEMENT = $__1.FOR_ON_STATEMENT, LABELLED_STATEMENT = $__1.LABELLED_STATEMENT; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/ForOnTransformer.js")).default; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ForOnTransformer.js")).TempVarTransformer; var InnerForOnTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InnerForOnTransformer.js", "traceur@0.0.112/src/codegeneration/ForOnTransformer.js")).InnerForOnTransformer; var ForOnTransformer = function($__super) { function ForOnTransformer() { $traceurRuntime.superConstructor(ForOnTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(ForOnTransformer, { transformForOnStatement: function(original) { return this.transformForOnStatement_(original, []); }, transformForOnStatement_: function(original, labelSet) { return InnerForOnTransformer.transform(this, $traceurRuntime.superGet(this, ForOnTransformer.prototype, "transformForOnStatement").call(this, original), labelSet); }, transformLabelledStatement: function(tree) { var labelSet = [tree]; var statement; for (statement = tree.statement; statement.type === LABELLED_STATEMENT; statement = statement.statement) { labelSet.push(statement); } if (statement.type !== FOR_ON_STATEMENT) { return $traceurRuntime.superGet(this, ForOnTransformer.prototype, "transformLabelledStatement").call(this, tree); } return this.transformForOnStatement_(statement, labelSet); } }, {}, $__super); }(ImportRuntimeTrait(TempVarTransformer)); return {get ForOnTransformer() { return ForOnTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/GeneratorComprehensionTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/GeneratorComprehensionTransformer.js"; var ComprehensionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ComprehensionTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorComprehensionTransformer.js")).ComprehensionTransformer; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/GeneratorComprehensionTransformer.js")).parseStatement; var GeneratorComprehensionTransformer = function($__super) { function GeneratorComprehensionTransformer() { $traceurRuntime.superConstructor(GeneratorComprehensionTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(GeneratorComprehensionTransformer, {transformGeneratorComprehension: function(tree) { var expression = this.transformAny(tree.expression); var statement = parseStatement($traceurRuntime.getTemplateObject(["yield ", ""]), expression); var isGenerator = true; return this.transformComprehension(tree, statement, isGenerator); }}, {}, $__super); }(ComprehensionTransformer); return {get GeneratorComprehensionTransformer() { return GeneratorComprehensionTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/State.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/State.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/State.js")), createAssignStateStatement = $__1.createAssignStateStatement, createBreakStatement = $__1.createBreakStatement, createCaseClause = $__1.createCaseClause, createNumberLiteral = $__1.createNumberLiteral; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/State.js")).parseStatement; var State = function() { function State(id) { this.id = id; } return ($traceurRuntime.createClass)(State, { transformMachineState: function(enclosingFinally, machineEndState, reporter) { return createCaseClause(createNumberLiteral(this.id), this.transform(enclosingFinally, machineEndState, reporter)); }, transformBreak: function(labelSet, breakState) { return this; }, transformBreakOrContinue: function(labelSet) { var breakState = arguments[1]; var continueState = arguments[2]; return this; } }, {}); }(); State.START_STATE = 0; State.INVALID_STATE = -1; State.END_STATE = -2; State.RETHROW_STATE = -3; State.generateJump = function(enclosingFinally, fallThroughState) { return $traceurRuntime.spread(State.generateAssignState(enclosingFinally, fallThroughState), [createBreakStatement()]); }; State.generateAssignState = function(enclosingFinally, fallThroughState) { var assignState; if (State.isFinallyExit(enclosingFinally, fallThroughState)) { assignState = generateAssignStateOutOfFinally(enclosingFinally, fallThroughState); } else { assignState = [createAssignStateStatement(fallThroughState)]; } return assignState; }; State.isFinallyExit = function(enclosingFinally, destination) { return !!enclosingFinally && enclosingFinally.tryStates.indexOf(destination) < 0; }; function generateAssignStateOutOfFinally(enclosingFinally, destination) { var finallyState = enclosingFinally.finallyState; return [createAssignStateStatement(finallyState), parseStatement($traceurRuntime.getTemplateObject(["$ctx.finallyFallThrough = ", ""]), destination)]; } State.replaceStateList = function(oldStates, oldState, newState) { var states = []; for (var i = 0; i < oldStates.length; i++) { states.push(State.replaceStateId(oldStates[i], oldState, newState)); } return states; }; State.replaceStateId = function(current, oldState, newState) { return current === oldState ? newState : current; }; State.replaceAllStates = function(exceptionBlocks, oldState, newState) { var result = []; for (var i = 0; i < exceptionBlocks.length; i++) { result.push(exceptionBlocks[i].replaceState(oldState, newState)); } return result; }; return {get State() { return State; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/AwaitState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/AwaitState.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/AwaitState.js")).State; var parseStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/AwaitState.js")).parseStatements; var AwaitState = function($__super) { function AwaitState(id, callbackState, expression) { $traceurRuntime.superConstructor(AwaitState).call(this, id), this.callbackState = callbackState; this.expression = expression; } return ($traceurRuntime.createClass)(AwaitState, { replaceState: function(oldState, newState) { return new AwaitState(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.callbackState, oldState, newState), this.expression); }, transform: function(enclosingFinally, machineEndState, reporter) { var $__1; var stateId, statements; if (State.isFinallyExit(enclosingFinally, this.callbackState)) { stateId = enclosingFinally.finallyState; statements = parseStatements($traceurRuntime.getTemplateObject(["$ctx.finallyFallThrough = ", ""]), this.callbackState); } else { stateId = this.callbackState; statements = []; } ($__1 = statements).push.apply($__1, $traceurRuntime.spread(parseStatements($traceurRuntime.getTemplateObject(["Promise.resolve(", ").then(\n $ctx.createCallback(", "), $ctx.errback);\n return;"]), this.expression, stateId))); return statements; } }, {}, $__super); }(State); return {get AwaitState() { return AwaitState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/FallThroughState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/FallThroughState.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/FallThroughState.js")).State; var FallThroughState = function($__super) { function FallThroughState(id, fallThroughState, statements) { $traceurRuntime.superConstructor(FallThroughState).call(this, id); this.fallThroughState = fallThroughState; this.statements = statements; } return ($traceurRuntime.createClass)(FallThroughState, { replaceState: function(oldState, newState) { return new FallThroughState(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.statements); }, transform: function(enclosingFinally, machineEndState, reporter) { return $traceurRuntime.spread(this.statements, State.generateJump(enclosingFinally, this.fallThroughState)); } }, {}, $__super); }(State); return {get FallThroughState() { return FallThroughState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/BreakState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/BreakState.js"; var FallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/BreakState.js")).FallThroughState; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/BreakState.js")).State; var BreakState = function($__super) { function BreakState(id, label) { $traceurRuntime.superConstructor(BreakState).call(this, id); this.label = label; } return ($traceurRuntime.createClass)(BreakState, { replaceState: function(oldState, newState) { return new BreakState(State.replaceStateId(this.id, oldState, newState), this.label); }, transform: function(enclosingFinally, machineEndState, reporter) { throw new Error('These should be removed before the transform step'); }, transformBreak: function(labelSet) { var breakState = arguments[1]; if (this.label === null) return new FallThroughState(this.id, breakState, []); if (labelSet.has(this.label)) { return new FallThroughState(this.id, labelSet.get(this.label).fallThroughState, []); } return this; }, transformBreakOrContinue: function(labelSet) { var breakState = arguments[1]; var continueState = arguments[2]; return this.transformBreak(labelSet, breakState); } }, {}, $__super); }(State); return {get BreakState() { return BreakState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/ContinueState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/ContinueState.js"; var FallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/ContinueState.js")).FallThroughState; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/ContinueState.js")).State; var ContinueState = function($__super) { function ContinueState(id, label) { $traceurRuntime.superConstructor(ContinueState).call(this, id); this.label = label; } return ($traceurRuntime.createClass)(ContinueState, { replaceState: function(oldState, newState) { return new ContinueState(State.replaceStateId(this.id, oldState, newState), this.label); }, transform: function(enclosingFinally, machineEndState, reporter) { throw new Error('These should be removed before the transform step'); }, transformBreakOrContinue: function(labelSet) { var breakState = arguments[1]; var continueState = arguments[2]; if (this.label === null) return new FallThroughState(this.id, continueState, []); if (labelSet.has(this.label)) { return new FallThroughState(this.id, labelSet.get(this.label).continueState, []); } return this; } }, {}, $__super); }(State); return {get ContinueState() { return ContinueState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/TryState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/TryState.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/TryState.js")).State; var Kind = { CATCH: 'catch', FINALLY: 'finally' }; var TryState = function() { function TryState(kind, tryStates, nestedTrys) { this.kind = kind; this.tryStates = tryStates; this.nestedTrys = nestedTrys; } return ($traceurRuntime.createClass)(TryState, { replaceAllStates: function(oldState, newState) { return State.replaceStateList(this.tryStates, oldState, newState); }, replaceNestedTrys: function(oldState, newState) { var states = []; for (var i = 0; i < this.nestedTrys.length; i++) { states.push(this.nestedTrys[i].replaceState(oldState, newState)); } return states; } }, {}); }(); TryState.Kind = Kind; return {get TryState() { return TryState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/trees/StateMachine.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/trees/StateMachine.js"; var ParseTree = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTree.js", "traceur@0.0.112/src/syntax/trees/StateMachine.js")).ParseTree; var STATE_MACHINE = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeType.js", "traceur@0.0.112/src/syntax/trees/StateMachine.js")).STATE_MACHINE; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../codegeneration/generator/State.js", "traceur@0.0.112/src/syntax/trees/StateMachine.js")).State; var TryState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../codegeneration/generator/TryState.js", "traceur@0.0.112/src/syntax/trees/StateMachine.js")).TryState; function addCatchOrFinallyStates(kind, enclosingMap, tryStates) { for (var i = 0; i < tryStates.length; i++) { var tryState = tryStates[i]; if (tryState.kind === kind) { for (var j = 0; j < tryState.tryStates.length; j++) { var id = tryState.tryStates[j]; enclosingMap[id] = tryState; } } addCatchOrFinallyStates(kind, enclosingMap, tryState.nestedTrys); } } function addAllCatchStates(tryStates, catches) { for (var i = 0; i < tryStates.length; i++) { var tryState = tryStates[i]; if (tryState.kind === TryState.Kind.CATCH) { catches.push(tryState); } addAllCatchStates(tryState.nestedTrys, catches); } } var StateMachine = function($__super) { function StateMachine(startState, fallThroughState, states, exceptionBlocks) { $traceurRuntime.superConstructor(StateMachine).call(this, null); this.startState = startState; this.fallThroughState = fallThroughState; this.states = states; this.exceptionBlocks = exceptionBlocks; } return ($traceurRuntime.createClass)(StateMachine, { get type() { return STATE_MACHINE; }, transform: function(transformer) { return transformer.transformStateMachine(this); }, visit: function(visitor) { visitor.visitStateMachine(this); }, getAllStateIDs: function() { var result = []; for (var i = 0; i < this.states.length; i++) { result.push(this.states[i].id); } return result; }, getEnclosingFinallyMap: function() { var enclosingMap = Object.create(null); addCatchOrFinallyStates(TryState.Kind.FINALLY, enclosingMap, this.exceptionBlocks); return enclosingMap; }, allCatchStates: function() { var catches = []; addAllCatchStates(this.exceptionBlocks, catches); return catches; }, replaceStateId: function(oldState, newState) { return new StateMachine(State.replaceStateId(this.startState, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), State.replaceAllStates(this.states, oldState, newState), State.replaceAllStates(this.exceptionBlocks, oldState, newState)); }, replaceStartState: function(newState) { return this.replaceStateId(this.startState, newState); }, replaceFallThroughState: function(newState) { return this.replaceStateId(this.fallThroughState, newState); }, append: function(nextMachine) { var states = $traceurRuntime.spread(this.states); for (var i = 0; i < nextMachine.states.length; i++) { var otherState = nextMachine.states[i]; states.push(otherState.replaceState(nextMachine.startState, this.fallThroughState)); } var exceptionBlocks = $traceurRuntime.spread(this.exceptionBlocks); for (var i$__1 = 0; i$__1 < nextMachine.exceptionBlocks.length; i$__1++) { var tryState = nextMachine.exceptionBlocks[i$__1]; exceptionBlocks.push(tryState.replaceState(nextMachine.startState, this.fallThroughState)); } return new StateMachine(this.startState, nextMachine.fallThroughState, states, exceptionBlocks); } }, {}, $__super); }(ParseTree); return {get StateMachine() { return StateMachine; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js"; var BreakState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./BreakState.js", "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js")).BreakState; var ContinueState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ContinueState.js", "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js")).ContinueState; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js")).ParseTreeTransformer; var StateMachine = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/StateMachine.js", "traceur@0.0.112/src/codegeneration/generator/BreakContinueTransformer.js")).StateMachine; function safeGetLabel(tree) { return tree.name ? tree.name.value : null; } var BreakContinueTransformer = function($__super) { function BreakContinueTransformer(stateAllocator) { $traceurRuntime.superConstructor(BreakContinueTransformer).call(this); this.transformBreaks_ = true; this.stateAllocator_ = stateAllocator; } return ($traceurRuntime.createClass)(BreakContinueTransformer, { allocateState_: function() { return this.stateAllocator_.allocateState(); }, stateToStateMachine_: function(newState) { var fallThroughState = this.allocateState_(); return new StateMachine(newState.id, fallThroughState, [newState], []); }, transformBreakStatement: function(tree) { return this.transformBreaks_ || tree.name ? this.stateToStateMachine_(new BreakState(this.allocateState_(), safeGetLabel(tree))) : tree; }, transformContinueStatement: function(tree) { return this.stateToStateMachine_(new ContinueState(this.allocateState_(), safeGetLabel(tree))); }, transformDoWhileStatement: function(tree) { return tree; }, transformForOfStatement: function(tree) { return tree; }, transformForOnStatement: function(tree) { return tree; }, transformForStatement: function(tree) { return tree; }, transformFunctionDeclaration: function(tree) { return tree; }, transformFunctionExpression: function(tree) { return tree; }, transformStateMachine: function(tree) { return tree; }, transformSwitchStatement: function(tree) { var oldState = this.transformBreaks_; this.transformBreaks_ = false; var result = $traceurRuntime.superGet(this, BreakContinueTransformer.prototype, "transformSwitchStatement").call(this, tree); this.transformBreaks_ = oldState; return result; }, transformWhileStatement: function(tree) { return tree; } }, {}, $__super); }(ParseTreeTransformer); return {get BreakContinueTransformer() { return BreakContinueTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/CatchState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/CatchState.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/CatchState.js")).State; var TryState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TryState.js", "traceur@0.0.112/src/codegeneration/generator/CatchState.js")).TryState; var CatchState = function($__super) { function CatchState(identifier, catchState, fallThroughState, allStates, nestedTrys) { $traceurRuntime.superConstructor(CatchState).call(this, TryState.Kind.CATCH, allStates, nestedTrys); this.identifier = identifier; this.catchState = catchState; this.fallThroughState = fallThroughState; } return ($traceurRuntime.createClass)(CatchState, {replaceState: function(oldState, newState) { return new CatchState(this.identifier, State.replaceStateId(this.catchState, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.replaceAllStates(oldState, newState), this.replaceNestedTrys(oldState, newState)); }}, {}, $__super); }(TryState); return {get CatchState() { return CatchState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/ConditionalState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/ConditionalState.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/ConditionalState.js")).State; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/ConditionalState.js")), createBlock = $__2.createBlock, createIfStatement = $__2.createIfStatement; var parseStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/ConditionalState.js")).parseStatements; var ConditionalState = function($__super) { function ConditionalState(id, ifState, elseState, condition) { $traceurRuntime.superConstructor(ConditionalState).call(this, id); this.ifState = ifState; this.elseState = elseState; this.condition = condition; } return ($traceurRuntime.createClass)(ConditionalState, { replaceState: function(oldState, newState) { return new ConditionalState(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.ifState, oldState, newState), State.replaceStateId(this.elseState, oldState, newState), this.condition); }, transform: function(enclosingFinally, machineEndState, reporter) { if (State.isFinallyExit(enclosingFinally, this.ifState) || State.isFinallyExit(enclosingFinally, this.elseState)) { return [createIfStatement(this.condition, createBlock(State.generateJump(enclosingFinally, this.ifState)), createBlock(State.generateJump(enclosingFinally, this.elseState)))]; } return parseStatements($traceurRuntime.getTemplateObject(["$ctx.state = (", ") ? ", " : ", ";\n break"]), this.condition, this.ifState, this.elseState); } }, {}, $__super); }(State); return {get ConditionalState() { return ConditionalState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/FinallyFallThroughState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/FinallyFallThroughState.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/FinallyFallThroughState.js")).State; var FinallyFallThroughState = function($__super) { function FinallyFallThroughState() { $traceurRuntime.superConstructor(FinallyFallThroughState).apply(this, arguments); } return ($traceurRuntime.createClass)(FinallyFallThroughState, { replaceState: function(oldState, newState) { return new FinallyFallThroughState(State.replaceStateId(this.id, oldState, newState)); }, transformMachineState: function(enclosingFinally, machineEndState, reporter) { return null; }, transform: function(enclosingFinally, machineEndState, reporter) { throw new Error('these are generated in addFinallyFallThroughDispatches'); } }, {}, $__super); }(State); return {get FinallyFallThroughState() { return FinallyFallThroughState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/FinallyState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/FinallyState.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/FinallyState.js")).State; var TryState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TryState.js", "traceur@0.0.112/src/codegeneration/generator/FinallyState.js")).TryState; var FinallyState = function($__super) { function FinallyState(finallyState, fallThroughState, allStates, nestedTrys) { $traceurRuntime.superConstructor(FinallyState).call(this, TryState.Kind.FINALLY, allStates, nestedTrys); this.finallyState = finallyState; this.fallThroughState = fallThroughState; } return ($traceurRuntime.createClass)(FinallyState, {replaceState: function(oldState, newState) { return new FinallyState(State.replaceStateId(this.finallyState, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.replaceAllStates(oldState, newState), this.replaceNestedTrys(oldState, newState)); }}, {}, $__super); }(TryState); return {get FinallyState() { return FinallyState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/StateAllocator.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/StateAllocator.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/StateAllocator.js")).State; var StateAllocator = function() { function StateAllocator() { this.nextState_ = State.START_STATE + 1; } return ($traceurRuntime.createClass)(StateAllocator, {allocateState: function() { return this.nextState_++; }}, {}); }(); return {get StateAllocator() { return StateAllocator; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/SwitchState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/SwitchState.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/generator/SwitchState.js")), CaseClause = $__2.CaseClause, DefaultClause = $__2.DefaultClause, SwitchStatement = $__2.SwitchStatement; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/SwitchState.js")).State; var createBreakStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/SwitchState.js")).createBreakStatement; var SwitchClause = function() { function SwitchClause(first, second) { this.first = first; this.second = second; } return ($traceurRuntime.createClass)(SwitchClause, {}, {}); }(); var SwitchState = function($__super) { function SwitchState(id, expression, clauses) { $traceurRuntime.superConstructor(SwitchState).call(this, id); this.expression = expression; this.clauses = clauses; } return ($traceurRuntime.createClass)(SwitchState, { replaceState: function(oldState, newState) { var clauses = this.clauses.map(function(clause) { return new SwitchClause(clause.first, State.replaceStateId(clause.second, oldState, newState)); }); return new SwitchState(State.replaceStateId(this.id, oldState, newState), this.expression, clauses); }, transform: function(enclosingFinally, machineEndState, reporter) { var clauses = []; for (var i = 0; i < this.clauses.length; i++) { var clause = this.clauses[i]; if (clause.first === null) { clauses.push(new DefaultClause(null, State.generateJump(enclosingFinally, clause.second))); } else { clauses.push(new CaseClause(null, clause.first, State.generateJump(enclosingFinally, clause.second))); } } return [new SwitchStatement(null, this.expression, clauses), createBreakStatement()]; } }, {}, $__super); }(State); return { get SwitchClause() { return SwitchClause; }, get SwitchState() { return SwitchState; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")), AnonBlock = $__1.AnonBlock, Catch = $__1.Catch, FunctionBody = $__1.FunctionBody, ForInStatement = $__1.ForInStatement, ForOfStatement = $__1.ForOfStatement, ForStatement = $__1.ForStatement, VariableDeclarationList = $__1.VariableDeclarationList, VariableStatement = $__1.VariableStatement; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")), OBJECT_PATTERN = $__2.OBJECT_PATTERN, VARIABLE_DECLARATION_LIST = $__2.VARIABLE_DECLARATION_LIST; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")).ParseTreeTransformer; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")).StringSet; var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")).VAR; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")), createAssignmentExpression = $__6.createAssignmentExpression, createCommaExpression = $__6.createCommaExpression, createExpressionStatement = $__6.createExpressionStatement, id = $__6.createIdentifierExpression, createParenExpression = $__6.createParenExpression, createVariableDeclaration = $__6.createVariableDeclaration; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/HoistVariablesTransformer.js")).prependStatements; var HoistVariablesTransformer = function($__super) { function HoistVariablesTransformer() { var shouldHoistFunctions = arguments[0] !== (void 0) ? arguments[0] : false; $traceurRuntime.superConstructor(HoistVariablesTransformer).call(this); this.hoistedFunctions_ = []; this.hoistedVariables_ = new StringSet(); this.keepBindingIdentifiers_ = false; this.inBlockOrFor_ = false; this.shouldHoistFunctions_ = shouldHoistFunctions; } return ($traceurRuntime.createClass)(HoistVariablesTransformer, { transformFunctionBody: function(tree) { var statements = this.transformList(tree.statements); if (statements === tree.statements) return tree; statements = this.prependVariables(statements); statements = this.prependFunctions(statements); return new FunctionBody(tree.location, statements); }, addVariable: function(name) { this.hoistedVariables_.add(name); }, addFunctionDeclaration: function(tree) { this.hoistedFunctions_.push(tree); }, hasVariables: function() { return !this.hoistedVariables_.isEmpty(); }, hasFunctions: function() { return this.hoistedFunctions_.length > 0; }, getVariableNames: function() { return this.hoistedVariables_.valuesAsArray(); }, getVariableStatement: function() { if (!this.hasVariables()) return new AnonBlock(null, []); var declarations = this.getVariableNames().map(function(name) { return createVariableDeclaration(name, null); }); return new VariableStatement(null, new VariableDeclarationList(null, VAR, declarations)); }, getFunctions: function() { return this.hoistedFunctions_; }, prependVariables: function(statements) { if (!this.hasVariables()) return statements; return prependStatements(statements, this.getVariableStatement()); }, prependFunctions: function(statements) { if (!this.hasFunctions()) return statements; return prependStatements(statements, this.getFunctionDeclarations()); }, transformVariableStatement: function(tree) { var declarations = this.transformAny(tree.declarations); if (declarations === tree.declarations) return tree; if (declarations === null) return new AnonBlock(null, []); if (declarations.type === VARIABLE_DECLARATION_LIST) return new VariableStatement(tree.location, declarations); return createExpressionStatement(declarations); }, transformVariableDeclaration: function(tree) { var lvalue = this.transformAny(tree.lvalue); var initializer = this.transformAny(tree.initializer); if (initializer) { var expression = createAssignmentExpression(lvalue, initializer); if (lvalue.type === OBJECT_PATTERN) expression = createParenExpression(expression); return expression; } return null; }, transformObjectPattern: function(tree) { var keepBindingIdentifiers = this.keepBindingIdentifiers_; this.keepBindingIdentifiers_ = true; var transformed = $traceurRuntime.superGet(this, HoistVariablesTransformer.prototype, "transformObjectPattern").call(this, tree); this.keepBindingIdentifiers_ = keepBindingIdentifiers; return transformed; }, transformArrayPattern: function(tree) { var keepBindingIdentifiers = this.keepBindingIdentifiers_; this.keepBindingIdentifiers_ = true; var transformed = $traceurRuntime.superGet(this, HoistVariablesTransformer.prototype, "transformArrayPattern").call(this, tree); this.keepBindingIdentifiers_ = keepBindingIdentifiers; return transformed; }, transformBindingIdentifier: function(tree) { var idToken = tree.identifierToken; this.addVariable(idToken.value); if (this.keepBindingIdentifiers_) return tree; return id(idToken); }, transformVariableDeclarationList: function(tree) { if (tree.declarationType === VAR || !this.inBlockOrFor_) { var expressions = this.transformList(tree.declarations); expressions = expressions.filter(function(tree) { return tree; }); if (expressions.length === 0) return null; if (expressions.length === 1) return expressions[0]; return createCommaExpression(expressions); } return tree; }, transformCatch: function(tree) { var catchBody = this.transformAny(tree.catchBody); if (catchBody === tree.catchBody) return tree; return new Catch(tree.location, tree.binding, catchBody); }, transformForInStatement: function(tree) { return this.transformLoop_(tree, ForInStatement); }, transformForOfStatement: function(tree) { return this.transformLoop_(tree, ForOfStatement); }, transformForOnStatement: function(tree) { return this.transformLoop_(tree, ForOfStatement); }, transformLoop_: function(tree, ctor) { var initializer = this.transformLoopIninitaliser_(tree.initializer); var collection = this.transformAny(tree.collection); var body = this.transformAny(tree.body); if (initializer === tree.initializer && collection === tree.collection && body === tree.body) { return tree; } return new ctor(tree.location, initializer, collection, body); }, transformLoopIninitaliser_: function(tree) { if (tree.type !== VARIABLE_DECLARATION_LIST || tree.declarationType !== VAR) return tree; return this.transformAny(tree.declarations[0].lvalue); }, transformForStatement: function(tree) { var inBlockOrFor = this.inBlockOrFor_; this.inBlockOrFor_ = true; var initializer = this.transformAny(tree.initializer); this.inBlockOrFor_ = inBlockOrFor; var condition = this.transformAny(tree.condition); var increment = this.transformAny(tree.increment); var body = this.transformAny(tree.body); if (initializer === tree.initializer && condition === tree.condition && increment === tree.increment && body === tree.body) { return tree; } return new ForStatement(tree.location, initializer, condition, increment, body); }, transformBlock: function(tree) { var inBlockOrFor = this.inBlockOrFor_; this.inBlockOrFor_ = true; tree = $traceurRuntime.superGet(this, HoistVariablesTransformer.prototype, "transformBlock").call(this, tree); this.inBlockOrFor_ = inBlockOrFor; return tree; }, addMachineVariable: function(name) { this.machineVariables_[name] = true; }, transformClassDeclaration: function(tree) { return tree; }, transformClassExpression: function(tree) { return tree; }, transformFunctionDeclaration: function(tree) { if (this.shouldHoistFunctions_) { this.addFunctionDeclaration(tree); return new AnonBlock(null, []); } return tree; }, transformFunctionExpression: function(tree) { return tree; }, transformGetAccessor: function(tree) { return tree; }, transformSetAccessor: function(tree) { return tree; }, transformMethod: function(tree) { return tree; }, transformArrowFunction: function(tree) { return tree; }, transformComprehensionFor: function(tree) { return tree; } }, {}, $__super); }(ParseTreeTransformer); var $__default = HoistVariablesTransformer; return {get default() { return $__default; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js"; var AlphaRenamer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../AlphaRenamer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).AlphaRenamer; var BreakContinueTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./BreakContinueTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).BreakContinueTransformer; var $__19 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")), BLOCK = $__19.BLOCK, CASE_CLAUSE = $__19.CASE_CLAUSE, CONDITIONAL_EXPRESSION = $__19.CONDITIONAL_EXPRESSION, EXPRESSION_STATEMENT = $__19.EXPRESSION_STATEMENT, PAREN_EXPRESSION = $__19.PAREN_EXPRESSION, STATE_MACHINE = $__19.STATE_MACHINE; var $__20 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")), AnonBlock = $__20.AnonBlock, Block = $__20.Block, CaseClause = $__20.CaseClause, IfStatement = $__20.IfStatement, SwitchStatement = $__20.SwitchStatement; var CatchState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./CatchState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).CatchState; var ConditionalState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ConditionalState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).ConditionalState; var ExplodeExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ExplodeExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).ExplodeExpressionTransformer; var FallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).FallThroughState; var FinallyFallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FinallyFallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).FinallyFallThroughState; var FinallyState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FinallyState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).FinallyState; var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).FindInFunctionScope; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).ParseTreeTransformer; var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/StringMap.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).StringMap; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).TempVarTransformer; var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/assert.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).assert; var $__32 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")), parseExpression = $__32.parseExpression, parseStatement = $__32.parseStatement, parseStatements = $__32.parseStatements; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).State; var StateAllocator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./StateAllocator.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).StateAllocator; var StateMachine = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/StateMachine.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).StateMachine; var $__36 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SwitchState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")), SwitchClause = $__36.SwitchClause, SwitchState = $__36.SwitchState; var TryState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TryState.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).TryState; var $__38 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")), createAssignStateStatement = $__38.createAssignStateStatement, createBreakStatement = $__38.createBreakStatement, createCaseClause = $__38.createCaseClause, createDefaultClause = $__38.createDefaultClause, createExpressionStatement = $__38.createExpressionStatement, createFunctionBody = $__38.createFunctionBody, id = $__38.createIdentifierExpression, createMemberExpression = $__38.createMemberExpression, createNumberLiteral = $__38.createNumberLiteral, createSwitchStatement = $__38.createSwitchStatement; var HoistVariablesTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../HoistVariablesTransformer.js", "traceur@0.0.112/src/codegeneration/generator/CPSTransformer.js")).default; var LabelState = function() { function LabelState(name, continueState, fallThroughState) { this.name = name; this.continueState = continueState; this.fallThroughState = fallThroughState; } return ($traceurRuntime.createClass)(LabelState, {}, {}); }(); var NeedsStateMachine = function($__super) { function NeedsStateMachine() { $traceurRuntime.superConstructor(NeedsStateMachine).apply(this, arguments); } return ($traceurRuntime.createClass)(NeedsStateMachine, { visitBreakStatement: function(tree) { this.found = true; }, visitContinueStatement: function(tree) { this.found = true; }, visitStateMachine: function(tree) { this.found = true; }, visitYieldExpression: function(tee) { this.found = true; } }, {}, $__super); }(FindInFunctionScope); function needsStateMachine(tree) { var visitor = new NeedsStateMachine(); visitor.visitAny(tree); return visitor.found; } var HoistVariables = function($__super) { function HoistVariables() { $traceurRuntime.superConstructor(HoistVariables).call(this, true); } return ($traceurRuntime.createClass)(HoistVariables, { prependVariables: function(statements) { return statements; }, prependFunctions: function(statements) { return statements; } }, {}, $__super); }(HoistVariablesTransformer); var CPSTransformer = function($__super) { function CPSTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(CPSTransformer).call(this, identifierGenerator, reporter, options); this.stateAllocator_ = new StateAllocator(); this.labelSet_ = new StringMap(); this.currentLabel_ = null; this.hoistVariablesTransformer_ = new HoistVariables(); } return ($traceurRuntime.createClass)(CPSTransformer, { expressionNeedsStateMachine: function(tree) { return false; }, allocateState: function() { return this.stateAllocator_.allocateState(); }, transformBlock: function(tree) { var labels = this.getLabels_(); var label = this.clearCurrentLabel_(); var transformedTree = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformBlock").call(this, tree); var machine = this.transformStatementList_(transformedTree.statements); if (machine === null) return transformedTree; if (label) { var states = []; for (var i = 0; i < machine.states.length; i++) { var state = machine.states[i]; states.push(state.transformBreakOrContinue(labels)); } machine = new StateMachine(machine.startState, machine.fallThroughState, states, machine.exceptionBlocks); } return machine; }, transformFunctionBody: function(tree) { this.pushTempScope(); var oldLabels = this.clearLabels_(); var transformedTree = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformFunctionBody").call(this, tree); var machine = this.transformStatementList_(transformedTree.statements); this.restoreLabels_(oldLabels); this.popTempScope(); return machine === null ? transformedTree : machine; }, transformStatementList_: function(trees) { var groups = []; var newMachine; for (var i = 0; i < trees.length; i++) { if (trees[i].type === STATE_MACHINE) { groups.push(trees[i]); } else if (needsStateMachine(trees[i])) { newMachine = this.ensureTransformed_(trees[i]); groups.push(newMachine); } else { var last = groups[groups.length - 1]; if (!(last instanceof Array)) groups.push(last = []); last.push(trees[i]); } } if (groups.length === 1 && groups[0] instanceof Array) return null; var machine = null; for (var i$__11 = 0; i$__11 < groups.length; i$__11++) { if (groups[i$__11] instanceof Array) { newMachine = this.statementsToStateMachine_(groups[i$__11]); } else { newMachine = groups[i$__11]; } if (i$__11 === 0) machine = newMachine; else machine = machine.append(newMachine); } return machine; }, needsStateMachine_: function(statements) { if (statements instanceof Array) { for (var i = 0; i < statements.length; i++) { if (needsStateMachine(statements[i])) return true; } return false; } assert(statements instanceof SwitchStatement); return needsStateMachine(statements); }, transformCaseClause: function(tree) { var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformCaseClause").call(this, tree); var machine = this.transformStatementList_(result.statements); return machine === null ? result : new CaseClause(null, result.expression, [machine]); }, transformDoWhileStatement: function(tree) { var $__8; var $__6, $__7; var labels = this.getLabels_(); var label = this.clearCurrentLabel_(); var machine, condition, body; if (this.expressionNeedsStateMachine(tree.condition)) { (($__6 = this.expressionToStateMachine(tree.condition), machine = $__6.machine, condition = $__6.expression, $__6)); body = this.transformAny(tree.body); } else { var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformDoWhileStatement").call(this, tree); (($__7 = result, condition = $__7.condition, body = $__7.body, $__7)); if (body.type !== STATE_MACHINE) return result; } var loopBodyMachine = this.ensureTransformed_(body); var startState = loopBodyMachine.startState; var conditionState = loopBodyMachine.fallThroughState; var fallThroughState = this.allocateState(); var states = []; this.addLoopBodyStates_(loopBodyMachine, conditionState, fallThroughState, labels, states); if (machine) { machine = machine.replaceStartState(conditionState); conditionState = machine.fallThroughState; ($__8 = states).push.apply($__8, $traceurRuntime.spread(machine.states)); } states.push(new ConditionalState(conditionState, startState, fallThroughState, condition)); machine = new StateMachine(startState, fallThroughState, states, loopBodyMachine.exceptionBlocks); if (label) machine = machine.replaceStateId(conditionState, label.continueState); return machine; }, addLoopBodyStates_: function(loopBodyMachine, continueState, breakState, labels, states) { for (var i = 0; i < loopBodyMachine.states.length; i++) { var state = loopBodyMachine.states[i]; states.push(state.transformBreakOrContinue(labels, breakState, continueState)); } }, transformForStatement: function(tree) { var $__8, $__9, $__10; var labels = this.getLabels_(); var label = this.clearCurrentLabel_(); var tmp; var initializer = null, initializerMachine; if (tree.initializer) { if (this.expressionNeedsStateMachine(tree.initializer)) { tmp = this.expressionToStateMachine(tree.initializer); initializer = tmp.expression; initializerMachine = tmp.machine; } else { initializer = this.transformAny(tree.initializer); } } var condition = null, conditionMachine; if (tree.condition) { if (this.expressionNeedsStateMachine(tree.condition)) { tmp = this.expressionToStateMachine(tree.condition); condition = tmp.expression; conditionMachine = tmp.machine; } else { condition = this.transformAny(tree.condition); } } var increment = null, incrementMachine; if (tree.increment) { if (this.expressionNeedsStateMachine(tree.increment)) { tmp = this.expressionToStateMachine(tree.increment); increment = tmp.expression; incrementMachine = tmp.machine; } else { increment = this.transformAny(tree.increment); } } var body = this.transformAny(tree.body); if (initializer === tree.initializer && condition === tree.condition && increment === tree.increment && body === tree.body) { return tree; } if (!initializerMachine && !conditionMachine && !incrementMachine && body.type !== STATE_MACHINE) { return new ForStatement(tree.location, initializer, condition, increment, body); } var loopBodyMachine = this.ensureTransformed_(body); var bodyFallThroughId = loopBodyMachine.fallThroughState; var fallThroughId = this.allocateState(); var startId; var initializerStartId = initializer ? this.allocateState() : State.INVALID_STATE; var conditionStartId = increment ? this.allocateState() : bodyFallThroughId; var loopStartId = loopBodyMachine.startState; var incrementStartId = bodyFallThroughId; var states = []; if (initializer) { startId = initializerStartId; var initialiserFallThroughId; if (condition) initialiserFallThroughId = conditionStartId; else initialiserFallThroughId = loopStartId; var tmpId = initializerStartId; if (initializerMachine) { initializerMachine = initializerMachine.replaceStartState(initializerStartId); tmpId = initializerMachine.fallThroughState; ($__8 = states).push.apply($__8, $traceurRuntime.spread(initializerMachine.states)); } states.push(new FallThroughState(tmpId, initialiserFallThroughId, [createExpressionStatement(initializer)])); } if (condition) { if (!initializer) startId = conditionStartId; var tmpId$__12 = conditionStartId; if (conditionMachine) { conditionMachine = conditionMachine.replaceStartState(conditionStartId); tmpId$__12 = conditionMachine.fallThroughState; ($__9 = states).push.apply($__9, $traceurRuntime.spread(conditionMachine.states)); } states.push(new ConditionalState(tmpId$__12, loopStartId, fallThroughId, condition)); } if (increment) { var incrementFallThroughId; if (condition) incrementFallThroughId = conditionStartId; else incrementFallThroughId = loopStartId; var tmpId$__13 = incrementStartId; if (incrementMachine) { incrementMachine = incrementMachine.replaceStartState(incrementStartId); tmpId$__13 = incrementMachine.fallThroughState; ($__10 = states).push.apply($__10, $traceurRuntime.spread(incrementMachine.states)); } states.push(new FallThroughState(tmpId$__13, incrementFallThroughId, [createExpressionStatement(increment)])); } if (!initializer && !condition) startId = loopStartId; var continueId; if (increment) continueId = incrementStartId; else if (condition) continueId = conditionStartId; else continueId = loopStartId; if (!increment && !condition) { loopBodyMachine = loopBodyMachine.replaceFallThroughState(loopBodyMachine.startState); } this.addLoopBodyStates_(loopBodyMachine, continueId, fallThroughId, labels, states); var machine = new StateMachine(startId, fallThroughId, states, loopBodyMachine.exceptionBlocks); if (label) machine = machine.replaceStateId(continueId, label.continueState); return machine; }, transformForInStatement: function(tree) { return tree; }, transformForOfStatement: function(tree) { throw new Error('for of statements should be transformed before this pass'); }, transformIfStatement: function(tree) { var $__8, $__9, $__10; var $__6, $__7; var machine, condition, ifClause, elseClause; if (this.expressionNeedsStateMachine(tree.condition)) { (($__6 = this.expressionToStateMachine(tree.condition), machine = $__6.machine, condition = $__6.expression, $__6)); ifClause = this.transformAny(tree.ifClause); elseClause = this.transformAny(tree.elseClause); } else { var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformIfStatement").call(this, tree); (($__7 = result, condition = $__7.condition, ifClause = $__7.ifClause, elseClause = $__7.elseClause, $__7)); if (ifClause.type !== STATE_MACHINE && (elseClause === null || elseClause.type !== STATE_MACHINE)) { return result; } } ifClause = this.ensureTransformed_(ifClause); elseClause = this.ensureTransformed_(elseClause); var startState = this.allocateState(); var fallThroughState = ifClause.fallThroughState; var ifState = ifClause.startState; var elseState = elseClause === null ? fallThroughState : elseClause.startState; var states = []; var exceptionBlocks = []; states.push(new ConditionalState(startState, ifState, elseState, condition)); ($__8 = states).push.apply($__8, $traceurRuntime.spread(ifClause.states)); ($__9 = exceptionBlocks).push.apply($__9, $traceurRuntime.spread(ifClause.exceptionBlocks)); if (elseClause !== null) { this.replaceAndAddStates_(elseClause.states, elseClause.fallThroughState, fallThroughState, states); ($__10 = exceptionBlocks).push.apply($__10, $traceurRuntime.spread(State.replaceAllStates(elseClause.exceptionBlocks, elseClause.fallThroughState, fallThroughState))); } var ifMachine = new StateMachine(startState, fallThroughState, states, exceptionBlocks); if (machine) ifMachine = machine.append(ifMachine); return ifMachine; }, removeEmptyStates: function(oldStates) { var emptyStates = [], newStates = []; for (var i = 0; i < oldStates.length; i++) { if (oldStates[i] instanceof FallThroughState && oldStates[i].statements.length === 0) { emptyStates.push(oldStates[i]); } else { newStates.push(oldStates[i]); } } for (var i$__14 = 0; i$__14 < newStates.length; i$__14++) { newStates[i$__14] = emptyStates.reduce(function(state, $__6) { var $__7 = $__6, id = $__7.id, fallThroughState = $__7.fallThroughState; return state.replaceState(id, fallThroughState); }, newStates[i$__14]); } return newStates; }, replaceAndAddStates_: function(oldStates, oldState, newState, newStates) { for (var i = 0; i < oldStates.length; i++) { newStates.push(oldStates[i].replaceState(oldState, newState)); } }, transformLabelledStatement: function(tree) { var startState = this.allocateState(); var continueState = this.allocateState(); var fallThroughState = this.allocateState(); var label = new LabelState(tree.name.value, continueState, fallThroughState); var oldLabels = this.addLabel_(label); this.currentLabel_ = label; var result = this.transformAny(tree.statement); if (result === tree.statement) { result = tree; } else if (result.type === STATE_MACHINE) { result = result.replaceStartState(startState); result = result.replaceFallThroughState(fallThroughState); } this.restoreLabels_(oldLabels); return result; }, getLabels_: function() { return this.labelSet_; }, restoreLabels_: function(oldLabels) { this.labelSet_ = oldLabels; }, addLabel_: function(label) { var $__5 = this; var oldLabels = this.labelSet_; var labelSet = new StringMap(); this.labelSet_.forEach(function(k) { return labelSet[k] = $__5.labelSet_[k]; }); labelSet.set(label.name, label); this.labelSet_ = labelSet; return oldLabels; }, clearLabels_: function() { var result = this.labelSet_; this.labelSet_ = new StringMap(); return result; }, clearCurrentLabel_: function() { var result = this.currentLabel_; this.currentLabel_ = null; return result; }, transformSwitchStatement: function(tree) { var $__6, $__7; var labels = this.getLabels_(); var expression, machine, caseClauses; if (this.expressionNeedsStateMachine(tree.expression)) { (($__6 = this.expressionToStateMachine(tree.expression), expression = $__6.expression, machine = $__6.machine, $__6)); caseClauses = this.transformList(tree.caseClauses); } else { var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformSwitchStatement").call(this, tree); if (!needsStateMachine(result)) return result; (($__7 = result, expression = $__7.expression, caseClauses = $__7.caseClauses, $__7)); } var startState = this.allocateState(); var fallThroughState = this.allocateState(); var nextState = fallThroughState; var states = []; var clauses = []; var tryStates = []; var hasDefault = false; for (var index = caseClauses.length - 1; index >= 0; index--) { var clause = caseClauses[index]; if (clause.type === CASE_CLAUSE) { var caseClause = clause; nextState = this.addSwitchClauseStates_(nextState, fallThroughState, labels, caseClause.statements, states, tryStates); clauses.push(new SwitchClause(caseClause.expression, nextState)); } else { hasDefault = true; var defaultClause = clause; nextState = this.addSwitchClauseStates_(nextState, fallThroughState, labels, defaultClause.statements, states, tryStates); clauses.push(new SwitchClause(null, nextState)); } } if (!hasDefault) { clauses.push(new SwitchClause(null, fallThroughState)); } states.push(new SwitchState(startState, expression, clauses.reverse())); var switchMachine = new StateMachine(startState, fallThroughState, states.reverse(), tryStates); if (machine) switchMachine = machine.append(switchMachine); return switchMachine; }, addSwitchClauseStates_: function(nextState, fallThroughState, labels, statements, states, tryStates) { var $__8; var machine = this.ensureTransformedList_(statements); for (var i = 0; i < machine.states.length; i++) { var state = machine.states[i]; var transformedState = state.transformBreak(labels, fallThroughState); states.push(transformedState.replaceState(machine.fallThroughState, nextState)); } ($__8 = tryStates).push.apply($__8, $traceurRuntime.spread(machine.exceptionBlocks)); return machine.startState; }, transformTryStatement: function(tree) { var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformTryStatement").call(this, tree); var $__6 = result, body = $__6.body, catchBlock = $__6.catchBlock, finallyBlock = $__6.finallyBlock; if (body.type !== STATE_MACHINE && (catchBlock === null || catchBlock.catchBody.type !== STATE_MACHINE) && (finallyBlock === null || finallyBlock.block.type !== STATE_MACHINE)) { return result; } var outerCatchState = this.allocateState(); var outerFinallyState = this.allocateState(); var pushTryState = this.statementToStateMachine_(parseStatement($traceurRuntime.getTemplateObject(["$ctx.pushTry(\n ", ",\n ", ");"]), (catchBlock && outerCatchState), (finallyBlock && outerFinallyState))); var tryMachine = this.ensureTransformed_(body); tryMachine = pushTryState.append(tryMachine); if (catchBlock !== null) { var popTry = this.statementToStateMachine_(parseStatement($traceurRuntime.getTemplateObject(["$ctx.popTry();"]))); tryMachine = tryMachine.append(popTry); var exceptionName = catchBlock.binding.identifierToken.value; var catchMachine = this.ensureTransformed_(catchBlock.catchBody); var catchStart = this.allocateState(); this.addMachineVariable(exceptionName); var states = $traceurRuntime.spread(tryMachine.states, [new FallThroughState(catchStart, catchMachine.startState, parseStatements($traceurRuntime.getTemplateObject(["\n $ctx.popTry();\n $ctx.maybeUncatchable(); // see RETURN_SENTINEL in runtime\n ", " = $ctx.storedException;"]), id(exceptionName)))]); this.replaceAndAddStates_(catchMachine.states, catchMachine.fallThroughState, tryMachine.fallThroughState, states); tryMachine = new StateMachine(tryMachine.startState, tryMachine.fallThroughState, states, [new CatchState(exceptionName, catchStart, tryMachine.fallThroughState, tryMachine.getAllStateIDs(), tryMachine.exceptionBlocks)]); tryMachine = tryMachine.replaceStateId(catchStart, outerCatchState); } if (finallyBlock !== null) { var finallyMachine = this.ensureTransformed_(finallyBlock.block); var popTry$__15 = this.statementToStateMachine_(parseStatement($traceurRuntime.getTemplateObject(["$ctx.popTry();"]))); finallyMachine = popTry$__15.append(finallyMachine); var states$__16 = $traceurRuntime.spread(tryMachine.states, finallyMachine.states, [new FinallyFallThroughState(finallyMachine.fallThroughState)]); tryMachine = new StateMachine(tryMachine.startState, tryMachine.fallThroughState, states$__16, [new FinallyState(finallyMachine.startState, finallyMachine.fallThroughState, tryMachine.getAllStateIDs(), tryMachine.exceptionBlocks)]); tryMachine = tryMachine.replaceStateId(finallyMachine.startState, outerFinallyState); } return tryMachine; }, transformWhileStatement: function(tree) { var $__8; var $__6, $__7; var labels = this.getLabels_(); var label = this.clearCurrentLabel_(); var condition, machine, body; if (this.expressionNeedsStateMachine(tree.condition)) { (($__6 = this.expressionToStateMachine(tree.condition), machine = $__6.machine, condition = $__6.expression, $__6)); body = this.transformAny(tree.body); } else { var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformWhileStatement").call(this, tree); (($__7 = result, condition = $__7.condition, body = $__7.body, $__7)); if (body.type !== STATE_MACHINE) return result; } var loopBodyMachine = this.ensureTransformed_(body); var startState = loopBodyMachine.fallThroughState; var fallThroughState = this.allocateState(); var states = []; var conditionStart = startState; if (machine) { machine = machine.replaceStartState(startState); conditionStart = machine.fallThroughState; ($__8 = states).push.apply($__8, $traceurRuntime.spread(machine.states)); } states.push(new ConditionalState(conditionStart, loopBodyMachine.startState, fallThroughState, condition)); this.addLoopBodyStates_(loopBodyMachine, startState, fallThroughState, labels, states); machine = new StateMachine(startState, fallThroughState, states, loopBodyMachine.exceptionBlocks); if (label) machine = machine.replaceStateId(startState, label.continueState); return machine; }, transformWithStatement: function(tree) { var result = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformWithStatement").call(this, tree); if (result.body.type !== STATE_MACHINE) { return result; } throw new Error('Unreachable - with statement not allowed in strict mode/harmony'); }, generateMachineInnerFunction: function(machine) { var enclosingFinallyState = machine.getEnclosingFinallyMap(); var SwitchStatement = createSwitchStatement(createMemberExpression('$ctx', 'state'), this.transformMachineStates(machine, State.END_STATE, State.RETHROW_STATE, enclosingFinallyState)); return parseExpression($traceurRuntime.getTemplateObject(["function($ctx) {\n while (true) ", "\n }"]), SwitchStatement); }, addTempVar: function() { var name = this.getTempIdentifier(); this.addMachineVariable(name); return name; }, addMachineVariable: function(name) { this.hoistVariablesTransformer_.addVariable(name); }, transformCpsFunctionBody: function(tree, runtimeMethod) { var $__8; var functionRef = arguments[2]; var alphaRenamedTree = AlphaRenamer.rename(tree, 'arguments', '$arguments'); var hasArguments = alphaRenamedTree !== tree; var hoistedTree = this.hoistVariablesTransformer_.transformAny(alphaRenamedTree); var maybeMachine = this.transformAny(hoistedTree); if (this.reporter.hadError()) return tree; var machine; if (maybeMachine.type !== STATE_MACHINE) { machine = this.statementsToStateMachine_(maybeMachine.statements); } else { machine = new StateMachine(maybeMachine.startState, maybeMachine.fallThroughState, this.removeEmptyStates(maybeMachine.states), maybeMachine.exceptionBlocks); } machine = machine.replaceFallThroughState(State.END_STATE).replaceStartState(State.START_STATE); var statements = []; if (this.hoistVariablesTransformer_.hasFunctions()) ($__8 = statements).push.apply($__8, $traceurRuntime.spread(this.hoistVariablesTransformer_.getFunctions())); if (this.hoistVariablesTransformer_.hasVariables()) statements.push(this.hoistVariablesTransformer_.getVariableStatement()); if (hasArguments) statements.push(parseStatement($traceurRuntime.getTemplateObject(["var $arguments = arguments;"]))); if (functionRef) { statements.push(parseStatement($traceurRuntime.getTemplateObject(["return ", "(\n ", ",\n ", ", this);"]), runtimeMethod, this.generateMachineInnerFunction(machine), functionRef)); } else { statements.push(parseStatement($traceurRuntime.getTemplateObject(["return ", "(\n ", ", this);"]), runtimeMethod, this.generateMachineInnerFunction(machine))); } return createFunctionBody(statements); }, transformFunctionDeclaration: function(tree) { return tree; }, transformFunctionExpression: function(tree) { return tree; }, transformGetAccessor: function(tree) { return tree; }, transformSetAccessor: function(tree) { return tree; }, transformArrowFunction: function(tree) { return tree; }, transformStateMachine: function(tree) { return tree; }, statementToStateMachine_: function(statement) { var statements; if (statement.type === BLOCK) statements = statement.statements; else statements = [statement]; return this.statementsToStateMachine_(statements); }, statementsToStateMachine_: function(statements) { var startState = this.allocateState(); var fallThroughState = this.allocateState(); return this.stateToStateMachine_(new FallThroughState(startState, fallThroughState, statements), fallThroughState); }, stateToStateMachine_: function(newState, fallThroughState) { return new StateMachine(newState.id, fallThroughState, [newState], []); }, transformMachineStates: function(machine, machineEndState, rethrowState, enclosingFinallyState) { var cases = []; for (var i = 0; i < machine.states.length; i++) { var state = machine.states[i]; var stateCase = state.transformMachineState(enclosingFinallyState[state.id], machineEndState, this.reporter); if (stateCase !== null) { cases.push(stateCase); } } this.addFinallyFallThroughDispatches(null, machine.exceptionBlocks, cases); cases.push(createDefaultClause(parseStatements($traceurRuntime.getTemplateObject(["return $ctx.end()"])))); return cases; }, addFinallyFallThroughDispatches: function(enclosingFinallyState, tryStates, cases) { for (var i = 0; i < tryStates.length; i++) { var tryState = tryStates[i]; if (tryState.kind === TryState.Kind.FINALLY) { var finallyState = tryState; if (enclosingFinallyState !== null) { var caseClauses = []; var index = 0; for (var j = 0; j < enclosingFinallyState.tryStates.length; j++) { var destination = enclosingFinallyState.tryStates[j]; index++; var statements = void 0; if (index < enclosingFinallyState.tryStates.length) { statements = []; } else { statements = parseStatements($traceurRuntime.getTemplateObject(["\n $ctx.state = $ctx.finallyFallThrough;\n $ctx.finallyFallThrough = ", ";\n break;"]), State.INVALID_STATE); } caseClauses.push(createCaseClause(createNumberLiteral(destination), statements)); } caseClauses.push(createDefaultClause([createAssignStateStatement(enclosingFinallyState.finallyState), createBreakStatement()])); cases.push(createCaseClause(createNumberLiteral(finallyState.fallThroughState), [createSwitchStatement(createMemberExpression('$ctx', 'finallyFallThrough'), caseClauses), createBreakStatement()])); } else { cases.push(createCaseClause(createNumberLiteral(finallyState.fallThroughState), parseStatements($traceurRuntime.getTemplateObject(["\n $ctx.state = $ctx.finallyFallThrough;\n break;"])))); } this.addFinallyFallThroughDispatches(finallyState, finallyState.nestedTrys, cases); } else { this.addFinallyFallThroughDispatches(enclosingFinallyState, tryState.nestedTrys, cases); } } }, transformVariableDeclarationList: function(tree) { this.reporter.reportError(tree.location, 'Traceur: const/let declarations in a block containing a yield are ' + 'not yet implemented'); return tree; }, maybeTransformStatement_: function(maybeTransformedStatement) { var breakContinueTransformed = new BreakContinueTransformer(this.stateAllocator_).transformAny(maybeTransformedStatement); if (breakContinueTransformed !== maybeTransformedStatement) { breakContinueTransformed = this.transformAny(breakContinueTransformed); } return breakContinueTransformed; }, ensureTransformed_: function(statement) { if (statement === null) { return null; } var maybeTransformed = this.maybeTransformStatement_(statement); return maybeTransformed.type === STATE_MACHINE ? maybeTransformed : this.statementToStateMachine_(maybeTransformed); }, ensureTransformedList_: function(statements) { var maybeTransformedStatements = []; var foundMachine = false; for (var i = 0; i < statements.length; i++) { var statement = statements[i]; var maybeTransformedStatement = this.maybeTransformStatement_(statement); maybeTransformedStatements.push(maybeTransformedStatement); if (maybeTransformedStatement.type === STATE_MACHINE) { foundMachine = true; } } if (!foundMachine) { return this.statementsToStateMachine_(statements); } return this.transformStatementList_(maybeTransformedStatements); }, expressionToStateMachine: function(tree) { var commaExpression = new ExplodeExpressionTransformer(this).transformAny(tree); var statements = new NormalizeCommaExpressionToStatementTransformer().transformAny(commaExpression).statements; var lastStatement = statements.pop(); assert(lastStatement.type === EXPRESSION_STATEMENT); var expression = lastStatement.expression; statements = $traceurRuntime.superGet(this, CPSTransformer.prototype, "transformList").call(this, statements); var machine = this.transformStatementList_(statements); return { expression: expression, machine: machine }; } }, {}, $__super); }(TempVarTransformer); var NormalizeCommaExpressionToStatementTransformer = function($__super) { function NormalizeCommaExpressionToStatementTransformer() { $traceurRuntime.superConstructor(NormalizeCommaExpressionToStatementTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(NormalizeCommaExpressionToStatementTransformer, { transformCommaExpression: function(tree) { var $__5 = this; var statements = tree.expressions.map(function(expr) { if (expr.type === CONDITIONAL_EXPRESSION) return $__5.transformAny(expr); return createExpressionStatement(expr); }); return new AnonBlock(tree.location, statements); }, transformConditionalExpression: function(tree) { var ifBlock = this.transformAny(tree.left); var elseBlock = this.transformAny(tree.right); return new IfStatement(tree.location, tree.condition, anonBlockToBlock(ifBlock), anonBlockToBlock(elseBlock)); } }, {}, $__super); }(ParseTreeTransformer); function anonBlockToBlock(tree) { if (tree.type === PAREN_EXPRESSION) return anonBlockToBlock(tree.expression); return new Block(tree.location, tree.statements); } return {get CPSTransformer() { return CPSTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/EndState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/EndState.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/EndState.js")).State; var EndState = function($__super) { function EndState() { $traceurRuntime.superConstructor(EndState).apply(this, arguments); } return ($traceurRuntime.createClass)(EndState, { replaceState: function(oldState, newState) { return new EndState(State.replaceStateId(this.id, oldState, newState)); }, transform: function(enclosingFinally, machineEndState, reporter) { return State.generateJump(enclosingFinally, machineEndState); } }, {}, $__super); }(State); return {get EndState() { return EndState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js"; var AwaitState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AwaitState.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).AwaitState; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")), BinaryExpression = $__4.BinaryExpression, ExpressionStatement = $__4.ExpressionStatement; var CPSTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./CPSTransformer.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).CPSTransformer; var EndState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./EndState.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).EndState; var FallThroughState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FallThroughState.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).FallThroughState; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).default; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")), AWAIT_EXPRESSION = $__9.AWAIT_EXPRESSION, BINARY_EXPRESSION = $__9.BINARY_EXPRESSION, STATE_MACHINE = $__9.STATE_MACHINE; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")), parseExpression = $__10.parseExpression, parseStatement = $__10.parseStatement, parseStatements = $__10.parseStatements; var StateMachine = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/StateMachine.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).StateMachine; var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).FindInFunctionScope; var createUndefinedExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/AsyncTransformer.js")).createUndefinedExpression; function isAwaitAssign(tree) { return tree.type === BINARY_EXPRESSION && tree.operator.isAssignmentOperator() && tree.right.type === AWAIT_EXPRESSION && tree.left.isLeftHandSideExpression(); } var AwaitFinder = function($__super) { function AwaitFinder() { $traceurRuntime.superConstructor(AwaitFinder).apply(this, arguments); } return ($traceurRuntime.createClass)(AwaitFinder, {visitAwaitExpression: function(tree) { this.found = true; }}, {}, $__super); }(FindInFunctionScope); function scopeContainsAwait(tree) { var visitor = new AwaitFinder(); visitor.visitAny(tree); return visitor.found; } var AsyncTransformer = function($__super) { function AsyncTransformer() { $traceurRuntime.superConstructor(AsyncTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(AsyncTransformer, { expressionNeedsStateMachine: function(tree) { if (tree === null) return false; return scopeContainsAwait(tree); }, transformExpressionStatement: function(tree) { var expression = tree.expression; if (expression.type === AWAIT_EXPRESSION) return this.transformAwaitExpression_(expression); if (isAwaitAssign(expression)) return this.transformAwaitAssign_(expression); if (this.expressionNeedsStateMachine(expression)) { return this.expressionToStateMachine(expression).machine; } return $traceurRuntime.superGet(this, AsyncTransformer.prototype, "transformExpressionStatement").call(this, tree); }, transformAwaitExpression: function(tree) { throw new Error('Internal error'); }, transformAwaitExpression_: function(tree) { return this.transformAwait_(tree, tree.expression, null, null); }, transformAwaitAssign_: function(tree) { return this.transformAwait_(tree, tree.right.expression, tree.left, tree.operator); }, transformAwait_: function(tree, inExpression, left, operator) { var $__2; var expression, machine; if (this.expressionNeedsStateMachine(inExpression)) { (($__2 = this.expressionToStateMachine(inExpression), expression = $__2.expression, machine = $__2.machine, $__2)); } else { expression = this.transformAny(inExpression); } var createTaskState = this.allocateState(); var fallThroughState = this.allocateState(); var callbackState = left ? this.allocateState() : fallThroughState; var states = []; states.push(new AwaitState(createTaskState, callbackState, expression)); if (left) { var statement = new ExpressionStatement(tree.location, new BinaryExpression(tree.location, left, operator, parseExpression($traceurRuntime.getTemplateObject(["$ctx.value"])))); states.push(new FallThroughState(callbackState, fallThroughState, [statement])); } var awaitMachine = new StateMachine(createTaskState, fallThroughState, states, []); if (machine) { awaitMachine = machine.append(awaitMachine); } return awaitMachine; }, transformFinally: function(tree) { var result = $traceurRuntime.superGet(this, AsyncTransformer.prototype, "transformFinally").call(this, tree); if (result.block.type !== STATE_MACHINE) { return result; } this.reporter.reportError(tree.location, 'await not permitted within a finally block.'); return result; }, transformReturnStatement: function(tree) { var $__2; var expression, machine; if (this.expressionNeedsStateMachine(tree.expression)) { (($__2 = this.expressionToStateMachine(tree.expression), expression = $__2.expression, machine = $__2.machine, $__2)); } else { expression = tree.expression || createUndefinedExpression(); } var startState = this.allocateState(); var endState = this.allocateState(); var completeState = new FallThroughState(startState, endState, parseStatements($traceurRuntime.getTemplateObject(["$ctx.returnValue = ", ""]), expression)); var end = new EndState(endState); var returnMachine = new StateMachine(startState, this.allocateState(), [completeState, end], []); if (machine) returnMachine = machine.append(returnMachine); return returnMachine; }, createCompleteTask_: function(result) { return parseStatement($traceurRuntime.getTemplateObject(["$ctx.resolve(", ")"]), result); }, transformAsyncBody: function(tree) { var asyncWrap = this.getRuntimeExpression('asyncWrap'); return this.transformCpsFunctionBody(tree, asyncWrap); } }, {transformAsyncBody: function(identifierGenerator, reporter, options, body) { return new AsyncTransformer(identifierGenerator, reporter, options).transformAsyncBody(body); }}, $__super); }(ImportRuntimeTrait(CPSTransformer)); ; return {get AsyncTransformer() { return AsyncTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js"; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")), BLOCK = $__3.BLOCK, VARIABLE_DECLARATION_LIST = $__3.VARIABLE_DECLARATION_LIST, IDENTIFIER_EXPRESSION = $__3.IDENTIFIER_EXPRESSION; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")), LENGTH = $__4.LENGTH, PUSH = $__4.PUSH; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")).TempVarTransformer; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")), BANG = $__6.BANG, IN = $__6.IN, OPEN_ANGLE = $__6.OPEN_ANGLE, PLUS_PLUS = $__6.PLUS_PLUS, VAR = $__6.VAR; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/ForInTransformPass.js")), createArgumentList = $__7.createArgumentList, createAssignmentStatement = $__7.createAssignmentStatement, createBinaryExpression = $__7.createBinaryExpression, createBlock = $__7.createBlock, createCallStatement = $__7.createCallStatement, createContinueStatement = $__7.createContinueStatement, createEmptyArrayLiteral = $__7.createEmptyArrayLiteral, createForInStatement = $__7.createForInStatement, createForStatement = $__7.createForStatement, createIdentifierExpression = $__7.createIdentifierExpression, createIfStatement = $__7.createIfStatement, createMemberExpression = $__7.createMemberExpression, createMemberLookupExpression = $__7.createMemberLookupExpression, createNumberLiteral = $__7.createNumberLiteral, createOperatorToken = $__7.createOperatorToken, createParenExpression = $__7.createParenExpression, createPostfixExpression = $__7.createPostfixExpression, createUnaryExpression = $__7.createUnaryExpression, createVariableDeclarationList = $__7.createVariableDeclarationList, createVariableStatement = $__7.createVariableStatement; var ForInTransformPass = function($__super) { function ForInTransformPass() { $traceurRuntime.superConstructor(ForInTransformPass).apply(this, arguments); } return ($traceurRuntime.createClass)(ForInTransformPass, {transformForInStatement: function(tree) { var $__1, $__2; var bodyStatements = []; var body = this.transformAny(tree.body); if (body.type === BLOCK) { ($__1 = bodyStatements).push.apply($__1, $traceurRuntime.spread(body.statements)); } else { bodyStatements.push(body); } var elements = []; var keys = this.getTempIdentifier(); elements.push(createVariableStatement(VAR, keys, createEmptyArrayLiteral())); var collection = this.getTempIdentifier(); elements.push(createVariableStatement(VAR, collection, tree.collection)); var p = this.getTempIdentifier(); elements.push(createForInStatement(createVariableDeclarationList(VAR, p, null), createIdentifierExpression(collection), createCallStatement(createMemberExpression(keys, PUSH), createArgumentList([createIdentifierExpression(p)])))); var i = this.getTempIdentifier(); var lookup = createMemberLookupExpression(createIdentifierExpression(keys), createIdentifierExpression(i)); var originalKey, assignOriginalKey; if (tree.initializer.type === VARIABLE_DECLARATION_LIST) { var decList = tree.initializer; originalKey = createIdentifierExpression(decList.declarations[0].lvalue); assignOriginalKey = createVariableStatement(decList.declarationType, originalKey.identifierToken, lookup); } else if (tree.initializer.type === IDENTIFIER_EXPRESSION) { originalKey = tree.initializer; assignOriginalKey = createAssignmentStatement(tree.initializer, lookup); } else { throw new Error('Invalid left hand side of for in loop'); } var innerBlock = []; innerBlock.push(assignOriginalKey); innerBlock.push(createIfStatement(createUnaryExpression(createOperatorToken(BANG), createParenExpression(createBinaryExpression(originalKey, createOperatorToken(IN), createIdentifierExpression(collection)))), createContinueStatement(), null)); ($__2 = innerBlock).push.apply($__2, $traceurRuntime.spread(bodyStatements)); elements.push(createForStatement(createVariableDeclarationList(VAR, i, createNumberLiteral(0)), createBinaryExpression(createIdentifierExpression(i), createOperatorToken(OPEN_ANGLE), createMemberExpression(keys, LENGTH)), createPostfixExpression(createIdentifierExpression(i), createOperatorToken(PLUS_PLUS)), createBlock(innerBlock))); return createBlock(elements); }}, {}, $__super); }(TempVarTransformer); return {get ForInTransformPass() { return ForInTransformPass; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/YieldState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/YieldState.js"; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/YieldState.js")).State; var createReturnStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/YieldState.js")).createReturnStatement; var YieldState = function($__super) { function YieldState(id, fallThroughState, expression) { $traceurRuntime.superConstructor(YieldState).call(this, id); this.fallThroughState = fallThroughState; this.expression = expression; } return ($traceurRuntime.createClass)(YieldState, { replaceState: function(oldState, newState) { return new this.constructor(State.replaceStateId(this.id, oldState, newState), State.replaceStateId(this.fallThroughState, oldState, newState), this.expression); }, transform: function(enclosingFinally, machineEndState, reporter) { return $traceurRuntime.spread(State.generateAssignState(enclosingFinally, this.fallThroughState), [createReturnStatement(this.expression)]); } }, {}, $__super); }(State); return {get YieldState() { return YieldState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/ReturnState.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/ReturnState.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../semantics/util.js", "traceur@0.0.112/src/codegeneration/generator/ReturnState.js")), isUndefined = $__2.isUndefined, isVoidExpression = $__2.isVoidExpression; var YieldState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./YieldState.js", "traceur@0.0.112/src/codegeneration/generator/ReturnState.js")).YieldState; var State = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./State.js", "traceur@0.0.112/src/codegeneration/generator/ReturnState.js")).State; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/ReturnState.js")).parseStatement; var ReturnState = function($__super) { function ReturnState() { $traceurRuntime.superConstructor(ReturnState).apply(this, arguments); } return ($traceurRuntime.createClass)(ReturnState, {transform: function(enclosingFinally, machineEndState, reporter) { var $__1; var e = this.expression; var statements = []; if (e && !isUndefined(e) && !isVoidExpression(e)) statements.push(parseStatement($traceurRuntime.getTemplateObject(["$ctx.returnValue = ", ""]), this.expression)); ($__1 = statements).push.apply($__1, $traceurRuntime.spread(State.generateJump(enclosingFinally, machineEndState))); return statements; }}, {}, $__super); }(YieldState); return {get ReturnState() { return ReturnState; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js"; var CPSTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./CPSTransformer.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).CPSTransformer; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")), BINARY_EXPRESSION = $__4.BINARY_EXPRESSION, YIELD_EXPRESSION = $__4.YIELD_EXPRESSION; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")), BinaryExpression = $__5.BinaryExpression, ExpressionStatement = $__5.ExpressionStatement; var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).FindInFunctionScope; var ReturnState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ReturnState.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).ReturnState; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).default; var YieldState = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./YieldState.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")).YieldState; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")), id = $__10.createIdentifierExpression, createMemberExpression = $__10.createMemberExpression, createUndefinedExpression = $__10.createUndefinedExpression; var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/generator/GeneratorTransformer.js")), parseExpression = $__11.parseExpression, parseStatement = $__11.parseStatement, parseStatements = $__11.parseStatements; function isYieldAssign(tree) { return tree.type === BINARY_EXPRESSION && tree.operator.isAssignmentOperator() && tree.right.type === YIELD_EXPRESSION && tree.left.isLeftHandSideExpression(); } var YieldFinder = function($__super) { function YieldFinder() { $traceurRuntime.superConstructor(YieldFinder).apply(this, arguments); } return ($traceurRuntime.createClass)(YieldFinder, {visitYieldExpression: function(tree) { this.found = true; }}, {}, $__super); }(FindInFunctionScope); function scopeContainsYield(tree) { var finder = new YieldFinder(); finder.visitAny(tree); return finder.found; } var GeneratorTransformer = function($__super) { function GeneratorTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(GeneratorTransformer).call(this, identifierGenerator, reporter, options); this.shouldAppendThrowCloseState_ = true; } return ($traceurRuntime.createClass)(GeneratorTransformer, { expressionNeedsStateMachine: function(tree) { if (tree === null) return false; return scopeContainsYield(tree); }, transformYieldExpression_: function(tree) { var $__2; var expression, machine; if (this.expressionNeedsStateMachine(tree.expression)) { (($__2 = this.expressionToStateMachine(tree.expression), expression = $__2.expression, machine = $__2.machine, $__2)); } else { expression = this.transformAny(tree.expression); } if (tree.isYieldFor) return this.transformYieldForExpression_(expression, machine); var startState = this.allocateState(); var fallThroughState = this.allocateState(); var yieldMachine = this.stateToStateMachine_(new YieldState(startState, fallThroughState, expression), fallThroughState); if (machine) yieldMachine = machine.append(yieldMachine); if (this.shouldAppendThrowCloseState_) yieldMachine = yieldMachine.append(this.createThrowCloseState_()); return yieldMachine; }, transformYieldForExpression_: function(expression) { var machine = arguments[1]; var gName = this.getTempIdentifier(); this.addMachineVariable(gName); var g = id(gName); var nextName = this.getTempIdentifier(); this.addMachineVariable(nextName); var next = id(nextName); var statements = parseStatements($traceurRuntime.getTemplateObject(["\n ", " = $ctx.wrapYieldStar(", "[Symbol.iterator]());\n // received = void 0;\n $ctx.sent = void 0;\n // send = true; // roughly equivalent\n $ctx.action = 'next';\n\n for (;;) {\n ", " = ", "[$ctx.action]($ctx.sentIgnoreThrow);\n if (", ".done) {\n $ctx.sent = ", ".value;\n break;\n }\n yield ", ".value;\n }"]), g, expression, next, g, next, next, next); var shouldAppendThrowCloseState = this.shouldAppendThrowCloseState_; this.shouldAppendThrowCloseState_ = false; statements = this.transformList(statements); var yieldMachine = this.transformStatementList_(statements); this.shouldAppendThrowCloseState_ = shouldAppendThrowCloseState; if (machine) yieldMachine = machine.append(yieldMachine); return yieldMachine; }, transformYieldExpression: function(tree) { this.reporter.reportError(tree.location, 'Only \'a = yield b\' and \'var a = yield b\' currently supported.'); return tree; }, transformYieldAssign_: function(tree) { var shouldAppendThrowCloseState = this.shouldAppendThrowCloseState_; this.shouldAppendThrowCloseState_ = false; var machine = this.transformYieldExpression_(tree.right); var left = this.transformAny(tree.left); var sentExpression = tree.right.isYieldFor ? parseExpression($traceurRuntime.getTemplateObject(["$ctx.sentIgnoreThrow"])) : parseExpression($traceurRuntime.getTemplateObject(["$ctx.sent"])); var statement = new ExpressionStatement(tree.location, new BinaryExpression(tree.location, left, tree.operator, sentExpression)); var assignMachine = this.statementToStateMachine_(statement); this.shouldAppendThrowCloseState_ = shouldAppendThrowCloseState; return machine.append(assignMachine); }, createThrowCloseState_: function() { return this.statementToStateMachine_(parseStatement($traceurRuntime.getTemplateObject(["$ctx.maybeThrow()"]))); }, transformExpressionStatement: function(tree) { var expression = tree.expression; if (expression.type === YIELD_EXPRESSION) return this.transformYieldExpression_(expression); if (isYieldAssign(expression)) return this.transformYieldAssign_(expression); if (this.expressionNeedsStateMachine(expression)) { return this.expressionToStateMachine(expression).machine; } return $traceurRuntime.superGet(this, GeneratorTransformer.prototype, "transformExpressionStatement").call(this, tree); }, transformAwaitStatement: function(tree) { this.reporter.reportError(tree.location, 'Generator function may not have an await statement.'); return tree; }, transformReturnStatement: function(tree) { var $__2; var expression, machine; if (this.expressionNeedsStateMachine(tree.expression)) (($__2 = this.expressionToStateMachine(tree.expression), expression = $__2.expression, machine = $__2.machine, $__2)); else expression = tree.expression; var startState = this.allocateState(); var fallThroughState = this.allocateState(); var returnMachine = this.stateToStateMachine_(new ReturnState(startState, fallThroughState, this.transformAny(expression)), fallThroughState); if (machine) return machine.append(returnMachine); return returnMachine; }, transformGeneratorBody: function(tree, name) { var createGeneratorInstance = this.getRuntimeExpression('createGeneratorInstance'); return this.transformCpsFunctionBody(tree, createGeneratorInstance, name); } }, {transformGeneratorBody: function(identifierGenerator, reporter, options, body, name) { return new GeneratorTransformer(identifierGenerator, reporter, options).transformGeneratorBody(body, name); }}, $__super); }(ImportRuntimeTrait(CPSTransformer)); ; return {get GeneratorTransformer() { return GeneratorTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js"; var ArrowFunctionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ArrowFunctionTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).ArrowFunctionTransformer; var AsyncTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generator/AsyncTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).AsyncTransformer; var ForInTransformPass = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generator/ForInTransformPass.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).ForInTransformPass; var GeneratorTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./generator/GeneratorTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).GeneratorTransformer; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")), parseExpression = $__8.parseExpression, parseStatement = $__8.parseStatement; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).TempVarTransformer; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).default; var FindInFunctionScope = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindInFunctionScope.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")).FindInFunctionScope; var $__12 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")), AnonBlock = $__12.AnonBlock, FunctionDeclaration = $__12.FunctionDeclaration, FunctionExpression = $__12.FunctionExpression; var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/GeneratorTransformPass.js")), createBindingIdentifier = $__13.createBindingIdentifier, id = $__13.createIdentifierExpression, createIdentifierToken = $__13.createIdentifierToken; var ForInFinder = function($__super) { function ForInFinder() { $traceurRuntime.superConstructor(ForInFinder).apply(this, arguments); } return ($traceurRuntime.createClass)(ForInFinder, {visitForInStatement: function(tree) { this.found = true; }}, {}, $__super); }(FindInFunctionScope); function needsTransform(tree, transformOptions) { return transformOptions.generators && tree.isGenerator() || transformOptions.asyncFunctions && tree.isAsyncFunction(); } var GeneratorTransformPass = function($__super) { function GeneratorTransformPass(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(GeneratorTransformPass).call(this, identifierGenerator, reporter, options); this.tranformOptions_ = options.transformOptions; this.inBlock_ = false; } return ($traceurRuntime.createClass)(GeneratorTransformPass, { transformFunctionDeclaration: function(tree) { if (!needsTransform(tree, this.tranformOptions_)) return $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformFunctionDeclaration").call(this, tree); if (tree.isGenerator()) return this.transformGeneratorDeclaration_(tree); return this.transformFunction_(tree, FunctionDeclaration, null); }, transformGeneratorDeclaration_: function(tree) { var nameIdExpression = id(tree.name.identifierToken); var initGeneratorFunction = this.getRuntimeExpression('initGeneratorFunction'); var setupPrototypeExpression = parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initGeneratorFunction, nameIdExpression); var tmpVar = id(this.inBlock_ ? this.getTempIdentifier() : this.addTempVar(setupPrototypeExpression)); var funcDecl = this.transformFunction_(tree, FunctionDeclaration, tmpVar); if (!this.inBlock_) return funcDecl; return new AnonBlock(null, [funcDecl, parseStatement($traceurRuntime.getTemplateObject(["var ", " = ", ""]), tmpVar, setupPrototypeExpression)]); }, transformFunctionExpression: function(tree) { if (!needsTransform(tree, this.tranformOptions_)) return $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformFunctionExpression").call(this, tree); if (tree.isGenerator()) return this.transformGeneratorExpression_(tree); return this.transformFunction_(tree, FunctionExpression, null); }, transformGeneratorExpression_: function(tree) { var name; if (!tree.name) { name = createIdentifierToken(this.getTempIdentifier()); tree = new FunctionExpression(tree.location, createBindingIdentifier(name), tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, tree.body); } else { name = tree.name.identifierToken; } var functionExpression = this.transformFunction_(tree, FunctionExpression, id(name)); var initGeneratorFunction = this.getRuntimeExpression('initGeneratorFunction'); return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initGeneratorFunction, functionExpression); }, transformFunction_: function(tree, constructor, nameExpression) { var $__2 = this; var body = $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformAny").call(this, tree.body); var finder = new ForInFinder(); finder.visitAny(body); if (finder.found) { body = new ForInTransformPass(this.identifierGenerator, this.reporter, this.options).transformAny(body); } if (this.tranformOptions_.generators && tree.isGenerator()) { var transformer = new GeneratorTransformer(this.identifierGenerator, this.reporter, this.options); body = transformer.transformGeneratorBody(body, nameExpression); transformer.requiredNames.forEach(function(n) { $__2.addImportedName(n); }); } else if (this.tranformOptions_.asyncFunctions && tree.isAsyncFunction()) { var transformer$__3 = new AsyncTransformer(this.identifierGenerator, this.reporter, this.options); body = transformer$__3.transformAsyncBody(body, nameExpression); transformer$__3.requiredNames.forEach(function(n) { $__2.addImportedName(n); }); } var functionKind = null; return new constructor(tree.location, tree.name, functionKind, tree.parameterList, tree.typeAnnotation || null, tree.annotations || null, body); }, transformArrowFunction: function(tree) { if (!tree.isAsyncFunction()) return $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformArrowFunction").call(this, tree); return this.transformAny(ArrowFunctionTransformer.transform(this, tree)); }, transformBlock: function(tree) { var inBlock = this.inBlock_; this.inBlock_ = true; var rv = $traceurRuntime.superGet(this, GeneratorTransformPass.prototype, "transformBlock").call(this, tree); this.inBlock_ = inBlock; return rv; } }, {}, $__super); }(ImportRuntimeTrait(TempVarTransformer)); return {get GeneratorTransformPass() { return GeneratorTransformPass; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js"; var VAR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js")).VAR; var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js")).ModuleTransformer; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/InlineModuleTransformer.js")), createBindingIdentifier = $__3.createBindingIdentifier, createEmptyStatement = $__3.createEmptyStatement, createFunctionBody = $__3.createFunctionBody, createImmediatelyInvokedFunctionExpression = $__3.createImmediatelyInvokedFunctionExpression, createVariableStatement = $__3.createVariableStatement; var anonInlineModules = 0; var InlineModuleTransformer = function($__super) { function InlineModuleTransformer() { $traceurRuntime.superConstructor(InlineModuleTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(InlineModuleTransformer, { wrapModule: function(statements) { var seed = this.moduleName || 'anon_' + ++anonInlineModules; var idName = this.getTempVarNameForModuleName(seed); var body = createFunctionBody(statements); var moduleExpression = createImmediatelyInvokedFunctionExpression(body); return [createVariableStatement(VAR, idName, moduleExpression)]; }, transformNamedExport: function(tree) { return createEmptyStatement(); }, transformModuleSpecifier: function(tree) { return createBindingIdentifier(this.getTempVarNameForModuleSpecifier(tree)); } }, {}, $__super); }(ModuleTransformer); return {get InlineModuleTransformer() { return InlineModuleTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js"; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")), AnonBlock = $__10.AnonBlock, ArrayLiteral = $__10.ArrayLiteral, ClassExpression = $__10.ClassExpression, CommaExpression = $__10.CommaExpression, ExpressionStatement = $__10.ExpressionStatement, VariableDeclaration = $__10.VariableDeclaration; var $__11 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")), ANON_BLOCK = $__11.ANON_BLOCK, CLASS_DECLARATION = $__11.CLASS_DECLARATION, FUNCTION_DECLARATION = $__11.FUNCTION_DECLARATION, IDENTIFIER_EXPRESSION = $__11.IDENTIFIER_EXPRESSION, IMPORT_SPECIFIER_SET = $__11.IMPORT_SPECIFIER_SET, NAME_SPACE_IMPORT = $__11.NAME_SPACE_IMPORT; var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")).ParseTreeVisitor; var ScopeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeTransformer.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")).ScopeTransformer; var $__14 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")), createEmptyParameterList = $__14.createEmptyParameterList, createFunctionBody = $__14.createFunctionBody, createFunctionExpression = $__14.createFunctionExpression, id = $__14.createIdentifierExpression, createObjectLiteralForDescriptor = $__14.createObjectLiteralForDescriptor, createUseStrictDirective = $__14.createUseStrictDirective, createVariableDeclarationList = $__14.createVariableDeclarationList, createVariableStatement = $__14.createVariableStatement; var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")).ModuleTransformer; var $__16 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")), MINUS_MINUS = $__16.MINUS_MINUS, PLUS_PLUS = $__16.PLUS_PLUS, VAR = $__16.VAR; var $__17 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")), parseExpression = $__17.parseExpression, parseStatement = $__17.parseStatement, parseStatements = $__17.parseStatements; var HoistVariablesTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./HoistVariablesTransformer.js", "traceur@0.0.112/src/codegeneration/InstantiateModuleTransformer.js")).default; function flattenAnonBlocks(statements) { var $__9; var result = []; for (var i = 0; i < statements.length; i++) { var statement = statements[i]; if (statement.type === ANON_BLOCK) { ($__9 = result).push.apply($__9, $traceurRuntime.spread(statement.statements)); } else { result.push(statement); } } return result; } var ExportBindingsVisitor = function($__super) { function ExportBindingsVisitor() { $traceurRuntime.superConstructor(ExportBindingsVisitor).call(this); this.bindings = []; } return ($traceurRuntime.createClass)(ExportBindingsVisitor, { visitVariableDeclaration: function(tree) { this.visitAny(tree.lvalue); }, visitBindingIdentifier: function(tree) { this.bindings.push(tree); }, visitBindingElement: function(tree) { this.visitAny(tree.binding); } }, {}, $__super); }(ParseTreeVisitor); var DeclarationExtractionTransformer = function($__super) { function DeclarationExtractionTransformer() { $traceurRuntime.superConstructor(DeclarationExtractionTransformer).call(this); this.declarations_ = []; } return ($traceurRuntime.createClass)(DeclarationExtractionTransformer, { getDeclarationStatements: function() { return flattenAnonBlocks($traceurRuntime.spread([this.getVariableStatement()], this.declarations_)); }, addDeclaration: function(tree) { this.declarations_.push(tree); }, transformFunctionDeclaration: function(tree) { this.addDeclaration(tree); return new AnonBlock(null, []); }, transformClassDeclaration: function(tree) { this.addVariable(tree.name.identifierToken.value); tree = new ClassExpression(tree.location, tree.name, tree.superClass, tree.elements, tree.annotations, tree.typeParameters); return parseStatement($traceurRuntime.getTemplateObject(["", " = ", ""]), tree.name.identifierToken, tree); } }, {}, $__super); }(HoistVariablesTransformer); var ModuleNameIdentifierTransformer = function($__super) { function ModuleNameIdentifierTransformer() { $traceurRuntime.superConstructor(ModuleNameIdentifierTransformer).call(this, '__moduleName'); this.usesModuleName = false; } return ($traceurRuntime.createClass)(ModuleNameIdentifierTransformer, {transformIdentifierExpression: function(tree) { if (tree.identifierToken.value === '__moduleName') { this.usesModuleName = true; return parseExpression($traceurRuntime.getTemplateObject(["$__moduleContext.id"])); } return $traceurRuntime.superGet(this, ModuleNameIdentifierTransformer.prototype, "transformIdentifierExpression").call(this, tree); }}, {}, $__super); }(ScopeTransformer); var InsertBindingAssignmentTransformer = function($__super) { function InsertBindingAssignmentTransformer(exportName, bindingName) { $traceurRuntime.superConstructor(InsertBindingAssignmentTransformer).call(this, bindingName); this.bindingName_ = bindingName; this.exportName_ = exportName; } return ($traceurRuntime.createClass)(InsertBindingAssignmentTransformer, { matchesBindingName_: function(binding) { return binding.type === IDENTIFIER_EXPRESSION && binding.identifierToken.value === this.bindingName_; }, transformUnaryExpression: function(tree) { if (!this.matchesBindingName_(tree.operand)) return $traceurRuntime.superGet(this, InsertBindingAssignmentTransformer.prototype, "transformUnaryExpression").call(this, tree); var operatorType = tree.operator.type; if (operatorType !== PLUS_PLUS && operatorType !== MINUS_MINUS) return $traceurRuntime.superGet(this, InsertBindingAssignmentTransformer.prototype, "transformUnaryExpression").call(this, tree); var operand = this.transformAny(tree.operand); if (operand !== tree.operand) tree = new UnaryExpression(tree.location, tree.operator, operand); return parseExpression($traceurRuntime.getTemplateObject(["$__export(", ", ", ")"]), this.exportName_, tree); }, transformPostfixExpression: function(tree) { tree = $traceurRuntime.superGet(this, InsertBindingAssignmentTransformer.prototype, "transformPostfixExpression").call(this, tree); if (!this.matchesBindingName_(tree.operand)) return tree; switch (tree.operator.type) { case PLUS_PLUS: return parseExpression($traceurRuntime.getTemplateObject(["($__export(", ", ", " + 1), ", ")"]), this.exportName_, tree.operand, tree); case MINUS_MINUS: return parseExpression($traceurRuntime.getTemplateObject(["($__export(", ", ", " - 1), ", ")"]), this.exportName_, tree.operand, tree); } return tree; }, transformBinaryExpression: function(tree) { tree = $traceurRuntime.superGet(this, InsertBindingAssignmentTransformer.prototype, "transformBinaryExpression").call(this, tree); if (!tree.operator.isAssignmentOperator()) return tree; if (!this.matchesBindingName_(tree.left)) return tree; return parseExpression($traceurRuntime.getTemplateObject(["$__export(", ", ", ")}"]), this.exportName_, tree); } }, {}, $__super); }(ScopeTransformer); var InstantiateModuleTransformer = function($__super) { function InstantiateModuleTransformer(identifierGenerator, reporter) { var options = arguments[2]; $traceurRuntime.superConstructor(InstantiateModuleTransformer).call(this, identifierGenerator, reporter, options); this.anonymousModule = options && !options.bundle && options.moduleName !== true; this.usesModuleName = false; this.inExport_ = false; this.curDepIndex_ = null; this.dependencies = []; this.externalExportBindings = []; this.importBindings = []; this.localExportBindings = []; this.functionDeclarations = []; this.moduleBindings = []; this.exportStarBindings = []; } return ($traceurRuntime.createClass)(InstantiateModuleTransformer, { getModuleName: function(tree) { if (this.anonymousModule) return null; return tree.moduleName; }, moduleProlog: function() { return []; }, wrapModule: function(statements) { var prolog = [createUseStrictDirective()]; statements = prolog.concat(statements); if (this.usesModuleName) { if (this.moduleName) { return parseStatements($traceurRuntime.getTemplateObject(["System.register(", ",\n ", ", function($__export, $__moduleContext) {\n ", "\n });"]), this.moduleName, this.dependencies, statements); } return parseStatements($traceurRuntime.getTemplateObject(["System.register(", ", function($__export, $__moduleContext) {\n ", "\n });"]), this.dependencies, statements); } if (this.moduleName) { return parseStatements($traceurRuntime.getTemplateObject(["System.register(", ",\n ", ", function($__export) {\n ", "\n });"]), this.moduleName, this.dependencies, statements); } return parseStatements($traceurRuntime.getTemplateObject(["System.register(", ", function($__export) {\n ", "\n });"]), this.dependencies, statements); }, addExportStatement: function(statements) { var $__6 = this; var declarationExtractionTransformer = new DeclarationExtractionTransformer(); var moduleNameIdentifierTransformer = new ModuleNameIdentifierTransformer(); statements = moduleNameIdentifierTransformer.transformList(statements); if (moduleNameIdentifierTransformer.usesModuleName) this.usesModuleName = true; this.localExportBindings.forEach(function(binding) { statements = new InsertBindingAssignmentTransformer(binding.exportName, binding.localName).transformList(statements); }); var executionStatements = declarationExtractionTransformer.transformList(statements); var executionFunction = createFunctionExpression(createEmptyParameterList(), createFunctionBody(executionStatements)); var declarationStatements = declarationExtractionTransformer.getDeclarationStatements(); var setterFunctions = this.dependencies.map(function(dep, index) { var importBindings = $__6.importBindings[index]; var externalExportBindings = $__6.externalExportBindings[index]; var exportStarBinding = $__6.exportStarBindings[index]; var moduleBinding = $__6.moduleBindings[index]; var setterStatements = []; if (importBindings) { importBindings.forEach(function(binding) { setterStatements.push(parseStatement($traceurRuntime.getTemplateObject(["", " = $__m.", ";"]), id(binding.variableName), binding.exportName)); }); } if (externalExportBindings) { var reexports = Object.create(null); externalExportBindings.forEach(function($__7) { var $__8 = $__7, exportName = $__8.exportName, importName = $__8.importName; reexports[exportName] = importName === null ? parseExpression($traceurRuntime.getTemplateObject(["$__m"])) : parseExpression($traceurRuntime.getTemplateObject(["$__m.", ""]), importName); }); setterStatements.push(parseStatement($traceurRuntime.getTemplateObject(["$__export(", ")"]), createObjectLiteralForDescriptor(reexports))); } if (moduleBinding) { setterStatements.push(parseStatement($traceurRuntime.getTemplateObject(["", " = $__m;"]), id(moduleBinding))); } if (exportStarBinding) { setterStatements = setterStatements.concat(parseStatements($traceurRuntime.getTemplateObject(["\n var exportObj = Object.create(null);\n Object.keys($__m).forEach(function(p) {\n if (p !== 'default' && !$__exportNames[p])\n exportObj[p] = $__m[p];\n });\n $__export(exportObj);\n "]))); var exportNames = {}; $__6.localExportBindings.concat($__6.externalExportBindings).forEach(function(binding) { exportNames[binding.exportName] = true; }); declarationStatements.push(parseStatement($traceurRuntime.getTemplateObject(["\n var $__exportNames = ", ";\n "]), createObjectLiteralForDescriptor(exportNames))); } if (setterStatements.length) { return parseExpression($traceurRuntime.getTemplateObject(["function($__m) {\n ", "\n }"]), setterStatements); } return parseExpression($traceurRuntime.getTemplateObject(["function($__m) {}"])); }); declarationStatements = declarationStatements.concat(this.functionDeclarations.map(function(binding) { return parseStatement($traceurRuntime.getTemplateObject(["$__export(", ", ", ")"]), binding.exportName, id(binding.functionName)); })); declarationStatements.push(parseStatement($traceurRuntime.getTemplateObject(["return {\n setters: ", ",\n execute: ", "\n }"]), new ArrayLiteral(null, setterFunctions), executionFunction)); return declarationStatements; }, addLocalExportBinding: function(exportName) { var localName = arguments[1] !== (void 0) ? arguments[1] : exportName; this.localExportBindings.push({ exportName: exportName, localName: localName }); }, addImportBinding: function(depIndex, variableName, exportName) { this.importBindings[depIndex] = this.importBindings[depIndex] || []; this.importBindings[depIndex].push({ variableName: variableName, exportName: exportName }); }, addExternalExportBinding: function(depIndex, exportName, importName) { this.externalExportBindings[depIndex] = this.externalExportBindings[depIndex] || []; this.externalExportBindings[depIndex].push({ exportName: exportName, importName: importName }); }, addExportStarBinding: function(depIndex) { this.exportStarBindings[depIndex] = true; }, addModuleBinding: function(depIndex, variableName) { this.moduleBindings[depIndex] = variableName; }, addExportFunction: function(exportName) { var functionName = arguments[1] !== (void 0) ? arguments[1] : exportName; this.functionDeclarations.push({ exportName: exportName, functionName: functionName }); }, getOrCreateDependencyIndex: function(moduleSpecifier) { var name = moduleSpecifier.token.processedValue; var depIndex = this.dependencies.indexOf(name); if (depIndex === -1) { depIndex = this.dependencies.length; this.dependencies.push(name); } return depIndex; }, transformExportDeclaration: function(tree) { this.inExport_ = true; if (tree.declaration.moduleSpecifier) { this.curDepIndex_ = this.getOrCreateDependencyIndex(tree.declaration.moduleSpecifier); } else { this.curDepIndex_ = null; } var transformed = this.transformAny(tree.declaration); this.inExport_ = false; return transformed; }, transformVariableStatement: function(tree) { if (!this.inExport_) return $traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformVariableStatement").call(this, tree); this.inExport_ = false; var bindingVisitor = new ExportBindingsVisitor(); bindingVisitor.visitAny(tree); var statements = []; for (var i = 0; i < bindingVisitor.bindings.length; i++) { var identifierToken = bindingVisitor.bindings[i].identifierToken; var name = identifierToken.value; this.addLocalExportBinding(name); statements.push(parseStatement($traceurRuntime.getTemplateObject(["$__export(", ", ", ")"]), name, id(identifierToken))); } statements.unshift($traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformAny").call(this, tree)); return new AnonBlock(null, statements); }, transformExportStar: function(tree) { this.inExport_ = false; this.addExportStarBinding(this.curDepIndex_); return new AnonBlock(null, []); }, transformClassDeclaration: function(tree) { if (!this.inExport_) return $traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformClassDeclaration").call(this, tree); this.inExport_ = false; var identifierToken = tree.name.identifierToken; var name = identifierToken.value; this.addLocalExportBinding(name); var statements = [$traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformClassDeclaration").call(this, tree), parseStatement($traceurRuntime.getTemplateObject(["$__export(", ", ", ")"]), name, id(identifierToken))]; return new AnonBlock(null, statements); }, transformFunctionDeclaration: function(tree) { if (this.inExport_) { var name = tree.name.getStringValue(); this.addLocalExportBinding(name); this.addExportFunction(name); this.inExport_ = false; } return $traceurRuntime.superGet(this, InstantiateModuleTransformer.prototype, "transformFunctionDeclaration").call(this, tree); }, transformNamedExport: function(tree) { this.transformAny(tree.moduleSpecifier); var exportClause = this.transformAny(tree.exportClause); if (this.curDepIndex_ === null) { return exportClause; } return new AnonBlock(null, []); }, transformImportDeclaration: function(tree) { this.curDepIndex_ = this.getOrCreateDependencyIndex(tree.moduleSpecifier); var initializer = this.transformAny(tree.moduleSpecifier); if (!tree.importClause) { return new AnonBlock(null, []); } var importClause = this.transformAny(tree.importClause); if (tree.importClause.type === NAME_SPACE_IMPORT) { var bindingIdentifier = tree.importClause.binding.binding; var name = bindingIdentifier.getStringValue(); this.addModuleBinding(this.curDepIndex_, name); return parseStatement($traceurRuntime.getTemplateObject(["var ", ";"]), bindingIdentifier); } if (tree.importClause.type === IMPORT_SPECIFIER_SET) { return importClause; } var bindingName = tree.importClause.binding.getStringValue(); this.addImportBinding(this.curDepIndex_, bindingName, 'default'); return parseStatement($traceurRuntime.getTemplateObject(["var ", ";"]), bindingName); }, transformImportSpecifierSet: function(tree) { return createVariableStatement(createVariableDeclarationList(VAR, this.transformList(tree.specifiers))); }, transformExportDefault: function(tree) { this.inExport_ = false; var expression = this.transformAny(tree.expression); this.addLocalExportBinding('default'); if (expression.type === CLASS_DECLARATION) { expression = new ClassExpression(expression.location, expression.name, expression.superClass, expression.elements, expression.annotations, expression.typeParameters); } if (expression.type === FUNCTION_DECLARATION) { this.addExportFunction('default', expression.name.identifierToken.value); return expression; } else { return parseStatement($traceurRuntime.getTemplateObject(["$__export('default', ", ");"]), expression); } }, transformExportSpecifier: function(tree) { var exportName; var bindingName; if (tree.rhs) { exportName = tree.rhs.value; bindingName = tree.lhs.value; } else { exportName = tree.lhs.value; bindingName = exportName; } if (this.curDepIndex_ !== null) { this.addExternalExportBinding(this.curDepIndex_, exportName, bindingName); } else { this.addLocalExportBinding(exportName, bindingName); return parseExpression($traceurRuntime.getTemplateObject(["$__export(", ", ", ");"]), exportName, id(bindingName)); } }, transformExportSpecifierSet: function(tree) { var specifiers = this.transformList(tree.specifiers); return new ExpressionStatement(tree.location, new CommaExpression(tree.location, specifiers.filter(function(specifier) { return specifier; }))); }, transformNameSpaceExport: function(tree) { this.addExternalExportBinding(this.curDepIndex_, tree.name.value, null); return tree; }, transformForwardDefaultExport: function(tree) { this.addExternalExportBinding(this.curDepIndex_, tree.name.value, 'default'); return tree; }, transformImportSpecifier: function(tree) { var localBinding = tree.binding.binding; var localBindingToken = localBinding.identifierToken; var importName = (tree.name || localBindingToken).value; this.addImportBinding(this.curDepIndex_, localBindingToken.value, importName); return new VariableDeclaration(tree.location, localBinding, null, null); }, transformModuleSpecifier: function(tree) { this.curDepIndex_ = this.getOrCreateDependencyIndex(tree); return tree; } }, {}, $__super); }(ModuleTransformer); return {get InstantiateModuleTransformer() { return InstantiateModuleTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js"; var SPREAD_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")).SPREAD_EXPRESSION; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")), createObjectLiteral = $__2.createObjectLiteral, createArgumentList = $__2.createArgumentList; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")).parseExpression; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")).default; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/SpreadPropertiesTransformer.js")).ParseTreeTransformer; function hasSpread(trees) { return trees.some(function(tree) { return tree && tree.type === SPREAD_EXPRESSION; }); } var SpreadPropertiesTransformer = function($__super) { function SpreadPropertiesTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(SpreadPropertiesTransformer).call(this, identifierGenerator, reporter, options); this.options = options; } return ($traceurRuntime.createClass)(SpreadPropertiesTransformer, {transformObjectLiteral: function(tree) { if (!hasSpread(tree.propertyNameAndValues)) { return $traceurRuntime.superGet(this, SpreadPropertiesTransformer.prototype, "transformObjectLiteral").call(this, tree); } var properties = this.transformList(tree.propertyNameAndValues); return spreadProperties(properties, this); }}, {}, $__super); }(ImportRuntimeTrait(ParseTreeTransformer)); function spreadProperties(properties, self) { var args = []; var accummulatedProps = null; for (var i = 0; i < properties.length; i++) { var property = properties[i]; if (property.type === SPREAD_EXPRESSION) { if (accummulatedProps) { args.push(createObjectLiteral(accummulatedProps)); accummulatedProps = null; } args.push(property.expression); } else { if (!accummulatedProps) { accummulatedProps = []; } accummulatedProps.push(property); } } if (accummulatedProps) { args.push(createObjectLiteral(accummulatedProps)); } var runtime = self.getRuntimeExpression('spreadProperties'); return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), runtime, createArgumentList(args)); } return { get SpreadPropertiesTransformer() { return SpreadPropertiesTransformer; }, get spreadProperties() { return spreadProperties; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/JsxTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/JsxTransformer.js"; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")), JSX_ELEMENT = $__4.JSX_ELEMENT, JSX_PLACEHOLDER = $__4.JSX_PLACEHOLDER, JSX_SPREAD_ATTRIBUTE = $__4.JSX_SPREAD_ATTRIBUTE, JSX_TEXT = $__4.JSX_TEXT, LITERAL_EXPRESSION = $__4.LITERAL_EXPRESSION; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")), JsxText = $__5.JsxText, LiteralExpression = $__5.LiteralExpression, LiteralPropertyName = $__5.LiteralPropertyName, SpreadExpression = $__5.SpreadExpression; var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).LiteralToken; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).ParseTreeTransformer; var STRING = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).STRING; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")), createArgumentList = $__9.createArgumentList, createIdentifierExpression = $__9.createIdentifierExpression, createIdentifierToken = $__9.createIdentifierToken, createMemberExpression = $__9.createMemberExpression, createNullLiteral = $__9.createNullLiteral, createObjectLiteral = $__9.createObjectLiteral, createPropertyNameAssignment = $__9.createPropertyNameAssignment, createStringLiteral = $__9.createStringLiteral, createStringLiteralToken = $__9.createStringLiteralToken, createTrueLiteral = $__9.createTrueLiteral; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).parseExpression; var spreadProperties = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SpreadPropertiesTransformer.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).spreadProperties; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/JsxTransformer.js")).default; var JsxTransformer = function($__super) { function JsxTransformer(idGen, reporter, options) { $traceurRuntime.superConstructor(JsxTransformer).call(this); this.options = options; this.jsxFunction_ = null; } return ($traceurRuntime.createClass)(JsxTransformer, { getJsxFunction_: function() { if (!this.jsxFunction_) { var jsx = this.options.jsx; if (typeof jsx === 'string') { this.jsxFunction_ = parseExpression([jsx]); } else { this.jsxFunction_ = parseExpression($traceurRuntime.getTemplateObject(["React.createElement"])); } } return this.jsxFunction_; }, transformJsxElement: function(tree) { var name = this.transformAny(tree.name); var props = this.transformJsxAttributes_(tree); var children = this.transformJsxChildren_(tree.children); var args = createArgumentList($traceurRuntime.spread([name, props], children)); return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), this.getJsxFunction_(), args); }, transformJsxAttributes_: function(tree) { var attrs = this.transformList(tree.attributes); if (attrs.length === 0) { return createNullLiteral(); } if (tree.attributes.some(function(a) { return a.type === JSX_SPREAD_ATTRIBUTE; })) { return spreadProperties(attrs, this); } return createObjectLiteral(attrs); }, transformJsxElementName: function(tree) { if (tree.names.length === 1) { var value = tree.names[0].value; if (value[0] === value[0].toUpperCase()) { return createIdentifierExpression(value); ; } return createStringLiteral(value); } var names = tree.names.map(jsxIdentifierToToken); var operand = names[0]; if (operand.type === STRING) { names[0] = new LiteralExpression(operand.location, operand); } return createMemberExpression.apply((void 0), $traceurRuntime.spread(names)); }, transformJsxAttribute: function(tree) { var name = new LiteralPropertyName(tree.name.location, jsxIdentifierToToken(tree.name)); var value; if (tree.value === null) { value = createTrueLiteral(); } else if (tree.value.type === LITERAL_EXPRESSION) { var literalToken = tree.value.literalToken; var v = literalToken.value; var location = literalToken.location; var lit = new LiteralToken(STRING, normalizeAttributeValue(v), location); value = new LiteralExpression(location, lit); } else { value = this.transformAny(tree.value); } return createPropertyNameAssignment(name, value); }, transformJsxPlaceholder: function(tree) { return this.transformAny(tree.expression); }, transformJsxSpreadAttribute: function(tree) { return new SpreadExpression(tree.location, this.transformAny(tree.expression)); }, transformJsxText: function(tree) { return createStringLiteral(tree.value.value); }, transformJsxChildren_: function(trees) { var $__1 = this; var rv = []; trees.forEach(function(tree) { var newTree; switch (tree.type) { case JSX_ELEMENT: newTree = $__1.transformAny(tree); break; case JSX_PLACEHOLDER: if (tree.expression === null) { return; } newTree = $__1.transformAny(tree); break; case JSX_TEXT: { var s = tree.value.value; s = s.replace(/\t/g, ' '); if (!/[\n\r]/.test(s)) { newTree = createStringLiteral(s); } else { s = s.replace(/^[ \t]*[\n\r]\s*/, ''); s = s.replace(/[ \t]*[\n\r]\s*$/, ''); if (s === '') { return; } newTree = createStringLiteral(s); } break; } } rv.push(newTree); }); return rv; } }, {}, $__super); }(ImportRuntimeTrait(ParseTreeTransformer)); function jsxIdentifierToToken(token) { var value = token.value; if (value.indexOf('-') !== -1) { return createStringLiteralToken(value); } return createIdentifierToken(value); } function normalizeAttributeValue(s) { return JSON.stringify(s.slice(1, -1).replace(/\n\s+/g, ' ')); } return {get JsxTransformer() { return JsxTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js"; var Method = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")).Method; var SUPER_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")).SUPER_EXPRESSION; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")).ParseTreeTransformer; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")), createCommaExpression = $__4.createCommaExpression, createExpressionStatement = $__4.createExpressionStatement, createFunctionBody = $__4.createFunctionBody, createParenExpression = $__4.createParenExpression, createThisExpression = $__4.createThisExpression; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/MemberVariableConstructorTransformer.js")).prependStatements; function transformConstructor(constructor, initExpression, superClass) { if (superClass) { var transformer = new SuperCallTransformer(initExpression); return transformer.transformAny(constructor); } var statements = constructor.body.statements; var initStatement = createExpressionStatement(initExpression); statements = prependStatements(statements, initStatement); return new Method(constructor.location, false, constructor.functionKind, constructor.name, constructor.parameterList, constructor.typeAnnotation, constructor.annotations, createFunctionBody(statements), constructor.debugName); } var SuperCallTransformer = function($__super) { function SuperCallTransformer(expression) { $traceurRuntime.superConstructor(SuperCallTransformer).call(this); this.expression = expression; } return ($traceurRuntime.createClass)(SuperCallTransformer, { transformCallExpression: function(tree) { if (tree.operand.type === SUPER_EXPRESSION) { var thisExpression = createThisExpression(); return createParenExpression(createCommaExpression([tree, this.expression, thisExpression])); } return $traceurRuntime.superGet(this, SuperCallTransformer.prototype, "transformCallExpression").call(this, tree); }, transformClassDeclaration: function(tree) { return tree; }, transformClassExpression: function(tree) { return tree; } }, {}, $__super); }(ParseTreeTransformer); return {get transformConstructor() { return transformConstructor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js"; var CONSTRUCTOR = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).CONSTRUCTOR; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")), AnonBlock = $__5.AnonBlock, ClassDeclaration = $__5.ClassDeclaration, ClassExpression = $__5.ClassExpression, FormalParameterList = $__5.FormalParameterList, IdentifierExpression = $__5.IdentifierExpression, Method = $__5.Method, ReturnStatement = $__5.ReturnStatement; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")), GET_ACCESSOR = $__6.GET_ACCESSOR, METHOD = $__6.METHOD, PROPERTY_VARIABLE_DECLARATION = $__6.PROPERTY_VARIABLE_DECLARATION, SET_ACCESSOR = $__6.SET_ACCESSOR; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).TempVarTransformer; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")), createCommaExpression = $__8.createCommaExpression, createFunctionBody = $__8.createFunctionBody, createIdentifierToken = $__8.createIdentifierToken, createImmediatelyInvokedFunctionExpression = $__8.createImmediatelyInvokedFunctionExpression, createLiteralPropertyName = $__8.createLiteralPropertyName, createRestParameter = $__8.createRestParameter; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")), parsePropertyDefinition = $__9.parsePropertyDefinition, parseStatement = $__9.parseStatement; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).parseExpression; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).prependStatements; var propName = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/PropName.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).propName; var transformConstructor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MemberVariableConstructorTransformer.js", "traceur@0.0.112/src/codegeneration/MemberVariableTransformer.js")).transformConstructor; var MemberVariableTransformer = function($__super) { function MemberVariableTransformer() { $traceurRuntime.superConstructor(MemberVariableTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(MemberVariableTransformer, { transformClassElements_: function(tree) { var $__2 = this; var elements = []; var initInstanceVars = [], initStaticVars = []; var constructor; var constructorIndex = 0; tree.elements.forEach(function(tree) { var initVars; if (tree.isStatic) { initVars = initStaticVars; } else { initVars = initInstanceVars; } switch (tree.type) { case GET_ACCESSOR: case SET_ACCESSOR: elements.push($__2.transformAny(tree)); break; case METHOD: if (!tree.isStatic && propName(tree) === CONSTRUCTOR) { constructor = tree; constructorIndex = elements.length; } else { elements.push($__2.transformAny(tree)); } break; case PROPERTY_VARIABLE_DECLARATION: tree = $__2.transformAny(tree); if (tree.initializer !== null) { initVars.push(tree); } break; default: throw new Error(("Unexpected class element: " + tree.type)); } }); if (initInstanceVars.length > 0) { var initExpression = getInstanceInitExpression(initInstanceVars); if (!constructor) { constructor = this.getDefaultConstructor_(tree); } constructor = transformConstructor(constructor, initExpression, tree.superClass); } if (constructor) { elements.splice(constructorIndex, 0, constructor); } return { elements: elements, initStaticVars: initStaticVars }; }, transformClassDeclaration: function(tree) { var $__3 = this.transformClassElements_(tree), elements = $__3.elements, initStaticVars = $__3.initStaticVars; var superClass = this.transformAny(tree.superClass); var classDecl = new ClassDeclaration(tree.location, tree.name, superClass, elements, tree.annotations, tree.typeParameters); if (initStaticVars.length === 0) { return classDecl; } var statements = createStaticInitializerStatements(tree.name.identifierToken, initStaticVars); statements = prependStatements(statements, classDecl); return new AnonBlock(null, statements); }, transformClassExpression: function(tree) { var $__3 = this.transformClassElements_(tree), elements = $__3.elements, initStaticVars = $__3.initStaticVars; var superClass = this.transformAny(tree.superClass); var classExpression = new ClassExpression(tree.location, tree.name, superClass, elements, tree.annotations, tree.typeParameters); if (initStaticVars.length === 0) { return classExpression; } this.pushTempScope(); var id = this.getTempIdentifier(); var idToken = createIdentifierToken(id); var idExpression = new IdentifierExpression(idToken.location, idToken); var statements = $traceurRuntime.spread([parseStatement($traceurRuntime.getTemplateObject(["let ", " = ", ""]), id, classExpression)], createStaticInitializerStatements(idToken, initStaticVars), [new ReturnStatement(null, idExpression)]); var body = createFunctionBody(statements); this.popTempScope(); return createImmediatelyInvokedFunctionExpression(body); }, getDefaultConstructor_: function(tree) { if (tree.superClass) { var param = createRestParameter(createIdentifierToken('args')); var paramList = new FormalParameterList(null, [param]); var body = createFunctionBody([parseStatement($traceurRuntime.getTemplateObject(["super(...args)"]))]); var name = createLiteralPropertyName(CONSTRUCTOR); return new Method(tree.location, false, null, name, paramList, null, [], body, null); } return parsePropertyDefinition($traceurRuntime.getTemplateObject(["constructor() {}"])); } }, {}, $__super); }(TempVarTransformer); function createStaticInitializerStatements(idToken, initStaticMemberVars) { var className = new IdentifierExpression(idToken.location, idToken); return initStaticMemberVars.map(function(mv) { var propName = mv.name.literalToken.value; return parseStatement($traceurRuntime.getTemplateObject(["Object.defineProperty(", ", ", ", {enumerable: true,\n configurable: true, value: ", ", writable: true})"]), className, propName, mv.initializer); }); } function getInstanceInitExpression(initInstanceVars) { var expressions = initInstanceVars.map(function(mv) { var name = mv.name.literalToken; return parseExpression($traceurRuntime.getTemplateObject(["this.", " = ", ""]), name, mv.initializer); }); return createCommaExpression(expressions); } return {get MemberVariableTransformer() { return MemberVariableTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js"; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")), BLOCK = $__4.BLOCK, CLASS_DECLARATION = $__4.CLASS_DECLARATION, FUNCTION_DECLARATION = $__4.FUNCTION_DECLARATION, IF_STATEMENT = $__4.IF_STATEMENT, LITERAL_EXPRESSION = $__4.LITERAL_EXPRESSION, POSTFIX_EXPRESSION = $__4.POSTFIX_EXPRESSION, UNARY_EXPRESSION = $__4.UNARY_EXPRESSION; var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")).ParseTreeVisitor; var $__6 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")), AS = $__6.AS, ASYNC = $__6.ASYNC, AWAIT = $__6.AWAIT, FROM = $__6.FROM, GET = $__6.GET, OF = $__6.OF, ON = $__6.ON, SET = $__6.SET, TYPE = $__6.TYPE; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Scanner.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")), isIdentifierPart = $__7.isIdentifierPart, isWhitespace = $__7.isWhitespace; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/outputgeneration/ParseTreeWriter.js")), ARROW = $__8.ARROW, AT = $__8.AT, BACK_QUOTE = $__8.BACK_QUOTE, BAR = $__8.BAR, BREAK = $__8.BREAK, CASE = $__8.CASE, CATCH = $__8.CATCH, CLASS = $__8.CLASS, CLOSE_ANGLE = $__8.CLOSE_ANGLE, CLOSE_CURLY = $__8.CLOSE_CURLY, CLOSE_PAREN = $__8.CLOSE_PAREN, CLOSE_SQUARE = $__8.CLOSE_SQUARE, COLON = $__8.COLON, COMMA = $__8.COMMA, CONTINUE = $__8.CONTINUE, DEBUGGER = $__8.DEBUGGER, DEFAULT = $__8.DEFAULT, DO = $__8.DO, DOT_DOT_DOT = $__8.DOT_DOT_DOT, ELSE = $__8.ELSE, EQUAL = $__8.EQUAL, EXPORT = $__8.EXPORT, EXTENDS = $__8.EXTENDS, FINALLY = $__8.FINALLY, FOR = $__8.FOR, FUNCTION = $__8.FUNCTION, IF = $__8.IF, IMPORT = $__8.IMPORT, IN = $__8.IN, INTERFACE = $__8.INTERFACE, MINUS = $__8.MINUS, MINUS_MINUS = $__8.MINUS_MINUS, NEW = $__8.NEW, NUMBER = $__8.NUMBER, OPEN_ANGLE = $__8.OPEN_ANGLE, OPEN_CURLY = $__8.OPEN_CURLY, OPEN_PAREN = $__8.OPEN_PAREN, OPEN_SQUARE = $__8.OPEN_SQUARE, PERIOD = $__8.PERIOD, PLUS = $__8.PLUS, PLUS_PLUS = $__8.PLUS_PLUS, QUESTION = $__8.QUESTION, RETURN = $__8.RETURN, SEMI_COLON = $__8.SEMI_COLON, SLASH = $__8.SLASH, STAR = $__8.STAR, STATIC = $__8.STATIC, SUPER = $__8.SUPER, SWITCH = $__8.SWITCH, THIS = $__8.THIS, THROW = $__8.THROW, TRY = $__8.TRY, WHILE = $__8.WHILE, WITH = $__8.WITH, YIELD = $__8.YIELD; var NEW_LINE = '\n'; var LINE_LENGTH = 80; var ParseTreeWriter = function($__super) { function ParseTreeWriter() { var $__3; var $__2 = arguments[0] !== (void 0) ? arguments[0] : {}, prettyPrint = ($__3 = $__2.prettyPrint) === void 0 ? true : $__3; $traceurRuntime.superConstructor(ParseTreeWriter).call(this); this.prettyPrint_ = prettyPrint; this.result_ = ''; this.currentLine_ = ''; this.lastCode_ = -1; this.indentDepth_ = 0; this.currentParameterTypeAnnotation_ = null; } return ($traceurRuntime.createClass)(ParseTreeWriter, { toString: function() { if (this.currentLine_.length > 0) { this.result_ += this.currentLine_; this.currentLine_ = ''; this.lastCode_ = -1; } return this.result_; }, visitAnnotation: function(tree) { this.write_(AT); this.visitAny(tree.name); if (tree.args !== null) { this.write_(OPEN_PAREN); this.writeList_(tree.args.args, COMMA, false); this.write_(CLOSE_PAREN); } }, visitArgumentList: function(tree) { this.write_(OPEN_PAREN); this.writeList_(tree.args, COMMA, false); this.write_(CLOSE_PAREN); }, visitArrayComprehension: function(tree) { this.write_(OPEN_SQUARE); this.visitList(tree.comprehensionList); this.visitAny(tree.expression); this.write_(CLOSE_SQUARE); }, visitArrayLiteral: function(tree) { this.write_(OPEN_SQUARE); this.writeList_(tree.elements, COMMA, false); if (tree.elements[tree.elements.length - 1] === null) { this.write_(COMMA); this.writeSpace_(); } this.write_(CLOSE_SQUARE); }, visitArrayPattern: function(tree) { this.write_(OPEN_SQUARE); this.writeList_(tree.elements, COMMA, false); if (tree.elements[tree.elements.length - 1] === null) { this.write_(COMMA); this.writeSpace_(); } this.write_(CLOSE_SQUARE); }, visitArrayType: function(tree) { this.visitAny(tree.elementType); this.write_(OPEN_SQUARE); this.write_(CLOSE_SQUARE); }, visitArrowFunction: function(tree) { if (tree.functionKind) { this.writeToken_(tree.functionKind); this.writeSpace_(); } this.write_(OPEN_PAREN); this.visitAny(tree.parameterList); this.write_(CLOSE_PAREN); this.writeSpace_(); this.write_(ARROW); this.writeSpace_(); this.visitAny(tree.body); }, visitAssignmentElement: function(tree) { this.visitAny(tree.assignment); if (tree.initializer) { this.writeSpace_(); this.write_(EQUAL); this.writeSpace_(); this.visitAny(tree.initializer); } }, visitAwaitExpression: function(tree) { this.write_(AWAIT); this.writeSpace_(); this.visitAny(tree.expression); }, visitBinaryExpression: function(tree) { var left = tree.left; this.visitAny(left); var operator = tree.operator; if (left.type === POSTFIX_EXPRESSION && requiresSpaceBetween(left.operator.type, operator.type)) { this.writeRequiredSpace_(); } else { this.writeSpace_(); } this.writeToken_(operator); var right = tree.right; if (right.type === UNARY_EXPRESSION && requiresSpaceBetween(operator.type, right.operator.type)) { this.writeRequiredSpace_(); } else { this.writeSpace_(); } this.visitAny(right); }, visitBindingElement: function(tree) { var typeAnnotation = this.currentParameterTypeAnnotation_; this.currentParameterTypeAnnotation_ = null; this.visitAny(tree.binding); this.writeTypeAnnotation_(typeAnnotation); if (tree.initializer) { this.writeSpace_(); this.write_(EQUAL); this.writeSpace_(); this.visitAny(tree.initializer); } }, visitBindingIdentifier: function(tree) { this.writeToken_(tree.identifierToken); }, visitBlock: function(tree) { this.writeOpenCurly_(); this.writelnList_(tree.statements, null); this.writeCloseCurly_(); }, visitBreakStatement: function(tree) { this.write_(BREAK); if (tree.name !== null) { this.writeSpace_(); this.writeToken_(tree.name); } this.write_(SEMI_COLON); }, visitCallExpression: function(tree) { this.visitAny(tree.operand); this.visitAny(tree.args); }, visitCallSignature: function(tree) { if (tree.typeParameters) { this.visitAny(tree.typeParameters); } this.write_(OPEN_PAREN); this.visitAny(tree.parameterList); this.write_(CLOSE_PAREN); this.writeTypeAnnotation_(tree.returnType); }, visitCaseClause: function(tree) { this.write_(CASE); this.writeSpace_(); this.visitAny(tree.expression); this.write_(COLON); this.indentDepth_++; this.writelnList_(tree.statements, null); this.indentDepth_--; }, visitCatch: function(tree) { this.write_(CATCH); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.binding); this.write_(CLOSE_PAREN); this.writeSpace_(); this.visitAny(tree.catchBody); }, visitClassShared_: function(tree) { this.writeAnnotations_(tree.annotations); this.write_(CLASS); this.writeSpace_(); this.visitAny(tree.name); if (tree.typeParameters !== null) { this.visitAny(tree.typeParameters); } if (tree.superClass !== null) { this.writeSpace_(); this.write_(EXTENDS); this.writeSpace_(); this.visitAny(tree.superClass); } this.writeSpace_(); this.writeOpenCurly_(); this.writelnList_(tree.elements, null); this.writeCloseCurly_(); }, visitClassDeclaration: function(tree) { this.visitClassShared_(tree); }, visitClassExpression: function(tree) { this.visitClassShared_(tree); }, visitCommaExpression: function(tree) { this.writeList_(tree.expressions, COMMA, false); }, visitComprehensionFor: function(tree) { this.write_(FOR); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.left); this.writeSpace_(); this.write_(OF); this.writeSpace_(); this.visitAny(tree.iterator); this.write_(CLOSE_PAREN); this.writeSpace_(); }, visitComprehensionIf: function(tree) { this.write_(IF); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.expression); this.write_(CLOSE_PAREN); this.writeSpace_(); }, visitComputedPropertyName: function(tree) { this.write_(OPEN_SQUARE); this.visitAny(tree.expression); this.write_(CLOSE_SQUARE); }, visitConstructSignature: function(tree) { this.write_(NEW); this.writeSpace_(); this.visitCallSignature(tree); }, visitConstructorType: function(tree) { this.write_(NEW); this.writeSpace_(); this.visitFunctionType(tree); }, visitConditionalExpression: function(tree) { this.visitAny(tree.condition); this.writeSpace_(); this.write_(QUESTION); this.writeSpace_(); this.visitAny(tree.left); this.writeSpace_(); this.write_(COLON); this.writeSpace_(); this.visitAny(tree.right); }, visitContinueStatement: function(tree) { this.write_(CONTINUE); if (tree.name !== null) { this.writeSpace_(); this.writeToken_(tree.name); } this.write_(SEMI_COLON); }, visitCoverInitializedName: function(tree) { this.writeToken_(tree.name); this.writeSpace_(); this.writeToken_(tree.equalToken); this.writeSpace_(); this.visitAny(tree.initializer); }, visitDebuggerStatement: function(tree) { this.write_(DEBUGGER); this.write_(SEMI_COLON); }, visitDefaultClause: function(tree) { this.write_(DEFAULT); this.write_(COLON); this.indentDepth_++; this.writelnList_(tree.statements, null); this.indentDepth_--; }, visitDoWhileStatement: function(tree) { this.write_(DO); this.visitAnyBlockOrIndent_(tree.body); this.writeSpace_(); this.write_(WHILE); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.condition); this.write_(CLOSE_PAREN); this.write_(SEMI_COLON); }, visitEmptyStatement: function(tree) { this.write_(SEMI_COLON); }, visitExportDeclaration: function(tree) { this.writeAnnotations_(tree.annotations); this.write_(EXPORT); this.writeSpace_(); this.visitAny(tree.declaration); }, visitExportDefault: function(tree) { this.write_(DEFAULT); this.writeSpace_(); this.visitAny(tree.expression); switch (tree.expression.type) { case CLASS_DECLARATION: case FUNCTION_DECLARATION: break; default: this.write_(SEMI_COLON); } }, visitNameSpaceExport: function(tree) { this.write_(STAR); this.writeSpace_(); this.write_(AS); this.writeSpace_(); this.writeToken_(tree.name); }, visitNameSpaceImport: function(tree) { this.write_(STAR); this.writeSpace_(); this.write_(AS); this.writeSpace_(); this.visitAny(tree.binding); }, visitNamedExport: function(tree) { this.visitAny(tree.exportClause); if (tree.moduleSpecifier) { this.writeSpace_(); this.write_(FROM); this.writeSpace_(); this.visitAny(tree.moduleSpecifier); } this.write_(SEMI_COLON); }, visitExportSpecifier: function(tree) { this.writeToken_(tree.lhs); if (tree.rhs) { this.writeSpace_(); this.write_(AS); this.writeSpace_(); this.writeToken_(tree.rhs); } }, visitExportSpecifierSet: function(tree) { this.writeOpenCurly_(); this.writeList_(tree.specifiers, COMMA, false); this.writeCloseCurly_(); }, visitExportStar: function(tree) { this.write_(STAR); }, visitExpressionStatement: function(tree) { this.visitAny(tree.expression); this.write_(SEMI_COLON); }, visitFinally: function(tree) { this.write_(FINALLY); this.writeSpace_(); this.visitAny(tree.block); }, visitForOfStatement: function(tree) { this.write_(FOR); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.initializer); this.writeSpace_(); this.write_(OF); this.writeSpace_(); this.visitAny(tree.collection); this.write_(CLOSE_PAREN); this.visitAnyBlockOrIndent_(tree.body); }, visitForOnStatement: function(tree) { this.write_(FOR); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.initializer); this.writeSpace_(); this.write_(ON); this.writeSpace_(); this.visitAny(tree.observable); this.write_(CLOSE_PAREN); this.visitAnyBlockOrIndent_(tree.body); }, visitForInStatement: function(tree) { this.write_(FOR); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.initializer); this.writeSpace_(); this.write_(IN); this.writeSpace_(); this.visitAny(tree.collection); this.write_(CLOSE_PAREN); this.visitAnyBlockOrIndent_(tree.body); }, visitForStatement: function(tree) { this.write_(FOR); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.initializer); this.write_(SEMI_COLON); this.writeSpace_(); this.visitAny(tree.condition); this.write_(SEMI_COLON); this.writeSpace_(); this.visitAny(tree.increment); this.write_(CLOSE_PAREN); this.visitAnyBlockOrIndent_(tree.body); }, visitFormalParameterList: function(tree) { var first = true; for (var i = 0; i < tree.parameters.length; i++) { var parameter = tree.parameters[i]; if (first) { first = false; } else { this.write_(COMMA); this.writeSpace_(); } this.visitAny(parameter); } }, visitFormalParameter: function(tree) { this.writeAnnotations_(tree.annotations, false); this.currentParameterTypeAnnotation_ = tree.typeAnnotation; this.visitAny(tree.parameter); this.currentParameterTypeAnnotation_ = null; }, visitForwardDefaultExport: function(tree) { this.writeToken_(tree.name); }, visitFunctionBody: function(tree) { this.writeOpenCurly_(); this.writelnList_(tree.statements, null); this.writeCloseCurly_(); }, visitFunctionDeclaration: function(tree) { this.visitFunction_(tree); }, visitFunctionExpression: function(tree) { this.visitFunction_(tree); }, visitFunction_: function(tree) { this.writeAnnotations_(tree.annotations); if (tree.isAsyncGenerator()) { this.write_(ASYNC); } if (tree.isAsyncFunction()) this.writeToken_(tree.functionKind); this.write_(FUNCTION); if (tree.isAsyncGenerator()) { this.write_(STAR); } if (tree.isGenerator()) this.writeToken_(tree.functionKind); if (tree.name) { this.writeSpace_(); this.visitAny(tree.name); } this.write_(OPEN_PAREN); this.visitAny(tree.parameterList); this.write_(CLOSE_PAREN); this.writeTypeAnnotation_(tree.typeAnnotation); this.writeSpace_(); this.visitAny(tree.body); }, visitFunctionType: function(tree) { if (tree.typeParameters !== null) { this.visitAny(tree.typeParameters); } this.write_(OPEN_PAREN); this.visitAny(tree.parameterList); this.write_(CLOSE_PAREN); this.writeSpace_(); this.write_(ARROW); this.writeSpace_(); this.visitAny(tree.returnType); }, visitGeneratorComprehension: function(tree) { this.write_(OPEN_PAREN); this.visitList(tree.comprehensionList); this.visitAny(tree.expression); this.write_(CLOSE_PAREN); }, visitGetAccessor: function(tree) { this.writeAnnotations_(tree.annotations); if (tree.isStatic) { this.write_(STATIC); this.writeSpace_(); } this.write_(GET); this.writeSpace_(); this.visitAny(tree.name); this.write_(OPEN_PAREN); this.write_(CLOSE_PAREN); this.writeSpace_(); this.writeTypeAnnotation_(tree.typeAnnotation); this.visitAny(tree.body); }, visitIdentifierExpression: function(tree) { this.writeToken_(tree.identifierToken); }, visitIfStatement: function(tree) { this.write_(IF); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.condition); this.write_(CLOSE_PAREN); this.visitAnyBlockOrIndent_(tree.ifClause); if (tree.elseClause) { if (tree.ifClause.type === BLOCK) this.writeSpace_(); this.write_(ELSE); if (tree.elseClause.type === IF_STATEMENT) { this.writeSpace_(); this.visitAny(tree.elseClause); } else { this.visitAnyBlockOrIndent_(tree.elseClause); } } }, visitIndexSignature: function(tree) { this.write_(OPEN_SQUARE); this.writeToken_(tree.name); this.write_(COLON); this.writeSpace_(); this.visitAny(tree.indexType); this.write_(CLOSE_SQUARE); this.writeTypeAnnotation_(tree.typeAnnotation); this.write_(SEMI_COLON); }, visitInterfaceDeclaration: function(tree) { this.write_(INTERFACE); this.writeSpace_(); this.writeToken_(tree.name); if (tree.typeParameters) { this.visitAny(tree.typeParameters); } if (tree.extendsClause.length > 0) { this.writeSpace_(); this.write_(EXTENDS); this.writeSpace_(); this.writeList_(tree.extendsClause, COMMA, false); } this.writeSpace_(); this.visitAny(tree.objectType); }, visitAnyBlockOrIndent_: function(tree) { if (tree.type === BLOCK) { this.writeSpace_(); this.visitAny(tree); } else { this.visitAnyIndented_(tree); } }, visitAnyIndented_: function(tree) { var indent = arguments[1] !== (void 0) ? arguments[1] : 1; if (this.prettyPrint_) { this.indentDepth_ += indent; this.writeln_(); } this.visitAny(tree); if (this.prettyPrint_) { this.indentDepth_ -= indent; this.writeln_(); } }, visitImportClausePair: function(tree) { this.visitAny(tree.first); this.write_(COMMA); this.writeSpace_(); this.visitAny(tree.second); }, visitImportDeclaration: function(tree) { this.write_(IMPORT); this.writeSpace_(); if (tree.importClause) { this.visitAny(tree.importClause); this.writeSpace_(); this.write_(FROM); this.writeSpace_(); } this.visitAny(tree.moduleSpecifier); this.write_(SEMI_COLON); }, visitImportSpecifier: function(tree) { if (tree.name) { this.writeToken_(tree.name); this.writeSpace_(); this.write_(AS); this.writeSpace_(); } this.visitAny(tree.binding); }, visitImportSpecifierSet: function(tree) { if (tree.specifiers.type === STAR) { this.write_(STAR); } else { this.writeOpenCurly_(); this.writelnList_(tree.specifiers, COMMA); this.writeCloseCurly_(); } }, visitImportTypeClause: function(tree) { this.write_(TYPE); this.writeSpace_(); this.visitAny(tree.clause); }, visitJsxAttribute: function(tree) { this.writeToken_(tree.name); if (tree.value !== null) { this.write_(EQUAL); this.visitAny(tree.value); } }, visitJsxElement: function(tree) { this.write_(OPEN_ANGLE); this.visitAny(tree.name); for (var i = 0; i < tree.attributes.length; i++) { this.writeSpace_(); this.visitAny(tree.attributes[i]); } if (tree.children.length === 0) { this.write_(SLASH); this.write_(CLOSE_ANGLE); } else { this.write_(CLOSE_ANGLE); this.visitList(tree.children); this.write_(OPEN_ANGLE); this.write_(SLASH); this.lastCode_ = -1; this.visitAny(tree.name); this.write_(CLOSE_ANGLE); } }, visitJsxElementName: function(tree) { for (var i = 0; i < tree.names.length; i++) { if (i > 0) { this.write_(PERIOD); } this.writeToken_(tree.names[i]); } }, visitJsxPlaceholder: function(tree) { this.write_(OPEN_CURLY); if (tree.expression !== null) { this.visitAny(tree.expression); } this.write_(CLOSE_CURLY); }, visitJsxSpreadAttribute: function(tree) { this.write_(OPEN_CURLY); this.write_(DOT_DOT_DOT); this.visitAny(tree.expression); this.write_(CLOSE_CURLY); }, visitJsxText: function(tree) { this.writeToken_(tree.value); }, visitLabelledStatement: function(tree) { this.writeToken_(tree.name); this.write_(COLON); this.writeSpace_(); this.visitAny(tree.statement); }, visitLiteralExpression: function(tree) { this.writeToken_(tree.literalToken); }, visitLiteralPropertyName: function(tree) { this.writeToken_(tree.literalToken); }, visitMemberExpression: function(tree) { this.visitAny(tree.operand); if (tree.operand.type === LITERAL_EXPRESSION && tree.operand.literalToken.type === NUMBER) { if (!/\.|e|E/.test(tree.operand.literalToken.value)) this.writeRequiredSpace_(); } this.write_(PERIOD); this.writeToken_(tree.memberName); }, visitMemberLookupExpression: function(tree) { this.visitAny(tree.operand); this.write_(OPEN_SQUARE); this.visitAny(tree.memberExpression); this.write_(CLOSE_SQUARE); }, visitMethodSignature: function(tree) { this.visitAny(tree.name); if (tree.optional) { this.write_(QUESTION); } this.visitAny(tree.callSignature); this.write_(SEMI_COLON); }, visitSyntaxErrorTree: function(tree) { this.write_('(function() {' + ("throw SyntaxError(" + JSON.stringify(tree.message) + ");") + '})()'); }, visitModule: function(tree) { this.writelnList_(tree.scriptItemList, null); }, visitModuleSpecifier: function(tree) { this.writeToken_(tree.token); }, visitNewExpression: function(tree) { this.write_(NEW); this.writeSpace_(); this.visitAny(tree.operand); this.visitAny(tree.args); }, visitObjectLiteral: function(tree) { this.writeOpenCurly_(); if (tree.propertyNameAndValues.length > 1) this.writeln_(); this.writelnList_(tree.propertyNameAndValues, COMMA); if (tree.propertyNameAndValues.length > 1) this.writeln_(); this.writeCloseCurly_(); }, visitObjectPattern: function(tree) { this.writeOpenCurly_(); this.writelnList_(tree.fields, COMMA); this.writeCloseCurly_(); }, visitObjectPatternField: function(tree) { this.visitAny(tree.name); if (tree.element !== null) { this.write_(COLON); this.writeSpace_(); this.visitAny(tree.element); } }, visitObjectType: function(tree) { this.writeOpenCurly_(); this.writelnList_(tree.typeMembers, null); this.writeCloseCurly_(); }, visitParenExpression: function(tree) { this.write_(OPEN_PAREN); $traceurRuntime.superGet(this, ParseTreeWriter.prototype, "visitParenExpression").call(this, tree); this.write_(CLOSE_PAREN); }, visitPostfixExpression: function(tree) { this.visitAny(tree.operand); if (tree.operand.type === POSTFIX_EXPRESSION && tree.operand.operator.type === tree.operator.type) { this.writeRequiredSpace_(); } this.writeToken_(tree.operator); }, visitPredefinedType: function(tree) { this.writeToken_(tree.typeToken); }, visitScript: function(tree) { this.writelnList_(tree.scriptItemList, null); }, visitMethod: function(tree) { this.writeAnnotations_(tree.annotations); if (tree.isStatic) { this.write_(STATIC); this.writeSpace_(); } if (tree.isAsyncFunction() || tree.isAsyncGenerator()) this.write_(ASYNC); if (tree.isGenerator() || tree.isAsyncGenerator()) this.write_(STAR); if (tree.isAsyncGenerator()) this.writeSpace_(); this.visitAny(tree.name); this.write_(OPEN_PAREN); this.visitAny(tree.parameterList); this.write_(CLOSE_PAREN); this.writeSpace_(); this.writeTypeAnnotation_(tree.typeAnnotation); this.visitAny(tree.body); }, visitPropertyNameAssignment: function(tree) { this.visitAny(tree.name); this.write_(COLON); this.writeSpace_(); this.visitAny(tree.value); }, visitPropertyNameShorthand: function(tree) { this.writeToken_(tree.name); }, visitPropertyVariableDeclaration: function(tree) { this.writeAnnotations_(tree.annotations); if (tree.isStatic) { this.write_(STATIC); this.writeSpace_(); } this.visitAny(tree.name); this.writeTypeAnnotation_(tree.typeAnnotation); if (tree.initalizer) { this.writeSpace_(); this.write_(EQUAL); this.writeSpace_(); this.visitAny(tree.initializer); } this.write_(SEMI_COLON); }, visitPropertySignature: function(tree) { this.visitAny(tree.name); if (tree.optional) { this.write_(QUESTION); } this.writeTypeAnnotation_(tree.typeAnnotation); this.write_(SEMI_COLON); }, visitTemplateLiteralExpression: function(tree) { if (tree.operand) { this.visitAny(tree.operand); this.writeSpace_(); } this.writeRaw_(BACK_QUOTE); this.visitList(tree.elements); this.writeRaw_(BACK_QUOTE); }, visitTemplateLiteralPortion: function(tree) { this.writeToken_(tree.value); }, visitTemplateSubstitution: function(tree) { this.writeRaw_('$'); this.writeRaw_(OPEN_CURLY); this.visitAny(tree.expression); this.writeRaw_(CLOSE_CURLY); }, visitReturnStatement: function(tree) { this.write_(RETURN); if (tree.expression) { this.writeSpace_(tree.expression); this.visitAny(tree.expression); } this.write_(SEMI_COLON); }, visitRestParameter: function(tree) { this.write_(DOT_DOT_DOT); this.visitAny(tree.identifier); }, visitSetAccessor: function(tree) { this.writeAnnotations_(tree.annotations); if (tree.isStatic) { this.write_(STATIC); this.writeSpace_(); } this.write_(SET); this.writeSpace_(); this.visitAny(tree.name); this.write_(OPEN_PAREN); this.visitAny(tree.parameterList); this.write_(CLOSE_PAREN); this.writeSpace_(); this.visitAny(tree.body); }, visitSpreadExpression: function(tree) { this.write_(DOT_DOT_DOT); this.visitAny(tree.expression); }, visitSpreadPatternElement: function(tree) { this.write_(DOT_DOT_DOT); this.visitAny(tree.lvalue); }, visitStateMachine: function(tree) { throw new Error('State machines cannot be converted to source'); }, visitSuperExpression: function(tree) { this.write_(SUPER); }, visitSwitchStatement: function(tree) { this.write_(SWITCH); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.expression); this.write_(CLOSE_PAREN); this.writeSpace_(); this.writeOpenCurly_(); this.writelnList_(tree.caseClauses, null); this.writeCloseCurly_(); }, visitThisExpression: function(tree) { this.write_(THIS); }, visitThrowStatement: function(tree) { this.write_(THROW); this.writeSpace_(); this.visitAny(tree.value); this.write_(SEMI_COLON); }, visitTryStatement: function(tree) { this.write_(TRY); this.writeSpace_(); this.visitAny(tree.body); if (tree.catchBlock) { this.writeSpace_(); this.visitAny(tree.catchBlock); } if (tree.finallyBlock) { this.writeSpace_(); this.visitAny(tree.finallyBlock); } }, visitTypeAliasDeclaration: function(tree) { this.write_(TYPE); this.writeRequiredSpace_(); this.writeToken_(tree.name); this.writeSpace_(); this.write_(EQUAL); this.writeSpace_(); this.visitAny(tree.value); this.write_(SEMI_COLON); }, visitTypeArguments: function(tree) { this.write_(OPEN_ANGLE); var args = tree.args; this.visitAny(args[0]); for (var i = 1; i < args.length; i++) { this.write_(COMMA); this.writeSpace_(); this.visitAny(args[i]); } this.write_(CLOSE_ANGLE); }, visitTypeName: function(tree) { if (tree.moduleName) { this.visitAny(tree.moduleName); this.write_(PERIOD); } this.writeToken_(tree.name); }, visitTypeParameter: function(tree) { this.writeToken_(tree.identifierToken); if (tree.extendsType) { this.writeSpace_(); this.write_(EXTENDS); this.writeSpace_(); this.visitAny(tree.extendsType); } }, visitTypeParameters: function(tree) { this.write_(OPEN_ANGLE); this.writeList_(tree.parameters, COMMA, false); this.write_(CLOSE_ANGLE); }, visitUnaryExpression: function(tree) { var op = tree.operator; this.writeToken_(op); var operand = tree.operand; if (operand.type === UNARY_EXPRESSION && requiresSpaceBetween(op.type, operand.operator.type)) { this.writeRequiredSpace_(); } this.visitAny(operand); }, visitUnionType: function(tree) { this.visitAny(tree.types[0]); for (var i = 1; i < tree.types.length; i++) { this.writeSpace_(); this.write_(BAR); this.writeSpace_(); this.visitAny(tree.types[i]); } }, visitVariableDeclarationList: function(tree) { this.write_(tree.declarationType); this.writeSpace_(); this.writeList_(tree.declarations, COMMA, true, 2); }, visitVariableDeclaration: function(tree) { this.visitAny(tree.lvalue); this.writeTypeAnnotation_(tree.typeAnnotation); if (tree.initializer !== null) { this.writeSpace_(); this.write_(EQUAL); this.writeSpace_(); this.visitAny(tree.initializer); } }, visitVariableStatement: function(tree) { $traceurRuntime.superGet(this, ParseTreeWriter.prototype, "visitVariableStatement").call(this, tree); this.write_(SEMI_COLON); }, visitWhileStatement: function(tree) { this.write_(WHILE); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.condition); this.write_(CLOSE_PAREN); this.visitAnyBlockOrIndent_(tree.body); }, visitWithStatement: function(tree) { this.write_(WITH); this.writeSpace_(); this.write_(OPEN_PAREN); this.visitAny(tree.expression); this.write_(CLOSE_PAREN); this.writeSpace_(); this.visitAny(tree.body); }, visitYieldExpression: function(tree) { this.write_(YIELD); if (tree.isYieldFor) this.write_(STAR); if (tree.expression) { this.writeSpace_(); this.visitAny(tree.expression); } }, writeCurrentln_: function() { this.result_ += this.currentLine_ + NEW_LINE; }, writeln_: function() { if (this.currentLine_) this.writeCurrentln_(); this.currentLine_ = ''; this.lastCode_ = -1; }, writelnList_: function(list, delimiter) { if (delimiter !== null) { this.writeList_(list, delimiter, true); } else { if (list.length > 0) this.writeln_(); this.writeList_(list, '', true); if (list.length > 0) this.writeln_(); } }, writeList_: function(list, delimiter, writeNewLine) { var indent = arguments[3] !== (void 0) ? arguments[3] : 0; var first = true; for (var i = 0; i < list.length; i++) { if (first) { first = false; } else { if (delimiter !== '') { this.write_(delimiter); if (!writeNewLine) this.writeSpace_(); } if (writeNewLine) { if (i === 1) this.indentDepth_ += indent; this.writeln_(); } } this.visitAny(list[i]); } if (writeNewLine && list.length > 1) this.indentDepth_ -= indent; }, writeRaw_: function(value) { this.currentLine_ += value; this.lastCode_ = value.charCodeAt(value.length - 1); }, writeToken_: function(token) { this.write_(token.toString()); }, write_: function(value) { if (this.prettyPrint_ && this.currentLine_.length === 0) { for (var i = 0, indent = this.indentDepth_; i < indent; i++) { this.writeRaw_(' '); } } if (this.needsSpace_(value)) { this.writeRaw_(' '); } this.writeRaw_(value); }, writeCloseCurly_: function() { this.indentDepth_--; this.write_(CLOSE_CURLY); }, writeOpenCurly_: function() { this.write_(OPEN_CURLY); this.indentDepth_++; }, writeSpace_: function() { if (this.prettyPrint_ && !isWhitespace(this.lastCode_)) { this.writeRaw_(' '); } }, writeRequiredSpace_: function() { if (!isWhitespace(this.lastCode_)) { this.writeRaw_(' '); } }, writeTypeAnnotation_: function(typeAnnotation) { if (typeAnnotation !== null) { this.write_(COLON); this.writeSpace_(); this.visitAny(typeAnnotation); } }, writeAnnotations_: function(annotations) { var writeNewLine = arguments[1] !== (void 0) ? arguments[1] : this.prettyPrint_; if (annotations.length > 0) { this.writeList_(annotations, '', writeNewLine); if (writeNewLine) this.writeln_(); } }, needsSpace_: function(token) { var lastCode = this.lastCode_; if (isWhitespace(lastCode)) return false; var firstCode = token.toString().charCodeAt(0); return isIdentifierPart(firstCode) && (isIdentifierPart(lastCode) || lastCode === 47); } }, {}, $__super); }(ParseTreeVisitor); function requiresSpaceBetween(first, second) { return (first === MINUS || first === MINUS_MINUS) && (second === MINUS || second === MINUS_MINUS) || (first === PLUS || first === PLUS_PLUS) && (second === PLUS || second === PLUS_PLUS); } return {get ParseTreeWriter() { return ParseTreeWriter; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/ParseTreeMapWriter.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/outputgeneration/ParseTreeMapWriter.js"; var ParseTreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeWriter.js", "traceur@0.0.112/src/outputgeneration/ParseTreeMapWriter.js")).ParseTreeWriter; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringSet.js", "traceur@0.0.112/src/outputgeneration/ParseTreeMapWriter.js")).StringSet; var ParseTreeMapWriter = function($__super) { function ParseTreeMapWriter(sourceMapConfiguration) { var options = arguments[1]; $traceurRuntime.superConstructor(ParseTreeMapWriter).call(this, options); this.sourceMapGenerator_ = sourceMapConfiguration.sourceMapGenerator; this.lowResolution_ = sourceMapConfiguration.lowResolution; this.basepath_ = sourceMapConfiguration.basepath; this.outputLineCount_ = 1; this.isFirstMapping_ = true; this.sourcesInMap_ = new StringSet(); this.relativeSourceName_ = ''; this.generated_ = null; this.original_ = null; this.previousMapping_ = null; } return ($traceurRuntime.createClass)(ParseTreeMapWriter, { visitAny: function(tree) { if (tree === null) { return; } if (tree.location !== null) this.enterBranch(tree.location); $traceurRuntime.superGet(this, ParseTreeMapWriter.prototype, "visitAny").call(this, tree); if (tree.location !== null) this.exitBranch(tree.location); }, writeCurrentln_: function() { $traceurRuntime.superGet(this, ParseTreeMapWriter.prototype, "writeCurrentln_").call(this); this.flushMappings(); this.outputLineCount_++; this.generated_ = { line: this.outputLineCount_, column: 0 }; this.flushMappings(); }, write_: function(value) { this.generate(); $traceurRuntime.superGet(this, ParseTreeMapWriter.prototype, "write_").call(this, value); this.generate(); }, generate: function() { var length = this.currentLine_.length; var column = length ? length - 1 : 0; this.generated_ = { line: this.outputLineCount_, column: column }; this.flushMappings(); }, enterBranch: function(location) { var $__2 = location.start, line = $__2.line, column = $__2.column, source = $__2.source; this.originate(line, column, source); }, exitBranch: function(location) { var $__2 = location.end, line = $__2.line, column = $__2.column, source = $__2.source; this.originate(line, column ? column - 1 : 0, source); }, originate: function(line, column, source) { line++; if (this.original_ && this.original_.line !== line) this.flushMappings(); this.original_ = { line: line, column: column }; var name = source.name; if (name && !this.sourcesInMap_.has(name)) { this.sourcesInMap_.add(name); this.relativeSourceName_ = relativePath(name, this.basepath_); this.sourceMapGenerator_.setSourceContent(this.relativeSourceName_, source.contents); } this.flushMappings(); }, flushMappings: function() { if (this.original_ && this.generated_) { this.addMapping(); this.original_ = null; this.generated_ = null; } }, isSame: function(lhs, rhs) { return lhs.line === rhs.line && lhs.column === rhs.column; }, skipMapping: function() { if (!this.previousMapping_) return false; if (this.lowResolution_ && this.previousMapping_.generated.line === this.generated_.line) return true; if (this.isSame(this.previousMapping_.generated, this.generated_) && this.isSame(this.previousMapping_.original, this.original_)) return true; }, addMapping: function() { if (this.skipMapping()) return; var mapping = { generated: this.generated_, original: this.original_, source: this.relativeSourceName_ }; this.sourceMapGenerator_.addMapping(mapping); this.previousMapping_ = mapping; } }, {}, $__super); }(ParseTreeWriter); function relativePath(name, sourceRoot) { var $__3; if (!name || name[0] === '@') return name; if (!sourceRoot) return name; var nameSegments = name.split('/'); var rootSegments = sourceRoot.split('/'); if (rootSegments[rootSegments.length - 1]) { throw new Error('rootPath must end in /'); } var commonSegmentsLength = 0; var uniqueSegments = []; var foundUnique = false; nameSegments.forEach(function(segment, index) { if (!foundUnique && segment === rootSegments[index]) { commonSegmentsLength++; return; } foundUnique = true; uniqueSegments.push(segment); }); if (commonSegmentsLength < 1 || commonSegmentsLength === rootSegments.length) return name; var dotDotSegments = rootSegments.length - commonSegmentsLength - 1; var segments = []; while (dotDotSegments--) { segments.push('..'); } ($__3 = segments).push.apply($__3, $traceurRuntime.spread(uniqueSegments)); return segments.join('/'); } return { get ParseTreeMapWriter() { return ParseTreeMapWriter; }, get relativePath() { return relativePath; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/SourceMapIntegration.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/outputgeneration/SourceMapIntegration.js"; function makeDefine(mapping, id) { var require = function(id) { return mapping[id]; }; var exports = mapping[id] = {}; var module = null; return function(factory) { factory(require, exports, module); }; } var define, m = {}; define = makeDefine(m, './util'); if (typeof define !== 'function') { var define = require('amdefine')(module, require); } define(function(require, exports, module) { function getArg(aArgs, aName, aDefaultValue) { if (aName in aArgs) { return aArgs[aName]; } else if (arguments.length === 3) { return aDefaultValue; } else { throw new Error('"' + aName + '" is a required argument.'); } } exports.getArg = getArg; var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; var dataUrlRegexp = /^data:.+\,.+$/; function urlParse(aUrl) { var match = aUrl.match(urlRegexp); if (!match) { return null; } return { scheme: match[1], auth: match[2], host: match[3], port: match[4], path: match[5] }; } exports.urlParse = urlParse; function urlGenerate(aParsedUrl) { var url = ''; if (aParsedUrl.scheme) { url += aParsedUrl.scheme + ':'; } url += '//'; if (aParsedUrl.auth) { url += aParsedUrl.auth + '@'; } if (aParsedUrl.host) { url += aParsedUrl.host; } if (aParsedUrl.port) { url += ":" + aParsedUrl.port; } if (aParsedUrl.path) { url += aParsedUrl.path; } return url; } exports.urlGenerate = urlGenerate; function normalize(aPath) { var path = aPath; var url = urlParse(aPath); if (url) { if (!url.path) { return aPath; } path = url.path; } var isAbsolute = (path.charAt(0) === '/'); var parts = path.split(/\/+/); for (var part = void 0, up = 0, i = parts.length - 1; i >= 0; i--) { part = parts[i]; if (part === '.') { parts.splice(i, 1); } else if (part === '..') { up++; } else if (up > 0) { if (part === '') { parts.splice(i + 1, up); up = 0; } else { parts.splice(i, 2); up--; } } } path = parts.join('/'); if (path === '') { path = isAbsolute ? '/' : '.'; } if (url) { url.path = path; return urlGenerate(url); } return path; } exports.normalize = normalize; function join(aRoot, aPath) { if (aRoot === "") { aRoot = "."; } if (aPath === "") { aPath = "."; } var aPathUrl = urlParse(aPath); var aRootUrl = urlParse(aRoot); if (aRootUrl) { aRoot = aRootUrl.path || '/'; } if (aPathUrl && !aPathUrl.scheme) { if (aRootUrl) { aPathUrl.scheme = aRootUrl.scheme; } return urlGenerate(aPathUrl); } if (aPathUrl || aPath.match(dataUrlRegexp)) { return aPath; } if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { aRootUrl.host = aPath; return urlGenerate(aRootUrl); } var joined = aPath.charAt(0) === '/' ? aPath : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); if (aRootUrl) { aRootUrl.path = joined; return urlGenerate(aRootUrl); } return joined; } exports.join = join; function relative(aRoot, aPath) { if (aRoot === "") { aRoot = "."; } aRoot = aRoot.replace(/\/$/, ''); var url = urlParse(aRoot); if (aPath.charAt(0) == "/" && url && url.path == "/") { return aPath.slice(1); } return aPath.indexOf(aRoot + '/') === 0 ? aPath.substr(aRoot.length + 1) : aPath; } exports.relative = relative; function toSetString(aStr) { return '$' + aStr; } exports.toSetString = toSetString; function fromSetString(aStr) { return aStr.substr(1); } exports.fromSetString = fromSetString; function strcmp(aStr1, aStr2) { var s1 = aStr1 || ""; var s2 = aStr2 || ""; return (s1 > s2) - (s1 < s2); } function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { var cmp; cmp = strcmp(mappingA.source, mappingB.source); if (cmp) { return cmp; } cmp = mappingA.originalLine - mappingB.originalLine; if (cmp) { return cmp; } cmp = mappingA.originalColumn - mappingB.originalColumn; if (cmp || onlyCompareOriginal) { return cmp; } cmp = strcmp(mappingA.name, mappingB.name); if (cmp) { return cmp; } cmp = mappingA.generatedLine - mappingB.generatedLine; if (cmp) { return cmp; } return mappingA.generatedColumn - mappingB.generatedColumn; } ; exports.compareByOriginalPositions = compareByOriginalPositions; function compareByGeneratedPositions(mappingA, mappingB, onlyCompareGenerated) { var cmp; cmp = mappingA.generatedLine - mappingB.generatedLine; if (cmp) { return cmp; } cmp = mappingA.generatedColumn - mappingB.generatedColumn; if (cmp || onlyCompareGenerated) { return cmp; } cmp = strcmp(mappingA.source, mappingB.source); if (cmp) { return cmp; } cmp = mappingA.originalLine - mappingB.originalLine; if (cmp) { return cmp; } cmp = mappingA.originalColumn - mappingB.originalColumn; if (cmp) { return cmp; } return strcmp(mappingA.name, mappingB.name); } ; exports.compareByGeneratedPositions = compareByGeneratedPositions; }); define = makeDefine(m, './array-set'); if (typeof define !== 'function') { var define = require('amdefine')(module, require); } define(function(require, exports, module) { var util = require('./util'); function ArraySet() { this._array = []; this._set = {}; } ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { var set = new ArraySet(); for (var i = 0, len = aArray.length; i < len; i++) { set.add(aArray[i], aAllowDuplicates); } return set; }; ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { var isDuplicate = this.has(aStr); var idx = this._array.length; if (!isDuplicate || aAllowDuplicates) { this._array.push(aStr); } if (!isDuplicate) { this._set[util.toSetString(aStr)] = idx; } }; ArraySet.prototype.has = function ArraySet_has(aStr) { return Object.prototype.hasOwnProperty.call(this._set, util.toSetString(aStr)); }; ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { if (this.has(aStr)) { return this._set[util.toSetString(aStr)]; } throw new Error('"' + aStr + '" is not in the set.'); }; ArraySet.prototype.at = function ArraySet_at(aIdx) { if (aIdx >= 0 && aIdx < this._array.length) { return this._array[aIdx]; } throw new Error('No element indexed by ' + aIdx); }; ArraySet.prototype.toArray = function ArraySet_toArray() { return this._array.slice(); }; exports.ArraySet = ArraySet; }); define = makeDefine(m, './base64'); if (typeof define !== 'function') { var define = require('amdefine')(module, require); } define(function(require, exports, module) { var charToIntMap = {}; var intToCharMap = {}; 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('').forEach(function(ch, index) { charToIntMap[ch] = index; intToCharMap[index] = ch; }); exports.encode = function base64_encode(aNumber) { if (aNumber in intToCharMap) { return intToCharMap[aNumber]; } throw new TypeError("Must be between 0 and 63: " + aNumber); }; exports.decode = function base64_decode(aChar) { if (aChar in charToIntMap) { return charToIntMap[aChar]; } throw new TypeError("Not a valid base 64 digit: " + aChar); }; }); define = makeDefine(m, './base64-vlq'); if (typeof define !== 'function') { var define = require('amdefine')(module, require); } define(function(require, exports, module) { var base64 = require('./base64'); var VLQ_BASE_SHIFT = 5; var VLQ_BASE = 1 << VLQ_BASE_SHIFT; var VLQ_BASE_MASK = VLQ_BASE - 1; var VLQ_CONTINUATION_BIT = VLQ_BASE; function toVLQSigned(aValue) { return aValue < 0 ? ((-aValue) << 1) + 1 : (aValue << 1) + 0; } function fromVLQSigned(aValue) { var isNegative = (aValue & 1) === 1; var shifted = aValue >> 1; return isNegative ? -shifted : shifted; } exports.encode = function base64VLQ_encode(aValue) { var encoded = ""; var digit; var vlq = toVLQSigned(aValue); do { digit = vlq & VLQ_BASE_MASK; vlq >>>= VLQ_BASE_SHIFT; if (vlq > 0) { digit |= VLQ_CONTINUATION_BIT; } encoded += base64.encode(digit); } while (vlq > 0); return encoded; }; exports.decode = function base64VLQ_decode(aStr, aOutParam) { var i = 0; var strLen = aStr.length; var result = 0; var shift = 0; var continuation, digit; do { if (i >= strLen) { throw new Error("Expected more digits in base 64 VLQ value."); } digit = base64.decode(aStr.charAt(i++)); continuation = !!(digit & VLQ_CONTINUATION_BIT); digit &= VLQ_BASE_MASK; result = result + (digit << shift); shift += VLQ_BASE_SHIFT; } while (continuation); aOutParam.value = fromVLQSigned(result); aOutParam.rest = aStr.slice(i); }; }); define = makeDefine(m, './binary-search'); if (typeof define !== 'function') { var define = require('amdefine')(module, require); } define(function(require, exports, module) { function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) { var mid = Math.floor((aHigh - aLow) / 2) + aLow; var cmp = aCompare(aNeedle, aHaystack[mid], true); if (cmp === 0) { return mid; } else if (cmp > 0) { if (aHigh - mid > 1) { return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare); } return mid; } else { if (mid - aLow > 1) { return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare); } return aLow < 0 ? -1 : aLow; } } exports.search = function search(aNeedle, aHaystack, aCompare) { if (aHaystack.length === 0) { return -1; } return recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare); }; }); define = makeDefine(m, './mapping-list'); if (typeof define !== 'function') { var define = require('amdefine')(module, require); } define(function(require, exports, module) { var util = require('./util'); function generatedPositionAfter(mappingA, mappingB) { var lineA = mappingA.generatedLine; var lineB = mappingB.generatedLine; var columnA = mappingA.generatedColumn; var columnB = mappingB.generatedColumn; return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositions(mappingA, mappingB) <= 0; } function MappingList() { this._array = []; this._sorted = true; this._last = { generatedLine: -1, generatedColumn: 0 }; } MappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) { this._array.forEach(aCallback, aThisArg); }; MappingList.prototype.add = function MappingList_add(aMapping) { var mapping; if (generatedPositionAfter(this._last, aMapping)) { this._last = aMapping; this._array.push(aMapping); } else { this._sorted = false; this._array.push(aMapping); } }; MappingList.prototype.toArray = function MappingList_toArray() { if (!this._sorted) { this._array.sort(util.compareByGeneratedPositions); this._sorted = true; } return this._array; }; exports.MappingList = MappingList; }); define = makeDefine(m, './source-map-generator'); if (typeof define !== 'function') { var define = require('amdefine')(module, require); } define(function(require, exports, module) { var base64VLQ = require('./base64-vlq'); var util = require('./util'); var ArraySet = require('./array-set').ArraySet; var MappingList = require('./mapping-list').MappingList; function SourceMapGenerator(aArgs) { if (!aArgs) { aArgs = {}; } this._file = util.getArg(aArgs, 'file', null); this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); this._skipValidation = util.getArg(aArgs, 'skipValidation', false); this._sources = new ArraySet(); this._names = new ArraySet(); this._mappings = new MappingList(); this._sourcesContents = null; } SourceMapGenerator.prototype._version = 3; SourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { var sourceRoot = aSourceMapConsumer.sourceRoot; var generator = new SourceMapGenerator({ file: aSourceMapConsumer.file, sourceRoot: sourceRoot }); aSourceMapConsumer.eachMapping(function(mapping) { var newMapping = {generated: { line: mapping.generatedLine, column: mapping.generatedColumn }}; if (mapping.source != null) { newMapping.source = mapping.source; if (sourceRoot != null) { newMapping.source = util.relative(sourceRoot, newMapping.source); } newMapping.original = { line: mapping.originalLine, column: mapping.originalColumn }; if (mapping.name != null) { newMapping.name = mapping.name; } } generator.addMapping(newMapping); }); aSourceMapConsumer.sources.forEach(function(sourceFile) { var content = aSourceMapConsumer.sourceContentFor(sourceFile); if (content != null) { generator.setSourceContent(sourceFile, content); } }); return generator; }; SourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) { var generated = util.getArg(aArgs, 'generated'); var original = util.getArg(aArgs, 'original', null); var source = util.getArg(aArgs, 'source', null); var name = util.getArg(aArgs, 'name', null); if (!this._skipValidation) { this._validateMapping(generated, original, source, name); } if (source != null && !this._sources.has(source)) { this._sources.add(source); } if (name != null && !this._names.has(name)) { this._names.add(name); } this._mappings.add({ generatedLine: generated.line, generatedColumn: generated.column, originalLine: original != null && original.line, originalColumn: original != null && original.column, source: source, name: name }); }; SourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { var source = aSourceFile; if (this._sourceRoot != null) { source = util.relative(this._sourceRoot, source); } if (aSourceContent != null) { if (!this._sourcesContents) { this._sourcesContents = {}; } this._sourcesContents[util.toSetString(source)] = aSourceContent; } else if (this._sourcesContents) { delete this._sourcesContents[util.toSetString(source)]; if (Object.keys(this._sourcesContents).length === 0) { this._sourcesContents = null; } } }; SourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { var sourceFile = aSourceFile; if (aSourceFile == null) { if (aSourceMapConsumer.file == null) { throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 'or the source map\'s "file" property. Both were omitted.'); } sourceFile = aSourceMapConsumer.file; } var sourceRoot = this._sourceRoot; if (sourceRoot != null) { sourceFile = util.relative(sourceRoot, sourceFile); } var newSources = new ArraySet(); var newNames = new ArraySet(); this._mappings.unsortedForEach(function(mapping) { if (mapping.source === sourceFile && mapping.originalLine != null) { var original = aSourceMapConsumer.originalPositionFor({ line: mapping.originalLine, column: mapping.originalColumn }); if (original.source != null) { mapping.source = original.source; if (aSourceMapPath != null) { mapping.source = util.join(aSourceMapPath, mapping.source); } if (sourceRoot != null) { mapping.source = util.relative(sourceRoot, mapping.source); } mapping.originalLine = original.line; mapping.originalColumn = original.column; if (original.name != null) { mapping.name = original.name; } } } var source = mapping.source; if (source != null && !newSources.has(source)) { newSources.add(source); } var name = mapping.name; if (name != null && !newNames.has(name)) { newNames.add(name); } }, this); this._sources = newSources; this._names = newNames; aSourceMapConsumer.sources.forEach(function(sourceFile) { var content = aSourceMapConsumer.sourceContentFor(sourceFile); if (content != null) { if (aSourceMapPath != null) { sourceFile = util.join(aSourceMapPath, sourceFile); } if (sourceRoot != null) { sourceFile = util.relative(sourceRoot, sourceFile); } this.setSourceContent(sourceFile, content); } }, this); }; SourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) { if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) { return; } else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aOriginal && 'line' in aOriginal && 'column' in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) { return; } else { throw new Error('Invalid mapping: ' + JSON.stringify({ generated: aGenerated, source: aSource, original: aOriginal, name: aName })); } }; SourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() { var previousGeneratedColumn = 0; var previousGeneratedLine = 1; var previousOriginalColumn = 0; var previousOriginalLine = 0; var previousName = 0; var previousSource = 0; var result = ''; var mapping; var mappings = this._mappings.toArray(); for (var i = 0, len = mappings.length; i < len; i++) { mapping = mappings[i]; if (mapping.generatedLine !== previousGeneratedLine) { previousGeneratedColumn = 0; while (mapping.generatedLine !== previousGeneratedLine) { result += ';'; previousGeneratedLine++; } } else { if (i > 0) { if (!util.compareByGeneratedPositions(mapping, mappings[i - 1])) { continue; } result += ','; } } result += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn); previousGeneratedColumn = mapping.generatedColumn; if (mapping.source != null) { result += base64VLQ.encode(this._sources.indexOf(mapping.source) - previousSource); previousSource = this._sources.indexOf(mapping.source); result += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine); previousOriginalLine = mapping.originalLine - 1; result += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn); previousOriginalColumn = mapping.originalColumn; if (mapping.name != null) { result += base64VLQ.encode(this._names.indexOf(mapping.name) - previousName); previousName = this._names.indexOf(mapping.name); } } } return result; }; SourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { return aSources.map(function(source) { if (!this._sourcesContents) { return null; } if (aSourceRoot != null) { source = util.relative(aSourceRoot, source); } var key = util.toSetString(source); return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null; }, this); }; SourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() { var map = { version: this._version, sources: this._sources.toArray(), names: this._names.toArray(), mappings: this._serializeMappings() }; if (this._file != null) { map.file = this._file; } if (this._sourceRoot != null) { map.sourceRoot = this._sourceRoot; } if (this._sourcesContents) { map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); } return map; }; SourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() { return JSON.stringify(this); }; exports.SourceMapGenerator = SourceMapGenerator; }); define = makeDefine(m, './source-map-consumer'); if (typeof define !== 'function') { var define = require('amdefine')(module, require); } define(function(require, exports, module) { var util = require('./util'); var binarySearch = require('./binary-search'); var ArraySet = require('./array-set').ArraySet; var base64VLQ = require('./base64-vlq'); function SourceMapConsumer(aSourceMap) { var sourceMap = aSourceMap; if (typeof aSourceMap === 'string') { sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); } var version = util.getArg(sourceMap, 'version'); var sources = util.getArg(sourceMap, 'sources'); var names = util.getArg(sourceMap, 'names', []); var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); var mappings = util.getArg(sourceMap, 'mappings'); var file = util.getArg(sourceMap, 'file', null); if (version != this._version) { throw new Error('Unsupported version: ' + version); } sources = sources.map(util.normalize); this._names = ArraySet.fromArray(names, true); this._sources = ArraySet.fromArray(sources, true); this.sourceRoot = sourceRoot; this.sourcesContent = sourcesContent; this._mappings = mappings; this.file = file; } SourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap) { var smc = Object.create(SourceMapConsumer.prototype); smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); smc.sourceRoot = aSourceMap._sourceRoot; smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot); smc.file = aSourceMap._file; smc.__generatedMappings = aSourceMap._mappings.toArray().slice(); smc.__originalMappings = aSourceMap._mappings.toArray().slice().sort(util.compareByOriginalPositions); return smc; }; SourceMapConsumer.prototype._version = 3; Object.defineProperty(SourceMapConsumer.prototype, 'sources', {get: function() { return this._sources.toArray().map(function(s) { return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; }, this); }}); SourceMapConsumer.prototype.__generatedMappings = null; Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {get: function() { if (!this.__generatedMappings) { this.__generatedMappings = []; this.__originalMappings = []; this._parseMappings(this._mappings, this.sourceRoot); } return this.__generatedMappings; }}); SourceMapConsumer.prototype.__originalMappings = null; Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {get: function() { if (!this.__originalMappings) { this.__generatedMappings = []; this.__originalMappings = []; this._parseMappings(this._mappings, this.sourceRoot); } return this.__originalMappings; }}); SourceMapConsumer.prototype._nextCharIsMappingSeparator = function SourceMapConsumer_nextCharIsMappingSeparator(aStr) { var c = aStr.charAt(0); return c === ";" || c === ","; }; SourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { var generatedLine = 1; var previousGeneratedColumn = 0; var previousOriginalLine = 0; var previousOriginalColumn = 0; var previousSource = 0; var previousName = 0; var str = aStr; var temp = {}; var mapping; while (str.length > 0) { if (str.charAt(0) === ';') { generatedLine++; str = str.slice(1); previousGeneratedColumn = 0; } else if (str.charAt(0) === ',') { str = str.slice(1); } else { mapping = {}; mapping.generatedLine = generatedLine; base64VLQ.decode(str, temp); mapping.generatedColumn = previousGeneratedColumn + temp.value; previousGeneratedColumn = mapping.generatedColumn; str = temp.rest; if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) { base64VLQ.decode(str, temp); mapping.source = this._sources.at(previousSource + temp.value); previousSource += temp.value; str = temp.rest; if (str.length === 0 || this._nextCharIsMappingSeparator(str)) { throw new Error('Found a source, but no line and column'); } base64VLQ.decode(str, temp); mapping.originalLine = previousOriginalLine + temp.value; previousOriginalLine = mapping.originalLine; mapping.originalLine += 1; str = temp.rest; if (str.length === 0 || this._nextCharIsMappingSeparator(str)) { throw new Error('Found a source and line, but no column'); } base64VLQ.decode(str, temp); mapping.originalColumn = previousOriginalColumn + temp.value; previousOriginalColumn = mapping.originalColumn; str = temp.rest; if (str.length > 0 && !this._nextCharIsMappingSeparator(str)) { base64VLQ.decode(str, temp); mapping.name = this._names.at(previousName + temp.value); previousName += temp.value; str = temp.rest; } } this.__generatedMappings.push(mapping); if (typeof mapping.originalLine === 'number') { this.__originalMappings.push(mapping); } } } this.__generatedMappings.sort(util.compareByGeneratedPositions); this.__originalMappings.sort(util.compareByOriginalPositions); }; SourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator) { if (aNeedle[aLineName] <= 0) { throw new TypeError('Line must be greater than or equal to 1, got ' + aNeedle[aLineName]); } if (aNeedle[aColumnName] < 0) { throw new TypeError('Column must be greater than or equal to 0, got ' + aNeedle[aColumnName]); } return binarySearch.search(aNeedle, aMappings, aComparator); }; SourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() { for (var index = 0; index < this._generatedMappings.length; ++index) { var mapping = this._generatedMappings[index]; if (index + 1 < this._generatedMappings.length) { var nextMapping = this._generatedMappings[index + 1]; if (mapping.generatedLine === nextMapping.generatedLine) { mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; continue; } } mapping.lastGeneratedColumn = Infinity; } }; SourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) { var needle = { generatedLine: util.getArg(aArgs, 'line'), generatedColumn: util.getArg(aArgs, 'column') }; var index = this._findMapping(needle, this._generatedMappings, "generatedLine", "generatedColumn", util.compareByGeneratedPositions); if (index >= 0) { var mapping = this._generatedMappings[index]; if (mapping.generatedLine === needle.generatedLine) { var source = util.getArg(mapping, 'source', null); if (source != null && this.sourceRoot != null) { source = util.join(this.sourceRoot, source); } return { source: source, line: util.getArg(mapping, 'originalLine', null), column: util.getArg(mapping, 'originalColumn', null), name: util.getArg(mapping, 'name', null) }; } } return { source: null, line: null, column: null, name: null }; }; SourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource) { if (!this.sourcesContent) { return null; } if (this.sourceRoot != null) { aSource = util.relative(this.sourceRoot, aSource); } if (this._sources.has(aSource)) { return this.sourcesContent[this._sources.indexOf(aSource)]; } var url; if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) { var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); if (url.scheme == "file" && this._sources.has(fileUriAbsPath)) { return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]; } if ((!url.path || url.path == "/") && this._sources.has("/" + aSource)) { return this.sourcesContent[this._sources.indexOf("/" + aSource)]; } } throw new Error('"' + aSource + '" is not in the SourceMap.'); }; SourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) { var needle = { source: util.getArg(aArgs, 'source'), originalLine: util.getArg(aArgs, 'line'), originalColumn: util.getArg(aArgs, 'column') }; if (this.sourceRoot != null) { needle.source = util.relative(this.sourceRoot, needle.source); } var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions); if (index >= 0) { var mapping = this._originalMappings[index]; return { line: util.getArg(mapping, 'generatedLine', null), column: util.getArg(mapping, 'generatedColumn', null), lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) }; } return { line: null, column: null, lastColumn: null }; }; SourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { var needle = { source: util.getArg(aArgs, 'source'), originalLine: util.getArg(aArgs, 'line'), originalColumn: Infinity }; if (this.sourceRoot != null) { needle.source = util.relative(this.sourceRoot, needle.source); } var mappings = []; var index = this._findMapping(needle, this._originalMappings, "originalLine", "originalColumn", util.compareByOriginalPositions); if (index >= 0) { var mapping = this._originalMappings[index]; while (mapping && mapping.originalLine === needle.originalLine) { mappings.push({ line: util.getArg(mapping, 'generatedLine', null), column: util.getArg(mapping, 'generatedColumn', null), lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) }); mapping = this._originalMappings[--index]; } } return mappings.reverse(); }; SourceMapConsumer.GENERATED_ORDER = 1; SourceMapConsumer.ORIGINAL_ORDER = 2; SourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { var context = aContext || null; var order = aOrder || SourceMapConsumer.GENERATED_ORDER; var mappings; switch (order) { case SourceMapConsumer.GENERATED_ORDER: mappings = this._generatedMappings; break; case SourceMapConsumer.ORIGINAL_ORDER: mappings = this._originalMappings; break; default: throw new Error("Unknown order of iteration."); } var sourceRoot = this.sourceRoot; mappings.map(function(mapping) { var source = mapping.source; if (source != null && sourceRoot != null) { source = util.join(sourceRoot, source); } return { source: source, generatedLine: mapping.generatedLine, generatedColumn: mapping.generatedColumn, originalLine: mapping.originalLine, originalColumn: mapping.originalColumn, name: mapping.name }; }).forEach(aCallback, context); }; exports.SourceMapConsumer = SourceMapConsumer; }); define = makeDefine(m, './source-node'); if (typeof define !== 'function') { var define = require('amdefine')(module, require); } define(function(require, exports, module) { var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator; var util = require('./util'); var REGEX_NEWLINE = /(\r?\n)/; var NEWLINE_CODE = 10; var isSourceNode = "$$$isSourceNode$$$"; function SourceNode(aLine, aColumn, aSource, aChunks, aName) { this.children = []; this.sourceContents = {}; this.line = aLine == null ? null : aLine; this.column = aColumn == null ? null : aColumn; this.source = aSource == null ? null : aSource; this.name = aName == null ? null : aName; this[isSourceNode] = true; if (aChunks != null) this.add(aChunks); } SourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { var node = new SourceNode(); var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); var shiftNextLine = function() { var lineContents = remainingLines.shift(); var newLine = remainingLines.shift() || ""; return lineContents + newLine; }; var lastGeneratedLine = 1, lastGeneratedColumn = 0; var lastMapping = null; aSourceMapConsumer.eachMapping(function(mapping) { if (lastMapping !== null) { if (lastGeneratedLine < mapping.generatedLine) { var code = ""; addMappingWithCode(lastMapping, shiftNextLine()); lastGeneratedLine++; lastGeneratedColumn = 0; } else { var nextLine = remainingLines[0]; var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn); remainingLines[0] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn); lastGeneratedColumn = mapping.generatedColumn; addMappingWithCode(lastMapping, code); lastMapping = mapping; return; } } while (lastGeneratedLine < mapping.generatedLine) { node.add(shiftNextLine()); lastGeneratedLine++; } if (lastGeneratedColumn < mapping.generatedColumn) { var nextLine = remainingLines[0]; node.add(nextLine.substr(0, mapping.generatedColumn)); remainingLines[0] = nextLine.substr(mapping.generatedColumn); lastGeneratedColumn = mapping.generatedColumn; } lastMapping = mapping; }, this); if (remainingLines.length > 0) { if (lastMapping) { addMappingWithCode(lastMapping, shiftNextLine()); } node.add(remainingLines.join("")); } aSourceMapConsumer.sources.forEach(function(sourceFile) { var content = aSourceMapConsumer.sourceContentFor(sourceFile); if (content != null) { if (aRelativePath != null) { sourceFile = util.join(aRelativePath, sourceFile); } node.setSourceContent(sourceFile, content); } }); return node; function addMappingWithCode(mapping, code) { if (mapping === null || mapping.source === undefined) { node.add(code); } else { var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source; node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name)); } } }; SourceNode.prototype.add = function SourceNode_add(aChunk) { if (Array.isArray(aChunk)) { aChunk.forEach(function(chunk) { this.add(chunk); }, this); } else if (aChunk[isSourceNode] || typeof aChunk === "string") { if (aChunk) { this.children.push(aChunk); } } else { throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk); } return this; }; SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { if (Array.isArray(aChunk)) { for (var i = aChunk.length - 1; i >= 0; i--) { this.prepend(aChunk[i]); } } else if (aChunk[isSourceNode] || typeof aChunk === "string") { this.children.unshift(aChunk); } else { throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk); } return this; }; SourceNode.prototype.walk = function SourceNode_walk(aFn) { var chunk; for (var i = 0, len = this.children.length; i < len; i++) { chunk = this.children[i]; if (chunk[isSourceNode]) { chunk.walk(aFn); } else { if (chunk !== '') { aFn(chunk, { source: this.source, line: this.line, column: this.column, name: this.name }); } } } }; SourceNode.prototype.join = function SourceNode_join(aSep) { var newChildren; var i; var len = this.children.length; if (len > 0) { newChildren = []; for (i = 0; i < len - 1; i++) { newChildren.push(this.children[i]); newChildren.push(aSep); } newChildren.push(this.children[i]); this.children = newChildren; } return this; }; SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { var lastChild = this.children[this.children.length - 1]; if (lastChild[isSourceNode]) { lastChild.replaceRight(aPattern, aReplacement); } else if (typeof lastChild === 'string') { this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); } else { this.children.push(''.replace(aPattern, aReplacement)); } return this; }; SourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) { this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; }; SourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) { for (var i = 0, len = this.children.length; i < len; i++) { if (this.children[i][isSourceNode]) { this.children[i].walkSourceContents(aFn); } } var sources = Object.keys(this.sourceContents); for (var i = 0, len = sources.length; i < len; i++) { aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); } }; SourceNode.prototype.toString = function SourceNode_toString() { var str = ""; this.walk(function(chunk) { str += chunk; }); return str; }; SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { var generated = { code: "", line: 1, column: 0 }; var map = new SourceMapGenerator(aArgs); var sourceMappingActive = false; var lastOriginalSource = null; var lastOriginalLine = null; var lastOriginalColumn = null; var lastOriginalName = null; this.walk(function(chunk, original) { generated.code += chunk; if (original.source !== null && original.line !== null && original.column !== null) { if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) { map.addMapping({ source: original.source, original: { line: original.line, column: original.column }, generated: { line: generated.line, column: generated.column }, name: original.name }); } lastOriginalSource = original.source; lastOriginalLine = original.line; lastOriginalColumn = original.column; lastOriginalName = original.name; sourceMappingActive = true; } else if (sourceMappingActive) { map.addMapping({generated: { line: generated.line, column: generated.column }}); lastOriginalSource = null; sourceMappingActive = false; } for (var idx = 0, length = chunk.length; idx < length; idx++) { if (chunk.charCodeAt(idx) === NEWLINE_CODE) { generated.line++; generated.column = 0; if (idx + 1 === length) { lastOriginalSource = null; sourceMappingActive = false; } else if (sourceMappingActive) { map.addMapping({ source: original.source, original: { line: original.line, column: original.column }, generated: { line: generated.line, column: generated.column }, name: original.name }); } } else { generated.column++; } } }); this.walkSourceContents(function(sourceFile, sourceContent) { map.setSourceContent(sourceFile, sourceContent); }); return { code: generated.code, map: map }; }; exports.SourceNode = SourceNode; }); var SourceMapGenerator = m['./source-map-generator'].SourceMapGenerator; var SourceMapConsumer = m['./source-map-consumer'].SourceMapConsumer; var SourceNode = m['./source-node'].SourceNode; var join = m['./util'].join; return { get SourceMapGenerator() { return SourceMapGenerator; }, get SourceMapConsumer() { return SourceMapConsumer; }, get SourceNode() { return SourceNode; }, get join() { return join; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/toSource.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/outputgeneration/toSource.js"; var ParseTreeMapWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeMapWriter.js", "traceur@0.0.112/src/outputgeneration/toSource.js")).ParseTreeMapWriter; var ParseTreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeWriter.js", "traceur@0.0.112/src/outputgeneration/toSource.js")).ParseTreeWriter; var SourceMapGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SourceMapIntegration.js", "traceur@0.0.112/src/outputgeneration/toSource.js")).SourceMapGenerator; function toSource(tree) { var options = arguments[1]; var outputName = arguments[2] !== (void 0) ? arguments[2] : ''; var sourceRoot = arguments[3]; var sourceMapGenerator = options && options.sourceMapGenerator; var sourcemaps = options && options.sourceMaps; if (!sourceMapGenerator && sourcemaps) { sourceMapGenerator = new SourceMapGenerator({ file: outputName, sourceRoot: sourceRoot, skipValidation: true }); } var sourceMapConfiguration = { sourceMapGenerator: sourceMapGenerator, sourceRoot: sourceRoot, lowResolution: options && options.lowResolutionSourceMap }; var writer; if (sourceMapGenerator) writer = new ParseTreeMapWriter(sourceMapConfiguration, options); else writer = new ParseTreeWriter(options); writer.visitAny(tree); return [writer.toString(), sourceMapGenerator && sourceMapGenerator.toString()]; } return {get toSource() { return toSource; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/TreeWriter.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/outputgeneration/TreeWriter.js"; var toSource = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./toSource.js", "traceur@0.0.112/src/outputgeneration/TreeWriter.js")).toSource; function write(tree) { var $__2, $__3; var options = arguments[1]; var outputName = arguments[2] !== (void 0) ? arguments[2] : ''; var sourceRoot = arguments[3]; var $__1 = toSource(tree, options, outputName, sourceRoot), result = ($__2 = $__1[Symbol.iterator](), ($__3 = $__2.next()).done ? void 0 : $__3.value), sourceMap = ($__3 = $__2.next()).done ? void 0 : $__3.value; if (sourceMap) options.generatedSourceMap = sourceMap; return result; } var TreeWriter = function() { function TreeWriter() {} return ($traceurRuntime.createClass)(TreeWriter, {}, {}); }(); TreeWriter.write = write; return { get write() { return write; }, get TreeWriter() { return TreeWriter; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/syntax/ParseTreeValidator.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/syntax/ParseTreeValidator.js"; var NewExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")).NewExpression; var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeVisitor.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")).ParseTreeVisitor; var TreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../outputgeneration/TreeWriter.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")).TreeWriter; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TokenType.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")), AMPERSAND = $__7.AMPERSAND, AMPERSAND_EQUAL = $__7.AMPERSAND_EQUAL, AND = $__7.AND, BAR = $__7.BAR, BAR_EQUAL = $__7.BAR_EQUAL, CARET = $__7.CARET, CARET_EQUAL = $__7.CARET_EQUAL, CLOSE_ANGLE = $__7.CLOSE_ANGLE, EQUAL = $__7.EQUAL, EQUAL_EQUAL = $__7.EQUAL_EQUAL, EQUAL_EQUAL_EQUAL = $__7.EQUAL_EQUAL_EQUAL, GREATER_EQUAL = $__7.GREATER_EQUAL, IDENTIFIER = $__7.IDENTIFIER, IN = $__7.IN, INSTANCEOF = $__7.INSTANCEOF, LEFT_SHIFT = $__7.LEFT_SHIFT, LEFT_SHIFT_EQUAL = $__7.LEFT_SHIFT_EQUAL, LESS_EQUAL = $__7.LESS_EQUAL, MINUS = $__7.MINUS, MINUS_EQUAL = $__7.MINUS_EQUAL, NOT_EQUAL = $__7.NOT_EQUAL, NOT_EQUAL_EQUAL = $__7.NOT_EQUAL_EQUAL, NUMBER = $__7.NUMBER, OPEN_ANGLE = $__7.OPEN_ANGLE, OR = $__7.OR, PERCENT = $__7.PERCENT, PERCENT_EQUAL = $__7.PERCENT_EQUAL, PLUS = $__7.PLUS, PLUS_EQUAL = $__7.PLUS_EQUAL, RIGHT_SHIFT = $__7.RIGHT_SHIFT, RIGHT_SHIFT_EQUAL = $__7.RIGHT_SHIFT_EQUAL, SLASH = $__7.SLASH, SLASH_EQUAL = $__7.SLASH_EQUAL, STAR = $__7.STAR, STAR_EQUAL = $__7.STAR_EQUAL, STAR_STAR = $__7.STAR_STAR, STAR_STAR_EQUAL = $__7.STAR_STAR_EQUAL, STRING = $__7.STRING, UNSIGNED_RIGHT_SHIFT = $__7.UNSIGNED_RIGHT_SHIFT, UNSIGNED_RIGHT_SHIFT_EQUAL = $__7.UNSIGNED_RIGHT_SHIFT_EQUAL, YIELD = $__7.YIELD; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./trees/ParseTreeType.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")), ARRAY_PATTERN = $__8.ARRAY_PATTERN, ASSIGNMENT_ELEMENT = $__8.ASSIGNMENT_ELEMENT, BINDING_ELEMENT = $__8.BINDING_ELEMENT, BINDING_IDENTIFIER = $__8.BINDING_IDENTIFIER, BLOCK = $__8.BLOCK, CASE_CLAUSE = $__8.CASE_CLAUSE, CATCH = $__8.CATCH, CLASS_DECLARATION = $__8.CLASS_DECLARATION, COMPUTED_PROPERTY_NAME = $__8.COMPUTED_PROPERTY_NAME, DEFAULT_CLAUSE = $__8.DEFAULT_CLAUSE, EXPORT_DEFAULT = $__8.EXPORT_DEFAULT, EXPORT_SPECIFIER = $__8.EXPORT_SPECIFIER, EXPORT_SPECIFIER_SET = $__8.EXPORT_SPECIFIER_SET, EXPORT_STAR = $__8.EXPORT_STAR, FINALLY = $__8.FINALLY, FORMAL_PARAMETER = $__8.FORMAL_PARAMETER, FORMAL_PARAMETER_LIST = $__8.FORMAL_PARAMETER_LIST, FORWARD_DEFAULT_EXPORT = $__8.FORWARD_DEFAULT_EXPORT, FUNCTION_BODY = $__8.FUNCTION_BODY, FUNCTION_DECLARATION = $__8.FUNCTION_DECLARATION, GET_ACCESSOR = $__8.GET_ACCESSOR, IDENTIFIER_EXPRESSION = $__8.IDENTIFIER_EXPRESSION, IMPORTED_BINDING = $__8.IMPORTED_BINDING, IMPORT_CLAUSE_PAIR = $__8.IMPORT_CLAUSE_PAIR, IMPORT_SPECIFIER_SET = $__8.IMPORT_SPECIFIER_SET, IMPORT_TYPE_CLAUSE = $__8.IMPORT_TYPE_CLAUSE, JSX_ATTRIBUTE = $__8.JSX_ATTRIBUTE, JSX_ELEMENT_NAME = $__8.JSX_ELEMENT_NAME, JSX_ELEMENT = $__8.JSX_ELEMENT, JSX_PLACEHOLDER = $__8.JSX_PLACEHOLDER, JSX_SPREAD_ATTRIBUTE = $__8.JSX_SPREAD_ATTRIBUTE, JSX_TEXT = $__8.JSX_TEXT, LITERAL_PROPERTY_NAME = $__8.LITERAL_PROPERTY_NAME, METHOD = $__8.METHOD, MODULE_SPECIFIER = $__8.MODULE_SPECIFIER, NAMED_EXPORT = $__8.NAMED_EXPORT, NAME_SPACE_EXPORT = $__8.NAME_SPACE_EXPORT, NAME_SPACE_IMPORT = $__8.NAME_SPACE_IMPORT, OBJECT_PATTERN = $__8.OBJECT_PATTERN, OBJECT_PATTERN_FIELD = $__8.OBJECT_PATTERN_FIELD, PROPERTY_NAME_ASSIGNMENT = $__8.PROPERTY_NAME_ASSIGNMENT, PROPERTY_NAME_SHORTHAND = $__8.PROPERTY_NAME_SHORTHAND, PROPERTY_VARIABLE_DECLARATION = $__8.PROPERTY_VARIABLE_DECLARATION, REST_PARAMETER = $__8.REST_PARAMETER, SET_ACCESSOR = $__8.SET_ACCESSOR, SPREAD_EXPRESSION = $__8.SPREAD_EXPRESSION, TEMPLATE_LITERAL_PORTION = $__8.TEMPLATE_LITERAL_PORTION, TEMPLATE_SUBSTITUTION = $__8.TEMPLATE_SUBSTITUTION, TYPE_ALIAS_DECLARATION = $__8.TYPE_ALIAS_DECLARATION, TYPE_ARGUMENTS = $__8.TYPE_ARGUMENTS, TYPE_NAME = $__8.TYPE_NAME, TYPE_PARAMETER = $__8.TYPE_PARAMETER, TYPE_PARAMETERS = $__8.TYPE_PARAMETERS, VARIABLE_DECLARATION_LIST = $__8.VARIABLE_DECLARATION_LIST, VARIABLE_STATEMENT = $__8.VARIABLE_STATEMENT; var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/syntax/ParseTreeValidator.js")).assert; var ValidationError = function($__super) { function ValidationError(tree, message) { $traceurRuntime.superConstructor(ValidationError).call(this); this.tree = tree; this.message = message; } return ($traceurRuntime.createClass)(ValidationError, {}, {}, $__super); }(Error); var ParseTreeValidator = function($__super) { function ParseTreeValidator() { $traceurRuntime.superConstructor(ParseTreeValidator).apply(this, arguments); } return ($traceurRuntime.createClass)(ParseTreeValidator, { fail_: function(tree, message) { throw new ValidationError(tree, message); }, check_: function(condition, tree, message) { if (!condition) { this.fail_(tree, message); } }, checkVisit_: function(condition, tree, message) { this.check_(condition, tree, message); this.visitAny(tree); }, checkType_: function(type, tree, message) { this.checkVisit_(tree.type === type, tree, message); }, visitArgumentList: function(tree) { for (var i = 0; i < tree.args.length; i++) { var argument = tree.args[i]; this.checkVisit_(argument.isAssignmentOrSpread(), argument, 'assignment or spread expected'); } }, visitArrayLiteral: function(tree) { for (var i = 0; i < tree.elements.length; i++) { var element = tree.elements[i]; this.checkVisit_(element === null || element.isAssignmentOrSpread(), element, 'assignment or spread expected'); } }, visitArrayPattern: function(tree) { for (var i = 0; i < tree.elements.length; i++) { var element = tree.elements[i]; this.checkVisit_(element === null || element.type === BINDING_ELEMENT || element.type === ASSIGNMENT_ELEMENT || element.isLeftHandSideExpression() || element.isPattern() || element.isSpreadPatternElement(), element, 'null, sub pattern, left hand side expression or spread expected'); if (element && element.isSpreadPatternElement()) { this.check_(i === (tree.elements.length - 1), element, 'spread in array patterns must be the last element'); } } }, visitBinaryExpression: function(tree) { switch (tree.operator.type) { case EQUAL: case STAR_EQUAL: case STAR_STAR_EQUAL: case SLASH_EQUAL: case PERCENT_EQUAL: case PLUS_EQUAL: case MINUS_EQUAL: case LEFT_SHIFT_EQUAL: case RIGHT_SHIFT_EQUAL: case UNSIGNED_RIGHT_SHIFT_EQUAL: case AMPERSAND_EQUAL: case CARET_EQUAL: case BAR_EQUAL: this.check_(tree.left.isLeftHandSideExpression() || tree.left.isPattern(), tree.left, 'left hand side expression or pattern expected'); this.check_(tree.right.isAssignmentExpression(), tree.right, 'assignment expression expected'); break; case AND: case OR: case BAR: case CARET: case AMPERSAND: case EQUAL_EQUAL: case NOT_EQUAL: case EQUAL_EQUAL_EQUAL: case NOT_EQUAL_EQUAL: case OPEN_ANGLE: case CLOSE_ANGLE: case GREATER_EQUAL: case LESS_EQUAL: case INSTANCEOF: case IN: case LEFT_SHIFT: case RIGHT_SHIFT: case UNSIGNED_RIGHT_SHIFT: case PLUS: case MINUS: case STAR: case SLASH: case PERCENT: case STAR_STAR: this.check_(tree.left.isAssignmentExpression(), tree.left, 'assignment expression expected'); this.check_(tree.right.isAssignmentExpression(), tree.right, 'assignment expression expected'); break; default: this.fail_(tree, 'unexpected binary operator'); } this.visitAny(tree.left); this.visitAny(tree.right); }, visitBindingElement: function(tree) { var binding = tree.binding; this.checkVisit_(binding.type === BINDING_IDENTIFIER || binding.type === OBJECT_PATTERN || binding.type === ARRAY_PATTERN, binding, 'expected valid binding element'); this.visitAny(tree.initializer); }, visitAssignmentElement: function(tree) { var assignment = tree.assignment; this.checkVisit_(assignment.type === OBJECT_PATTERN || assignment.type === ARRAY_PATTERN || assignment.isLeftHandSideExpression(), assignment, 'expected valid assignment element'); this.visitAny(tree.initializer); }, visitBlock: function(tree) { for (var i = 0; i < tree.statements.length; i++) { var statement = tree.statements[i]; this.checkVisit_(statement.isStatementListItem(), statement, 'statement or function declaration expected'); } }, visitCallExpression: function(tree) { this.check_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected'); if (tree.operand instanceof NewExpression) { this.check_(tree.operand.args !== null, tree.operand, 'new args expected'); } this.visitAny(tree.operand); this.visitAny(tree.args); }, visitCaseClause: function(tree) { this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected'); for (var i = 0; i < tree.statements.length; i++) { var statement = tree.statements[i]; this.checkVisit_(statement.isStatementListItem(), statement, 'statement expected'); } }, visitCatch: function(tree) { this.checkVisit_(tree.binding.isPattern() || tree.binding.type === BINDING_IDENTIFIER, tree.binding, 'binding identifier expected'); this.checkVisit_(tree.catchBody.type === BLOCK, tree.catchBody, 'block expected'); }, visitClassDeclaration: function(tree) { this.visitClassShared_(tree); }, visitClassExpression: function(tree) { this.visitClassShared_(tree); }, visitClassShared_: function(tree) { if (tree.typeParameters) { this.checkVisit_(tree.typeParameters.type === TYPE_PARAMETERS, tree.typeParameters, 'type parameters expected'); } for (var i = 0; i < tree.elements.length; i++) { var element = tree.elements[i]; switch (element.type) { case GET_ACCESSOR: case SET_ACCESSOR: case METHOD: case PROPERTY_VARIABLE_DECLARATION: break; default: this.fail_(element, 'class element expected'); } this.visitAny(element); } }, visitCommaExpression: function(tree) { for (var i = 0; i < tree.expressions.length; i++) { var expression = tree.expressions[i]; this.checkVisit_(expression.isExpression(), expression, 'expression expected'); } }, visitConditionalExpression: function(tree) { this.checkVisit_(tree.condition.isAssignmentExpression(), tree.condition, 'expression expected'); this.checkVisit_(tree.left.isAssignmentExpression(), tree.left, 'expression expected'); this.checkVisit_(tree.right.isAssignmentExpression(), tree.right, 'expression expected'); }, visitCoverFormals: function(tree) { this.fail_(tree, 'CoverFormals should have been removed'); }, visitCoverInitializedName: function(tree) { this.fail_(tree, 'CoverInitializedName should have been removed'); }, visitDefaultClause: function(tree) { for (var i = 0; i < tree.statements.length; i++) { var statement = tree.statements[i]; this.checkVisit_(statement.isStatementListItem(), statement, 'statement expected'); } }, visitDoWhileStatement: function(tree) { this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected'); this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected'); }, visitExportDeclaration: function(tree) { var declType = tree.declaration.type; this.checkVisit_(declType === VARIABLE_STATEMENT || declType === FUNCTION_DECLARATION || declType === CLASS_DECLARATION || declType === NAMED_EXPORT || declType === EXPORT_DEFAULT || declType === TYPE_ALIAS_DECLARATION, tree.declaration, 'expected valid export tree'); }, visitNamedExport: function(tree) { var specifierType = tree.exportClause.type; this.checkVisit_(specifierType === EXPORT_SPECIFIER || specifierType === EXPORT_SPECIFIER_SET || specifierType === EXPORT_STAR || specifierType === FORWARD_DEFAULT_EXPORT || specifierType === NAME_SPACE_EXPORT, tree.exportClause, 'Invalid export clause'); if (tree.moduleSpecifier) { this.checkVisit_(tree.moduleSpecifier.type === MODULE_SPECIFIER, tree.moduleSpecifier, 'module expression expected'); } }, visitExportSpecifierSet: function(tree) { this.check_(tree.specifiers.length > 0, tree, 'expected at least one identifier'); for (var i = 0; i < tree.specifiers.length; i++) { var specifier = tree.specifiers[i]; this.checkVisit_(specifier.type === EXPORT_SPECIFIER || specifier.type === IDENTIFIER_EXPRESSION, specifier, 'expected valid export specifier'); } }, visitExpressionStatement: function(tree) { this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected'); }, visitFinally: function(tree) { this.checkVisit_(tree.block.type === BLOCK, tree.block, 'block expected'); }, visitForOfStatement: function(tree) { this.checkVisit_(tree.initializer.isPattern() || tree.initializer.type === IDENTIFIER_EXPRESSION || tree.initializer.type === VARIABLE_DECLARATION_LIST && tree.initializer.declarations.length === 1, tree.initializer, 'for-each statement may not have more than one variable declaration'); this.checkVisit_(tree.collection.isExpression(), tree.collection, 'expression expected'); this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected'); }, visitForInStatement: function(tree) { if (tree.initializer.type === VARIABLE_DECLARATION_LIST) { this.checkVisit_(tree.initializer.declarations.length <= 1, tree.initializer, 'for-in statement may not have more than one variable declaration'); } else { this.checkVisit_(tree.initializer.isPattern() || tree.initializer.isExpression(), tree.initializer, 'variable declaration, expression or ' + 'pattern expected'); } this.checkVisit_(tree.collection.isExpression(), tree.collection, 'expression expected'); this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected'); }, visitFormalParameterList: function(tree) { for (var i = 0; i < tree.parameters.length; i++) { var parameter = tree.parameters[i]; assert(parameter.type === FORMAL_PARAMETER); parameter = parameter.parameter; switch (parameter.type) { case BINDING_ELEMENT: break; case REST_PARAMETER: this.checkVisit_(i === tree.parameters.length - 1, parameter, 'rest parameters must be the last parameter in a parameter list'); this.checkType_(BINDING_IDENTIFIER, parameter.identifier, 'binding identifier expected'); break; default: this.fail_(parameter, 'parameters must be identifiers or rest' + (" parameters. Found: " + parameter.type)); break; } this.visitAny(parameter); } }, visitForStatement: function(tree) { if (tree.initializer !== null) { this.checkVisit_(tree.initializer.isExpression() || tree.initializer.type === VARIABLE_DECLARATION_LIST, tree.initializer, 'variable declaration list or expression expected'); } if (tree.condition !== null) { this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected'); } if (tree.increment !== null) { this.checkVisit_(tree.increment.isExpression(), tree.increment, 'expression expected'); } this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected'); }, visitFunctionBody: function(tree) { for (var i = 0; i < tree.statements.length; i++) { var statement = tree.statements[i]; this.checkVisit_(statement.isStatementListItem(), statement, 'statement expected'); } }, visitFunctionDeclaration: function(tree) { this.checkType_(BINDING_IDENTIFIER, tree.name, 'binding identifier expected'); this.visitFunction_(tree); }, visitFunctionExpression: function(tree) { if (tree.name !== null) { this.checkType_(BINDING_IDENTIFIER, tree.name, 'binding identifier expected'); } this.visitFunction_(tree); }, visitFunction_: function(tree) { this.checkType_(FORMAL_PARAMETER_LIST, tree.parameterList, 'formal parameters expected'); this.checkType_(FUNCTION_BODY, tree.body, 'function body expected'); }, visitGetAccessor: function(tree) { this.checkPropertyName_(tree.name); this.checkType_(FUNCTION_BODY, tree.body, 'function body expected'); }, visitIfStatement: function(tree) { this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected'); this.checkVisit_(tree.ifClause.isStatement(), tree.ifClause, 'statement expected'); if (tree.elseClause !== null) { this.checkVisit_(tree.elseClause.isStatement(), tree.elseClause, 'statement expected'); } }, visitImportDeclaration: function(tree) { if (tree.importClause !== null) { this.check_(tree.importClause.type === NAME_SPACE_IMPORT || tree.importClause.type === IMPORTED_BINDING || tree.importClause.type === IMPORT_SPECIFIER_SET || tree.importClause.type === IMPORT_CLAUSE_PAIR || tree.importClause.type === IMPORT_TYPE_CLAUSE, tree.importClause, 'Invalid import clause'); } this.checkType_(MODULE_SPECIFIER, tree.moduleSpecifier, 'module specifier expected'); }, visitImportSpecifier: function(tree) { this.checkType_(IMPORTED_BINDING, tree.binding, 'ImportedBinding expected'); }, visitImportedBinding: function(tree) { this.checkType_(BINDING_IDENTIFIER, tree.binding, 'binding identifier expected'); }, visitImportClausePair: function(tree) { this.checkType_(IMPORTED_BINDING, tree.first, 'ImportedBinding expected'); this.check_(tree.second.type === NAME_SPACE_IMPORT || tree.second.type === IMPORT_SPECIFIER_SET, tree.second, 'Invalid import clause'); }, visitJsxElement: function(tree) { this.checkType_(JSX_ELEMENT_NAME, tree.name, 'JSX Element Name expected'); for (var i = 0; i < tree.attributes.length; i++) { var attr = tree.attributes[i]; this.checkVisit_(attr.type === JSX_ATTRIBUTE || attr.type === JSX_SPREAD_ATTRIBUTE, attr, 'JSX Attribute expected'); } for (var i$__3 = 0; i$__3 < tree.children.length; i$__3++) { var child = tree.children[i$__3]; this.checkVisit_(child.type === JSX_ELEMENT || child.type === JSX_PLACEHOLDER || child.type === JSX_TEXT, child, 'JSX child expected'); } }, visitLabelledStatement: function(tree) { this.checkVisit_(tree.statement.isStatement(), tree.statement, 'statement expected'); }, visitMemberExpression: function(tree) { this.check_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected'); if (tree.operand instanceof NewExpression) { this.check_(tree.operand.args !== null, tree.operand, 'new args expected'); } this.visitAny(tree.operand); }, visitMemberLookupExpression: function(tree) { this.check_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected'); if (tree.operand instanceof NewExpression) { this.check_(tree.operand.args !== null, tree.operand, 'new args expected'); } this.visitAny(tree.operand); }, visitSyntaxErrorTree: function(tree) { this.fail_(tree, ("parse tree contains SyntaxError: " + tree.message)); }, visitModuleSpecifier: function(tree) { this.check_(tree.token.type === STRING, tree, 'string or identifier expected'); }, visitNewExpression: function(tree) { this.checkVisit_(tree.operand.isMemberExpression(), tree.operand, 'member expression expected'); this.visitAny(tree.args); }, visitObjectLiteral: function(tree) { for (var i = 0; i < tree.propertyNameAndValues.length; i++) { var propertyNameAndValue = tree.propertyNameAndValues[i]; switch (propertyNameAndValue.type) { case GET_ACCESSOR: case SET_ACCESSOR: case METHOD: this.check_(!propertyNameAndValue.isStatic, propertyNameAndValue, 'static is not allowed in object literal expression'); break; case PROPERTY_NAME_ASSIGNMENT: case PROPERTY_NAME_SHORTHAND: case SPREAD_EXPRESSION: break; default: this.fail_(propertyNameAndValue, 'accessor, property name ' + 'assignment or property method assigment expected'); } this.visitAny(propertyNameAndValue); } }, visitObjectPattern: function(tree) { for (var i = 0; i < tree.fields.length; i++) { var field = tree.fields[i]; this.checkVisit_(field.type === OBJECT_PATTERN_FIELD || field.type === ASSIGNMENT_ELEMENT || field.type === BINDING_ELEMENT, field, 'object pattern field expected'); } }, visitObjectPatternField: function(tree) { this.checkPropertyName_(tree.name); this.checkVisit_(tree.element.type === ASSIGNMENT_ELEMENT || tree.element.type === BINDING_ELEMENT || tree.element.isPattern() || tree.element.isLeftHandSideExpression(), tree.element, 'binding element expected'); }, visitParenExpression: function(tree) { if (tree.expression.isPattern()) { this.visitAny(tree.expression); } else { this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected'); } }, visitPostfixExpression: function(tree) { this.checkVisit_(tree.operand.isAssignmentExpression(), tree.operand, 'assignment expression expected'); }, visitPredefinedType: function(tree) {}, visitScript: function(tree) { for (var i = 0; i < tree.scriptItemList.length; i++) { var scriptItemList = tree.scriptItemList[i]; this.checkVisit_(scriptItemList.isScriptElement(), scriptItemList, 'global script item expected'); } }, checkPropertyName_: function(tree) { this.checkVisit_(tree.type === LITERAL_PROPERTY_NAME || tree.type === COMPUTED_PROPERTY_NAME, tree, 'property name expected'); }, visitPropertyNameAssignment: function(tree) { this.checkPropertyName_(tree.name); this.checkVisit_(tree.value.isAssignmentExpression(), tree.value, 'assignment expression expected'); }, visitPropertyNameShorthand: function(tree) { this.check_(tree.name.type === IDENTIFIER || tree.name.type === YIELD || tree.name.isStrictKeyword(), tree, 'identifier token expected'); }, visitLiteralPropertyName: function(tree) { var type = tree.literalToken.type; this.check_(tree.literalToken.isKeyword() || type === IDENTIFIER || type === NUMBER || type === STRING, tree, 'Unexpected token in literal property name'); }, visitTemplateLiteralExpression: function(tree) { if (tree.operand) { this.checkVisit_(tree.operand.isMemberExpression(), tree.operand, 'member or call expression expected'); } for (var i = 0; i < tree.elements.length; i++) { var element = tree.elements[i]; if (i % 2) { this.checkType_(TEMPLATE_SUBSTITUTION, element, 'Template literal substitution expected'); } else { this.checkType_(TEMPLATE_LITERAL_PORTION, element, 'Template literal portion expected'); } } }, visitReturnStatement: function(tree) { if (tree.expression !== null) { this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected'); } }, visitSetAccessor: function(tree) { this.checkPropertyName_(tree.name); this.checkType_(FUNCTION_BODY, tree.body, 'function body expected'); }, visitSpreadExpression: function(tree) { this.checkVisit_(tree.expression.isAssignmentExpression(), tree.expression, 'assignment expression expected'); }, visitStateMachine: function(tree) { this.fail_(tree, 'State machines are never valid outside of the ' + 'GeneratorTransformer pass.'); }, visitSwitchStatement: function(tree) { this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected'); var defaultCount = 0; for (var i = 0; i < tree.caseClauses.length; i++) { var caseClause = tree.caseClauses[i]; if (caseClause.type === DEFAULT_CLAUSE) { ++defaultCount; this.checkVisit_(defaultCount <= 1, caseClause, 'no more than one default clause allowed'); } else { this.checkType_(CASE_CLAUSE, caseClause, 'case or default clause expected'); } } }, visitThrowStatement: function(tree) { if (tree.value === null) { return; } this.checkVisit_(tree.value.isExpression(), tree.value, 'expression expected'); }, visitTryStatement: function(tree) { this.checkType_(BLOCK, tree.body, 'block expected'); if (tree.catchBlock !== null) { this.checkType_(CATCH, tree.catchBlock, 'catch block expected'); } if (tree.finallyBlock !== null) { this.checkType_(FINALLY, tree.finallyBlock, 'finally block expected'); } if (tree.catchBlock === null && tree.finallyBlock === null) { this.fail_(tree, 'either catch or finally must be present'); } }, visitTypeArguments: function(tree) { var args = tree.args; for (var i = 0; i < args.length; i++) { this.checkVisit_(args[i].isType(), args[i], 'Type arguments must be type expressions'); } }, visitTypeName: function(tree) { this.checkVisit_(tree.moduleName === null || tree.moduleName.type === TYPE_NAME, tree.moduleName, 'moduleName must be null or a TypeName'); this.check_(tree.name.type === IDENTIFIER, tree, 'name must be an identifier'); }, visitTypeReference: function(tree) { this.checkType_(TYPE_NAME, tree.typeName, 'typeName must be a TypeName'); this.checkType_(TYPE_ARGUMENTS, tree.args, 'args must be a TypeArguments'); }, visitTypeParameters: function(tree) { var parameters = tree.parameters; for (var i = 0; i < parameters.length; i++) { this.checkType_(TYPE_PARAMETER, parameters[i], 'Type parameters must all be type parameters'); } }, visitTypeParameter: function(tree) { this.check_(tree.identifierToken.type === IDENTIFIER, tree, 'Type parameter must be an identifier token'); if (tree.extendsType) { this.checkVisit_(tree.extendsType.isType(), tree.extendsType, 'extends type must be a type expression'); } }, visitUnaryExpression: function(tree) { this.checkVisit_(tree.operand.isAssignmentExpression(), tree.operand, 'assignment expression expected'); }, visitVariableDeclaration: function(tree) { this.checkVisit_(tree.lvalue.isPattern() || tree.lvalue.type === BINDING_IDENTIFIER, tree.lvalue, 'binding identifier expected, found: ' + tree.lvalue.type); if (tree.initializer !== null) { this.checkVisit_(tree.initializer.isAssignmentExpression(), tree.initializer, 'assignment expression expected'); } }, visitWhileStatement: function(tree) { this.checkVisit_(tree.condition.isExpression(), tree.condition, 'expression expected'); this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected'); }, visitWithStatement: function(tree) { this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected'); this.checkVisit_(tree.body.isStatement(), tree.body, 'statement expected'); }, visitYieldExpression: function(tree) { if (tree.expression !== null) { this.checkVisit_(tree.expression.isExpression(), tree.expression, 'expression expected'); } } }, {}, $__super); }(ParseTreeVisitor); ParseTreeValidator.validate = function(tree) { var validator = new ParseTreeValidator(); try { validator.visitAny(tree); } catch (e) { if (!(e instanceof ValidationError)) { throw e; } var location = null; if (e.tree !== null) { location = e.tree.location; } if (location === null) { location = tree.location; } var locationString = location !== null ? location.start.toString() : '(unknown)'; throw new Error(("Parse tree validation failure '" + e.message + "' at " + locationString + ":") + ("\n\n" + TreeWriter.write(tree) + "\n")); } }; return {get ParseTreeValidator() { return ParseTreeValidator; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/MultiTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/MultiTransformer.js"; var ParseTreeValidator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/ParseTreeValidator.js", "traceur@0.0.112/src/codegeneration/MultiTransformer.js")).ParseTreeValidator; var MultiTransformer = function() { function MultiTransformer(reporter, validate) { this.reporter_ = reporter; this.validate_ = validate; this.treeTransformers_ = []; } return ($traceurRuntime.createClass)(MultiTransformer, { append: function(treeTransformer) { this.treeTransformers_.push(treeTransformer); }, transform: function(tree) { var reporter = this.reporter_; var validate = this.validate_; this.treeTransformers_.every(function(transformTree) { tree = transformTree(tree); if (reporter.hadError()) return false; if (validate) ParseTreeValidator.validate(tree); return true; }); return tree; } }, {}); }(); return {get MultiTransformer() { return MultiTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js")).ParseTreeTransformer; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js")), LiteralExpression = $__2.LiteralExpression, LiteralPropertyName = $__2.LiteralPropertyName; var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js")).LiteralToken; var NUMBER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/NumericLiteralTransformer.js")).NUMBER; function needsTransform(token) { return token.type === NUMBER && /^0[bBoO]/.test(token.value); } function transformToken(token) { return new LiteralToken(NUMBER, String(token.processedValue), token.location); } var NumericLiteralTransformer = function($__super) { function NumericLiteralTransformer() { $traceurRuntime.superConstructor(NumericLiteralTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(NumericLiteralTransformer, { transformLiteralExpression: function(tree) { var token = tree.literalToken; if (needsTransform(token)) return new LiteralExpression(tree.location, transformToken(token)); return tree; }, transformLiteralPropertyName: function(tree) { var token = tree.literalToken; if (needsTransform(token)) return new LiteralPropertyName(tree.location, transformToken(token)); return tree; } }, {}, $__super); }(ParseTreeTransformer); return {get NumericLiteralTransformer() { return NumericLiteralTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js"; var FindVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./FindVisitor.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).FindVisitor; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")), FunctionExpression = $__4.FunctionExpression, IdentifierExpression = $__4.IdentifierExpression, LiteralExpression = $__4.LiteralExpression; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).TempVarTransformer; var IDENTIFIER = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).IDENTIFIER; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")), COMPUTED_PROPERTY_NAME = $__7.COMPUTED_PROPERTY_NAME, LITERAL_PROPERTY_NAME = $__7.LITERAL_PROPERTY_NAME; var StringMap = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/StringMap.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).StringMap; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")), createAssignmentExpression = $__9.createAssignmentExpression, createCommaExpression = $__9.createCommaExpression, createDefineProperty = $__9.createDefineProperty, createEmptyParameterList = $__9.createEmptyParameterList, createFunctionExpression = $__9.createFunctionExpression, createIdentifierExpression = $__9.createIdentifierExpression, createObjectCreate = $__9.createObjectCreate, createObjectLiteral = $__9.createObjectLiteral, createParenExpression = $__9.createParenExpression, createPropertyNameAssignment = $__9.createPropertyNameAssignment, createStringLiteral = $__9.createStringLiteral; var propName = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../staticsemantics/PropName.js", "traceur@0.0.112/src/codegeneration/ObjectLiteralTransformer.js")).propName; var FindAdvancedProperty = function($__super) { function FindAdvancedProperty(transformOptions) { $traceurRuntime.superConstructor(FindAdvancedProperty).call(this, true); this.transformOptions_ = transformOptions; this.protoExpression = null; } return ($traceurRuntime.createClass)(FindAdvancedProperty, { visitPropertyNameAssignment: function(tree) { if (isProtoName(tree.name)) this.protoExpression = tree.value; else this.visitAny(tree.name); }, visitMethod: function(tree) { this.visitAny(tree.name); }, visitGetAccessor: function(tree) { if (this.transformOptions_.properTailCalls) { this.found = true; } else { this.visitAny(tree.name); } }, visitSetAccessor: function(tree) { if (this.transformOptions_.properTailCalls) { this.found = true; } else { this.visitAny(tree.name); } }, visitComputedPropertyName: function(tree) { if (this.transformOptions_.computedPropertyNames) this.found = true; } }, {}, $__super); }(FindVisitor); function isProtoName(tree) { return propName(tree) === '__proto__'; } var ObjectLiteralTransformer = function($__super) { function ObjectLiteralTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(ObjectLiteralTransformer).call(this, identifierGenerator, reporter, options); this.transformOptions_ = options.transformOptions; this.protoExpression = null; this.needsAdvancedTransform = false; this.seenAccessors = null; } return ($traceurRuntime.createClass)(ObjectLiteralTransformer, { findSeenAccessor_: function(name) { if (name.type === COMPUTED_PROPERTY_NAME) return null; var s = propName(name); return this.seenAccessors.get(s); }, removeSeenAccessor_: function(name) { if (name.type === COMPUTED_PROPERTY_NAME) return; var s = propName(name); this.seenAccessors.delete(s); }, addSeenAccessor_: function(name, descr) { if (name.type === COMPUTED_PROPERTY_NAME) return; var s = propName(name); this.seenAccessors.set(s, descr); }, createProperty_: function(name, descr) { var expression; if (name.type === LITERAL_PROPERTY_NAME) { if (this.needsAdvancedTransform) expression = this.getPropertyName_(name); else expression = name; } else { expression = name.expression; } if (descr.get || descr.set) { var oldAccessor = this.findSeenAccessor_(name); if (oldAccessor) { oldAccessor.get = descr.get || oldAccessor.get; oldAccessor.set = descr.set || oldAccessor.set; this.removeSeenAccessor_(name); return null; } else { this.addSeenAccessor_(name, descr); } } return [expression, descr]; }, getPropertyName_: function(nameTree) { var token = nameTree.literalToken; switch (token.type) { case IDENTIFIER: return createStringLiteral(token.value); default: if (token.isKeyword()) return createStringLiteral(token.type); return new LiteralExpression(token.location, token); } }, transformClassDeclaration: function(tree) { return tree; }, transformClassExpression: function(tree) { return tree; }, transformObjectLiteral: function(tree) { var oldNeedsTransform = this.needsAdvancedTransform; var oldSeenAccessors = this.seenAccessors; var transformed = this.transformObjectLiteralInner_(tree); this.needsAdvancedTransform = oldNeedsTransform; this.seenAccessors = oldSeenAccessors; return transformed; }, transformObjectLiteralInner_: function(tree) { var finder = new FindAdvancedProperty(this.transformOptions_); finder.visitAny(tree); if (!finder.found) { this.needsAdvancedTransform = false; return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformObjectLiteral").call(this, tree); } this.needsAdvancedTransform = true; this.seenAccessors = new StringMap(); var properties = this.transformList(tree.propertyNameAndValues); properties = properties.filter(function(tree) { return tree; }); var tempVar = this.addTempVar(); var tempVarIdentifierExpression = createIdentifierExpression(tempVar); var expressions = properties.map(function(property) { var expression = property[0]; var descr = property[1]; return createDefineProperty(tempVarIdentifierExpression, expression, descr); }); var protoExpression = this.transformAny(finder.protoExpression); var objectExpression; if (protoExpression) objectExpression = createObjectCreate(protoExpression); else objectExpression = createObjectLiteral([]); expressions.unshift(createAssignmentExpression(tempVarIdentifierExpression, objectExpression)); expressions.push(tempVarIdentifierExpression); return createParenExpression(createCommaExpression(expressions)); }, transformPropertyNameAssignment: function(tree) { if (!this.needsAdvancedTransform) return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformPropertyNameAssignment").call(this, tree); if (isProtoName(tree.name)) return null; return this.createProperty_(tree.name, { value: this.transformAny(tree.value), configurable: true, enumerable: true, writable: true }); }, transformGetAccessor: function(tree) { if (!this.needsAdvancedTransform) return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformGetAccessor").call(this, tree); var body = this.transformAny(tree.body); var func = createFunctionExpression(createEmptyParameterList(), body); return this.createProperty_(tree.name, { get: func, configurable: true, enumerable: true }); }, transformSetAccessor: function(tree) { if (!this.needsAdvancedTransform) return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformSetAccessor").call(this, tree); var body = this.transformAny(tree.body); var parameterList = this.transformAny(tree.parameterList); var func = createFunctionExpression(parameterList, body); return this.createProperty_(tree.name, { set: func, configurable: true, enumerable: true }); }, transformMethod: function(tree) { var func = new FunctionExpression(tree.location, tree.debugName, tree.functionKind, this.transformAny(tree.parameterList), tree.typeAnnotation, [], this.transformAny(tree.body)); if (!this.needsAdvancedTransform) { return createPropertyNameAssignment(tree.name, func); } var expression = this.transformAny(tree.name); return this.createProperty_(tree.name, { value: func, configurable: true, enumerable: true, writable: true }); }, transformPropertyNameShorthand: function(tree) { if (!this.needsAdvancedTransform) return $traceurRuntime.superGet(this, ObjectLiteralTransformer.prototype, "transformPropertyNameShorthand").call(this, tree); var expression = this.transformAny(tree.name); return this.createProperty_(tree.name, { value: new IdentifierExpression(tree.location, tree.name.identifierToken), configurable: true, enumerable: false, writable: true }); } }, {}, $__super); }(TempVarTransformer); return {get ObjectLiteralTransformer() { return ObjectLiteralTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")).ParseTreeTransformer; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")), ArgumentList = $__2.ArgumentList, BinaryExpression = $__2.BinaryExpression, CallExpression = $__2.CallExpression, ConditionalExpression = $__2.ConditionalExpression, MemberExpression = $__2.MemberExpression, MemberLookupExpression = $__2.MemberLookupExpression; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")), createArrayLiteral = $__3.createArrayLiteral, createAssignmentExpression = $__3.createAssignmentExpression, createCommaExpression = $__3.createCommaExpression, createMemberExpression = $__3.createMemberExpression, id = $__3.createIdentifierExpression, createNullLiteral = $__3.createNullLiteral, createParenExpression = $__3.createParenExpression; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")), COMMA_EXPRESSION = $__4.COMMA_EXPRESSION, MEMBER_EXPRESSION = $__4.MEMBER_EXPRESSION, MEMBER_LOOKUP_EXPRESSION = $__4.MEMBER_LOOKUP_EXPRESSION, IDENTIFIER_EXPRESSION = $__4.IDENTIFIER_EXPRESSION, PAREN_EXPRESSION = $__4.PAREN_EXPRESSION, THIS_EXPRESSION = $__4.THIS_EXPRESSION; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/RewriteTailExpressionsTransformer.js")), AND = $__5.AND, OR = $__5.OR; function createCall(tree, operand, thisArg, importRuntimeTransformer) { var argList = tree.args; var argArray = argList ? argList.args : []; argArray = argArray.map(function(arg) { if (arg.type === COMMA_EXPRESSION) { return createParenExpression(arg.type); } return arg; }); var continuation = importRuntimeTransformer.getRuntimeExpression('continuation'); return new CallExpression(tree.location, continuation, new ArgumentList(argList ? argList.location : null, [operand, thisArg, createArrayLiteral(argArray)])); } var RewriteTailExpressionsTransformer = function($__super) { function RewriteTailExpressionsTransformer(bodyTransformer) { $traceurRuntime.superConstructor(RewriteTailExpressionsTransformer).call(this); this.bodyTransformer_ = bodyTransformer; } return ($traceurRuntime.createClass)(RewriteTailExpressionsTransformer, { transformBinaryExpression: function(tree) { var operator = tree.operator; if (operator.type !== AND && operator.type !== OR) { return tree; } var right = this.transformAny(tree.right); if (right !== tree.right) { return new BinaryExpression(tree.location, tree.left, operator, right); } return tree; }, transformCallExpression: function(tree) { var operand = tree.operand; while (operand.type === PAREN_EXPRESSION) { operand = operand.expression; } switch (operand.type) { case IDENTIFIER_EXPRESSION: return createCall(tree, operand, createNullLiteral(), this.bodyTransformer_); case MEMBER_EXPRESSION: case MEMBER_LOOKUP_EXPRESSION: return this.transformMemberExpressionCall_(tree, operand); } return tree; }, transformMemberExpressionCall_: function(tree, operand) { var object = operand.operand; var thisArg; var assignment; if (object.type === IDENTIFIER_EXPRESSION || object.type === THIS_EXPRESSION) { thisArg = object; } else { thisArg = id(this.bodyTransformer_.addTempVar()); assignment = createAssignmentExpression(thisArg, operand.operand); } if (operand.type === MEMBER_EXPRESSION) { operand = new MemberExpression(operand.location, thisArg, operand.memberName); } else { operand = new MemberLookupExpression(operand.location, thisArg, operand.memberExpression); } if (assignment) { return createParenExpression(createCommaExpression([assignment, createCall(tree, operand, thisArg, this.bodyTransformer_)])); } else { return createCall(tree, operand, thisArg, this.bodyTransformer_); } }, transformCommaExpression: function(tree) { var expressions = tree.expressions; var expression = expressions[expressions.length - 1]; var transformedExpression = this.transformAny(expression); if (expression !== transformedExpression) { expressions = expressions.slice(0, -1); expressions.push(transformedExpression); return new CommaExpression(tree.location, expressions); } return tree; }, transformConditionalExpression: function(tree) { var left = this.transformAny(tree.left); var right = this.transformAny(tree.right); if (left !== tree.left || right !== tree.right) { return new ConditionalExpression(tree.location, tree.condition, left, right); } return tree; }, transformNewExpression: function(tree) { var construct = this.bodyTransformer_.getRuntimeExpression('construct'); return createCall(tree, construct, tree.operand, this.bodyTransformer_); }, transformArrayLiteral: function(tree) { return tree; }, transformArrowFunction: function(tree) { return tree; }, transformFunctionExpression: function(tree) { return tree; }, transformIdentifierExpression: function(tree) { return tree; }, transformLiteralExpression: function(tree) { return tree; }, transformMemberExpression: function(tree) { return tree; }, transformMemberLookupExpression: function(tree) { return tree; }, transformPostfixExpression: function(tree) { return tree; }, transformObjectLiteral: function(tree) { return tree; }, transformUnaryExpression: function(tree) { return tree; } }, {transform: function(bodyTransformer, tree) { return new RewriteTailExpressionsTransformer(bodyTransformer).transformAny(tree); }}, $__super); }(ParseTreeTransformer); return {get RewriteTailExpressionsTransformer() { return RewriteTailExpressionsTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js")).ParseTreeTransformer; var RewriteTailExpressionsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./RewriteTailExpressionsTransformer.js", "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js")).RewriteTailExpressionsTransformer; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js")), ReturnStatement = $__3.ReturnStatement, TryStatement = $__3.TryStatement; var SkipFunctionsTransformerTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SkipFunctionsTransformerTrait.js", "traceur@0.0.112/src/codegeneration/RewriteTailCallsTransformer.js")).default; var RewriteTailCallsTransformer = function($__super) { function RewriteTailCallsTransformer(bodyTransformer) { $traceurRuntime.superConstructor(RewriteTailCallsTransformer).call(this); this.bodyTransformer_ = bodyTransformer; } return ($traceurRuntime.createClass)(RewriteTailCallsTransformer, { transformReturnStatement: function(tree) { var expression = tree.expression; if (expression !== null) { expression = RewriteTailExpressionsTransformer.transform(this.bodyTransformer_, expression); if (expression !== tree.expression) { return new ReturnStatement(tree.location, expression); } } return tree; }, transformTryStatement: function(tree) { var block; if (tree.finallyBlock !== null) { block = this.transformAny(tree.finallyBlock); if (block !== tree.finallyBlock) { return new TryStatement(tree.location, tree.body, tree.catchBlock, block); } } else { block = this.transformAny(tree.catchBlock); if (block !== tree.catchBlock) { return new TryStatement(tree.location, tree.body, block, tree.finallyBlock); } } return tree; }, transformForInStatement: function(tree) { return tree; }, transformForOfStatement: function(tree) { return tree; }, transformForOnStatement: function(tree) { return tree; }, transformClassDeclaration: function(tree) { return tree; }, transformClassExpression: function(tree) { return tree; }, transformExpressionStatement: function(tree) { return tree; }, transformComprehensionFor: function(tree) { return tree; }, transformVariableStatement: function(tree) { return tree; } }, {transform: function(bodyTransformer, tree) { return new RewriteTailCallsTransformer(bodyTransformer).transformAny(tree); }}, $__super); }(SkipFunctionsTransformerTrait(ParseTreeTransformer)); return {get RewriteTailCallsTransformer() { return RewriteTailCallsTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js"; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")).TempVarTransformer; var RewriteTailCallsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./RewriteTailCallsTransformer.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")).RewriteTailCallsTransformer; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")), createFunctionBody = $__3.createFunctionBody, createFunctionExpression = $__3.createFunctionExpression, id = $__3.createIdentifierExpression; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")), parseExpression = $__4.parseExpression, parseStatement = $__4.parseStatement, parseStatements = $__4.parseStatements; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")), AnonBlock = $__5.AnonBlock, FunctionDeclaration = $__5.FunctionDeclaration, FunctionExpression = $__5.FunctionExpression; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/ProperTailCallTransformer.js")).default; var ProperTailCallTransformer = function($__super) { function ProperTailCallTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(ProperTailCallTransformer).call(this, identifierGenerator, reporter, options); this.inBlock_ = false; this.options = options; } return ($traceurRuntime.createClass)(ProperTailCallTransformer, { transformFunctionDeclaration: function(tree) { tree = $traceurRuntime.superGet(this, ProperTailCallTransformer.prototype, "transformFunctionDeclaration").call(this, tree); if (tree.functionKind !== null) { return tree; } var nameIdExpression = id(tree.name.identifierToken); var initTailRecursiveFunction = this.getRuntimeExpression('initTailRecursiveFunction'); var setupFlagExpression = parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initTailRecursiveFunction, nameIdExpression); var funcDecl = this.transformFunction_(tree, FunctionDeclaration); if (funcDecl === tree) { return tree; } var tmpVar = id(this.inBlock_ ? this.getTempIdentifier() : this.addTempVar(setupFlagExpression)); if (!this.inBlock_) { return funcDecl; } return new AnonBlock(null, [funcDecl, parseStatement($traceurRuntime.getTemplateObject(["var ", " = ", ";"]), tmpVar, setupFlagExpression)]); }, transformFunctionExpression: function(tree) { tree = $traceurRuntime.superGet(this, ProperTailCallTransformer.prototype, "transformFunctionExpression").call(this, tree); if (tree.functionKind) { return tree; } var functionExpression = this.transformFunction_(tree, FunctionExpression); if (functionExpression === tree) { return tree; } var initTailRecursiveFunction = this.getRuntimeExpression('initTailRecursiveFunction'); return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), initTailRecursiveFunction, functionExpression); }, transformFunction_: function(tree, constructor) { var body = RewriteTailCallsTransformer.transform(this, tree.body); if (body === tree.body) { return tree; } var func = id(this.getTempIdentifier()); var innerFunction = createFunctionExpression(tree.parameterList, body); var call = this.getRuntimeExpression('call'); var outerBody = createFunctionBody(parseStatements($traceurRuntime.getTemplateObject(["\n return ", "(", ", this, arguments);"]), call, innerFunction)); return new constructor(tree.location, tree.name, tree.functionKind, tree.parameterList, tree.typeAnnotation, tree.annotations, outerBody); }, transformBlock: function(tree) { var inBlock = this.inBlock_; this.inBlock_ = true; var rv = $traceurRuntime.superGet(this, ProperTailCallTransformer.prototype, "transformBlock").call(this, tree); this.inBlock_ = inBlock; return rv; } }, {}, $__super); }(ImportRuntimeTrait(TempVarTransformer)); return {get ProperTailCallTransformer() { return ProperTailCallTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/PropertyNameShorthandTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/PropertyNameShorthandTransformer.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/PropertyNameShorthandTransformer.js")), IdentifierExpression = $__1.IdentifierExpression, LiteralPropertyName = $__1.LiteralPropertyName, PropertyNameAssignment = $__1.PropertyNameAssignment; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/PropertyNameShorthandTransformer.js")).ParseTreeTransformer; var PropertyNameShorthandTransformer = function($__super) { function PropertyNameShorthandTransformer() { $traceurRuntime.superConstructor(PropertyNameShorthandTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(PropertyNameShorthandTransformer, {transformPropertyNameShorthand: function(tree) { return new PropertyNameAssignment(tree.location, new LiteralPropertyName(tree.location, tree.name), new IdentifierExpression(tree.location, tree.name)); }}, {}, $__super); }(ParseTreeTransformer); return {get PropertyNameShorthandTransformer() { return PropertyNameShorthandTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/outputgeneration/regexpuRewritePattern.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/outputgeneration/regexpuRewritePattern.js"; var modules = {}; var module = {}; var exports = module.exports = {}; var require = function(id) { return modules[id]; }; ; (function(root) { var freeExports = typeof exports == 'object' && exports; var freeModule = typeof module == 'object' && module && module.exports == freeExports && module; var freeGlobal = typeof global == 'object' && global; if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { root = freeGlobal; } var ERRORS = { 'rangeOrder': 'A range\u2019s `stop` value must be greater than or equal ' + 'to the `start` value.', 'codePointRange': 'Invalid code point value. Code points range from ' + 'U+000000 to U+10FFFF.' }; var HIGH_SURROGATE_MIN = 0xD800; var HIGH_SURROGATE_MAX = 0xDBFF; var LOW_SURROGATE_MIN = 0xDC00; var LOW_SURROGATE_MAX = 0xDFFF; var regexNull = /\\x00([^0123456789]|$)/g; var object = {}; var hasOwnProperty = object.hasOwnProperty; var extend = function(destination, source) { var key; for (key in source) { if (hasOwnProperty.call(source, key)) { destination[key] = source[key]; } } return destination; }; var forEach = function(array, callback) { var index = -1; var length = array.length; while (++index < length) { callback(array[index], index); } }; var toString = object.toString; var isArray = function(value) { return toString.call(value) == '[object Array]'; }; var isNumber = function(value) { return typeof value == 'number' || toString.call(value) == '[object Number]'; }; var zeroes = '0000'; var pad = function(number, totalCharacters) { var string = String(number); return string.length < totalCharacters ? (zeroes + string).slice(-totalCharacters) : string; }; var hex = function(number) { return Number(number).toString(16).toUpperCase(); }; var slice = [].slice; var dataFromCodePoints = function(codePoints) { var index = -1; var length = codePoints.length; var max = length - 1; var result = []; var isStart = true; var tmp; var previous = 0; while (++index < length) { tmp = codePoints[index]; if (isStart) { result.push(tmp); previous = tmp; isStart = false; } else { if (tmp == previous + 1) { if (index != max) { previous = tmp; continue; } else { isStart = true; result.push(tmp + 1); } } else { result.push(previous + 1, tmp); previous = tmp; } } } if (!isStart) { result.push(tmp + 1); } return result; }; var dataRemove = function(data, codePoint) { var index = 0; var start; var end; var length = data.length; while (index < length) { start = data[index]; end = data[index + 1]; if (codePoint >= start && codePoint < end) { if (codePoint == start) { if (end == start + 1) { data.splice(index, 2); return data; } else { data[index] = codePoint + 1; return data; } } else if (codePoint == end - 1) { data[index + 1] = codePoint; return data; } else { data.splice(index, 2, start, codePoint, codePoint + 1, end); return data; } } index += 2; } return data; }; var dataRemoveRange = function(data, rangeStart, rangeEnd) { if (rangeEnd < rangeStart) { throw Error(ERRORS.rangeOrder); } var index = 0; var start; var end; while (index < data.length) { start = data[index]; end = data[index + 1] - 1; if (start > rangeEnd) { return data; } if (rangeStart <= start && rangeEnd >= end) { data.splice(index, 2); continue; } if (rangeStart >= start && rangeEnd < end) { if (rangeStart == start) { data[index] = rangeEnd + 1; data[index + 1] = end + 1; return data; } data.splice(index, 2, start, rangeStart, rangeEnd + 1, end + 1); return data; } if (rangeStart >= start && rangeStart <= end) { data[index + 1] = rangeStart; } else if (rangeEnd >= start && rangeEnd <= end) { data[index] = rangeEnd + 1; return data; } index += 2; } return data; }; var dataAdd = function(data, codePoint) { var index = 0; var start; var end; var lastIndex = null; var length = data.length; if (codePoint < 0x0 || codePoint > 0x10FFFF) { throw RangeError(ERRORS.codePointRange); } while (index < length) { start = data[index]; end = data[index + 1]; if (codePoint >= start && codePoint < end) { return data; } if (codePoint == start - 1) { data[index] = codePoint; return data; } if (start > codePoint) { data.splice(lastIndex != null ? lastIndex + 2 : 0, 0, codePoint, codePoint + 1); return data; } if (codePoint == end) { if (codePoint + 1 == data[index + 2]) { data.splice(index, 4, start, data[index + 3]); return data; } data[index + 1] = codePoint + 1; return data; } lastIndex = index; index += 2; } data.push(codePoint, codePoint + 1); return data; }; var dataAddData = function(dataA, dataB) { var index = 0; var start; var end; var data = dataA.slice(); var length = dataB.length; while (index < length) { start = dataB[index]; end = dataB[index + 1] - 1; if (start == end) { data = dataAdd(data, start); } else { data = dataAddRange(data, start, end); } index += 2; } return data; }; var dataRemoveData = function(dataA, dataB) { var index = 0; var start; var end; var data = dataA.slice(); var length = dataB.length; while (index < length) { start = dataB[index]; end = dataB[index + 1] - 1; if (start == end) { data = dataRemove(data, start); } else { data = dataRemoveRange(data, start, end); } index += 2; } return data; }; var dataAddRange = function(data, rangeStart, rangeEnd) { if (rangeEnd < rangeStart) { throw Error(ERRORS.rangeOrder); } if (rangeStart < 0x0 || rangeStart > 0x10FFFF || rangeEnd < 0x0 || rangeEnd > 0x10FFFF) { throw RangeError(ERRORS.codePointRange); } var index = 0; var start; var end; var added = false; var length = data.length; while (index < length) { start = data[index]; end = data[index + 1]; if (added) { if (start == rangeEnd + 1) { data.splice(index - 1, 2); return data; } if (start > rangeEnd) { return data; } if (start >= rangeStart && start <= rangeEnd) { if (end > rangeStart && end - 1 <= rangeEnd) { data.splice(index, 2); index -= 2; } else { data.splice(index - 1, 2); index -= 2; } } } else if (start == rangeEnd + 1) { data[index] = rangeStart; return data; } else if (start > rangeEnd) { data.splice(index, 0, rangeStart, rangeEnd + 1); return data; } else if (rangeStart >= start && rangeStart < end && rangeEnd + 1 <= end) { return data; } else if ((rangeStart >= start && rangeStart < end) || end == rangeStart) { data[index + 1] = rangeEnd + 1; added = true; } else if (rangeStart <= start && rangeEnd + 1 >= end) { data[index] = rangeStart; data[index + 1] = rangeEnd + 1; added = true; } index += 2; } if (!added) { data.push(rangeStart, rangeEnd + 1); } return data; }; var dataContains = function(data, codePoint) { var index = 0; var length = data.length; var start = data[index]; var end = data[length - 1]; if (length >= 2) { if (codePoint < start || codePoint > end) { return false; } } while (index < length) { start = data[index]; end = data[index + 1]; if (codePoint >= start && codePoint < end) { return true; } index += 2; } return false; }; var dataIntersection = function(data, codePoints) { var index = 0; var length = codePoints.length; var codePoint; var result = []; while (index < length) { codePoint = codePoints[index]; if (dataContains(data, codePoint)) { result.push(codePoint); } ++index; } return dataFromCodePoints(result); }; var dataIsEmpty = function(data) { return !data.length; }; var dataIsSingleton = function(data) { return data.length == 2 && data[0] + 1 == data[1]; }; var dataToArray = function(data) { var index = 0; var start; var end; var result = []; var length = data.length; while (index < length) { start = data[index]; end = data[index + 1]; while (start < end) { result.push(start); ++start; } index += 2; } return result; }; var floor = Math.floor; var highSurrogate = function(codePoint) { return parseInt(floor((codePoint - 0x10000) / 0x400) + HIGH_SURROGATE_MIN, 10); }; var lowSurrogate = function(codePoint) { return parseInt((codePoint - 0x10000) % 0x400 + LOW_SURROGATE_MIN, 10); }; var stringFromCharCode = String.fromCharCode; var codePointToString = function(codePoint) { var string; if (codePoint == 0x09) { string = '\\t'; } else if (codePoint == 0x0A) { string = '\\n'; } else if (codePoint == 0x0C) { string = '\\f'; } else if (codePoint == 0x0D) { string = '\\r'; } else if (codePoint == 0x5C) { string = '\\\\'; } else if (codePoint == 0x24 || (codePoint >= 0x28 && codePoint <= 0x2B) || codePoint == 0x2D || codePoint == 0x2E || codePoint == 0x3F || (codePoint >= 0x5B && codePoint <= 0x5E) || (codePoint >= 0x7B && codePoint <= 0x7D)) { string = '\\' + stringFromCharCode(codePoint); } else if (codePoint >= 0x20 && codePoint <= 0x7E) { string = stringFromCharCode(codePoint); } else if (codePoint <= 0xFF) { string = '\\x' + pad(hex(codePoint), 2); } else { string = '\\u' + pad(hex(codePoint), 4); } return string; }; var symbolToCodePoint = function(symbol) { var length = symbol.length; var first = symbol.charCodeAt(0); var second; if (first >= HIGH_SURROGATE_MIN && first <= HIGH_SURROGATE_MAX && length > 1) { second = symbol.charCodeAt(1); return (first - HIGH_SURROGATE_MIN) * 0x400 + second - LOW_SURROGATE_MIN + 0x10000; } return first; }; var createBMPCharacterClasses = function(data) { var result = ''; var index = 0; var start; var end; var length = data.length; if (dataIsSingleton(data)) { return codePointToString(data[0]); } while (index < length) { start = data[index]; end = data[index + 1] - 1; if (start == end) { result += codePointToString(start); } else if (start + 1 == end) { result += codePointToString(start) + codePointToString(end); } else { result += codePointToString(start) + '-' + codePointToString(end); } index += 2; } return '[' + result + ']'; }; var splitAtBMP = function(data) { var loneHighSurrogates = []; var loneLowSurrogates = []; var bmp = []; var astral = []; var index = 0; var start; var end; var length = data.length; while (index < length) { start = data[index]; end = data[index + 1] - 1; if (start < HIGH_SURROGATE_MIN) { if (end < HIGH_SURROGATE_MIN) { bmp.push(start, end + 1); } if (end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX) { bmp.push(start, HIGH_SURROGATE_MIN); loneHighSurrogates.push(HIGH_SURROGATE_MIN, end + 1); } if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) { bmp.push(start, HIGH_SURROGATE_MIN); loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1); loneLowSurrogates.push(LOW_SURROGATE_MIN, end + 1); } if (end > LOW_SURROGATE_MAX) { bmp.push(start, HIGH_SURROGATE_MIN); loneHighSurrogates.push(HIGH_SURROGATE_MIN, HIGH_SURROGATE_MAX + 1); loneLowSurrogates.push(LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1); if (end <= 0xFFFF) { bmp.push(LOW_SURROGATE_MAX + 1, end + 1); } else { bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1); astral.push(0xFFFF + 1, end + 1); } } } else if (start >= HIGH_SURROGATE_MIN && start <= HIGH_SURROGATE_MAX) { if (end >= HIGH_SURROGATE_MIN && end <= HIGH_SURROGATE_MAX) { loneHighSurrogates.push(start, end + 1); } if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) { loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1); loneLowSurrogates.push(LOW_SURROGATE_MIN, end + 1); } if (end > LOW_SURROGATE_MAX) { loneHighSurrogates.push(start, HIGH_SURROGATE_MAX + 1); loneLowSurrogates.push(LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1); if (end <= 0xFFFF) { bmp.push(LOW_SURROGATE_MAX + 1, end + 1); } else { bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1); astral.push(0xFFFF + 1, end + 1); } } } else if (start >= LOW_SURROGATE_MIN && start <= LOW_SURROGATE_MAX) { if (end >= LOW_SURROGATE_MIN && end <= LOW_SURROGATE_MAX) { loneLowSurrogates.push(start, end + 1); } if (end > LOW_SURROGATE_MAX) { loneLowSurrogates.push(start, LOW_SURROGATE_MAX + 1); if (end <= 0xFFFF) { bmp.push(LOW_SURROGATE_MAX + 1, end + 1); } else { bmp.push(LOW_SURROGATE_MAX + 1, 0xFFFF + 1); astral.push(0xFFFF + 1, end + 1); } } } else if (start > LOW_SURROGATE_MAX && start <= 0xFFFF) { if (end <= 0xFFFF) { bmp.push(start, end + 1); } else { bmp.push(start, 0xFFFF + 1); astral.push(0xFFFF + 1, end + 1); } } else { astral.push(start, end + 1); } index += 2; } return { 'loneHighSurrogates': loneHighSurrogates, 'loneLowSurrogates': loneLowSurrogates, 'bmp': bmp, 'astral': astral }; }; var optimizeSurrogateMappings = function(surrogateMappings) { var result = []; var tmpLow = []; var addLow = false; var mapping; var nextMapping; var highSurrogates; var lowSurrogates; var nextHighSurrogates; var nextLowSurrogates; var index = -1; var length = surrogateMappings.length; while (++index < length) { mapping = surrogateMappings[index]; nextMapping = surrogateMappings[index + 1]; if (!nextMapping) { result.push(mapping); continue; } highSurrogates = mapping[0]; lowSurrogates = mapping[1]; nextHighSurrogates = nextMapping[0]; nextLowSurrogates = nextMapping[1]; tmpLow = lowSurrogates; while (nextHighSurrogates && highSurrogates[0] == nextHighSurrogates[0] && highSurrogates[1] == nextHighSurrogates[1]) { if (dataIsSingleton(nextLowSurrogates)) { tmpLow = dataAdd(tmpLow, nextLowSurrogates[0]); } else { tmpLow = dataAddRange(tmpLow, nextLowSurrogates[0], nextLowSurrogates[1] - 1); } ++index; mapping = surrogateMappings[index]; highSurrogates = mapping[0]; lowSurrogates = mapping[1]; nextMapping = surrogateMappings[index + 1]; nextHighSurrogates = nextMapping && nextMapping[0]; nextLowSurrogates = nextMapping && nextMapping[1]; addLow = true; } result.push([highSurrogates, addLow ? tmpLow : lowSurrogates]); addLow = false; } return optimizeByLowSurrogates(result); }; var optimizeByLowSurrogates = function(surrogateMappings) { if (surrogateMappings.length == 1) { return surrogateMappings; } var index = -1; var innerIndex = -1; while (++index < surrogateMappings.length) { var mapping = surrogateMappings[index]; var lowSurrogates = mapping[1]; var lowSurrogateStart = lowSurrogates[0]; var lowSurrogateEnd = lowSurrogates[1]; innerIndex = index; while (++innerIndex < surrogateMappings.length) { var otherMapping = surrogateMappings[innerIndex]; var otherLowSurrogates = otherMapping[1]; var otherLowSurrogateStart = otherLowSurrogates[0]; var otherLowSurrogateEnd = otherLowSurrogates[1]; if (lowSurrogateStart == otherLowSurrogateStart && lowSurrogateEnd == otherLowSurrogateEnd) { if (dataIsSingleton(otherMapping[0])) { mapping[0] = dataAdd(mapping[0], otherMapping[0][0]); } else { mapping[0] = dataAddRange(mapping[0], otherMapping[0][0], otherMapping[0][1] - 1); } surrogateMappings.splice(innerIndex, 1); --innerIndex; } } } return surrogateMappings; }; var surrogateSet = function(data) { if (!data.length) { return []; } var index = 0; var start; var end; var startHigh; var startLow; var prevStartHigh = 0; var prevEndHigh = 0; var tmpLow = []; var endHigh; var endLow; var surrogateMappings = []; var length = data.length; var dataHigh = []; while (index < length) { start = data[index]; end = data[index + 1] - 1; startHigh = highSurrogate(start); startLow = lowSurrogate(start); endHigh = highSurrogate(end); endLow = lowSurrogate(end); var startsWithLowestLowSurrogate = startLow == LOW_SURROGATE_MIN; var endsWithHighestLowSurrogate = endLow == LOW_SURROGATE_MAX; var complete = false; if (startHigh == endHigh || startsWithLowestLowSurrogate && endsWithHighestLowSurrogate) { surrogateMappings.push([[startHigh, endHigh + 1], [startLow, endLow + 1]]); complete = true; } else { surrogateMappings.push([[startHigh, startHigh + 1], [startLow, LOW_SURROGATE_MAX + 1]]); } if (!complete && startHigh + 1 < endHigh) { if (endsWithHighestLowSurrogate) { surrogateMappings.push([[startHigh + 1, endHigh + 1], [LOW_SURROGATE_MIN, endLow + 1]]); complete = true; } else { surrogateMappings.push([[startHigh + 1, endHigh], [LOW_SURROGATE_MIN, LOW_SURROGATE_MAX + 1]]); } } if (!complete) { surrogateMappings.push([[endHigh, endHigh + 1], [LOW_SURROGATE_MIN, endLow + 1]]); } prevStartHigh = startHigh; prevEndHigh = endHigh; index += 2; } return optimizeSurrogateMappings(surrogateMappings); }; var createSurrogateCharacterClasses = function(surrogateMappings) { var result = []; forEach(surrogateMappings, function(surrogateMapping) { var highSurrogates = surrogateMapping[0]; var lowSurrogates = surrogateMapping[1]; result.push(createBMPCharacterClasses(highSurrogates) + createBMPCharacterClasses(lowSurrogates)); }); return result.join('|'); }; var createCharacterClassesFromData = function(data, bmpOnly) { var result = []; var parts = splitAtBMP(data); var loneHighSurrogates = parts.loneHighSurrogates; var loneLowSurrogates = parts.loneLowSurrogates; var bmp = parts.bmp; var astral = parts.astral; var hasAstral = !dataIsEmpty(parts.astral); var hasLoneHighSurrogates = !dataIsEmpty(loneHighSurrogates); var hasLoneLowSurrogates = !dataIsEmpty(loneLowSurrogates); var surrogateMappings = surrogateSet(astral); if (bmpOnly) { bmp = dataAddData(bmp, loneHighSurrogates); hasLoneHighSurrogates = false; bmp = dataAddData(bmp, loneLowSurrogates); hasLoneLowSurrogates = false; } if (!dataIsEmpty(bmp)) { result.push(createBMPCharacterClasses(bmp)); } if (surrogateMappings.length) { result.push(createSurrogateCharacterClasses(surrogateMappings)); } if (hasLoneHighSurrogates) { result.push(createBMPCharacterClasses(loneHighSurrogates) + '(?![\\uDC00-\\uDFFF])'); } if (hasLoneLowSurrogates) { result.push('(?:[^\\uD800-\\uDBFF]|^)' + createBMPCharacterClasses(loneLowSurrogates)); } return result.join('|'); }; var regenerate = function(value) { if (arguments.length > 1) { value = slice.call(arguments); } if (this instanceof regenerate) { this.data = []; return value ? this.add(value) : this; } return (new regenerate).add(value); }; regenerate.version = '1.2.0'; var proto = regenerate.prototype; extend(proto, { 'add': function(value) { var $this = this; if (value == null) { return $this; } if (value instanceof regenerate) { $this.data = dataAddData($this.data, value.data); return $this; } if (arguments.length > 1) { value = slice.call(arguments); } if (isArray(value)) { forEach(value, function(item) { $this.add(item); }); return $this; } $this.data = dataAdd($this.data, isNumber(value) ? value : symbolToCodePoint(value)); return $this; }, 'remove': function(value) { var $this = this; if (value == null) { return $this; } if (value instanceof regenerate) { $this.data = dataRemoveData($this.data, value.data); return $this; } if (arguments.length > 1) { value = slice.call(arguments); } if (isArray(value)) { forEach(value, function(item) { $this.remove(item); }); return $this; } $this.data = dataRemove($this.data, isNumber(value) ? value : symbolToCodePoint(value)); return $this; }, 'addRange': function(start, end) { var $this = this; $this.data = dataAddRange($this.data, isNumber(start) ? start : symbolToCodePoint(start), isNumber(end) ? end : symbolToCodePoint(end)); return $this; }, 'removeRange': function(start, end) { var $this = this; var startCodePoint = isNumber(start) ? start : symbolToCodePoint(start); var endCodePoint = isNumber(end) ? end : symbolToCodePoint(end); $this.data = dataRemoveRange($this.data, startCodePoint, endCodePoint); return $this; }, 'intersection': function(argument) { var $this = this; var array = argument instanceof regenerate ? dataToArray(argument.data) : argument; $this.data = dataIntersection($this.data, array); return $this; }, 'contains': function(codePoint) { return dataContains(this.data, isNumber(codePoint) ? codePoint : symbolToCodePoint(codePoint)); }, 'clone': function() { var set = new regenerate; set.data = this.data.slice(0); return set; }, 'toString': function(options) { var result = createCharacterClassesFromData(this.data, options ? options.bmpOnly : false); return result.replace(regexNull, '\\0$1'); }, 'toRegExp': function(flags) { return RegExp(this.toString(), flags || ''); }, 'valueOf': function() { return dataToArray(this.data); } }); proto.toArray = proto.valueOf; if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { define(function() { return regenerate; }); } else if (freeExports && !freeExports.nodeType) { if (freeModule) { freeModule.exports = regenerate; } else { freeExports.regenerate = regenerate; } } else { root.regenerate = regenerate; } }((void 0))); modules['regenerate'] = module.exports || window.regenerate; ; (function() { 'use strict'; var objectTypes = { 'function': true, 'object': true }; var root = (objectTypes[typeof window] && window) || this; var oldRoot = root; var freeExports = objectTypes[typeof exports] && exports; var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; var freeGlobal = freeExports && freeModule && typeof global == 'object' && global; if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) { root = freeGlobal; } var stringFromCharCode = String.fromCharCode; var floor = Math.floor; function fromCodePoint() { var MAX_SIZE = 0x4000; var codeUnits = []; var highSurrogate; var lowSurrogate; var index = -1; var length = arguments.length; if (!length) { return ''; } var result = ''; while (++index < length) { var codePoint = Number(arguments[index]); if (!isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint) { throw RangeError('Invalid code point: ' + codePoint); } if (codePoint <= 0xFFFF) { codeUnits.push(codePoint); } else { codePoint -= 0x10000; highSurrogate = (codePoint >> 10) + 0xD800; lowSurrogate = (codePoint % 0x400) + 0xDC00; codeUnits.push(highSurrogate, lowSurrogate); } if (index + 1 == length || codeUnits.length > MAX_SIZE) { result += stringFromCharCode.apply(null, codeUnits); codeUnits.length = 0; } } return result; } function assertType(type, expected) { if (expected.indexOf('|') == -1) { if (type == expected) { return; } throw Error('Invalid node type: ' + type); } expected = assertType.hasOwnProperty(expected) ? assertType[expected] : (assertType[expected] = RegExp('^(?:' + expected + ')$')); if (expected.test(type)) { return; } throw Error('Invalid node type: ' + type); } function generate(node) { var type = node.type; if (generate.hasOwnProperty(type) && typeof generate[type] == 'function') { return generate[type](node); } throw Error('Invalid node type: ' + type); } function generateAlternative(node) { assertType(node.type, 'alternative'); var terms = node.body, length = terms ? terms.length : 0; if (length == 1) { return generateTerm(terms[0]); } else { var i = -1, result = ''; while (++i < length) { result += generateTerm(terms[i]); } return result; } } function generateAnchor(node) { assertType(node.type, 'anchor'); switch (node.kind) { case 'start': return '^'; case 'end': return '$'; case 'boundary': return '\\b'; case 'not-boundary': return '\\B'; default: throw Error('Invalid assertion'); } } function generateAtom(node) { assertType(node.type, 'anchor|characterClass|characterClassEscape|dot|group|reference|value'); return generate(node); } function generateCharacterClass(node) { assertType(node.type, 'characterClass'); var classRanges = node.body, length = classRanges ? classRanges.length : 0; var i = -1, result = '['; if (node.negative) { result += '^'; } while (++i < length) { result += generateClassAtom(classRanges[i]); } result += ']'; return result; } function generateCharacterClassEscape(node) { assertType(node.type, 'characterClassEscape'); return '\\' + node.value; } function generateCharacterClassRange(node) { assertType(node.type, 'characterClassRange'); var min = node.min, max = node.max; if (min.type == 'characterClassRange' || max.type == 'characterClassRange') { throw Error('Invalid character class range'); } return generateClassAtom(min) + '-' + generateClassAtom(max); } function generateClassAtom(node) { assertType(node.type, 'anchor|characterClassEscape|characterClassRange|dot|value'); return generate(node); } function generateDisjunction(node) { assertType(node.type, 'disjunction'); var body = node.body, length = body ? body.length : 0; if (length == 0) { throw Error('No body'); } else if (length == 1) { return generate(body[0]); } else { var i = -1, result = ''; while (++i < length) { if (i != 0) { result += '|'; } result += generate(body[i]); } return result; } } function generateDot(node) { assertType(node.type, 'dot'); return '.'; } function generateGroup(node) { assertType(node.type, 'group'); var result = '('; switch (node.behavior) { case 'normal': break; case 'ignore': result += '?:'; break; case 'lookahead': result += '?='; break; case 'negativeLookahead': result += '?!'; break; default: throw Error('Invalid behaviour: ' + node.behaviour); } var body = node.body, length = body ? body.length : 0; if (length == 1) { result += generate(body[0]); } else { var i = -1; while (++i < length) { result += generate(body[i]); } } result += ')'; return result; } function generateQuantifier(node) { assertType(node.type, 'quantifier'); var quantifier = '', min = node.min, max = node.max; switch (max) { case undefined: case null: switch (min) { case 0: quantifier = '*'; break; case 1: quantifier = '+'; break; default: quantifier = '{' + min + ',}'; break; } break; default: if (min == max) { quantifier = '{' + min + '}'; } else if (min == 0 && max == 1) { quantifier = '?'; } else { quantifier = '{' + min + ',' + max + '}'; } break; } if (!node.greedy) { quantifier += '?'; } return generateAtom(node.body[0]) + quantifier; } function generateReference(node) { assertType(node.type, 'reference'); return '\\' + node.matchIndex; } function generateTerm(node) { assertType(node.type, 'anchor|characterClass|characterClassEscape|empty|group|quantifier|reference|value'); return generate(node); } function generateValue(node) { assertType(node.type, 'value'); var kind = node.kind, codePoint = node.codePoint; switch (kind) { case 'controlLetter': return '\\c' + fromCodePoint(codePoint + 64); case 'hexadecimalEscape': return '\\x' + ('00' + codePoint.toString(16).toUpperCase()).slice(-2); case 'identifier': return '\\' + fromCodePoint(codePoint); case 'null': return '\\' + codePoint; case 'octal': return '\\' + codePoint.toString(8); case 'singleEscape': switch (codePoint) { case 0x0008: return '\\b'; case 0x009: return '\\t'; case 0x00A: return '\\n'; case 0x00B: return '\\v'; case 0x00C: return '\\f'; case 0x00D: return '\\r'; default: throw Error('Invalid codepoint: ' + codePoint); } case 'symbol': return fromCodePoint(codePoint); case 'unicodeEscape': return '\\u' + ('0000' + codePoint.toString(16).toUpperCase()).slice(-4); case 'unicodeCodePointEscape': return '\\u{' + codePoint.toString(16).toUpperCase() + '}'; default: throw Error('Unsupported node kind: ' + kind); } } generate.alternative = generateAlternative; generate.anchor = generateAnchor; generate.characterClass = generateCharacterClass; generate.characterClassEscape = generateCharacterClassEscape; generate.characterClassRange = generateCharacterClassRange; generate.disjunction = generateDisjunction; generate.dot = generateDot; generate.group = generateGroup; generate.quantifier = generateQuantifier; generate.reference = generateReference; generate.value = generateValue; if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { define(function() { return {'generate': generate}; }); } else if (freeExports && freeModule) { freeExports.generate = generate; } else { root.regjsgen = {'generate': generate}; } }.call((void 0))); modules['regjsgen'] = {generate: exports.generate || window.regjsgen}; (function() { function parse(str, flags) { function addRaw(node) { node.raw = str.substring(node.range[0], node.range[1]); return node; } function updateRawStart(node, start) { node.range[0] = start; return addRaw(node); } function createAnchor(kind, rawLength) { return addRaw({ type: 'anchor', kind: kind, range: [pos - rawLength, pos] }); } function createValue(kind, codePoint, from, to) { return addRaw({ type: 'value', kind: kind, codePoint: codePoint, range: [from, to] }); } function createEscaped(kind, codePoint, value, fromOffset) { fromOffset = fromOffset || 0; return createValue(kind, codePoint, pos - (value.length + fromOffset), pos); } function createCharacter(matches) { var _char = matches[0]; var first = _char.charCodeAt(0); if (hasUnicodeFlag) { var second; if (_char.length === 1 && first >= 0xD800 && first <= 0xDBFF) { second = lookahead().charCodeAt(0); if (second >= 0xDC00 && second <= 0xDFFF) { pos++; return createValue('symbol', (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000, pos - 2, pos); } } } return createValue('symbol', first, pos - 1, pos); } function createDisjunction(alternatives, from, to) { return addRaw({ type: 'disjunction', body: alternatives, range: [from, to] }); } function createDot() { return addRaw({ type: 'dot', range: [pos - 1, pos] }); } function createCharacterClassEscape(value) { return addRaw({ type: 'characterClassEscape', value: value, range: [pos - 2, pos] }); } function createReference(matchIndex) { return addRaw({ type: 'reference', matchIndex: parseInt(matchIndex, 10), range: [pos - 1 - matchIndex.length, pos] }); } function createGroup(behavior, disjunction, from, to) { return addRaw({ type: 'group', behavior: behavior, body: disjunction, range: [from, to] }); } function createQuantifier(min, max, from, to) { if (to == null) { from = pos - 1; to = pos; } return addRaw({ type: 'quantifier', min: min, max: max, greedy: true, body: null, range: [from, to] }); } function createAlternative(terms, from, to) { return addRaw({ type: 'alternative', body: terms, range: [from, to] }); } function createCharacterClass(classRanges, negative, from, to) { return addRaw({ type: 'characterClass', body: classRanges, negative: negative, range: [from, to] }); } function createClassRange(min, max, from, to) { if (min.codePoint > max.codePoint) { bail('invalid range in character class', min.raw + '-' + max.raw, from, to); } return addRaw({ type: 'characterClassRange', min: min, max: max, range: [from, to] }); } function flattenBody(body) { if (body.type === 'alternative') { return body.body; } else { return [body]; } } function isEmpty(obj) { return obj.type === 'empty'; } function incr(amount) { amount = (amount || 1); var res = str.substring(pos, pos + amount); pos += (amount || 1); return res; } function skip(value) { if (!match(value)) { bail('character', value); } } function match(value) { if (str.indexOf(value, pos) === pos) { return incr(value.length); } } function lookahead() { return str[pos]; } function current(value) { return str.indexOf(value, pos) === pos; } function next(value) { return str[pos + 1] === value; } function matchReg(regExp) { var subStr = str.substring(pos); var res = subStr.match(regExp); if (res) { res.range = []; res.range[0] = pos; incr(res[0].length); res.range[1] = pos; } return res; } function parseDisjunction() { var res = [], from = pos; res.push(parseAlternative()); while (match('|')) { res.push(parseAlternative()); } if (res.length === 1) { return res[0]; } return createDisjunction(res, from, pos); } function parseAlternative() { var res = [], from = pos; var term; while (term = parseTerm()) { res.push(term); } if (res.length === 1) { return res[0]; } return createAlternative(res, from, pos); } function parseTerm() { if (pos >= str.length || current('|') || current(')')) { return null; } var anchor = parseAnchor(); if (anchor) { return anchor; } var atom = parseAtom(); if (!atom) { bail('Expected atom'); } var quantifier = parseQuantifier() || false; if (quantifier) { quantifier.body = flattenBody(atom); updateRawStart(quantifier, atom.range[0]); return quantifier; } return atom; } function parseGroup(matchA, typeA, matchB, typeB) { var type = null, from = pos; if (match(matchA)) { type = typeA; } else if (match(matchB)) { type = typeB; } else { return false; } var body = parseDisjunction(); if (!body) { bail('Expected disjunction'); } skip(')'); var group = createGroup(type, flattenBody(body), from, pos); if (type == 'normal') { if (firstIteration) { closedCaptureCounter++; } } return group; } function parseAnchor() { var res, from = pos; if (match('^')) { return createAnchor('start', 1); } else if (match('$')) { return createAnchor('end', 1); } else if (match('\\b')) { return createAnchor('boundary', 2); } else if (match('\\B')) { return createAnchor('not-boundary', 2); } else { return parseGroup('(?=', 'lookahead', '(?!', 'negativeLookahead'); } } function parseQuantifier() { var res, from = pos; var quantifier; var min, max; if (match('*')) { quantifier = createQuantifier(0); } else if (match('+')) { quantifier = createQuantifier(1); } else if (match('?')) { quantifier = createQuantifier(0, 1); } else if (res = matchReg(/^\{([0-9]+)\}/)) { min = parseInt(res[1], 10); quantifier = createQuantifier(min, min, res.range[0], res.range[1]); } else if (res = matchReg(/^\{([0-9]+),\}/)) { min = parseInt(res[1], 10); quantifier = createQuantifier(min, undefined, res.range[0], res.range[1]); } else if (res = matchReg(/^\{([0-9]+),([0-9]+)\}/)) { min = parseInt(res[1], 10); max = parseInt(res[2], 10); if (min > max) { bail('numbers out of order in {} quantifier', '', from, pos); } quantifier = createQuantifier(min, max, res.range[0], res.range[1]); } if (quantifier) { if (match('?')) { quantifier.greedy = false; quantifier.range[1] += 1; } } return quantifier; } function parseAtom() { var res; if (res = matchReg(/^[^^$\\.*+?(){[|]/)) { return createCharacter(res); } else if (match('.')) { return createDot(); } else if (match('\\')) { res = parseAtomEscape(); if (!res) { bail('atomEscape'); } return res; } else if (res = parseCharacterClass()) { return res; } else { return parseGroup('(?:', 'ignore', '(', 'normal'); } } function parseUnicodeSurrogatePairEscape(firstEscape) { if (hasUnicodeFlag) { var first, second; if (firstEscape.kind == 'unicodeEscape' && (first = firstEscape.codePoint) >= 0xD800 && first <= 0xDBFF && current('\\') && next('u')) { var prevPos = pos; pos++; var secondEscape = parseClassEscape(); if (secondEscape.kind == 'unicodeEscape' && (second = secondEscape.codePoint) >= 0xDC00 && second <= 0xDFFF) { firstEscape.range[1] = secondEscape.range[1]; firstEscape.codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; firstEscape.type = 'value'; firstEscape.kind = 'unicodeCodePointEscape'; addRaw(firstEscape); } else { pos = prevPos; } } } return firstEscape; } function parseClassEscape() { return parseAtomEscape(true); } function parseAtomEscape(insideCharacterClass) { var res, from = pos; res = parseDecimalEscape(); if (res) { return res; } if (insideCharacterClass) { if (match('b')) { return createEscaped('singleEscape', 0x0008, '\\b'); } else if (match('B')) { bail('\\B not possible inside of CharacterClass', '', from); } } res = parseCharacterEscape(); return res; } function parseDecimalEscape() { var res, match; if (res = matchReg(/^(?!0)\d+/)) { match = res[0]; var refIdx = parseInt(res[0], 10); if (refIdx <= closedCaptureCounter) { return createReference(res[0]); } else { backrefDenied.push(refIdx); incr(-res[0].length); if (res = matchReg(/^[0-7]{1,3}/)) { return createEscaped('octal', parseInt(res[0], 8), res[0], 1); } else { res = createCharacter(matchReg(/^[89]/)); return updateRawStart(res, res.range[0] - 1); } } } else if (res = matchReg(/^[0-7]{1,3}/)) { match = res[0]; if (/^0{1,3}$/.test(match)) { return createEscaped('null', 0x0000, '0', match.length + 1); } else { return createEscaped('octal', parseInt(match, 8), match, 1); } } else if (res = matchReg(/^[dDsSwW]/)) { return createCharacterClassEscape(res[0]); } return false; } function parseCharacterEscape() { var res; if (res = matchReg(/^[fnrtv]/)) { var codePoint = 0; switch (res[0]) { case 't': codePoint = 0x009; break; case 'n': codePoint = 0x00A; break; case 'v': codePoint = 0x00B; break; case 'f': codePoint = 0x00C; break; case 'r': codePoint = 0x00D; break; } return createEscaped('singleEscape', codePoint, '\\' + res[0]); } else if (res = matchReg(/^c([a-zA-Z])/)) { return createEscaped('controlLetter', res[1].charCodeAt(0) % 32, res[1], 2); } else if (res = matchReg(/^x([0-9a-fA-F]{2})/)) { return createEscaped('hexadecimalEscape', parseInt(res[1], 16), res[1], 2); } else if (res = matchReg(/^u([0-9a-fA-F]{4})/)) { return parseUnicodeSurrogatePairEscape(createEscaped('unicodeEscape', parseInt(res[1], 16), res[1], 2)); } else if (hasUnicodeFlag && (res = matchReg(/^u\{([0-9a-fA-F]+)\}/))) { return createEscaped('unicodeCodePointEscape', parseInt(res[1], 16), res[1], 4); } else { return parseIdentityEscape(); } } function isIdentifierPart(ch) { var NonAsciiIdentifierPart = new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]'); return (ch === 36) || (ch === 95) || (ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122) || (ch >= 48 && ch <= 57) || (ch === 92) || ((ch >= 0x80) && NonAsciiIdentifierPart.test(String.fromCharCode(ch))); } function parseIdentityEscape() { var ZWJ = '\u200C'; var ZWNJ = '\u200D'; var tmp; if (!isIdentifierPart(lookahead())) { tmp = incr(); return createEscaped('identifier', tmp.charCodeAt(0), tmp, 1); } if (match(ZWJ)) { return createEscaped('identifier', 0x200C, ZWJ); } else if (match(ZWNJ)) { return createEscaped('identifier', 0x200D, ZWNJ); } return null; } function parseCharacterClass() { var res, from = pos; if (res = matchReg(/^\[\^/)) { res = parseClassRanges(); skip(']'); return createCharacterClass(res, true, from, pos); } else if (match('[')) { res = parseClassRanges(); skip(']'); return createCharacterClass(res, false, from, pos); } return null; } function parseClassRanges() { var res; if (current(']')) { return []; } else { res = parseNonemptyClassRanges(); if (!res) { bail('nonEmptyClassRanges'); } return res; } } function parseHelperClassRanges(atom) { var from, to, res; if (current('-') && !next(']')) { skip('-'); res = parseClassAtom(); if (!res) { bail('classAtom'); } to = pos; var classRanges = parseClassRanges(); if (!classRanges) { bail('classRanges'); } from = atom.range[0]; if (classRanges.type === 'empty') { return [createClassRange(atom, res, from, to)]; } return [createClassRange(atom, res, from, to)].concat(classRanges); } res = parseNonemptyClassRangesNoDash(); if (!res) { bail('nonEmptyClassRangesNoDash'); } return [atom].concat(res); } function parseNonemptyClassRanges() { var atom = parseClassAtom(); if (!atom) { bail('classAtom'); } if (current(']')) { return [atom]; } return parseHelperClassRanges(atom); } function parseNonemptyClassRangesNoDash() { var res = parseClassAtom(); if (!res) { bail('classAtom'); } if (current(']')) { return res; } return parseHelperClassRanges(res); } function parseClassAtom() { if (match('-')) { return createCharacter('-'); } else { return parseClassAtomNoDash(); } } function parseClassAtomNoDash() { var res; if (res = matchReg(/^[^\\\]-]/)) { return createCharacter(res[0]); } else if (match('\\')) { res = parseClassEscape(); if (!res) { bail('classEscape'); } return parseUnicodeSurrogatePairEscape(res); } } function bail(message, details, from, to) { from = from == null ? pos : from; to = to == null ? from : to; var contextStart = Math.max(0, from - 10); var contextEnd = Math.min(to + 10, str.length); var context = ' ' + str.substring(contextStart, contextEnd); var pointer = ' ' + new Array(from - contextStart + 1).join(' ') + '^'; throw SyntaxError(message + ' at position ' + from + (details ? ': ' + details : '') + '\n' + context + '\n' + pointer); } var backrefDenied = []; var closedCaptureCounter = 0; var firstIteration = true; var hasUnicodeFlag = (flags || "").indexOf("u") !== -1; var pos = 0; str = String(str); if (str === '') { str = '(?:)'; } var result = parseDisjunction(); if (result.range[1] !== str.length) { bail('Could not parse entire input - got stuck', '', result.range[1]); } for (var i = 0; i < backrefDenied.length; i++) { if (backrefDenied[i] <= closedCaptureCounter) { pos = 0; firstIteration = false; return parseDisjunction(); } } return result; } var regjsparser = {parse: parse}; if (typeof module !== 'undefined' && module.exports) { module.exports = regjsparser; } else { window.regjsparser = regjsparser; } }()); modules['regjsparser'] = module.exports || window.regjsparser; modules['./data/iu-mappings.json'] = ({ "75": 8490, "83": 383, "107": 8490, "115": 383, "181": 924, "197": 8491, "383": 83, "452": 453, "453": 452, "455": 456, "456": 455, "458": 459, "459": 458, "497": 498, "498": 497, "837": 8126, "914": 976, "917": 1013, "920": 1012, "921": 8126, "922": 1008, "924": 181, "928": 982, "929": 1009, "931": 962, "934": 981, "937": 8486, "962": 931, "976": 914, "977": 1012, "981": 934, "982": 928, "1008": 922, "1009": 929, "1012": [920, 977], "1013": 917, "7776": 7835, "7835": 7776, "8126": [837, 921], "8486": 937, "8490": 75, "8491": 197, "66560": 66600, "66561": 66601, "66562": 66602, "66563": 66603, "66564": 66604, "66565": 66605, "66566": 66606, "66567": 66607, "66568": 66608, "66569": 66609, "66570": 66610, "66571": 66611, "66572": 66612, "66573": 66613, "66574": 66614, "66575": 66615, "66576": 66616, "66577": 66617, "66578": 66618, "66579": 66619, "66580": 66620, "66581": 66621, "66582": 66622, "66583": 66623, "66584": 66624, "66585": 66625, "66586": 66626, "66587": 66627, "66588": 66628, "66589": 66629, "66590": 66630, "66591": 66631, "66592": 66632, "66593": 66633, "66594": 66634, "66595": 66635, "66596": 66636, "66597": 66637, "66598": 66638, "66599": 66639, "66600": 66560, "66601": 66561, "66602": 66562, "66603": 66563, "66604": 66564, "66605": 66565, "66606": 66566, "66607": 66567, "66608": 66568, "66609": 66569, "66610": 66570, "66611": 66571, "66612": 66572, "66613": 66573, "66614": 66574, "66615": 66575, "66616": 66576, "66617": 66577, "66618": 66578, "66619": 66579, "66620": 66580, "66621": 66581, "66622": 66582, "66623": 66583, "66624": 66584, "66625": 66585, "66626": 66586, "66627": 66587, "66628": 66588, "66629": 66589, "66630": 66590, "66631": 66591, "66632": 66592, "66633": 66593, "66634": 66594, "66635": 66595, "66636": 66596, "66637": 66597, "66638": 66598, "66639": 66599, "71840": 71872, "71841": 71873, "71842": 71874, "71843": 71875, "71844": 71876, "71845": 71877, "71846": 71878, "71847": 71879, "71848": 71880, "71849": 71881, "71850": 71882, "71851": 71883, "71852": 71884, "71853": 71885, "71854": 71886, "71855": 71887, "71856": 71888, "71857": 71889, "71858": 71890, "71859": 71891, "71860": 71892, "71861": 71893, "71862": 71894, "71863": 71895, "71864": 71896, "71865": 71897, "71866": 71898, "71867": 71899, "71868": 71900, "71869": 71901, "71870": 71902, "71871": 71903, "71872": 71840, "71873": 71841, "71874": 71842, "71875": 71843, "71876": 71844, "71877": 71845, "71878": 71846, "71879": 71847, "71880": 71848, "71881": 71849, "71882": 71850, "71883": 71851, "71884": 71852, "71885": 71853, "71886": 71854, "71887": 71855, "71888": 71856, "71889": 71857, "71890": 71858, "71891": 71859, "71892": 71860, "71893": 71861, "71894": 71862, "71895": 71863, "71896": 71864, "71897": 71865, "71898": 71866, "71899": 71867, "71900": 71868, "71901": 71869, "71902": 71870, "71903": 71871 }); var regenerate = require('regenerate'); exports.REGULAR = { 'd': regenerate().addRange(0x30, 0x39), 'D': regenerate().addRange(0x0, 0x2F).addRange(0x3A, 0xFFFF), 's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF).addRange(0x9, 0xD).addRange(0x2000, 0x200A).addRange(0x2028, 0x2029), 'S': regenerate().addRange(0x0, 0x8).addRange(0xE, 0x1F).addRange(0x21, 0x9F).addRange(0xA1, 0x167F).addRange(0x1681, 0x180D).addRange(0x180F, 0x1FFF).addRange(0x200B, 0x2027).addRange(0x202A, 0x202E).addRange(0x2030, 0x205E).addRange(0x2060, 0x2FFF).addRange(0x3001, 0xFEFE).addRange(0xFF00, 0xFFFF), 'w': regenerate(0x5F).addRange(0x30, 0x39).addRange(0x41, 0x5A).addRange(0x61, 0x7A), 'W': regenerate(0x60).addRange(0x0, 0x2F).addRange(0x3A, 0x40).addRange(0x5B, 0x5E).addRange(0x7B, 0xFFFF) }; exports.UNICODE = { 'd': regenerate().addRange(0x30, 0x39), 'D': regenerate().addRange(0x0, 0x2F).addRange(0x3A, 0x10FFFF), 's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF).addRange(0x9, 0xD).addRange(0x2000, 0x200A).addRange(0x2028, 0x2029), 'S': regenerate().addRange(0x0, 0x8).addRange(0xE, 0x1F).addRange(0x21, 0x9F).addRange(0xA1, 0x167F).addRange(0x1681, 0x180D).addRange(0x180F, 0x1FFF).addRange(0x200B, 0x2027).addRange(0x202A, 0x202E).addRange(0x2030, 0x205E).addRange(0x2060, 0x2FFF).addRange(0x3001, 0xFEFE).addRange(0xFF00, 0x10FFFF), 'w': regenerate(0x5F).addRange(0x30, 0x39).addRange(0x41, 0x5A).addRange(0x61, 0x7A), 'W': regenerate(0x60).addRange(0x0, 0x2F).addRange(0x3A, 0x40).addRange(0x5B, 0x5E).addRange(0x7B, 0x10FFFF) }; exports.UNICODE_IGNORE_CASE = { 'd': regenerate().addRange(0x30, 0x39), 'D': regenerate().addRange(0x0, 0x2F).addRange(0x3A, 0x10FFFF), 's': regenerate(0x20, 0xA0, 0x1680, 0x180E, 0x202F, 0x205F, 0x3000, 0xFEFF).addRange(0x9, 0xD).addRange(0x2000, 0x200A).addRange(0x2028, 0x2029), 'S': regenerate().addRange(0x0, 0x8).addRange(0xE, 0x1F).addRange(0x21, 0x9F).addRange(0xA1, 0x167F).addRange(0x1681, 0x180D).addRange(0x180F, 0x1FFF).addRange(0x200B, 0x2027).addRange(0x202A, 0x202E).addRange(0x2030, 0x205E).addRange(0x2060, 0x2FFF).addRange(0x3001, 0xFEFE).addRange(0xFF00, 0x10FFFF), 'w': regenerate(0x5F, 0x17F, 0x212A).addRange(0x30, 0x39).addRange(0x41, 0x5A).addRange(0x61, 0x7A), 'W': regenerate(0x4B, 0x53, 0x60).addRange(0x0, 0x2F).addRange(0x3A, 0x40).addRange(0x5B, 0x5E).addRange(0x7B, 0x10FFFF) }; modules['./data/character-class-escape-sets.js'] = { REGULAR: exports.REGULAR, UNICODE: exports.UNICODE, UNICODE_IGNORE_CASE: exports.UNICODE_IGNORE_CASE }; var generate = require('regjsgen').generate; var parse = require('regjsparser').parse; var regenerate = require('regenerate'); var iuMappings = require('./data/iu-mappings.json'); var ESCAPE_SETS = require('./data/character-class-escape-sets.js'); function getCharacterClassEscapeSet(character) { if (unicode) { if (ignoreCase) { return ESCAPE_SETS.UNICODE_IGNORE_CASE[character]; } return ESCAPE_SETS.UNICODE[character]; } return ESCAPE_SETS.REGULAR[character]; } var object = {}; var hasOwnProperty = object.hasOwnProperty; function has(object, property) { return hasOwnProperty.call(object, property); } var UNICODE_SET = regenerate().addRange(0x0, 0x10FFFF); var BMP_SET = regenerate().addRange(0x0, 0xFFFF); var DOT_SET_UNICODE = UNICODE_SET.clone().remove(0x000A, 0x000D, 0x2028, 0x2029); var DOT_SET = DOT_SET_UNICODE.clone().intersection(BMP_SET); regenerate.prototype.iuAddRange = function(min, max) { var $this = this; do { var folded = caseFold(min); if (folded) { $this.add(folded); } } while (++min <= max); return $this; }; function assign(target, source) { for (var key in source) { target[key] = source[key]; } } function update(item, pattern) { var tree = parse(pattern, ''); switch (tree.type) { case 'characterClass': case 'group': case 'value': break; default: tree = wrap(tree, pattern); } assign(item, tree); } function wrap(tree, pattern) { return { 'type': 'group', 'behavior': 'ignore', 'body': [tree], 'raw': '(?:' + pattern + ')' }; } function caseFold(codePoint) { return has(iuMappings, codePoint) ? iuMappings[codePoint] : false; } var ignoreCase = false; var unicode = false; function processCharacterClass(characterClassItem) { var set = regenerate(); var body = characterClassItem.body.forEach(function(item) { switch (item.type) { case 'value': set.add(item.codePoint); if (ignoreCase && unicode) { var folded = caseFold(item.codePoint); if (folded) { set.add(folded); } } break; case 'characterClassRange': var min = item.min.codePoint; var max = item.max.codePoint; set.addRange(min, max); if (ignoreCase && unicode) { set.iuAddRange(min, max); } break; case 'characterClassEscape': set.add(getCharacterClassEscapeSet(item.value)); break; default: throw Error('Unknown term type: ' + item.type); } }); if (characterClassItem.negative) { set = (unicode ? UNICODE_SET : BMP_SET).clone().remove(set); } update(characterClassItem, set.toString()); return characterClassItem; } function processTerm(item) { switch (item.type) { case 'dot': update(item, (unicode ? DOT_SET_UNICODE : DOT_SET).toString()); break; case 'characterClass': item = processCharacterClass(item); break; case 'characterClassEscape': update(item, getCharacterClassEscapeSet(item.value).toString()); break; case 'alternative': case 'disjunction': case 'group': case 'quantifier': item.body = item.body.map(processTerm); break; case 'value': var codePoint = item.codePoint; var set = regenerate(codePoint); if (ignoreCase && unicode) { var folded = caseFold(codePoint); if (folded) { set.add(folded); } } update(item, set.toString()); break; case 'anchor': case 'empty': case 'group': case 'reference': break; default: throw Error('Unknown term type: ' + item.type); } return item; } ; module.exports = function(pattern, flags) { var tree = parse(pattern, flags); ignoreCase = flags ? flags.indexOf('i') > -1 : false; unicode = flags ? flags.indexOf('u') > -1 : false; assign(tree, processTerm(tree)); return generate(tree); }; var regexpuRewritePattern = module.exports; return {get regexpuRewritePattern() { return regexpuRewritePattern; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).ParseTreeTransformer; var LiteralExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).LiteralExpression; var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).LiteralToken; var REGULAR_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).REGULAR_EXPRESSION; var regexpuRewritePattern = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../outputgeneration/regexpuRewritePattern.js", "traceur@0.0.112/src/codegeneration/RegularExpressionTransformer.js")).regexpuRewritePattern; var RegularExpressionTransformer = function($__super) { function RegularExpressionTransformer() { $traceurRuntime.superConstructor(RegularExpressionTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(RegularExpressionTransformer, {transformLiteralExpression: function(tree) { var token = tree.literalToken; if (token.type === REGULAR_EXPRESSION) { var value = token.value; var lastIndex = value.lastIndexOf('/'); var pattern = value.slice(1, lastIndex); var flags = value.slice(lastIndex + 1); if (flags.indexOf('u') !== -1) { var result = '/' + regexpuRewritePattern(pattern, flags) + '/' + flags.replace('u', ''); return new LiteralExpression(tree.location, new LiteralToken(REGULAR_EXPRESSION, result, token.location)); } } return tree; }}, {}, $__super); }(ParseTreeTransformer); return {get RegularExpressionTransformer() { return RegularExpressionTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/RestParameterTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js"; var FormalParameterList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js")).FormalParameterList; var ParameterTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParameterTransformer.js", "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js")).ParameterTransformer; var createIdentifierToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js")).createIdentifierToken; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/RestParameterTransformer.js")).parseStatement; function hasRestParameter(parameterList) { var parameters = parameterList.parameters; return parameters.length > 0 && parameters[parameters.length - 1].isRestParameter(); } function getRestParameterLiteralToken(parameterList) { var parameters = parameterList.parameters; return parameters[parameters.length - 1].parameter.identifier.identifierToken; } var RestParameterTransformer = function($__super) { function RestParameterTransformer() { $traceurRuntime.superConstructor(RestParameterTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(RestParameterTransformer, {transformFormalParameterList: function(tree) { var transformed = $traceurRuntime.superGet(this, RestParameterTransformer.prototype, "transformFormalParameterList").call(this, tree); if (hasRestParameter(transformed)) { var parametersWithoutRestParam = new FormalParameterList(transformed.location, transformed.parameters.slice(0, -1)); var startIndex = transformed.parameters.length - 1; var i = createIdentifierToken(this.getTempIdentifier()); var name = getRestParameterLiteralToken(transformed); var loop; if (startIndex) { loop = parseStatement($traceurRuntime.getTemplateObject(["\n for (var ", " = [], ", " = ", ";\n ", " < arguments.length; ", "++)\n ", "[", " - ", "] = arguments[", "];"]), name, i, startIndex, i, i, name, i, startIndex, i); } else { loop = parseStatement($traceurRuntime.getTemplateObject(["\n for (var ", " = [], ", " = 0;\n ", " < arguments.length; ", "++)\n ", "[", "] = arguments[", "];"]), name, i, i, i, name, i, i); } this.parameterStatements.push(loop); return parametersWithoutRestParam; } return transformed; }}, {}, $__super); }(ParameterTransformer); return {get RestParameterTransformer() { return RestParameterTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SpreadTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/SpreadTransformer.js"; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/PredefinedName.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")), APPLY = $__3.APPLY, BIND = $__3.BIND, FUNCTION = $__3.FUNCTION, PROTOTYPE = $__3.PROTOTYPE; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")), MEMBER_EXPRESSION = $__4.MEMBER_EXPRESSION, MEMBER_LOOKUP_EXPRESSION = $__4.MEMBER_LOOKUP_EXPRESSION, SPREAD_EXPRESSION = $__4.SPREAD_EXPRESSION; var Script = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")).Script; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")).TempVarTransformer; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")).default; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")), createArgumentList = $__8.createArgumentList, createArrayLiteral = $__8.createArrayLiteral, createAssignmentExpression = $__8.createAssignmentExpression, createCallExpression = $__8.createCallExpression, createEmptyArgumentList = $__8.createEmptyArgumentList, createIdentifierExpression = $__8.createIdentifierExpression, createMemberExpression = $__8.createMemberExpression, createMemberLookupExpression = $__8.createMemberLookupExpression, createNewExpression = $__8.createNewExpression, createNullLiteral = $__8.createNullLiteral, createParenExpression = $__8.createParenExpression, createVoid0 = $__8.createVoid0; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")), parseExpression = $__9.parseExpression, parseStatement = $__9.parseStatement; var prependStatements = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PrependStatements.js", "traceur@0.0.112/src/codegeneration/SpreadTransformer.js")).prependStatements; function hasSpreadMember(trees) { return trees.some(function(tree) { return tree && tree.type === SPREAD_EXPRESSION; }); } var SpreadTransformer = function($__super) { function SpreadTransformer() { $traceurRuntime.superConstructor(SpreadTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(SpreadTransformer, { createArrayFromElements_: function(elements) { var length = elements.length; var args = []; var lastArray; for (var i = 0; i < length; i++) { if (elements[i] && elements[i].type === SPREAD_EXPRESSION) { if (lastArray) { args.push(createArrayLiteral(lastArray)); lastArray = null; } args.push(this.transformAny(elements[i].expression)); } else { if (!lastArray) lastArray = []; lastArray.push(this.transformAny(elements[i])); } } if (lastArray) args.push(createArrayLiteral(lastArray)); var spread = this.getRuntimeExpression('spread'); return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), spread, createArgumentList(args)); }, desugarCallSpread_: function(tree) { var operand = this.transformAny(tree.operand); var functionObject, contextObject; this.pushTempScope(); if (operand.type === MEMBER_EXPRESSION) { var tempIdent = createIdentifierExpression(this.addTempVar()); var parenExpression = createParenExpression(createAssignmentExpression(tempIdent, operand.operand)); var memberName = operand.memberName; contextObject = tempIdent; functionObject = createMemberExpression(parenExpression, memberName); } else if (tree.operand.type === MEMBER_LOOKUP_EXPRESSION) { var tempIdent$__1 = createIdentifierExpression(this.addTempVar()); var parenExpression$__2 = createParenExpression(createAssignmentExpression(tempIdent$__1, operand.operand)); var memberExpression = this.transformAny(operand.memberExpression); contextObject = tempIdent$__1; functionObject = createMemberLookupExpression(parenExpression$__2, memberExpression); } else { contextObject = createVoid0(); functionObject = operand; } this.popTempScope(); var arrayExpression = this.createArrayFromElements_(tree.args.args); return createCallExpression(createMemberExpression(functionObject, APPLY), createArgumentList([contextObject, arrayExpression])); }, desugarNewSpread_: function(tree) { var arrayExpression = $traceurRuntime.spread([createNullLiteral()], tree.args.args); arrayExpression = this.createArrayFromElements_(arrayExpression); return createNewExpression(createParenExpression(createCallExpression(createMemberExpression(FUNCTION, PROTOTYPE, BIND, APPLY), createArgumentList([this.transformAny(tree.operand), arrayExpression]))), createEmptyArgumentList()); }, transformArrayLiteral: function(tree) { if (hasSpreadMember(tree.elements)) { return this.createArrayFromElements_(tree.elements); } return $traceurRuntime.superGet(this, SpreadTransformer.prototype, "transformArrayLiteral").call(this, tree); }, transformCallExpression: function(tree) { if (hasSpreadMember(tree.args.args)) { return this.desugarCallSpread_(tree); } return $traceurRuntime.superGet(this, SpreadTransformer.prototype, "transformCallExpression").call(this, tree); }, transformNewExpression: function(tree) { if (tree.args !== null && hasSpreadMember(tree.args.args)) { return this.desugarNewSpread_(tree); } return $traceurRuntime.superGet(this, SpreadTransformer.prototype, "transformNewExpression").call(this, tree); } }, {}, $__super); }(ImportRuntimeTrait(TempVarTransformer)); return {get SpreadTransformer() { return SpreadTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SuperTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/SuperTransformer.js"; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")).default; var TempVarTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TempVarTransformer.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")).TempVarTransformer; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")), ArgumentList = $__7.ArgumentList, ClassDeclaration = $__7.ClassDeclaration, ClassExpression = $__7.ClassExpression, GetAccessor = $__7.GetAccessor, MemberExpression = $__7.MemberExpression, Method = $__7.Method, SetAccessor = $__7.SetAccessor; var $__8 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")), MEMBER_EXPRESSION = $__8.MEMBER_EXPRESSION, MEMBER_LOOKUP_EXPRESSION = $__8.MEMBER_LOOKUP_EXPRESSION, SUPER_EXPRESSION = $__8.SUPER_EXPRESSION; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")), EQUAL = $__9.EQUAL, MINUS_MINUS = $__9.MINUS_MINUS, PLUS_PLUS = $__9.PLUS_PLUS; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")), createAssignmentExpression = $__10.createAssignmentExpression, createBindingIdentifier = $__10.createBindingIdentifier, createIdentifierExpression = $__10.createIdentifierExpression, createIdentifierToken = $__10.createIdentifierToken, createParenExpression = $__10.createParenExpression, createStringLiteral = $__10.createStringLiteral, createThisExpression = $__10.createThisExpression; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")).parseExpression; var ExplodeExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExplodeExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/SuperTransformer.js")).ExplodeExpressionTransformer; function hasSuperMemberExpression(tree) { return (tree.type === MEMBER_EXPRESSION || tree.type === MEMBER_LOOKUP_EXPRESSION) && tree.operand.type === SUPER_EXPRESSION; } var State = function() { function State(transformer, home) { this.transformer = transformer; this.home_ = home; this.tempName = home ? null : transformer.getTempIdentifier(); this.hasSuper = false; } return ($traceurRuntime.createClass)(State, {get home() { this.hasSuper = true; if (this.home_ === null) { this.home_ = createIdentifierExpression(createIdentifierToken(this.tempName)); } return this.home_; }}, {}); }(); var ClassState = function($__super) { function ClassState(transformer, tree) { var home = null; if (tree.name !== null) { home = createIdentifierExpression(tree.name.identifierToken); } $traceurRuntime.superConstructor(ClassState).call(this, transformer, home); this.name_ = tree.name; } return ($traceurRuntime.createClass)(ClassState, {get name() { if (this.name_ !== null) return this.name_; if (this.hasSuper) { return createBindingIdentifier(this.home.identifierToken); } return null; }}, {}, $__super); }(State); var PrototypeState = function($__super) { function PrototypeState(transformer, classState) { $traceurRuntime.superConstructor(PrototypeState).call(this, transformer, null); this.classState = classState; } return ($traceurRuntime.createClass)(PrototypeState, {get home() { var ident = this.classState.home; return new MemberExpression(null, ident, createIdentifierToken('prototype')); }}, {}, $__super); }(State); var SuperTransformer = function($__super) { function SuperTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(SuperTransformer).call(this, identifierGenerator, reporter, options); this.stateStack_ = []; } return ($traceurRuntime.createClass)(SuperTransformer, { pushState: function(state) { this.stateStack_.push(state); }, popState: function() { return this.stateStack_.pop(); }, peekState: function() { return this.stateStack_[this.stateStack_.length - 1]; }, transformObjectLiteral: function(tree) { var state = new State(this, null); this.pushState(state); this.pushState(state); var result = $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformObjectLiteral").call(this, tree); this.popState(); this.popState(); if (state.hasSuper) { this.registerTempVarName(state.tempName); return createAssignmentExpression(state.home, result); } this.releaseTempName(state.tempName); return result; }, transformClassExpression: function(tree) { var superClass = this.transformAny(tree.superClass); var annotations = this.transformList(tree.annotations); var classState = new ClassState(this, tree); var prototypeState = new PrototypeState(this, classState); this.pushState(classState); this.pushState(prototypeState); var elements = this.transformList(tree.elements); this.popState(); this.popState(); if (tree.name === null && tree.superClass !== null) { classState.home; } else if (tree.superClass === superClass && tree.elements === elements && tree.annotations === annotations) { return tree; } return new ClassExpression(tree.location, classState.name, superClass, elements, tree.annotations, tree.typeParameters); }, transformClassDeclaration: function(tree) { var superClass = this.transformAny(tree.superClass); var annotations = this.transformList(tree.annotations); var classState = new ClassState(this, tree); var prototypeState = new PrototypeState(this, classState); this.pushState(classState); this.pushState(prototypeState); var elements = this.transformList(tree.elements); this.popState(); this.popState(); if (tree.superClass === superClass && tree.elements === elements && tree.annotations === annotations) { return tree; } return new ClassDeclaration(tree.location, tree.name, superClass, elements, tree.annotations, tree.typeParameters); }, transformMethod: function(tree) { var name = this.transformAny(tree.name); var prototypeState; if (tree.isStatic) { prototypeState = this.popState(); } var parameterList = this.transformAny(tree.parameterList); var body = this.transformAny(tree.body); if (tree.isStatic) { this.pushState(prototypeState); } if (tree.name === name && tree.parameterList === parameterList && tree.body === body) { return tree; } return new Method(tree.location, tree.isStatic, tree.functionKind, name, parameterList, tree.typeAnnotation, tree.annotations, body, tree.debugName); }, transformGetAccessor: function(tree) { var name = this.transformAny(tree.name); var prototypeState; if (tree.isStatic) { prototypeState = this.popState(); } var body = this.transformAny(tree.body); if (tree.isStatic) { this.pushState(prototypeState); } if (tree.name === name && tree.body === body) { return tree; } return new GetAccessor(tree.location, tree.isStatic, name, tree.typeAnnotation, tree.annotations, body); }, transformSetAccessor: function(tree) { var name = this.transformAny(tree.name); var prototypeState; if (tree.isStatic) { prototypeState = this.popState(); } var parameterList = this.transformAny(tree.parameterList); var body = this.transformAny(tree.body); if (tree.isStatic) { this.pushState(prototypeState); } if (tree.name === name && tree.parameterList === parameterList && tree.body === body) { return tree; } return new SetAccessor(tree.location, tree.isStatic, name, parameterList, tree.annotations, body); }, transformComputedPropertyName: function(tree) { var s1 = this.popState(); var s2 = this.popState(); var result = $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformComputedPropertyName").call(this, tree); this.pushState(s2); this.pushState(s1); return result; }, transformSuperExpression: function(tree) { throw new Error('unreachable'); }, transformMemberShared_: function(name) { var home = this.peekState().home; var superGet = this.getRuntimeExpression('superGet'); return parseExpression($traceurRuntime.getTemplateObject(["", "(this, ", ", ", ")"]), superGet, home, name); }, transformMemberExpression: function(tree) { if (tree.operand.type === SUPER_EXPRESSION) { return this.transformMemberShared_(tree.memberName.value); } return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformMemberExpression").call(this, tree); }, transformMemberLookupExpression: function(tree) { if (tree.operand.type === SUPER_EXPRESSION) return this.transformMemberShared_(tree.memberExpression); return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformMemberLookupExpression").call(this, tree); }, transformCallExpression: function(tree) { var operand, args; if (tree.operand.type === SUPER_EXPRESSION) { args = this.transformAny(tree.args); args = new ArgumentList(tree.location, $traceurRuntime.spread([createThisExpression()], args.args)); var home = this.stateStack_[this.stateStack_.length - 2].home; var superConstructor = this.getRuntimeExpression('superConstructor'); operand = parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), superConstructor, home); } else if (hasSuperMemberExpression(tree.operand)) { operand = this.transformAny(tree.operand); args = this.transformAny(tree.args); args = new ArgumentList(args.location, $traceurRuntime.spread([createThisExpression()], args.args)); } else { return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformCallExpression").call(this, tree); } return parseExpression($traceurRuntime.getTemplateObject(["", ".call(", ")"]), operand, args); }, transformBinaryExpression: function(tree) { if (tree.operator.isAssignmentOperator() && hasSuperMemberExpression(tree.left)) { if (tree.operator.type !== EQUAL) { var exploded = new ExplodeExpressionTransformer(this).transformAny(tree); return this.transformAny(createParenExpression(exploded)); } var name = tree.left.type === MEMBER_LOOKUP_EXPRESSION ? tree.left.memberExpression : createStringLiteral(tree.left.memberName.value); var right = this.transformAny(tree.right); var home = this.peekState().home; var superSet = this.getRuntimeExpression('superSet'); return parseExpression($traceurRuntime.getTemplateObject(["", "(this, ", ", ", ", ", ")"]), superSet, home, name, right); } return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformBinaryExpression").call(this, tree); }, transformUnaryExpression: function(tree) { var transformed = this.transformIncrementDecrement_(tree); if (transformed) return transformed; return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformUnaryExpression").call(this, tree); }, transformPostfixExpression: function(tree) { var transformed = this.transformIncrementDecrement_(tree); if (transformed) return transformed; return $traceurRuntime.superGet(this, SuperTransformer.prototype, "transformPostfixExpression").call(this, tree); }, transformIncrementDecrement_: function(tree) { var operator = tree.operator; var operand = tree.operand; if ((operator.type === PLUS_PLUS || operator.type === MINUS_MINUS) && hasSuperMemberExpression(operand)) { var exploded = new ExplodeExpressionTransformer(this).transformAny(tree); if (exploded !== tree) exploded = createParenExpression(exploded); return this.transformAny(exploded); } return null; } }, {}, $__super); }(ImportRuntimeTrait(TempVarTransformer)); return {get SuperTransformer() { return SuperTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/SymbolTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/SymbolTransformer.js"; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")), BinaryExpression = $__3.BinaryExpression, UnaryExpression = $__3.UnaryExpression; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")), IDENTIFIER_EXPRESSION = $__4.IDENTIFIER_EXPRESSION, LITERAL_EXPRESSION = $__4.LITERAL_EXPRESSION, UNARY_EXPRESSION = $__4.UNARY_EXPRESSION; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")).ParseTreeTransformer; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")).default; var $__7 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")), EQUAL_EQUAL = $__7.EQUAL_EQUAL, EQUAL_EQUAL_EQUAL = $__7.EQUAL_EQUAL_EQUAL, NOT_EQUAL = $__7.NOT_EQUAL, NOT_EQUAL_EQUAL = $__7.NOT_EQUAL_EQUAL, TYPEOF = $__7.TYPEOF; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/SymbolTransformer.js")).parseExpression; function isEqualityExpression(tree) { switch (tree.operator.type) { case EQUAL_EQUAL: case EQUAL_EQUAL_EQUAL: case NOT_EQUAL: case NOT_EQUAL_EQUAL: return true; } return false; } function isTypeof(tree) { return tree.type === UNARY_EXPRESSION && tree.operator.type === TYPEOF; } function isSafeTypeofString(tree) { if (tree.type !== LITERAL_EXPRESSION) return false; var value = tree.literalToken.processedValue; switch (value) { case 'symbol': case 'object': return false; } return true; } var SymbolTransformer = function($__super) { function SymbolTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(SymbolTransformer).call(this); this.identifierGenerator = identifierGenerator; this.reporter = reporter; this.options = options; } return ($traceurRuntime.createClass)(SymbolTransformer, { transformTypeofOperand_: function(tree) { var operand = this.transformAny(tree.operand); return new UnaryExpression(tree.location, tree.operator, operand); }, transformBinaryExpression: function(tree) { if (isEqualityExpression(tree)) { if (isTypeof(tree.left) && isSafeTypeofString(tree.right)) { var left = this.transformTypeofOperand_(tree.left); var right = tree.right; return new BinaryExpression(tree.location, left, tree.operator, right); } if (isTypeof(tree.right) && isSafeTypeofString(tree.left)) { var left$__1 = tree.left; var right$__2 = this.transformTypeofOperand_(tree.right); return new BinaryExpression(tree.location, left$__1, tree.operator, right$__2); } } return $traceurRuntime.superGet(this, SymbolTransformer.prototype, "transformBinaryExpression").call(this, tree); }, transformUnaryExpression: function(tree) { if (tree.operator.type !== TYPEOF) return $traceurRuntime.superGet(this, SymbolTransformer.prototype, "transformUnaryExpression").call(this, tree); var operand = this.transformAny(tree.operand); var expression = this.getRuntimeTypeof(operand); if (operand.type === IDENTIFIER_EXPRESSION) { return parseExpression($traceurRuntime.getTemplateObject(["(typeof ", " === 'undefined' ?\n 'undefined' : ", ")"]), operand, expression); } return expression; }, getRuntimeTypeof: function(operand) { var typeOf = this.getRuntimeExpression('typeof'); return parseExpression($traceurRuntime.getTemplateObject(["", "(", ")"]), typeOf, operand); } }, {}, $__super); }(ImportRuntimeTrait(ParseTreeTransformer)); return {get SymbolTransformer() { return SymbolTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js"; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")), BINARY_EXPRESSION = $__3.BINARY_EXPRESSION, COMMA_EXPRESSION = $__3.COMMA_EXPRESSION, CONDITIONAL_EXPRESSION = $__3.CONDITIONAL_EXPRESSION, TEMPLATE_LITERAL_PORTION = $__3.TEMPLATE_LITERAL_PORTION, TEMPLATE_LITERAL_EXPRESSION = $__3.TEMPLATE_LITERAL_EXPRESSION; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")), LiteralExpression = $__4.LiteralExpression, NewExpression = $__4.NewExpression; var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")).LiteralToken; var ParenTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParenTrait.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")).ParenTrait; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")).ParseTreeTransformer; var ImportRuntimeTrait = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ImportRuntimeTrait.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")).default; var $__9 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")), PERCENT = $__9.PERCENT, PLUS = $__9.PLUS, SLASH = $__9.SLASH, STAR = $__9.STAR, STRING = $__9.STRING; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/TemplateLiteralTransformer.js")), createArgumentList = $__10.createArgumentList, createArrayLiteral = $__10.createArrayLiteral, createBinaryExpression = $__10.createBinaryExpression, createCallExpression = $__10.createCallExpression, createMemberExpression = $__10.createMemberExpression, createOperatorToken = $__10.createOperatorToken, createParenExpression = $__10.createParenExpression; function createStringLiteralExpression(loc, str) { return new LiteralExpression(loc, new LiteralToken(STRING, str, loc)); } function createGetTemplateObject(elements, getTemplateObject) { var cooked = []; var raw = []; var same = true; for (var i = 0; i < elements.length; i += 2) { var loc = elements[i].location; var str = elements[i].value.value; var cookedStr = toCookedString(str); var rawStr = toRawString(str); var cookedLiteral$__1 = createStringLiteralExpression(loc, cookedStr); cooked.push(cookedLiteral$__1); if (cookedStr !== rawStr) { same = false; var rawLiteral = createStringLiteralExpression(loc, rawStr); raw.push(rawLiteral); } else { raw.push(cookedLiteral$__1); } } maybeAddEmptyStringAtEnd(elements, cooked); var cookedLiteral = createArrayLiteral(cooked); var args = [cookedLiteral]; if (!same) { maybeAddEmptyStringAtEnd(elements, raw); var rawLiteral$__2 = createArrayLiteral(raw); args.unshift(rawLiteral$__2); } return createCallExpression(getTemplateObject, createArgumentList(args)); } function maybeAddEmptyStringAtEnd(elements, items) { var length = elements.length; if (!length || elements[length - 1].type !== TEMPLATE_LITERAL_PORTION) { items.push(createStringLiteralExpression(null, '""')); } } function toRawString(str) { str = str.replace(/\r\n?/g, '\n'); str = JSON.stringify(str); return str.replace(/\u2028|\u2029/g, function(c) { switch (c) { case '\u2028': return '\\u2028'; case '\u2029': return '\\u2029'; default: throw Error('Not reachable'); } }); } function toCookedString(s) { var sb = ['"']; var i = 0, k = 1, c, c2; while (i < s.length) { c = s[i++]; switch (c) { case '\\': c2 = s[i++]; switch (c2) { case '\n': case '\u2028': case '\u2029': break; case '\r': if (s[i + 1] === '\n') { i++; } break; default: sb[k++] = c; sb[k++] = c2; } break; case '"': sb[k++] = '\\"'; break; case '\n': sb[k++] = '\\n'; break; case '\r': if (s[i] === '\n') i++; sb[k++] = '\\n'; break; case '\t': sb[k++] = '\\t'; break; case '\f': sb[k++] = '\\f'; break; case '\b': sb[k++] = '\\b'; break; case '\u2028': sb[k++] = '\\u2028'; break; case '\u2029': sb[k++] = '\\u2029'; break; default: sb[k++] = c; } } sb[k++] = '"'; return sb.join(''); } var TemplateLiteralTransformer = function($__super) { function TemplateLiteralTransformer(identifierGenerator, reporter, options) { $traceurRuntime.superConstructor(TemplateLiteralTransformer).call(this); this.options = options; } return ($traceurRuntime.createClass)(TemplateLiteralTransformer, { transformTemplateLiteralExpression: function(tree) { if (!tree.operand) { return this.createDefaultTemplateLiteral(tree); } var operand = this.transformAny(tree.operand); var elements = tree.elements; var getTemplateObject = this.getRuntimeExpression('getTemplateObject'); var args = [createGetTemplateObject(tree.elements, getTemplateObject)]; for (var i = 1; i < elements.length; i += 2) { args.push(this.transformAny(elements[i])); } return createCallExpression(operand, createArgumentList(args)); }, transformTemplateSubstitution: function(tree) { var transformedTree = this.transformAny(tree.expression); switch (transformedTree.type) { case BINARY_EXPRESSION: switch (transformedTree.operator.type) { case STAR: case PERCENT: case SLASH: return transformedTree; } return createParenExpression(transformedTree); case COMMA_EXPRESSION: case CONDITIONAL_EXPRESSION: return createParenExpression(transformedTree); } return transformedTree; }, transformTemplateLiteralPortion: function(tree) { var str = toCookedString(tree.value.value); return createStringLiteralExpression(tree.location, str); }, createDefaultTemplateLiteral: function(tree) { var elements = tree.elements; var length = elements.length; if (length === 0) { return createStringLiteralExpression(tree.location, '""'); } var firstNonEmpty = elements[0].value.value === ''; var binaryExpression = this.transformAny(elements[0]); if (length === 1) return binaryExpression; var plusToken = createOperatorToken(PLUS); for (var i = 1; i < length; i++) { var element = elements[i]; if (element.type === TEMPLATE_LITERAL_PORTION) { if (element.value.value === '') { continue; } if (firstNonEmpty && i === 2) { binaryExpression = binaryExpression.right; } } var transformedTree = this.transformAny(elements[i]); binaryExpression = createBinaryExpression(binaryExpression, plusToken, transformedTree); } return new createParenExpression(binaryExpression); } }, {}, $__super); }(ImportRuntimeTrait(ParenTrait(ParseTreeTransformer))); return {get TemplateLiteralTransformer() { return TemplateLiteralTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js")).ParseTreeTransformer; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js")), ArgumentList = $__2.ArgumentList, IdentifierExpression = $__2.IdentifierExpression, MemberExpression = $__2.MemberExpression; var parseExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/TypeToExpressionTransformer.js")).parseExpression; var TypeToExpressionTransformer = function($__super) { function TypeToExpressionTransformer() { $traceurRuntime.superConstructor(TypeToExpressionTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(TypeToExpressionTransformer, { transformTypeName: function(tree) { if (tree.moduleName) { var operand = this.transformAny(tree.moduleName); return new MemberExpression(tree.location, operand, tree.name); } return new IdentifierExpression(tree.location, tree.name); }, transformPredefinedType: function(tree) { return parseExpression($traceurRuntime.getTemplateObject(["$traceurRuntime.type.", ")"]), tree.typeToken); }, transformTypeReference: function(tree) { var typeName = this.transformAny(tree.typeName); var args = this.transformAny(tree.args); var argumentList = new ArgumentList(tree.location, $traceurRuntime.spread([typeName], args)); return parseExpression($traceurRuntime.getTemplateObject(["$traceurRuntime.genericType(", ")"]), argumentList); }, transformTypeArguments: function(tree) { return this.transformList(tree.args); } }, {}, $__super); }(ParseTreeTransformer); return {get TypeToExpressionTransformer() { return TypeToExpressionTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/TypeTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/TypeTransformer.js"; var $__1 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/TypeTransformer.js")), AnonBlock = $__1.AnonBlock, FormalParameter = $__1.FormalParameter, FunctionDeclaration = $__1.FunctionDeclaration, FunctionExpression = $__1.FunctionExpression, GetAccessor = $__1.GetAccessor, Method = $__1.Method, VariableDeclaration = $__1.VariableDeclaration; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/TypeTransformer.js")), IMPORT_TYPE_CLAUSE = $__2.IMPORT_TYPE_CLAUSE, TYPE_ALIAS_DECLARATION = $__2.TYPE_ALIAS_DECLARATION; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/TypeTransformer.js")).ParseTreeTransformer; var TypeTransformer = function($__super) { function TypeTransformer() { $traceurRuntime.superConstructor(TypeTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(TypeTransformer, { transformVariableDeclaration: function(tree) { if (tree.typeAnnotation) { tree = new VariableDeclaration(tree.location, tree.lvalue, null, tree.initializer); } return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformVariableDeclaration").call(this, tree); }, transformFormalParameter: function(tree) { if (tree.typeAnnotation !== null) return new FormalParameter(tree.location, tree.parameter, null, []); return tree; }, transformFunctionDeclaration: function(tree) { if (tree.typeAnnotation) { tree = new FunctionDeclaration(tree.location, tree.name, tree.functionKind, tree.parameterList, null, tree.annotations, tree.body); } return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformFunctionDeclaration").call(this, tree); }, transformFunctionExpression: function(tree) { if (tree.typeAnnotation) { tree = new FunctionExpression(tree.location, tree.name, tree.functionKind, tree.parameterList, null, tree.annotations, tree.body); } return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformFunctionExpression").call(this, tree); }, transformMethod: function(tree) { if (tree.typeAnnotation) { tree = new Method(tree.location, tree.isStatic, tree.functionKind, tree.name, tree.parameterList, null, tree.annotations, tree.body, tree.debugName); } return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformMethod").call(this, tree); }, transformGetAccessor: function(tree) { if (tree.typeAnnotation) { tree = new GetAccessor(tree.location, tree.isStatic, tree.name, null, tree.annotations, tree.body); } return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformGetAccessor").call(this, tree); }, transformInterfaceDeclaration: function(tree) { return new AnonBlock(null, []); }, transformExportDeclaration: function(tree) { if (tree.declaration.type === TYPE_ALIAS_DECLARATION) { return new AnonBlock(null, []); } return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformExportDeclaration").call(this, tree); }, transformTypeAliasDeclaration: function(tree) { return new AnonBlock(null, []); }, transformImportDeclaration: function(tree) { if (!tree.importClause || tree.importClause.type === IMPORT_TYPE_CLAUSE) { return new AnonBlock(null, []); } return $traceurRuntime.superGet(this, TypeTransformer.prototype, "transformImportDeclaration").call(this, tree); } }, {}, $__super); }(ParseTreeTransformer); return {get TypeTransformer() { return TypeTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js")).ParseTreeTransformer; var LiteralExpression = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js")).LiteralExpression; var LiteralToken = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/LiteralToken.js", "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js")).LiteralToken; var STRING = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/UnicodeEscapeSequenceTransformer.js")).STRING; var re = /(\\*)\\u{([0-9a-fA-F]+)}/g; function zeroPad(value) { return '0000'.slice(value.length) + value; } function needsTransform(token) { return token.type === STRING && re.test(token.value); } function transformToken(token) { return token.value.replace(re, function(match, backslashes, hexDigits) { var backslashIsEscaped = backslashes.length % 2 === 1; if (backslashIsEscaped) { return match; } var codePoint = parseInt(hexDigits, 16); var value; if (codePoint <= 0xFFFF) { value = '\\u' + zeroPad(codePoint.toString(16).toUpperCase()); } else { var high = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800; var low = (codePoint - 0x10000) % 0x400 + 0xDC00; value = '\\u' + high.toString(16).toUpperCase() + '\\u' + low.toString(16).toUpperCase(); } return backslashes + value; }); } var UnicodeEscapeSequenceTransformer = function($__super) { function UnicodeEscapeSequenceTransformer() { $traceurRuntime.superConstructor(UnicodeEscapeSequenceTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(UnicodeEscapeSequenceTransformer, {transformLiteralExpression: function(tree) { var token = tree.literalToken; if (needsTransform(token)) { var value = transformToken(token); return new LiteralExpression(tree.location, new LiteralToken(STRING, value, token.location)); } return tree; }}, {}, $__super); }(ParseTreeTransformer); return {get UnicodeEscapeSequenceTransformer() { return UnicodeEscapeSequenceTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/UniqueIdentifierGenerator.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/UniqueIdentifierGenerator.js"; var UniqueIdentifierGenerator = function() { function UniqueIdentifierGenerator() { this.identifierIndex = 0; } return ($traceurRuntime.createClass)(UniqueIdentifierGenerator, {generateUniqueIdentifier: function() { return ("$__" + this.identifierIndex++); }}, {}); }(); return {get UniqueIdentifierGenerator() { return UniqueIdentifierGenerator; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/ConstChecker.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/ConstChecker.js"; var IDENTIFIER_EXPRESSION = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/semantics/ConstChecker.js")).IDENTIFIER_EXPRESSION; var $__3 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/semantics/ConstChecker.js")), CONST = $__3.CONST, MINUS_MINUS = $__3.MINUS_MINUS, PLUS_PLUS = $__3.PLUS_PLUS; var ScopeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeVisitor.js", "traceur@0.0.112/src/semantics/ConstChecker.js")).ScopeVisitor; var ScopeChainBuilder = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeChainBuilder.js", "traceur@0.0.112/src/semantics/ConstChecker.js")).ScopeChainBuilder; var ConstChecker = function($__super) { function ConstChecker(scopeBuilder, reporter) { $traceurRuntime.superConstructor(ConstChecker).call(this); this.scopeBuilder_ = scopeBuilder; this.reporter_ = reporter; } return ($traceurRuntime.createClass)(ConstChecker, { pushScope: function(tree) { return this.scope = this.scopeBuilder_.getScopeForTree(tree); }, visitUnaryExpression: function(tree) { if (tree.operand.type === IDENTIFIER_EXPRESSION && (tree.operator.type === PLUS_PLUS || tree.operator.type === MINUS_MINUS)) { this.validateMutation_(tree.operand); } $traceurRuntime.superGet(this, ConstChecker.prototype, "visitUnaryExpression").call(this, tree); }, visitPostfixExpression: function(tree) { if (tree.operand.type === IDENTIFIER_EXPRESSION) { this.validateMutation_(tree.operand); } $traceurRuntime.superGet(this, ConstChecker.prototype, "visitPostfixExpression").call(this, tree); }, visitBinaryExpression: function(tree) { if (tree.left.type === IDENTIFIER_EXPRESSION && tree.operator.isAssignmentOperator()) { this.validateMutation_(tree.left); } $traceurRuntime.superGet(this, ConstChecker.prototype, "visitBinaryExpression").call(this, tree); }, validateMutation_: function(identifierExpression) { if (this.inWithBlock) { return; } var binding = this.scope.getBinding(identifierExpression); if (binding === null) { return; } var $__1 = binding, type = $__1.type, tree = $__1.tree; if (type === CONST) { this.reportError_(identifierExpression.location, (tree.getStringValue() + " is read-only")); } }, reportError_: function(location, message) { this.reporter_.reportError(location, message); } }, {}, $__super); }(ScopeVisitor); function validate(tree, reporter) { var builder = new ScopeChainBuilder(reporter); builder.visitAny(tree); var checker = new ConstChecker(builder, reporter); checker.visitAny(tree); } return { get ConstChecker() { return ConstChecker; }, get validate() { return validate; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/semantics/FreeVariableChecker.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/semantics/FreeVariableChecker.js"; var ScopeChainBuilderWithReferences = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ScopeChainBuilderWithReferences.js", "traceur@0.0.112/src/semantics/FreeVariableChecker.js")).ScopeChainBuilderWithReferences; var FreeVariableChecker = function($__super) { function FreeVariableChecker(reporter, global) { $traceurRuntime.superConstructor(FreeVariableChecker).call(this, reporter); this.global_ = global; } return ($traceurRuntime.createClass)(FreeVariableChecker, {referenceFound: function(tree, name) { if (this.scope.getBinding(tree)) return; if (!(name in this.global_)) { this.reporter.reportError(tree.location, (name + " is not defined")); } }}, {}, $__super); }(ScopeChainBuilderWithReferences); function validate(tree, reporter) { var global = arguments[2] !== (void 0) ? arguments[2] : Reflect.global; var checker = new FreeVariableChecker(reporter, global); checker.visitAny(tree); } return {get validate() { return validate; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js"; var AmdTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AmdTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).AmdTransformer; var AnnotationsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AnnotationsTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).AnnotationsTransformer; var ArrayComprehensionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ArrayComprehensionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ArrayComprehensionTransformer; var ArrowFunctionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ArrowFunctionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ArrowFunctionTransformer; var AsyncGeneratorTransformPass = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AsyncGeneratorTransformPass.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).AsyncGeneratorTransformPass; var AsyncToGeneratorTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AsyncToGeneratorTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).AsyncToGeneratorTransformer; var BlockBindingTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./BlockBindingTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).BlockBindingTransformer; var ClassTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ClassTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ClassTransformer; var ClosureModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ClosureModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ClosureModuleTransformer; var CommonJsModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./CommonJsModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).CommonJsModuleTransformer; var DefaultParametersTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./DefaultParametersTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).DefaultParametersTransformer; var DestructuringTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./DestructuringTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).DestructuringTransformer; var ExponentiationTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExponentiationTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ExponentiationTransformer; var ForOfTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ForOfTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ForOfTransformer; var ForOnTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ForOnTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ForOnTransformer; var GeneratorComprehensionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./GeneratorComprehensionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).GeneratorComprehensionTransformer; var GeneratorTransformPass = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./GeneratorTransformPass.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).GeneratorTransformPass; var InlineModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InlineModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).InlineModuleTransformer; var InstantiateModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InstantiateModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).InstantiateModuleTransformer; var JsxTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./JsxTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).JsxTransformer; var MemberVariableTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MemberVariableTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).MemberVariableTransformer; var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ModuleTransformer; var MultiTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MultiTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).MultiTransformer; var NumericLiteralTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./NumericLiteralTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).NumericLiteralTransformer; var ObjectLiteralTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ObjectLiteralTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ObjectLiteralTransformer; var ProperTailCallTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ProperTailCallTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).ProperTailCallTransformer; var PropertyNameShorthandTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PropertyNameShorthandTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).PropertyNameShorthandTransformer; var RegularExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./RegularExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).RegularExpressionTransformer; var RestParameterTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./RestParameterTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).RestParameterTransformer; var SpreadPropertiesTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SpreadPropertiesTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).SpreadPropertiesTransformer; var SpreadTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SpreadTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).SpreadTransformer; var SuperTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SuperTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).SuperTransformer; var SymbolTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SymbolTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).SymbolTransformer; var TemplateLiteralTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TemplateLiteralTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).TemplateLiteralTransformer; var TypeToExpressionTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TypeToExpressionTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).TypeToExpressionTransformer; var TypeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TypeTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).TypeTransformer; var UnicodeEscapeSequenceTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./UnicodeEscapeSequenceTransformer.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).UnicodeEscapeSequenceTransformer; var UniqueIdentifierGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./UniqueIdentifierGenerator.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).UniqueIdentifierGenerator; var validateConst = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/ConstChecker.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).validate; var validateFreeVariables = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/FreeVariableChecker.js", "traceur@0.0.112/src/codegeneration/FromOptionsTransformer.js")).validate; var FromOptionsTransformer = function($__super) { function FromOptionsTransformer(reporter, options) { var $__1; $traceurRuntime.superConstructor(FromOptionsTransformer).call(this, reporter, options.validate); var transformOptions = options.transformOptions; var idGenerator = new UniqueIdentifierGenerator(); var append = ($__1 = this, function(transformer) { $__1.append(function(tree) { return new transformer(idGenerator, reporter, options).transformAny(tree); }); }); if (transformOptions.blockBinding) { this.append(function(tree) { validateConst(tree, reporter); return tree; }); } if (options.freeVariableChecker) { this.append(function(tree) { validateFreeVariables(tree, reporter); return tree; }); } if (transformOptions.exponentiation) append(ExponentiationTransformer); if (transformOptions.numericLiterals) append(NumericLiteralTransformer); if (transformOptions.unicodeExpressions) append(RegularExpressionTransformer); if (transformOptions.jsx) { append(JsxTransformer); } if (transformOptions.templateLiterals) append(TemplateLiteralTransformer); if (transformOptions.types && transformOptions.annotations) { append(TypeToExpressionTransformer); } if (transformOptions.unicodeEscapeSequences) append(UnicodeEscapeSequenceTransformer); if (transformOptions.annotations) append(AnnotationsTransformer); if (transformOptions.propertyNameShorthand) append(PropertyNameShorthandTransformer); if (transformOptions.memberVariables) { append(MemberVariableTransformer); } if (transformOptions.classes) { append(SuperTransformer); } if (transformOptions.arrowFunctions) { append(ArrowFunctionTransformer); } if (transformOptions.classes) { append(ClassTransformer); } if (transformOptions.spreadProperties) { append(SpreadPropertiesTransformer); } if (transformOptions.propertyMethods || transformOptions.computedPropertyNames || transformOptions.properTailCalls) { append(ObjectLiteralTransformer); } if (transformOptions.generatorComprehension) append(GeneratorComprehensionTransformer); if (transformOptions.arrayComprehension) append(ArrayComprehensionTransformer); if (transformOptions.forOf) append(ForOfTransformer); if (transformOptions.asyncGenerators) { append(AsyncGeneratorTransformPass); } if (transformOptions.forOn) append(ForOnTransformer); if (transformOptions.restParameters) append(RestParameterTransformer); if (transformOptions.defaultParameters) append(DefaultParametersTransformer); if (transformOptions.destructuring) append(DestructuringTransformer); if (transformOptions.types) append(TypeTransformer); if (transformOptions.spread) append(SpreadTransformer); if (transformOptions.blockBinding) { this.append(function(tree) { var transformer = new BlockBindingTransformer(idGenerator, reporter, tree); return transformer.transformAny(tree); }); } if (transformOptions.asyncFunctions && options.generators === 'parse') { append(AsyncToGeneratorTransformer); } else if (transformOptions.generators || transformOptions.asyncFunctions) { append(GeneratorTransformPass); } if (transformOptions.symbols) append(SymbolTransformer); if (transformOptions.properTailCalls) { append(ProperTailCallTransformer); } if (transformOptions.modules) { switch (transformOptions.modules) { case 'commonjs': append(CommonJsModuleTransformer); break; case 'amd': append(AmdTransformer); break; case 'closure': append(ClosureModuleTransformer); break; case 'inline': append(InlineModuleTransformer); break; case 'instantiate': append(InstantiateModuleTransformer); break; case 'bootstrap': append(ModuleTransformer); break; case 'parse': break; default: throw new Error('Invalid modules transform option'); } } } return ($traceurRuntime.createClass)(FromOptionsTransformer, {}, {}, $__super); }(MultiTransformer); return {get FromOptionsTransformer() { return FromOptionsTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js"; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/TokenType.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")), CONST = $__2.CONST, LET = $__2.LET; var ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")).ModuleTransformer; var $__4 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeFactory.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")), createAssignmentStatement = $__4.createAssignmentStatement, createArgumentList = $__4.createArgumentList, createBindingIdentifier = $__4.createBindingIdentifier, createCallExpression = $__4.createCallExpression, createExpressionStatement = $__4.createExpressionStatement, createForInStatement = $__4.createForInStatement, createFunctionBody = $__4.createFunctionBody, createIfStatement = $__4.createIfStatement, createImmediatelyInvokedFunctionExpression = $__4.createImmediatelyInvokedFunctionExpression, createIdentifierExpression = $__4.createIdentifierExpression, createMemberLookupExpression = $__4.createMemberLookupExpression, createMemberExpression = $__4.createMemberExpression, createObjectLiteral = $__4.createObjectLiteral, createReturnStatement = $__4.createReturnStatement, createUseStrictDirective = $__4.createUseStrictDirective, createVariableDeclarationList = $__4.createVariableDeclarationList, createVariableStatement = $__4.createVariableStatement; var IMPORT_SPECIFIER_SET = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTreeType.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")).IMPORT_SPECIFIER_SET; var AnonBlock = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")).AnonBlock; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/InlineES6ModuleTransformer.js")).parseStatement; var anonInlineModules = 0; var InlineES6ModuleTransformer = function($__super) { function InlineES6ModuleTransformer(identifierGenerator, reporter, options, metadata) { $traceurRuntime.superConstructor(InlineES6ModuleTransformer).call(this, identifierGenerator, reporter, options); this.metadata_ = metadata; } return ($traceurRuntime.createClass)(InlineES6ModuleTransformer, { moduleProlog: function() { return [createUseStrictDirective()]; }, wrapModule: function(statements) { var seed = this.moduleName || 'anon_' + ++anonInlineModules; var idName = this.getTempVarNameForModuleName(seed); if (this.isRootModule) { statements.pop(); return statements; } var body = createFunctionBody(statements); var moduleExpression = createImmediatelyInvokedFunctionExpression(body); return [createVariableStatement(CONST, idName, moduleExpression)]; }, transformExportDeclaration: function(tree) { if (this.isRootModule) return tree; this.exportVisitor.visitAny(tree); return this.transformAny(tree.declaration); }, transformImportDeclaration: function(tree) { if (!tree.importClause || (tree.importClause.type === IMPORT_SPECIFIER_SET && tree.importClause.specifiers.length === 0)) { return createExpressionStatement(this.transformAny(tree.moduleSpecifier)); } var binding = this.transformAny(tree.importClause); var initializer = this.transformAny(tree.moduleSpecifier); return createVariableStatement(CONST, binding, initializer); }, transformNamedExport: function(tree) { return new AnonBlock(null, []); }, addExportStatement: function(statements) { var $__1 = this; var exportProperties = this.getExportProperties(); var exportObject = createObjectLiteral(exportProperties); if (this.exportVisitor.starExports.length) { var starExports = this.exportVisitor.starExports; var starIdents = starExports.map(function(moduleSpecifier) { return createIdentifierExpression($__1.getTempVarNameForModuleSpecifier(moduleSpecifier)); }); if (exportProperties.length) starIdents.push(exportObject); var exports = this.getTempIdentifier(); statements.push(createVariableStatement(LET, exports, createObjectLiteral(""))); var key = this.getTempIdentifier(); starIdents.forEach(function(starIdent) { statements.push(createForInStatement(createVariableDeclarationList(LET, key, null), starIdent, createIfStatement(createCallExpression(createMemberExpression(starIdent, 'hasOwnProperty'), createArgumentList([createIdentifierExpression(key)])), createAssignmentStatement(createMemberLookupExpression(createIdentifierExpression(exports), createIdentifierExpression(key)), createMemberLookupExpression(starIdent, createIdentifierExpression(key)))))); }); statements.push(createReturnStatement(createIdentifierExpression(exports))); return statements; } statements.push(parseStatement($traceurRuntime.getTemplateObject(["return ", ""]), exportObject)); return statements; }, transformModuleSpecifier: function(tree) { return createBindingIdentifier(this.getTempVarNameForModuleSpecifier(tree)); }, get isRootModule() { return this.moduleName === (this.metadata_ && this.metadata_.rootModule); } }, {}, $__super); }(ModuleTransformer); return {get InlineES6ModuleTransformer() { return InlineES6ModuleTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/PureES6Transformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/PureES6Transformer.js"; var AnnotationsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AnnotationsTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).AnnotationsTransformer; var AsyncToGeneratorTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./AsyncToGeneratorTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).AsyncToGeneratorTransformer; var InlineES6ModuleTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InlineES6ModuleTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).InlineES6ModuleTransformer; var JsxTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./JsxTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).JsxTransformer; var MemberVariableTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MemberVariableTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).MemberVariableTransformer; var MultiTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./MultiTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).MultiTransformer; var SpreadPropertiesTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./SpreadPropertiesTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).SpreadPropertiesTransformer; var TypeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TypeTransformer.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).TypeTransformer; var UniqueIdentifierGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./UniqueIdentifierGenerator.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).UniqueIdentifierGenerator; var validateFreeVariables = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../semantics/FreeVariableChecker.js", "traceur@0.0.112/src/codegeneration/PureES6Transformer.js")).validate; var PureES6Transformer = function($__super) { function PureES6Transformer(reporter, options, metadata) { var $__1; $traceurRuntime.superConstructor(PureES6Transformer).call(this, reporter, options.validate); var idGenerator = new UniqueIdentifierGenerator(); var append = ($__1 = this, function(transformer) { $__1.append(function(tree) { return new transformer(idGenerator, reporter, options, metadata).transformAny(tree); }); }); if (options.freeVariableChecker) { this.append(function(tree) { validateFreeVariables(tree, reporter); return tree; }); } if (options.jsx) { append(JsxTransformer); } if (options.spreadProperties) { append(SpreadPropertiesTransformer); } if (options.memberVariables) { append(MemberVariableTransformer); } append(AnnotationsTransformer); append(TypeTransformer); append(AsyncToGeneratorTransformer); if (options.modules === 'inline') { append(InlineES6ModuleTransformer); } } return ($traceurRuntime.createClass)(PureES6Transformer, {}, {}, $__super); }(MultiTransformer); return {get PureES6Transformer() { return PureES6Transformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/Compiler.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/Compiler.js"; var AttachModuleNameTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/module/AttachModuleNameTransformer.js", "traceur@0.0.112/src/Compiler.js")).AttachModuleNameTransformer; var FromOptionsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/FromOptionsTransformer.js", "traceur@0.0.112/src/Compiler.js")).FromOptionsTransformer; var Parser = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/Parser.js", "traceur@0.0.112/src/Compiler.js")).Parser; var PureES6Transformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/PureES6Transformer.js", "traceur@0.0.112/src/Compiler.js")).PureES6Transformer; var SourceFile = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/SourceFile.js", "traceur@0.0.112/src/Compiler.js")).SourceFile; var CollectingErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util/CollectingErrorReporter.js", "traceur@0.0.112/src/Compiler.js")).CollectingErrorReporter; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Options.js", "traceur@0.0.112/src/Compiler.js")), Options = $__10.Options, versionLockedOptions = $__10.versionLockedOptions; var ParseTreeMapWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/ParseTreeMapWriter.js", "traceur@0.0.112/src/Compiler.js")).ParseTreeMapWriter; var ParseTreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/ParseTreeWriter.js", "traceur@0.0.112/src/Compiler.js")).ParseTreeWriter; var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/SourceMapIntegration.js", "traceur@0.0.112/src/Compiler.js")), SourceMapConsumer = $__13.SourceMapConsumer, SourceMapGenerator = $__13.SourceMapGenerator; function merge() { for (var srcs = [], $__2 = 0; $__2 < arguments.length; $__2++) srcs[$__2] = arguments[$__2]; var dest = Object.create(null); srcs.forEach(function(src) { Object.keys(src).forEach(function(key) { dest[key] = src[key]; }); var srcModules = src.modules; if (typeof srcModules !== 'undefined') { dest.modules = srcModules; } }); return dest; } function basePath(name) { if (!name) return null; var lastSlash = name.lastIndexOf('/'); if (lastSlash < 0) return null; return name.substring(0, lastSlash + 1); } var Compiler = function() { function Compiler() { var overridingOptions = arguments[0] !== (void 0) ? arguments[0] : {}; this.options_ = new Options(this.defaultOptions()); this.options_.setFromObject(overridingOptions); this.sourceMapConfiguration_ = null; this.sourceMapInfo_ = null; this.sourceMapCache_ = null; } return ($traceurRuntime.createClass)(Compiler, { compile: function(content) { var sourceName = arguments[1] !== (void 0) ? arguments[1] : ''; var outputName = arguments[2] !== (void 0) ? arguments[2] : ''; var sourceRoot = arguments[3]; sourceName = this.normalize(sourceName); outputName = this.normalize(outputName); var tree = this.parse(content, sourceName); tree = this.transform(tree, sourceName); var sourceURL = sourceName !== outputName ? sourceName : undefined; if (sourceRoot === undefined) sourceRoot = this.options_.sourceRoot; return this.write(tree, outputName, sourceRoot, sourceURL); }, throwIfErrors: function(errorReporter) { if (errorReporter.hadError()) throw errorReporter.toError(); }, parse: function(content) { var sourceName = arguments[1] !== (void 0) ? arguments[1] : ''; sourceName = this.normalize(sourceName); this.sourceMapCache_ = null; this.sourceMapConfiguration_ = null; var errorReporter = new CollectingErrorReporter(); var sourceFile = new SourceFile(sourceName, content); var parser = new Parser(sourceFile, errorReporter, this.options_); var tree = this.options_.script ? parser.parseScript() : parser.parseModule(); this.throwIfErrors(errorReporter); return tree; }, transform: function(tree) { var candidateModuleName = arguments[1]; var metadata = arguments[2]; var transformer; if (candidateModuleName) { var transformer$__3 = new AttachModuleNameTransformer(candidateModuleName); tree = transformer$__3.transformAny(tree); } var errorReporter = new CollectingErrorReporter(); if (this.options_.outputLanguage.toLowerCase() === 'es6') { transformer = new PureES6Transformer(errorReporter, this.options_, metadata); } else { transformer = new FromOptionsTransformer(errorReporter, this.options_); } var transformedTree = transformer.transform(tree); this.throwIfErrors(errorReporter); return transformedTree; }, createSourceMapConfiguration_: function(outputName) { var sourceRoot = arguments[1]; var sourceURL = arguments[2]; if (this.options_.sourceMaps) { return { sourceMapGenerator: new SourceMapGenerator({ file: outputName, sourceRoot: sourceRoot, skipValidation: true }), basepath: basePath(outputName), inputSourceMap: this.options_.inputSourceMap, sourceURL: sourceURL, outputName: outputName }; } }, getSourceMap: function() { if (this.sourceMapCache_) { return this.sourceMapCache_; } if (this.sourceMapConfiguration_) { var sourceMap = this.sourceMapConfiguration_.sourceMapGenerator.toString(); var inputSourceMap = this.sourceMapConfiguration_.inputSourceMap; if (inputSourceMap) { var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(sourceMap)); generator.applySourceMap(new SourceMapConsumer(inputSourceMap)); sourceMap = generator.toJSON(); } this.sourceMapCache_ = sourceMap; return sourceMap; } }, get sourceMapInfo() { if (!this.sourceMapInfo_ && this.sourceMapConfiguration_) { var sourceMap = this.getSourceMap(); this.sourceMapInfo_ = { url: this.sourceMapConfiguration_.sourceURL, outputName: this.sourceMapConfiguration_.outputName, map: sourceMap }; } return this.sourceMapInfo_; }, write: function(tree) { var outputName = arguments[1]; var sourceRoot = arguments[2]; var sourceURL = arguments[3]; outputName = this.normalize(outputName); if (sourceRoot === undefined) sourceRoot = this.options_.sourceRoot; if (sourceRoot === true) sourceRoot = basePath(outputName); else if (!sourceRoot) sourceRoot = undefined; else sourceRoot = this.normalize(sourceRoot); var writer; this.sourceMapCache_ = null; this.sourceMapConfiguration_ = this.createSourceMapConfiguration_(outputName, sourceRoot, sourceURL); if (this.sourceMapConfiguration_) { this.sourceMapConfiguration_.lowResolution = this.options_.lowResolutionSourceMap; writer = new ParseTreeMapWriter(this.sourceMapConfiguration_, this.options_); } else { writer = new ParseTreeWriter(this.options_); } writer.visitAny(tree); var compiledCode = writer.toString(); var link = this.debuggerLink(sourceURL, outputName); if (link) { compiledCode += link; } return compiledCode; }, debuggerLink: function(sourceURL, outputName) { if (this.sourceMapConfiguration_) { if (this.options_.sourceMaps === 'memory') { return; } var sourceMappingURL = this.sourceMappingURL(sourceURL || outputName || 'unnamed.js'); return '//# sourceMappingURL=' + sourceMappingURL + '\n'; } else { if (sourceURL) { return '//# sourceURL=' + sourceURL + '\n'; } } }, sourceName: function(filename) { return filename; }, sourceMappingURL: function(path) { if (this.options_.sourceMaps === 'inline') { if (Reflect.global.btoa) { return 'data:application/json;base64,' + btoa(unescape(encodeURIComponent(this.getSourceMap()))); } } path = path || 'unamed.js'; path = path.split('/').pop(); return path + '.map'; }, sourceNameFromTree: function(tree) { return tree.location.start.source.name; }, defaultOptions: function() { return versionLockedOptions; }, normalize: function(name) { return name && name.replace(/\\/g, '/'); } }, { script: function(content) { var options = arguments[1] !== (void 0) ? arguments[1] : {}; options = new Options(options); options.script = true; return new Compiler(options).compile(content); }, module: function(content) { var options = arguments[1] !== (void 0) ? arguments[1] : {}; options = new Options(options); options.modules = 'bootstrap'; return new Compiler(options).compile(content); }, amdOptions: function() { var options = arguments[0] !== (void 0) ? arguments[0] : {}; var amdOptions = { modules: 'amd', sourceMaps: false, moduleName: false }; return merge(amdOptions, options); }, closureOptions: function() { var options = arguments[0] !== (void 0) ? arguments[0] : {}; var closureOptions = { modules: 'closure', sourceMaps: false, moduleName: true }; return merge(closureOptions, options); }, commonJSOptions: function() { var options = arguments[0] !== (void 0) ? arguments[0] : {}; var commonjsOptions = { modules: 'commonjs', sourceMaps: false, moduleName: false }; return merge(commonjsOptions, options); } }); }(); return {get Compiler() { return Compiler; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/CloneTreeTransformer.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/CloneTreeTransformer.js"; var ParseTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ParseTreeTransformer.js", "traceur@0.0.112/src/codegeneration/CloneTreeTransformer.js")).ParseTreeTransformer; var $__2 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/codegeneration/CloneTreeTransformer.js")), BindingIdentifier = $__2.BindingIdentifier, BreakStatement = $__2.BreakStatement, ContinueStatement = $__2.ContinueStatement, DebuggerStatement = $__2.DebuggerStatement, EmptyStatement = $__2.EmptyStatement, ExportSpecifier = $__2.ExportSpecifier, ExportStar = $__2.ExportStar, IdentifierExpression = $__2.IdentifierExpression, LiteralExpression = $__2.LiteralExpression, ModuleSpecifier = $__2.ModuleSpecifier, PredefinedType = $__2.PredefinedType, PropertyNameShorthand = $__2.PropertyNameShorthand, TemplateLiteralPortion = $__2.TemplateLiteralPortion, SuperExpression = $__2.SuperExpression, ThisExpression = $__2.ThisExpression; var CloneTreeTransformer = function($__super) { function CloneTreeTransformer() { $traceurRuntime.superConstructor(CloneTreeTransformer).apply(this, arguments); } return ($traceurRuntime.createClass)(CloneTreeTransformer, { transformBindingIdentifier: function(tree) { return new BindingIdentifier(tree.location, tree.identifierToken); }, transformBreakStatement: function(tree) { return new BreakStatement(tree.location, tree.name); }, transformContinueStatement: function(tree) { return new ContinueStatement(tree.location, tree.name); }, transformDebuggerStatement: function(tree) { return new DebuggerStatement(tree.location); }, transformEmptyStatement: function(tree) { return new EmptyStatement(tree.location); }, transformExportSpecifier: function(tree) { return new ExportSpecifier(tree.location, tree.lhs, tree.rhs); }, transformExportStar: function(tree) { return new ExportStar(tree.location); }, transformIdentifierExpression: function(tree) { return new IdentifierExpression(tree.location, tree.identifierToken); }, transformList: function(list) { if (!list) { return null; } else if (list.length === 0) { return []; } else { return $traceurRuntime.superGet(this, CloneTreeTransformer.prototype, "transformList").call(this, list); } }, transformLiteralExpression: function(tree) { return new LiteralExpression(tree.location, tree.literalToken); }, transformModuleSpecifier: function(tree) { return new ModuleSpecifier(tree.location, tree.token); }, transformPredefinedType: function(tree) { return new PredefinedType(tree.location, tree.typeToken); }, transformPropertyNameShorthand: function(tree) { return new PropertyNameShorthand(tree.location, tree.name); }, transformTemplateLiteralPortion: function(tree) { return new TemplateLiteralPortion(tree.location, tree.value); }, transformSuperExpression: function(tree) { return new SuperExpression(tree.location); }, transformThisExpression: function(tree) { return new ThisExpression(tree.location); } }, {}, $__super); }(ParseTreeTransformer); CloneTreeTransformer.cloneTree = function(tree) { return new CloneTreeTransformer().transformAny(tree); }; return {get CloneTreeTransformer() { return CloneTreeTransformer; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/createModuleEvaluationStatement.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/module/createModuleEvaluationStatement.js"; var parseStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../PlaceholderParser.js", "traceur@0.0.112/src/codegeneration/module/createModuleEvaluationStatement.js")).parseStatement; function createModuleEvaluationStatement(normalizedName) { return parseStatement($traceurRuntime.getTemplateObject(["$traceurRuntime.getModule(", " +'')"]), normalizedName); } return {get createModuleEvaluationStatement() { return createModuleEvaluationStatement; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/compiler-imports.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/compiler-imports.js"; var $__traceur_64_0_46_0_46_112_47_src_47_Compiler_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Compiler.js", "traceur@0.0.112/src/compiler-imports.js")); var Parser = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/Parser.js", "traceur@0.0.112/src/compiler-imports.js")).Parser; var Script = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/trees/ParseTrees.js", "traceur@0.0.112/src/compiler-imports.js")).Script; var SourceFile = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./syntax/SourceFile.js", "traceur@0.0.112/src/compiler-imports.js")).SourceFile; var syntax = { Parser: Parser, SourceFile: SourceFile, trees: {Script: Script} }; var ParseTreeMapWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/ParseTreeMapWriter.js", "traceur@0.0.112/src/compiler-imports.js")).ParseTreeMapWriter; var ParseTreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/ParseTreeWriter.js", "traceur@0.0.112/src/compiler-imports.js")).ParseTreeWriter; var regexpuRewritePattern = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/regexpuRewritePattern.js", "traceur@0.0.112/src/compiler-imports.js")).regexpuRewritePattern; var SourceMapConsumer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/SourceMapIntegration.js", "traceur@0.0.112/src/compiler-imports.js")).SourceMapConsumer; var SourceMapGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/SourceMapIntegration.js", "traceur@0.0.112/src/compiler-imports.js")).SourceMapGenerator; var TreeWriter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./outputgeneration/TreeWriter.js", "traceur@0.0.112/src/compiler-imports.js")).TreeWriter; var outputgeneration = { ParseTreeMapWriter: ParseTreeMapWriter, ParseTreeWriter: ParseTreeWriter, regexpuRewritePattern: regexpuRewritePattern, SourceMapConsumer: SourceMapConsumer, SourceMapGenerator: SourceMapGenerator, TreeWriter: TreeWriter }; var AttachModuleNameTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/module/AttachModuleNameTransformer.js", "traceur@0.0.112/src/compiler-imports.js")).AttachModuleNameTransformer; var CloneTreeTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/CloneTreeTransformer.js", "traceur@0.0.112/src/compiler-imports.js")).CloneTreeTransformer; var FromOptionsTransformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/FromOptionsTransformer.js", "traceur@0.0.112/src/compiler-imports.js")).FromOptionsTransformer; var PureES6Transformer = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/PureES6Transformer.js", "traceur@0.0.112/src/compiler-imports.js")).PureES6Transformer; var createModuleEvaluationStatement = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/module/createModuleEvaluationStatement.js", "traceur@0.0.112/src/compiler-imports.js")).createModuleEvaluationStatement; var $__16 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./codegeneration/PlaceholderParser.js", "traceur@0.0.112/src/compiler-imports.js")), parseExpression = $__16.parseExpression, parseModule = $__16.parseModule, parseScript = $__16.parseScript, parseStatement = $__16.parseStatement; var codegeneration = { CloneTreeTransformer: CloneTreeTransformer, FromOptionsTransformer: FromOptionsTransformer, PureES6Transformer: PureES6Transformer, parseExpression: parseExpression, parseModule: parseModule, parseScript: parseScript, parseStatement: parseStatement, module: { AttachModuleNameTransformer: AttachModuleNameTransformer, createModuleEvaluationStatement: createModuleEvaluationStatement } }; return { get Compiler() { return $__traceur_64_0_46_0_46_112_47_src_47_Compiler_46_js__.Compiler; }, get syntax() { return syntax; }, get outputgeneration() { return outputgeneration; }, get codegeneration() { return codegeneration; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ValidationVisitor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/module/ValidationVisitor.js"; var ModuleVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ModuleVisitor.js", "traceur@0.0.112/src/codegeneration/module/ValidationVisitor.js")).ModuleVisitor; var ValidationVisitor = function($__super) { function ValidationVisitor() { $traceurRuntime.superConstructor(ValidationVisitor).apply(this, arguments); } return ($traceurRuntime.createClass)(ValidationVisitor, { checkExport_: function(tree, name) { var description = this.validatingModuleDescription_; if (description && !description.getExport(name)) { var moduleName = description.normalizedName; this.reportError(tree, ("'" + name + "' is not exported by '" + moduleName + "'")); } }, checkImport_: function(tree, name) { var existingImport = this.moduleSymbol.getImport(name); if (existingImport) { this.reportError(tree, ("'" + name + "' was previously imported at " + existingImport.location.start)); } else { this.moduleSymbol.addImport(name, tree); } }, visitAndValidate_: function(moduleDescription, tree) { var validatingModuleDescription = this.validatingModuleDescription_; this.validatingModuleDescription_ = moduleDescription; this.visitAny(tree); this.validatingModuleDescription_ = validatingModuleDescription; }, visitNamedExport: function(tree) { if (tree.moduleSpecifier) { var name = tree.moduleSpecifier.token.processedValue; var moduleDescription = this.getExportsListForModuleSpecifier(name); this.visitAndValidate_(moduleDescription, tree.exportClause); } }, visitExportSpecifier: function(tree) { this.checkExport_(tree, tree.lhs.value); }, visitForwardDefaultExport: function(tree) { this.checkExport_(tree, 'default'); }, visitImportDeclaration: function(tree) { var name = tree.moduleSpecifier.token.processedValue; var moduleDescription = this.getExportsListForModuleSpecifier(name); this.visitAndValidate_(moduleDescription, tree.importClause); }, visitImportSpecifier: function(tree) { var importName = tree.binding.getStringValue(); var exportName = tree.name ? tree.name.value : importName; this.checkImport_(tree, importName); this.checkExport_(tree, exportName); }, visitImportedBinding: function(tree) { var importName = tree.binding.getStringValue(); this.checkImport_(tree, importName); this.checkExport_(tree, 'default'); }, visitNameSpaceImport: function(tree) { var importName = tree.binding.binding.getStringValue(); this.checkImport_(tree, importName); } }, {}, $__super); }(ModuleVisitor); return {get ValidationVisitor() { return ValidationVisitor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ExportListBuilder.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/module/ExportListBuilder.js"; var ExportVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ExportVisitor.js", "traceur@0.0.112/src/codegeneration/module/ExportListBuilder.js")).ExportVisitor; var ValidationVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./ValidationVisitor.js", "traceur@0.0.112/src/codegeneration/module/ExportListBuilder.js")).ValidationVisitor; function buildExportList(deps, loader, reporter) { function doVisit(ctor) { for (var i = 0; i < deps.length; i++) { var visitor = new ctor(reporter, loader, deps[i]); visitor.visitAny(deps[i].tree); } } function reverseVisit(ctor) { for (var i = deps.length - 1; i >= 0; i--) { var visitor = new ctor(reporter, loader, deps[i]); visitor.visitAny(deps[i].tree); } } reverseVisit(ExportVisitor); doVisit(ValidationVisitor); } return {get buildExportList() { return buildExportList; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/codegeneration/module/ModuleSpecifierVisitor.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/codegeneration/module/ModuleSpecifierVisitor.js"; var ParseTreeVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../syntax/ParseTreeVisitor.js", "traceur@0.0.112/src/codegeneration/module/ModuleSpecifierVisitor.js")).ParseTreeVisitor; var StringSet = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../../util/StringSet.js", "traceur@0.0.112/src/codegeneration/module/ModuleSpecifierVisitor.js")).StringSet; var ModuleSpecifierVisitor = function($__super) { function ModuleSpecifierVisitor(options) { $traceurRuntime.superConstructor(ModuleSpecifierVisitor).call(this); this.options_ = options; this.moduleSpecifiers_ = new StringSet(); } return ($traceurRuntime.createClass)(ModuleSpecifierVisitor, { get moduleSpecifiers() { return this.moduleSpecifiers_.valuesAsArray(); }, visitModuleSpecifier: function(tree) { this.moduleSpecifiers_.add(tree.token.processedValue); } }, {}, $__super); }(ParseTreeVisitor); return {get ModuleSpecifierVisitor() { return ModuleSpecifierVisitor; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/system-map.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/system-map.js"; function prefixMatchLength(name, prefix) { var prefixParts = prefix.split('/'); var nameParts = name.split('/'); if (prefixParts.length > nameParts.length) return 0; for (var i = 0; i < prefixParts.length; i++) { if (nameParts[i] != prefixParts[i]) return 0; } return prefixParts.length; } function applyMap(map, name, parentName) { var curMatch, curMatchLength = 0; var curParent, curParentMatchLength = 0; if (parentName) { var mappedName; Object.getOwnPropertyNames(map).some(function(p) { var curMap = map[p]; if (curMap && typeof curMap === 'object') { if (prefixMatchLength(parentName, p) <= curParentMatchLength) return; Object.getOwnPropertyNames(curMap).forEach(function(q) { if (prefixMatchLength(name, q) > curMatchLength) { curMatch = q; curMatchLength = q.split('/').length; curParent = p; curParentMatchLength = p.split('/').length; } }); } if (curMatch) { var subPath = name.split('/').splice(curMatchLength).join('/'); mappedName = map[curParent][curMatch] + (subPath ? '/' + subPath : ''); return mappedName; } }); } if (mappedName) return mappedName; Object.getOwnPropertyNames(map).forEach(function(p) { var curMap = map[p]; if (curMap && typeof curMap === 'string') { if (prefixMatchLength(name, p) > curMatchLength) { curMatch = p; curMatchLength = p.split('/').length; } } }); if (!curMatch) return name; var subPath = name.split('/').splice(curMatchLength).join('/'); return map[curMatch] + (subPath ? '/' + subPath : ''); } var systemjs = {applyMap: applyMap}; return {get systemjs() { return systemjs; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/LoaderCompiler.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/LoaderCompiler.js"; var buildExportList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/module/ExportListBuilder.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).buildExportList; var CollectingErrorReporter = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/CollectingErrorReporter.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).CollectingErrorReporter; var Compiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Compiler.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).Compiler; var ModuleSpecifierVisitor = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/module/ModuleSpecifierVisitor.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).ModuleSpecifierVisitor; var ModuleSymbol = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/module/ModuleSymbol.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).ModuleSymbol; var Parser = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/Parser.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).Parser; var SourceFile = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/SourceFile.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).SourceFile; var systemjs = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./system-map.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).systemjs; var UniqueIdentifierGenerator = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/UniqueIdentifierGenerator.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).UniqueIdentifierGenerator; var $__10 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/url.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")), isAbsolute = $__10.isAbsolute, resolveUrl = $__10.resolveUrl; var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/loader/LoaderCompiler.js")).assert; var NOT_STARTED = 0; var LOADING = 1; var LOADED = 2; var PARSED = 3; var TRANSFORMING = 4; var TRANSFORMED = 5; var COMPLETE = 6; var ERROR = 7; var identifierGenerator = new UniqueIdentifierGenerator(); var anonymousSourcesSeen = 0; var LoaderCompiler = function() { function LoaderCompiler() {} return ($traceurRuntime.createClass)(LoaderCompiler, { getModuleSpecifiers: function(codeUnit) { this.parse(codeUnit); var moduleSpecifierVisitor = new ModuleSpecifierVisitor(codeUnit.metadata.traceurOptions); moduleSpecifierVisitor.visit(codeUnit.metadata.tree); return moduleSpecifierVisitor.moduleSpecifiers; }, parse: function(codeUnit) { assert(!codeUnit.metadata.tree); var metadata = codeUnit.metadata; var options = metadata.traceurOptions; if (codeUnit.type === 'script') options.script = true; metadata.compiler = new Compiler(options); var sourceName = codeUnit.metadata.sourceName = codeUnit.address || codeUnit.normalizedName || '(unnamed)#' + String(++anonymousSourcesSeen); metadata.tree = metadata.compiler.parse(codeUnit.source, sourceName); }, transform: function(codeUnit) { var metadata = codeUnit.metadata; metadata.transformedTree = metadata.compiler.transform(metadata.tree, codeUnit.normalizedName, metadata); }, write: function(codeUnit) { var metadata = codeUnit.metadata; var outputName = metadata.outputName || metadata.sourceName || ''; var sourceRoot = metadata.sourceRoot; var sourceURL = metadata.sourceName || codeUnit.normalizedName || codeUnit.address; metadata.transcoded = metadata.compiler.write(metadata.transformedTree, outputName, undefined, sourceURL); }, evaluateCodeUnit: function(codeUnit) { var result = ('global', eval)(codeUnit.metadata.transcoded); codeUnit.metadata.transformedTree = null; return result; }, analyzeDependencies: function(dependencies, loader) { var deps = []; for (var i = 0; i < dependencies.length; i++) { var codeUnit = dependencies[i]; assert(codeUnit.state >= PARSED); if (codeUnit.state == PARSED) { var symbol = codeUnit.metadata.moduleSymbol = new ModuleSymbol(codeUnit.metadata.tree, codeUnit.normalizedName); deps.push(symbol); } } this.checkForErrors(function(reporter) { return buildExportList(deps, loader, reporter); }); }, checkForErrors: function(fncOfReporter) { var reporter = new CollectingErrorReporter(); var result = fncOfReporter(reporter); if (reporter.hadError()) throw reporter.toError(); return result; } }, {}); }(); return {get LoaderCompiler() { return LoaderCompiler; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/InternalLoader.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/InternalLoader.js"; var assert = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/assert.js", "traceur@0.0.112/src/loader/InternalLoader.js")).assert; var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LoaderCompiler.js", "traceur@0.0.112/src/loader/InternalLoader.js")).LoaderCompiler; var ExportsList = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../codegeneration/module/ModuleSymbol.js", "traceur@0.0.112/src/loader/InternalLoader.js")).ExportsList; var $__13 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/url.js", "traceur@0.0.112/src/loader/InternalLoader.js")), isAbsolute = $__13.isAbsolute, resolveUrl = $__13.resolveUrl; var Options = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Options.js", "traceur@0.0.112/src/loader/InternalLoader.js")).Options; var NOT_STARTED = 0; var LOADING = 1; var LOADED = 2; var PARSED = 3; var TRANSFORMING = 4; var TRANSFORMED = 5; var COMPLETE = 6; var ERROR = 7; function mapToValues(map) { var array = []; map.forEach(function(v) { array.push(v); }); return array; } var LoaderError = function($__super) { function LoaderError(msg, tree) { $traceurRuntime.superConstructor(LoaderError).call(this); this.message = msg; this.tree = tree; this.name = 'LoaderError'; } return ($traceurRuntime.createClass)(LoaderError, {}, {}, $__super); }(Error); var CodeUnit = function() { function CodeUnit(loaderCompiler, normalizedName, type, state, name, referrerName, address) { var $__8 = this; this.promise = new Promise(function(res, rej) { $__8.loaderCompiler = loaderCompiler; $__8.normalizedName = normalizedName; $__8.type = type; $__8.name_ = name; $__8.referrerName_ = referrerName; $__8.address = address; $__8.state_ = state || NOT_STARTED; $__8.error = null; $__8.result = null; $__8.metadata_ = {}; $__8.dependencies = []; $__8.resolve = res; $__8.reject = rej; }); } return ($traceurRuntime.createClass)(CodeUnit, { get state() { return this.state_; }, set state(value) { if (value < this.state_) { throw new Error('Invalid state change'); } this.state_ = value; }, get metadata() { return this.metadata_; }, set metadata(value) { assert(value); this.metadata_ = value; }, nameTrace: function() { var trace = this.specifiedAs(); if (isAbsolute(this.name_)) { return trace + 'An absolute name.\n'; } if (this.referrerName_) { return trace + this.importedBy() + this.normalizesTo(); } return trace + this.normalizesTo(); }, specifiedAs: function() { return ("Specified as " + this.name_ + ".\n"); }, importedBy: function() { return ("Imported by " + this.referrerName_ + ".\n"); }, normalizesTo: function() { return 'Normalizes to ' + this.normalizedName + '\n'; } }, {}); }(); var PreCompiledCodeUnit = function($__super) { function PreCompiledCodeUnit(loaderCompiler, normalizedName, name, referrerName, address, module) { $traceurRuntime.superConstructor(PreCompiledCodeUnit).call(this, loaderCompiler, normalizedName, 'module', COMPLETE, name, referrerName, address); this.result = module; this.resolve(this.result); } return ($traceurRuntime.createClass)(PreCompiledCodeUnit, {}, {}, $__super); }(CodeUnit); var BundledCodeUnit = function($__super) { function BundledCodeUnit(loaderCompiler, normalizedName, name, referrerName, address, deps, execute, setModule) { $traceurRuntime.superConstructor(BundledCodeUnit).call(this, loaderCompiler, normalizedName, 'module', TRANSFORMED, name, referrerName, address); this.deps = deps; this.execute = execute; } return ($traceurRuntime.createClass)(BundledCodeUnit, { getModuleSpecifiers: function() { return this.deps; }, evaluate: function() { var $__8 = this; var normalizedNames = this.deps.map(function(name) { return $__8.loader_.normalize(name); }); var module = this.execute.apply(Reflect.global, normalizedNames); setModule(this.normalizedName, module); return module; } }, {}, $__super); }(CodeUnit); var HookedCodeUnit = function($__super) { function HookedCodeUnit() { $traceurRuntime.superConstructor(HookedCodeUnit).apply(this, arguments); } return ($traceurRuntime.createClass)(HookedCodeUnit, { getModuleSpecifiers: function() { return this.loaderCompiler.getModuleSpecifiers(this); }, evaluate: function() { return this.loaderCompiler.evaluateCodeUnit(this); } }, {}, $__super); }(CodeUnit); var LoadCodeUnit = function($__super) { function LoadCodeUnit(loaderCompiler, normalizedName, name, referrerName, address) { $traceurRuntime.superConstructor(LoadCodeUnit).call(this, loaderCompiler, normalizedName, 'module', NOT_STARTED, name, referrerName, address); } return ($traceurRuntime.createClass)(LoadCodeUnit, {}, {}, $__super); }(HookedCodeUnit); var EvalCodeUnit = function($__super) { function EvalCodeUnit(loaderCompiler, code) { var type = arguments[2] !== (void 0) ? arguments[2] : 'script'; var normalizedName = arguments[3]; var referrerName = arguments[4]; var address = arguments[5]; $traceurRuntime.superConstructor(EvalCodeUnit).call(this, loaderCompiler, normalizedName, type, LOADED, null, referrerName, address); this.source = code; } return ($traceurRuntime.createClass)(EvalCodeUnit, {}, {}, $__super); }(HookedCodeUnit); var uniqueNameCount = 0; var InternalLoader = function() { function InternalLoader(loader, loaderCompiler) { assert(loaderCompiler); this.loader_ = loader; this.loaderCompiler = loaderCompiler; this.cache = new Map(); this.urlToKey = Object.create(null); this.sync_ = false; this.sourceMapsByURL_ = Object.create(null); this.sourceMapsByOutputName_ = Object.create(null); } return ($traceurRuntime.createClass)(InternalLoader, { defaultMetadata_: function() { var metadata = arguments[0] !== (void 0) ? arguments[0] : {}; var incoming = metadata.traceurOptions; if (incoming && !(incoming instanceof Options)) { var unknown = Options.listUnknownOptions(incoming); if (unknown.length) { console.warn('Unknown metadata.traceurOptions ignored: ' + unknown.join(',')); } } metadata.traceurOptions = incoming || new Options(); return metadata; }, defaultModuleMetadata_: function() { var metadata = arguments[0] !== (void 0) ? arguments[0] : {}; var metadata = this.defaultMetadata_(metadata); metadata.traceurOptions.script = false; return metadata; }, getSourceMap: function(url) { return this.sourceMapsByURL_[url] || this.sourceMapsByOutputName_[url]; }, load: function(name) { var referrerName = arguments[1] !== (void 0) ? arguments[1] : this.loader_.baseURL; var address = arguments[2]; var metadata = arguments[3] !== (void 0) ? arguments[3] : {}; metadata = this.defaultMetadata_(metadata); var codeUnit = this.getOrCreateCodeUnit_(name, referrerName, address, metadata); this.load_(codeUnit); return codeUnit.promise.then(function() { return codeUnit; }); }, load_: function(codeUnit) { var $__8 = this; if (codeUnit.state === ERROR) { return codeUnit; } if (codeUnit.state === TRANSFORMED) { this.handleCodeUnitLoaded(codeUnit); } else { if (codeUnit.state !== NOT_STARTED) return codeUnit; codeUnit.state = LOADING; codeUnit.address = this.loader_.locate(codeUnit); this.loader_.fetch(codeUnit).then(function(text) { codeUnit.source = text; return codeUnit; }).then(function(load) { return $__8.loader_.translate(load); }).then(function(source) { codeUnit.source = source; codeUnit.state = LOADED; $__8.handleCodeUnitLoaded(codeUnit); return codeUnit; }).catch(function(err) { try { codeUnit.state = ERROR; codeUnit.error = err; $__8.handleCodeUnitLoadError(codeUnit); } catch (ex) { console.error('Internal Error ' + (ex.stack || ex)); } }); } return codeUnit; }, module: function(code, referrerName, address, metadata) { var codeUnit = new EvalCodeUnit(this.loaderCompiler, code, 'module', null, referrerName, address); codeUnit.metadata = this.defaultMetadata_(metadata); this.cache.set({}, codeUnit); this.handleCodeUnitLoaded(codeUnit); return codeUnit.promise; }, define: function(normalizedName, code, address, metadata) { var codeUnit = new EvalCodeUnit(this.loaderCompiler, code, 'module', normalizedName, null, address); var key = this.getKey(normalizedName, 'module'); codeUnit.metadata = this.defaultMetadata_(metadata); this.cache.set(key, codeUnit); this.handleCodeUnitLoaded(codeUnit); return codeUnit.promise; }, script: function(code, name, referrerName, address, metadata) { var normalizedName = this.loader_.normalize(name || '', referrerName, address); var codeUnit = new EvalCodeUnit(this.loaderCompiler, code, 'script', normalizedName, referrerName, address); var key = {}; if (name) key = this.getKey(normalizedName, 'script'); codeUnit.metadata = this.defaultMetadata_(metadata); this.cache.set(key, codeUnit); this.handleCodeUnitLoaded(codeUnit); return codeUnit.promise; }, getKey: function(url, type) { var combined = type + ':' + url; if (combined in this.urlToKey) { return this.urlToKey[combined]; } return this.urlToKey[combined] = {}; }, getCodeUnit_: function(normalizedName, type) { var key = this.getKey(normalizedName, type); var codeUnit = this.cache.get(key); return { key: key, codeUnit: codeUnit }; }, getOrCreateCodeUnit_: function(name, referrerName, address, metadata) { var normalizedName = this.loader_.normalize(name, referrerName, address); var type = 'module'; if (metadata && metadata.traceurOptions && metadata.traceurOptions.script) type = 'script'; var $__9 = this.getCodeUnit_(normalizedName, type), key = $__9.key, codeUnit = $__9.codeUnit; if (!codeUnit) { assert(metadata && metadata.traceurOptions); var module = this.loader_.get(normalizedName); if (module) { codeUnit = new PreCompiledCodeUnit(this.loaderCompiler, normalizedName, name, referrerName, address, module); codeUnit.type = 'module'; } else { codeUnit = new LoadCodeUnit(this.loaderCompiler, normalizedName, name, referrerName, address); codeUnit.type = type; } codeUnit.metadata = { traceurOptions: metadata.traceurOptions, outputName: metadata.outputName, rootModule: metadata.rootModule }; this.cache.set(key, codeUnit); } return codeUnit; }, areAll: function(state) { return mapToValues(this.cache).every(function(codeUnit) { return codeUnit.state >= state; }); }, getCodeUnitForModuleSpecifier: function(name, referrerName) { var normalizedName = this.loader_.normalize(name, referrerName); return this.getCodeUnit_(normalizedName, 'module').codeUnit; }, getExportsListForModuleSpecifier: function(name, referrer) { var codeUnit = this.getCodeUnitForModuleSpecifier(name, referrer); var exportsList = codeUnit.metadata.moduleSymbol; if (!exportsList) { if (codeUnit.result) { exportsList = new ExportsList(codeUnit.normalizedName); exportsList.addExportsFromModule(codeUnit.result); } else { throw new Error(("InternalError: " + name + " is not a module, required by " + referrer)); } } return exportsList; }, handleCodeUnitLoaded: function(codeUnit) { var $__8 = this; var referrerName = codeUnit.normalizedName; try { var moduleSpecifiers = codeUnit.getModuleSpecifiers(); codeUnit.state = PARSED; if (!moduleSpecifiers) { this.abortAll(("No module specifiers in " + referrerName)); return; } codeUnit.dependencies = moduleSpecifiers.map(function(name) { return $__8.getOrCreateCodeUnit_(name, referrerName, null, $__8.defaultModuleMetadata_(codeUnit.metadata)); }); } catch (error) { this.rejectOneAndAll(codeUnit, error); return; } codeUnit.dependencies.forEach(function(dependency) { $__8.load_(dependency); }); if (this.areAll(PARSED)) { try { if (codeUnit.type === 'module') this.analyze(); this.transform(); this.evaluate(); } catch (error) { this.rejectOneAndAll(codeUnit, error); } } }, rejectOneAndAll: function(codeUnit, error) { codeUnit.state.ERROR; codeUnit.error = error; codeUnit.reject(error); this.abortAll(error); }, handleCodeUnitLoadError: function(codeUnit) { var message = codeUnit.error ? String(codeUnit.error) + '\n' : ("Failed to load '" + codeUnit.address + "'.\n"); message += codeUnit.nameTrace() + this.loader_.nameTrace(codeUnit); this.rejectOneAndAll(codeUnit, new Error(message)); }, abortAll: function(errorMessage) { this.cache.forEach(function(codeUnit) { if (codeUnit.state !== ERROR) codeUnit.reject(errorMessage); }); }, analyze: function() { this.loaderCompiler.analyzeDependencies(mapToValues(this.cache), this); }, transform: function() { this.transformDependencies_(mapToValues(this.cache)); }, transformDependencies_: function(dependencies, dependentName) { for (var i = 0; i < dependencies.length; i++) { var codeUnit = dependencies[i]; if (codeUnit.state >= TRANSFORMED) { continue; } if (codeUnit.state === TRANSFORMING) { var cir = codeUnit.normalizedName; var cle = dependentName; this.rejectOneAndAll(codeUnit, new Error(("Unsupported circular dependency between " + cir + " and " + cle))); return; } codeUnit.state = TRANSFORMING; try { this.transformCodeUnit_(codeUnit); } catch (error) { this.rejectOneAndAll(codeUnit, error); return; } } }, transformCodeUnit_: function(codeUnit) { this.transformDependencies_(codeUnit.dependencies, codeUnit.normalizedName); if (codeUnit.state === ERROR) return; this.loaderCompiler.transform(codeUnit); codeUnit.state = TRANSFORMED; this.loaderCompiler.write(codeUnit); var info = codeUnit.metadata.compiler.sourceMapInfo; if (info) { this.sourceMapsByURL_[info.url] = info.map; this.sourceMapsByOutputName_[info.outputName] = info.map; } this.loader_.instantiate(codeUnit); }, orderDependencies: function() { var visited = new Map(); var ordered = []; function orderCodeUnits(codeUnit) { if (visited.has(codeUnit)) { return; } visited.set(codeUnit, true); codeUnit.dependencies.forEach(orderCodeUnits); ordered.push(codeUnit); } this.cache.forEach(orderCodeUnits); return ordered; }, evaluate: function() { var dependencies = this.orderDependencies(); for (var i = 0; i < dependencies.length; i++) { var codeUnit = dependencies[i]; if (codeUnit.state >= COMPLETE) { continue; } var result = void 0; try { result = codeUnit.evaluate(); } catch (ex) { this.rejectOneAndAll(codeUnit, ex); return; } codeUnit.result = result; codeUnit.source = null; } for (var i = 0; i < dependencies.length; i++) { var codeUnit = dependencies[i]; if (codeUnit.state >= COMPLETE) { continue; } codeUnit.state = COMPLETE; codeUnit.resolve(codeUnit.result); } } }, {}); }(); var internals = { CodeUnit: CodeUnit, EvalCodeUnit: EvalCodeUnit, LoadCodeUnit: LoadCodeUnit, LoaderCompiler: LoaderCompiler }; return { get InternalLoader() { return InternalLoader; }, get internals() { return internals; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/Loader.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/Loader.js"; var InternalLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InternalLoader.js", "traceur@0.0.112/src/loader/Loader.js")).InternalLoader; function throwAbstractMethod() { throw new Error('Unimplemented Loader function, see extended class'); } var Loader = function() { function Loader(loaderCompiler) { this.internalLoader_ = new InternalLoader(this, loaderCompiler); this.loaderCompiler_ = loaderCompiler; } return ($traceurRuntime.createClass)(Loader, { import: function(name) { var $__3 = arguments[1] !== (void 0) ? arguments[1] : {}, referrerName = $__3.referrerName, address = $__3.address, metadata = $__3.metadata; var $__2 = this; return this.internalLoader_.load(name, referrerName, address, metadata).then(function(codeUnit) { return $__2.get(codeUnit.normalizedName); }); }, module: function(source) { var $__3 = arguments[1] !== (void 0) ? arguments[1] : {}, referrerName = $__3.referrerName, address = $__3.address, metadata = $__3.metadata; return this.internalLoader_.module(source, referrerName, address, metadata); }, define: function(normalizedName, source) { var $__3 = arguments[2] !== (void 0) ? arguments[2] : {}, address = $__3.address, metadata = $__3.metadata; return this.internalLoader_.define(normalizedName, source, address, metadata); }, get: function(normalizedName) { throwAbstractMethod(); }, set: function(normalizedName, module) { throwAbstractMethod(); }, normalize: function(name, referrerName, referrerAddress) { throwAbstractMethod(); }, locate: function(load) { throwAbstractMethod(); }, fetch: function(load) { throwAbstractMethod(); }, translate: function(load) { throwAbstractMethod(); }, instantiate: function(load) { throwAbstractMethod(); } }, {}); }(); return { get throwAbstractMethod() { return throwAbstractMethod; }, get Loader() { return Loader; }, get LoaderCompiler() { return LoaderCompiler; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/version.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/version.js"; var version = '0.0.112'; return {get version() { return version; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/TraceurLoader.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/TraceurLoader.js"; var $__5 = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../util/url.js", "traceur@0.0.112/src/loader/TraceurLoader.js")), isAbsolute = $__5.isAbsolute, resolveUrl = $__5.resolveUrl; var Loader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Loader.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).Loader; var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LoaderCompiler.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).LoaderCompiler; var Options = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../Options.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).Options; var systemjs = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./system-map.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).systemjs; var webLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./webLoader.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).webLoader; var version = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./version.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).version; var WebPageTranscoder = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../WebPageTranscoder.js", "traceur@0.0.112/src/loader/TraceurLoader.js")).WebPageTranscoder; var uniqueNameCount = 0; var TraceurLoader = function($__super) { function TraceurLoader(fileLoader, baseURL) { var loaderCompiler = arguments[2] !== (void 0) ? arguments[2] : new LoaderCompiler(); $traceurRuntime.superConstructor(TraceurLoader).call(this, loaderCompiler); this.fileLoader_ = fileLoader; this.baseURL_ = baseURL && String(baseURL); this.moduleStore_ = $traceurRuntime.ModuleStore; } return ($traceurRuntime.createClass)(TraceurLoader, { get baseURL() { return this.baseURL_; }, set baseURL(value) { this.baseURL_ = String(value); }, get: function(normalizedName) { return this.moduleStore_.get(normalizedName); }, set: function(normalizedName, module) { this.moduleStore_.set(normalizedName, module); }, normalize: function(name, referrerName, referrerAddress) { var normalizedName = this.moduleStore_.normalize(name, referrerName, referrerAddress); if (typeof systemjs !== 'undefined' && System.map) return systemjs.applyMap(System.map, normalizedName, referrerName); return normalizedName; }, locate: function(load) { load.metadata.traceurOptions = load.metadata.traceurOptions || {}; var url = load.normalizedName; var options = load.metadata.traceurOptions; var baseURL = load.metadata && load.metadata.baseURL; baseURL = baseURL || this.baseURL; var referrer = options && options.referrer; if (referrer) { var minChars = Math.min(referrer.length, baseURL.length); var commonChars = 0; for (var i = 0; i < minChars; i++) { var aChar = referrer[referrer.length - 1 - i]; if (aChar === baseURL[baseURL.length - 1 - i]) commonChars++; else break; } if (commonChars) { var packageName = referrer.slice(0, -commonChars); var rootDirectory = baseURL.slice(0, -commonChars); if (url.indexOf(packageName) === 0) { url = url.replace(packageName, rootDirectory); } } } if (!isAbsolute(url)) { if (baseURL) { load.metadata.baseURL = baseURL; url = resolveUrl(baseURL, url); } } return url; }, sourceName: function(load) { var options = load.metadata.traceurOptions; var sourceName = load.address; if (options.sourceMaps) { var sourceRoot = this.baseURL; if (sourceName) { if (sourceRoot && sourceName.indexOf(sourceRoot) === 0) { sourceName = sourceName.substring(sourceRoot.length); } } else { sourceName = this.baseURL + String(uniqueNameCount++); } } return sourceName; }, nameTrace: function(load) { var trace = ''; if (load.metadata.locateMap) { trace += this.locateMapTrace(load); } var base = load.metadata.baseURL || this.baseURL; if (base) { trace += this.baseURLTrace(base); } else { trace += 'No baseURL\n'; } return trace; }, locateMapTrace: function(load) { var map = load.metadata.locateMap; return ("locate found \'" + map.pattern + "\' -> \'" + map.replacement + "\'\n"); }, baseURLTrace: function(base) { return 'locate resolved against base \'' + base + '\'\n'; }, fetch: function(load) { var $__2 = this; return new Promise(function(resolve, reject) { if (!load) reject(new TypeError('fetch requires argument object')); else if (!load.address || typeof load.address !== 'string') reject(new TypeError('fetch({address}) missing required string.')); else $__2.fileLoader_.load(load.address, resolve, reject); }); }, translate: function(load) { return load.source; }, instantiate: function($__3) { var $__4 = $__3, name = $__4.name, metadata = $__4.metadata, address = $__4.address, source = $__4.source, sourceMap = $__4.sourceMap; return new Promise(function(resolve, reject) { resolve(undefined); }); }, bundledModule: function(name) { return this.moduleStore_.bundleStore[name]; }, importAll: function(names) { var $__3 = arguments[1] !== (void 0) ? arguments[1] : {}, referrerName = $__3.referrerName, address = $__3.address, metadata = $__3.metadata; var $__2 = this; return Promise.all(names.map(function(name) { return $__2.import(name, { referrerName: referrerName, address: address, metadata: metadata }); })); }, loadAsScript: function(name) { var $__4; var $__3 = arguments[1] !== (void 0) ? arguments[1] : {}, referrerName = $__3.referrerName, address = $__3.address, metadata = ($__4 = $__3.metadata) === void 0 ? {} : $__4; metadata.traceurOptions = metadata.traceurOptions || {}; metadata.traceurOptions.script = true; return this.internalLoader_.load(name, referrerName, address, metadata).then(function(load) { return load.result; }); }, loadAsScriptAll: function(names) { var $__3 = arguments[1] !== (void 0) ? arguments[1] : {}, referrerName = $__3.referrerName, address = $__3.address, metadata = $__3.metadata; var $__2 = this; return Promise.all(names.map(function(name) { return $__2.loadAsScript(name, { referrerName: referrerName, address: address, metadata: metadata }); })); }, script: function(source) { var $__3 = arguments[1] !== (void 0) ? arguments[1] : {}, name = $__3.name, referrerName = $__3.referrerName, address = $__3.address, metadata = $__3.metadata; return this.internalLoader_.script(source, name, referrerName, address, metadata); }, semVerRegExp_: function() { return /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/; }, semverMap: function(normalizedName) { var slash = normalizedName.indexOf('/'); if (slash < 0) { slash = normalizedName.length; } var versionPart = normalizedName.slice(0, slash); var at = versionPart.indexOf('@'); if (at !== -1) { var semver = versionPart.slice(at + 1); var m = this.semVerRegExp_().exec(semver); if (m) { var major = m[1]; var minor = m[2]; var packageName = versionPart.slice(0, at); var map = Object.create(null); map[packageName] = versionPart; map[packageName + '@' + major] = versionPart; map[packageName + '@' + major + '.' + minor] = versionPart; return map; } throw new Error('semverMap found no matching semver regexp in ' + semver); } throw new Error('semverMap expected name@semver, got ' + versionPart + ' ' + normalizedName); }, get version() { return version; }, getSourceMap: function(filename) { return this.internalLoader_.getSourceMap(filename); }, register: function(normalizedName, deps, factoryFunction) { $traceurRuntime.ModuleStore.register(normalizedName, deps, factoryFunction); }, registerModule: function(normalizedName, deps, factoryFunction) { $traceurRuntime.ModuleStore.registerModule(normalizedName, deps, factoryFunction); }, dirname: function(filename) { var lastSlash = filename.lastIndexOf('/'); if (lastSlash === -1) return '.'; if (lastSlash === 0) return '/'; return filename.slice(0, lastSlash); } }, {}, $__super); }(Loader); var BrowserTraceurLoader = function($__super) { function BrowserTraceurLoader() { $traceurRuntime.superConstructor(BrowserTraceurLoader).call(this, webLoader, window.location.href, new LoaderCompiler()); } return ($traceurRuntime.createClass)(BrowserTraceurLoader, {loadScriptTypeModule: function() { var traceurOptions = arguments[0] !== (void 0) ? arguments[0] : new Options(); new traceur.WebPageTranscoder(document.location.href, traceurOptions).run(); }}, {}, $__super); }(TraceurLoader); return { get TraceurLoader() { return TraceurLoader; }, get BrowserTraceurLoader() { return BrowserTraceurLoader; } }; }); $traceurRuntime.registerModule("traceur@0.0.112/src/node/NodeLoaderCompiler.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/node/NodeLoaderCompiler.js"; var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../loader/LoaderCompiler.js", "traceur@0.0.112/src/node/NodeLoaderCompiler.js")).LoaderCompiler; var NodeLoaderCompiler = function($__super) { function NodeLoaderCompiler() { $traceurRuntime.superConstructor(NodeLoaderCompiler).call(this); this.sourceMapsInMemory_ = false; } return ($traceurRuntime.createClass)(NodeLoaderCompiler, { evaluateCodeUnit: function(codeUnit) { var runInThisContext = require('vm').runInThisContext; var semver = require('semver'); var content = codeUnit.metadata.transcoded; var filename = codeUnit.address || codeUnit.normalizedName; if (codeUnit.metadata.traceurOptions.sourceMaps === 'memory') { this.enableMemorySourceMaps_(); } var options; if (semver.gte(process.version, '0.12.0')) { options = {filename: filename}; } else { options = filename; } var result = runInThisContext(content, options); codeUnit.metadata.transformedTree = null; return result; }, enableMemorySourceMaps_: function() { if (this.sourceMapsInMemory_) { return; } require('source-map-support').install({retrieveSourceMap: function(url) { try { var map = System.getSourceMap(url); if (map) { return { url: url, map: map }; } } catch (ex) { console.error('retrieveSourceMap FAILED ', ex); } }}); this.sourceMapsInMemory_ = true; } }, {}, $__super); }(LoaderCompiler); return {get NodeLoaderCompiler() { return NodeLoaderCompiler; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/InlineLoaderCompiler.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/InlineLoaderCompiler.js"; var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LoaderCompiler.js", "traceur@0.0.112/src/loader/InlineLoaderCompiler.js")).LoaderCompiler; var Script = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../syntax/trees/ParseTrees.js", "traceur@0.0.112/src/loader/InlineLoaderCompiler.js")).Script; var InlineLoaderCompiler = function($__super) { function InlineLoaderCompiler(elements) { $traceurRuntime.superConstructor(InlineLoaderCompiler).call(this); this.elements = elements; } return ($traceurRuntime.createClass)(InlineLoaderCompiler, { write: function() {}, evaluateCodeUnit: function(codeUnit) { var $__1; var tree = codeUnit.metadata.transformedTree; ($__1 = this.elements).push.apply($__1, $traceurRuntime.spread(tree.scriptItemList)); }, toTree: function() { return new Script(null, this.elements, null); } }, {}, $__super); }(LoaderCompiler); return {get InlineLoaderCompiler() { return InlineLoaderCompiler; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/NodeTraceurLoader.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/NodeTraceurLoader.js"; var TraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TraceurLoader.js", "traceur@0.0.112/src/loader/NodeTraceurLoader.js")).TraceurLoader; var NodeLoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../node/NodeLoaderCompiler.js", "traceur@0.0.112/src/loader/NodeTraceurLoader.js")).NodeLoaderCompiler; var NodeTraceurLoader = function($__super) { function NodeTraceurLoader() { var path = require('path'); var fileloader = require('../node/nodeLoader.js'); var url = (path.resolve('./') + '/').replace(/\\/g, '/'); $traceurRuntime.superConstructor(NodeTraceurLoader).call(this, fileloader, url, new NodeLoaderCompiler()); this.traceurMap_ = null; } return ($traceurRuntime.createClass)(NodeTraceurLoader, {getSourceMap: function(filename) { var map = $traceurRuntime.superGet(this, NodeTraceurLoader.prototype, "getSourceMap").call(this, filename); if (!map && filename.replace(/\\/g, '/').endsWith('/bin/traceur.js')) { if (!this.traceurMap_) { var fs = require('fs'); this.traceurMap_ = fs.readFileSync(filename + '.map', 'utf8'); } map = this.traceurMap_; } return map; }}, {}, $__super); }(TraceurLoader); return {get NodeTraceurLoader() { return NodeTraceurLoader; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/loader/loader-imports.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/loader/loader-imports.js"; var Loader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./Loader.js", "traceur@0.0.112/src/loader/loader-imports.js")).Loader; var LoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./LoaderCompiler.js", "traceur@0.0.112/src/loader/loader-imports.js")).LoaderCompiler; var BrowserTraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TraceurLoader.js", "traceur@0.0.112/src/loader/loader-imports.js")).BrowserTraceurLoader; var NodeLoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../node/NodeLoaderCompiler.js", "traceur@0.0.112/src/loader/loader-imports.js")).NodeLoaderCompiler; var InlineLoaderCompiler = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./InlineLoaderCompiler.js", "traceur@0.0.112/src/loader/loader-imports.js")).InlineLoaderCompiler; var NodeTraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./NodeTraceurLoader.js", "traceur@0.0.112/src/loader/loader-imports.js")).NodeTraceurLoader; var TraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./TraceurLoader.js", "traceur@0.0.112/src/loader/loader-imports.js")).TraceurLoader; var loader = { BrowserTraceurLoader: BrowserTraceurLoader, InlineLoaderCompiler: InlineLoaderCompiler, Loader: Loader, LoaderCompiler: LoaderCompiler, NodeLoaderCompiler: NodeLoaderCompiler, NodeTraceurLoader: NodeTraceurLoader, TraceurLoader: TraceurLoader }; return {get loader() { return loader; }}; }); $traceurRuntime.registerModule("traceur@0.0.112/src/traceur.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/traceur.js"; var $__traceur_64_0_46_0_46_112_47_src_47_util_45_imports_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./util-imports.js", "traceur@0.0.112/src/traceur.js")); var $__traceur_64_0_46_0_46_112_47_src_47_compiler_45_imports_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./compiler-imports.js", "traceur@0.0.112/src/traceur.js")); var $__traceur_64_0_46_0_46_112_47_src_47_loader_47_loader_45_imports_46_js__ = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./loader/loader-imports.js", "traceur@0.0.112/src/traceur.js")); return $traceurRuntime.exportStar({}, $__traceur_64_0_46_0_46_112_47_src_47_util_45_imports_46_js__, $__traceur_64_0_46_0_46_112_47_src_47_compiler_45_imports_46_js__, $__traceur_64_0_46_0_46_112_47_src_47_loader_47_loader_45_imports_46_js__); }); $traceurRuntime.registerModule("traceur@0.0.112/src/traceur-import.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/traceur-import.js"; var traceur = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("./traceur.js", "traceur@0.0.112/src/traceur-import.js")); Reflect.global.traceur = traceur; $traceurRuntime.ModuleStore.set('traceur@', traceur); return {}; }); $traceurRuntime.getModule("traceur@0.0.112/src/traceur-import.js" + ''); $traceurRuntime.registerModule("traceur@0.0.112/src/browser/System.js", [], function() { "use strict"; var __moduleName = "traceur@0.0.112/src/browser/System.js"; var BrowserTraceurLoader = $traceurRuntime.getModule($traceurRuntime.normalizeModuleName("../loader/TraceurLoader.js", "traceur@0.0.112/src/browser/System.js")).BrowserTraceurLoader; var traceurLoader = new BrowserTraceurLoader(); Reflect.global.System = traceurLoader; traceurLoader.map = traceurLoader.semverMap('traceur@' + traceurLoader.version); $traceurRuntime.normalizeModuleName = traceurLoader.normalize.bind(traceurLoader); return {get System() { return traceurLoader; }}; }); $traceurRuntime.getModule("traceur@0.0.112/src/browser/System.js" + ''); //# sourceMappingURL=BrowserSystem.js.map