[^"]+)', body)
+ if s:
+ params['s'] = s.group('s_value')
+
+ params.update(
+ [
+ ('jschl_vc', re.search(r'name="jschl_vc" value="(\w+)"', body).group(1)),
+ ('pass', re.search(r'name="pass" value="(.+?)"', body).group(1))
+ ]
+ )
+
+ params = cloudflare_kwargs.setdefault('params', params)
+
+ except Exception as e:
+ raise ValueError('Unable to parse Cloudflare anti-bots page: {} {}'.format(e.message, BUG_REPORT))
+
+ # Solve the Javascript challenge
+ params['jschl_answer'] = JavaScriptInterpreter.dynamicImport(self.interpreter).solveChallenge(body, domain)
+
+ # Requests transforms any request into a GET after a redirect,
+ # so the redirect has to be handled manually here to allow for
+ # performing other types of requests even as the first request.
+
+ cloudflare_kwargs['allow_redirects'] = False
+
+ redirect = self.request(resp.request.method, submit_url, **cloudflare_kwargs)
+ redirect_location = urlparse(redirect.headers['Location'])
+ if not redirect_location.netloc:
+ redirect_url = urlunparse(
+ (
+ parsed_url.scheme,
+ domain,
+ redirect_location.path,
+ redirect_location.params,
+ redirect_location.query,
+ redirect_location.fragment
+ )
+ )
+ return self.request(resp.request.method, redirect_url, **original_kwargs)
+
+ return self.request(resp.request.method, redirect.headers['Location'], **original_kwargs)
+
+ ##########################################################################################################################################################
+
+ @classmethod
+ def create_scraper(cls, sess=None, **kwargs):
+ """
+ Convenience function for creating a ready-to-go CloudScraper object.
+ """
+ scraper = cls(**kwargs)
+
+ if sess:
+ attrs = ['auth', 'cert', 'cookies', 'headers', 'hooks', 'params', 'proxies', 'data']
+ for attr in attrs:
+ val = getattr(sess, attr, None)
+ if val:
+ setattr(scraper, attr, val)
+
+ return scraper
+
+ ##########################################################################################################################################################
+
+ # Functions for integrating cloudscraper with other applications and scripts
+ @classmethod
+ def get_tokens(cls, url, **kwargs):
+ scraper = cls.create_scraper(
+ debug=kwargs.pop('debug', False),
+ delay=kwargs.pop('delay', None),
+ interpreter=kwargs.pop('interpreter', 'js2py'),
+ allow_brotli=kwargs.pop('allow_brotli', True),
+ )
+
+ try:
+ resp = scraper.get(url, **kwargs)
+ resp.raise_for_status()
+ except Exception:
+ logging.error('"{}" returned an error. Could not collect tokens.'.format(url))
+ raise
+
+ domain = urlparse(resp.url).netloc
+ # noinspection PyUnusedLocal
+ cookie_domain = None
+
+ for d in scraper.cookies.list_domains():
+ if d.startswith('.') and d in ('.{}'.format(domain)):
+ cookie_domain = d
+ break
+ else:
+ raise ValueError('Unable to find Cloudflare cookies. Does the site actually have Cloudflare IUAM ("I\'m Under Attack Mode") enabled?')
+
+ return (
+ {
+ '__cfduid': scraper.cookies.get('__cfduid', '', domain=cookie_domain),
+ 'cf_clearance': scraper.cookies.get('cf_clearance', '', domain=cookie_domain)
+ },
+ scraper.headers['User-Agent']
+ )
+
+ ##########################################################################################################################################################
+
+ @classmethod
+ def get_cookie_string(cls, url, **kwargs):
+ """
+ Convenience function for building a Cookie HTTP header value.
+ """
+ tokens, user_agent = cls.get_tokens(url, **kwargs)
+ return '; '.join('='.join(pair) for pair in tokens.items()), user_agent
+
+
+##########################################################################################################################################################
+
+create_scraper = CloudScraper.create_scraper
+get_tokens = CloudScraper.get_tokens
+get_cookie_string = CloudScraper.get_cookie_string
diff --git a/Contents/Libraries/Shared/cloudscraper/interpreters/__init__.py b/Contents/Libraries/Shared/cloudscraper/interpreters/__init__.py
new file mode 100644
index 000000000..b6ee8a8a1
--- /dev/null
+++ b/Contents/Libraries/Shared/cloudscraper/interpreters/__init__.py
@@ -0,0 +1,89 @@
+import re
+import sys
+import logging
+import abc
+
+if sys.version_info >= (3, 4):
+ ABC = abc.ABC # noqa
+else:
+ ABC = abc.ABCMeta('ABC', (), {})
+
+##########################################################################################################################################################
+
+BUG_REPORT = 'Cloudflare may have changed their technique, or there may be a bug in the script.'
+
+##########################################################################################################################################################
+
+interpreters = {}
+
+
+class JavaScriptInterpreter(ABC):
+ @abc.abstractmethod
+ def __init__(self, name):
+ interpreters[name] = self
+
+ @classmethod
+ def dynamicImport(cls, name):
+ if name not in interpreters:
+ try:
+ __import__('{}.{}'.format(cls.__module__, name))
+ if not isinstance(interpreters.get(name), JavaScriptInterpreter):
+ raise ImportError('The interpreter was not initialized.')
+ except ImportError:
+ logging.error('Unable to load {} interpreter'.format(name))
+ raise
+
+ return interpreters[name]
+
+ @abc.abstractmethod
+ def eval(self, jsEnv, js):
+ pass
+
+ def solveChallenge(self, body, domain):
+ try:
+ js = re.search(
+ r'setTimeout\(function\(\){\s+(var s,t,o,p,b,r,e,a,k,i,n,g,f.+?\r?\n[\s\S]+?a\.value =.+?)\r?\n',
+ body
+ ).group(1)
+ except Exception:
+ raise ValueError('Unable to identify Cloudflare IUAM Javascript on website. {}'.format(BUG_REPORT))
+
+ js = re.sub(r'\s{2,}', ' ', js, flags=re.MULTILINE | re.DOTALL).replace('\'; 121\'', '')
+ js += '\na.value;'
+
+ jsEnv = '''
+ String.prototype.italics=function(str) {{return "" + this + "";}};
+ var document = {{
+ createElement: function () {{
+ return {{ firstChild: {{ href: "https://{domain}/" }} }}
+ }},
+ getElementById: function () {{
+ return {{"innerHTML": "{innerHTML}"}};
+ }}
+ }};
+ '''
+
+ try:
+ innerHTML = re.search(
+ r']*)? id="([^<>]*?)">([^<>]*?)
',
+ body,
+ re.MULTILINE | re.DOTALL
+ )
+ innerHTML = innerHTML.group(2) if innerHTML else ''
+
+ except: # noqa
+ logging.error('Error extracting Cloudflare IUAM Javascript. {}'.format(BUG_REPORT))
+ raise
+
+ try:
+ result = self.eval(
+ re.sub(r'\s{2,}', ' ', jsEnv.format(domain=domain, innerHTML=innerHTML), flags=re.MULTILINE | re.DOTALL),
+ js
+ )
+
+ float(result)
+ except Exception:
+ logging.error('Error executing Cloudflare IUAM Javascript. {}'.format(BUG_REPORT))
+ raise
+
+ return result
diff --git a/Contents/Libraries/Shared/cloudscraper/interpreters/js2py.py b/Contents/Libraries/Shared/cloudscraper/interpreters/js2py.py
new file mode 100644
index 000000000..d39104614
--- /dev/null
+++ b/Contents/Libraries/Shared/cloudscraper/interpreters/js2py.py
@@ -0,0 +1,32 @@
+from __future__ import absolute_import
+
+import js2py
+import logging
+import base64
+
+from . import JavaScriptInterpreter
+
+from .jsunfuck import jsunfuck
+
+
+class ChallengeInterpreter(JavaScriptInterpreter):
+
+ def __init__(self):
+ super(ChallengeInterpreter, self).__init__('js2py')
+
+ def eval(self, jsEnv, js):
+ if js2py.eval_js('(+(+!+[]+[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[!+[]+!+[]]+[+[]])+[])[+!+[]]') == '1':
+ logging.warning('WARNING - Please upgrade your js2py https://github.com/PiotrDabkowski/Js2Py, applying work around for the meantime.')
+ js = jsunfuck(js)
+
+ def atob(s):
+ return base64.b64decode('{}'.format(s)).decode('utf-8')
+
+ js2py.disable_pyimport()
+ context = js2py.EvalJs({'atob': atob})
+ result = context.eval('{}{}'.format(jsEnv, js))
+
+ return result
+
+
+ChallengeInterpreter()
diff --git a/Contents/Libraries/Shared/cloudscraper/interpreters/jsunfuck.py b/Contents/Libraries/Shared/cloudscraper/interpreters/jsunfuck.py
new file mode 100644
index 000000000..9b149cc2e
--- /dev/null
+++ b/Contents/Libraries/Shared/cloudscraper/interpreters/jsunfuck.py
@@ -0,0 +1,97 @@
+MAPPING = {
+ 'a': '(false+"")[1]',
+ 'b': '([]["entries"]()+"")[2]',
+ 'c': '([]["fill"]+"")[3]',
+ 'd': '(undefined+"")[2]',
+ 'e': '(true+"")[3]',
+ 'f': '(false+"")[0]',
+ 'g': '(false+[0]+String)[20]',
+ 'h': '(+(101))["to"+String["name"]](21)[1]',
+ 'i': '([false]+undefined)[10]',
+ 'j': '([]["entries"]()+"")[3]',
+ 'k': '(+(20))["to"+String["name"]](21)',
+ 'l': '(false+"")[2]',
+ 'm': '(Number+"")[11]',
+ 'n': '(undefined+"")[1]',
+ 'o': '(true+[]["fill"])[10]',
+ 'p': '(+(211))["to"+String["name"]](31)[1]',
+ 'q': '(+(212))["to"+String["name"]](31)[1]',
+ 'r': '(true+"")[1]',
+ 's': '(false+"")[3]',
+ 't': '(true+"")[0]',
+ 'u': '(undefined+"")[0]',
+ 'v': '(+(31))["to"+String["name"]](32)',
+ 'w': '(+(32))["to"+String["name"]](33)',
+ 'x': '(+(101))["to"+String["name"]](34)[1]',
+ 'y': '(NaN+[Infinity])[10]',
+ 'z': '(+(35))["to"+String["name"]](36)',
+ 'A': '(+[]+Array)[10]',
+ 'B': '(+[]+Boolean)[10]',
+ 'C': 'Function("return escape")()(("")["italics"]())[2]',
+ 'D': 'Function("return escape")()([]["fill"])["slice"]("-1")',
+ 'E': '(RegExp+"")[12]',
+ 'F': '(+[]+Function)[10]',
+ 'G': '(false+Function("return Date")()())[30]',
+ 'I': '(Infinity+"")[0]',
+ 'M': '(true+Function("return Date")()())[30]',
+ 'N': '(NaN+"")[0]',
+ 'O': '(NaN+Function("return{}")())[11]',
+ 'R': '(+[]+RegExp)[10]',
+ 'S': '(+[]+String)[10]',
+ 'T': '(NaN+Function("return Date")()())[30]',
+ 'U': '(NaN+Function("return{}")()["to"+String["name"]]["call"]())[11]',
+ ' ': '(NaN+[]["fill"])[11]',
+ '"': '("")["fontcolor"]()[12]',
+ '%': 'Function("return escape")()([]["fill"])[21]',
+ '&': '("")["link"](0+")[10]',
+ '(': '(undefined+[]["fill"])[22]',
+ ')': '([0]+false+[]["fill"])[20]',
+ '+': '(+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]])+[])[2]',
+ ',': '([]["slice"]["call"](false+"")+"")[1]',
+ '-': '(+(.+[0000000001])+"")[2]',
+ '.': '(+(+!+[]+[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[!+[]+!+[]]+[+[]])+[])[+!+[]]',
+ '/': '(false+[0])["italics"]()[10]',
+ ':': '(RegExp()+"")[3]',
+ ';': '("")["link"](")[14]',
+ '<': '("")["italics"]()[0]',
+ '=': '("")["fontcolor"]()[11]',
+ '>': '("")["italics"]()[2]',
+ '?': '(RegExp()+"")[2]',
+ '[': '([]["entries"]()+"")[0]',
+ ']': '([]["entries"]()+"")[22]',
+ '{': '(true+[]["fill"])[20]',
+ '}': '([]["fill"]+"")["slice"]("-1")'
+}
+
+SIMPLE = {
+ 'false': '![]',
+ 'true': '!![]',
+ 'undefined': '[][[]]',
+ 'NaN': '+[![]]',
+ 'Infinity': '+(+!+[]+(!+[]+[])[!+[]+!+[]+!+[]]+[+!+[]]+[+[]]+[+[]]+[+[]])' # +"1e1000"
+}
+
+CONSTRUCTORS = {
+ 'Array': '[]',
+ 'Number': '(+[])',
+ 'String': '([]+[])',
+ 'Boolean': '(![])',
+ 'Function': '[]["fill"]',
+ 'RegExp': 'Function("return/"+false+"/")()'
+}
+
+
+def jsunfuck(jsfuckString):
+ for key in sorted(MAPPING, key=lambda k: len(MAPPING[k]), reverse=True):
+ if MAPPING.get(key) in jsfuckString:
+ jsfuckString = jsfuckString.replace(MAPPING.get(key), '"{}"'.format(key))
+
+ for key in sorted(SIMPLE, key=lambda k: len(SIMPLE[k]), reverse=True):
+ if SIMPLE.get(key) in jsfuckString:
+ jsfuckString = jsfuckString.replace(SIMPLE.get(key), '{}'.format(key))
+
+ # for key in sorted(CONSTRUCTORS, key=lambda k: len(CONSTRUCTORS[k]), reverse=True):
+ # if CONSTRUCTORS.get(key) in jsfuckString:
+ # jsfuckString = jsfuckString.replace(CONSTRUCTORS.get(key), '{}'.format(key))
+
+ return jsfuckString
diff --git a/Contents/Libraries/Shared/cloudscraper/interpreters/nodejs.py b/Contents/Libraries/Shared/cloudscraper/interpreters/nodejs.py
new file mode 100644
index 000000000..28a375984
--- /dev/null
+++ b/Contents/Libraries/Shared/cloudscraper/interpreters/nodejs.py
@@ -0,0 +1,46 @@
+import base64
+import logging
+import subprocess
+
+from . import JavaScriptInterpreter
+
+##########################################################################################################################################################
+
+BUG_REPORT = 'Cloudflare may have changed their technique, or there may be a bug in the script.'
+
+##########################################################################################################################################################
+
+
+class ChallengeInterpreter(JavaScriptInterpreter):
+
+ def __init__(self):
+ super(ChallengeInterpreter, self).__init__('nodejs')
+
+ def eval(self, jsEnv, js):
+ try:
+ js = 'var atob = function(str) {return Buffer.from(str, "base64").toString("binary");};' \
+ 'var challenge = atob("%s");' \
+ 'var context = {atob: atob};' \
+ 'var options = {filename: "iuam-challenge.js", timeout: 4000};' \
+ 'var answer = require("vm").runInNewContext(challenge, context, options);' \
+ 'process.stdout.write(String(answer));' \
+ % base64.b64encode('{}{}'.format(jsEnv, js).encode('UTF-8')).decode('ascii')
+
+ return subprocess.check_output(['node', '-e', js])
+
+ except OSError as e:
+ if e.errno == 2:
+ raise EnvironmentError(
+ 'Missing Node.js runtime. Node is required and must be in the PATH (check with `node -v`). Your Node binary may be called `nodejs` rather than `node`, '
+ 'in which case you may need to run `apt-get install nodejs-legacy` on some Debian-based systems. (Please read the cloudscraper'
+ ' README\'s Dependencies section: https://github.com/VeNoMouS/cloudscraper#dependencies.'
+ )
+ raise
+ except Exception:
+ logging.error('Error executing Cloudflare IUAM Javascript. %s' % BUG_REPORT)
+ raise
+
+ pass
+
+
+ChallengeInterpreter()
diff --git a/Contents/Libraries/Shared/cloudscraper/user_agent/__init__.py b/Contents/Libraries/Shared/cloudscraper/user_agent/__init__.py
new file mode 100644
index 000000000..45190fbe4
--- /dev/null
+++ b/Contents/Libraries/Shared/cloudscraper/user_agent/__init__.py
@@ -0,0 +1,40 @@
+import os
+import json
+import random
+import logging
+
+from collections import OrderedDict
+
+##########################################################################################################################################################
+
+
+class User_Agent():
+
+ ##########################################################################################################################################################
+
+ def __init__(self, *args, **kwargs):
+ self.headers = None
+ self.loadUserAgent(*args, **kwargs)
+
+ ##########################################################################################################################################################
+
+ def loadUserAgent(self, *args, **kwargs):
+ browser = kwargs.pop('browser', 'chrome')
+
+ user_agents = json.load(
+ open(os.path.join(os.path.dirname(__file__), 'browsers.json'), 'r'),
+ object_pairs_hook=OrderedDict
+ )
+
+ if not user_agents.get(browser):
+ logging.error('Sorry "{}" browser User-Agent was not found.'.format(browser))
+ raise
+
+ user_agent = random.choice(user_agents.get(browser))
+
+ self.headers = user_agent.get('headers')
+ self.headers['User-Agent'] = random.choice(user_agent.get('User-Agent'))
+
+ if not kwargs.get('allow_brotli', False):
+ if 'br' in self.headers['Accept-Encoding']:
+ self.headers['Accept-Encoding'] = ','.join([encoding for encoding in self.headers['Accept-Encoding'].split(',') if encoding.strip() != 'br']).strip()
diff --git a/Contents/Libraries/Shared/cloudscraper/user_agent/browsers.json b/Contents/Libraries/Shared/cloudscraper/user_agent/browsers.json
new file mode 100644
index 000000000..c3eab3155
--- /dev/null
+++ b/Contents/Libraries/Shared/cloudscraper/user_agent/browsers.json
@@ -0,0 +1,336 @@
+{
+ "chrome": [
+ {
+ "User-Agent": [
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.113 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"
+ ],
+ "headers": {
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": null,
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
+ "Accept-Language": "en-US,en;q=0.8",
+ "Accept-Encoding": "gzip, deflate, , br"
+ }
+ },
+ {
+ "User-Agent": [
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"
+ ],
+ "headers": {
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": null,
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
+ "Accept-Language": "en-US,en;q=0.8",
+ "Accept-Encoding": "gzip, deflate, br"
+ }
+ },
+ {
+ "User-Agent": [
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36"
+ ],
+ "headers": {
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": null,
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
+ "Accept-Language": "en-US,en;q=0.9",
+ "Accept-Encoding": "gzip, deflate, br"
+ }
+ },
+ {
+ "User-Agent": [
+ "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"
+ ],
+ "headers": {
+ "Connection": "keep-alive",
+ "User-Agent": null,
+ "Upgrade-Insecure-Requests": "1",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
+ "Accept-Language": "en-US,en;q=0.9",
+ "Accept-Encoding": "gzip, deflate, br"
+ }
+ },
+ {
+ "User-Agent": [
+ "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.40 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.40 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.28 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.28 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.28 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.28 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.28 Safari/537.36"
+ ],
+ "headers": {
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": null,
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
+ "Accept-Language": "en-US,en;q=0.9",
+ "Accept-Encoding": "gzip, deflate, br"
+ }
+ },
+ {
+ "User-Agent": [
+ "Mozilla/5.0 (Linux; Android 8.1.0; SM-N960F Build/M1AJQ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 8.0.0; SM-G965F Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 Build/OPD1.170816.010) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 8.0.0; Pixel Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 7.1.1; SM-A530F Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 7.1; Pixel Build/NDE63H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 7.0; SM-G955F Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 7.0; SM-G950F Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 7.0; SM-T825 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 6.0.1; SM-G930F Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 6.0; Nexus 6 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 6.0; XT1092 Build/MPE24.49-18) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 6.0.1; SM-N910C Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 5.0.2; SM-G920F Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 5.0; Nexus 6 Build/LRX21O) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 9; Pixel 3 XL Build/PD1A.180720.030) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PD1A.180720.030) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 9; Pixel 2 Build/PPR1.180610.009) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/KRT16M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 4.4.2; SM-T530 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 4.4.4; SM-N910C Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 9 Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 7.1.1; SM-N950F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.90 Mobile Safari/537.36"
+ ],
+ "headers": {
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": null,
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
+ "Accept-Encoding": "gzip, deflate, br",
+ "Accept-Language": "en-US,en;q=0.9"
+ }
+ },
+ {
+ "User-Agent": [
+ "Mozilla/5.0 (Linux; Android 8.1.0; SM-T835 Build/M1AJQ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36",
+ "Mozilla/5.0 (Linux; Android 5.0; XT1092 Build/LXE22.46-19) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.85 Mobile Safari/537.36"
+ ],
+ "headers": {
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": null,
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
+ "Accept-Encoding": "gzip, deflate, br",
+ "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8"
+ }
+ }
+ ]
+}
diff --git a/Contents/Libraries/Shared/deathbycaptcha.py b/Contents/Libraries/Shared/deathbycaptcha.py
new file mode 100644
index 000000000..3c2fafb77
--- /dev/null
+++ b/Contents/Libraries/Shared/deathbycaptcha.py
@@ -0,0 +1,516 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+"""Death by Captcha HTTP and socket API clients.
+
+There are two types of Death by Captcha (DBC hereinafter) API: HTTP and
+socket ones. Both offer the same functionalily, with the socket API
+sporting faster responses and using way less connections.
+
+To access the socket API, use SocketClient class; for the HTTP API, use
+HttpClient class. Both are thread-safe. SocketClient keeps a persistent
+connection opened and serializes all API requests sent through it, thus
+it is advised to keep a pool of them if you're script is heavily
+multithreaded.
+
+Both SocketClient and HttpClient give you the following methods:
+
+get_user()
+ Returns your DBC account details as a dict with the following keys:
+
+ "user": your account numeric ID; if login fails, it will be the only
+ item with the value of 0;
+ "rate": your CAPTCHA rate, i.e. how much you will be charged for one
+ solved CAPTCHA in US cents;
+ "balance": your DBC account balance in US cents;
+ "is_banned": flag indicating whether your account is suspended or not.
+
+get_balance()
+ Returns your DBC account balance in US cents.
+
+get_captcha(cid)
+ Returns an uploaded CAPTCHA details as a dict with the following keys:
+
+ "captcha": the CAPTCHA numeric ID; if no such CAPTCHAs found, it will
+ be the only item with the value of 0;
+ "text": the CAPTCHA text, if solved, otherwise None;
+ "is_correct": flag indicating whether the CAPTCHA was solved correctly
+ (DBC can detect that in rare cases).
+
+ The only argument `cid` is the CAPTCHA numeric ID.
+
+get_text(cid)
+ Returns an uploaded CAPTCHA text (None if not solved). The only argument
+ `cid` is the CAPTCHA numeric ID.
+
+report(cid)
+ Reports an incorrectly solved CAPTCHA. The only argument `cid` is the
+ CAPTCHA numeric ID. Returns True on success, False otherwise.
+
+upload(captcha)
+ Uploads a CAPTCHA. The only argument `captcha` can be either file-like
+ object (any object with `read` method defined, actually, so StringIO
+ will do), or CAPTCHA image file name. On successul upload you'll get
+ the CAPTCHA details dict (see get_captcha() method).
+
+ NOTE: AT THIS POINT THE UPLOADED CAPTCHA IS NOT SOLVED YET! You have
+ to poll for its status periodically using get_captcha() or get_text()
+ method until the CAPTCHA is solved and you get the text.
+
+decode(captcha, timeout=DEFAULT_TIMEOUT)
+ A convenient method that uploads a CAPTCHA and polls for its status
+ periodically, but no longer than `timeout` (defaults to 60 seconds).
+ If solved, you'll get the CAPTCHA details dict (see get_captcha()
+ method for details). See upload() method for details on `captcha`
+ argument.
+
+Visit http://www.deathbycaptcha.com/user/api for updates.
+
+"""
+
+import base64
+import binascii
+import errno
+import imghdr
+import random
+import os
+import select
+import socket
+import sys
+import threading
+import time
+import urllib
+import urllib2
+try:
+ from json import read as json_decode, write as json_encode
+except ImportError:
+ try:
+ from json import loads as json_decode, dumps as json_encode
+ except ImportError:
+ from simplejson import loads as json_decode, dumps as json_encode
+
+
+# API version and unique software ID
+API_VERSION = 'DBC/Python v4.6'
+
+# Default CAPTCHA timeout and decode() polling interval
+DEFAULT_TIMEOUT = 60
+DEFAULT_TOKEN_TIMEOUT = 120
+POLLS_INTERVAL = [1, 1, 2, 3, 2, 2, 3, 2, 2]
+DFLT_POLL_INTERVAL = 3
+
+# Base HTTP API url
+HTTP_BASE_URL = 'http://api.dbcapi.me/api'
+
+# Preferred HTTP API server's response content type, do not change
+HTTP_RESPONSE_TYPE = 'application/json'
+
+# Socket API server's host & ports range
+SOCKET_HOST = 'api.dbcapi.me'
+SOCKET_PORTS = range(8123, 8131)
+
+
+def _load_image(captcha):
+ if hasattr(captcha, 'read'):
+ img = captcha.read()
+ elif type(captcha) == bytearray:
+ img = captcha
+ else:
+ img = ''
+ try:
+ captcha_file = open(captcha, 'rb')
+ except Exception:
+ raise
+ else:
+ img = captcha_file.read()
+ captcha_file.close()
+ if not len(img):
+ raise ValueError('CAPTCHA image is empty')
+ elif imghdr.what(None, img) is None:
+ raise TypeError('Unknown CAPTCHA image type')
+ else:
+ return img
+
+
+class AccessDeniedException(Exception):
+ pass
+
+
+class Client(object):
+
+ """Death by Captcha API Client."""
+
+ def __init__(self, username, password):
+ self.is_verbose = False
+ self.userpwd = {'username': username, 'password': password}
+
+ def _log(self, cmd, msg=''):
+ if self.is_verbose:
+ print '%d %s %s' % (time.time(), cmd, msg.rstrip())
+ return self
+
+ def close(self):
+ pass
+
+ def connect(self):
+ pass
+
+ def get_user(self):
+ """Fetch user details -- ID, balance, rate and banned status."""
+ raise NotImplementedError()
+
+ def get_balance(self):
+ """Fetch user balance (in US cents)."""
+ return self.get_user().get('balance')
+
+ def get_captcha(self, cid):
+ """Fetch a CAPTCHA details -- ID, text and correctness flag."""
+ raise NotImplementedError()
+
+ def get_text(self, cid):
+ """Fetch a CAPTCHA text."""
+ return self.get_captcha(cid).get('text') or None
+
+ def report(self, cid):
+ """Report a CAPTCHA as incorrectly solved."""
+ raise NotImplementedError()
+
+ def upload(self, captcha):
+ """Upload a CAPTCHA.
+
+ Accepts file names and file-like objects. Returns CAPTCHA details
+ dict on success.
+
+ """
+ raise NotImplementedError()
+
+ def decode(self, captcha=None, timeout=None, **kwargs):
+ """
+ Try to solve a CAPTCHA.
+
+ See Client.upload() for arguments details.
+
+ Uploads a CAPTCHA, polls for its status periodically with arbitrary
+ timeout (in seconds), returns CAPTCHA details if (correctly) solved.
+ """
+ if not timeout:
+ if not captcha:
+ timeout = DEFAULT_TOKEN_TIMEOUT
+ else:
+ timeout = DEFAULT_TIMEOUT
+
+ deadline = time.time() + (max(0, timeout) or DEFAULT_TIMEOUT)
+ uploaded_captcha = self.upload(captcha, **kwargs)
+ if uploaded_captcha:
+ intvl_idx = 0 # POLL_INTERVAL index
+ while deadline > time.time() and not uploaded_captcha.get('text'):
+ intvl, intvl_idx = self._get_poll_interval(intvl_idx)
+ time.sleep(intvl)
+ pulled = self.get_captcha(uploaded_captcha['captcha'])
+ if pulled['captcha'] == uploaded_captcha['captcha']:
+ uploaded_captcha = pulled
+ if uploaded_captcha.get('text') and \
+ uploaded_captcha.get('is_correct'):
+ return uploaded_captcha
+
+ def _get_poll_interval(self, idx):
+ """Returns poll interval and next index depending on index provided"""
+
+ if len(POLLS_INTERVAL) > idx:
+ intvl = POLLS_INTERVAL[idx]
+ else:
+ intvl = DFLT_POLL_INTERVAL
+ idx += 1
+
+ return intvl, idx
+
+
+class HttpClient(Client):
+
+ """Death by Captcha HTTP API client."""
+
+ def __init__(self, *args):
+ Client.__init__(self, *args)
+ self.opener = urllib2.build_opener(urllib2.HTTPRedirectHandler())
+
+ def _call(self, cmd, payload=None, headers=None):
+ if headers is None:
+ headers = {}
+ headers['Accept'] = HTTP_RESPONSE_TYPE
+ headers['User-Agent'] = API_VERSION
+ if hasattr(payload, 'items'):
+ payload = urllib.urlencode(payload)
+ self._log('SEND', '%s %d %s' % (cmd, len(payload), payload))
+ else:
+ self._log('SEND', '%s' % cmd)
+ if payload is not None:
+ headers['Content-Length'] = len(payload)
+ try:
+ response = self.opener.open(urllib2.Request(
+ HTTP_BASE_URL + '/' + cmd.strip('/'),
+ data=payload,
+ headers=headers
+ )).read()
+ except urllib2.HTTPError, err:
+ if 403 == err.code:
+ raise AccessDeniedException('Access denied, please check'
+ ' your credentials and/or balance')
+ elif 400 == err.code or 413 == err.code:
+ raise ValueError("CAPTCHA was rejected by the service, check"
+ " if it's a valid image")
+ elif 503 == err.code:
+ raise OverflowError("CAPTCHA was rejected due to service"
+ " overload, try again later")
+ else:
+ raise err
+ else:
+ self._log('RECV', '%d %s' % (len(response), response))
+ try:
+ return json_decode(response)
+ except Exception:
+ raise RuntimeError('Invalid API response')
+ return {}
+
+ def get_user(self):
+ return self._call('user', self.userpwd.copy()) or {'user': 0}
+
+ def get_captcha(self, cid):
+ return self._call('captcha/%d' % cid) or {'captcha': 0}
+
+ def report(self, cid):
+ return not self._call('captcha/%d/report' % cid,
+ self.userpwd.copy()).get('is_correct')
+
+ def upload(self, captcha=None, **kwargs):
+ boundary = binascii.hexlify(os.urandom(16))
+ banner = kwargs.get('banner', '')
+ if banner:
+ kwargs['banner'] = 'base64:' + base64.b64encode(_load_image(banner))
+ body = '\r\n'.join(('\r\n'.join((
+ '--%s' % boundary,
+ 'Content-Disposition: form-data; name="%s"' % k,
+ 'Content-Type: text/plain',
+ 'Content-Length: %d' % len(str(v)),
+ '',
+ str(v)
+ ))) for k, v in self.userpwd.items())
+
+ body += '\r\n'.join(('\r\n'.join((
+ '--%s' % boundary,
+ 'Content-Disposition: form-data; name="%s"' % k,
+ 'Content-Type: text/plain',
+ 'Content-Length: %d' % len(str(v)),
+ '',
+ str(v)
+ ))) for k, v in kwargs.items())
+
+ if captcha:
+ img = _load_image(captcha)
+ body += '\r\n'.join((
+ '',
+ '--%s' % boundary,
+ 'Content-Disposition: form-data; name="captchafile"; '
+ 'filename="captcha"',
+ 'Content-Type: application/octet-stream',
+ 'Content-Length: %d' % len(img),
+ '',
+ img,
+ '--%s--' % boundary,
+ ''
+ ))
+
+ response = self._call('captcha', body, {
+ 'Content-Type': 'multipart/form-data; boundary="%s"' % boundary
+ }) or {}
+ if response.get('captcha'):
+ return response
+
+
+class SocketClient(Client):
+
+ """Death by Captcha socket API client."""
+
+ TERMINATOR = '\r\n'
+
+ def __init__(self, *args):
+ Client.__init__(self, *args)
+ self.socket_lock = threading.Lock()
+ self.socket = None
+
+ def close(self):
+ if self.socket:
+ self._log('CLOSE')
+ try:
+ self.socket.shutdown(socket.SHUT_RDWR)
+ except socket.error:
+ pass
+ finally:
+ self.socket.close()
+ self.socket = None
+
+ def connect(self):
+ if not self.socket:
+ self._log('CONN')
+ host = (socket.gethostbyname(SOCKET_HOST),
+ random.choice(SOCKET_PORTS))
+ self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.socket.settimeout(0)
+ try:
+ self.socket.connect(host)
+ except socket.error, err:
+ if (err.args[0] not in
+ (errno.EAGAIN, errno.EWOULDBLOCK, errno.EINPROGRESS)):
+ self.close()
+ raise err
+ return self.socket
+
+ def __del__(self):
+ self.close()
+
+ def _sendrecv(self, sock, buf):
+ self._log('SEND', buf)
+ fds = [sock]
+ buf += self.TERMINATOR
+ response = ''
+ intvl_idx = 0
+ while True:
+ intvl, intvl_idx = self._get_poll_interval(intvl_idx)
+ rds, wrs, exs = select.select((not buf and fds) or [],
+ (buf and fds) or [],
+ fds,
+ intvl)
+ if exs:
+ raise IOError('select() failed')
+ try:
+ if wrs:
+ while buf:
+ buf = buf[wrs[0].send(buf):]
+ elif rds:
+ while True:
+ s = rds[0].recv(256)
+ if not s:
+ raise IOError('recv(): connection lost')
+ else:
+ response += s
+ except socket.error, err:
+ if (err.args[0] not in
+ (errno.EAGAIN, errno.EWOULDBLOCK, errno.EINPROGRESS)):
+ raise err
+ if response.endswith(self.TERMINATOR):
+ self._log('RECV', response)
+ return response.rstrip(self.TERMINATOR)
+ raise IOError('send/recv timed out')
+
+ def _call(self, cmd, data=None):
+ if data is None:
+ data = {}
+ data['cmd'] = cmd
+ data['version'] = API_VERSION
+ request = json_encode(data)
+
+ response = None
+ for _ in range(2):
+ if not self.socket and cmd != 'login':
+ self._call('login', self.userpwd.copy())
+ self.socket_lock.acquire()
+ try:
+ sock = self.connect()
+ response = self._sendrecv(sock, request)
+ except IOError, err:
+ sys.stderr.write(str(err) + "\n")
+ self.close()
+ except socket.error, err:
+ sys.stderr.write(str(err) + "\n")
+ self.close()
+ raise IOError('Connection refused')
+ else:
+ break
+ finally:
+ self.socket_lock.release()
+
+ if response is None:
+ raise IOError('Connection lost or timed out during API request')
+
+ try:
+ response = json_decode(response)
+ except Exception:
+ raise RuntimeError('Invalid API response')
+
+ if not response.get('error'):
+ return response
+
+ error = response['error']
+ if error in ('not-logged-in', 'invalid-credentials'):
+ raise AccessDeniedException('Access denied, check your credentials')
+ elif 'banned' == error:
+ raise AccessDeniedException('Access denied, account is suspended')
+ elif 'insufficient-funds' == error:
+ raise AccessDeniedException(
+ 'CAPTCHA was rejected due to low balance')
+ elif 'invalid-captcha' == error:
+ raise ValueError('CAPTCHA is not a valid image')
+ elif 'service-overload' == error:
+ raise OverflowError(
+ 'CAPTCHA was rejected due to service overload, try again later')
+ else:
+ self.socket_lock.acquire()
+ self.close()
+ self.socket_lock.release()
+ raise RuntimeError('API server error occured: %s' % error)
+
+ def get_user(self):
+ return self._call('user') or {'user': 0}
+
+ def get_captcha(self, cid):
+ return self._call('captcha', {'captcha': cid}) or {'captcha': 0}
+
+ def upload(self, captcha=None, **kwargs):
+ data = {}
+ if captcha:
+ data['captcha'] = base64.b64encode(_load_image(captcha))
+ if kwargs:
+ banner = kwargs.get('banner', '')
+ if banner:
+ kwargs['banner'] = base64.b64encode(_load_image(banner))
+ data.update(kwargs)
+ response = self._call('upload', data)
+ if response.get('captcha'):
+ uploaded_captcha = dict(
+ (k, response.get(k))
+ for k in ('captcha', 'text', 'is_correct')
+ )
+ if not uploaded_captcha['text']:
+ uploaded_captcha['text'] = None
+ return uploaded_captcha
+
+ def report(self, cid):
+ return not self._call('report', {'captcha': cid}).get('is_correct')
+
+
+if '__main__' == __name__:
+ # Put your DBC username & password here:
+ # client = HttpClient(sys.argv[1], sys.argv[2])
+ client = SocketClient(sys.argv[1], sys.argv[2])
+ client.is_verbose = True
+
+ print 'Your balance is %s US cents' % client.get_balance()
+
+ for fn in sys.argv[3:]:
+ try:
+ # Put your CAPTCHA image file name or file-like object, and optional
+ # solving timeout (in seconds) here:
+ captcha = client.decode(fn, DEFAULT_TIMEOUT)
+ except Exception, e:
+ sys.stderr.write('Failed uploading CAPTCHA: %s\n' % (e, ))
+ captcha = None
+
+ if captcha:
+ print 'CAPTCHA %d solved: %s' % \
+ (captcha['captcha'], captcha['text'])
+
+ # Report as incorrectly solved if needed. Make sure the CAPTCHA was
+ # in fact incorrectly solved!
+ # try:
+ # client.report(captcha['captcha'])
+ # except Exception, e:
+ # sys.stderr.write('Failed reporting CAPTCHA: %s\n' % (e, ))
diff --git a/Contents/Libraries/Shared/dns/__init__.py b/Contents/Libraries/Shared/dns/__init__.py
new file mode 100644
index 000000000..c848e4858
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/__init__.py
@@ -0,0 +1,54 @@
+# Copyright (C) 2003-2007, 2009, 2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""dnspython DNS toolkit"""
+
+__all__ = [
+ 'dnssec',
+ 'e164',
+ 'edns',
+ 'entropy',
+ 'exception',
+ 'flags',
+ 'hash',
+ 'inet',
+ 'ipv4',
+ 'ipv6',
+ 'message',
+ 'name',
+ 'namedict',
+ 'node',
+ 'opcode',
+ 'query',
+ 'rcode',
+ 'rdata',
+ 'rdataclass',
+ 'rdataset',
+ 'rdatatype',
+ 'renderer',
+ 'resolver',
+ 'reversename',
+ 'rrset',
+ 'set',
+ 'tokenizer',
+ 'tsig',
+ 'tsigkeyring',
+ 'ttl',
+ 'rdtypes',
+ 'update',
+ 'version',
+ 'wiredata',
+ 'zone',
+]
diff --git a/Contents/Libraries/Shared/dns/_compat.py b/Contents/Libraries/Shared/dns/_compat.py
new file mode 100644
index 000000000..956f9a133
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/_compat.py
@@ -0,0 +1,47 @@
+import sys
+import decimal
+from decimal import Context
+
+if sys.version_info > (3,):
+ long = int
+ xrange = range
+else:
+ long = long # pylint: disable=long-builtin
+ xrange = xrange # pylint: disable=xrange-builtin
+
+# unicode / binary types
+if sys.version_info > (3,):
+ text_type = str
+ binary_type = bytes
+ string_types = (str,)
+ unichr = chr
+ def maybe_decode(x):
+ return x.decode()
+ def maybe_encode(x):
+ return x.encode()
+else:
+ text_type = unicode # pylint: disable=unicode-builtin, undefined-variable
+ binary_type = str
+ string_types = (
+ basestring, # pylint: disable=basestring-builtin, undefined-variable
+ )
+ unichr = unichr # pylint: disable=unichr-builtin
+ def maybe_decode(x):
+ return x
+ def maybe_encode(x):
+ return x
+
+
+def round_py2_compat(what):
+ """
+ Python 2 and Python 3 use different rounding strategies in round(). This
+ function ensures that results are python2/3 compatible and backward
+ compatible with previous py2 releases
+ :param what: float
+ :return: rounded long
+ """
+ d = Context(
+ prec=len(str(long(what))), # round to integer with max precision
+ rounding=decimal.ROUND_HALF_UP
+ ).create_decimal(str(what)) # str(): python 2.6 compat
+ return long(d)
diff --git a/Contents/Libraries/Shared/dns/dnssec.py b/Contents/Libraries/Shared/dns/dnssec.py
new file mode 100644
index 000000000..fec12082c
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/dnssec.py
@@ -0,0 +1,457 @@
+# Copyright (C) 2003-2007, 2009, 2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Common DNSSEC-related functions and constants."""
+
+from io import BytesIO
+import struct
+import time
+
+import dns.exception
+import dns.hash
+import dns.name
+import dns.node
+import dns.rdataset
+import dns.rdata
+import dns.rdatatype
+import dns.rdataclass
+from ._compat import string_types
+
+
+class UnsupportedAlgorithm(dns.exception.DNSException):
+
+ """The DNSSEC algorithm is not supported."""
+
+
+class ValidationFailure(dns.exception.DNSException):
+
+ """The DNSSEC signature is invalid."""
+
+RSAMD5 = 1
+DH = 2
+DSA = 3
+ECC = 4
+RSASHA1 = 5
+DSANSEC3SHA1 = 6
+RSASHA1NSEC3SHA1 = 7
+RSASHA256 = 8
+RSASHA512 = 10
+ECDSAP256SHA256 = 13
+ECDSAP384SHA384 = 14
+INDIRECT = 252
+PRIVATEDNS = 253
+PRIVATEOID = 254
+
+_algorithm_by_text = {
+ 'RSAMD5': RSAMD5,
+ 'DH': DH,
+ 'DSA': DSA,
+ 'ECC': ECC,
+ 'RSASHA1': RSASHA1,
+ 'DSANSEC3SHA1': DSANSEC3SHA1,
+ 'RSASHA1NSEC3SHA1': RSASHA1NSEC3SHA1,
+ 'RSASHA256': RSASHA256,
+ 'RSASHA512': RSASHA512,
+ 'INDIRECT': INDIRECT,
+ 'ECDSAP256SHA256': ECDSAP256SHA256,
+ 'ECDSAP384SHA384': ECDSAP384SHA384,
+ 'PRIVATEDNS': PRIVATEDNS,
+ 'PRIVATEOID': PRIVATEOID,
+}
+
+# We construct the inverse mapping programmatically to ensure that we
+# cannot make any mistakes (e.g. omissions, cut-and-paste errors) that
+# would cause the mapping not to be true inverse.
+
+_algorithm_by_value = dict((y, x) for x, y in _algorithm_by_text.items())
+
+
+def algorithm_from_text(text):
+ """Convert text into a DNSSEC algorithm value
+ @rtype: int"""
+
+ value = _algorithm_by_text.get(text.upper())
+ if value is None:
+ value = int(text)
+ return value
+
+
+def algorithm_to_text(value):
+ """Convert a DNSSEC algorithm value to text
+ @rtype: string"""
+
+ text = _algorithm_by_value.get(value)
+ if text is None:
+ text = str(value)
+ return text
+
+
+def _to_rdata(record, origin):
+ s = BytesIO()
+ record.to_wire(s, origin=origin)
+ return s.getvalue()
+
+
+def key_id(key, origin=None):
+ rdata = _to_rdata(key, origin)
+ rdata = bytearray(rdata)
+ if key.algorithm == RSAMD5:
+ return (rdata[-3] << 8) + rdata[-2]
+ else:
+ total = 0
+ for i in range(len(rdata) // 2):
+ total += (rdata[2 * i] << 8) + \
+ rdata[2 * i + 1]
+ if len(rdata) % 2 != 0:
+ total += rdata[len(rdata) - 1] << 8
+ total += ((total >> 16) & 0xffff)
+ return total & 0xffff
+
+
+def make_ds(name, key, algorithm, origin=None):
+ if algorithm.upper() == 'SHA1':
+ dsalg = 1
+ hash = dns.hash.hashes['SHA1']()
+ elif algorithm.upper() == 'SHA256':
+ dsalg = 2
+ hash = dns.hash.hashes['SHA256']()
+ else:
+ raise UnsupportedAlgorithm('unsupported algorithm "%s"' % algorithm)
+
+ if isinstance(name, string_types):
+ name = dns.name.from_text(name, origin)
+ hash.update(name.canonicalize().to_wire())
+ hash.update(_to_rdata(key, origin))
+ digest = hash.digest()
+
+ dsrdata = struct.pack("!HBB", key_id(key), key.algorithm, dsalg) + digest
+ return dns.rdata.from_wire(dns.rdataclass.IN, dns.rdatatype.DS, dsrdata, 0,
+ len(dsrdata))
+
+
+def _find_candidate_keys(keys, rrsig):
+ candidate_keys = []
+ value = keys.get(rrsig.signer)
+ if value is None:
+ return None
+ if isinstance(value, dns.node.Node):
+ try:
+ rdataset = value.find_rdataset(dns.rdataclass.IN,
+ dns.rdatatype.DNSKEY)
+ except KeyError:
+ return None
+ else:
+ rdataset = value
+ for rdata in rdataset:
+ if rdata.algorithm == rrsig.algorithm and \
+ key_id(rdata) == rrsig.key_tag:
+ candidate_keys.append(rdata)
+ return candidate_keys
+
+
+def _is_rsa(algorithm):
+ return algorithm in (RSAMD5, RSASHA1,
+ RSASHA1NSEC3SHA1, RSASHA256,
+ RSASHA512)
+
+
+def _is_dsa(algorithm):
+ return algorithm in (DSA, DSANSEC3SHA1)
+
+
+def _is_ecdsa(algorithm):
+ return _have_ecdsa and (algorithm in (ECDSAP256SHA256, ECDSAP384SHA384))
+
+
+def _is_md5(algorithm):
+ return algorithm == RSAMD5
+
+
+def _is_sha1(algorithm):
+ return algorithm in (DSA, RSASHA1,
+ DSANSEC3SHA1, RSASHA1NSEC3SHA1)
+
+
+def _is_sha256(algorithm):
+ return algorithm in (RSASHA256, ECDSAP256SHA256)
+
+
+def _is_sha384(algorithm):
+ return algorithm == ECDSAP384SHA384
+
+
+def _is_sha512(algorithm):
+ return algorithm == RSASHA512
+
+
+def _make_hash(algorithm):
+ if _is_md5(algorithm):
+ return dns.hash.hashes['MD5']()
+ if _is_sha1(algorithm):
+ return dns.hash.hashes['SHA1']()
+ if _is_sha256(algorithm):
+ return dns.hash.hashes['SHA256']()
+ if _is_sha384(algorithm):
+ return dns.hash.hashes['SHA384']()
+ if _is_sha512(algorithm):
+ return dns.hash.hashes['SHA512']()
+ raise ValidationFailure('unknown hash for algorithm %u' % algorithm)
+
+
+def _make_algorithm_id(algorithm):
+ if _is_md5(algorithm):
+ oid = [0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x05]
+ elif _is_sha1(algorithm):
+ oid = [0x2b, 0x0e, 0x03, 0x02, 0x1a]
+ elif _is_sha256(algorithm):
+ oid = [0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01]
+ elif _is_sha512(algorithm):
+ oid = [0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03]
+ else:
+ raise ValidationFailure('unknown algorithm %u' % algorithm)
+ olen = len(oid)
+ dlen = _make_hash(algorithm).digest_size
+ idbytes = [0x30] + [8 + olen + dlen] + \
+ [0x30, olen + 4] + [0x06, olen] + oid + \
+ [0x05, 0x00] + [0x04, dlen]
+ return struct.pack('!%dB' % len(idbytes), *idbytes)
+
+
+def _validate_rrsig(rrset, rrsig, keys, origin=None, now=None):
+ """Validate an RRset against a single signature rdata
+
+ The owner name of the rrsig is assumed to be the same as the owner name
+ of the rrset.
+
+ @param rrset: The RRset to validate
+ @type rrset: dns.rrset.RRset or (dns.name.Name, dns.rdataset.Rdataset)
+ tuple
+ @param rrsig: The signature rdata
+ @type rrsig: dns.rrset.Rdata
+ @param keys: The key dictionary.
+ @type keys: a dictionary keyed by dns.name.Name with node or rdataset
+ values
+ @param origin: The origin to use for relative names
+ @type origin: dns.name.Name or None
+ @param now: The time to use when validating the signatures. The default
+ is the current time.
+ @type now: int
+ """
+
+ if isinstance(origin, string_types):
+ origin = dns.name.from_text(origin, dns.name.root)
+
+ for candidate_key in _find_candidate_keys(keys, rrsig):
+ if not candidate_key:
+ raise ValidationFailure('unknown key')
+
+ # For convenience, allow the rrset to be specified as a (name,
+ # rdataset) tuple as well as a proper rrset
+ if isinstance(rrset, tuple):
+ rrname = rrset[0]
+ rdataset = rrset[1]
+ else:
+ rrname = rrset.name
+ rdataset = rrset
+
+ if now is None:
+ now = time.time()
+ if rrsig.expiration < now:
+ raise ValidationFailure('expired')
+ if rrsig.inception > now:
+ raise ValidationFailure('not yet valid')
+
+ hash = _make_hash(rrsig.algorithm)
+
+ if _is_rsa(rrsig.algorithm):
+ keyptr = candidate_key.key
+ (bytes_,) = struct.unpack('!B', keyptr[0:1])
+ keyptr = keyptr[1:]
+ if bytes_ == 0:
+ (bytes_,) = struct.unpack('!H', keyptr[0:2])
+ keyptr = keyptr[2:]
+ rsa_e = keyptr[0:bytes_]
+ rsa_n = keyptr[bytes_:]
+ keylen = len(rsa_n) * 8
+ pubkey = Crypto.PublicKey.RSA.construct(
+ (Crypto.Util.number.bytes_to_long(rsa_n),
+ Crypto.Util.number.bytes_to_long(rsa_e)))
+ sig = (Crypto.Util.number.bytes_to_long(rrsig.signature),)
+ elif _is_dsa(rrsig.algorithm):
+ keyptr = candidate_key.key
+ (t,) = struct.unpack('!B', keyptr[0:1])
+ keyptr = keyptr[1:]
+ octets = 64 + t * 8
+ dsa_q = keyptr[0:20]
+ keyptr = keyptr[20:]
+ dsa_p = keyptr[0:octets]
+ keyptr = keyptr[octets:]
+ dsa_g = keyptr[0:octets]
+ keyptr = keyptr[octets:]
+ dsa_y = keyptr[0:octets]
+ pubkey = Crypto.PublicKey.DSA.construct(
+ (Crypto.Util.number.bytes_to_long(dsa_y),
+ Crypto.Util.number.bytes_to_long(dsa_g),
+ Crypto.Util.number.bytes_to_long(dsa_p),
+ Crypto.Util.number.bytes_to_long(dsa_q)))
+ (dsa_r, dsa_s) = struct.unpack('!20s20s', rrsig.signature[1:])
+ sig = (Crypto.Util.number.bytes_to_long(dsa_r),
+ Crypto.Util.number.bytes_to_long(dsa_s))
+ elif _is_ecdsa(rrsig.algorithm):
+ if rrsig.algorithm == ECDSAP256SHA256:
+ curve = ecdsa.curves.NIST256p
+ key_len = 32
+ elif rrsig.algorithm == ECDSAP384SHA384:
+ curve = ecdsa.curves.NIST384p
+ key_len = 48
+ else:
+ # shouldn't happen
+ raise ValidationFailure('unknown ECDSA curve')
+ keyptr = candidate_key.key
+ x = Crypto.Util.number.bytes_to_long(keyptr[0:key_len])
+ y = Crypto.Util.number.bytes_to_long(keyptr[key_len:key_len * 2])
+ assert ecdsa.ecdsa.point_is_valid(curve.generator, x, y)
+ point = ecdsa.ellipticcurve.Point(curve.curve, x, y, curve.order)
+ verifying_key = ecdsa.keys.VerifyingKey.from_public_point(point,
+ curve)
+ pubkey = ECKeyWrapper(verifying_key, key_len)
+ r = rrsig.signature[:key_len]
+ s = rrsig.signature[key_len:]
+ sig = ecdsa.ecdsa.Signature(Crypto.Util.number.bytes_to_long(r),
+ Crypto.Util.number.bytes_to_long(s))
+ else:
+ raise ValidationFailure('unknown algorithm %u' % rrsig.algorithm)
+
+ hash.update(_to_rdata(rrsig, origin)[:18])
+ hash.update(rrsig.signer.to_digestable(origin))
+
+ if rrsig.labels < len(rrname) - 1:
+ suffix = rrname.split(rrsig.labels + 1)[1]
+ rrname = dns.name.from_text('*', suffix)
+ rrnamebuf = rrname.to_digestable(origin)
+ rrfixed = struct.pack('!HHI', rdataset.rdtype, rdataset.rdclass,
+ rrsig.original_ttl)
+ rrlist = sorted(rdataset)
+ for rr in rrlist:
+ hash.update(rrnamebuf)
+ hash.update(rrfixed)
+ rrdata = rr.to_digestable(origin)
+ rrlen = struct.pack('!H', len(rrdata))
+ hash.update(rrlen)
+ hash.update(rrdata)
+
+ digest = hash.digest()
+
+ if _is_rsa(rrsig.algorithm):
+ # PKCS1 algorithm identifier goop
+ digest = _make_algorithm_id(rrsig.algorithm) + digest
+ padlen = keylen // 8 - len(digest) - 3
+ digest = struct.pack('!%dB' % (2 + padlen + 1),
+ *([0, 1] + [0xFF] * padlen + [0])) + digest
+ elif _is_dsa(rrsig.algorithm) or _is_ecdsa(rrsig.algorithm):
+ pass
+ else:
+ # Raise here for code clarity; this won't actually ever happen
+ # since if the algorithm is really unknown we'd already have
+ # raised an exception above
+ raise ValidationFailure('unknown algorithm %u' % rrsig.algorithm)
+
+ if pubkey.verify(digest, sig):
+ return
+ raise ValidationFailure('verify failure')
+
+
+def _validate(rrset, rrsigset, keys, origin=None, now=None):
+ """Validate an RRset
+
+ @param rrset: The RRset to validate
+ @type rrset: dns.rrset.RRset or (dns.name.Name, dns.rdataset.Rdataset)
+ tuple
+ @param rrsigset: The signature RRset
+ @type rrsigset: dns.rrset.RRset or (dns.name.Name, dns.rdataset.Rdataset)
+ tuple
+ @param keys: The key dictionary.
+ @type keys: a dictionary keyed by dns.name.Name with node or rdataset
+ values
+ @param origin: The origin to use for relative names
+ @type origin: dns.name.Name or None
+ @param now: The time to use when validating the signatures. The default
+ is the current time.
+ @type now: int
+ """
+
+ if isinstance(origin, string_types):
+ origin = dns.name.from_text(origin, dns.name.root)
+
+ if isinstance(rrset, tuple):
+ rrname = rrset[0]
+ else:
+ rrname = rrset.name
+
+ if isinstance(rrsigset, tuple):
+ rrsigname = rrsigset[0]
+ rrsigrdataset = rrsigset[1]
+ else:
+ rrsigname = rrsigset.name
+ rrsigrdataset = rrsigset
+
+ rrname = rrname.choose_relativity(origin)
+ rrsigname = rrname.choose_relativity(origin)
+ if rrname != rrsigname:
+ raise ValidationFailure("owner names do not match")
+
+ for rrsig in rrsigrdataset:
+ try:
+ _validate_rrsig(rrset, rrsig, keys, origin, now)
+ return
+ except ValidationFailure:
+ pass
+ raise ValidationFailure("no RRSIGs validated")
+
+
+def _need_pycrypto(*args, **kwargs):
+ raise NotImplementedError("DNSSEC validation requires pycrypto")
+
+try:
+ import Crypto.PublicKey.RSA
+ import Crypto.PublicKey.DSA
+ import Crypto.Util.number
+ validate = _validate
+ validate_rrsig = _validate_rrsig
+ _have_pycrypto = True
+except ImportError:
+ validate = _need_pycrypto
+ validate_rrsig = _need_pycrypto
+ _have_pycrypto = False
+
+try:
+ import ecdsa
+ import ecdsa.ecdsa
+ import ecdsa.ellipticcurve
+ import ecdsa.keys
+ _have_ecdsa = True
+
+ class ECKeyWrapper(object):
+
+ def __init__(self, key, key_len):
+ self.key = key
+ self.key_len = key_len
+
+ def verify(self, digest, sig):
+ diglong = Crypto.Util.number.bytes_to_long(digest)
+ return self.key.pubkey.verifies(diglong, sig)
+
+except ImportError:
+ _have_ecdsa = False
diff --git a/Contents/Libraries/Shared/dns/e164.py b/Contents/Libraries/Shared/dns/e164.py
new file mode 100644
index 000000000..99300730b
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/e164.py
@@ -0,0 +1,85 @@
+# Copyright (C) 2006, 2007, 2009, 2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS E.164 helpers
+
+@var public_enum_domain: The DNS public ENUM domain, e164.arpa.
+@type public_enum_domain: dns.name.Name object
+"""
+
+
+import dns.exception
+import dns.name
+import dns.resolver
+from ._compat import string_types
+
+public_enum_domain = dns.name.from_text('e164.arpa.')
+
+
+def from_e164(text, origin=public_enum_domain):
+ """Convert an E.164 number in textual form into a Name object whose
+ value is the ENUM domain name for that number.
+ @param text: an E.164 number in textual form.
+ @type text: str
+ @param origin: The domain in which the number should be constructed.
+ The default is e164.arpa.
+ @type origin: dns.name.Name object or None
+ @rtype: dns.name.Name object
+ """
+ parts = [d for d in text if d.isdigit()]
+ parts.reverse()
+ return dns.name.from_text('.'.join(parts), origin=origin)
+
+
+def to_e164(name, origin=public_enum_domain, want_plus_prefix=True):
+ """Convert an ENUM domain name into an E.164 number.
+ @param name: the ENUM domain name.
+ @type name: dns.name.Name object.
+ @param origin: A domain containing the ENUM domain name. The
+ name is relativized to this domain before being converted to text.
+ @type origin: dns.name.Name object or None
+ @param want_plus_prefix: if True, add a '+' to the beginning of the
+ returned number.
+ @rtype: str
+ """
+ if origin is not None:
+ name = name.relativize(origin)
+ dlabels = [d for d in name.labels if d.isdigit() and len(d) == 1]
+ if len(dlabels) != len(name.labels):
+ raise dns.exception.SyntaxError('non-digit labels in ENUM domain name')
+ dlabels.reverse()
+ text = b''.join(dlabels)
+ if want_plus_prefix:
+ text = b'+' + text
+ return text
+
+
+def query(number, domains, resolver=None):
+ """Look for NAPTR RRs for the specified number in the specified domains.
+
+ e.g. lookup('16505551212', ['e164.dnspython.org.', 'e164.arpa.'])
+ """
+ if resolver is None:
+ resolver = dns.resolver.get_default_resolver()
+ e_nx = dns.resolver.NXDOMAIN()
+ for domain in domains:
+ if isinstance(domain, string_types):
+ domain = dns.name.from_text(domain)
+ qname = dns.e164.from_e164(number, domain)
+ try:
+ return resolver.query(qname, 'NAPTR')
+ except dns.resolver.NXDOMAIN as e:
+ e_nx += e
+ raise e_nx
diff --git a/Contents/Libraries/Shared/dns/edns.py b/Contents/Libraries/Shared/dns/edns.py
new file mode 100644
index 000000000..8ac676bc6
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/edns.py
@@ -0,0 +1,150 @@
+# Copyright (C) 2009, 2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""EDNS Options"""
+
+NSID = 3
+
+
+class Option(object):
+
+ """Base class for all EDNS option types.
+ """
+
+ def __init__(self, otype):
+ """Initialize an option.
+ @param otype: The rdata type
+ @type otype: int
+ """
+ self.otype = otype
+
+ def to_wire(self, file):
+ """Convert an option to wire format.
+ """
+ raise NotImplementedError
+
+ @classmethod
+ def from_wire(cls, otype, wire, current, olen):
+ """Build an EDNS option object from wire format
+
+ @param otype: The option type
+ @type otype: int
+ @param wire: The wire-format message
+ @type wire: string
+ @param current: The offset in wire of the beginning of the rdata.
+ @type current: int
+ @param olen: The length of the wire-format option data
+ @type olen: int
+ @rtype: dns.edns.Option instance"""
+ raise NotImplementedError
+
+ def _cmp(self, other):
+ """Compare an EDNS option with another option of the same type.
+ Return < 0 if self < other, 0 if self == other,
+ and > 0 if self > other.
+ """
+ raise NotImplementedError
+
+ def __eq__(self, other):
+ if not isinstance(other, Option):
+ return False
+ if self.otype != other.otype:
+ return False
+ return self._cmp(other) == 0
+
+ def __ne__(self, other):
+ if not isinstance(other, Option):
+ return False
+ if self.otype != other.otype:
+ return False
+ return self._cmp(other) != 0
+
+ def __lt__(self, other):
+ if not isinstance(other, Option) or \
+ self.otype != other.otype:
+ return NotImplemented
+ return self._cmp(other) < 0
+
+ def __le__(self, other):
+ if not isinstance(other, Option) or \
+ self.otype != other.otype:
+ return NotImplemented
+ return self._cmp(other) <= 0
+
+ def __ge__(self, other):
+ if not isinstance(other, Option) or \
+ self.otype != other.otype:
+ return NotImplemented
+ return self._cmp(other) >= 0
+
+ def __gt__(self, other):
+ if not isinstance(other, Option) or \
+ self.otype != other.otype:
+ return NotImplemented
+ return self._cmp(other) > 0
+
+
+class GenericOption(Option):
+
+ """Generate Rdata Class
+
+ This class is used for EDNS option types for which we have no better
+ implementation.
+ """
+
+ def __init__(self, otype, data):
+ super(GenericOption, self).__init__(otype)
+ self.data = data
+
+ def to_wire(self, file):
+ file.write(self.data)
+
+ @classmethod
+ def from_wire(cls, otype, wire, current, olen):
+ return cls(otype, wire[current: current + olen])
+
+ def _cmp(self, other):
+ if self.data == other.data:
+ return 0
+ if self.data > other.data:
+ return 1
+ return -1
+
+_type_to_class = {
+}
+
+
+def get_option_class(otype):
+ cls = _type_to_class.get(otype)
+ if cls is None:
+ cls = GenericOption
+ return cls
+
+
+def option_from_wire(otype, wire, current, olen):
+ """Build an EDNS option object from wire format
+
+ @param otype: The option type
+ @type otype: int
+ @param wire: The wire-format message
+ @type wire: string
+ @param current: The offset in wire of the beginning of the rdata.
+ @type current: int
+ @param olen: The length of the wire-format option data
+ @type olen: int
+ @rtype: dns.edns.Option instance"""
+
+ cls = get_option_class(otype)
+ return cls.from_wire(otype, wire, current, olen)
diff --git a/Contents/Libraries/Shared/dns/entropy.py b/Contents/Libraries/Shared/dns/entropy.py
new file mode 100644
index 000000000..de7a70a51
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/entropy.py
@@ -0,0 +1,141 @@
+# Copyright (C) 2009, 2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import os
+import random
+import time
+from ._compat import long, binary_type
+try:
+ import threading as _threading
+except ImportError:
+ import dummy_threading as _threading
+
+
+class EntropyPool(object):
+
+ def __init__(self, seed=None):
+ self.pool_index = 0
+ self.digest = None
+ self.next_byte = 0
+ self.lock = _threading.Lock()
+ try:
+ import hashlib
+ self.hash = hashlib.sha1()
+ self.hash_len = 20
+ except ImportError:
+ try:
+ import sha
+ self.hash = sha.new()
+ self.hash_len = 20
+ except ImportError:
+ import md5 # pylint: disable=import-error
+ self.hash = md5.new()
+ self.hash_len = 16
+ self.pool = bytearray(b'\0' * self.hash_len)
+ if seed is not None:
+ self.stir(bytearray(seed))
+ self.seeded = True
+ self.seed_pid = os.getpid()
+ else:
+ self.seeded = False
+ self.seed_pid = 0
+
+ def stir(self, entropy, already_locked=False):
+ if not already_locked:
+ self.lock.acquire()
+ try:
+ for c in entropy:
+ if self.pool_index == self.hash_len:
+ self.pool_index = 0
+ b = c & 0xff
+ self.pool[self.pool_index] ^= b
+ self.pool_index += 1
+ finally:
+ if not already_locked:
+ self.lock.release()
+
+ def _maybe_seed(self):
+ if not self.seeded or self.seed_pid != os.getpid():
+ try:
+ seed = os.urandom(16)
+ except Exception:
+ try:
+ r = open('/dev/urandom', 'rb', 0)
+ try:
+ seed = r.read(16)
+ finally:
+ r.close()
+ except Exception:
+ seed = str(time.time())
+ self.seeded = True
+ self.seed_pid = os.getpid()
+ self.digest = None
+ seed = bytearray(seed)
+ self.stir(seed, True)
+
+ def random_8(self):
+ self.lock.acquire()
+ try:
+ self._maybe_seed()
+ if self.digest is None or self.next_byte == self.hash_len:
+ self.hash.update(binary_type(self.pool))
+ self.digest = bytearray(self.hash.digest())
+ self.stir(self.digest, True)
+ self.next_byte = 0
+ value = self.digest[self.next_byte]
+ self.next_byte += 1
+ finally:
+ self.lock.release()
+ return value
+
+ def random_16(self):
+ return self.random_8() * 256 + self.random_8()
+
+ def random_32(self):
+ return self.random_16() * 65536 + self.random_16()
+
+ def random_between(self, first, last):
+ size = last - first + 1
+ if size > long(4294967296):
+ raise ValueError('too big')
+ if size > 65536:
+ rand = self.random_32
+ max = long(4294967295)
+ elif size > 256:
+ rand = self.random_16
+ max = 65535
+ else:
+ rand = self.random_8
+ max = 255
+ return first + size * rand() // (max + 1)
+
+pool = EntropyPool()
+
+try:
+ system_random = random.SystemRandom()
+except Exception:
+ system_random = None
+
+def random_16():
+ if system_random is not None:
+ return system_random.randrange(0, 65536)
+ else:
+ return pool.random_16()
+
+def between(first, last):
+ if system_random is not None:
+ return system_random.randrange(first, last + 1)
+ else:
+ return pool.random_between(first, last)
diff --git a/Contents/Libraries/Shared/dns/exception.py b/Contents/Libraries/Shared/dns/exception.py
new file mode 100644
index 000000000..6c0b1f4b2
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/exception.py
@@ -0,0 +1,128 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Common DNS Exceptions."""
+
+
+class DNSException(Exception):
+
+ """Abstract base class shared by all dnspython exceptions.
+
+ It supports two basic modes of operation:
+
+ a) Old/compatible mode is used if __init__ was called with
+ empty **kwargs.
+ In compatible mode all *args are passed to standard Python Exception class
+ as before and all *args are printed by standard __str__ implementation.
+ Class variable msg (or doc string if msg is None) is returned from str()
+ if *args is empty.
+
+ b) New/parametrized mode is used if __init__ was called with
+ non-empty **kwargs.
+ In the new mode *args has to be empty and all kwargs has to exactly match
+ set in class variable self.supp_kwargs. All kwargs are stored inside
+ self.kwargs and used in new __str__ implementation to construct
+ formatted message based on self.fmt string.
+
+ In the simplest case it is enough to override supp_kwargs and fmt
+ class variables to get nice parametrized messages.
+ """
+ msg = None # non-parametrized message
+ supp_kwargs = set() # accepted parameters for _fmt_kwargs (sanity check)
+ fmt = None # message parametrized with results from _fmt_kwargs
+
+ def __init__(self, *args, **kwargs):
+ self._check_params(*args, **kwargs)
+ if kwargs:
+ self.kwargs = self._check_kwargs(**kwargs)
+ self.msg = str(self)
+ else:
+ self.kwargs = dict() # defined but empty for old mode exceptions
+ if self.msg is None:
+ # doc string is better implicit message than empty string
+ self.msg = self.__doc__
+ if args:
+ super(DNSException, self).__init__(*args)
+ else:
+ super(DNSException, self).__init__(self.msg)
+
+ def _check_params(self, *args, **kwargs):
+ """Old exceptions supported only args and not kwargs.
+
+ For sanity we do not allow to mix old and new behavior."""
+ if args or kwargs:
+ assert bool(args) != bool(kwargs), \
+ 'keyword arguments are mutually exclusive with positional args'
+
+ def _check_kwargs(self, **kwargs):
+ if kwargs:
+ assert set(kwargs.keys()) == self.supp_kwargs, \
+ 'following set of keyword args is required: %s' % (
+ self.supp_kwargs)
+ return kwargs
+
+ def _fmt_kwargs(self, **kwargs):
+ """Format kwargs before printing them.
+
+ Resulting dictionary has to have keys necessary for str.format call
+ on fmt class variable.
+ """
+ fmtargs = {}
+ for kw, data in kwargs.items():
+ if isinstance(data, (list, set)):
+ # convert list of to list of str()
+ fmtargs[kw] = list(map(str, data))
+ if len(fmtargs[kw]) == 1:
+ # remove list brackets [] from single-item lists
+ fmtargs[kw] = fmtargs[kw].pop()
+ else:
+ fmtargs[kw] = data
+ return fmtargs
+
+ def __str__(self):
+ if self.kwargs and self.fmt:
+ # provide custom message constructed from keyword arguments
+ fmtargs = self._fmt_kwargs(**self.kwargs)
+ return self.fmt.format(**fmtargs)
+ else:
+ # print *args directly in the same way as old DNSException
+ return super(DNSException, self).__str__()
+
+
+class FormError(DNSException):
+
+ """DNS message is malformed."""
+
+
+class SyntaxError(DNSException):
+
+ """Text input is malformed."""
+
+
+class UnexpectedEnd(SyntaxError):
+
+ """Text input ended unexpectedly."""
+
+
+class TooBig(DNSException):
+
+ """The DNS message is too big."""
+
+
+class Timeout(DNSException):
+
+ """The DNS operation timed out."""
+ supp_kwargs = set(['timeout'])
+ fmt = "The DNS operation timed out after {timeout} seconds"
diff --git a/Contents/Libraries/Shared/dns/flags.py b/Contents/Libraries/Shared/dns/flags.py
new file mode 100644
index 000000000..388d6aaa7
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/flags.py
@@ -0,0 +1,112 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Message Flags."""
+
+# Standard DNS flags
+
+QR = 0x8000
+AA = 0x0400
+TC = 0x0200
+RD = 0x0100
+RA = 0x0080
+AD = 0x0020
+CD = 0x0010
+
+# EDNS flags
+
+DO = 0x8000
+
+_by_text = {
+ 'QR': QR,
+ 'AA': AA,
+ 'TC': TC,
+ 'RD': RD,
+ 'RA': RA,
+ 'AD': AD,
+ 'CD': CD
+}
+
+_edns_by_text = {
+ 'DO': DO
+}
+
+
+# We construct the inverse mappings programmatically to ensure that we
+# cannot make any mistakes (e.g. omissions, cut-and-paste errors) that
+# would cause the mappings not to be true inverses.
+
+_by_value = dict((y, x) for x, y in _by_text.items())
+
+_edns_by_value = dict((y, x) for x, y in _edns_by_text.items())
+
+
+def _order_flags(table):
+ order = list(table.items())
+ order.sort()
+ order.reverse()
+ return order
+
+_flags_order = _order_flags(_by_value)
+
+_edns_flags_order = _order_flags(_edns_by_value)
+
+
+def _from_text(text, table):
+ flags = 0
+ tokens = text.split()
+ for t in tokens:
+ flags = flags | table[t.upper()]
+ return flags
+
+
+def _to_text(flags, table, order):
+ text_flags = []
+ for k, v in order:
+ if flags & k != 0:
+ text_flags.append(v)
+ return ' '.join(text_flags)
+
+
+def from_text(text):
+ """Convert a space-separated list of flag text values into a flags
+ value.
+ @rtype: int"""
+
+ return _from_text(text, _by_text)
+
+
+def to_text(flags):
+ """Convert a flags value into a space-separated list of flag text
+ values.
+ @rtype: string"""
+
+ return _to_text(flags, _by_value, _flags_order)
+
+
+def edns_from_text(text):
+ """Convert a space-separated list of EDNS flag text values into a EDNS
+ flags value.
+ @rtype: int"""
+
+ return _from_text(text, _edns_by_text)
+
+
+def edns_to_text(flags):
+ """Convert an EDNS flags value into a space-separated list of EDNS flag
+ text values.
+ @rtype: string"""
+
+ return _to_text(flags, _edns_by_value, _edns_flags_order)
diff --git a/Contents/Libraries/Shared/dns/grange.py b/Contents/Libraries/Shared/dns/grange.py
new file mode 100644
index 000000000..9ce9f67a0
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/grange.py
@@ -0,0 +1,69 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS GENERATE range conversion."""
+
+import dns
+
+
+def from_text(text):
+ """Convert the text form of a range in a GENERATE statement to an
+ integer.
+
+ @param text: the textual range
+ @type text: string
+ @return: The start, stop and step values.
+ @rtype: tuple
+ """
+ # TODO, figure out the bounds on start, stop and step.
+
+ step = 1
+ cur = ''
+ state = 0
+ # state 0 1 2 3 4
+ # x - y / z
+
+ if text and text[0] == '-':
+ raise dns.exception.SyntaxError("Start cannot be a negative number")
+
+ for c in text:
+ if c == '-' and state == 0:
+ start = int(cur)
+ cur = ''
+ state = 2
+ elif c == '/':
+ stop = int(cur)
+ cur = ''
+ state = 4
+ elif c.isdigit():
+ cur += c
+ else:
+ raise dns.exception.SyntaxError("Could not parse %s" % (c))
+
+ if state in (1, 3):
+ raise dns.exception.SyntaxError()
+
+ if state == 2:
+ stop = int(cur)
+
+ if state == 4:
+ step = int(cur)
+
+ assert step >= 1
+ assert start >= 0
+ assert start <= stop
+ # TODO, can start == stop?
+
+ return (start, stop, step)
diff --git a/Contents/Libraries/Shared/dns/hash.py b/Contents/Libraries/Shared/dns/hash.py
new file mode 100644
index 000000000..966838a17
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/hash.py
@@ -0,0 +1,31 @@
+# Copyright (C) 2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Hashing backwards compatibility wrapper"""
+
+import hashlib
+
+
+hashes = {}
+hashes['MD5'] = hashlib.md5
+hashes['SHA1'] = hashlib.sha1
+hashes['SHA224'] = hashlib.sha224
+hashes['SHA256'] = hashlib.sha256
+hashes['SHA384'] = hashlib.sha384
+hashes['SHA512'] = hashlib.sha512
+
+
+def get(algorithm):
+ return hashes[algorithm.upper()]
diff --git a/Contents/Libraries/Shared/dns/inet.py b/Contents/Libraries/Shared/dns/inet.py
new file mode 100644
index 000000000..73490a9d7
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/inet.py
@@ -0,0 +1,111 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Generic Internet address helper functions."""
+
+import socket
+
+import dns.ipv4
+import dns.ipv6
+
+
+# We assume that AF_INET is always defined.
+
+AF_INET = socket.AF_INET
+
+# AF_INET6 might not be defined in the socket module, but we need it.
+# We'll try to use the socket module's value, and if it doesn't work,
+# we'll use our own value.
+
+try:
+ AF_INET6 = socket.AF_INET6
+except AttributeError:
+ AF_INET6 = 9999
+
+
+def inet_pton(family, text):
+ """Convert the textual form of a network address into its binary form.
+
+ @param family: the address family
+ @type family: int
+ @param text: the textual address
+ @type text: string
+ @raises NotImplementedError: the address family specified is not
+ implemented.
+ @rtype: string
+ """
+
+ if family == AF_INET:
+ return dns.ipv4.inet_aton(text)
+ elif family == AF_INET6:
+ return dns.ipv6.inet_aton(text)
+ else:
+ raise NotImplementedError
+
+
+def inet_ntop(family, address):
+ """Convert the binary form of a network address into its textual form.
+
+ @param family: the address family
+ @type family: int
+ @param address: the binary address
+ @type address: string
+ @raises NotImplementedError: the address family specified is not
+ implemented.
+ @rtype: string
+ """
+ if family == AF_INET:
+ return dns.ipv4.inet_ntoa(address)
+ elif family == AF_INET6:
+ return dns.ipv6.inet_ntoa(address)
+ else:
+ raise NotImplementedError
+
+
+def af_for_address(text):
+ """Determine the address family of a textual-form network address.
+
+ @param text: the textual address
+ @type text: string
+ @raises ValueError: the address family cannot be determined from the input.
+ @rtype: int
+ """
+ try:
+ dns.ipv4.inet_aton(text)
+ return AF_INET
+ except Exception:
+ try:
+ dns.ipv6.inet_aton(text)
+ return AF_INET6
+ except:
+ raise ValueError
+
+
+def is_multicast(text):
+ """Is the textual-form network address a multicast address?
+
+ @param text: the textual address
+ @raises ValueError: the address family cannot be determined from the input.
+ @rtype: bool
+ """
+ try:
+ first = ord(dns.ipv4.inet_aton(text)[0])
+ return first >= 224 and first <= 239
+ except Exception:
+ try:
+ first = ord(dns.ipv6.inet_aton(text)[0])
+ return first == 255
+ except Exception:
+ raise ValueError
diff --git a/Contents/Libraries/Shared/dns/ipv4.py b/Contents/Libraries/Shared/dns/ipv4.py
new file mode 100644
index 000000000..3fef282b6
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/ipv4.py
@@ -0,0 +1,59 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""IPv4 helper functions."""
+
+import struct
+
+import dns.exception
+from ._compat import binary_type
+
+def inet_ntoa(address):
+ """Convert an IPv4 address in network form to text form.
+
+ @param address: The IPv4 address
+ @type address: string
+ @returns: string
+ """
+ if len(address) != 4:
+ raise dns.exception.SyntaxError
+ if not isinstance(address, bytearray):
+ address = bytearray(address)
+ return (u'%u.%u.%u.%u' % (address[0], address[1],
+ address[2], address[3])).encode()
+
+def inet_aton(text):
+ """Convert an IPv4 address in text form to network form.
+
+ @param text: The IPv4 address
+ @type text: string
+ @returns: string
+ """
+ if not isinstance(text, binary_type):
+ text = text.encode()
+ parts = text.split(b'.')
+ if len(parts) != 4:
+ raise dns.exception.SyntaxError
+ for part in parts:
+ if not part.isdigit():
+ raise dns.exception.SyntaxError
+ if len(part) > 1 and part[0] == '0':
+ # No leading zeros
+ raise dns.exception.SyntaxError
+ try:
+ bytes = [int(part) for part in parts]
+ return struct.pack('BBBB', *bytes)
+ except:
+ raise dns.exception.SyntaxError
diff --git a/Contents/Libraries/Shared/dns/ipv6.py b/Contents/Libraries/Shared/dns/ipv6.py
new file mode 100644
index 000000000..cbaee8edc
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/ipv6.py
@@ -0,0 +1,172 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""IPv6 helper functions."""
+
+import re
+import binascii
+
+import dns.exception
+import dns.ipv4
+from ._compat import xrange, binary_type, maybe_decode
+
+_leading_zero = re.compile(b'0+([0-9a-f]+)')
+
+def inet_ntoa(address):
+ """Convert a network format IPv6 address into text.
+
+ @param address: the binary address
+ @type address: string
+ @rtype: string
+ @raises ValueError: the address isn't 16 bytes long
+ """
+
+ if len(address) != 16:
+ raise ValueError("IPv6 addresses are 16 bytes long")
+ hex = binascii.hexlify(address)
+ chunks = []
+ i = 0
+ l = len(hex)
+ while i < l:
+ chunk = hex[i : i + 4]
+ # strip leading zeros. we do this with an re instead of
+ # with lstrip() because lstrip() didn't support chars until
+ # python 2.2.2
+ m = _leading_zero.match(chunk)
+ if not m is None:
+ chunk = m.group(1)
+ chunks.append(chunk)
+ i += 4
+ #
+ # Compress the longest subsequence of 0-value chunks to ::
+ #
+ best_start = 0
+ best_len = 0
+ start = -1
+ last_was_zero = False
+ for i in xrange(8):
+ if chunks[i] != b'0':
+ if last_was_zero:
+ end = i
+ current_len = end - start
+ if current_len > best_len:
+ best_start = start
+ best_len = current_len
+ last_was_zero = False
+ elif not last_was_zero:
+ start = i
+ last_was_zero = True
+ if last_was_zero:
+ end = 8
+ current_len = end - start
+ if current_len > best_len:
+ best_start = start
+ best_len = current_len
+ if best_len > 1:
+ if best_start == 0 and \
+ (best_len == 6 or
+ best_len == 5 and chunks[5] == b'ffff'):
+ # We have an embedded IPv4 address
+ if best_len == 6:
+ prefix = b'::'
+ else:
+ prefix = b'::ffff:'
+ hex = prefix + dns.ipv4.inet_ntoa(address[12:])
+ else:
+ hex = b':'.join(chunks[:best_start]) + b'::' + \
+ b':'.join(chunks[best_start + best_len:])
+ else:
+ hex = b':'.join(chunks)
+ return maybe_decode(hex)
+
+_v4_ending = re.compile(b'(.*):(\d+\.\d+\.\d+\.\d+)$')
+_colon_colon_start = re.compile(b'::.*')
+_colon_colon_end = re.compile(b'.*::$')
+
+def inet_aton(text):
+ """Convert a text format IPv6 address into network format.
+
+ @param text: the textual address
+ @type text: string
+ @rtype: string
+ @raises dns.exception.SyntaxError: the text was not properly formatted
+ """
+
+ #
+ # Our aim here is not something fast; we just want something that works.
+ #
+ if not isinstance(text, binary_type):
+ text = text.encode()
+
+ if text == b'::':
+ text = b'0::'
+ #
+ # Get rid of the icky dot-quad syntax if we have it.
+ #
+ m = _v4_ending.match(text)
+ if not m is None:
+ b = bytearray(dns.ipv4.inet_aton(m.group(2)))
+ text = (u"%s:%02x%02x:%02x%02x" % (m.group(1).decode(), b[0], b[1],
+ b[2], b[3])).encode()
+ #
+ # Try to turn '::' into ':'; if no match try to
+ # turn '::' into ':'
+ #
+ m = _colon_colon_start.match(text)
+ if not m is None:
+ text = text[1:]
+ else:
+ m = _colon_colon_end.match(text)
+ if not m is None:
+ text = text[:-1]
+ #
+ # Now canonicalize into 8 chunks of 4 hex digits each
+ #
+ chunks = text.split(b':')
+ l = len(chunks)
+ if l > 8:
+ raise dns.exception.SyntaxError
+ seen_empty = False
+ canonical = []
+ for c in chunks:
+ if c == b'':
+ if seen_empty:
+ raise dns.exception.SyntaxError
+ seen_empty = True
+ for i in xrange(0, 8 - l + 1):
+ canonical.append(b'0000')
+ else:
+ lc = len(c)
+ if lc > 4:
+ raise dns.exception.SyntaxError
+ if lc != 4:
+ c = (b'0' * (4 - lc)) + c
+ canonical.append(c)
+ if l < 8 and not seen_empty:
+ raise dns.exception.SyntaxError
+ text = b''.join(canonical)
+
+ #
+ # Finally we can go to binary.
+ #
+ try:
+ return binascii.unhexlify(text)
+ except (binascii.Error, TypeError):
+ raise dns.exception.SyntaxError
+
+_mapped_prefix = b'\x00' * 10 + b'\xff\xff'
+
+def is_mapped(address):
+ return address.startswith(_mapped_prefix)
diff --git a/Contents/Libraries/Shared/dns/message.py b/Contents/Libraries/Shared/dns/message.py
new file mode 100644
index 000000000..a0df18e67
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/message.py
@@ -0,0 +1,1152 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Messages"""
+
+from __future__ import absolute_import
+
+from io import StringIO
+import struct
+import time
+
+import dns.edns
+import dns.exception
+import dns.flags
+import dns.name
+import dns.opcode
+import dns.entropy
+import dns.rcode
+import dns.rdata
+import dns.rdataclass
+import dns.rdatatype
+import dns.rrset
+import dns.renderer
+import dns.tsig
+import dns.wiredata
+
+from ._compat import long, xrange, string_types
+
+
+class ShortHeader(dns.exception.FormError):
+
+ """The DNS packet passed to from_wire() is too short."""
+
+
+class TrailingJunk(dns.exception.FormError):
+
+ """The DNS packet passed to from_wire() has extra junk at the end of it."""
+
+
+class UnknownHeaderField(dns.exception.DNSException):
+
+ """The header field name was not recognized when converting from text
+ into a message."""
+
+
+class BadEDNS(dns.exception.FormError):
+
+ """OPT record occurred somewhere other than the start of
+ the additional data section."""
+
+
+class BadTSIG(dns.exception.FormError):
+
+ """A TSIG record occurred somewhere other than the end of
+ the additional data section."""
+
+
+class UnknownTSIGKey(dns.exception.DNSException):
+
+ """A TSIG with an unknown key was received."""
+
+
+class Message(object):
+
+ """A DNS message.
+
+ @ivar id: The query id; the default is a randomly chosen id.
+ @type id: int
+ @ivar flags: The DNS flags of the message. @see: RFC 1035 for an
+ explanation of these flags.
+ @type flags: int
+ @ivar question: The question section.
+ @type question: list of dns.rrset.RRset objects
+ @ivar answer: The answer section.
+ @type answer: list of dns.rrset.RRset objects
+ @ivar authority: The authority section.
+ @type authority: list of dns.rrset.RRset objects
+ @ivar additional: The additional data section.
+ @type additional: list of dns.rrset.RRset objects
+ @ivar edns: The EDNS level to use. The default is -1, no Edns.
+ @type edns: int
+ @ivar ednsflags: The EDNS flags
+ @type ednsflags: long
+ @ivar payload: The EDNS payload size. The default is 0.
+ @type payload: int
+ @ivar options: The EDNS options
+ @type options: list of dns.edns.Option objects
+ @ivar request_payload: The associated request's EDNS payload size.
+ @type request_payload: int
+ @ivar keyring: The TSIG keyring to use. The default is None.
+ @type keyring: dict
+ @ivar keyname: The TSIG keyname to use. The default is None.
+ @type keyname: dns.name.Name object
+ @ivar keyalgorithm: The TSIG algorithm to use; defaults to
+ dns.tsig.default_algorithm. Constants for TSIG algorithms are defined
+ in dns.tsig, and the currently implemented algorithms are
+ HMAC_MD5, HMAC_SHA1, HMAC_SHA224, HMAC_SHA256, HMAC_SHA384, and
+ HMAC_SHA512.
+ @type keyalgorithm: string
+ @ivar request_mac: The TSIG MAC of the request message associated with
+ this message; used when validating TSIG signatures. @see: RFC 2845 for
+ more information on TSIG fields.
+ @type request_mac: string
+ @ivar fudge: TSIG time fudge; default is 300 seconds.
+ @type fudge: int
+ @ivar original_id: TSIG original id; defaults to the message's id
+ @type original_id: int
+ @ivar tsig_error: TSIG error code; default is 0.
+ @type tsig_error: int
+ @ivar other_data: TSIG other data.
+ @type other_data: string
+ @ivar mac: The TSIG MAC for this message.
+ @type mac: string
+ @ivar xfr: Is the message being used to contain the results of a DNS
+ zone transfer? The default is False.
+ @type xfr: bool
+ @ivar origin: The origin of the zone in messages which are used for
+ zone transfers or for DNS dynamic updates. The default is None.
+ @type origin: dns.name.Name object
+ @ivar tsig_ctx: The TSIG signature context associated with this
+ message. The default is None.
+ @type tsig_ctx: hmac.HMAC object
+ @ivar had_tsig: Did the message decoded from wire format have a TSIG
+ signature?
+ @type had_tsig: bool
+ @ivar multi: Is this message part of a multi-message sequence? The
+ default is false. This variable is used when validating TSIG signatures
+ on messages which are part of a zone transfer.
+ @type multi: bool
+ @ivar first: Is this message standalone, or the first of a multi
+ message sequence? This variable is used when validating TSIG signatures
+ on messages which are part of a zone transfer.
+ @type first: bool
+ @ivar index: An index of rrsets in the message. The index key is
+ (section, name, rdclass, rdtype, covers, deleting). Indexing can be
+ disabled by setting the index to None.
+ @type index: dict
+ """
+
+ def __init__(self, id=None):
+ if id is None:
+ self.id = dns.entropy.random_16()
+ else:
+ self.id = id
+ self.flags = 0
+ self.question = []
+ self.answer = []
+ self.authority = []
+ self.additional = []
+ self.edns = -1
+ self.ednsflags = 0
+ self.payload = 0
+ self.options = []
+ self.request_payload = 0
+ self.keyring = None
+ self.keyname = None
+ self.keyalgorithm = dns.tsig.default_algorithm
+ self.request_mac = ''
+ self.other_data = ''
+ self.tsig_error = 0
+ self.fudge = 300
+ self.original_id = self.id
+ self.mac = ''
+ self.xfr = False
+ self.origin = None
+ self.tsig_ctx = None
+ self.had_tsig = False
+ self.multi = False
+ self.first = True
+ self.index = {}
+
+ def __repr__(self):
+ return ''
+
+ def __str__(self):
+ return self.to_text()
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ """Convert the message to text.
+
+ The I{origin}, I{relativize}, and any other keyword
+ arguments are passed to the rrset to_wire() method.
+
+ @rtype: string
+ """
+
+ s = StringIO()
+ s.write(u'id %d\n' % self.id)
+ s.write(u'opcode %s\n' %
+ dns.opcode.to_text(dns.opcode.from_flags(self.flags)))
+ rc = dns.rcode.from_flags(self.flags, self.ednsflags)
+ s.write(u'rcode %s\n' % dns.rcode.to_text(rc))
+ s.write(u'flags %s\n' % dns.flags.to_text(self.flags))
+ if self.edns >= 0:
+ s.write(u'edns %s\n' % self.edns)
+ if self.ednsflags != 0:
+ s.write(u'eflags %s\n' %
+ dns.flags.edns_to_text(self.ednsflags))
+ s.write(u'payload %d\n' % self.payload)
+ is_update = dns.opcode.is_update(self.flags)
+ if is_update:
+ s.write(u';ZONE\n')
+ else:
+ s.write(u';QUESTION\n')
+ for rrset in self.question:
+ s.write(rrset.to_text(origin, relativize, **kw))
+ s.write(u'\n')
+ if is_update:
+ s.write(u';PREREQ\n')
+ else:
+ s.write(u';ANSWER\n')
+ for rrset in self.answer:
+ s.write(rrset.to_text(origin, relativize, **kw))
+ s.write(u'\n')
+ if is_update:
+ s.write(u';UPDATE\n')
+ else:
+ s.write(u';AUTHORITY\n')
+ for rrset in self.authority:
+ s.write(rrset.to_text(origin, relativize, **kw))
+ s.write(u'\n')
+ s.write(u';ADDITIONAL\n')
+ for rrset in self.additional:
+ s.write(rrset.to_text(origin, relativize, **kw))
+ s.write(u'\n')
+ #
+ # We strip off the final \n so the caller can print the result without
+ # doing weird things to get around eccentricities in Python print
+ # formatting
+ #
+ return s.getvalue()[:-1]
+
+ def __eq__(self, other):
+ """Two messages are equal if they have the same content in the
+ header, question, answer, and authority sections.
+ @rtype: bool"""
+ if not isinstance(other, Message):
+ return False
+ if self.id != other.id:
+ return False
+ if self.flags != other.flags:
+ return False
+ for n in self.question:
+ if n not in other.question:
+ return False
+ for n in other.question:
+ if n not in self.question:
+ return False
+ for n in self.answer:
+ if n not in other.answer:
+ return False
+ for n in other.answer:
+ if n not in self.answer:
+ return False
+ for n in self.authority:
+ if n not in other.authority:
+ return False
+ for n in other.authority:
+ if n not in self.authority:
+ return False
+ return True
+
+ def __ne__(self, other):
+ """Are two messages not equal?
+ @rtype: bool"""
+ return not self.__eq__(other)
+
+ def is_response(self, other):
+ """Is other a response to self?
+ @rtype: bool"""
+ if other.flags & dns.flags.QR == 0 or \
+ self.id != other.id or \
+ dns.opcode.from_flags(self.flags) != \
+ dns.opcode.from_flags(other.flags):
+ return False
+ if dns.rcode.from_flags(other.flags, other.ednsflags) != \
+ dns.rcode.NOERROR:
+ return True
+ if dns.opcode.is_update(self.flags):
+ return True
+ for n in self.question:
+ if n not in other.question:
+ return False
+ for n in other.question:
+ if n not in self.question:
+ return False
+ return True
+
+ def section_number(self, section):
+ if section is self.question:
+ return 0
+ elif section is self.answer:
+ return 1
+ elif section is self.authority:
+ return 2
+ elif section is self.additional:
+ return 3
+ else:
+ raise ValueError('unknown section')
+
+ def find_rrset(self, section, name, rdclass, rdtype,
+ covers=dns.rdatatype.NONE, deleting=None, create=False,
+ force_unique=False):
+ """Find the RRset with the given attributes in the specified section.
+
+ @param section: the section of the message to look in, e.g.
+ self.answer.
+ @type section: list of dns.rrset.RRset objects
+ @param name: the name of the RRset
+ @type name: dns.name.Name object
+ @param rdclass: the class of the RRset
+ @type rdclass: int
+ @param rdtype: the type of the RRset
+ @type rdtype: int
+ @param covers: the covers value of the RRset
+ @type covers: int
+ @param deleting: the deleting value of the RRset
+ @type deleting: int
+ @param create: If True, create the RRset if it is not found.
+ The created RRset is appended to I{section}.
+ @type create: bool
+ @param force_unique: If True and create is also True, create a
+ new RRset regardless of whether a matching RRset exists already.
+ @type force_unique: bool
+ @raises KeyError: the RRset was not found and create was False
+ @rtype: dns.rrset.RRset object"""
+
+ key = (self.section_number(section),
+ name, rdclass, rdtype, covers, deleting)
+ if not force_unique:
+ if self.index is not None:
+ rrset = self.index.get(key)
+ if rrset is not None:
+ return rrset
+ else:
+ for rrset in section:
+ if rrset.match(name, rdclass, rdtype, covers, deleting):
+ return rrset
+ if not create:
+ raise KeyError
+ rrset = dns.rrset.RRset(name, rdclass, rdtype, covers, deleting)
+ section.append(rrset)
+ if self.index is not None:
+ self.index[key] = rrset
+ return rrset
+
+ def get_rrset(self, section, name, rdclass, rdtype,
+ covers=dns.rdatatype.NONE, deleting=None, create=False,
+ force_unique=False):
+ """Get the RRset with the given attributes in the specified section.
+
+ If the RRset is not found, None is returned.
+
+ @param section: the section of the message to look in, e.g.
+ self.answer.
+ @type section: list of dns.rrset.RRset objects
+ @param name: the name of the RRset
+ @type name: dns.name.Name object
+ @param rdclass: the class of the RRset
+ @type rdclass: int
+ @param rdtype: the type of the RRset
+ @type rdtype: int
+ @param covers: the covers value of the RRset
+ @type covers: int
+ @param deleting: the deleting value of the RRset
+ @type deleting: int
+ @param create: If True, create the RRset if it is not found.
+ The created RRset is appended to I{section}.
+ @type create: bool
+ @param force_unique: If True and create is also True, create a
+ new RRset regardless of whether a matching RRset exists already.
+ @type force_unique: bool
+ @rtype: dns.rrset.RRset object or None"""
+
+ try:
+ rrset = self.find_rrset(section, name, rdclass, rdtype, covers,
+ deleting, create, force_unique)
+ except KeyError:
+ rrset = None
+ return rrset
+
+ def to_wire(self, origin=None, max_size=0, **kw):
+ """Return a string containing the message in DNS compressed wire
+ format.
+
+ Additional keyword arguments are passed to the rrset to_wire()
+ method.
+
+ @param origin: The origin to be appended to any relative names.
+ @type origin: dns.name.Name object
+ @param max_size: The maximum size of the wire format output; default
+ is 0, which means 'the message's request payload, if nonzero, or
+ 65536'.
+ @type max_size: int
+ @raises dns.exception.TooBig: max_size was exceeded
+ @rtype: string
+ """
+
+ if max_size == 0:
+ if self.request_payload != 0:
+ max_size = self.request_payload
+ else:
+ max_size = 65535
+ if max_size < 512:
+ max_size = 512
+ elif max_size > 65535:
+ max_size = 65535
+ r = dns.renderer.Renderer(self.id, self.flags, max_size, origin)
+ for rrset in self.question:
+ r.add_question(rrset.name, rrset.rdtype, rrset.rdclass)
+ for rrset in self.answer:
+ r.add_rrset(dns.renderer.ANSWER, rrset, **kw)
+ for rrset in self.authority:
+ r.add_rrset(dns.renderer.AUTHORITY, rrset, **kw)
+ if self.edns >= 0:
+ r.add_edns(self.edns, self.ednsflags, self.payload, self.options)
+ for rrset in self.additional:
+ r.add_rrset(dns.renderer.ADDITIONAL, rrset, **kw)
+ r.write_header()
+ if self.keyname is not None:
+ r.add_tsig(self.keyname, self.keyring[self.keyname],
+ self.fudge, self.original_id, self.tsig_error,
+ self.other_data, self.request_mac,
+ self.keyalgorithm)
+ self.mac = r.mac
+ return r.get_wire()
+
+ def use_tsig(self, keyring, keyname=None, fudge=300,
+ original_id=None, tsig_error=0, other_data='',
+ algorithm=dns.tsig.default_algorithm):
+ """When sending, a TSIG signature using the specified keyring
+ and keyname should be added.
+
+ @param keyring: The TSIG keyring to use; defaults to None.
+ @type keyring: dict
+ @param keyname: The name of the TSIG key to use; defaults to None.
+ The key must be defined in the keyring. If a keyring is specified
+ but a keyname is not, then the key used will be the first key in the
+ keyring. Note that the order of keys in a dictionary is not defined,
+ so applications should supply a keyname when a keyring is used, unless
+ they know the keyring contains only one key.
+ @type keyname: dns.name.Name or string
+ @param fudge: TSIG time fudge; default is 300 seconds.
+ @type fudge: int
+ @param original_id: TSIG original id; defaults to the message's id
+ @type original_id: int
+ @param tsig_error: TSIG error code; default is 0.
+ @type tsig_error: int
+ @param other_data: TSIG other data.
+ @type other_data: string
+ @param algorithm: The TSIG algorithm to use; defaults to
+ dns.tsig.default_algorithm
+ """
+
+ self.keyring = keyring
+ if keyname is None:
+ self.keyname = list(self.keyring.keys())[0]
+ else:
+ if isinstance(keyname, string_types):
+ keyname = dns.name.from_text(keyname)
+ self.keyname = keyname
+ self.keyalgorithm = algorithm
+ self.fudge = fudge
+ if original_id is None:
+ self.original_id = self.id
+ else:
+ self.original_id = original_id
+ self.tsig_error = tsig_error
+ self.other_data = other_data
+
+ def use_edns(self, edns=0, ednsflags=0, payload=1280, request_payload=None,
+ options=None):
+ """Configure EDNS behavior.
+ @param edns: The EDNS level to use. Specifying None, False, or -1
+ means 'do not use EDNS', and in this case the other parameters are
+ ignored. Specifying True is equivalent to specifying 0, i.e. 'use
+ EDNS0'.
+ @type edns: int or bool or None
+ @param ednsflags: EDNS flag values.
+ @type ednsflags: int
+ @param payload: The EDNS sender's payload field, which is the maximum
+ size of UDP datagram the sender can handle.
+ @type payload: int
+ @param request_payload: The EDNS payload size to use when sending
+ this message. If not specified, defaults to the value of payload.
+ @type request_payload: int or None
+ @param options: The EDNS options
+ @type options: None or list of dns.edns.Option objects
+ @see: RFC 2671
+ """
+ if edns is None or edns is False:
+ edns = -1
+ if edns is True:
+ edns = 0
+ if request_payload is None:
+ request_payload = payload
+ if edns < 0:
+ ednsflags = 0
+ payload = 0
+ request_payload = 0
+ options = []
+ else:
+ # make sure the EDNS version in ednsflags agrees with edns
+ ednsflags &= long(0xFF00FFFF)
+ ednsflags |= (edns << 16)
+ if options is None:
+ options = []
+ self.edns = edns
+ self.ednsflags = ednsflags
+ self.payload = payload
+ self.options = options
+ self.request_payload = request_payload
+
+ def want_dnssec(self, wanted=True):
+ """Enable or disable 'DNSSEC desired' flag in requests.
+ @param wanted: Is DNSSEC desired? If True, EDNS is enabled if
+ required, and then the DO bit is set. If False, the DO bit is
+ cleared if EDNS is enabled.
+ @type wanted: bool
+ """
+ if wanted:
+ if self.edns < 0:
+ self.use_edns()
+ self.ednsflags |= dns.flags.DO
+ elif self.edns >= 0:
+ self.ednsflags &= ~dns.flags.DO
+
+ def rcode(self):
+ """Return the rcode.
+ @rtype: int
+ """
+ return dns.rcode.from_flags(self.flags, self.ednsflags)
+
+ def set_rcode(self, rcode):
+ """Set the rcode.
+ @param rcode: the rcode
+ @type rcode: int
+ """
+ (value, evalue) = dns.rcode.to_flags(rcode)
+ self.flags &= 0xFFF0
+ self.flags |= value
+ self.ednsflags &= long(0x00FFFFFF)
+ self.ednsflags |= evalue
+ if self.ednsflags != 0 and self.edns < 0:
+ self.edns = 0
+
+ def opcode(self):
+ """Return the opcode.
+ @rtype: int
+ """
+ return dns.opcode.from_flags(self.flags)
+
+ def set_opcode(self, opcode):
+ """Set the opcode.
+ @param opcode: the opcode
+ @type opcode: int
+ """
+ self.flags &= 0x87FF
+ self.flags |= dns.opcode.to_flags(opcode)
+
+
+class _WireReader(object):
+
+ """Wire format reader.
+
+ @ivar wire: the wire-format message.
+ @type wire: string
+ @ivar message: The message object being built
+ @type message: dns.message.Message object
+ @ivar current: When building a message object from wire format, this
+ variable contains the offset from the beginning of wire of the next octet
+ to be read.
+ @type current: int
+ @ivar updating: Is the message a dynamic update?
+ @type updating: bool
+ @ivar one_rr_per_rrset: Put each RR into its own RRset?
+ @type one_rr_per_rrset: bool
+ @ivar ignore_trailing: Ignore trailing junk at end of request?
+ @type ignore_trailing: bool
+ @ivar zone_rdclass: The class of the zone in messages which are
+ DNS dynamic updates.
+ @type zone_rdclass: int
+ """
+
+ def __init__(self, wire, message, question_only=False,
+ one_rr_per_rrset=False, ignore_trailing=False):
+ self.wire = dns.wiredata.maybe_wrap(wire)
+ self.message = message
+ self.current = 0
+ self.updating = False
+ self.zone_rdclass = dns.rdataclass.IN
+ self.question_only = question_only
+ self.one_rr_per_rrset = one_rr_per_rrset
+ self.ignore_trailing = ignore_trailing
+
+ def _get_question(self, qcount):
+ """Read the next I{qcount} records from the wire data and add them to
+ the question section.
+ @param qcount: the number of questions in the message
+ @type qcount: int"""
+
+ if self.updating and qcount > 1:
+ raise dns.exception.FormError
+
+ for i in xrange(0, qcount):
+ (qname, used) = dns.name.from_wire(self.wire, self.current)
+ if self.message.origin is not None:
+ qname = qname.relativize(self.message.origin)
+ self.current = self.current + used
+ (rdtype, rdclass) = \
+ struct.unpack('!HH',
+ self.wire[self.current:self.current + 4])
+ self.current = self.current + 4
+ self.message.find_rrset(self.message.question, qname,
+ rdclass, rdtype, create=True,
+ force_unique=True)
+ if self.updating:
+ self.zone_rdclass = rdclass
+
+ def _get_section(self, section, count):
+ """Read the next I{count} records from the wire data and add them to
+ the specified section.
+ @param section: the section of the message to which to add records
+ @type section: list of dns.rrset.RRset objects
+ @param count: the number of records to read
+ @type count: int"""
+
+ if self.updating or self.one_rr_per_rrset:
+ force_unique = True
+ else:
+ force_unique = False
+ seen_opt = False
+ for i in xrange(0, count):
+ rr_start = self.current
+ (name, used) = dns.name.from_wire(self.wire, self.current)
+ absolute_name = name
+ if self.message.origin is not None:
+ name = name.relativize(self.message.origin)
+ self.current = self.current + used
+ (rdtype, rdclass, ttl, rdlen) = \
+ struct.unpack('!HHIH',
+ self.wire[self.current:self.current + 10])
+ self.current = self.current + 10
+ if rdtype == dns.rdatatype.OPT:
+ if section is not self.message.additional or seen_opt:
+ raise BadEDNS
+ self.message.payload = rdclass
+ self.message.ednsflags = ttl
+ self.message.edns = (ttl & 0xff0000) >> 16
+ self.message.options = []
+ current = self.current
+ optslen = rdlen
+ while optslen > 0:
+ (otype, olen) = \
+ struct.unpack('!HH',
+ self.wire[current:current + 4])
+ current = current + 4
+ opt = dns.edns.option_from_wire(
+ otype, self.wire, current, olen)
+ self.message.options.append(opt)
+ current = current + olen
+ optslen = optslen - 4 - olen
+ seen_opt = True
+ elif rdtype == dns.rdatatype.TSIG:
+ if not (section is self.message.additional and
+ i == (count - 1)):
+ raise BadTSIG
+ if self.message.keyring is None:
+ raise UnknownTSIGKey('got signed message without keyring')
+ secret = self.message.keyring.get(absolute_name)
+ if secret is None:
+ raise UnknownTSIGKey("key '%s' unknown" % name)
+ self.message.keyname = absolute_name
+ (self.message.keyalgorithm, self.message.mac) = \
+ dns.tsig.get_algorithm_and_mac(self.wire, self.current,
+ rdlen)
+ self.message.tsig_ctx = \
+ dns.tsig.validate(self.wire,
+ absolute_name,
+ secret,
+ int(time.time()),
+ self.message.request_mac,
+ rr_start,
+ self.current,
+ rdlen,
+ self.message.tsig_ctx,
+ self.message.multi,
+ self.message.first)
+ self.message.had_tsig = True
+ else:
+ if ttl < 0:
+ ttl = 0
+ if self.updating and \
+ (rdclass == dns.rdataclass.ANY or
+ rdclass == dns.rdataclass.NONE):
+ deleting = rdclass
+ rdclass = self.zone_rdclass
+ else:
+ deleting = None
+ if deleting == dns.rdataclass.ANY or \
+ (deleting == dns.rdataclass.NONE and
+ section is self.message.answer):
+ covers = dns.rdatatype.NONE
+ rd = None
+ else:
+ rd = dns.rdata.from_wire(rdclass, rdtype, self.wire,
+ self.current, rdlen,
+ self.message.origin)
+ covers = rd.covers()
+ if self.message.xfr and rdtype == dns.rdatatype.SOA:
+ force_unique = True
+ rrset = self.message.find_rrset(section, name,
+ rdclass, rdtype, covers,
+ deleting, True, force_unique)
+ if rd is not None:
+ rrset.add(rd, ttl)
+ self.current = self.current + rdlen
+
+ def read(self):
+ """Read a wire format DNS message and build a dns.message.Message
+ object."""
+
+ l = len(self.wire)
+ if l < 12:
+ raise ShortHeader
+ (self.message.id, self.message.flags, qcount, ancount,
+ aucount, adcount) = struct.unpack('!HHHHHH', self.wire[:12])
+ self.current = 12
+ if dns.opcode.is_update(self.message.flags):
+ self.updating = True
+ self._get_question(qcount)
+ if self.question_only:
+ return
+ self._get_section(self.message.answer, ancount)
+ self._get_section(self.message.authority, aucount)
+ self._get_section(self.message.additional, adcount)
+ if not self.ignore_trailing and self.current != l:
+ raise TrailingJunk
+ if self.message.multi and self.message.tsig_ctx and \
+ not self.message.had_tsig:
+ self.message.tsig_ctx.update(self.wire)
+
+
+def from_wire(wire, keyring=None, request_mac='', xfr=False, origin=None,
+ tsig_ctx=None, multi=False, first=True,
+ question_only=False, one_rr_per_rrset=False,
+ ignore_trailing=False):
+ """Convert a DNS wire format message into a message
+ object.
+
+ @param keyring: The keyring to use if the message is signed.
+ @type keyring: dict
+ @param request_mac: If the message is a response to a TSIG-signed request,
+ I{request_mac} should be set to the MAC of that request.
+ @type request_mac: string
+ @param xfr: Is this message part of a zone transfer?
+ @type xfr: bool
+ @param origin: If the message is part of a zone transfer, I{origin}
+ should be the origin name of the zone.
+ @type origin: dns.name.Name object
+ @param tsig_ctx: The ongoing TSIG context, used when validating zone
+ transfers.
+ @type tsig_ctx: hmac.HMAC object
+ @param multi: Is this message part of a multiple message sequence?
+ @type multi: bool
+ @param first: Is this message standalone, or the first of a multi
+ message sequence?
+ @type first: bool
+ @param question_only: Read only up to the end of the question section?
+ @type question_only: bool
+ @param one_rr_per_rrset: Put each RR into its own RRset
+ @type one_rr_per_rrset: bool
+ @param ignore_trailing: Ignore trailing junk at end of request?
+ @type ignore_trailing: bool
+ @raises ShortHeader: The message is less than 12 octets long.
+ @raises TrailingJunk: There were octets in the message past the end
+ of the proper DNS message.
+ @raises BadEDNS: An OPT record was in the wrong section, or occurred more
+ than once.
+ @raises BadTSIG: A TSIG record was not the last record of the additional
+ data section.
+ @rtype: dns.message.Message object"""
+
+ m = Message(id=0)
+ m.keyring = keyring
+ m.request_mac = request_mac
+ m.xfr = xfr
+ m.origin = origin
+ m.tsig_ctx = tsig_ctx
+ m.multi = multi
+ m.first = first
+
+ reader = _WireReader(wire, m, question_only, one_rr_per_rrset,
+ ignore_trailing)
+ reader.read()
+
+ return m
+
+
+class _TextReader(object):
+
+ """Text format reader.
+
+ @ivar tok: the tokenizer
+ @type tok: dns.tokenizer.Tokenizer object
+ @ivar message: The message object being built
+ @type message: dns.message.Message object
+ @ivar updating: Is the message a dynamic update?
+ @type updating: bool
+ @ivar zone_rdclass: The class of the zone in messages which are
+ DNS dynamic updates.
+ @type zone_rdclass: int
+ @ivar last_name: The most recently read name when building a message object
+ from text format.
+ @type last_name: dns.name.Name object
+ """
+
+ def __init__(self, text, message):
+ self.message = message
+ self.tok = dns.tokenizer.Tokenizer(text)
+ self.last_name = None
+ self.zone_rdclass = dns.rdataclass.IN
+ self.updating = False
+
+ def _header_line(self, section):
+ """Process one line from the text format header section."""
+
+ token = self.tok.get()
+ what = token.value
+ if what == 'id':
+ self.message.id = self.tok.get_int()
+ elif what == 'flags':
+ while True:
+ token = self.tok.get()
+ if not token.is_identifier():
+ self.tok.unget(token)
+ break
+ self.message.flags = self.message.flags | \
+ dns.flags.from_text(token.value)
+ if dns.opcode.is_update(self.message.flags):
+ self.updating = True
+ elif what == 'edns':
+ self.message.edns = self.tok.get_int()
+ self.message.ednsflags = self.message.ednsflags | \
+ (self.message.edns << 16)
+ elif what == 'eflags':
+ if self.message.edns < 0:
+ self.message.edns = 0
+ while True:
+ token = self.tok.get()
+ if not token.is_identifier():
+ self.tok.unget(token)
+ break
+ self.message.ednsflags = self.message.ednsflags | \
+ dns.flags.edns_from_text(token.value)
+ elif what == 'payload':
+ self.message.payload = self.tok.get_int()
+ if self.message.edns < 0:
+ self.message.edns = 0
+ elif what == 'opcode':
+ text = self.tok.get_string()
+ self.message.flags = self.message.flags | \
+ dns.opcode.to_flags(dns.opcode.from_text(text))
+ elif what == 'rcode':
+ text = self.tok.get_string()
+ self.message.set_rcode(dns.rcode.from_text(text))
+ else:
+ raise UnknownHeaderField
+ self.tok.get_eol()
+
+ def _question_line(self, section):
+ """Process one line from the text format question section."""
+
+ token = self.tok.get(want_leading=True)
+ if not token.is_whitespace():
+ self.last_name = dns.name.from_text(token.value, None)
+ name = self.last_name
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ # Class
+ try:
+ rdclass = dns.rdataclass.from_text(token.value)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ except dns.exception.SyntaxError:
+ raise dns.exception.SyntaxError
+ except Exception:
+ rdclass = dns.rdataclass.IN
+ # Type
+ rdtype = dns.rdatatype.from_text(token.value)
+ self.message.find_rrset(self.message.question, name,
+ rdclass, rdtype, create=True,
+ force_unique=True)
+ if self.updating:
+ self.zone_rdclass = rdclass
+ self.tok.get_eol()
+
+ def _rr_line(self, section):
+ """Process one line from the text format answer, authority, or
+ additional data sections.
+ """
+
+ deleting = None
+ # Name
+ token = self.tok.get(want_leading=True)
+ if not token.is_whitespace():
+ self.last_name = dns.name.from_text(token.value, None)
+ name = self.last_name
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ # TTL
+ try:
+ ttl = int(token.value, 0)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ except dns.exception.SyntaxError:
+ raise dns.exception.SyntaxError
+ except Exception:
+ ttl = 0
+ # Class
+ try:
+ rdclass = dns.rdataclass.from_text(token.value)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ if rdclass == dns.rdataclass.ANY or rdclass == dns.rdataclass.NONE:
+ deleting = rdclass
+ rdclass = self.zone_rdclass
+ except dns.exception.SyntaxError:
+ raise dns.exception.SyntaxError
+ except Exception:
+ rdclass = dns.rdataclass.IN
+ # Type
+ rdtype = dns.rdatatype.from_text(token.value)
+ token = self.tok.get()
+ if not token.is_eol_or_eof():
+ self.tok.unget(token)
+ rd = dns.rdata.from_text(rdclass, rdtype, self.tok, None)
+ covers = rd.covers()
+ else:
+ rd = None
+ covers = dns.rdatatype.NONE
+ rrset = self.message.find_rrset(section, name,
+ rdclass, rdtype, covers,
+ deleting, True, self.updating)
+ if rd is not None:
+ rrset.add(rd, ttl)
+
+ def read(self):
+ """Read a text format DNS message and build a dns.message.Message
+ object."""
+
+ line_method = self._header_line
+ section = None
+ while 1:
+ token = self.tok.get(True, True)
+ if token.is_eol_or_eof():
+ break
+ if token.is_comment():
+ u = token.value.upper()
+ if u == 'HEADER':
+ line_method = self._header_line
+ elif u == 'QUESTION' or u == 'ZONE':
+ line_method = self._question_line
+ section = self.message.question
+ elif u == 'ANSWER' or u == 'PREREQ':
+ line_method = self._rr_line
+ section = self.message.answer
+ elif u == 'AUTHORITY' or u == 'UPDATE':
+ line_method = self._rr_line
+ section = self.message.authority
+ elif u == 'ADDITIONAL':
+ line_method = self._rr_line
+ section = self.message.additional
+ self.tok.get_eol()
+ continue
+ self.tok.unget(token)
+ line_method(section)
+
+
+def from_text(text):
+ """Convert the text format message into a message object.
+
+ @param text: The text format message.
+ @type text: string
+ @raises UnknownHeaderField:
+ @raises dns.exception.SyntaxError:
+ @rtype: dns.message.Message object"""
+
+ # 'text' can also be a file, but we don't publish that fact
+ # since it's an implementation detail. The official file
+ # interface is from_file().
+
+ m = Message()
+
+ reader = _TextReader(text, m)
+ reader.read()
+
+ return m
+
+
+def from_file(f):
+ """Read the next text format message from the specified file.
+
+ @param f: file or string. If I{f} is a string, it is treated
+ as the name of a file to open.
+ @raises UnknownHeaderField:
+ @raises dns.exception.SyntaxError:
+ @rtype: dns.message.Message object"""
+
+ str_type = string_types
+ opts = 'rU'
+
+ if isinstance(f, str_type):
+ f = open(f, opts)
+ want_close = True
+ else:
+ want_close = False
+
+ try:
+ m = from_text(f)
+ finally:
+ if want_close:
+ f.close()
+ return m
+
+
+def make_query(qname, rdtype, rdclass=dns.rdataclass.IN, use_edns=None,
+ want_dnssec=False, ednsflags=None, payload=None,
+ request_payload=None, options=None):
+ """Make a query message.
+
+ The query name, type, and class may all be specified either
+ as objects of the appropriate type, or as strings.
+
+ The query will have a randomly chosen query id, and its DNS flags
+ will be set to dns.flags.RD.
+
+ @param qname: The query name.
+ @type qname: dns.name.Name object or string
+ @param rdtype: The desired rdata type.
+ @type rdtype: int
+ @param rdclass: The desired rdata class; the default is class IN.
+ @type rdclass: int
+ @param use_edns: The EDNS level to use; the default is None (no EDNS).
+ See the description of dns.message.Message.use_edns() for the possible
+ values for use_edns and their meanings.
+ @type use_edns: int or bool or None
+ @param want_dnssec: Should the query indicate that DNSSEC is desired?
+ @type want_dnssec: bool
+ @param ednsflags: EDNS flag values.
+ @type ednsflags: int
+ @param payload: The EDNS sender's payload field, which is the maximum
+ size of UDP datagram the sender can handle.
+ @type payload: int
+ @param request_payload: The EDNS payload size to use when sending
+ this message. If not specified, defaults to the value of payload.
+ @type request_payload: int or None
+ @param options: The EDNS options
+ @type options: None or list of dns.edns.Option objects
+ @see: RFC 2671
+ @rtype: dns.message.Message object"""
+
+ if isinstance(qname, string_types):
+ qname = dns.name.from_text(qname)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ if isinstance(rdclass, string_types):
+ rdclass = dns.rdataclass.from_text(rdclass)
+ m = Message()
+ m.flags |= dns.flags.RD
+ m.find_rrset(m.question, qname, rdclass, rdtype, create=True,
+ force_unique=True)
+ # only pass keywords on to use_edns if they have been set to a
+ # non-None value. Setting a field will turn EDNS on if it hasn't
+ # been configured.
+ kwargs = {}
+ if ednsflags is not None:
+ kwargs['ednsflags'] = ednsflags
+ if use_edns is None:
+ use_edns = 0
+ if payload is not None:
+ kwargs['payload'] = payload
+ if use_edns is None:
+ use_edns = 0
+ if request_payload is not None:
+ kwargs['request_payload'] = request_payload
+ if use_edns is None:
+ use_edns = 0
+ if options is not None:
+ kwargs['options'] = options
+ if use_edns is None:
+ use_edns = 0
+ kwargs['edns'] = use_edns
+ m.use_edns(**kwargs)
+ m.want_dnssec(want_dnssec)
+ return m
+
+
+def make_response(query, recursion_available=False, our_payload=8192,
+ fudge=300):
+ """Make a message which is a response for the specified query.
+ The message returned is really a response skeleton; it has all
+ of the infrastructure required of a response, but none of the
+ content.
+
+ The response's question section is a shallow copy of the query's
+ question section, so the query's question RRsets should not be
+ changed.
+
+ @param query: the query to respond to
+ @type query: dns.message.Message object
+ @param recursion_available: should RA be set in the response?
+ @type recursion_available: bool
+ @param our_payload: payload size to advertise in EDNS responses; default
+ is 8192.
+ @type our_payload: int
+ @param fudge: TSIG time fudge; default is 300 seconds.
+ @type fudge: int
+ @rtype: dns.message.Message object"""
+
+ if query.flags & dns.flags.QR:
+ raise dns.exception.FormError('specified query message is not a query')
+ response = dns.message.Message(query.id)
+ response.flags = dns.flags.QR | (query.flags & dns.flags.RD)
+ if recursion_available:
+ response.flags |= dns.flags.RA
+ response.set_opcode(query.opcode())
+ response.question = list(query.question)
+ if query.edns >= 0:
+ response.use_edns(0, 0, our_payload, query.payload)
+ if query.had_tsig:
+ response.use_tsig(query.keyring, query.keyname, fudge, None, 0, '',
+ query.keyalgorithm)
+ response.request_mac = query.mac
+ return response
diff --git a/Contents/Libraries/Shared/dns/name.py b/Contents/Libraries/Shared/dns/name.py
new file mode 100644
index 000000000..97e216c8f
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/name.py
@@ -0,0 +1,924 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Names.
+
+@var root: The DNS root name.
+@type root: dns.name.Name object
+@var empty: The empty DNS name.
+@type empty: dns.name.Name object
+"""
+
+from io import BytesIO
+import struct
+import sys
+import copy
+import encodings.idna
+try:
+ import idna
+ have_idna_2008 = True
+except ImportError:
+ have_idna_2008 = False
+
+import dns.exception
+import dns.wiredata
+
+from ._compat import long, binary_type, text_type, unichr, maybe_decode
+
+try:
+ maxint = sys.maxint
+except AttributeError:
+ maxint = (1 << (8 * struct.calcsize("P"))) // 2 - 1
+
+NAMERELN_NONE = 0
+NAMERELN_SUPERDOMAIN = 1
+NAMERELN_SUBDOMAIN = 2
+NAMERELN_EQUAL = 3
+NAMERELN_COMMONANCESTOR = 4
+
+
+class EmptyLabel(dns.exception.SyntaxError):
+
+ """A DNS label is empty."""
+
+
+class BadEscape(dns.exception.SyntaxError):
+
+ """An escaped code in a text format of DNS name is invalid."""
+
+
+class BadPointer(dns.exception.FormError):
+
+ """A DNS compression pointer points forward instead of backward."""
+
+
+class BadLabelType(dns.exception.FormError):
+
+ """The label type in DNS name wire format is unknown."""
+
+
+class NeedAbsoluteNameOrOrigin(dns.exception.DNSException):
+
+ """An attempt was made to convert a non-absolute name to
+ wire when there was also a non-absolute (or missing) origin."""
+
+
+class NameTooLong(dns.exception.FormError):
+
+ """A DNS name is > 255 octets long."""
+
+
+class LabelTooLong(dns.exception.SyntaxError):
+
+ """A DNS label is > 63 octets long."""
+
+
+class AbsoluteConcatenation(dns.exception.DNSException):
+
+ """An attempt was made to append anything other than the
+ empty name to an absolute DNS name."""
+
+
+class NoParent(dns.exception.DNSException):
+
+ """An attempt was made to get the parent of the root name
+ or the empty name."""
+
+class NoIDNA2008(dns.exception.DNSException):
+
+ """IDNA 2008 processing was requested but the idna module is not
+ available."""
+
+
+class IDNAException(dns.exception.DNSException):
+
+ """IDNA processing raised an exception."""
+
+ supp_kwargs = set(['idna_exception'])
+ fmt = "IDNA processing exception: {idna_exception}"
+
+class IDNACodec(object):
+
+ """Abstract base class for IDNA encoder/decoders."""
+
+ def __init__(self):
+ pass
+
+ def encode(self, label):
+ raise NotImplementedError
+
+ def decode(self, label):
+ # We do not apply any IDNA policy on decode; we just
+ downcased = label.lower()
+ if downcased.startswith(b'xn--'):
+ try:
+ label = downcased[4:].decode('punycode')
+ except Exception as e:
+ raise IDNAException(idna_exception=e)
+ else:
+ label = maybe_decode(label)
+ return _escapify(label, True)
+
+class IDNA2003Codec(IDNACodec):
+
+ """IDNA 2003 encoder/decoder."""
+
+ def __init__(self, strict_decode=False):
+ """Initialize the IDNA 2003 encoder/decoder.
+ @param strict_decode: If True, then IDNA2003 checking is done when
+ decoding. This can cause failures if the name was encoded with
+ IDNA2008. The default is False.
+ @type strict_decode: bool
+ """
+ super(IDNA2003Codec, self).__init__()
+ self.strict_decode = strict_decode
+
+ def encode(self, label):
+ if label == '':
+ return b''
+ try:
+ return encodings.idna.ToASCII(label)
+ except UnicodeError:
+ raise LabelTooLong
+
+ def decode(self, label):
+ if not self.strict_decode:
+ return super(IDNA2003Codec, self).decode(label)
+ if label == b'':
+ return u''
+ try:
+ return _escapify(encodings.idna.ToUnicode(label), True)
+ except Exception as e:
+ raise IDNAException(idna_exception=e)
+
+class IDNA2008Codec(IDNACodec):
+
+ """IDNA 2008 encoder/decoder."""
+
+ def __init__(self, uts_46=False, transitional=False,
+ allow_pure_ascii=False, strict_decode=False):
+ """Initialize the IDNA 2008 encoder/decoder.
+ @param uts_46: If True, apply Unicode IDNA compatibility processing
+ as described in Unicode Technical Standard #46
+ (U{http://unicode.org/reports/tr46/}). This parameter is only
+ meaningful if IDNA 2008 is in use. If False, do not apply
+ the mapping. The default is False
+ @type uts_46: bool
+ @param transitional: If True, use the "transitional" mode described
+ in Unicode Technical Standard #46. This parameter is only
+ meaningful if IDNA 2008 is in use. The default is False.
+ @type transitional: bool
+ @param allow_pure_ascii: If True, then a label which
+ consists of only ASCII characters is allowed. This is less strict
+ than regular IDNA 2008, but is also necessary for mixed names,
+ e.g. a name with starting with "_sip._tcp." and ending in an IDN
+ suffixm which would otherwise be disallowed. The default is False
+ @type allow_pure_ascii: bool
+ @param strict_decode: If True, then IDNA2008 checking is done when
+ decoding. This can cause failures if the name was encoded with
+ IDNA2003. The default is False.
+ @type strict_decode: bool
+ """
+ super(IDNA2008Codec, self).__init__()
+ self.uts_46 = uts_46
+ self.transitional = transitional
+ self.allow_pure_ascii = allow_pure_ascii
+ self.strict_decode = strict_decode
+
+ def is_all_ascii(self, label):
+ for c in label:
+ if ord(c) > 0x7f:
+ return False
+ return True
+
+ def encode(self, label):
+ if label == '':
+ return b''
+ if self.allow_pure_ascii and self.is_all_ascii(label):
+ return label.encode('ascii')
+ if not have_idna_2008:
+ raise NoIDNA2008
+ try:
+ if self.uts_46:
+ label = idna.uts46_remap(label, False, self.transitional)
+ return idna.alabel(label)
+ except idna.IDNAError as e:
+ raise IDNAException(idna_exception=e)
+
+ def decode(self, label):
+ if not self.strict_decode:
+ return super(IDNA2008Codec, self).decode(label)
+ if label == b'':
+ return u''
+ if not have_idna_2008:
+ raise NoIDNA2008
+ try:
+ if self.uts_46:
+ label = idna.uts46_remap(label, False, False)
+ return _escapify(idna.ulabel(label), True)
+ except idna.IDNAError as e:
+ raise IDNAException(idna_exception=e)
+
+_escaped = bytearray(b'"().;\\@$')
+
+IDNA_2003_Practical = IDNA2003Codec(False)
+IDNA_2003_Strict = IDNA2003Codec(True)
+IDNA_2003 = IDNA_2003_Practical
+IDNA_2008_Practical = IDNA2008Codec(True, False, True, False)
+IDNA_2008_UTS_46 = IDNA2008Codec(True, False, False, False)
+IDNA_2008_Strict = IDNA2008Codec(False, False, False, True)
+IDNA_2008_Transitional = IDNA2008Codec(True, True, False, False)
+IDNA_2008 = IDNA_2008_Practical
+
+def _escapify(label, unicode_mode=False):
+ """Escape the characters in label which need it.
+ @param unicode_mode: escapify only special and whitespace (<= 0x20)
+ characters
+ @returns: the escaped string
+ @rtype: string"""
+ if not unicode_mode:
+ text = ''
+ if isinstance(label, text_type):
+ label = label.encode()
+ for c in bytearray(label):
+ if c in _escaped:
+ text += '\\' + chr(c)
+ elif c > 0x20 and c < 0x7F:
+ text += chr(c)
+ else:
+ text += '\\%03d' % c
+ return text.encode()
+
+ text = u''
+ if isinstance(label, binary_type):
+ label = label.decode()
+ for c in label:
+ if c > u'\x20' and c < u'\x7f':
+ text += c
+ else:
+ if c >= u'\x7f':
+ text += c
+ else:
+ text += u'\\%03d' % ord(c)
+ return text
+
+def _validate_labels(labels):
+ """Check for empty labels in the middle of a label sequence,
+ labels that are too long, and for too many labels.
+ @raises NameTooLong: the name as a whole is too long
+ @raises EmptyLabel: a label is empty (i.e. the root label) and appears
+ in a position other than the end of the label sequence"""
+
+ l = len(labels)
+ total = 0
+ i = -1
+ j = 0
+ for label in labels:
+ ll = len(label)
+ total += ll + 1
+ if ll > 63:
+ raise LabelTooLong
+ if i < 0 and label == b'':
+ i = j
+ j += 1
+ if total > 255:
+ raise NameTooLong
+ if i >= 0 and i != l - 1:
+ raise EmptyLabel
+
+
+def _ensure_bytes(label):
+ if isinstance(label, binary_type):
+ return label
+ if isinstance(label, text_type):
+ return label.encode()
+ raise ValueError
+
+
+class Name(object):
+
+ """A DNS name.
+
+ The dns.name.Name class represents a DNS name as a tuple of labels.
+ Instances of the class are immutable.
+
+ @ivar labels: The tuple of labels in the name. Each label is a string of
+ up to 63 octets."""
+
+ __slots__ = ['labels']
+
+ def __init__(self, labels):
+ """Initialize a domain name from a list of labels.
+ @param labels: the labels
+ @type labels: any iterable whose values are strings
+ """
+ labels = [_ensure_bytes(x) for x in labels]
+ super(Name, self).__setattr__('labels', tuple(labels))
+ _validate_labels(self.labels)
+
+ def __setattr__(self, name, value):
+ raise TypeError("object doesn't support attribute assignment")
+
+ def __copy__(self):
+ return Name(self.labels)
+
+ def __deepcopy__(self, memo):
+ return Name(copy.deepcopy(self.labels, memo))
+
+ def __getstate__(self):
+ return {'labels': self.labels}
+
+ def __setstate__(self, state):
+ super(Name, self).__setattr__('labels', state['labels'])
+ _validate_labels(self.labels)
+
+ def is_absolute(self):
+ """Is the most significant label of this name the root label?
+ @rtype: bool
+ """
+
+ return len(self.labels) > 0 and self.labels[-1] == b''
+
+ def is_wild(self):
+ """Is this name wild? (I.e. Is the least significant label '*'?)
+ @rtype: bool
+ """
+
+ return len(self.labels) > 0 and self.labels[0] == b'*'
+
+ def __hash__(self):
+ """Return a case-insensitive hash of the name.
+ @rtype: int
+ """
+
+ h = long(0)
+ for label in self.labels:
+ for c in bytearray(label.lower()):
+ h += (h << 3) + c
+ return int(h % maxint)
+
+ def fullcompare(self, other):
+ """Compare two names, returning a 3-tuple (relation, order, nlabels).
+
+ I{relation} describes the relation ship between the names,
+ and is one of: dns.name.NAMERELN_NONE,
+ dns.name.NAMERELN_SUPERDOMAIN, dns.name.NAMERELN_SUBDOMAIN,
+ dns.name.NAMERELN_EQUAL, or dns.name.NAMERELN_COMMONANCESTOR
+
+ I{order} is < 0 if self < other, > 0 if self > other, and ==
+ 0 if self == other. A relative name is always less than an
+ absolute name. If both names have the same relativity, then
+ the DNSSEC order relation is used to order them.
+
+ I{nlabels} is the number of significant labels that the two names
+ have in common.
+ """
+
+ sabs = self.is_absolute()
+ oabs = other.is_absolute()
+ if sabs != oabs:
+ if sabs:
+ return (NAMERELN_NONE, 1, 0)
+ else:
+ return (NAMERELN_NONE, -1, 0)
+ l1 = len(self.labels)
+ l2 = len(other.labels)
+ ldiff = l1 - l2
+ if ldiff < 0:
+ l = l1
+ else:
+ l = l2
+
+ order = 0
+ nlabels = 0
+ namereln = NAMERELN_NONE
+ while l > 0:
+ l -= 1
+ l1 -= 1
+ l2 -= 1
+ label1 = self.labels[l1].lower()
+ label2 = other.labels[l2].lower()
+ if label1 < label2:
+ order = -1
+ if nlabels > 0:
+ namereln = NAMERELN_COMMONANCESTOR
+ return (namereln, order, nlabels)
+ elif label1 > label2:
+ order = 1
+ if nlabels > 0:
+ namereln = NAMERELN_COMMONANCESTOR
+ return (namereln, order, nlabels)
+ nlabels += 1
+ order = ldiff
+ if ldiff < 0:
+ namereln = NAMERELN_SUPERDOMAIN
+ elif ldiff > 0:
+ namereln = NAMERELN_SUBDOMAIN
+ else:
+ namereln = NAMERELN_EQUAL
+ return (namereln, order, nlabels)
+
+ def is_subdomain(self, other):
+ """Is self a subdomain of other?
+
+ The notion of subdomain includes equality.
+ @rtype: bool
+ """
+
+ (nr, o, nl) = self.fullcompare(other)
+ if nr == NAMERELN_SUBDOMAIN or nr == NAMERELN_EQUAL:
+ return True
+ return False
+
+ def is_superdomain(self, other):
+ """Is self a superdomain of other?
+
+ The notion of subdomain includes equality.
+ @rtype: bool
+ """
+
+ (nr, o, nl) = self.fullcompare(other)
+ if nr == NAMERELN_SUPERDOMAIN or nr == NAMERELN_EQUAL:
+ return True
+ return False
+
+ def canonicalize(self):
+ """Return a name which is equal to the current name, but is in
+ DNSSEC canonical form.
+ @rtype: dns.name.Name object
+ """
+
+ return Name([x.lower() for x in self.labels])
+
+ def __eq__(self, other):
+ if isinstance(other, Name):
+ return self.fullcompare(other)[1] == 0
+ else:
+ return False
+
+ def __ne__(self, other):
+ if isinstance(other, Name):
+ return self.fullcompare(other)[1] != 0
+ else:
+ return True
+
+ def __lt__(self, other):
+ if isinstance(other, Name):
+ return self.fullcompare(other)[1] < 0
+ else:
+ return NotImplemented
+
+ def __le__(self, other):
+ if isinstance(other, Name):
+ return self.fullcompare(other)[1] <= 0
+ else:
+ return NotImplemented
+
+ def __ge__(self, other):
+ if isinstance(other, Name):
+ return self.fullcompare(other)[1] >= 0
+ else:
+ return NotImplemented
+
+ def __gt__(self, other):
+ if isinstance(other, Name):
+ return self.fullcompare(other)[1] > 0
+ else:
+ return NotImplemented
+
+ def __repr__(self):
+ return ''
+
+ def __str__(self):
+ return self.to_text(False)
+
+ def to_text(self, omit_final_dot=False):
+ """Convert name to text format.
+ @param omit_final_dot: If True, don't emit the final dot (denoting the
+ root label) for absolute names. The default is False.
+ @rtype: string
+ """
+
+ if len(self.labels) == 0:
+ return maybe_decode(b'@')
+ if len(self.labels) == 1 and self.labels[0] == b'':
+ return maybe_decode(b'.')
+ if omit_final_dot and self.is_absolute():
+ l = self.labels[:-1]
+ else:
+ l = self.labels
+ s = b'.'.join(map(_escapify, l))
+ return maybe_decode(s)
+
+ def to_unicode(self, omit_final_dot=False, idna_codec=None):
+ """Convert name to Unicode text format.
+
+ IDN ACE labels are converted to Unicode.
+
+ @param omit_final_dot: If True, don't emit the final dot (denoting the
+ root label) for absolute names. The default is False.
+ @type omit_final_dot: bool
+ @param idna_codec: IDNA encoder/decoder. If None, the
+ IDNA_2003_Practical encoder/decoder is used. The IDNA_2003_Practical
+ decoder does not impose any policy, it just decodes punycode, so if
+ you don't want checking for compliance, you can use this decoder for
+ IDNA2008 as well.
+ @type idna_codec: dns.name.IDNA
+ @rtype: string
+ """
+
+ if len(self.labels) == 0:
+ return u'@'
+ if len(self.labels) == 1 and self.labels[0] == b'':
+ return u'.'
+ if omit_final_dot and self.is_absolute():
+ l = self.labels[:-1]
+ else:
+ l = self.labels
+ if idna_codec is None:
+ idna_codec = IDNA_2003_Practical
+ return u'.'.join([idna_codec.decode(x) for x in l])
+
+ def to_digestable(self, origin=None):
+ """Convert name to a format suitable for digesting in hashes.
+
+ The name is canonicalized and converted to uncompressed wire format.
+
+ @param origin: If the name is relative and origin is not None, then
+ origin will be appended to it.
+ @type origin: dns.name.Name object
+ @raises NeedAbsoluteNameOrOrigin: All names in wire format are
+ absolute. If self is a relative name, then an origin must be supplied;
+ if it is missing, then this exception is raised
+ @rtype: string
+ """
+
+ if not self.is_absolute():
+ if origin is None or not origin.is_absolute():
+ raise NeedAbsoluteNameOrOrigin
+ labels = list(self.labels)
+ labels.extend(list(origin.labels))
+ else:
+ labels = self.labels
+ dlabels = [struct.pack('!B%ds' % len(x), len(x), x.lower())
+ for x in labels]
+ return b''.join(dlabels)
+
+ def to_wire(self, file=None, compress=None, origin=None):
+ """Convert name to wire format, possibly compressing it.
+
+ @param file: the file where the name is emitted (typically
+ a BytesIO file). If None, a string containing the wire name
+ will be returned.
+ @type file: file or None
+ @param compress: The compression table. If None (the default) names
+ will not be compressed.
+ @type compress: dict
+ @param origin: If the name is relative and origin is not None, then
+ origin will be appended to it.
+ @type origin: dns.name.Name object
+ @raises NeedAbsoluteNameOrOrigin: All names in wire format are
+ absolute. If self is a relative name, then an origin must be supplied;
+ if it is missing, then this exception is raised
+ """
+
+ if file is None:
+ file = BytesIO()
+ want_return = True
+ else:
+ want_return = False
+
+ if not self.is_absolute():
+ if origin is None or not origin.is_absolute():
+ raise NeedAbsoluteNameOrOrigin
+ labels = list(self.labels)
+ labels.extend(list(origin.labels))
+ else:
+ labels = self.labels
+ i = 0
+ for label in labels:
+ n = Name(labels[i:])
+ i += 1
+ if compress is not None:
+ pos = compress.get(n)
+ else:
+ pos = None
+ if pos is not None:
+ value = 0xc000 + pos
+ s = struct.pack('!H', value)
+ file.write(s)
+ break
+ else:
+ if compress is not None and len(n) > 1:
+ pos = file.tell()
+ if pos <= 0x3fff:
+ compress[n] = pos
+ l = len(label)
+ file.write(struct.pack('!B', l))
+ if l > 0:
+ file.write(label)
+ if want_return:
+ return file.getvalue()
+
+ def __len__(self):
+ """The length of the name (in labels).
+ @rtype: int
+ """
+
+ return len(self.labels)
+
+ def __getitem__(self, index):
+ return self.labels[index]
+
+ def __add__(self, other):
+ return self.concatenate(other)
+
+ def __sub__(self, other):
+ return self.relativize(other)
+
+ def split(self, depth):
+ """Split a name into a prefix and suffix at depth.
+
+ @param depth: the number of labels in the suffix
+ @type depth: int
+ @raises ValueError: the depth was not >= 0 and <= the length of the
+ name.
+ @returns: the tuple (prefix, suffix)
+ @rtype: tuple
+ """
+
+ l = len(self.labels)
+ if depth == 0:
+ return (self, dns.name.empty)
+ elif depth == l:
+ return (dns.name.empty, self)
+ elif depth < 0 or depth > l:
+ raise ValueError(
+ 'depth must be >= 0 and <= the length of the name')
+ return (Name(self[: -depth]), Name(self[-depth:]))
+
+ def concatenate(self, other):
+ """Return a new name which is the concatenation of self and other.
+ @rtype: dns.name.Name object
+ @raises AbsoluteConcatenation: self is absolute and other is
+ not the empty name
+ """
+
+ if self.is_absolute() and len(other) > 0:
+ raise AbsoluteConcatenation
+ labels = list(self.labels)
+ labels.extend(list(other.labels))
+ return Name(labels)
+
+ def relativize(self, origin):
+ """If self is a subdomain of origin, return a new name which is self
+ relative to origin. Otherwise return self.
+ @rtype: dns.name.Name object
+ """
+
+ if origin is not None and self.is_subdomain(origin):
+ return Name(self[: -len(origin)])
+ else:
+ return self
+
+ def derelativize(self, origin):
+ """If self is a relative name, return a new name which is the
+ concatenation of self and origin. Otherwise return self.
+ @rtype: dns.name.Name object
+ """
+
+ if not self.is_absolute():
+ return self.concatenate(origin)
+ else:
+ return self
+
+ def choose_relativity(self, origin=None, relativize=True):
+ """Return a name with the relativity desired by the caller. If
+ origin is None, then self is returned. Otherwise, if
+ relativize is true the name is relativized, and if relativize is
+ false the name is derelativized.
+ @rtype: dns.name.Name object
+ """
+
+ if origin:
+ if relativize:
+ return self.relativize(origin)
+ else:
+ return self.derelativize(origin)
+ else:
+ return self
+
+ def parent(self):
+ """Return the parent of the name.
+ @rtype: dns.name.Name object
+ @raises NoParent: the name is either the root name or the empty name,
+ and thus has no parent.
+ """
+ if self == root or self == empty:
+ raise NoParent
+ return Name(self.labels[1:])
+
+root = Name([b''])
+empty = Name([])
+
+
+def from_unicode(text, origin=root, idna_codec=None):
+ """Convert unicode text into a Name object.
+
+ Labels are encoded in IDN ACE form.
+
+ @param text: The text to convert into a name.
+ @type text: Unicode string
+ @param origin: The origin to append to non-absolute names.
+ @type origin: dns.name.Name
+ @param idna_codec: IDNA encoder/decoder. If None, the default IDNA 2003
+ encoder/decoder is used.
+ @type idna_codec: dns.name.IDNA
+ @rtype: dns.name.Name object
+ """
+
+ if not isinstance(text, text_type):
+ raise ValueError("input to from_unicode() must be a unicode string")
+ if not (origin is None or isinstance(origin, Name)):
+ raise ValueError("origin must be a Name or None")
+ labels = []
+ label = u''
+ escaping = False
+ edigits = 0
+ total = 0
+ if idna_codec is None:
+ idna_codec = IDNA_2003
+ if text == u'@':
+ text = u''
+ if text:
+ if text == u'.':
+ return Name([b'']) # no Unicode "u" on this constant!
+ for c in text:
+ if escaping:
+ if edigits == 0:
+ if c.isdigit():
+ total = int(c)
+ edigits += 1
+ else:
+ label += c
+ escaping = False
+ else:
+ if not c.isdigit():
+ raise BadEscape
+ total *= 10
+ total += int(c)
+ edigits += 1
+ if edigits == 3:
+ escaping = False
+ label += unichr(total)
+ elif c in [u'.', u'\u3002', u'\uff0e', u'\uff61']:
+ if len(label) == 0:
+ raise EmptyLabel
+ labels.append(idna_codec.encode(label))
+ label = u''
+ elif c == u'\\':
+ escaping = True
+ edigits = 0
+ total = 0
+ else:
+ label += c
+ if escaping:
+ raise BadEscape
+ if len(label) > 0:
+ labels.append(idna_codec.encode(label))
+ else:
+ labels.append(b'')
+
+ if (len(labels) == 0 or labels[-1] != b'') and origin is not None:
+ labels.extend(list(origin.labels))
+ return Name(labels)
+
+
+def from_text(text, origin=root, idna_codec=None):
+ """Convert text into a Name object.
+
+ @param text: The text to convert into a name.
+ @type text: string
+ @param origin: The origin to append to non-absolute names.
+ @type origin: dns.name.Name
+ @param idna_codec: IDNA encoder/decoder. If None, the default IDNA 2003
+ encoder/decoder is used.
+ @type idna_codec: dns.name.IDNA
+ @rtype: dns.name.Name object
+ """
+
+ if isinstance(text, text_type):
+ return from_unicode(text, origin, idna_codec)
+ if not isinstance(text, binary_type):
+ raise ValueError("input to from_text() must be a string")
+ if not (origin is None or isinstance(origin, Name)):
+ raise ValueError("origin must be a Name or None")
+ labels = []
+ label = b''
+ escaping = False
+ edigits = 0
+ total = 0
+ if text == b'@':
+ text = b''
+ if text:
+ if text == b'.':
+ return Name([b''])
+ for c in bytearray(text):
+ byte_ = struct.pack('!B', c)
+ if escaping:
+ if edigits == 0:
+ if byte_.isdigit():
+ total = int(byte_)
+ edigits += 1
+ else:
+ label += byte_
+ escaping = False
+ else:
+ if not byte_.isdigit():
+ raise BadEscape
+ total *= 10
+ total += int(byte_)
+ edigits += 1
+ if edigits == 3:
+ escaping = False
+ label += struct.pack('!B', total)
+ elif byte_ == b'.':
+ if len(label) == 0:
+ raise EmptyLabel
+ labels.append(label)
+ label = b''
+ elif byte_ == b'\\':
+ escaping = True
+ edigits = 0
+ total = 0
+ else:
+ label += byte_
+ if escaping:
+ raise BadEscape
+ if len(label) > 0:
+ labels.append(label)
+ else:
+ labels.append(b'')
+ if (len(labels) == 0 or labels[-1] != b'') and origin is not None:
+ labels.extend(list(origin.labels))
+ return Name(labels)
+
+
+def from_wire(message, current):
+ """Convert possibly compressed wire format into a Name.
+ @param message: the entire DNS message
+ @type message: string
+ @param current: the offset of the beginning of the name from the start
+ of the message
+ @type current: int
+ @raises dns.name.BadPointer: a compression pointer did not point backwards
+ in the message
+ @raises dns.name.BadLabelType: an invalid label type was encountered.
+ @returns: a tuple consisting of the name that was read and the number
+ of bytes of the wire format message which were consumed reading it
+ @rtype: (dns.name.Name object, int) tuple
+ """
+
+ if not isinstance(message, binary_type):
+ raise ValueError("input to from_wire() must be a byte string")
+ message = dns.wiredata.maybe_wrap(message)
+ labels = []
+ biggest_pointer = current
+ hops = 0
+ count = message[current]
+ current += 1
+ cused = 1
+ while count != 0:
+ if count < 64:
+ labels.append(message[current: current + count].unwrap())
+ current += count
+ if hops == 0:
+ cused += count
+ elif count >= 192:
+ current = (count & 0x3f) * 256 + message[current]
+ if hops == 0:
+ cused += 1
+ if current >= biggest_pointer:
+ raise BadPointer
+ biggest_pointer = current
+ hops += 1
+ else:
+ raise BadLabelType
+ count = message[current]
+ current += 1
+ if hops == 0:
+ cused += 1
+ labels.append('')
+ return (Name(labels), cused)
diff --git a/Contents/Libraries/Shared/dns/namedict.py b/Contents/Libraries/Shared/dns/namedict.py
new file mode 100644
index 000000000..58e403440
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/namedict.py
@@ -0,0 +1,104 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+# Copyright (C) 2016 Coresec Systems AB
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND CORESEC SYSTEMS AB DISCLAIMS ALL
+# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL CORESEC
+# SYSTEMS AB BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS name dictionary"""
+
+import collections
+import dns.name
+from ._compat import xrange
+
+
+class NameDict(collections.MutableMapping):
+
+ """A dictionary whose keys are dns.name.Name objects.
+ @ivar max_depth: the maximum depth of the keys that have ever been
+ added to the dictionary.
+ @type max_depth: int
+ @ivar max_depth_items: the number of items of maximum depth
+ @type max_depth_items: int
+ """
+
+ __slots__ = ["max_depth", "max_depth_items", "__store"]
+
+ def __init__(self, *args, **kwargs):
+ self.__store = dict()
+ self.max_depth = 0
+ self.max_depth_items = 0
+ self.update(dict(*args, **kwargs))
+
+ def __update_max_depth(self, key):
+ if len(key) == self.max_depth:
+ self.max_depth_items = self.max_depth_items + 1
+ elif len(key) > self.max_depth:
+ self.max_depth = len(key)
+ self.max_depth_items = 1
+
+ def __getitem__(self, key):
+ return self.__store[key]
+
+ def __setitem__(self, key, value):
+ if not isinstance(key, dns.name.Name):
+ raise ValueError('NameDict key must be a name')
+ self.__store[key] = value
+ self.__update_max_depth(key)
+
+ def __delitem__(self, key):
+ value = self.__store.pop(key)
+ if len(value) == self.max_depth:
+ self.max_depth_items = self.max_depth_items - 1
+ if self.max_depth_items == 0:
+ self.max_depth = 0
+ for k in self.__store:
+ self.__update_max_depth(k)
+
+ def __iter__(self):
+ return iter(self.__store)
+
+ def __len__(self):
+ return len(self.__store)
+
+ def has_key(self, key):
+ return key in self.__store
+
+ def get_deepest_match(self, name):
+ """Find the deepest match to I{name} in the dictionary.
+
+ The deepest match is the longest name in the dictionary which is
+ a superdomain of I{name}.
+
+ @param name: the name
+ @type name: dns.name.Name object
+ @rtype: (key, value) tuple
+ """
+
+ depth = len(name)
+ if depth > self.max_depth:
+ depth = self.max_depth
+ for i in xrange(-depth, 0):
+ n = dns.name.Name(name[i:])
+ if n in self:
+ return (n, self[n])
+ v = self[dns.name.empty]
+ return (dns.name.empty, v)
diff --git a/Contents/Libraries/Shared/dns/node.py b/Contents/Libraries/Shared/dns/node.py
new file mode 100644
index 000000000..7c25060e9
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/node.py
@@ -0,0 +1,178 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS nodes. A node is a set of rdatasets."""
+
+from io import StringIO
+
+import dns.rdataset
+import dns.rdatatype
+import dns.renderer
+
+
+class Node(object):
+
+ """A DNS node.
+
+ A node is a set of rdatasets
+
+ @ivar rdatasets: the node's rdatasets
+ @type rdatasets: list of dns.rdataset.Rdataset objects"""
+
+ __slots__ = ['rdatasets']
+
+ def __init__(self):
+ """Initialize a DNS node.
+ """
+
+ self.rdatasets = []
+
+ def to_text(self, name, **kw):
+ """Convert a node to text format.
+
+ Each rdataset at the node is printed. Any keyword arguments
+ to this method are passed on to the rdataset's to_text() method.
+ @param name: the owner name of the rdatasets
+ @type name: dns.name.Name object
+ @rtype: string
+ """
+
+ s = StringIO()
+ for rds in self.rdatasets:
+ if len(rds) > 0:
+ s.write(rds.to_text(name, **kw))
+ s.write(u'\n')
+ return s.getvalue()[:-1]
+
+ def __repr__(self):
+ return ''
+
+ def __eq__(self, other):
+ """Two nodes are equal if they have the same rdatasets.
+
+ @rtype: bool
+ """
+ #
+ # This is inefficient. Good thing we don't need to do it much.
+ #
+ for rd in self.rdatasets:
+ if rd not in other.rdatasets:
+ return False
+ for rd in other.rdatasets:
+ if rd not in self.rdatasets:
+ return False
+ return True
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __len__(self):
+ return len(self.rdatasets)
+
+ def __iter__(self):
+ return iter(self.rdatasets)
+
+ def find_rdataset(self, rdclass, rdtype, covers=dns.rdatatype.NONE,
+ create=False):
+ """Find an rdataset matching the specified properties in the
+ current node.
+
+ @param rdclass: The class of the rdataset
+ @type rdclass: int
+ @param rdtype: The type of the rdataset
+ @type rdtype: int
+ @param covers: The covered type. Usually this value is
+ dns.rdatatype.NONE, but if the rdtype is dns.rdatatype.SIG or
+ dns.rdatatype.RRSIG, then the covers value will be the rdata
+ type the SIG/RRSIG covers. The library treats the SIG and RRSIG
+ types as if they were a family of
+ types, e.g. RRSIG(A), RRSIG(NS), RRSIG(SOA). This makes RRSIGs much
+ easier to work with than if RRSIGs covering different rdata
+ types were aggregated into a single RRSIG rdataset.
+ @type covers: int
+ @param create: If True, create the rdataset if it is not found.
+ @type create: bool
+ @raises KeyError: An rdataset of the desired type and class does
+ not exist and I{create} is not True.
+ @rtype: dns.rdataset.Rdataset object
+ """
+
+ for rds in self.rdatasets:
+ if rds.match(rdclass, rdtype, covers):
+ return rds
+ if not create:
+ raise KeyError
+ rds = dns.rdataset.Rdataset(rdclass, rdtype)
+ self.rdatasets.append(rds)
+ return rds
+
+ def get_rdataset(self, rdclass, rdtype, covers=dns.rdatatype.NONE,
+ create=False):
+ """Get an rdataset matching the specified properties in the
+ current node.
+
+ None is returned if an rdataset of the specified type and
+ class does not exist and I{create} is not True.
+
+ @param rdclass: The class of the rdataset
+ @type rdclass: int
+ @param rdtype: The type of the rdataset
+ @type rdtype: int
+ @param covers: The covered type.
+ @type covers: int
+ @param create: If True, create the rdataset if it is not found.
+ @type create: bool
+ @rtype: dns.rdataset.Rdataset object or None
+ """
+
+ try:
+ rds = self.find_rdataset(rdclass, rdtype, covers, create)
+ except KeyError:
+ rds = None
+ return rds
+
+ def delete_rdataset(self, rdclass, rdtype, covers=dns.rdatatype.NONE):
+ """Delete the rdataset matching the specified properties in the
+ current node.
+
+ If a matching rdataset does not exist, it is not an error.
+
+ @param rdclass: The class of the rdataset
+ @type rdclass: int
+ @param rdtype: The type of the rdataset
+ @type rdtype: int
+ @param covers: The covered type.
+ @type covers: int
+ """
+
+ rds = self.get_rdataset(rdclass, rdtype, covers)
+ if rds is not None:
+ self.rdatasets.remove(rds)
+
+ def replace_rdataset(self, replacement):
+ """Replace an rdataset.
+
+ It is not an error if there is no rdataset matching I{replacement}.
+
+ Ownership of the I{replacement} object is transferred to the node;
+ in other words, this method does not store a copy of I{replacement}
+ at the node, it stores I{replacement} itself.
+ """
+
+ if not isinstance(replacement, dns.rdataset.Rdataset):
+ raise ValueError('replacement is not an rdataset')
+ self.delete_rdataset(replacement.rdclass, replacement.rdtype,
+ replacement.covers)
+ self.rdatasets.append(replacement)
diff --git a/Contents/Libraries/Shared/dns/opcode.py b/Contents/Libraries/Shared/dns/opcode.py
new file mode 100644
index 000000000..70d704fb3
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/opcode.py
@@ -0,0 +1,107 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Opcodes."""
+
+import dns.exception
+
+QUERY = 0
+IQUERY = 1
+STATUS = 2
+NOTIFY = 4
+UPDATE = 5
+
+_by_text = {
+ 'QUERY': QUERY,
+ 'IQUERY': IQUERY,
+ 'STATUS': STATUS,
+ 'NOTIFY': NOTIFY,
+ 'UPDATE': UPDATE
+}
+
+# We construct the inverse mapping programmatically to ensure that we
+# cannot make any mistakes (e.g. omissions, cut-and-paste errors) that
+# would cause the mapping not to be true inverse.
+
+_by_value = dict((y, x) for x, y in _by_text.items())
+
+
+class UnknownOpcode(dns.exception.DNSException):
+
+ """An DNS opcode is unknown."""
+
+
+def from_text(text):
+ """Convert text into an opcode.
+
+ @param text: the textual opcode
+ @type text: string
+ @raises UnknownOpcode: the opcode is unknown
+ @rtype: int
+ """
+
+ if text.isdigit():
+ value = int(text)
+ if value >= 0 and value <= 15:
+ return value
+ value = _by_text.get(text.upper())
+ if value is None:
+ raise UnknownOpcode
+ return value
+
+
+def from_flags(flags):
+ """Extract an opcode from DNS message flags.
+
+ @param flags: int
+ @rtype: int
+ """
+
+ return (flags & 0x7800) >> 11
+
+
+def to_flags(value):
+ """Convert an opcode to a value suitable for ORing into DNS message
+ flags.
+ @rtype: int
+ """
+
+ return (value << 11) & 0x7800
+
+
+def to_text(value):
+ """Convert an opcode to text.
+
+ @param value: the opcdoe
+ @type value: int
+ @raises UnknownOpcode: the opcode is unknown
+ @rtype: string
+ """
+
+ text = _by_value.get(value)
+ if text is None:
+ text = str(value)
+ return text
+
+
+def is_update(flags):
+ """True if the opcode in flags is UPDATE.
+
+ @param flags: DNS flags
+ @type flags: int
+ @rtype: bool
+ """
+
+ return from_flags(flags) == UPDATE
diff --git a/Contents/Libraries/Shared/dns/query.py b/Contents/Libraries/Shared/dns/query.py
new file mode 100644
index 000000000..bfecd43e5
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/query.py
@@ -0,0 +1,539 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Talk to a DNS server."""
+
+from __future__ import generators
+
+import errno
+import select
+import socket
+import struct
+import sys
+import time
+
+import dns.exception
+import dns.inet
+import dns.name
+import dns.message
+import dns.rdataclass
+import dns.rdatatype
+from ._compat import long, string_types
+
+if sys.version_info > (3,):
+ select_error = OSError
+else:
+ select_error = select.error
+
+# Function used to create a socket. Can be overridden if needed in special
+# situations.
+socket_factory = socket.socket
+
+class UnexpectedSource(dns.exception.DNSException):
+
+ """A DNS query response came from an unexpected address or port."""
+
+
+class BadResponse(dns.exception.FormError):
+
+ """A DNS query response does not respond to the question asked."""
+
+
+def _compute_expiration(timeout):
+ if timeout is None:
+ return None
+ else:
+ return time.time() + timeout
+
+
+def _poll_for(fd, readable, writable, error, timeout):
+ """Poll polling backend.
+ @param fd: File descriptor
+ @type fd: int
+ @param readable: Whether to wait for readability
+ @type readable: bool
+ @param writable: Whether to wait for writability
+ @type writable: bool
+ @param timeout: Deadline timeout (expiration time, in seconds)
+ @type timeout: float
+ @return True on success, False on timeout
+ """
+ event_mask = 0
+ if readable:
+ event_mask |= select.POLLIN
+ if writable:
+ event_mask |= select.POLLOUT
+ if error:
+ event_mask |= select.POLLERR
+
+ pollable = select.poll()
+ pollable.register(fd, event_mask)
+
+ if timeout:
+ event_list = pollable.poll(long(timeout * 1000))
+ else:
+ event_list = pollable.poll()
+
+ return bool(event_list)
+
+
+def _select_for(fd, readable, writable, error, timeout):
+ """Select polling backend.
+ @param fd: File descriptor
+ @type fd: int
+ @param readable: Whether to wait for readability
+ @type readable: bool
+ @param writable: Whether to wait for writability
+ @type writable: bool
+ @param timeout: Deadline timeout (expiration time, in seconds)
+ @type timeout: float
+ @return True on success, False on timeout
+ """
+ rset, wset, xset = [], [], []
+
+ if readable:
+ rset = [fd]
+ if writable:
+ wset = [fd]
+ if error:
+ xset = [fd]
+
+ if timeout is None:
+ (rcount, wcount, xcount) = select.select(rset, wset, xset)
+ else:
+ (rcount, wcount, xcount) = select.select(rset, wset, xset, timeout)
+
+ return bool((rcount or wcount or xcount))
+
+
+def _wait_for(fd, readable, writable, error, expiration):
+ done = False
+ while not done:
+ if expiration is None:
+ timeout = None
+ else:
+ timeout = expiration - time.time()
+ if timeout <= 0.0:
+ raise dns.exception.Timeout
+ try:
+ if not _polling_backend(fd, readable, writable, error, timeout):
+ raise dns.exception.Timeout
+ except select_error as e:
+ if e.args[0] != errno.EINTR:
+ raise e
+ done = True
+
+
+def _set_polling_backend(fn):
+ """
+ Internal API. Do not use.
+ """
+ global _polling_backend
+
+ _polling_backend = fn
+
+if hasattr(select, 'poll'):
+ # Prefer poll() on platforms that support it because it has no
+ # limits on the maximum value of a file descriptor (plus it will
+ # be more efficient for high values).
+ _polling_backend = _poll_for
+else:
+ _polling_backend = _select_for
+
+
+def _wait_for_readable(s, expiration):
+ _wait_for(s, True, False, True, expiration)
+
+
+def _wait_for_writable(s, expiration):
+ _wait_for(s, False, True, True, expiration)
+
+
+def _addresses_equal(af, a1, a2):
+ # Convert the first value of the tuple, which is a textual format
+ # address into binary form, so that we are not confused by different
+ # textual representations of the same address
+ n1 = dns.inet.inet_pton(af, a1[0])
+ n2 = dns.inet.inet_pton(af, a2[0])
+ return n1 == n2 and a1[1:] == a2[1:]
+
+
+def _destination_and_source(af, where, port, source, source_port):
+ # Apply defaults and compute destination and source tuples
+ # suitable for use in connect(), sendto(), or bind().
+ if af is None:
+ try:
+ af = dns.inet.af_for_address(where)
+ except Exception:
+ af = dns.inet.AF_INET
+ if af == dns.inet.AF_INET:
+ destination = (where, port)
+ if source is not None or source_port != 0:
+ if source is None:
+ source = '0.0.0.0'
+ source = (source, source_port)
+ elif af == dns.inet.AF_INET6:
+ destination = (where, port, 0, 0)
+ if source is not None or source_port != 0:
+ if source is None:
+ source = '::'
+ source = (source, source_port, 0, 0)
+ return (af, destination, source)
+
+
+def udp(q, where, timeout=None, port=53, af=None, source=None, source_port=0,
+ ignore_unexpected=False, one_rr_per_rrset=False):
+ """Return the response obtained after sending a query via UDP.
+
+ @param q: the query
+ @type q: dns.message.Message
+ @param where: where to send the message
+ @type where: string containing an IPv4 or IPv6 address
+ @param timeout: The number of seconds to wait before the query times out.
+ If None, the default, wait forever.
+ @type timeout: float
+ @param port: The port to which to send the message. The default is 53.
+ @type port: int
+ @param af: the address family to use. The default is None, which
+ causes the address family to use to be inferred from the form of where.
+ If the inference attempt fails, AF_INET is used.
+ @type af: int
+ @rtype: dns.message.Message object
+ @param source: source address. The default is the wildcard address.
+ @type source: string
+ @param source_port: The port from which to send the message.
+ The default is 0.
+ @type source_port: int
+ @param ignore_unexpected: If True, ignore responses from unexpected
+ sources. The default is False.
+ @type ignore_unexpected: bool
+ @param one_rr_per_rrset: Put each RR into its own RRset
+ @type one_rr_per_rrset: bool
+ """
+
+ wire = q.to_wire()
+ (af, destination, source) = _destination_and_source(af, where, port,
+ source, source_port)
+ s = socket_factory(af, socket.SOCK_DGRAM, 0)
+ begin_time = None
+ try:
+ expiration = _compute_expiration(timeout)
+ s.setblocking(0)
+ if source is not None:
+ s.bind(source)
+ _wait_for_writable(s, expiration)
+ begin_time = time.time()
+ s.sendto(wire, destination)
+ while 1:
+ _wait_for_readable(s, expiration)
+ (wire, from_address) = s.recvfrom(65535)
+ if _addresses_equal(af, from_address, destination) or \
+ (dns.inet.is_multicast(where) and
+ from_address[1:] == destination[1:]):
+ break
+ if not ignore_unexpected:
+ raise UnexpectedSource('got a response from '
+ '%s instead of %s' % (from_address,
+ destination))
+ finally:
+ if begin_time is None:
+ response_time = 0
+ else:
+ response_time = time.time() - begin_time
+ s.close()
+ r = dns.message.from_wire(wire, keyring=q.keyring, request_mac=q.mac,
+ one_rr_per_rrset=one_rr_per_rrset)
+ r.time = response_time
+ if not q.is_response(r):
+ raise BadResponse
+ return r
+
+
+def _net_read(sock, count, expiration):
+ """Read the specified number of bytes from sock. Keep trying until we
+ either get the desired amount, or we hit EOF.
+ A Timeout exception will be raised if the operation is not completed
+ by the expiration time.
+ """
+ s = b''
+ while count > 0:
+ _wait_for_readable(sock, expiration)
+ n = sock.recv(count)
+ if n == b'':
+ raise EOFError
+ count = count - len(n)
+ s = s + n
+ return s
+
+
+def _net_write(sock, data, expiration):
+ """Write the specified data to the socket.
+ A Timeout exception will be raised if the operation is not completed
+ by the expiration time.
+ """
+ current = 0
+ l = len(data)
+ while current < l:
+ _wait_for_writable(sock, expiration)
+ current += sock.send(data[current:])
+
+
+def _connect(s, address):
+ try:
+ s.connect(address)
+ except socket.error:
+ (ty, v) = sys.exc_info()[:2]
+
+ if hasattr(v, 'errno'):
+ v_err = v.errno
+ else:
+ v_err = v[0]
+ if v_err not in [errno.EINPROGRESS, errno.EWOULDBLOCK, errno.EALREADY]:
+ raise v
+
+
+def tcp(q, where, timeout=None, port=53, af=None, source=None, source_port=0,
+ one_rr_per_rrset=False):
+ """Return the response obtained after sending a query via TCP.
+
+ @param q: the query
+ @type q: dns.message.Message object
+ @param where: where to send the message
+ @type where: string containing an IPv4 or IPv6 address
+ @param timeout: The number of seconds to wait before the query times out.
+ If None, the default, wait forever.
+ @type timeout: float
+ @param port: The port to which to send the message. The default is 53.
+ @type port: int
+ @param af: the address family to use. The default is None, which
+ causes the address family to use to be inferred from the form of where.
+ If the inference attempt fails, AF_INET is used.
+ @type af: int
+ @rtype: dns.message.Message object
+ @param source: source address. The default is the wildcard address.
+ @type source: string
+ @param source_port: The port from which to send the message.
+ The default is 0.
+ @type source_port: int
+ @param one_rr_per_rrset: Put each RR into its own RRset
+ @type one_rr_per_rrset: bool
+ """
+
+ wire = q.to_wire()
+ (af, destination, source) = _destination_and_source(af, where, port,
+ source, source_port)
+ s = socket_factory(af, socket.SOCK_STREAM, 0)
+ begin_time = None
+ try:
+ expiration = _compute_expiration(timeout)
+ s.setblocking(0)
+ begin_time = time.time()
+ if source is not None:
+ s.bind(source)
+ _connect(s, destination)
+
+ l = len(wire)
+
+ # copying the wire into tcpmsg is inefficient, but lets us
+ # avoid writev() or doing a short write that would get pushed
+ # onto the net
+ tcpmsg = struct.pack("!H", l) + wire
+ _net_write(s, tcpmsg, expiration)
+ ldata = _net_read(s, 2, expiration)
+ (l,) = struct.unpack("!H", ldata)
+ wire = _net_read(s, l, expiration)
+ finally:
+ if begin_time is None:
+ response_time = 0
+ else:
+ response_time = time.time() - begin_time
+ s.close()
+ r = dns.message.from_wire(wire, keyring=q.keyring, request_mac=q.mac,
+ one_rr_per_rrset=one_rr_per_rrset)
+ r.time = response_time
+ if not q.is_response(r):
+ raise BadResponse
+ return r
+
+
+def xfr(where, zone, rdtype=dns.rdatatype.AXFR, rdclass=dns.rdataclass.IN,
+ timeout=None, port=53, keyring=None, keyname=None, relativize=True,
+ af=None, lifetime=None, source=None, source_port=0, serial=0,
+ use_udp=False, keyalgorithm=dns.tsig.default_algorithm):
+ """Return a generator for the responses to a zone transfer.
+
+ @param where: where to send the message
+ @type where: string containing an IPv4 or IPv6 address
+ @param zone: The name of the zone to transfer
+ @type zone: dns.name.Name object or string
+ @param rdtype: The type of zone transfer. The default is
+ dns.rdatatype.AXFR.
+ @type rdtype: int or string
+ @param rdclass: The class of the zone transfer. The default is
+ dns.rdataclass.IN.
+ @type rdclass: int or string
+ @param timeout: The number of seconds to wait for each response message.
+ If None, the default, wait forever.
+ @type timeout: float
+ @param port: The port to which to send the message. The default is 53.
+ @type port: int
+ @param keyring: The TSIG keyring to use
+ @type keyring: dict
+ @param keyname: The name of the TSIG key to use
+ @type keyname: dns.name.Name object or string
+ @param relativize: If True, all names in the zone will be relativized to
+ the zone origin. It is essential that the relativize setting matches
+ the one specified to dns.zone.from_xfr().
+ @type relativize: bool
+ @param af: the address family to use. The default is None, which
+ causes the address family to use to be inferred from the form of where.
+ If the inference attempt fails, AF_INET is used.
+ @type af: int
+ @param lifetime: The total number of seconds to spend doing the transfer.
+ If None, the default, then there is no limit on the time the transfer may
+ take.
+ @type lifetime: float
+ @rtype: generator of dns.message.Message objects.
+ @param source: source address. The default is the wildcard address.
+ @type source: string
+ @param source_port: The port from which to send the message.
+ The default is 0.
+ @type source_port: int
+ @param serial: The SOA serial number to use as the base for an IXFR diff
+ sequence (only meaningful if rdtype == dns.rdatatype.IXFR).
+ @type serial: int
+ @param use_udp: Use UDP (only meaningful for IXFR)
+ @type use_udp: bool
+ @param keyalgorithm: The TSIG algorithm to use; defaults to
+ dns.tsig.default_algorithm
+ @type keyalgorithm: string
+ """
+
+ if isinstance(zone, string_types):
+ zone = dns.name.from_text(zone)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ q = dns.message.make_query(zone, rdtype, rdclass)
+ if rdtype == dns.rdatatype.IXFR:
+ rrset = dns.rrset.from_text(zone, 0, 'IN', 'SOA',
+ '. . %u 0 0 0 0' % serial)
+ q.authority.append(rrset)
+ if keyring is not None:
+ q.use_tsig(keyring, keyname, algorithm=keyalgorithm)
+ wire = q.to_wire()
+ (af, destination, source) = _destination_and_source(af, where, port,
+ source, source_port)
+ if use_udp:
+ if rdtype != dns.rdatatype.IXFR:
+ raise ValueError('cannot do a UDP AXFR')
+ s = socket_factory(af, socket.SOCK_DGRAM, 0)
+ else:
+ s = socket_factory(af, socket.SOCK_STREAM, 0)
+ s.setblocking(0)
+ if source is not None:
+ s.bind(source)
+ expiration = _compute_expiration(lifetime)
+ _connect(s, destination)
+ l = len(wire)
+ if use_udp:
+ _wait_for_writable(s, expiration)
+ s.send(wire)
+ else:
+ tcpmsg = struct.pack("!H", l) + wire
+ _net_write(s, tcpmsg, expiration)
+ done = False
+ delete_mode = True
+ expecting_SOA = False
+ soa_rrset = None
+ if relativize:
+ origin = zone
+ oname = dns.name.empty
+ else:
+ origin = None
+ oname = zone
+ tsig_ctx = None
+ first = True
+ while not done:
+ mexpiration = _compute_expiration(timeout)
+ if mexpiration is None or mexpiration > expiration:
+ mexpiration = expiration
+ if use_udp:
+ _wait_for_readable(s, expiration)
+ (wire, from_address) = s.recvfrom(65535)
+ else:
+ ldata = _net_read(s, 2, mexpiration)
+ (l,) = struct.unpack("!H", ldata)
+ wire = _net_read(s, l, mexpiration)
+ is_ixfr = (rdtype == dns.rdatatype.IXFR)
+ r = dns.message.from_wire(wire, keyring=q.keyring, request_mac=q.mac,
+ xfr=True, origin=origin, tsig_ctx=tsig_ctx,
+ multi=True, first=first,
+ one_rr_per_rrset=is_ixfr)
+ tsig_ctx = r.tsig_ctx
+ first = False
+ answer_index = 0
+ if soa_rrset is None:
+ if not r.answer or r.answer[0].name != oname:
+ raise dns.exception.FormError(
+ "No answer or RRset not for qname")
+ rrset = r.answer[0]
+ if rrset.rdtype != dns.rdatatype.SOA:
+ raise dns.exception.FormError("first RRset is not an SOA")
+ answer_index = 1
+ soa_rrset = rrset.copy()
+ if rdtype == dns.rdatatype.IXFR:
+ if soa_rrset[0].serial <= serial:
+ #
+ # We're already up-to-date.
+ #
+ done = True
+ else:
+ expecting_SOA = True
+ #
+ # Process SOAs in the answer section (other than the initial
+ # SOA in the first message).
+ #
+ for rrset in r.answer[answer_index:]:
+ if done:
+ raise dns.exception.FormError("answers after final SOA")
+ if rrset.rdtype == dns.rdatatype.SOA and rrset.name == oname:
+ if expecting_SOA:
+ if rrset[0].serial != serial:
+ raise dns.exception.FormError(
+ "IXFR base serial mismatch")
+ expecting_SOA = False
+ elif rdtype == dns.rdatatype.IXFR:
+ delete_mode = not delete_mode
+ #
+ # If this SOA RRset is equal to the first we saw then we're
+ # finished. If this is an IXFR we also check that we're seeing
+ # the record in the expected part of the response.
+ #
+ if rrset == soa_rrset and \
+ (rdtype == dns.rdatatype.AXFR or
+ (rdtype == dns.rdatatype.IXFR and delete_mode)):
+ done = True
+ elif expecting_SOA:
+ #
+ # We made an IXFR request and are expecting another
+ # SOA RR, but saw something else, so this must be an
+ # AXFR response.
+ #
+ rdtype = dns.rdatatype.AXFR
+ expecting_SOA = False
+ if done and q.keyring and not r.had_tsig:
+ raise dns.exception.FormError("missing TSIG")
+ yield r
+ s.close()
diff --git a/Contents/Libraries/Shared/dns/rcode.py b/Contents/Libraries/Shared/dns/rcode.py
new file mode 100644
index 000000000..314815f7c
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rcode.py
@@ -0,0 +1,125 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Result Codes."""
+
+import dns.exception
+from ._compat import long
+
+
+NOERROR = 0
+FORMERR = 1
+SERVFAIL = 2
+NXDOMAIN = 3
+NOTIMP = 4
+REFUSED = 5
+YXDOMAIN = 6
+YXRRSET = 7
+NXRRSET = 8
+NOTAUTH = 9
+NOTZONE = 10
+BADVERS = 16
+
+_by_text = {
+ 'NOERROR': NOERROR,
+ 'FORMERR': FORMERR,
+ 'SERVFAIL': SERVFAIL,
+ 'NXDOMAIN': NXDOMAIN,
+ 'NOTIMP': NOTIMP,
+ 'REFUSED': REFUSED,
+ 'YXDOMAIN': YXDOMAIN,
+ 'YXRRSET': YXRRSET,
+ 'NXRRSET': NXRRSET,
+ 'NOTAUTH': NOTAUTH,
+ 'NOTZONE': NOTZONE,
+ 'BADVERS': BADVERS
+}
+
+# We construct the inverse mapping programmatically to ensure that we
+# cannot make any mistakes (e.g. omissions, cut-and-paste errors) that
+# would cause the mapping not to be a true inverse.
+
+_by_value = dict((y, x) for x, y in _by_text.items())
+
+
+class UnknownRcode(dns.exception.DNSException):
+
+ """A DNS rcode is unknown."""
+
+
+def from_text(text):
+ """Convert text into an rcode.
+
+ @param text: the textual rcode
+ @type text: string
+ @raises UnknownRcode: the rcode is unknown
+ @rtype: int
+ """
+
+ if text.isdigit():
+ v = int(text)
+ if v >= 0 and v <= 4095:
+ return v
+ v = _by_text.get(text.upper())
+ if v is None:
+ raise UnknownRcode
+ return v
+
+
+def from_flags(flags, ednsflags):
+ """Return the rcode value encoded by flags and ednsflags.
+
+ @param flags: the DNS flags
+ @type flags: int
+ @param ednsflags: the EDNS flags
+ @type ednsflags: int
+ @raises ValueError: rcode is < 0 or > 4095
+ @rtype: int
+ """
+
+ value = (flags & 0x000f) | ((ednsflags >> 20) & 0xff0)
+ if value < 0 or value > 4095:
+ raise ValueError('rcode must be >= 0 and <= 4095')
+ return value
+
+
+def to_flags(value):
+ """Return a (flags, ednsflags) tuple which encodes the rcode.
+
+ @param value: the rcode
+ @type value: int
+ @raises ValueError: rcode is < 0 or > 4095
+ @rtype: (int, int) tuple
+ """
+
+ if value < 0 or value > 4095:
+ raise ValueError('rcode must be >= 0 and <= 4095')
+ v = value & 0xf
+ ev = long(value & 0xff0) << 20
+ return (v, ev)
+
+
+def to_text(value):
+ """Convert rcode into text.
+
+ @param value: the rcode
+ @type value: int
+ @rtype: string
+ """
+
+ text = _by_value.get(value)
+ if text is None:
+ text = str(value)
+ return text
diff --git a/Contents/Libraries/Shared/dns/rdata.py b/Contents/Libraries/Shared/dns/rdata.py
new file mode 100644
index 000000000..9e9344d5c
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdata.py
@@ -0,0 +1,458 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS rdata.
+
+@var _rdata_modules: A dictionary mapping a (rdclass, rdtype) tuple to
+the module which implements that type.
+@type _rdata_modules: dict
+@var _module_prefix: The prefix to use when forming modules names. The
+default is 'dns.rdtypes'. Changing this value will break the library.
+@type _module_prefix: string
+@var _hex_chunk: At most this many octets that will be represented in each
+chunk of hexstring that _hexify() produces before whitespace occurs.
+@type _hex_chunk: int"""
+
+from io import BytesIO
+import base64
+import binascii
+
+import dns.exception
+import dns.name
+import dns.rdataclass
+import dns.rdatatype
+import dns.tokenizer
+import dns.wiredata
+from ._compat import xrange, string_types, text_type
+
+_hex_chunksize = 32
+
+
+def _hexify(data, chunksize=_hex_chunksize):
+ """Convert a binary string into its hex encoding, broken up into chunks
+ of I{chunksize} characters separated by a space.
+
+ @param data: the binary string
+ @type data: string
+ @param chunksize: the chunk size. Default is L{dns.rdata._hex_chunksize}
+ @rtype: string
+ """
+
+ line = binascii.hexlify(data)
+ return b' '.join([line[i:i + chunksize]
+ for i
+ in range(0, len(line), chunksize)]).decode()
+
+_base64_chunksize = 32
+
+
+def _base64ify(data, chunksize=_base64_chunksize):
+ """Convert a binary string into its base64 encoding, broken up into chunks
+ of I{chunksize} characters separated by a space.
+
+ @param data: the binary string
+ @type data: string
+ @param chunksize: the chunk size. Default is
+ L{dns.rdata._base64_chunksize}
+ @rtype: string
+ """
+
+ line = base64.b64encode(data)
+ return b' '.join([line[i:i + chunksize]
+ for i
+ in range(0, len(line), chunksize)]).decode()
+
+__escaped = bytearray(b'"\\')
+
+def _escapify(qstring):
+ """Escape the characters in a quoted string which need it.
+
+ @param qstring: the string
+ @type qstring: string
+ @returns: the escaped string
+ @rtype: string
+ """
+
+ if isinstance(qstring, text_type):
+ qstring = qstring.encode()
+ if not isinstance(qstring, bytearray):
+ qstring = bytearray(qstring)
+
+ text = ''
+ for c in qstring:
+ if c in __escaped:
+ text += '\\' + chr(c)
+ elif c >= 0x20 and c < 0x7F:
+ text += chr(c)
+ else:
+ text += '\\%03d' % c
+ return text
+
+
+def _truncate_bitmap(what):
+ """Determine the index of greatest byte that isn't all zeros, and
+ return the bitmap that contains all the bytes less than that index.
+
+ @param what: a string of octets representing a bitmap.
+ @type what: string
+ @rtype: string
+ """
+
+ for i in xrange(len(what) - 1, -1, -1):
+ if what[i] != 0:
+ return what[0: i + 1]
+ return what[0:1]
+
+
+class Rdata(object):
+
+ """Base class for all DNS rdata types.
+ """
+
+ __slots__ = ['rdclass', 'rdtype']
+
+ def __init__(self, rdclass, rdtype):
+ """Initialize an rdata.
+ @param rdclass: The rdata class
+ @type rdclass: int
+ @param rdtype: The rdata type
+ @type rdtype: int
+ """
+
+ self.rdclass = rdclass
+ self.rdtype = rdtype
+
+ def covers(self):
+ """DNS SIG/RRSIG rdatas apply to a specific type; this type is
+ returned by the covers() function. If the rdata type is not
+ SIG or RRSIG, dns.rdatatype.NONE is returned. This is useful when
+ creating rdatasets, allowing the rdataset to contain only RRSIGs
+ of a particular type, e.g. RRSIG(NS).
+ @rtype: int
+ """
+
+ return dns.rdatatype.NONE
+
+ def extended_rdatatype(self):
+ """Return a 32-bit type value, the least significant 16 bits of
+ which are the ordinary DNS type, and the upper 16 bits of which are
+ the "covered" type, if any.
+ @rtype: int
+ """
+
+ return self.covers() << 16 | self.rdtype
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ """Convert an rdata to text format.
+ @rtype: string
+ """
+ raise NotImplementedError
+
+ def to_wire(self, file, compress=None, origin=None):
+ """Convert an rdata to wire format.
+ @rtype: string
+ """
+
+ raise NotImplementedError
+
+ def to_digestable(self, origin=None):
+ """Convert rdata to a format suitable for digesting in hashes. This
+ is also the DNSSEC canonical form."""
+ f = BytesIO()
+ self.to_wire(f, None, origin)
+ return f.getvalue()
+
+ def validate(self):
+ """Check that the current contents of the rdata's fields are
+ valid. If you change an rdata by assigning to its fields,
+ it is a good idea to call validate() when you are done making
+ changes.
+ """
+ dns.rdata.from_text(self.rdclass, self.rdtype, self.to_text())
+
+ def __repr__(self):
+ covers = self.covers()
+ if covers == dns.rdatatype.NONE:
+ ctext = ''
+ else:
+ ctext = '(' + dns.rdatatype.to_text(covers) + ')'
+ return ''
+
+ def __str__(self):
+ return self.to_text()
+
+ def _cmp(self, other):
+ """Compare an rdata with another rdata of the same rdtype and
+ rdclass. Return < 0 if self < other in the DNSSEC ordering,
+ 0 if self == other, and > 0 if self > other.
+ """
+ our = self.to_digestable(dns.name.root)
+ their = other.to_digestable(dns.name.root)
+ if our == their:
+ return 0
+ if our > their:
+ return 1
+
+ return -1
+
+ def __eq__(self, other):
+ if not isinstance(other, Rdata):
+ return False
+ if self.rdclass != other.rdclass or self.rdtype != other.rdtype:
+ return False
+ return self._cmp(other) == 0
+
+ def __ne__(self, other):
+ if not isinstance(other, Rdata):
+ return True
+ if self.rdclass != other.rdclass or self.rdtype != other.rdtype:
+ return True
+ return self._cmp(other) != 0
+
+ def __lt__(self, other):
+ if not isinstance(other, Rdata) or \
+ self.rdclass != other.rdclass or self.rdtype != other.rdtype:
+
+ return NotImplemented
+ return self._cmp(other) < 0
+
+ def __le__(self, other):
+ if not isinstance(other, Rdata) or \
+ self.rdclass != other.rdclass or self.rdtype != other.rdtype:
+ return NotImplemented
+ return self._cmp(other) <= 0
+
+ def __ge__(self, other):
+ if not isinstance(other, Rdata) or \
+ self.rdclass != other.rdclass or self.rdtype != other.rdtype:
+ return NotImplemented
+ return self._cmp(other) >= 0
+
+ def __gt__(self, other):
+ if not isinstance(other, Rdata) or \
+ self.rdclass != other.rdclass or self.rdtype != other.rdtype:
+ return NotImplemented
+ return self._cmp(other) > 0
+
+ def __hash__(self):
+ return hash(self.to_digestable(dns.name.root))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ """Build an rdata object from text format.
+
+ @param rdclass: The rdata class
+ @type rdclass: int
+ @param rdtype: The rdata type
+ @type rdtype: int
+ @param tok: The tokenizer
+ @type tok: dns.tokenizer.Tokenizer
+ @param origin: The origin to use for relative names
+ @type origin: dns.name.Name
+ @param relativize: should names be relativized?
+ @type relativize: bool
+ @rtype: dns.rdata.Rdata instance
+ """
+
+ raise NotImplementedError
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ """Build an rdata object from wire format
+
+ @param rdclass: The rdata class
+ @type rdclass: int
+ @param rdtype: The rdata type
+ @type rdtype: int
+ @param wire: The wire-format message
+ @type wire: string
+ @param current: The offset in wire of the beginning of the rdata.
+ @type current: int
+ @param rdlen: The length of the wire-format rdata
+ @type rdlen: int
+ @param origin: The origin to use for relative names
+ @type origin: dns.name.Name
+ @rtype: dns.rdata.Rdata instance
+ """
+
+ raise NotImplementedError
+
+ def choose_relativity(self, origin=None, relativize=True):
+ """Convert any domain names in the rdata to the specified
+ relativization.
+ """
+
+ pass
+
+
+class GenericRdata(Rdata):
+
+ """Generate Rdata Class
+
+ This class is used for rdata types for which we have no better
+ implementation. It implements the DNS "unknown RRs" scheme.
+ """
+
+ __slots__ = ['data']
+
+ def __init__(self, rdclass, rdtype, data):
+ super(GenericRdata, self).__init__(rdclass, rdtype)
+ self.data = data
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return r'\# %d ' % len(self.data) + _hexify(self.data)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ token = tok.get()
+ if not token.is_identifier() or token.value != '\#':
+ raise dns.exception.SyntaxError(
+ r'generic rdata does not start with \#')
+ length = tok.get_int()
+ chunks = []
+ while 1:
+ token = tok.get()
+ if token.is_eol_or_eof():
+ break
+ chunks.append(token.value.encode())
+ hex = b''.join(chunks)
+ data = binascii.unhexlify(hex)
+ if len(data) != length:
+ raise dns.exception.SyntaxError(
+ 'generic rdata hex data has wrong length')
+ return cls(rdclass, rdtype, data)
+
+ def to_wire(self, file, compress=None, origin=None):
+ file.write(self.data)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ return cls(rdclass, rdtype, wire[current: current + rdlen])
+
+_rdata_modules = {}
+_module_prefix = 'dns.rdtypes'
+
+
+def get_rdata_class(rdclass, rdtype):
+
+ def import_module(name):
+ mod = __import__(name)
+ components = name.split('.')
+ for comp in components[1:]:
+ mod = getattr(mod, comp)
+ return mod
+
+ mod = _rdata_modules.get((rdclass, rdtype))
+ rdclass_text = dns.rdataclass.to_text(rdclass)
+ rdtype_text = dns.rdatatype.to_text(rdtype)
+ rdtype_text = rdtype_text.replace('-', '_')
+ if not mod:
+ mod = _rdata_modules.get((dns.rdatatype.ANY, rdtype))
+ if not mod:
+ try:
+ mod = import_module('.'.join([_module_prefix,
+ rdclass_text, rdtype_text]))
+ _rdata_modules[(rdclass, rdtype)] = mod
+ except ImportError:
+ try:
+ mod = import_module('.'.join([_module_prefix,
+ 'ANY', rdtype_text]))
+ _rdata_modules[(dns.rdataclass.ANY, rdtype)] = mod
+ except ImportError:
+ mod = None
+ if mod:
+ cls = getattr(mod, rdtype_text)
+ else:
+ cls = GenericRdata
+ return cls
+
+
+def from_text(rdclass, rdtype, tok, origin=None, relativize=True):
+ """Build an rdata object from text format.
+
+ This function attempts to dynamically load a class which
+ implements the specified rdata class and type. If there is no
+ class-and-type-specific implementation, the GenericRdata class
+ is used.
+
+ Once a class is chosen, its from_text() class method is called
+ with the parameters to this function.
+
+ If I{tok} is a string, then a tokenizer is created and the string
+ is used as its input.
+
+ @param rdclass: The rdata class
+ @type rdclass: int
+ @param rdtype: The rdata type
+ @type rdtype: int
+ @param tok: The tokenizer or input text
+ @type tok: dns.tokenizer.Tokenizer or string
+ @param origin: The origin to use for relative names
+ @type origin: dns.name.Name
+ @param relativize: Should names be relativized?
+ @type relativize: bool
+ @rtype: dns.rdata.Rdata instance"""
+
+ if isinstance(tok, string_types):
+ tok = dns.tokenizer.Tokenizer(tok)
+ cls = get_rdata_class(rdclass, rdtype)
+ if cls != GenericRdata:
+ # peek at first token
+ token = tok.get()
+ tok.unget(token)
+ if token.is_identifier() and \
+ token.value == r'\#':
+ #
+ # Known type using the generic syntax. Extract the
+ # wire form from the generic syntax, and then run
+ # from_wire on it.
+ #
+ rdata = GenericRdata.from_text(rdclass, rdtype, tok, origin,
+ relativize)
+ return from_wire(rdclass, rdtype, rdata.data, 0, len(rdata.data),
+ origin)
+ return cls.from_text(rdclass, rdtype, tok, origin, relativize)
+
+
+def from_wire(rdclass, rdtype, wire, current, rdlen, origin=None):
+ """Build an rdata object from wire format
+
+ This function attempts to dynamically load a class which
+ implements the specified rdata class and type. If there is no
+ class-and-type-specific implementation, the GenericRdata class
+ is used.
+
+ Once a class is chosen, its from_wire() class method is called
+ with the parameters to this function.
+
+ @param rdclass: The rdata class
+ @type rdclass: int
+ @param rdtype: The rdata type
+ @type rdtype: int
+ @param wire: The wire-format message
+ @type wire: string
+ @param current: The offset in wire of the beginning of the rdata.
+ @type current: int
+ @param rdlen: The length of the wire-format rdata
+ @type rdlen: int
+ @param origin: The origin to use for relative names
+ @type origin: dns.name.Name
+ @rtype: dns.rdata.Rdata instance"""
+
+ wire = dns.wiredata.maybe_wrap(wire)
+ cls = get_rdata_class(rdclass, rdtype)
+ return cls.from_wire(rdclass, rdtype, wire, current, rdlen, origin)
diff --git a/Contents/Libraries/Shared/dns/rdataclass.py b/Contents/Libraries/Shared/dns/rdataclass.py
new file mode 100644
index 000000000..17a4810d5
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdataclass.py
@@ -0,0 +1,118 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Rdata Classes.
+
+@var _by_text: The rdata class textual name to value mapping
+@type _by_text: dict
+@var _by_value: The rdata class value to textual name mapping
+@type _by_value: dict
+@var _metaclasses: If an rdataclass is a metaclass, there will be a mapping
+whose key is the rdatatype value and whose value is True in this dictionary.
+@type _metaclasses: dict"""
+
+import re
+
+import dns.exception
+
+RESERVED0 = 0
+IN = 1
+CH = 3
+HS = 4
+NONE = 254
+ANY = 255
+
+_by_text = {
+ 'RESERVED0': RESERVED0,
+ 'IN': IN,
+ 'CH': CH,
+ 'HS': HS,
+ 'NONE': NONE,
+ 'ANY': ANY
+}
+
+# We construct the inverse mapping programmatically to ensure that we
+# cannot make any mistakes (e.g. omissions, cut-and-paste errors) that
+# would cause the mapping not to be true inverse.
+
+_by_value = dict((y, x) for x, y in _by_text.items())
+
+# Now that we've built the inverse map, we can add class aliases to
+# the _by_text mapping.
+
+_by_text.update({
+ 'INTERNET': IN,
+ 'CHAOS': CH,
+ 'HESIOD': HS
+})
+
+_metaclasses = {
+ NONE: True,
+ ANY: True
+}
+
+_unknown_class_pattern = re.compile('CLASS([0-9]+)$', re.I)
+
+
+class UnknownRdataclass(dns.exception.DNSException):
+
+ """A DNS class is unknown."""
+
+
+def from_text(text):
+ """Convert text into a DNS rdata class value.
+ @param text: the text
+ @type text: string
+ @rtype: int
+ @raises dns.rdataclass.UnknownRdataclass: the class is unknown
+ @raises ValueError: the rdata class value is not >= 0 and <= 65535
+ """
+
+ value = _by_text.get(text.upper())
+ if value is None:
+ match = _unknown_class_pattern.match(text)
+ if match is None:
+ raise UnknownRdataclass
+ value = int(match.group(1))
+ if value < 0 or value > 65535:
+ raise ValueError("class must be between >= 0 and <= 65535")
+ return value
+
+
+def to_text(value):
+ """Convert a DNS rdata class to text.
+ @param value: the rdata class value
+ @type value: int
+ @rtype: string
+ @raises ValueError: the rdata class value is not >= 0 and <= 65535
+ """
+
+ if value < 0 or value > 65535:
+ raise ValueError("class must be between >= 0 and <= 65535")
+ text = _by_value.get(value)
+ if text is None:
+ text = 'CLASS' + repr(value)
+ return text
+
+
+def is_metaclass(rdclass):
+ """True if the class is a metaclass.
+ @param rdclass: the rdata class
+ @type rdclass: int
+ @rtype: bool"""
+
+ if rdclass in _metaclasses:
+ return True
+ return False
diff --git a/Contents/Libraries/Shared/dns/rdataset.py b/Contents/Libraries/Shared/dns/rdataset.py
new file mode 100644
index 000000000..db266f2f0
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdataset.py
@@ -0,0 +1,338 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS rdatasets (an rdataset is a set of rdatas of a given type and class)"""
+
+import random
+from io import StringIO
+import struct
+
+import dns.exception
+import dns.rdatatype
+import dns.rdataclass
+import dns.rdata
+import dns.set
+from ._compat import string_types
+
+# define SimpleSet here for backwards compatibility
+SimpleSet = dns.set.Set
+
+
+class DifferingCovers(dns.exception.DNSException):
+
+ """An attempt was made to add a DNS SIG/RRSIG whose covered type
+ is not the same as that of the other rdatas in the rdataset."""
+
+
+class IncompatibleTypes(dns.exception.DNSException):
+
+ """An attempt was made to add DNS RR data of an incompatible type."""
+
+
+class Rdataset(dns.set.Set):
+
+ """A DNS rdataset.
+
+ @ivar rdclass: The class of the rdataset
+ @type rdclass: int
+ @ivar rdtype: The type of the rdataset
+ @type rdtype: int
+ @ivar covers: The covered type. Usually this value is
+ dns.rdatatype.NONE, but if the rdtype is dns.rdatatype.SIG or
+ dns.rdatatype.RRSIG, then the covers value will be the rdata
+ type the SIG/RRSIG covers. The library treats the SIG and RRSIG
+ types as if they were a family of
+ types, e.g. RRSIG(A), RRSIG(NS), RRSIG(SOA). This makes RRSIGs much
+ easier to work with than if RRSIGs covering different rdata
+ types were aggregated into a single RRSIG rdataset.
+ @type covers: int
+ @ivar ttl: The DNS TTL (Time To Live) value
+ @type ttl: int
+ """
+
+ __slots__ = ['rdclass', 'rdtype', 'covers', 'ttl']
+
+ def __init__(self, rdclass, rdtype, covers=dns.rdatatype.NONE):
+ """Create a new rdataset of the specified class and type.
+
+ @see: the description of the class instance variables for the
+ meaning of I{rdclass} and I{rdtype}"""
+
+ super(Rdataset, self).__init__()
+ self.rdclass = rdclass
+ self.rdtype = rdtype
+ self.covers = covers
+ self.ttl = 0
+
+ def _clone(self):
+ obj = super(Rdataset, self)._clone()
+ obj.rdclass = self.rdclass
+ obj.rdtype = self.rdtype
+ obj.covers = self.covers
+ obj.ttl = self.ttl
+ return obj
+
+ def update_ttl(self, ttl):
+ """Set the TTL of the rdataset to be the lesser of the set's current
+ TTL or the specified TTL. If the set contains no rdatas, set the TTL
+ to the specified TTL.
+ @param ttl: The TTL
+ @type ttl: int"""
+
+ if len(self) == 0:
+ self.ttl = ttl
+ elif ttl < self.ttl:
+ self.ttl = ttl
+
+ def add(self, rd, ttl=None):
+ """Add the specified rdata to the rdataset.
+
+ If the optional I{ttl} parameter is supplied, then
+ self.update_ttl(ttl) will be called prior to adding the rdata.
+
+ @param rd: The rdata
+ @type rd: dns.rdata.Rdata object
+ @param ttl: The TTL
+ @type ttl: int"""
+
+ #
+ # If we're adding a signature, do some special handling to
+ # check that the signature covers the same type as the
+ # other rdatas in this rdataset. If this is the first rdata
+ # in the set, initialize the covers field.
+ #
+ if self.rdclass != rd.rdclass or self.rdtype != rd.rdtype:
+ raise IncompatibleTypes
+ if ttl is not None:
+ self.update_ttl(ttl)
+ if self.rdtype == dns.rdatatype.RRSIG or \
+ self.rdtype == dns.rdatatype.SIG:
+ covers = rd.covers()
+ if len(self) == 0 and self.covers == dns.rdatatype.NONE:
+ self.covers = covers
+ elif self.covers != covers:
+ raise DifferingCovers
+ if dns.rdatatype.is_singleton(rd.rdtype) and len(self) > 0:
+ self.clear()
+ super(Rdataset, self).add(rd)
+
+ def union_update(self, other):
+ self.update_ttl(other.ttl)
+ super(Rdataset, self).union_update(other)
+
+ def intersection_update(self, other):
+ self.update_ttl(other.ttl)
+ super(Rdataset, self).intersection_update(other)
+
+ def update(self, other):
+ """Add all rdatas in other to self.
+
+ @param other: The rdataset from which to update
+ @type other: dns.rdataset.Rdataset object"""
+
+ self.update_ttl(other.ttl)
+ super(Rdataset, self).update(other)
+
+ def __repr__(self):
+ if self.covers == 0:
+ ctext = ''
+ else:
+ ctext = '(' + dns.rdatatype.to_text(self.covers) + ')'
+ return ''
+
+ def __str__(self):
+ return self.to_text()
+
+ def __eq__(self, other):
+ """Two rdatasets are equal if they have the same class, type, and
+ covers, and contain the same rdata.
+ @rtype: bool"""
+
+ if not isinstance(other, Rdataset):
+ return False
+ if self.rdclass != other.rdclass or \
+ self.rdtype != other.rdtype or \
+ self.covers != other.covers:
+ return False
+ return super(Rdataset, self).__eq__(other)
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def to_text(self, name=None, origin=None, relativize=True,
+ override_rdclass=None, **kw):
+ """Convert the rdataset into DNS master file format.
+
+ @see: L{dns.name.Name.choose_relativity} for more information
+ on how I{origin} and I{relativize} determine the way names
+ are emitted.
+
+ Any additional keyword arguments are passed on to the rdata
+ to_text() method.
+
+ @param name: If name is not None, emit a RRs with I{name} as
+ the owner name.
+ @type name: dns.name.Name object
+ @param origin: The origin for relative names, or None.
+ @type origin: dns.name.Name object
+ @param relativize: True if names should names be relativized
+ @type relativize: bool"""
+ if name is not None:
+ name = name.choose_relativity(origin, relativize)
+ ntext = str(name)
+ pad = ' '
+ else:
+ ntext = ''
+ pad = ''
+ s = StringIO()
+ if override_rdclass is not None:
+ rdclass = override_rdclass
+ else:
+ rdclass = self.rdclass
+ if len(self) == 0:
+ #
+ # Empty rdatasets are used for the question section, and in
+ # some dynamic updates, so we don't need to print out the TTL
+ # (which is meaningless anyway).
+ #
+ s.write(u'%s%s%s %s\n' % (ntext, pad,
+ dns.rdataclass.to_text(rdclass),
+ dns.rdatatype.to_text(self.rdtype)))
+ else:
+ for rd in self:
+ s.write(u'%s%s%d %s %s %s\n' %
+ (ntext, pad, self.ttl, dns.rdataclass.to_text(rdclass),
+ dns.rdatatype.to_text(self.rdtype),
+ rd.to_text(origin=origin, relativize=relativize,
+ **kw)))
+ #
+ # We strip off the final \n for the caller's convenience in printing
+ #
+ return s.getvalue()[:-1]
+
+ def to_wire(self, name, file, compress=None, origin=None,
+ override_rdclass=None, want_shuffle=True):
+ """Convert the rdataset to wire format.
+
+ @param name: The owner name of the RRset that will be emitted
+ @type name: dns.name.Name object
+ @param file: The file to which the wire format data will be appended
+ @type file: file
+ @param compress: The compression table to use; the default is None.
+ @type compress: dict
+ @param origin: The origin to be appended to any relative names when
+ they are emitted. The default is None.
+ @returns: the number of records emitted
+ @rtype: int
+ """
+
+ if override_rdclass is not None:
+ rdclass = override_rdclass
+ want_shuffle = False
+ else:
+ rdclass = self.rdclass
+ file.seek(0, 2)
+ if len(self) == 0:
+ name.to_wire(file, compress, origin)
+ stuff = struct.pack("!HHIH", self.rdtype, rdclass, 0, 0)
+ file.write(stuff)
+ return 1
+ else:
+ if want_shuffle:
+ l = list(self)
+ random.shuffle(l)
+ else:
+ l = self
+ for rd in l:
+ name.to_wire(file, compress, origin)
+ stuff = struct.pack("!HHIH", self.rdtype, rdclass,
+ self.ttl, 0)
+ file.write(stuff)
+ start = file.tell()
+ rd.to_wire(file, compress, origin)
+ end = file.tell()
+ assert end - start < 65536
+ file.seek(start - 2)
+ stuff = struct.pack("!H", end - start)
+ file.write(stuff)
+ file.seek(0, 2)
+ return len(self)
+
+ def match(self, rdclass, rdtype, covers):
+ """Returns True if this rdataset matches the specified class, type,
+ and covers"""
+ if self.rdclass == rdclass and \
+ self.rdtype == rdtype and \
+ self.covers == covers:
+ return True
+ return False
+
+
+def from_text_list(rdclass, rdtype, ttl, text_rdatas):
+ """Create an rdataset with the specified class, type, and TTL, and with
+ the specified list of rdatas in text format.
+
+ @rtype: dns.rdataset.Rdataset object
+ """
+
+ if isinstance(rdclass, string_types):
+ rdclass = dns.rdataclass.from_text(rdclass)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ r = Rdataset(rdclass, rdtype)
+ r.update_ttl(ttl)
+ for t in text_rdatas:
+ rd = dns.rdata.from_text(r.rdclass, r.rdtype, t)
+ r.add(rd)
+ return r
+
+
+def from_text(rdclass, rdtype, ttl, *text_rdatas):
+ """Create an rdataset with the specified class, type, and TTL, and with
+ the specified rdatas in text format.
+
+ @rtype: dns.rdataset.Rdataset object
+ """
+
+ return from_text_list(rdclass, rdtype, ttl, text_rdatas)
+
+
+def from_rdata_list(ttl, rdatas):
+ """Create an rdataset with the specified TTL, and with
+ the specified list of rdata objects.
+
+ @rtype: dns.rdataset.Rdataset object
+ """
+
+ if len(rdatas) == 0:
+ raise ValueError("rdata list must not be empty")
+ r = None
+ for rd in rdatas:
+ if r is None:
+ r = Rdataset(rd.rdclass, rd.rdtype)
+ r.update_ttl(ttl)
+ r.add(rd)
+ return r
+
+
+def from_rdata(ttl, *rdatas):
+ """Create an rdataset with the specified TTL, and with
+ the specified rdata objects.
+
+ @rtype: dns.rdataset.Rdataset object
+ """
+
+ return from_rdata_list(ttl, rdatas)
diff --git a/Contents/Libraries/Shared/dns/rdatatype.py b/Contents/Libraries/Shared/dns/rdatatype.py
new file mode 100644
index 000000000..15284f64d
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdatatype.py
@@ -0,0 +1,255 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Rdata Types.
+
+@var _by_text: The rdata type textual name to value mapping
+@type _by_text: dict
+@var _by_value: The rdata type value to textual name mapping
+@type _by_value: dict
+@var _metatypes: If an rdatatype is a metatype, there will be a mapping
+whose key is the rdatatype value and whose value is True in this dictionary.
+@type _metatypes: dict
+@var _singletons: If an rdatatype is a singleton, there will be a mapping
+whose key is the rdatatype value and whose value is True in this dictionary.
+@type _singletons: dict"""
+
+import re
+
+import dns.exception
+
+NONE = 0
+A = 1
+NS = 2
+MD = 3
+MF = 4
+CNAME = 5
+SOA = 6
+MB = 7
+MG = 8
+MR = 9
+NULL = 10
+WKS = 11
+PTR = 12
+HINFO = 13
+MINFO = 14
+MX = 15
+TXT = 16
+RP = 17
+AFSDB = 18
+X25 = 19
+ISDN = 20
+RT = 21
+NSAP = 22
+NSAP_PTR = 23
+SIG = 24
+KEY = 25
+PX = 26
+GPOS = 27
+AAAA = 28
+LOC = 29
+NXT = 30
+SRV = 33
+NAPTR = 35
+KX = 36
+CERT = 37
+A6 = 38
+DNAME = 39
+OPT = 41
+APL = 42
+DS = 43
+SSHFP = 44
+IPSECKEY = 45
+RRSIG = 46
+NSEC = 47
+DNSKEY = 48
+DHCID = 49
+NSEC3 = 50
+NSEC3PARAM = 51
+TLSA = 52
+HIP = 55
+CDS = 59
+CDNSKEY = 60
+CSYNC = 62
+SPF = 99
+UNSPEC = 103
+EUI48 = 108
+EUI64 = 109
+TKEY = 249
+TSIG = 250
+IXFR = 251
+AXFR = 252
+MAILB = 253
+MAILA = 254
+ANY = 255
+URI = 256
+CAA = 257
+AVC = 258
+TA = 32768
+DLV = 32769
+
+_by_text = {
+ 'NONE': NONE,
+ 'A': A,
+ 'NS': NS,
+ 'MD': MD,
+ 'MF': MF,
+ 'CNAME': CNAME,
+ 'SOA': SOA,
+ 'MB': MB,
+ 'MG': MG,
+ 'MR': MR,
+ 'NULL': NULL,
+ 'WKS': WKS,
+ 'PTR': PTR,
+ 'HINFO': HINFO,
+ 'MINFO': MINFO,
+ 'MX': MX,
+ 'TXT': TXT,
+ 'RP': RP,
+ 'AFSDB': AFSDB,
+ 'X25': X25,
+ 'ISDN': ISDN,
+ 'RT': RT,
+ 'NSAP': NSAP,
+ 'NSAP-PTR': NSAP_PTR,
+ 'SIG': SIG,
+ 'KEY': KEY,
+ 'PX': PX,
+ 'GPOS': GPOS,
+ 'AAAA': AAAA,
+ 'LOC': LOC,
+ 'NXT': NXT,
+ 'SRV': SRV,
+ 'NAPTR': NAPTR,
+ 'KX': KX,
+ 'CERT': CERT,
+ 'A6': A6,
+ 'DNAME': DNAME,
+ 'OPT': OPT,
+ 'APL': APL,
+ 'DS': DS,
+ 'SSHFP': SSHFP,
+ 'IPSECKEY': IPSECKEY,
+ 'RRSIG': RRSIG,
+ 'NSEC': NSEC,
+ 'DNSKEY': DNSKEY,
+ 'DHCID': DHCID,
+ 'NSEC3': NSEC3,
+ 'NSEC3PARAM': NSEC3PARAM,
+ 'TLSA': TLSA,
+ 'HIP': HIP,
+ 'CDS': CDS,
+ 'CDNSKEY': CDNSKEY,
+ 'CSYNC': CSYNC,
+ 'SPF': SPF,
+ 'UNSPEC': UNSPEC,
+ 'EUI48': EUI48,
+ 'EUI64': EUI64,
+ 'TKEY': TKEY,
+ 'TSIG': TSIG,
+ 'IXFR': IXFR,
+ 'AXFR': AXFR,
+ 'MAILB': MAILB,
+ 'MAILA': MAILA,
+ 'ANY': ANY,
+ 'URI': URI,
+ 'CAA': CAA,
+ 'AVC': AVC,
+ 'TA': TA,
+ 'DLV': DLV,
+}
+
+# We construct the inverse mapping programmatically to ensure that we
+# cannot make any mistakes (e.g. omissions, cut-and-paste errors) that
+# would cause the mapping not to be true inverse.
+
+_by_value = dict((y, x) for x, y in _by_text.items())
+
+
+_metatypes = {
+ OPT: True
+}
+
+_singletons = {
+ SOA: True,
+ NXT: True,
+ DNAME: True,
+ NSEC: True,
+ # CNAME is technically a singleton, but we allow multiple CNAMEs.
+}
+
+_unknown_type_pattern = re.compile('TYPE([0-9]+)$', re.I)
+
+
+class UnknownRdatatype(dns.exception.DNSException):
+
+ """DNS resource record type is unknown."""
+
+
+def from_text(text):
+ """Convert text into a DNS rdata type value.
+ @param text: the text
+ @type text: string
+ @raises dns.rdatatype.UnknownRdatatype: the type is unknown
+ @raises ValueError: the rdata type value is not >= 0 and <= 65535
+ @rtype: int"""
+
+ value = _by_text.get(text.upper())
+ if value is None:
+ match = _unknown_type_pattern.match(text)
+ if match is None:
+ raise UnknownRdatatype
+ value = int(match.group(1))
+ if value < 0 or value > 65535:
+ raise ValueError("type must be between >= 0 and <= 65535")
+ return value
+
+
+def to_text(value):
+ """Convert a DNS rdata type to text.
+ @param value: the rdata type value
+ @type value: int
+ @raises ValueError: the rdata type value is not >= 0 and <= 65535
+ @rtype: string"""
+
+ if value < 0 or value > 65535:
+ raise ValueError("type must be between >= 0 and <= 65535")
+ text = _by_value.get(value)
+ if text is None:
+ text = 'TYPE' + repr(value)
+ return text
+
+
+def is_metatype(rdtype):
+ """True if the type is a metatype.
+ @param rdtype: the type
+ @type rdtype: int
+ @rtype: bool"""
+
+ if rdtype >= TKEY and rdtype <= ANY or rdtype in _metatypes:
+ return True
+ return False
+
+
+def is_singleton(rdtype):
+ """True if the type is a singleton.
+ @param rdtype: the type
+ @type rdtype: int
+ @rtype: bool"""
+
+ if rdtype in _singletons:
+ return True
+ return False
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/AFSDB.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/AFSDB.py
new file mode 100644
index 000000000..f3d515403
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/AFSDB.py
@@ -0,0 +1,53 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.mxbase
+
+
+class AFSDB(dns.rdtypes.mxbase.UncompressedDowncasingMX):
+
+ """AFSDB record
+
+ @ivar subtype: the subtype value
+ @type subtype: int
+ @ivar hostname: the hostname name
+ @type hostname: dns.name.Name object"""
+
+ # Use the property mechanism to make "subtype" an alias for the
+ # "preference" attribute, and "hostname" an alias for the "exchange"
+ # attribute.
+ #
+ # This lets us inherit the UncompressedMX implementation but lets
+ # the caller use appropriate attribute names for the rdata type.
+ #
+ # We probably lose some performance vs. a cut-and-paste
+ # implementation, but this way we don't copy code, and that's
+ # good.
+
+ def get_subtype(self):
+ return self.preference
+
+ def set_subtype(self, subtype):
+ self.preference = subtype
+
+ subtype = property(get_subtype, set_subtype)
+
+ def get_hostname(self):
+ return self.exchange
+
+ def set_hostname(self, hostname):
+ self.exchange = hostname
+
+ hostname = property(get_hostname, set_hostname)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/AVC.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/AVC.py
new file mode 100644
index 000000000..137c9de92
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/AVC.py
@@ -0,0 +1,23 @@
+# Copyright (C) 2016 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.txtbase
+
+
+class AVC(dns.rdtypes.txtbase.TXTBase):
+
+ """AVC record
+
+ @see: U{http://www.iana.org/assignments/dns-parameters/AVC/avc-completed-template}"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/CAA.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/CAA.py
new file mode 100644
index 000000000..f2e41ad0b
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/CAA.py
@@ -0,0 +1,73 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.tokenizer
+
+
+class CAA(dns.rdata.Rdata):
+
+ """CAA (Certification Authority Authorization) record
+
+ @ivar flags: the flags
+ @type flags: int
+ @ivar tag: the tag
+ @type tag: string
+ @ivar value: the value
+ @type value: string
+ @see: RFC 6844"""
+
+ __slots__ = ['flags', 'tag', 'value']
+
+ def __init__(self, rdclass, rdtype, flags, tag, value):
+ super(CAA, self).__init__(rdclass, rdtype)
+ self.flags = flags
+ self.tag = tag
+ self.value = value
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%u %s "%s"' % (self.flags,
+ dns.rdata._escapify(self.tag),
+ dns.rdata._escapify(self.value))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ flags = tok.get_uint8()
+ tag = tok.get_string().encode()
+ if len(tag) > 255:
+ raise dns.exception.SyntaxError("tag too long")
+ if not tag.isalnum():
+ raise dns.exception.SyntaxError("tag is not alphanumeric")
+ value = tok.get_string().encode()
+ return cls(rdclass, rdtype, flags, tag, value)
+
+ def to_wire(self, file, compress=None, origin=None):
+ file.write(struct.pack('!B', self.flags))
+ l = len(self.tag)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(self.tag)
+ file.write(self.value)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (flags, l) = struct.unpack('!BB', wire[current: current + 2])
+ current += 2
+ tag = wire[current: current + l]
+ value = wire[current + l:current + rdlen - 2]
+ return cls(rdclass, rdtype, flags, tag, value)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/CDNSKEY.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/CDNSKEY.py
new file mode 100644
index 000000000..83f3d51fc
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/CDNSKEY.py
@@ -0,0 +1,25 @@
+# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.dnskeybase
+from dns.rdtypes.dnskeybase import flags_to_text_set, flags_from_text_set
+
+
+__all__ = ['flags_to_text_set', 'flags_from_text_set']
+
+
+class CDNSKEY(dns.rdtypes.dnskeybase.DNSKEYBase):
+
+ """CDNSKEY record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/CDS.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/CDS.py
new file mode 100644
index 000000000..e1abfc368
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/CDS.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.dsbase
+
+
+class CDS(dns.rdtypes.dsbase.DSBase):
+
+ """CDS record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/CERT.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/CERT.py
new file mode 100644
index 000000000..1c35c23d2
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/CERT.py
@@ -0,0 +1,121 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+import base64
+
+import dns.exception
+import dns.dnssec
+import dns.rdata
+import dns.tokenizer
+
+_ctype_by_value = {
+ 1: 'PKIX',
+ 2: 'SPKI',
+ 3: 'PGP',
+ 253: 'URI',
+ 254: 'OID',
+}
+
+_ctype_by_name = {
+ 'PKIX': 1,
+ 'SPKI': 2,
+ 'PGP': 3,
+ 'URI': 253,
+ 'OID': 254,
+}
+
+
+def _ctype_from_text(what):
+ v = _ctype_by_name.get(what)
+ if v is not None:
+ return v
+ return int(what)
+
+
+def _ctype_to_text(what):
+ v = _ctype_by_value.get(what)
+ if v is not None:
+ return v
+ return str(what)
+
+
+class CERT(dns.rdata.Rdata):
+
+ """CERT record
+
+ @ivar certificate_type: certificate type
+ @type certificate_type: int
+ @ivar key_tag: key tag
+ @type key_tag: int
+ @ivar algorithm: algorithm
+ @type algorithm: int
+ @ivar certificate: the certificate or CRL
+ @type certificate: string
+ @see: RFC 2538"""
+
+ __slots__ = ['certificate_type', 'key_tag', 'algorithm', 'certificate']
+
+ def __init__(self, rdclass, rdtype, certificate_type, key_tag, algorithm,
+ certificate):
+ super(CERT, self).__init__(rdclass, rdtype)
+ self.certificate_type = certificate_type
+ self.key_tag = key_tag
+ self.algorithm = algorithm
+ self.certificate = certificate
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ certificate_type = _ctype_to_text(self.certificate_type)
+ return "%s %d %s %s" % (certificate_type, self.key_tag,
+ dns.dnssec.algorithm_to_text(self.algorithm),
+ dns.rdata._base64ify(self.certificate))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ certificate_type = _ctype_from_text(tok.get_string())
+ key_tag = tok.get_uint16()
+ algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
+ if algorithm < 0 or algorithm > 255:
+ raise dns.exception.SyntaxError("bad algorithm type")
+ chunks = []
+ while 1:
+ t = tok.get().unescape()
+ if t.is_eol_or_eof():
+ break
+ if not t.is_identifier():
+ raise dns.exception.SyntaxError
+ chunks.append(t.value.encode())
+ b64 = b''.join(chunks)
+ certificate = base64.b64decode(b64)
+ return cls(rdclass, rdtype, certificate_type, key_tag,
+ algorithm, certificate)
+
+ def to_wire(self, file, compress=None, origin=None):
+ prefix = struct.pack("!HHB", self.certificate_type, self.key_tag,
+ self.algorithm)
+ file.write(prefix)
+ file.write(self.certificate)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ prefix = wire[current: current + 5].unwrap()
+ current += 5
+ rdlen -= 5
+ if rdlen < 0:
+ raise dns.exception.FormError
+ (certificate_type, key_tag, algorithm) = struct.unpack("!HHB", prefix)
+ certificate = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, certificate_type, key_tag, algorithm,
+ certificate)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/CNAME.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/CNAME.py
new file mode 100644
index 000000000..65cf570c7
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/CNAME.py
@@ -0,0 +1,25 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.nsbase
+
+
+class CNAME(dns.rdtypes.nsbase.NSBase):
+
+ """CNAME record
+
+ Note: although CNAME is officially a singleton type, dnspython allows
+ non-singleton CNAME rdatasets because such sets have been commonly
+ used by BIND and other nameservers for load balancing."""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/CSYNC.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/CSYNC.py
new file mode 100644
index 000000000..bf95cb273
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/CSYNC.py
@@ -0,0 +1,124 @@
+# Copyright (C) 2004-2007, 2009-2011, 2016 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.rdatatype
+import dns.name
+from dns._compat import xrange
+
+class CSYNC(dns.rdata.Rdata):
+
+ """CSYNC record
+
+ @ivar serial: the SOA serial number
+ @type serial: int
+ @ivar flags: the CSYNC flags
+ @type flags: int
+ @ivar windows: the windowed bitmap list
+ @type windows: list of (window number, string) tuples"""
+
+ __slots__ = ['serial', 'flags', 'windows']
+
+ def __init__(self, rdclass, rdtype, serial, flags, windows):
+ super(CSYNC, self).__init__(rdclass, rdtype)
+ self.serial = serial
+ self.flags = flags
+ self.windows = windows
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ text = ''
+ for (window, bitmap) in self.windows:
+ bits = []
+ for i in xrange(0, len(bitmap)):
+ byte = bitmap[i]
+ for j in xrange(0, 8):
+ if byte & (0x80 >> j):
+ bits.append(dns.rdatatype.to_text(window * 256 +
+ i * 8 + j))
+ text += (' ' + ' '.join(bits))
+ return '%d %d%s' % (self.serial, self.flags, text)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ serial = tok.get_uint32()
+ flags = tok.get_uint16()
+ rdtypes = []
+ while 1:
+ token = tok.get().unescape()
+ if token.is_eol_or_eof():
+ break
+ nrdtype = dns.rdatatype.from_text(token.value)
+ if nrdtype == 0:
+ raise dns.exception.SyntaxError("CSYNC with bit 0")
+ if nrdtype > 65535:
+ raise dns.exception.SyntaxError("CSYNC with bit > 65535")
+ rdtypes.append(nrdtype)
+ rdtypes.sort()
+ window = 0
+ octets = 0
+ prior_rdtype = 0
+ bitmap = bytearray(b'\0' * 32)
+ windows = []
+ for nrdtype in rdtypes:
+ if nrdtype == prior_rdtype:
+ continue
+ prior_rdtype = nrdtype
+ new_window = nrdtype // 256
+ if new_window != window:
+ windows.append((window, bitmap[0:octets]))
+ bitmap = bytearray(b'\0' * 32)
+ window = new_window
+ offset = nrdtype % 256
+ byte = offset // 8
+ bit = offset % 8
+ octets = byte + 1
+ bitmap[byte] = bitmap[byte] | (0x80 >> bit)
+
+ windows.append((window, bitmap[0:octets]))
+ return cls(rdclass, rdtype, serial, flags, windows)
+
+ def to_wire(self, file, compress=None, origin=None):
+ file.write(struct.pack('!IH', self.serial, self.flags))
+ for (window, bitmap) in self.windows:
+ file.write(struct.pack('!BB', window, len(bitmap)))
+ file.write(bitmap)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ if rdlen < 6:
+ raise dns.exception.FormError("CSYNC too short")
+ (serial, flags) = struct.unpack("!IH", wire[current: current + 6])
+ current += 6
+ rdlen -= 6
+ windows = []
+ while rdlen > 0:
+ if rdlen < 3:
+ raise dns.exception.FormError("CSYNC too short")
+ window = wire[current]
+ octets = wire[current + 1]
+ if octets == 0 or octets > 32:
+ raise dns.exception.FormError("bad CSYNC octets")
+ current += 2
+ rdlen -= 2
+ if rdlen < octets:
+ raise dns.exception.FormError("bad CSYNC bitmap length")
+ bitmap = bytearray(wire[current: current + octets].unwrap())
+ current += octets
+ rdlen -= octets
+ windows.append((window, bitmap))
+ return cls(rdclass, rdtype, serial, flags, windows)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/DLV.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/DLV.py
new file mode 100644
index 000000000..cd1244c19
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/DLV.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.dsbase
+
+
+class DLV(dns.rdtypes.dsbase.DSBase):
+
+ """DLV record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/DNAME.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/DNAME.py
new file mode 100644
index 000000000..dac97214a
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/DNAME.py
@@ -0,0 +1,24 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.nsbase
+
+
+class DNAME(dns.rdtypes.nsbase.UncompressedNS):
+
+ """DNAME record"""
+
+ def to_digestable(self, origin=None):
+ return self.target.to_digestable(origin)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/DNSKEY.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/DNSKEY.py
new file mode 100644
index 000000000..e915e98bb
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/DNSKEY.py
@@ -0,0 +1,25 @@
+# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.dnskeybase
+from dns.rdtypes.dnskeybase import flags_to_text_set, flags_from_text_set
+
+
+__all__ = ['flags_to_text_set', 'flags_from_text_set']
+
+
+class DNSKEY(dns.rdtypes.dnskeybase.DNSKEYBase):
+
+ """DNSKEY record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/DS.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/DS.py
new file mode 100644
index 000000000..577c8d841
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/DS.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.dsbase
+
+
+class DS(dns.rdtypes.dsbase.DSBase):
+
+ """DS record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/EUI48.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/EUI48.py
new file mode 100644
index 000000000..aa260e205
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/EUI48.py
@@ -0,0 +1,29 @@
+# Copyright (C) 2015 Red Hat, Inc.
+# Author: Petr Spacek
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED 'AS IS' AND RED HAT DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.euibase
+
+
+class EUI48(dns.rdtypes.euibase.EUIBase):
+
+ """EUI48 record
+
+ @ivar fingerprint: 48-bit Extended Unique Identifier (EUI-48)
+ @type fingerprint: string
+ @see: rfc7043.txt"""
+
+ byte_len = 6 # 0123456789ab (in hex)
+ text_len = byte_len * 3 - 1 # 01-23-45-67-89-ab
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/EUI64.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/EUI64.py
new file mode 100644
index 000000000..5eba350d8
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/EUI64.py
@@ -0,0 +1,29 @@
+# Copyright (C) 2015 Red Hat, Inc.
+# Author: Petr Spacek
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED 'AS IS' AND RED HAT DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.euibase
+
+
+class EUI64(dns.rdtypes.euibase.EUIBase):
+
+ """EUI64 record
+
+ @ivar fingerprint: 64-bit Extended Unique Identifier (EUI-64)
+ @type fingerprint: string
+ @see: rfc7043.txt"""
+
+ byte_len = 8 # 0123456789abcdef (in hex)
+ text_len = byte_len * 3 - 1 # 01-23-45-67-89-ab-cd-ef
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/GPOS.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/GPOS.py
new file mode 100644
index 000000000..a359a7712
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/GPOS.py
@@ -0,0 +1,160 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.tokenizer
+from dns._compat import long, text_type
+
+
+def _validate_float_string(what):
+ if what[0] == b'-'[0] or what[0] == b'+'[0]:
+ what = what[1:]
+ if what.isdigit():
+ return
+ (left, right) = what.split(b'.')
+ if left == b'' and right == b'':
+ raise dns.exception.FormError
+ if not left == b'' and not left.decode().isdigit():
+ raise dns.exception.FormError
+ if not right == b'' and not right.decode().isdigit():
+ raise dns.exception.FormError
+
+
+def _sanitize(value):
+ if isinstance(value, text_type):
+ return value.encode()
+ return value
+
+
+class GPOS(dns.rdata.Rdata):
+
+ """GPOS record
+
+ @ivar latitude: latitude
+ @type latitude: string
+ @ivar longitude: longitude
+ @type longitude: string
+ @ivar altitude: altitude
+ @type altitude: string
+ @see: RFC 1712"""
+
+ __slots__ = ['latitude', 'longitude', 'altitude']
+
+ def __init__(self, rdclass, rdtype, latitude, longitude, altitude):
+ super(GPOS, self).__init__(rdclass, rdtype)
+ if isinstance(latitude, float) or \
+ isinstance(latitude, int) or \
+ isinstance(latitude, long):
+ latitude = str(latitude)
+ if isinstance(longitude, float) or \
+ isinstance(longitude, int) or \
+ isinstance(longitude, long):
+ longitude = str(longitude)
+ if isinstance(altitude, float) or \
+ isinstance(altitude, int) or \
+ isinstance(altitude, long):
+ altitude = str(altitude)
+ latitude = _sanitize(latitude)
+ longitude = _sanitize(longitude)
+ altitude = _sanitize(altitude)
+ _validate_float_string(latitude)
+ _validate_float_string(longitude)
+ _validate_float_string(altitude)
+ self.latitude = latitude
+ self.longitude = longitude
+ self.altitude = altitude
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%s %s %s' % (self.latitude.decode(),
+ self.longitude.decode(),
+ self.altitude.decode())
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ latitude = tok.get_string()
+ longitude = tok.get_string()
+ altitude = tok.get_string()
+ tok.get_eol()
+ return cls(rdclass, rdtype, latitude, longitude, altitude)
+
+ def to_wire(self, file, compress=None, origin=None):
+ l = len(self.latitude)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(self.latitude)
+ l = len(self.longitude)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(self.longitude)
+ l = len(self.altitude)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(self.altitude)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l > rdlen:
+ raise dns.exception.FormError
+ latitude = wire[current: current + l].unwrap()
+ current += l
+ rdlen -= l
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l > rdlen:
+ raise dns.exception.FormError
+ longitude = wire[current: current + l].unwrap()
+ current += l
+ rdlen -= l
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l != rdlen:
+ raise dns.exception.FormError
+ altitude = wire[current: current + l].unwrap()
+ return cls(rdclass, rdtype, latitude, longitude, altitude)
+
+ def _get_float_latitude(self):
+ return float(self.latitude)
+
+ def _set_float_latitude(self, value):
+ self.latitude = str(value)
+
+ float_latitude = property(_get_float_latitude, _set_float_latitude,
+ doc="latitude as a floating point value")
+
+ def _get_float_longitude(self):
+ return float(self.longitude)
+
+ def _set_float_longitude(self, value):
+ self.longitude = str(value)
+
+ float_longitude = property(_get_float_longitude, _set_float_longitude,
+ doc="longitude as a floating point value")
+
+ def _get_float_altitude(self):
+ return float(self.altitude)
+
+ def _set_float_altitude(self, value):
+ self.altitude = str(value)
+
+ float_altitude = property(_get_float_altitude, _set_float_altitude,
+ doc="altitude as a floating point value")
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/HINFO.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/HINFO.py
new file mode 100644
index 000000000..e5a1bea3d
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/HINFO.py
@@ -0,0 +1,84 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.tokenizer
+from dns._compat import text_type
+
+
+class HINFO(dns.rdata.Rdata):
+
+ """HINFO record
+
+ @ivar cpu: the CPU type
+ @type cpu: string
+ @ivar os: the OS type
+ @type os: string
+ @see: RFC 1035"""
+
+ __slots__ = ['cpu', 'os']
+
+ def __init__(self, rdclass, rdtype, cpu, os):
+ super(HINFO, self).__init__(rdclass, rdtype)
+ if isinstance(cpu, text_type):
+ self.cpu = cpu.encode()
+ else:
+ self.cpu = cpu
+ if isinstance(os, text_type):
+ self.os = os.encode()
+ else:
+ self.os = os
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '"%s" "%s"' % (dns.rdata._escapify(self.cpu),
+ dns.rdata._escapify(self.os))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ cpu = tok.get_string()
+ os = tok.get_string()
+ tok.get_eol()
+ return cls(rdclass, rdtype, cpu, os)
+
+ def to_wire(self, file, compress=None, origin=None):
+ l = len(self.cpu)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(self.cpu)
+ l = len(self.os)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(self.os)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l > rdlen:
+ raise dns.exception.FormError
+ cpu = wire[current:current + l].unwrap()
+ current += l
+ rdlen -= l
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l != rdlen:
+ raise dns.exception.FormError
+ os = wire[current: current + l].unwrap()
+ return cls(rdclass, rdtype, cpu, os)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/HIP.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/HIP.py
new file mode 100644
index 000000000..fbe955c35
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/HIP.py
@@ -0,0 +1,113 @@
+# Copyright (C) 2010, 2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+import base64
+import binascii
+
+import dns.exception
+import dns.rdata
+import dns.rdatatype
+
+
+class HIP(dns.rdata.Rdata):
+
+ """HIP record
+
+ @ivar hit: the host identity tag
+ @type hit: string
+ @ivar algorithm: the public key cryptographic algorithm
+ @type algorithm: int
+ @ivar key: the public key
+ @type key: string
+ @ivar servers: the rendezvous servers
+ @type servers: list of dns.name.Name objects
+ @see: RFC 5205"""
+
+ __slots__ = ['hit', 'algorithm', 'key', 'servers']
+
+ def __init__(self, rdclass, rdtype, hit, algorithm, key, servers):
+ super(HIP, self).__init__(rdclass, rdtype)
+ self.hit = hit
+ self.algorithm = algorithm
+ self.key = key
+ self.servers = servers
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ hit = binascii.hexlify(self.hit).decode()
+ key = base64.b64encode(self.key).replace(b'\n', b'').decode()
+ text = u''
+ servers = []
+ for server in self.servers:
+ servers.append(server.choose_relativity(origin, relativize))
+ if len(servers) > 0:
+ text += (u' ' + u' '.join((x.to_unicode() for x in servers)))
+ return u'%u %s %s%s' % (self.algorithm, hit, key, text)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ algorithm = tok.get_uint8()
+ hit = binascii.unhexlify(tok.get_string().encode())
+ if len(hit) > 255:
+ raise dns.exception.SyntaxError("HIT too long")
+ key = base64.b64decode(tok.get_string().encode())
+ servers = []
+ while 1:
+ token = tok.get()
+ if token.is_eol_or_eof():
+ break
+ server = dns.name.from_text(token.value, origin)
+ server.choose_relativity(origin, relativize)
+ servers.append(server)
+ return cls(rdclass, rdtype, hit, algorithm, key, servers)
+
+ def to_wire(self, file, compress=None, origin=None):
+ lh = len(self.hit)
+ lk = len(self.key)
+ file.write(struct.pack("!BBH", lh, self.algorithm, lk))
+ file.write(self.hit)
+ file.write(self.key)
+ for server in self.servers:
+ server.to_wire(file, None, origin)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (lh, algorithm, lk) = struct.unpack('!BBH',
+ wire[current: current + 4])
+ current += 4
+ rdlen -= 4
+ hit = wire[current: current + lh].unwrap()
+ current += lh
+ rdlen -= lh
+ key = wire[current: current + lk].unwrap()
+ current += lk
+ rdlen -= lk
+ servers = []
+ while rdlen > 0:
+ (server, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ current += cused
+ rdlen -= cused
+ if origin is not None:
+ server = server.relativize(origin)
+ servers.append(server)
+ return cls(rdclass, rdtype, hit, algorithm, key, servers)
+
+ def choose_relativity(self, origin=None, relativize=True):
+ servers = []
+ for server in self.servers:
+ server = server.choose_relativity(origin, relativize)
+ servers.append(server)
+ self.servers = servers
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/ISDN.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/ISDN.py
new file mode 100644
index 000000000..da2ae3af3
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/ISDN.py
@@ -0,0 +1,97 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.tokenizer
+from dns._compat import text_type
+
+
+class ISDN(dns.rdata.Rdata):
+
+ """ISDN record
+
+ @ivar address: the ISDN address
+ @type address: string
+ @ivar subaddress: the ISDN subaddress (or '' if not present)
+ @type subaddress: string
+ @see: RFC 1183"""
+
+ __slots__ = ['address', 'subaddress']
+
+ def __init__(self, rdclass, rdtype, address, subaddress):
+ super(ISDN, self).__init__(rdclass, rdtype)
+ if isinstance(address, text_type):
+ self.address = address.encode()
+ else:
+ self.address = address
+ if isinstance(address, text_type):
+ self.subaddress = subaddress.encode()
+ else:
+ self.subaddress = subaddress
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ if self.subaddress:
+ return '"%s" "%s"' % (dns.rdata._escapify(self.address),
+ dns.rdata._escapify(self.subaddress))
+ else:
+ return '"%s"' % dns.rdata._escapify(self.address)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ address = tok.get_string()
+ t = tok.get()
+ if not t.is_eol_or_eof():
+ tok.unget(t)
+ subaddress = tok.get_string()
+ else:
+ tok.unget(t)
+ subaddress = ''
+ tok.get_eol()
+ return cls(rdclass, rdtype, address, subaddress)
+
+ def to_wire(self, file, compress=None, origin=None):
+ l = len(self.address)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(self.address)
+ l = len(self.subaddress)
+ if l > 0:
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(self.subaddress)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l > rdlen:
+ raise dns.exception.FormError
+ address = wire[current: current + l].unwrap()
+ current += l
+ rdlen -= l
+ if rdlen > 0:
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l != rdlen:
+ raise dns.exception.FormError
+ subaddress = wire[current: current + l].unwrap()
+ else:
+ subaddress = ''
+ return cls(rdclass, rdtype, address, subaddress)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/LOC.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/LOC.py
new file mode 100644
index 000000000..b433da948
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/LOC.py
@@ -0,0 +1,325 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+from __future__ import division
+
+import struct
+
+import dns.exception
+import dns.rdata
+from dns._compat import long, xrange, round_py2_compat
+
+
+_pows = tuple(long(10**i) for i in range(0, 11))
+
+# default values are in centimeters
+_default_size = 100.0
+_default_hprec = 1000000.0
+_default_vprec = 1000.0
+
+
+def _exponent_of(what, desc):
+ if what == 0:
+ return 0
+ exp = None
+ for i in xrange(len(_pows)):
+ if what // _pows[i] == long(0):
+ exp = i - 1
+ break
+ if exp is None or exp < 0:
+ raise dns.exception.SyntaxError("%s value out of bounds" % desc)
+ return exp
+
+
+def _float_to_tuple(what):
+ if what < 0:
+ sign = -1
+ what *= -1
+ else:
+ sign = 1
+ what = round_py2_compat(what * 3600000)
+ degrees = int(what // 3600000)
+ what -= degrees * 3600000
+ minutes = int(what // 60000)
+ what -= minutes * 60000
+ seconds = int(what // 1000)
+ what -= int(seconds * 1000)
+ what = int(what)
+ return (degrees, minutes, seconds, what, sign)
+
+
+def _tuple_to_float(what):
+ value = float(what[0])
+ value += float(what[1]) / 60.0
+ value += float(what[2]) / 3600.0
+ value += float(what[3]) / 3600000.0
+ return float(what[4]) * value
+
+
+def _encode_size(what, desc):
+ what = long(what)
+ exponent = _exponent_of(what, desc) & 0xF
+ base = what // pow(10, exponent) & 0xF
+ return base * 16 + exponent
+
+
+def _decode_size(what, desc):
+ exponent = what & 0x0F
+ if exponent > 9:
+ raise dns.exception.SyntaxError("bad %s exponent" % desc)
+ base = (what & 0xF0) >> 4
+ if base > 9:
+ raise dns.exception.SyntaxError("bad %s base" % desc)
+ return long(base) * pow(10, exponent)
+
+
+class LOC(dns.rdata.Rdata):
+
+ """LOC record
+
+ @ivar latitude: latitude
+ @type latitude: (int, int, int, int, sign) tuple specifying the degrees, minutes,
+ seconds, milliseconds, and sign of the coordinate.
+ @ivar longitude: longitude
+ @type longitude: (int, int, int, int, sign) tuple specifying the degrees,
+ minutes, seconds, milliseconds, and sign of the coordinate.
+ @ivar altitude: altitude
+ @type altitude: float
+ @ivar size: size of the sphere
+ @type size: float
+ @ivar horizontal_precision: horizontal precision
+ @type horizontal_precision: float
+ @ivar vertical_precision: vertical precision
+ @type vertical_precision: float
+ @see: RFC 1876"""
+
+ __slots__ = ['latitude', 'longitude', 'altitude', 'size',
+ 'horizontal_precision', 'vertical_precision']
+
+ def __init__(self, rdclass, rdtype, latitude, longitude, altitude,
+ size=_default_size, hprec=_default_hprec,
+ vprec=_default_vprec):
+ """Initialize a LOC record instance.
+
+ The parameters I{latitude} and I{longitude} may be either a 4-tuple
+ of integers specifying (degrees, minutes, seconds, milliseconds),
+ or they may be floating point values specifying the number of
+ degrees. The other parameters are floats. Size, horizontal precision,
+ and vertical precision are specified in centimeters."""
+
+ super(LOC, self).__init__(rdclass, rdtype)
+ if isinstance(latitude, int) or isinstance(latitude, long):
+ latitude = float(latitude)
+ if isinstance(latitude, float):
+ latitude = _float_to_tuple(latitude)
+ self.latitude = latitude
+ if isinstance(longitude, int) or isinstance(longitude, long):
+ longitude = float(longitude)
+ if isinstance(longitude, float):
+ longitude = _float_to_tuple(longitude)
+ self.longitude = longitude
+ self.altitude = float(altitude)
+ self.size = float(size)
+ self.horizontal_precision = float(hprec)
+ self.vertical_precision = float(vprec)
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ if self.latitude[4] > 0:
+ lat_hemisphere = 'N'
+ else:
+ lat_hemisphere = 'S'
+ if self.longitude[4] > 0:
+ long_hemisphere = 'E'
+ else:
+ long_hemisphere = 'W'
+ text = "%d %d %d.%03d %s %d %d %d.%03d %s %0.2fm" % (
+ self.latitude[0], self.latitude[1],
+ self.latitude[2], self.latitude[3], lat_hemisphere,
+ self.longitude[0], self.longitude[1], self.longitude[2],
+ self.longitude[3], long_hemisphere,
+ self.altitude / 100.0
+ )
+
+ # do not print default values
+ if self.size != _default_size or \
+ self.horizontal_precision != _default_hprec or \
+ self.vertical_precision != _default_vprec:
+ text += " %0.2fm %0.2fm %0.2fm" % (
+ self.size / 100.0, self.horizontal_precision / 100.0,
+ self.vertical_precision / 100.0
+ )
+ return text
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ latitude = [0, 0, 0, 0, 1]
+ longitude = [0, 0, 0, 0, 1]
+ size = _default_size
+ hprec = _default_hprec
+ vprec = _default_vprec
+
+ latitude[0] = tok.get_int()
+ t = tok.get_string()
+ if t.isdigit():
+ latitude[1] = int(t)
+ t = tok.get_string()
+ if '.' in t:
+ (seconds, milliseconds) = t.split('.')
+ if not seconds.isdigit():
+ raise dns.exception.SyntaxError(
+ 'bad latitude seconds value')
+ latitude[2] = int(seconds)
+ if latitude[2] >= 60:
+ raise dns.exception.SyntaxError('latitude seconds >= 60')
+ l = len(milliseconds)
+ if l == 0 or l > 3 or not milliseconds.isdigit():
+ raise dns.exception.SyntaxError(
+ 'bad latitude milliseconds value')
+ if l == 1:
+ m = 100
+ elif l == 2:
+ m = 10
+ else:
+ m = 1
+ latitude[3] = m * int(milliseconds)
+ t = tok.get_string()
+ elif t.isdigit():
+ latitude[2] = int(t)
+ t = tok.get_string()
+ if t == 'S':
+ latitude[4] = -1
+ elif t != 'N':
+ raise dns.exception.SyntaxError('bad latitude hemisphere value')
+
+ longitude[0] = tok.get_int()
+ t = tok.get_string()
+ if t.isdigit():
+ longitude[1] = int(t)
+ t = tok.get_string()
+ if '.' in t:
+ (seconds, milliseconds) = t.split('.')
+ if not seconds.isdigit():
+ raise dns.exception.SyntaxError(
+ 'bad longitude seconds value')
+ longitude[2] = int(seconds)
+ if longitude[2] >= 60:
+ raise dns.exception.SyntaxError('longitude seconds >= 60')
+ l = len(milliseconds)
+ if l == 0 or l > 3 or not milliseconds.isdigit():
+ raise dns.exception.SyntaxError(
+ 'bad longitude milliseconds value')
+ if l == 1:
+ m = 100
+ elif l == 2:
+ m = 10
+ else:
+ m = 1
+ longitude[3] = m * int(milliseconds)
+ t = tok.get_string()
+ elif t.isdigit():
+ longitude[2] = int(t)
+ t = tok.get_string()
+ if t == 'W':
+ longitude[4] = -1
+ elif t != 'E':
+ raise dns.exception.SyntaxError('bad longitude hemisphere value')
+
+ t = tok.get_string()
+ if t[-1] == 'm':
+ t = t[0: -1]
+ altitude = float(t) * 100.0 # m -> cm
+
+ token = tok.get().unescape()
+ if not token.is_eol_or_eof():
+ value = token.value
+ if value[-1] == 'm':
+ value = value[0: -1]
+ size = float(value) * 100.0 # m -> cm
+ token = tok.get().unescape()
+ if not token.is_eol_or_eof():
+ value = token.value
+ if value[-1] == 'm':
+ value = value[0: -1]
+ hprec = float(value) * 100.0 # m -> cm
+ token = tok.get().unescape()
+ if not token.is_eol_or_eof():
+ value = token.value
+ if value[-1] == 'm':
+ value = value[0: -1]
+ vprec = float(value) * 100.0 # m -> cm
+ tok.get_eol()
+
+ return cls(rdclass, rdtype, latitude, longitude, altitude,
+ size, hprec, vprec)
+
+ def to_wire(self, file, compress=None, origin=None):
+ milliseconds = (self.latitude[0] * 3600000 +
+ self.latitude[1] * 60000 +
+ self.latitude[2] * 1000 +
+ self.latitude[3]) * self.latitude[4]
+ latitude = long(0x80000000) + milliseconds
+ milliseconds = (self.longitude[0] * 3600000 +
+ self.longitude[1] * 60000 +
+ self.longitude[2] * 1000 +
+ self.longitude[3]) * self.longitude[4]
+ longitude = long(0x80000000) + milliseconds
+ altitude = long(self.altitude) + long(10000000)
+ size = _encode_size(self.size, "size")
+ hprec = _encode_size(self.horizontal_precision, "horizontal precision")
+ vprec = _encode_size(self.vertical_precision, "vertical precision")
+ wire = struct.pack("!BBBBIII", 0, size, hprec, vprec, latitude,
+ longitude, altitude)
+ file.write(wire)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (version, size, hprec, vprec, latitude, longitude, altitude) = \
+ struct.unpack("!BBBBIII", wire[current: current + rdlen])
+ if latitude > long(0x80000000):
+ latitude = float(latitude - long(0x80000000)) / 3600000
+ else:
+ latitude = -1 * float(long(0x80000000) - latitude) / 3600000
+ if latitude < -90.0 or latitude > 90.0:
+ raise dns.exception.FormError("bad latitude")
+ if longitude > long(0x80000000):
+ longitude = float(longitude - long(0x80000000)) / 3600000
+ else:
+ longitude = -1 * float(long(0x80000000) - longitude) / 3600000
+ if longitude < -180.0 or longitude > 180.0:
+ raise dns.exception.FormError("bad longitude")
+ altitude = float(altitude) - 10000000.0
+ size = _decode_size(size, "size")
+ hprec = _decode_size(hprec, "horizontal precision")
+ vprec = _decode_size(vprec, "vertical precision")
+ return cls(rdclass, rdtype, latitude, longitude, altitude,
+ size, hprec, vprec)
+
+ def _get_float_latitude(self):
+ return _tuple_to_float(self.latitude)
+
+ def _set_float_latitude(self, value):
+ self.latitude = _float_to_tuple(value)
+
+ float_latitude = property(_get_float_latitude, _set_float_latitude,
+ doc="latitude as a floating point value")
+
+ def _get_float_longitude(self):
+ return _tuple_to_float(self.longitude)
+
+ def _set_float_longitude(self, value):
+ self.longitude = _float_to_tuple(value)
+
+ float_longitude = property(_get_float_longitude, _set_float_longitude,
+ doc="longitude as a floating point value")
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/MX.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/MX.py
new file mode 100644
index 000000000..3a6735dc5
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/MX.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.mxbase
+
+
+class MX(dns.rdtypes.mxbase.MXBase):
+
+ """MX record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/NS.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/NS.py
new file mode 100644
index 000000000..ae56d819e
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/NS.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.nsbase
+
+
+class NS(dns.rdtypes.nsbase.NSBase):
+
+ """NS record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/NSEC.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/NSEC.py
new file mode 100644
index 000000000..dfe96859f
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/NSEC.py
@@ -0,0 +1,126 @@
+# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.rdatatype
+import dns.name
+from dns._compat import xrange
+
+
+class NSEC(dns.rdata.Rdata):
+
+ """NSEC record
+
+ @ivar next: the next name
+ @type next: dns.name.Name object
+ @ivar windows: the windowed bitmap list
+ @type windows: list of (window number, string) tuples"""
+
+ __slots__ = ['next', 'windows']
+
+ def __init__(self, rdclass, rdtype, next, windows):
+ super(NSEC, self).__init__(rdclass, rdtype)
+ self.next = next
+ self.windows = windows
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ next = self.next.choose_relativity(origin, relativize)
+ text = ''
+ for (window, bitmap) in self.windows:
+ bits = []
+ for i in xrange(0, len(bitmap)):
+ byte = bitmap[i]
+ for j in xrange(0, 8):
+ if byte & (0x80 >> j):
+ bits.append(dns.rdatatype.to_text(window * 256 +
+ i * 8 + j))
+ text += (' ' + ' '.join(bits))
+ return '%s%s' % (next, text)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ next = tok.get_name()
+ next = next.choose_relativity(origin, relativize)
+ rdtypes = []
+ while 1:
+ token = tok.get().unescape()
+ if token.is_eol_or_eof():
+ break
+ nrdtype = dns.rdatatype.from_text(token.value)
+ if nrdtype == 0:
+ raise dns.exception.SyntaxError("NSEC with bit 0")
+ if nrdtype > 65535:
+ raise dns.exception.SyntaxError("NSEC with bit > 65535")
+ rdtypes.append(nrdtype)
+ rdtypes.sort()
+ window = 0
+ octets = 0
+ prior_rdtype = 0
+ bitmap = bytearray(b'\0' * 32)
+ windows = []
+ for nrdtype in rdtypes:
+ if nrdtype == prior_rdtype:
+ continue
+ prior_rdtype = nrdtype
+ new_window = nrdtype // 256
+ if new_window != window:
+ windows.append((window, bitmap[0:octets]))
+ bitmap = bytearray(b'\0' * 32)
+ window = new_window
+ offset = nrdtype % 256
+ byte = offset // 8
+ bit = offset % 8
+ octets = byte + 1
+ bitmap[byte] = bitmap[byte] | (0x80 >> bit)
+
+ windows.append((window, bitmap[0:octets]))
+ return cls(rdclass, rdtype, next, windows)
+
+ def to_wire(self, file, compress=None, origin=None):
+ self.next.to_wire(file, None, origin)
+ for (window, bitmap) in self.windows:
+ file.write(struct.pack('!BB', window, len(bitmap)))
+ file.write(bitmap)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (next, cused) = dns.name.from_wire(wire[: current + rdlen], current)
+ current += cused
+ rdlen -= cused
+ windows = []
+ while rdlen > 0:
+ if rdlen < 3:
+ raise dns.exception.FormError("NSEC too short")
+ window = wire[current]
+ octets = wire[current + 1]
+ if octets == 0 or octets > 32:
+ raise dns.exception.FormError("bad NSEC octets")
+ current += 2
+ rdlen -= 2
+ if rdlen < octets:
+ raise dns.exception.FormError("bad NSEC bitmap length")
+ bitmap = bytearray(wire[current: current + octets].unwrap())
+ current += octets
+ rdlen -= octets
+ windows.append((window, bitmap))
+ if origin is not None:
+ next = next.relativize(origin)
+ return cls(rdclass, rdtype, next, windows)
+
+ def choose_relativity(self, origin=None, relativize=True):
+ self.next = self.next.choose_relativity(origin, relativize)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/NSEC3.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/NSEC3.py
new file mode 100644
index 000000000..9a15687ba
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/NSEC3.py
@@ -0,0 +1,191 @@
+# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import base64
+import binascii
+import string
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.rdatatype
+from dns._compat import xrange, text_type
+
+try:
+ b32_hex_to_normal = string.maketrans('0123456789ABCDEFGHIJKLMNOPQRSTUV',
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567')
+ b32_normal_to_hex = string.maketrans('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',
+ '0123456789ABCDEFGHIJKLMNOPQRSTUV')
+except AttributeError:
+ b32_hex_to_normal = bytes.maketrans(b'0123456789ABCDEFGHIJKLMNOPQRSTUV',
+ b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567')
+ b32_normal_to_hex = bytes.maketrans(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',
+ b'0123456789ABCDEFGHIJKLMNOPQRSTUV')
+
+# hash algorithm constants
+SHA1 = 1
+
+# flag constants
+OPTOUT = 1
+
+
+class NSEC3(dns.rdata.Rdata):
+
+ """NSEC3 record
+
+ @ivar algorithm: the hash algorithm number
+ @type algorithm: int
+ @ivar flags: the flags
+ @type flags: int
+ @ivar iterations: the number of iterations
+ @type iterations: int
+ @ivar salt: the salt
+ @type salt: string
+ @ivar next: the next name hash
+ @type next: string
+ @ivar windows: the windowed bitmap list
+ @type windows: list of (window number, string) tuples"""
+
+ __slots__ = ['algorithm', 'flags', 'iterations', 'salt', 'next', 'windows']
+
+ def __init__(self, rdclass, rdtype, algorithm, flags, iterations, salt,
+ next, windows):
+ super(NSEC3, self).__init__(rdclass, rdtype)
+ self.algorithm = algorithm
+ self.flags = flags
+ self.iterations = iterations
+ if isinstance(salt, text_type):
+ self.salt = salt.encode()
+ else:
+ self.salt = salt
+ self.next = next
+ self.windows = windows
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ next = base64.b32encode(self.next).translate(
+ b32_normal_to_hex).lower().decode()
+ if self.salt == b'':
+ salt = '-'
+ else:
+ salt = binascii.hexlify(self.salt).decode()
+ text = u''
+ for (window, bitmap) in self.windows:
+ bits = []
+ for i in xrange(0, len(bitmap)):
+ byte = bitmap[i]
+ for j in xrange(0, 8):
+ if byte & (0x80 >> j):
+ bits.append(dns.rdatatype.to_text(window * 256 +
+ i * 8 + j))
+ text += (u' ' + u' '.join(bits))
+ return u'%u %u %u %s %s%s' % (self.algorithm, self.flags,
+ self.iterations, salt, next, text)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ algorithm = tok.get_uint8()
+ flags = tok.get_uint8()
+ iterations = tok.get_uint16()
+ salt = tok.get_string()
+ if salt == u'-':
+ salt = b''
+ else:
+ salt = binascii.unhexlify(salt.encode('ascii'))
+ next = tok.get_string().encode(
+ 'ascii').upper().translate(b32_hex_to_normal)
+ next = base64.b32decode(next)
+ rdtypes = []
+ while 1:
+ token = tok.get().unescape()
+ if token.is_eol_or_eof():
+ break
+ nrdtype = dns.rdatatype.from_text(token.value)
+ if nrdtype == 0:
+ raise dns.exception.SyntaxError("NSEC3 with bit 0")
+ if nrdtype > 65535:
+ raise dns.exception.SyntaxError("NSEC3 with bit > 65535")
+ rdtypes.append(nrdtype)
+ rdtypes.sort()
+ window = 0
+ octets = 0
+ prior_rdtype = 0
+ bitmap = bytearray(b'\0' * 32)
+ windows = []
+ for nrdtype in rdtypes:
+ if nrdtype == prior_rdtype:
+ continue
+ prior_rdtype = nrdtype
+ new_window = nrdtype // 256
+ if new_window != window:
+ if octets != 0:
+ windows.append((window, ''.join(bitmap[0:octets])))
+ bitmap = bytearray(b'\0' * 32)
+ window = new_window
+ offset = nrdtype % 256
+ byte = offset // 8
+ bit = offset % 8
+ octets = byte + 1
+ bitmap[byte] = bitmap[byte] | (0x80 >> bit)
+ if octets != 0:
+ windows.append((window, bitmap[0:octets]))
+ return cls(rdclass, rdtype, algorithm, flags, iterations, salt, next,
+ windows)
+
+ def to_wire(self, file, compress=None, origin=None):
+ l = len(self.salt)
+ file.write(struct.pack("!BBHB", self.algorithm, self.flags,
+ self.iterations, l))
+ file.write(self.salt)
+ l = len(self.next)
+ file.write(struct.pack("!B", l))
+ file.write(self.next)
+ for (window, bitmap) in self.windows:
+ file.write(struct.pack("!BB", window, len(bitmap)))
+ file.write(bitmap)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (algorithm, flags, iterations, slen) = \
+ struct.unpack('!BBHB', wire[current: current + 5])
+
+ current += 5
+ rdlen -= 5
+ salt = wire[current: current + slen].unwrap()
+ current += slen
+ rdlen -= slen
+ nlen = wire[current]
+ current += 1
+ rdlen -= 1
+ next = wire[current: current + nlen].unwrap()
+ current += nlen
+ rdlen -= nlen
+ windows = []
+ while rdlen > 0:
+ if rdlen < 3:
+ raise dns.exception.FormError("NSEC3 too short")
+ window = wire[current]
+ octets = wire[current + 1]
+ if octets == 0 or octets > 32:
+ raise dns.exception.FormError("bad NSEC3 octets")
+ current += 2
+ rdlen -= 2
+ if rdlen < octets:
+ raise dns.exception.FormError("bad NSEC3 bitmap length")
+ bitmap = bytearray(wire[current: current + octets].unwrap())
+ current += octets
+ rdlen -= octets
+ windows.append((window, bitmap))
+ return cls(rdclass, rdtype, algorithm, flags, iterations, salt, next,
+ windows)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/NSEC3PARAM.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/NSEC3PARAM.py
new file mode 100644
index 000000000..36bf74094
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/NSEC3PARAM.py
@@ -0,0 +1,88 @@
+# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+import binascii
+
+import dns.exception
+import dns.rdata
+from dns._compat import text_type
+
+
+class NSEC3PARAM(dns.rdata.Rdata):
+
+ """NSEC3PARAM record
+
+ @ivar algorithm: the hash algorithm number
+ @type algorithm: int
+ @ivar flags: the flags
+ @type flags: int
+ @ivar iterations: the number of iterations
+ @type iterations: int
+ @ivar salt: the salt
+ @type salt: string"""
+
+ __slots__ = ['algorithm', 'flags', 'iterations', 'salt']
+
+ def __init__(self, rdclass, rdtype, algorithm, flags, iterations, salt):
+ super(NSEC3PARAM, self).__init__(rdclass, rdtype)
+ self.algorithm = algorithm
+ self.flags = flags
+ self.iterations = iterations
+ if isinstance(salt, text_type):
+ self.salt = salt.encode()
+ else:
+ self.salt = salt
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ if self.salt == b'':
+ salt = '-'
+ else:
+ salt = binascii.hexlify(self.salt).decode()
+ return '%u %u %u %s' % (self.algorithm, self.flags, self.iterations,
+ salt)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ algorithm = tok.get_uint8()
+ flags = tok.get_uint8()
+ iterations = tok.get_uint16()
+ salt = tok.get_string()
+ if salt == '-':
+ salt = ''
+ else:
+ salt = binascii.unhexlify(salt.encode())
+ tok.get_eol()
+ return cls(rdclass, rdtype, algorithm, flags, iterations, salt)
+
+ def to_wire(self, file, compress=None, origin=None):
+ l = len(self.salt)
+ file.write(struct.pack("!BBHB", self.algorithm, self.flags,
+ self.iterations, l))
+ file.write(self.salt)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (algorithm, flags, iterations, slen) = \
+ struct.unpack('!BBHB',
+ wire[current: current + 5])
+ current += 5
+ rdlen -= 5
+ salt = wire[current: current + slen].unwrap()
+ current += slen
+ rdlen -= slen
+ if rdlen != 0:
+ raise dns.exception.FormError
+ return cls(rdclass, rdtype, algorithm, flags, iterations, salt)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/PTR.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/PTR.py
new file mode 100644
index 000000000..250187a61
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/PTR.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.nsbase
+
+
+class PTR(dns.rdtypes.nsbase.NSBase):
+
+ """PTR record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/RP.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/RP.py
new file mode 100644
index 000000000..e9071c763
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/RP.py
@@ -0,0 +1,80 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.exception
+import dns.rdata
+import dns.name
+
+
+class RP(dns.rdata.Rdata):
+
+ """RP record
+
+ @ivar mbox: The responsible person's mailbox
+ @type mbox: dns.name.Name object
+ @ivar txt: The owner name of a node with TXT records, or the root name
+ if no TXT records are associated with this RP.
+ @type txt: dns.name.Name object
+ @see: RFC 1183"""
+
+ __slots__ = ['mbox', 'txt']
+
+ def __init__(self, rdclass, rdtype, mbox, txt):
+ super(RP, self).__init__(rdclass, rdtype)
+ self.mbox = mbox
+ self.txt = txt
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ mbox = self.mbox.choose_relativity(origin, relativize)
+ txt = self.txt.choose_relativity(origin, relativize)
+ return "%s %s" % (str(mbox), str(txt))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ mbox = tok.get_name()
+ txt = tok.get_name()
+ mbox = mbox.choose_relativity(origin, relativize)
+ txt = txt.choose_relativity(origin, relativize)
+ tok.get_eol()
+ return cls(rdclass, rdtype, mbox, txt)
+
+ def to_wire(self, file, compress=None, origin=None):
+ self.mbox.to_wire(file, None, origin)
+ self.txt.to_wire(file, None, origin)
+
+ def to_digestable(self, origin=None):
+ return self.mbox.to_digestable(origin) + \
+ self.txt.to_digestable(origin)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (mbox, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ current += cused
+ rdlen -= cused
+ if rdlen <= 0:
+ raise dns.exception.FormError
+ (txt, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ if cused != rdlen:
+ raise dns.exception.FormError
+ if origin is not None:
+ mbox = mbox.relativize(origin)
+ txt = txt.relativize(origin)
+ return cls(rdclass, rdtype, mbox, txt)
+
+ def choose_relativity(self, origin=None, relativize=True):
+ self.mbox = self.mbox.choose_relativity(origin, relativize)
+ self.txt = self.txt.choose_relativity(origin, relativize)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/RRSIG.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/RRSIG.py
new file mode 100644
index 000000000..953dfb9a5
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/RRSIG.py
@@ -0,0 +1,156 @@
+# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import base64
+import calendar
+import struct
+import time
+
+import dns.dnssec
+import dns.exception
+import dns.rdata
+import dns.rdatatype
+
+
+class BadSigTime(dns.exception.DNSException):
+
+ """Time in DNS SIG or RRSIG resource record cannot be parsed."""
+
+
+def sigtime_to_posixtime(what):
+ if len(what) != 14:
+ raise BadSigTime
+ year = int(what[0:4])
+ month = int(what[4:6])
+ day = int(what[6:8])
+ hour = int(what[8:10])
+ minute = int(what[10:12])
+ second = int(what[12:14])
+ return calendar.timegm((year, month, day, hour, minute, second,
+ 0, 0, 0))
+
+
+def posixtime_to_sigtime(what):
+ return time.strftime('%Y%m%d%H%M%S', time.gmtime(what))
+
+
+class RRSIG(dns.rdata.Rdata):
+
+ """RRSIG record
+
+ @ivar type_covered: the rdata type this signature covers
+ @type type_covered: int
+ @ivar algorithm: the algorithm used for the sig
+ @type algorithm: int
+ @ivar labels: number of labels
+ @type labels: int
+ @ivar original_ttl: the original TTL
+ @type original_ttl: long
+ @ivar expiration: signature expiration time
+ @type expiration: long
+ @ivar inception: signature inception time
+ @type inception: long
+ @ivar key_tag: the key tag
+ @type key_tag: int
+ @ivar signer: the signer
+ @type signer: dns.name.Name object
+ @ivar signature: the signature
+ @type signature: string"""
+
+ __slots__ = ['type_covered', 'algorithm', 'labels', 'original_ttl',
+ 'expiration', 'inception', 'key_tag', 'signer',
+ 'signature']
+
+ def __init__(self, rdclass, rdtype, type_covered, algorithm, labels,
+ original_ttl, expiration, inception, key_tag, signer,
+ signature):
+ super(RRSIG, self).__init__(rdclass, rdtype)
+ self.type_covered = type_covered
+ self.algorithm = algorithm
+ self.labels = labels
+ self.original_ttl = original_ttl
+ self.expiration = expiration
+ self.inception = inception
+ self.key_tag = key_tag
+ self.signer = signer
+ self.signature = signature
+
+ def covers(self):
+ return self.type_covered
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%s %d %d %d %s %s %d %s %s' % (
+ dns.rdatatype.to_text(self.type_covered),
+ self.algorithm,
+ self.labels,
+ self.original_ttl,
+ posixtime_to_sigtime(self.expiration),
+ posixtime_to_sigtime(self.inception),
+ self.key_tag,
+ self.signer.choose_relativity(origin, relativize),
+ dns.rdata._base64ify(self.signature)
+ )
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ type_covered = dns.rdatatype.from_text(tok.get_string())
+ algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
+ labels = tok.get_int()
+ original_ttl = tok.get_ttl()
+ expiration = sigtime_to_posixtime(tok.get_string())
+ inception = sigtime_to_posixtime(tok.get_string())
+ key_tag = tok.get_int()
+ signer = tok.get_name()
+ signer = signer.choose_relativity(origin, relativize)
+ chunks = []
+ while 1:
+ t = tok.get().unescape()
+ if t.is_eol_or_eof():
+ break
+ if not t.is_identifier():
+ raise dns.exception.SyntaxError
+ chunks.append(t.value.encode())
+ b64 = b''.join(chunks)
+ signature = base64.b64decode(b64)
+ return cls(rdclass, rdtype, type_covered, algorithm, labels,
+ original_ttl, expiration, inception, key_tag, signer,
+ signature)
+
+ def to_wire(self, file, compress=None, origin=None):
+ header = struct.pack('!HBBIIIH', self.type_covered,
+ self.algorithm, self.labels,
+ self.original_ttl, self.expiration,
+ self.inception, self.key_tag)
+ file.write(header)
+ self.signer.to_wire(file, None, origin)
+ file.write(self.signature)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ header = struct.unpack('!HBBIIIH', wire[current: current + 18])
+ current += 18
+ rdlen -= 18
+ (signer, cused) = dns.name.from_wire(wire[: current + rdlen], current)
+ current += cused
+ rdlen -= cused
+ if origin is not None:
+ signer = signer.relativize(origin)
+ signature = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, header[0], header[1], header[2],
+ header[3], header[4], header[5], header[6], signer,
+ signature)
+
+ def choose_relativity(self, origin=None, relativize=True):
+ self.signer = self.signer.choose_relativity(origin, relativize)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/RT.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/RT.py
new file mode 100644
index 000000000..88b754868
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/RT.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.mxbase
+
+
+class RT(dns.rdtypes.mxbase.UncompressedDowncasingMX):
+
+ """RT record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/SOA.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/SOA.py
new file mode 100644
index 000000000..cc0098e8b
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/SOA.py
@@ -0,0 +1,114 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.name
+
+
+class SOA(dns.rdata.Rdata):
+
+ """SOA record
+
+ @ivar mname: the SOA MNAME (master name) field
+ @type mname: dns.name.Name object
+ @ivar rname: the SOA RNAME (responsible name) field
+ @type rname: dns.name.Name object
+ @ivar serial: The zone's serial number
+ @type serial: int
+ @ivar refresh: The zone's refresh value (in seconds)
+ @type refresh: int
+ @ivar retry: The zone's retry value (in seconds)
+ @type retry: int
+ @ivar expire: The zone's expiration value (in seconds)
+ @type expire: int
+ @ivar minimum: The zone's negative caching time (in seconds, called
+ "minimum" for historical reasons)
+ @type minimum: int
+ @see: RFC 1035"""
+
+ __slots__ = ['mname', 'rname', 'serial', 'refresh', 'retry', 'expire',
+ 'minimum']
+
+ def __init__(self, rdclass, rdtype, mname, rname, serial, refresh, retry,
+ expire, minimum):
+ super(SOA, self).__init__(rdclass, rdtype)
+ self.mname = mname
+ self.rname = rname
+ self.serial = serial
+ self.refresh = refresh
+ self.retry = retry
+ self.expire = expire
+ self.minimum = minimum
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ mname = self.mname.choose_relativity(origin, relativize)
+ rname = self.rname.choose_relativity(origin, relativize)
+ return '%s %s %d %d %d %d %d' % (
+ mname, rname, self.serial, self.refresh, self.retry,
+ self.expire, self.minimum)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ mname = tok.get_name()
+ rname = tok.get_name()
+ mname = mname.choose_relativity(origin, relativize)
+ rname = rname.choose_relativity(origin, relativize)
+ serial = tok.get_uint32()
+ refresh = tok.get_ttl()
+ retry = tok.get_ttl()
+ expire = tok.get_ttl()
+ minimum = tok.get_ttl()
+ tok.get_eol()
+ return cls(rdclass, rdtype, mname, rname, serial, refresh, retry,
+ expire, minimum)
+
+ def to_wire(self, file, compress=None, origin=None):
+ self.mname.to_wire(file, compress, origin)
+ self.rname.to_wire(file, compress, origin)
+ five_ints = struct.pack('!IIIII', self.serial, self.refresh,
+ self.retry, self.expire, self.minimum)
+ file.write(five_ints)
+
+ def to_digestable(self, origin=None):
+ return self.mname.to_digestable(origin) + \
+ self.rname.to_digestable(origin) + \
+ struct.pack('!IIIII', self.serial, self.refresh,
+ self.retry, self.expire, self.minimum)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (mname, cused) = dns.name.from_wire(wire[: current + rdlen], current)
+ current += cused
+ rdlen -= cused
+ (rname, cused) = dns.name.from_wire(wire[: current + rdlen], current)
+ current += cused
+ rdlen -= cused
+ if rdlen != 20:
+ raise dns.exception.FormError
+ five_ints = struct.unpack('!IIIII',
+ wire[current: current + rdlen])
+ if origin is not None:
+ mname = mname.relativize(origin)
+ rname = rname.relativize(origin)
+ return cls(rdclass, rdtype, mname, rname,
+ five_ints[0], five_ints[1], five_ints[2], five_ints[3],
+ five_ints[4])
+
+ def choose_relativity(self, origin=None, relativize=True):
+ self.mname = self.mname.choose_relativity(origin, relativize)
+ self.rname = self.rname.choose_relativity(origin, relativize)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/SPF.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/SPF.py
new file mode 100644
index 000000000..f3e0904e6
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/SPF.py
@@ -0,0 +1,23 @@
+# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.txtbase
+
+
+class SPF(dns.rdtypes.txtbase.TXTBase):
+
+ """SPF record
+
+ @see: RFC 4408"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/SSHFP.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/SSHFP.py
new file mode 100644
index 000000000..7e846b342
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/SSHFP.py
@@ -0,0 +1,77 @@
+# Copyright (C) 2005-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+import binascii
+
+import dns.rdata
+import dns.rdatatype
+
+
+class SSHFP(dns.rdata.Rdata):
+
+ """SSHFP record
+
+ @ivar algorithm: the algorithm
+ @type algorithm: int
+ @ivar fp_type: the digest type
+ @type fp_type: int
+ @ivar fingerprint: the fingerprint
+ @type fingerprint: string
+ @see: draft-ietf-secsh-dns-05.txt"""
+
+ __slots__ = ['algorithm', 'fp_type', 'fingerprint']
+
+ def __init__(self, rdclass, rdtype, algorithm, fp_type,
+ fingerprint):
+ super(SSHFP, self).__init__(rdclass, rdtype)
+ self.algorithm = algorithm
+ self.fp_type = fp_type
+ self.fingerprint = fingerprint
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%d %d %s' % (self.algorithm,
+ self.fp_type,
+ dns.rdata._hexify(self.fingerprint,
+ chunksize=128))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ algorithm = tok.get_uint8()
+ fp_type = tok.get_uint8()
+ chunks = []
+ while 1:
+ t = tok.get().unescape()
+ if t.is_eol_or_eof():
+ break
+ if not t.is_identifier():
+ raise dns.exception.SyntaxError
+ chunks.append(t.value.encode())
+ fingerprint = b''.join(chunks)
+ fingerprint = binascii.unhexlify(fingerprint)
+ return cls(rdclass, rdtype, algorithm, fp_type, fingerprint)
+
+ def to_wire(self, file, compress=None, origin=None):
+ header = struct.pack("!BB", self.algorithm, self.fp_type)
+ file.write(header)
+ file.write(self.fingerprint)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ header = struct.unpack("!BB", wire[current: current + 2])
+ current += 2
+ rdlen -= 2
+ fingerprint = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, header[0], header[1], fingerprint)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/TLSA.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/TLSA.py
new file mode 100644
index 000000000..790a93b9d
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/TLSA.py
@@ -0,0 +1,82 @@
+# Copyright (C) 2005-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+import binascii
+
+import dns.rdata
+import dns.rdatatype
+
+
+class TLSA(dns.rdata.Rdata):
+
+ """TLSA record
+
+ @ivar usage: The certificate usage
+ @type usage: int
+ @ivar selector: The selector field
+ @type selector: int
+ @ivar mtype: The 'matching type' field
+ @type mtype: int
+ @ivar cert: The 'Certificate Association Data' field
+ @type cert: string
+ @see: RFC 6698"""
+
+ __slots__ = ['usage', 'selector', 'mtype', 'cert']
+
+ def __init__(self, rdclass, rdtype, usage, selector,
+ mtype, cert):
+ super(TLSA, self).__init__(rdclass, rdtype)
+ self.usage = usage
+ self.selector = selector
+ self.mtype = mtype
+ self.cert = cert
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%d %d %d %s' % (self.usage,
+ self.selector,
+ self.mtype,
+ dns.rdata._hexify(self.cert,
+ chunksize=128))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ usage = tok.get_uint8()
+ selector = tok.get_uint8()
+ mtype = tok.get_uint8()
+ cert_chunks = []
+ while 1:
+ t = tok.get().unescape()
+ if t.is_eol_or_eof():
+ break
+ if not t.is_identifier():
+ raise dns.exception.SyntaxError
+ cert_chunks.append(t.value.encode())
+ cert = b''.join(cert_chunks)
+ cert = binascii.unhexlify(cert)
+ return cls(rdclass, rdtype, usage, selector, mtype, cert)
+
+ def to_wire(self, file, compress=None, origin=None):
+ header = struct.pack("!BBB", self.usage, self.selector, self.mtype)
+ file.write(header)
+ file.write(self.cert)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ header = struct.unpack("!BBB", wire[current: current + 3])
+ current += 3
+ rdlen -= 3
+ cert = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, header[0], header[1], header[2], cert)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/TXT.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/TXT.py
new file mode 100644
index 000000000..6c7fa4502
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/TXT.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.txtbase
+
+
+class TXT(dns.rdtypes.txtbase.TXTBase):
+
+ """TXT record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/URI.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/URI.py
new file mode 100644
index 000000000..b5595b510
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/URI.py
@@ -0,0 +1,80 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+# Copyright (C) 2015 Red Hat, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.name
+from dns._compat import text_type
+
+
+class URI(dns.rdata.Rdata):
+
+ """URI record
+
+ @ivar priority: the priority
+ @type priority: int
+ @ivar weight: the weight
+ @type weight: int
+ @ivar target: the target host
+ @type target: dns.name.Name object
+ @see: draft-faltstrom-uri-13"""
+
+ __slots__ = ['priority', 'weight', 'target']
+
+ def __init__(self, rdclass, rdtype, priority, weight, target):
+ super(URI, self).__init__(rdclass, rdtype)
+ self.priority = priority
+ self.weight = weight
+ if len(target) < 1:
+ raise dns.exception.SyntaxError("URI target cannot be empty")
+ if isinstance(target, text_type):
+ self.target = target.encode()
+ else:
+ self.target = target
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%d %d "%s"' % (self.priority, self.weight,
+ self.target.decode())
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ priority = tok.get_uint16()
+ weight = tok.get_uint16()
+ target = tok.get().unescape()
+ if not (target.is_quoted_string() or target.is_identifier()):
+ raise dns.exception.SyntaxError("URI target must be a string")
+ tok.get_eol()
+ return cls(rdclass, rdtype, priority, weight, target.value)
+
+ def to_wire(self, file, compress=None, origin=None):
+ two_ints = struct.pack("!HH", self.priority, self.weight)
+ file.write(two_ints)
+ file.write(self.target)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ if rdlen < 5:
+ raise dns.exception.FormError('URI RR is shorter than 5 octets')
+
+ (priority, weight) = struct.unpack('!HH', wire[current: current + 4])
+ current += 4
+ rdlen -= 4
+ target = wire[current: current + rdlen]
+ current += rdlen
+
+ return cls(rdclass, rdtype, priority, weight, target)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/X25.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/X25.py
new file mode 100644
index 000000000..8732ccf0d
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/X25.py
@@ -0,0 +1,64 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.tokenizer
+from dns._compat import text_type
+
+
+class X25(dns.rdata.Rdata):
+
+ """X25 record
+
+ @ivar address: the PSDN address
+ @type address: string
+ @see: RFC 1183"""
+
+ __slots__ = ['address']
+
+ def __init__(self, rdclass, rdtype, address):
+ super(X25, self).__init__(rdclass, rdtype)
+ if isinstance(address, text_type):
+ self.address = address.encode()
+ else:
+ self.address = address
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '"%s"' % dns.rdata._escapify(self.address)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ address = tok.get_string()
+ tok.get_eol()
+ return cls(rdclass, rdtype, address)
+
+ def to_wire(self, file, compress=None, origin=None):
+ l = len(self.address)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(self.address)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l != rdlen:
+ raise dns.exception.FormError
+ address = wire[current: current + l].unwrap()
+ return cls(rdclass, rdtype, address)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/ANY/__init__.py b/Contents/Libraries/Shared/dns/rdtypes/ANY/__init__.py
new file mode 100644
index 000000000..ea9c3e2e0
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/ANY/__init__.py
@@ -0,0 +1,50 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Class ANY (generic) rdata type classes."""
+
+__all__ = [
+ 'AFSDB',
+ 'CDNSKEY',
+ 'CDS',
+ 'CERT',
+ 'CNAME',
+ 'DLV',
+ 'DNAME',
+ 'DNSKEY',
+ 'DS',
+ 'EUI48',
+ 'EUI64',
+ 'GPOS',
+ 'HINFO',
+ 'HIP',
+ 'ISDN',
+ 'LOC',
+ 'MX',
+ 'NS',
+ 'NSEC',
+ 'NSEC3',
+ 'NSEC3PARAM',
+ 'TLSA',
+ 'PTR',
+ 'RP',
+ 'RRSIG',
+ 'RT',
+ 'SOA',
+ 'SPF',
+ 'SSHFP',
+ 'TXT',
+ 'X25',
+]
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/A.py b/Contents/Libraries/Shared/dns/rdtypes/IN/A.py
new file mode 100644
index 000000000..3775548f2
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/A.py
@@ -0,0 +1,52 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.exception
+import dns.ipv4
+import dns.rdata
+import dns.tokenizer
+
+
+class A(dns.rdata.Rdata):
+
+ """A record.
+
+ @ivar address: an IPv4 address
+ @type address: string (in the standard "dotted quad" format)"""
+
+ __slots__ = ['address']
+
+ def __init__(self, rdclass, rdtype, address):
+ super(A, self).__init__(rdclass, rdtype)
+ # check that it's OK
+ dns.ipv4.inet_aton(address)
+ self.address = address
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return self.address
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ address = tok.get_identifier()
+ tok.get_eol()
+ return cls(rdclass, rdtype, address)
+
+ def to_wire(self, file, compress=None, origin=None):
+ file.write(dns.ipv4.inet_aton(self.address))
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ address = dns.ipv4.inet_ntoa(wire[current: current + rdlen]).decode()
+ return cls(rdclass, rdtype, address)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/AAAA.py b/Contents/Libraries/Shared/dns/rdtypes/IN/AAAA.py
new file mode 100644
index 000000000..4352404d7
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/AAAA.py
@@ -0,0 +1,53 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.exception
+import dns.inet
+import dns.rdata
+import dns.tokenizer
+
+
+class AAAA(dns.rdata.Rdata):
+
+ """AAAA record.
+
+ @ivar address: an IPv6 address
+ @type address: string (in the standard IPv6 format)"""
+
+ __slots__ = ['address']
+
+ def __init__(self, rdclass, rdtype, address):
+ super(AAAA, self).__init__(rdclass, rdtype)
+ # check that it's OK
+ dns.inet.inet_pton(dns.inet.AF_INET6, address)
+ self.address = address
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return self.address
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ address = tok.get_identifier()
+ tok.get_eol()
+ return cls(rdclass, rdtype, address)
+
+ def to_wire(self, file, compress=None, origin=None):
+ file.write(dns.inet.inet_pton(dns.inet.AF_INET6, self.address))
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ address = dns.inet.inet_ntop(dns.inet.AF_INET6,
+ wire[current: current + rdlen])
+ return cls(rdclass, rdtype, address)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/APL.py b/Contents/Libraries/Shared/dns/rdtypes/IN/APL.py
new file mode 100644
index 000000000..57ef6c0a9
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/APL.py
@@ -0,0 +1,161 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+import binascii
+
+import dns.exception
+import dns.inet
+import dns.rdata
+import dns.tokenizer
+from dns._compat import xrange
+
+
+class APLItem(object):
+
+ """An APL list item.
+
+ @ivar family: the address family (IANA address family registry)
+ @type family: int
+ @ivar negation: is this item negated?
+ @type negation: bool
+ @ivar address: the address
+ @type address: string
+ @ivar prefix: the prefix length
+ @type prefix: int
+ """
+
+ __slots__ = ['family', 'negation', 'address', 'prefix']
+
+ def __init__(self, family, negation, address, prefix):
+ self.family = family
+ self.negation = negation
+ self.address = address
+ self.prefix = prefix
+
+ def __str__(self):
+ if self.negation:
+ return "!%d:%s/%s" % (self.family, self.address, self.prefix)
+ else:
+ return "%d:%s/%s" % (self.family, self.address, self.prefix)
+
+ def to_wire(self, file):
+ if self.family == 1:
+ address = dns.inet.inet_pton(dns.inet.AF_INET, self.address)
+ elif self.family == 2:
+ address = dns.inet.inet_pton(dns.inet.AF_INET6, self.address)
+ else:
+ address = binascii.unhexlify(self.address)
+ #
+ # Truncate least significant zero bytes.
+ #
+ last = 0
+ for i in xrange(len(address) - 1, -1, -1):
+ if address[i] != chr(0):
+ last = i + 1
+ break
+ address = address[0: last]
+ l = len(address)
+ assert l < 128
+ if self.negation:
+ l |= 0x80
+ header = struct.pack('!HBB', self.family, self.prefix, l)
+ file.write(header)
+ file.write(address)
+
+
+class APL(dns.rdata.Rdata):
+
+ """APL record.
+
+ @ivar items: a list of APL items
+ @type items: list of APL_Item
+ @see: RFC 3123"""
+
+ __slots__ = ['items']
+
+ def __init__(self, rdclass, rdtype, items):
+ super(APL, self).__init__(rdclass, rdtype)
+ self.items = items
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return ' '.join(map(str, self.items))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ items = []
+ while 1:
+ token = tok.get().unescape()
+ if token.is_eol_or_eof():
+ break
+ item = token.value
+ if item[0] == '!':
+ negation = True
+ item = item[1:]
+ else:
+ negation = False
+ (family, rest) = item.split(':', 1)
+ family = int(family)
+ (address, prefix) = rest.split('/', 1)
+ prefix = int(prefix)
+ item = APLItem(family, negation, address, prefix)
+ items.append(item)
+
+ return cls(rdclass, rdtype, items)
+
+ def to_wire(self, file, compress=None, origin=None):
+ for item in self.items:
+ item.to_wire(file)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ items = []
+ while 1:
+ if rdlen == 0:
+ break
+ if rdlen < 4:
+ raise dns.exception.FormError
+ header = struct.unpack('!HBB', wire[current: current + 4])
+ afdlen = header[2]
+ if afdlen > 127:
+ negation = True
+ afdlen -= 128
+ else:
+ negation = False
+ current += 4
+ rdlen -= 4
+ if rdlen < afdlen:
+ raise dns.exception.FormError
+ address = wire[current: current + afdlen].unwrap()
+ l = len(address)
+ if header[0] == 1:
+ if l < 4:
+ address += '\x00' * (4 - l)
+ address = dns.inet.inet_ntop(dns.inet.AF_INET, address)
+ elif header[0] == 2:
+ if l < 16:
+ address += '\x00' * (16 - l)
+ address = dns.inet.inet_ntop(dns.inet.AF_INET6, address)
+ else:
+ #
+ # This isn't really right according to the RFC, but it
+ # seems better than throwing an exception
+ #
+ address = address.encode('hex_codec')
+ current += afdlen
+ rdlen -= afdlen
+ item = APLItem(header[0], negation, address, header[1])
+ items.append(item)
+ return cls(rdclass, rdtype, items)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/DHCID.py b/Contents/Libraries/Shared/dns/rdtypes/IN/DHCID.py
new file mode 100644
index 000000000..5b8626a5a
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/DHCID.py
@@ -0,0 +1,59 @@
+# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import base64
+
+import dns.exception
+
+
+class DHCID(dns.rdata.Rdata):
+
+ """DHCID record
+
+ @ivar data: the data (the content of the RR is opaque as far as the
+ DNS is concerned)
+ @type data: string
+ @see: RFC 4701"""
+
+ __slots__ = ['data']
+
+ def __init__(self, rdclass, rdtype, data):
+ super(DHCID, self).__init__(rdclass, rdtype)
+ self.data = data
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return dns.rdata._base64ify(self.data)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ chunks = []
+ while 1:
+ t = tok.get().unescape()
+ if t.is_eol_or_eof():
+ break
+ if not t.is_identifier():
+ raise dns.exception.SyntaxError
+ chunks.append(t.value.encode())
+ b64 = b''.join(chunks)
+ data = base64.b64decode(b64)
+ return cls(rdclass, rdtype, data)
+
+ def to_wire(self, file, compress=None, origin=None):
+ file.write(self.data)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ data = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, data)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/IPSECKEY.py b/Contents/Libraries/Shared/dns/rdtypes/IN/IPSECKEY.py
new file mode 100644
index 000000000..c673e839d
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/IPSECKEY.py
@@ -0,0 +1,148 @@
+# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+import base64
+
+import dns.exception
+import dns.inet
+import dns.name
+
+
+class IPSECKEY(dns.rdata.Rdata):
+
+ """IPSECKEY record
+
+ @ivar precedence: the precedence for this key data
+ @type precedence: int
+ @ivar gateway_type: the gateway type
+ @type gateway_type: int
+ @ivar algorithm: the algorithm to use
+ @type algorithm: int
+ @ivar gateway: the public key
+ @type gateway: None, IPv4 address, IPV6 address, or domain name
+ @ivar key: the public key
+ @type key: string
+ @see: RFC 4025"""
+
+ __slots__ = ['precedence', 'gateway_type', 'algorithm', 'gateway', 'key']
+
+ def __init__(self, rdclass, rdtype, precedence, gateway_type, algorithm,
+ gateway, key):
+ super(IPSECKEY, self).__init__(rdclass, rdtype)
+ if gateway_type == 0:
+ if gateway != '.' and gateway is not None:
+ raise SyntaxError('invalid gateway for gateway type 0')
+ gateway = None
+ elif gateway_type == 1:
+ # check that it's OK
+ dns.inet.inet_pton(dns.inet.AF_INET, gateway)
+ elif gateway_type == 2:
+ # check that it's OK
+ dns.inet.inet_pton(dns.inet.AF_INET6, gateway)
+ elif gateway_type == 3:
+ pass
+ else:
+ raise SyntaxError(
+ 'invalid IPSECKEY gateway type: %d' % gateway_type)
+ self.precedence = precedence
+ self.gateway_type = gateway_type
+ self.algorithm = algorithm
+ self.gateway = gateway
+ self.key = key
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ if self.gateway_type == 0:
+ gateway = '.'
+ elif self.gateway_type == 1:
+ gateway = self.gateway
+ elif self.gateway_type == 2:
+ gateway = self.gateway
+ elif self.gateway_type == 3:
+ gateway = str(self.gateway.choose_relativity(origin, relativize))
+ else:
+ raise ValueError('invalid gateway type')
+ return '%d %d %d %s %s' % (self.precedence, self.gateway_type,
+ self.algorithm, gateway,
+ dns.rdata._base64ify(self.key))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ precedence = tok.get_uint8()
+ gateway_type = tok.get_uint8()
+ algorithm = tok.get_uint8()
+ if gateway_type == 3:
+ gateway = tok.get_name().choose_relativity(origin, relativize)
+ else:
+ gateway = tok.get_string()
+ chunks = []
+ while 1:
+ t = tok.get().unescape()
+ if t.is_eol_or_eof():
+ break
+ if not t.is_identifier():
+ raise dns.exception.SyntaxError
+ chunks.append(t.value.encode())
+ b64 = b''.join(chunks)
+ key = base64.b64decode(b64)
+ return cls(rdclass, rdtype, precedence, gateway_type, algorithm,
+ gateway, key)
+
+ def to_wire(self, file, compress=None, origin=None):
+ header = struct.pack("!BBB", self.precedence, self.gateway_type,
+ self.algorithm)
+ file.write(header)
+ if self.gateway_type == 0:
+ pass
+ elif self.gateway_type == 1:
+ file.write(dns.inet.inet_pton(dns.inet.AF_INET, self.gateway))
+ elif self.gateway_type == 2:
+ file.write(dns.inet.inet_pton(dns.inet.AF_INET6, self.gateway))
+ elif self.gateway_type == 3:
+ self.gateway.to_wire(file, None, origin)
+ else:
+ raise ValueError('invalid gateway type')
+ file.write(self.key)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ if rdlen < 3:
+ raise dns.exception.FormError
+ header = struct.unpack('!BBB', wire[current: current + 3])
+ gateway_type = header[1]
+ current += 3
+ rdlen -= 3
+ if gateway_type == 0:
+ gateway = None
+ elif gateway_type == 1:
+ gateway = dns.inet.inet_ntop(dns.inet.AF_INET,
+ wire[current: current + 4])
+ current += 4
+ rdlen -= 4
+ elif gateway_type == 2:
+ gateway = dns.inet.inet_ntop(dns.inet.AF_INET6,
+ wire[current: current + 16])
+ current += 16
+ rdlen -= 16
+ elif gateway_type == 3:
+ (gateway, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ current += cused
+ rdlen -= cused
+ else:
+ raise dns.exception.FormError('invalid IPSECKEY gateway type')
+ key = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, header[0], gateway_type, header[2],
+ gateway, key)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/KX.py b/Contents/Libraries/Shared/dns/rdtypes/IN/KX.py
new file mode 100644
index 000000000..adbfe34b1
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/KX.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.mxbase
+
+
+class KX(dns.rdtypes.mxbase.UncompressedMX):
+
+ """KX record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/NAPTR.py b/Contents/Libraries/Shared/dns/rdtypes/IN/NAPTR.py
new file mode 100644
index 000000000..5ae2feb15
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/NAPTR.py
@@ -0,0 +1,125 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.name
+import dns.rdata
+from dns._compat import xrange, text_type
+
+
+def _write_string(file, s):
+ l = len(s)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(s)
+
+
+def _sanitize(value):
+ if isinstance(value, text_type):
+ return value.encode()
+ return value
+
+
+class NAPTR(dns.rdata.Rdata):
+
+ """NAPTR record
+
+ @ivar order: order
+ @type order: int
+ @ivar preference: preference
+ @type preference: int
+ @ivar flags: flags
+ @type flags: string
+ @ivar service: service
+ @type service: string
+ @ivar regexp: regular expression
+ @type regexp: string
+ @ivar replacement: replacement name
+ @type replacement: dns.name.Name object
+ @see: RFC 3403"""
+
+ __slots__ = ['order', 'preference', 'flags', 'service', 'regexp',
+ 'replacement']
+
+ def __init__(self, rdclass, rdtype, order, preference, flags, service,
+ regexp, replacement):
+ super(NAPTR, self).__init__(rdclass, rdtype)
+ self.flags = _sanitize(flags)
+ self.service = _sanitize(service)
+ self.regexp = _sanitize(regexp)
+ self.order = order
+ self.preference = preference
+ self.replacement = replacement
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ replacement = self.replacement.choose_relativity(origin, relativize)
+ return '%d %d "%s" "%s" "%s" %s' % \
+ (self.order, self.preference,
+ dns.rdata._escapify(self.flags),
+ dns.rdata._escapify(self.service),
+ dns.rdata._escapify(self.regexp),
+ replacement)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ order = tok.get_uint16()
+ preference = tok.get_uint16()
+ flags = tok.get_string()
+ service = tok.get_string()
+ regexp = tok.get_string()
+ replacement = tok.get_name()
+ replacement = replacement.choose_relativity(origin, relativize)
+ tok.get_eol()
+ return cls(rdclass, rdtype, order, preference, flags, service,
+ regexp, replacement)
+
+ def to_wire(self, file, compress=None, origin=None):
+ two_ints = struct.pack("!HH", self.order, self.preference)
+ file.write(two_ints)
+ _write_string(file, self.flags)
+ _write_string(file, self.service)
+ _write_string(file, self.regexp)
+ self.replacement.to_wire(file, compress, origin)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (order, preference) = struct.unpack('!HH', wire[current: current + 4])
+ current += 4
+ rdlen -= 4
+ strings = []
+ for i in xrange(3):
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l > rdlen or rdlen < 0:
+ raise dns.exception.FormError
+ s = wire[current: current + l].unwrap()
+ current += l
+ rdlen -= l
+ strings.append(s)
+ (replacement, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ if cused != rdlen:
+ raise dns.exception.FormError
+ if origin is not None:
+ replacement = replacement.relativize(origin)
+ return cls(rdclass, rdtype, order, preference, strings[0], strings[1],
+ strings[2], replacement)
+
+ def choose_relativity(self, origin=None, relativize=True):
+ self.replacement = self.replacement.choose_relativity(origin,
+ relativize)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/NSAP.py b/Contents/Libraries/Shared/dns/rdtypes/IN/NSAP.py
new file mode 100644
index 000000000..05d0745ef
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/NSAP.py
@@ -0,0 +1,58 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import binascii
+
+import dns.exception
+import dns.rdata
+import dns.tokenizer
+
+
+class NSAP(dns.rdata.Rdata):
+
+ """NSAP record.
+
+ @ivar address: a NASP
+ @type address: string
+ @see: RFC 1706"""
+
+ __slots__ = ['address']
+
+ def __init__(self, rdclass, rdtype, address):
+ super(NSAP, self).__init__(rdclass, rdtype)
+ self.address = address
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return "0x%s" % binascii.hexlify(self.address).decode()
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ address = tok.get_string()
+ tok.get_eol()
+ if address[0:2] != '0x':
+ raise dns.exception.SyntaxError('string does not start with 0x')
+ address = address[2:].replace('.', '')
+ if len(address) % 2 != 0:
+ raise dns.exception.SyntaxError('hexstring has odd length')
+ address = binascii.unhexlify(address.encode())
+ return cls(rdclass, rdtype, address)
+
+ def to_wire(self, file, compress=None, origin=None):
+ file.write(self.address)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ address = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, address)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/NSAP_PTR.py b/Contents/Libraries/Shared/dns/rdtypes/IN/NSAP_PTR.py
new file mode 100644
index 000000000..56967df02
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/NSAP_PTR.py
@@ -0,0 +1,21 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import dns.rdtypes.nsbase
+
+
+class NSAP_PTR(dns.rdtypes.nsbase.UncompressedNS):
+
+ """NSAP-PTR record"""
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/PX.py b/Contents/Libraries/Shared/dns/rdtypes/IN/PX.py
new file mode 100644
index 000000000..e1ef102b1
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/PX.py
@@ -0,0 +1,87 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.name
+
+
+class PX(dns.rdata.Rdata):
+
+ """PX record.
+
+ @ivar preference: the preference value
+ @type preference: int
+ @ivar map822: the map822 name
+ @type map822: dns.name.Name object
+ @ivar mapx400: the mapx400 name
+ @type mapx400: dns.name.Name object
+ @see: RFC 2163"""
+
+ __slots__ = ['preference', 'map822', 'mapx400']
+
+ def __init__(self, rdclass, rdtype, preference, map822, mapx400):
+ super(PX, self).__init__(rdclass, rdtype)
+ self.preference = preference
+ self.map822 = map822
+ self.mapx400 = mapx400
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ map822 = self.map822.choose_relativity(origin, relativize)
+ mapx400 = self.mapx400.choose_relativity(origin, relativize)
+ return '%d %s %s' % (self.preference, map822, mapx400)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ preference = tok.get_uint16()
+ map822 = tok.get_name()
+ map822 = map822.choose_relativity(origin, relativize)
+ mapx400 = tok.get_name(None)
+ mapx400 = mapx400.choose_relativity(origin, relativize)
+ tok.get_eol()
+ return cls(rdclass, rdtype, preference, map822, mapx400)
+
+ def to_wire(self, file, compress=None, origin=None):
+ pref = struct.pack("!H", self.preference)
+ file.write(pref)
+ self.map822.to_wire(file, None, origin)
+ self.mapx400.to_wire(file, None, origin)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (preference, ) = struct.unpack('!H', wire[current: current + 2])
+ current += 2
+ rdlen -= 2
+ (map822, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ if cused > rdlen:
+ raise dns.exception.FormError
+ current += cused
+ rdlen -= cused
+ if origin is not None:
+ map822 = map822.relativize(origin)
+ (mapx400, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ if cused != rdlen:
+ raise dns.exception.FormError
+ if origin is not None:
+ mapx400 = mapx400.relativize(origin)
+ return cls(rdclass, rdtype, preference, map822, mapx400)
+
+ def choose_relativity(self, origin=None, relativize=True):
+ self.map822 = self.map822.choose_relativity(origin, relativize)
+ self.mapx400 = self.mapx400.choose_relativity(origin, relativize)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/SRV.py b/Contents/Libraries/Shared/dns/rdtypes/IN/SRV.py
new file mode 100644
index 000000000..f4396d614
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/SRV.py
@@ -0,0 +1,81 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.name
+
+
+class SRV(dns.rdata.Rdata):
+
+ """SRV record
+
+ @ivar priority: the priority
+ @type priority: int
+ @ivar weight: the weight
+ @type weight: int
+ @ivar port: the port of the service
+ @type port: int
+ @ivar target: the target host
+ @type target: dns.name.Name object
+ @see: RFC 2782"""
+
+ __slots__ = ['priority', 'weight', 'port', 'target']
+
+ def __init__(self, rdclass, rdtype, priority, weight, port, target):
+ super(SRV, self).__init__(rdclass, rdtype)
+ self.priority = priority
+ self.weight = weight
+ self.port = port
+ self.target = target
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ target = self.target.choose_relativity(origin, relativize)
+ return '%d %d %d %s' % (self.priority, self.weight, self.port,
+ target)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ priority = tok.get_uint16()
+ weight = tok.get_uint16()
+ port = tok.get_uint16()
+ target = tok.get_name(None)
+ target = target.choose_relativity(origin, relativize)
+ tok.get_eol()
+ return cls(rdclass, rdtype, priority, weight, port, target)
+
+ def to_wire(self, file, compress=None, origin=None):
+ three_ints = struct.pack("!HHH", self.priority, self.weight, self.port)
+ file.write(three_ints)
+ self.target.to_wire(file, compress, origin)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (priority, weight, port) = struct.unpack('!HHH',
+ wire[current: current + 6])
+ current += 6
+ rdlen -= 6
+ (target, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ if cused != rdlen:
+ raise dns.exception.FormError
+ if origin is not None:
+ target = target.relativize(origin)
+ return cls(rdclass, rdtype, priority, weight, port, target)
+
+ def choose_relativity(self, origin=None, relativize=True):
+ self.target = self.target.choose_relativity(origin, relativize)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/WKS.py b/Contents/Libraries/Shared/dns/rdtypes/IN/WKS.py
new file mode 100644
index 000000000..1d4012c30
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/WKS.py
@@ -0,0 +1,105 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import socket
+import struct
+
+import dns.ipv4
+import dns.rdata
+from dns._compat import xrange
+
+_proto_tcp = socket.getprotobyname('tcp')
+_proto_udp = socket.getprotobyname('udp')
+
+
+class WKS(dns.rdata.Rdata):
+
+ """WKS record
+
+ @ivar address: the address
+ @type address: string
+ @ivar protocol: the protocol
+ @type protocol: int
+ @ivar bitmap: the bitmap
+ @type bitmap: string
+ @see: RFC 1035"""
+
+ __slots__ = ['address', 'protocol', 'bitmap']
+
+ def __init__(self, rdclass, rdtype, address, protocol, bitmap):
+ super(WKS, self).__init__(rdclass, rdtype)
+ self.address = address
+ self.protocol = protocol
+ if not isinstance(bitmap, bytearray):
+ self.bitmap = bytearray(bitmap)
+ else:
+ self.bitmap = bitmap
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ bits = []
+ for i in xrange(0, len(self.bitmap)):
+ byte = self.bitmap[i]
+ for j in xrange(0, 8):
+ if byte & (0x80 >> j):
+ bits.append(str(i * 8 + j))
+ text = ' '.join(bits)
+ return '%s %d %s' % (self.address, self.protocol, text)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ address = tok.get_string()
+ protocol = tok.get_string()
+ if protocol.isdigit():
+ protocol = int(protocol)
+ else:
+ protocol = socket.getprotobyname(protocol)
+ bitmap = bytearray()
+ while 1:
+ token = tok.get().unescape()
+ if token.is_eol_or_eof():
+ break
+ if token.value.isdigit():
+ serv = int(token.value)
+ else:
+ if protocol != _proto_udp and protocol != _proto_tcp:
+ raise NotImplementedError("protocol must be TCP or UDP")
+ if protocol == _proto_udp:
+ protocol_text = "udp"
+ else:
+ protocol_text = "tcp"
+ serv = socket.getservbyname(token.value, protocol_text)
+ i = serv // 8
+ l = len(bitmap)
+ if l < i + 1:
+ for j in xrange(l, i + 1):
+ bitmap.append(0)
+ bitmap[i] = bitmap[i] | (0x80 >> (serv % 8))
+ bitmap = dns.rdata._truncate_bitmap(bitmap)
+ return cls(rdclass, rdtype, address, protocol, bitmap)
+
+ def to_wire(self, file, compress=None, origin=None):
+ file.write(dns.ipv4.inet_aton(self.address))
+ protocol = struct.pack('!B', self.protocol)
+ file.write(protocol)
+ file.write(self.bitmap)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ address = dns.ipv4.inet_ntoa(wire[current: current + 4])
+ protocol, = struct.unpack('!B', wire[current + 4: current + 5])
+ current += 5
+ rdlen -= 5
+ bitmap = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, address, protocol, bitmap)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/IN/__init__.py b/Contents/Libraries/Shared/dns/rdtypes/IN/__init__.py
new file mode 100644
index 000000000..24cf1ece4
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/IN/__init__.py
@@ -0,0 +1,30 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Class IN rdata type classes."""
+
+__all__ = [
+ 'A',
+ 'AAAA',
+ 'APL',
+ 'DHCID',
+ 'KX',
+ 'NAPTR',
+ 'NSAP',
+ 'NSAP_PTR',
+ 'PX',
+ 'SRV',
+ 'WKS',
+]
diff --git a/Contents/Libraries/Shared/dns/rdtypes/__init__.py b/Contents/Libraries/Shared/dns/rdtypes/__init__.py
new file mode 100644
index 000000000..826efbb6c
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/__init__.py
@@ -0,0 +1,24 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS rdata type classes"""
+
+__all__ = [
+ 'ANY',
+ 'IN',
+ 'euibase',
+ 'mxbase',
+ 'nsbase',
+]
diff --git a/Contents/Libraries/Shared/dns/rdtypes/dnskeybase.py b/Contents/Libraries/Shared/dns/rdtypes/dnskeybase.py
new file mode 100644
index 000000000..85c4b23f0
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/dnskeybase.py
@@ -0,0 +1,136 @@
+# Copyright (C) 2004-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import base64
+import struct
+
+import dns.exception
+import dns.dnssec
+import dns.rdata
+
+# wildcard import
+__all__ = ["SEP", "REVOKE", "ZONE",
+ "flags_to_text_set", "flags_from_text_set"]
+
+# flag constants
+SEP = 0x0001
+REVOKE = 0x0080
+ZONE = 0x0100
+
+_flag_by_text = {
+ 'SEP': SEP,
+ 'REVOKE': REVOKE,
+ 'ZONE': ZONE
+}
+
+# We construct the inverse mapping programmatically to ensure that we
+# cannot make any mistakes (e.g. omissions, cut-and-paste errors) that
+# would cause the mapping not to be true inverse.
+_flag_by_value = dict((y, x) for x, y in _flag_by_text.items())
+
+
+def flags_to_text_set(flags):
+ """Convert a DNSKEY flags value to set texts
+ @rtype: set([string])"""
+
+ flags_set = set()
+ mask = 0x1
+ while mask <= 0x8000:
+ if flags & mask:
+ text = _flag_by_value.get(mask)
+ if not text:
+ text = hex(mask)
+ flags_set.add(text)
+ mask <<= 1
+ return flags_set
+
+
+def flags_from_text_set(texts_set):
+ """Convert set of DNSKEY flag mnemonic texts to DNSKEY flag value
+ @rtype: int"""
+
+ flags = 0
+ for text in texts_set:
+ try:
+ flags += _flag_by_text[text]
+ except KeyError:
+ raise NotImplementedError(
+ "DNSKEY flag '%s' is not supported" % text)
+ return flags
+
+
+class DNSKEYBase(dns.rdata.Rdata):
+
+ """Base class for rdata that is like a DNSKEY record
+
+ @ivar flags: the key flags
+ @type flags: int
+ @ivar protocol: the protocol for which this key may be used
+ @type protocol: int
+ @ivar algorithm: the algorithm used for the key
+ @type algorithm: int
+ @ivar key: the public key
+ @type key: string"""
+
+ __slots__ = ['flags', 'protocol', 'algorithm', 'key']
+
+ def __init__(self, rdclass, rdtype, flags, protocol, algorithm, key):
+ super(DNSKEYBase, self).__init__(rdclass, rdtype)
+ self.flags = flags
+ self.protocol = protocol
+ self.algorithm = algorithm
+ self.key = key
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%d %d %d %s' % (self.flags, self.protocol, self.algorithm,
+ dns.rdata._base64ify(self.key))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ flags = tok.get_uint16()
+ protocol = tok.get_uint8()
+ algorithm = dns.dnssec.algorithm_from_text(tok.get_string())
+ chunks = []
+ while 1:
+ t = tok.get().unescape()
+ if t.is_eol_or_eof():
+ break
+ if not t.is_identifier():
+ raise dns.exception.SyntaxError
+ chunks.append(t.value.encode())
+ b64 = b''.join(chunks)
+ key = base64.b64decode(b64)
+ return cls(rdclass, rdtype, flags, protocol, algorithm, key)
+
+ def to_wire(self, file, compress=None, origin=None):
+ header = struct.pack("!HBB", self.flags, self.protocol, self.algorithm)
+ file.write(header)
+ file.write(self.key)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ if rdlen < 4:
+ raise dns.exception.FormError
+ header = struct.unpack('!HBB', wire[current: current + 4])
+ current += 4
+ rdlen -= 4
+ key = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, header[0], header[1], header[2],
+ key)
+
+ def flags_to_text_set(self):
+ """Convert a DNSKEY flags value to set texts
+ @rtype: set([string])"""
+ return flags_to_text_set(self.flags)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/dsbase.py b/Contents/Libraries/Shared/dns/rdtypes/dsbase.py
new file mode 100644
index 000000000..1ee28e4a3
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/dsbase.py
@@ -0,0 +1,83 @@
+# Copyright (C) 2010, 2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import struct
+import binascii
+
+import dns.rdata
+import dns.rdatatype
+
+
+class DSBase(dns.rdata.Rdata):
+
+ """Base class for rdata that is like a DS record
+
+ @ivar key_tag: the key tag
+ @type key_tag: int
+ @ivar algorithm: the algorithm
+ @type algorithm: int
+ @ivar digest_type: the digest type
+ @type digest_type: int
+ @ivar digest: the digest
+ @type digest: int
+ @see: draft-ietf-dnsext-delegation-signer-14.txt"""
+
+ __slots__ = ['key_tag', 'algorithm', 'digest_type', 'digest']
+
+ def __init__(self, rdclass, rdtype, key_tag, algorithm, digest_type,
+ digest):
+ super(DSBase, self).__init__(rdclass, rdtype)
+ self.key_tag = key_tag
+ self.algorithm = algorithm
+ self.digest_type = digest_type
+ self.digest = digest
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return '%d %d %d %s' % (self.key_tag, self.algorithm,
+ self.digest_type,
+ dns.rdata._hexify(self.digest,
+ chunksize=128))
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ key_tag = tok.get_uint16()
+ algorithm = tok.get_uint8()
+ digest_type = tok.get_uint8()
+ chunks = []
+ while 1:
+ t = tok.get().unescape()
+ if t.is_eol_or_eof():
+ break
+ if not t.is_identifier():
+ raise dns.exception.SyntaxError
+ chunks.append(t.value.encode())
+ digest = b''.join(chunks)
+ digest = binascii.unhexlify(digest)
+ return cls(rdclass, rdtype, key_tag, algorithm, digest_type,
+ digest)
+
+ def to_wire(self, file, compress=None, origin=None):
+ header = struct.pack("!HBB", self.key_tag, self.algorithm,
+ self.digest_type)
+ file.write(header)
+ file.write(self.digest)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ header = struct.unpack("!HBB", wire[current: current + 4])
+ current += 4
+ rdlen -= 4
+ digest = wire[current: current + rdlen].unwrap()
+ return cls(rdclass, rdtype, header[0], header[1], header[2], digest)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/euibase.py b/Contents/Libraries/Shared/dns/rdtypes/euibase.py
new file mode 100644
index 000000000..cc5fdaa63
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/euibase.py
@@ -0,0 +1,71 @@
+# Copyright (C) 2015 Red Hat, Inc.
+# Author: Petr Spacek
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED 'AS IS' AND RED HAT DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import binascii
+
+import dns.rdata
+from dns._compat import xrange
+
+
+class EUIBase(dns.rdata.Rdata):
+
+ """EUIxx record
+
+ @ivar fingerprint: xx-bit Extended Unique Identifier (EUI-xx)
+ @type fingerprint: string
+ @see: rfc7043.txt"""
+
+ __slots__ = ['eui']
+ # define these in subclasses
+ # byte_len = 6 # 0123456789ab (in hex)
+ # text_len = byte_len * 3 - 1 # 01-23-45-67-89-ab
+
+ def __init__(self, rdclass, rdtype, eui):
+ super(EUIBase, self).__init__(rdclass, rdtype)
+ if len(eui) != self.byte_len:
+ raise dns.exception.FormError('EUI%s rdata has to have %s bytes'
+ % (self.byte_len * 8, self.byte_len))
+ self.eui = eui
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ return dns.rdata._hexify(self.eui, chunksize=2).replace(' ', '-')
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ text = tok.get_string()
+ tok.get_eol()
+ if len(text) != cls.text_len:
+ raise dns.exception.SyntaxError(
+ 'Input text must have %s characters' % cls.text_len)
+ expected_dash_idxs = xrange(2, cls.byte_len * 3 - 1, 3)
+ for i in expected_dash_idxs:
+ if text[i] != '-':
+ raise dns.exception.SyntaxError('Dash expected at position %s'
+ % i)
+ text = text.replace('-', '')
+ try:
+ data = binascii.unhexlify(text.encode())
+ except (ValueError, TypeError) as ex:
+ raise dns.exception.SyntaxError('Hex decoding error: %s' % str(ex))
+ return cls(rdclass, rdtype, data)
+
+ def to_wire(self, file, compress=None, origin=None):
+ file.write(self.eui)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ eui = wire[current:current + rdlen].unwrap()
+ return cls(rdclass, rdtype, eui)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/mxbase.py b/Contents/Libraries/Shared/dns/rdtypes/mxbase.py
new file mode 100644
index 000000000..5ac8cef9e
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/mxbase.py
@@ -0,0 +1,101 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""MX-like base classes."""
+
+from io import BytesIO
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.name
+
+
+class MXBase(dns.rdata.Rdata):
+
+ """Base class for rdata that is like an MX record.
+
+ @ivar preference: the preference value
+ @type preference: int
+ @ivar exchange: the exchange name
+ @type exchange: dns.name.Name object"""
+
+ __slots__ = ['preference', 'exchange']
+
+ def __init__(self, rdclass, rdtype, preference, exchange):
+ super(MXBase, self).__init__(rdclass, rdtype)
+ self.preference = preference
+ self.exchange = exchange
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ exchange = self.exchange.choose_relativity(origin, relativize)
+ return '%d %s' % (self.preference, exchange)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ preference = tok.get_uint16()
+ exchange = tok.get_name()
+ exchange = exchange.choose_relativity(origin, relativize)
+ tok.get_eol()
+ return cls(rdclass, rdtype, preference, exchange)
+
+ def to_wire(self, file, compress=None, origin=None):
+ pref = struct.pack("!H", self.preference)
+ file.write(pref)
+ self.exchange.to_wire(file, compress, origin)
+
+ def to_digestable(self, origin=None):
+ return struct.pack("!H", self.preference) + \
+ self.exchange.to_digestable(origin)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (preference, ) = struct.unpack('!H', wire[current: current + 2])
+ current += 2
+ rdlen -= 2
+ (exchange, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ if cused != rdlen:
+ raise dns.exception.FormError
+ if origin is not None:
+ exchange = exchange.relativize(origin)
+ return cls(rdclass, rdtype, preference, exchange)
+
+ def choose_relativity(self, origin=None, relativize=True):
+ self.exchange = self.exchange.choose_relativity(origin, relativize)
+
+
+class UncompressedMX(MXBase):
+
+ """Base class for rdata that is like an MX record, but whose name
+ is not compressed when converted to DNS wire format, and whose
+ digestable form is not downcased."""
+
+ def to_wire(self, file, compress=None, origin=None):
+ super(UncompressedMX, self).to_wire(file, None, origin)
+
+ def to_digestable(self, origin=None):
+ f = BytesIO()
+ self.to_wire(f, None, origin)
+ return f.getvalue()
+
+
+class UncompressedDowncasingMX(MXBase):
+
+ """Base class for rdata that is like an MX record, but whose name
+ is not compressed when convert to DNS wire format."""
+
+ def to_wire(self, file, compress=None, origin=None):
+ super(UncompressedDowncasingMX, self).to_wire(file, None, origin)
diff --git a/Contents/Libraries/Shared/dns/rdtypes/nsbase.py b/Contents/Libraries/Shared/dns/rdtypes/nsbase.py
new file mode 100644
index 000000000..79333a140
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/nsbase.py
@@ -0,0 +1,81 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""NS-like base classes."""
+
+from io import BytesIO
+
+import dns.exception
+import dns.rdata
+import dns.name
+
+
+class NSBase(dns.rdata.Rdata):
+
+ """Base class for rdata that is like an NS record.
+
+ @ivar target: the target name of the rdata
+ @type target: dns.name.Name object"""
+
+ __slots__ = ['target']
+
+ def __init__(self, rdclass, rdtype, target):
+ super(NSBase, self).__init__(rdclass, rdtype)
+ self.target = target
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ target = self.target.choose_relativity(origin, relativize)
+ return str(target)
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ target = tok.get_name()
+ target = target.choose_relativity(origin, relativize)
+ tok.get_eol()
+ return cls(rdclass, rdtype, target)
+
+ def to_wire(self, file, compress=None, origin=None):
+ self.target.to_wire(file, compress, origin)
+
+ def to_digestable(self, origin=None):
+ return self.target.to_digestable(origin)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ (target, cused) = dns.name.from_wire(wire[: current + rdlen],
+ current)
+ if cused != rdlen:
+ raise dns.exception.FormError
+ if origin is not None:
+ target = target.relativize(origin)
+ return cls(rdclass, rdtype, target)
+
+ def choose_relativity(self, origin=None, relativize=True):
+ self.target = self.target.choose_relativity(origin, relativize)
+
+
+class UncompressedNS(NSBase):
+
+ """Base class for rdata that is like an NS record, but whose name
+ is not compressed when convert to DNS wire format, and whose
+ digestable form is not downcased."""
+
+ def to_wire(self, file, compress=None, origin=None):
+ super(UncompressedNS, self).to_wire(file, None, origin)
+
+ def to_digestable(self, origin=None):
+ f = BytesIO()
+ self.to_wire(f, None, origin)
+ return f.getvalue()
diff --git a/Contents/Libraries/Shared/dns/rdtypes/txtbase.py b/Contents/Libraries/Shared/dns/rdtypes/txtbase.py
new file mode 100644
index 000000000..352b027bf
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rdtypes/txtbase.py
@@ -0,0 +1,90 @@
+# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""TXT-like base class."""
+
+import struct
+
+import dns.exception
+import dns.rdata
+import dns.tokenizer
+from dns._compat import binary_type
+
+
+class TXTBase(dns.rdata.Rdata):
+
+ """Base class for rdata that is like a TXT record
+
+ @ivar strings: the text strings
+ @type strings: list of string
+ @see: RFC 1035"""
+
+ __slots__ = ['strings']
+
+ def __init__(self, rdclass, rdtype, strings):
+ super(TXTBase, self).__init__(rdclass, rdtype)
+ if isinstance(strings, str):
+ strings = [strings]
+ self.strings = strings[:]
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ txt = ''
+ prefix = ''
+ for s in self.strings:
+ txt += '%s"%s"' % (prefix, dns.rdata._escapify(s))
+ prefix = ' '
+ return txt
+
+ @classmethod
+ def from_text(cls, rdclass, rdtype, tok, origin=None, relativize=True):
+ strings = []
+ while 1:
+ token = tok.get().unescape()
+ if token.is_eol_or_eof():
+ break
+ if not (token.is_quoted_string() or token.is_identifier()):
+ raise dns.exception.SyntaxError("expected a string")
+ if len(token.value) > 255:
+ raise dns.exception.SyntaxError("string too long")
+ value = token.value
+ if isinstance(value, binary_type):
+ strings.append(value)
+ else:
+ strings.append(value.encode())
+ if len(strings) == 0:
+ raise dns.exception.UnexpectedEnd
+ return cls(rdclass, rdtype, strings)
+
+ def to_wire(self, file, compress=None, origin=None):
+ for s in self.strings:
+ l = len(s)
+ assert l < 256
+ file.write(struct.pack('!B', l))
+ file.write(s)
+
+ @classmethod
+ def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin=None):
+ strings = []
+ while rdlen > 0:
+ l = wire[current]
+ current += 1
+ rdlen -= 1
+ if l > rdlen:
+ raise dns.exception.FormError
+ s = wire[current: current + l].unwrap()
+ current += l
+ rdlen -= l
+ strings.append(s)
+ return cls(rdclass, rdtype, strings)
diff --git a/Contents/Libraries/Shared/dns/renderer.py b/Contents/Libraries/Shared/dns/renderer.py
new file mode 100644
index 000000000..670fb28fa
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/renderer.py
@@ -0,0 +1,329 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Help for building DNS wire format messages"""
+
+from io import BytesIO
+import struct
+import random
+import time
+
+import dns.exception
+import dns.tsig
+from ._compat import long
+
+
+QUESTION = 0
+ANSWER = 1
+AUTHORITY = 2
+ADDITIONAL = 3
+
+
+class Renderer(object):
+
+ """Helper class for building DNS wire-format messages.
+
+ Most applications can use the higher-level L{dns.message.Message}
+ class and its to_wire() method to generate wire-format messages.
+ This class is for those applications which need finer control
+ over the generation of messages.
+
+ Typical use::
+
+ r = dns.renderer.Renderer(id=1, flags=0x80, max_size=512)
+ r.add_question(qname, qtype, qclass)
+ r.add_rrset(dns.renderer.ANSWER, rrset_1)
+ r.add_rrset(dns.renderer.ANSWER, rrset_2)
+ r.add_rrset(dns.renderer.AUTHORITY, ns_rrset)
+ r.add_edns(0, 0, 4096)
+ r.add_rrset(dns.renderer.ADDTIONAL, ad_rrset_1)
+ r.add_rrset(dns.renderer.ADDTIONAL, ad_rrset_2)
+ r.write_header()
+ r.add_tsig(keyname, secret, 300, 1, 0, '', request_mac)
+ wire = r.get_wire()
+
+ @ivar output: where rendering is written
+ @type output: BytesIO object
+ @ivar id: the message id
+ @type id: int
+ @ivar flags: the message flags
+ @type flags: int
+ @ivar max_size: the maximum size of the message
+ @type max_size: int
+ @ivar origin: the origin to use when rendering relative names
+ @type origin: dns.name.Name object
+ @ivar compress: the compression table
+ @type compress: dict
+ @ivar section: the section currently being rendered
+ @type section: int (dns.renderer.QUESTION, dns.renderer.ANSWER,
+ dns.renderer.AUTHORITY, or dns.renderer.ADDITIONAL)
+ @ivar counts: list of the number of RRs in each section
+ @type counts: int list of length 4
+ @ivar mac: the MAC of the rendered message (if TSIG was used)
+ @type mac: string
+ """
+
+ def __init__(self, id=None, flags=0, max_size=65535, origin=None):
+ """Initialize a new renderer.
+
+ @param id: the message id
+ @type id: int
+ @param flags: the DNS message flags
+ @type flags: int
+ @param max_size: the maximum message size; the default is 65535.
+ If rendering results in a message greater than I{max_size},
+ then L{dns.exception.TooBig} will be raised.
+ @type max_size: int
+ @param origin: the origin to use when rendering relative names
+ @type origin: dns.name.Name or None.
+ """
+
+ self.output = BytesIO()
+ if id is None:
+ self.id = random.randint(0, 65535)
+ else:
+ self.id = id
+ self.flags = flags
+ self.max_size = max_size
+ self.origin = origin
+ self.compress = {}
+ self.section = QUESTION
+ self.counts = [0, 0, 0, 0]
+ self.output.write(b'\x00' * 12)
+ self.mac = ''
+
+ def _rollback(self, where):
+ """Truncate the output buffer at offset I{where}, and remove any
+ compression table entries that pointed beyond the truncation
+ point.
+
+ @param where: the offset
+ @type where: int
+ """
+
+ self.output.seek(where)
+ self.output.truncate()
+ keys_to_delete = []
+ for k, v in self.compress.items():
+ if v >= where:
+ keys_to_delete.append(k)
+ for k in keys_to_delete:
+ del self.compress[k]
+
+ def _set_section(self, section):
+ """Set the renderer's current section.
+
+ Sections must be rendered order: QUESTION, ANSWER, AUTHORITY,
+ ADDITIONAL. Sections may be empty.
+
+ @param section: the section
+ @type section: int
+ @raises dns.exception.FormError: an attempt was made to set
+ a section value less than the current section.
+ """
+
+ if self.section != section:
+ if self.section > section:
+ raise dns.exception.FormError
+ self.section = section
+
+ def add_question(self, qname, rdtype, rdclass=dns.rdataclass.IN):
+ """Add a question to the message.
+
+ @param qname: the question name
+ @type qname: dns.name.Name
+ @param rdtype: the question rdata type
+ @type rdtype: int
+ @param rdclass: the question rdata class
+ @type rdclass: int
+ """
+
+ self._set_section(QUESTION)
+ before = self.output.tell()
+ qname.to_wire(self.output, self.compress, self.origin)
+ self.output.write(struct.pack("!HH", rdtype, rdclass))
+ after = self.output.tell()
+ if after >= self.max_size:
+ self._rollback(before)
+ raise dns.exception.TooBig
+ self.counts[QUESTION] += 1
+
+ def add_rrset(self, section, rrset, **kw):
+ """Add the rrset to the specified section.
+
+ Any keyword arguments are passed on to the rdataset's to_wire()
+ routine.
+
+ @param section: the section
+ @type section: int
+ @param rrset: the rrset
+ @type rrset: dns.rrset.RRset object
+ """
+
+ self._set_section(section)
+ before = self.output.tell()
+ n = rrset.to_wire(self.output, self.compress, self.origin, **kw)
+ after = self.output.tell()
+ if after >= self.max_size:
+ self._rollback(before)
+ raise dns.exception.TooBig
+ self.counts[section] += n
+
+ def add_rdataset(self, section, name, rdataset, **kw):
+ """Add the rdataset to the specified section, using the specified
+ name as the owner name.
+
+ Any keyword arguments are passed on to the rdataset's to_wire()
+ routine.
+
+ @param section: the section
+ @type section: int
+ @param name: the owner name
+ @type name: dns.name.Name object
+ @param rdataset: the rdataset
+ @type rdataset: dns.rdataset.Rdataset object
+ """
+
+ self._set_section(section)
+ before = self.output.tell()
+ n = rdataset.to_wire(name, self.output, self.compress, self.origin,
+ **kw)
+ after = self.output.tell()
+ if after >= self.max_size:
+ self._rollback(before)
+ raise dns.exception.TooBig
+ self.counts[section] += n
+
+ def add_edns(self, edns, ednsflags, payload, options=None):
+ """Add an EDNS OPT record to the message.
+
+ @param edns: The EDNS level to use.
+ @type edns: int
+ @param ednsflags: EDNS flag values.
+ @type ednsflags: int
+ @param payload: The EDNS sender's payload field, which is the maximum
+ size of UDP datagram the sender can handle.
+ @type payload: int
+ @param options: The EDNS options list
+ @type options: list of dns.edns.Option instances
+ @see: RFC 2671
+ """
+
+ # make sure the EDNS version in ednsflags agrees with edns
+ ednsflags &= long(0xFF00FFFF)
+ ednsflags |= (edns << 16)
+ self._set_section(ADDITIONAL)
+ before = self.output.tell()
+ self.output.write(struct.pack('!BHHIH', 0, dns.rdatatype.OPT, payload,
+ ednsflags, 0))
+ if options is not None:
+ lstart = self.output.tell()
+ for opt in options:
+ stuff = struct.pack("!HH", opt.otype, 0)
+ self.output.write(stuff)
+ start = self.output.tell()
+ opt.to_wire(self.output)
+ end = self.output.tell()
+ assert end - start < 65536
+ self.output.seek(start - 2)
+ stuff = struct.pack("!H", end - start)
+ self.output.write(stuff)
+ self.output.seek(0, 2)
+ lend = self.output.tell()
+ assert lend - lstart < 65536
+ self.output.seek(lstart - 2)
+ stuff = struct.pack("!H", lend - lstart)
+ self.output.write(stuff)
+ self.output.seek(0, 2)
+ after = self.output.tell()
+ if after >= self.max_size:
+ self._rollback(before)
+ raise dns.exception.TooBig
+ self.counts[ADDITIONAL] += 1
+
+ def add_tsig(self, keyname, secret, fudge, id, tsig_error, other_data,
+ request_mac, algorithm=dns.tsig.default_algorithm):
+ """Add a TSIG signature to the message.
+
+ @param keyname: the TSIG key name
+ @type keyname: dns.name.Name object
+ @param secret: the secret to use
+ @type secret: string
+ @param fudge: TSIG time fudge
+ @type fudge: int
+ @param id: the message id to encode in the tsig signature
+ @type id: int
+ @param tsig_error: TSIG error code; default is 0.
+ @type tsig_error: int
+ @param other_data: TSIG other data.
+ @type other_data: string
+ @param request_mac: This message is a response to the request which
+ had the specified MAC.
+ @type request_mac: string
+ @param algorithm: the TSIG algorithm to use
+ @type algorithm: dns.name.Name object
+ """
+
+ self._set_section(ADDITIONAL)
+ before = self.output.tell()
+ s = self.output.getvalue()
+ (tsig_rdata, self.mac, ctx) = dns.tsig.sign(s,
+ keyname,
+ secret,
+ int(time.time()),
+ fudge,
+ id,
+ tsig_error,
+ other_data,
+ request_mac,
+ algorithm=algorithm)
+ keyname.to_wire(self.output, self.compress, self.origin)
+ self.output.write(struct.pack('!HHIH', dns.rdatatype.TSIG,
+ dns.rdataclass.ANY, 0, 0))
+ rdata_start = self.output.tell()
+ self.output.write(tsig_rdata)
+ after = self.output.tell()
+ assert after - rdata_start < 65536
+ if after >= self.max_size:
+ self._rollback(before)
+ raise dns.exception.TooBig
+ self.output.seek(rdata_start - 2)
+ self.output.write(struct.pack('!H', after - rdata_start))
+ self.counts[ADDITIONAL] += 1
+ self.output.seek(10)
+ self.output.write(struct.pack('!H', self.counts[ADDITIONAL]))
+ self.output.seek(0, 2)
+
+ def write_header(self):
+ """Write the DNS message header.
+
+ Writing the DNS message header is done after all sections
+ have been rendered, but before the optional TSIG signature
+ is added.
+ """
+
+ self.output.seek(0)
+ self.output.write(struct.pack('!HHHHHH', self.id, self.flags,
+ self.counts[0], self.counts[1],
+ self.counts[2], self.counts[3]))
+ self.output.seek(0, 2)
+
+ def get_wire(self):
+ """Return the wire format message.
+
+ @rtype: string
+ """
+
+ return self.output.getvalue()
diff --git a/Contents/Libraries/Shared/dns/resolver.py b/Contents/Libraries/Shared/dns/resolver.py
new file mode 100644
index 000000000..abc431d7f
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/resolver.py
@@ -0,0 +1,1407 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS stub resolver.
+
+@var default_resolver: The default resolver object
+@type default_resolver: dns.resolver.Resolver object"""
+
+import socket
+import sys
+import time
+import random
+
+try:
+ import threading as _threading
+except ImportError:
+ import dummy_threading as _threading
+
+import dns.exception
+import dns.flags
+import dns.ipv4
+import dns.ipv6
+import dns.message
+import dns.name
+import dns.query
+import dns.rcode
+import dns.rdataclass
+import dns.rdatatype
+import dns.reversename
+import dns.tsig
+from ._compat import xrange, string_types
+
+if sys.platform == 'win32':
+ try:
+ import winreg as _winreg
+ except ImportError:
+ import _winreg # pylint: disable=import-error
+
+class NXDOMAIN(dns.exception.DNSException):
+
+ """The DNS query name does not exist."""
+ supp_kwargs = set(['qnames', 'responses'])
+ fmt = None # we have our own __str__ implementation
+
+ def _check_kwargs(self, qnames, responses=None):
+ if not isinstance(qnames, (list, tuple, set)):
+ raise AttributeError("qnames must be a list, tuple or set")
+ if len(qnames) == 0:
+ raise AttributeError("qnames must contain at least one element")
+ if responses is None:
+ responses = {}
+ elif not isinstance(responses, dict):
+ raise AttributeError("responses must be a dict(qname=response)")
+ kwargs = dict(qnames=qnames, responses=responses)
+ return kwargs
+
+ def __str__(self):
+ if 'qnames' not in self.kwargs:
+ return super(NXDOMAIN, self).__str__()
+ qnames = self.kwargs['qnames']
+ if len(qnames) > 1:
+ msg = 'None of DNS query names exist'
+ else:
+ msg = self.__doc__[:-1]
+ qnames = ', '.join(map(str, qnames))
+ return "%s: %s" % (msg, qnames)
+
+ def canonical_name(self):
+ if not 'qnames' in self.kwargs:
+ raise TypeError("parametrized exception required")
+ IN = dns.rdataclass.IN
+ CNAME = dns.rdatatype.CNAME
+ cname = None
+ for qname in self.kwargs['qnames']:
+ response = self.kwargs['responses'][qname]
+ for answer in response.answer:
+ if answer.rdtype != CNAME or answer.rdclass != IN:
+ continue
+ cname = answer.items[0].target.to_text()
+ if cname is not None:
+ return dns.name.from_text(cname)
+ return self.kwargs['qnames'][0]
+ canonical_name = property(canonical_name, doc=(
+ "Return the unresolved canonical name."))
+
+ def __add__(self, e_nx):
+ """Augment by results from another NXDOMAIN exception."""
+ qnames0 = list(self.kwargs.get('qnames', []))
+ responses0 = dict(self.kwargs.get('responses', {}))
+ responses1 = e_nx.kwargs.get('responses', {})
+ for qname1 in e_nx.kwargs.get('qnames', []):
+ if qname1 not in qnames0:
+ qnames0.append(qname1)
+ if qname1 in responses1:
+ responses0[qname1] = responses1[qname1]
+ return NXDOMAIN(qnames=qnames0, responses=responses0)
+
+
+class YXDOMAIN(dns.exception.DNSException):
+
+ """The DNS query name is too long after DNAME substitution."""
+
+# The definition of the Timeout exception has moved from here to the
+# dns.exception module. We keep dns.resolver.Timeout defined for
+# backwards compatibility.
+
+Timeout = dns.exception.Timeout
+
+
+class NoAnswer(dns.exception.DNSException):
+
+ """The DNS response does not contain an answer to the question."""
+ fmt = 'The DNS response does not contain an answer ' + \
+ 'to the question: {query}'
+ supp_kwargs = set(['response'])
+
+ def _fmt_kwargs(self, **kwargs):
+ return super(NoAnswer, self)._fmt_kwargs(
+ query=kwargs['response'].question)
+
+
+class NoNameservers(dns.exception.DNSException):
+
+ """All nameservers failed to answer the query.
+
+ errors: list of servers and respective errors
+ The type of errors is
+ [(server ip address, any object convertible to string)].
+ Non-empty errors list will add explanatory message ()
+ """
+
+ msg = "All nameservers failed to answer the query."
+ fmt = "%s {query}: {errors}" % msg[:-1]
+ supp_kwargs = set(['request', 'errors'])
+
+ def _fmt_kwargs(self, **kwargs):
+ srv_msgs = []
+ for err in kwargs['errors']:
+ srv_msgs.append('Server %s %s port %s answered %s' % (err[0],
+ 'TCP' if err[1] else 'UDP', err[2], err[3]))
+ return super(NoNameservers, self)._fmt_kwargs(
+ query=kwargs['request'].question, errors='; '.join(srv_msgs))
+
+
+class NotAbsolute(dns.exception.DNSException):
+
+ """An absolute domain name is required but a relative name was provided."""
+
+
+class NoRootSOA(dns.exception.DNSException):
+
+ """There is no SOA RR at the DNS root name. This should never happen!"""
+
+
+class NoMetaqueries(dns.exception.DNSException):
+
+ """DNS metaqueries are not allowed."""
+
+
+class Answer(object):
+
+ """DNS stub resolver answer
+
+ Instances of this class bundle up the result of a successful DNS
+ resolution.
+
+ For convenience, the answer object implements much of the sequence
+ protocol, forwarding to its rrset. E.g. "for a in answer" is
+ equivalent to "for a in answer.rrset", "answer[i]" is equivalent
+ to "answer.rrset[i]", and "answer[i:j]" is equivalent to
+ "answer.rrset[i:j]".
+
+ Note that CNAMEs or DNAMEs in the response may mean that answer
+ node's name might not be the query name.
+
+ @ivar qname: The query name
+ @type qname: dns.name.Name object
+ @ivar rdtype: The query type
+ @type rdtype: int
+ @ivar rdclass: The query class
+ @type rdclass: int
+ @ivar response: The response message
+ @type response: dns.message.Message object
+ @ivar rrset: The answer
+ @type rrset: dns.rrset.RRset object
+ @ivar expiration: The time when the answer expires
+ @type expiration: float (seconds since the epoch)
+ @ivar canonical_name: The canonical name of the query name
+ @type canonical_name: dns.name.Name object
+ """
+
+ def __init__(self, qname, rdtype, rdclass, response,
+ raise_on_no_answer=True):
+ self.qname = qname
+ self.rdtype = rdtype
+ self.rdclass = rdclass
+ self.response = response
+ min_ttl = -1
+ rrset = None
+ for count in xrange(0, 15):
+ try:
+ rrset = response.find_rrset(response.answer, qname,
+ rdclass, rdtype)
+ if min_ttl == -1 or rrset.ttl < min_ttl:
+ min_ttl = rrset.ttl
+ break
+ except KeyError:
+ if rdtype != dns.rdatatype.CNAME:
+ try:
+ crrset = response.find_rrset(response.answer,
+ qname,
+ rdclass,
+ dns.rdatatype.CNAME)
+ if min_ttl == -1 or crrset.ttl < min_ttl:
+ min_ttl = crrset.ttl
+ for rd in crrset:
+ qname = rd.target
+ break
+ continue
+ except KeyError:
+ if raise_on_no_answer:
+ raise NoAnswer(response=response)
+ if raise_on_no_answer:
+ raise NoAnswer(response=response)
+ if rrset is None and raise_on_no_answer:
+ raise NoAnswer(response=response)
+ self.canonical_name = qname
+ self.rrset = rrset
+ if rrset is None:
+ while 1:
+ # Look for a SOA RR whose owner name is a superdomain
+ # of qname.
+ try:
+ srrset = response.find_rrset(response.authority, qname,
+ rdclass, dns.rdatatype.SOA)
+ if min_ttl == -1 or srrset.ttl < min_ttl:
+ min_ttl = srrset.ttl
+ if srrset[0].minimum < min_ttl:
+ min_ttl = srrset[0].minimum
+ break
+ except KeyError:
+ try:
+ qname = qname.parent()
+ except dns.name.NoParent:
+ break
+ self.expiration = time.time() + min_ttl
+
+ def __getattr__(self, attr):
+ if attr == 'name':
+ return self.rrset.name
+ elif attr == 'ttl':
+ return self.rrset.ttl
+ elif attr == 'covers':
+ return self.rrset.covers
+ elif attr == 'rdclass':
+ return self.rrset.rdclass
+ elif attr == 'rdtype':
+ return self.rrset.rdtype
+ else:
+ raise AttributeError(attr)
+
+ def __len__(self):
+ return self.rrset and len(self.rrset) or 0
+
+ def __iter__(self):
+ return self.rrset and iter(self.rrset) or iter(tuple())
+
+ def __getitem__(self, i):
+ return self.rrset[i]
+
+ def __delitem__(self, i):
+ del self.rrset[i]
+
+
+class Cache(object):
+
+ """Simple DNS answer cache.
+
+ @ivar data: A dictionary of cached data
+ @type data: dict
+ @ivar cleaning_interval: The number of seconds between cleanings. The
+ default is 300 (5 minutes).
+ @type cleaning_interval: float
+ @ivar next_cleaning: The time the cache should next be cleaned (in seconds
+ since the epoch.)
+ @type next_cleaning: float
+ """
+
+ def __init__(self, cleaning_interval=300.0):
+ """Initialize a DNS cache.
+
+ @param cleaning_interval: the number of seconds between periodic
+ cleanings. The default is 300.0
+ @type cleaning_interval: float.
+ """
+
+ self.data = {}
+ self.cleaning_interval = cleaning_interval
+ self.next_cleaning = time.time() + self.cleaning_interval
+ self.lock = _threading.Lock()
+
+ def _maybe_clean(self):
+ """Clean the cache if it's time to do so."""
+
+ now = time.time()
+ if self.next_cleaning <= now:
+ keys_to_delete = []
+ for (k, v) in self.data.items():
+ if v.expiration <= now:
+ keys_to_delete.append(k)
+ for k in keys_to_delete:
+ del self.data[k]
+ now = time.time()
+ self.next_cleaning = now + self.cleaning_interval
+
+ def get(self, key):
+ """Get the answer associated with I{key}. Returns None if
+ no answer is cached for the key.
+ @param key: the key
+ @type key: (dns.name.Name, int, int) tuple whose values are the
+ query name, rdtype, and rdclass.
+ @rtype: dns.resolver.Answer object or None
+ """
+
+ try:
+ self.lock.acquire()
+ self._maybe_clean()
+ v = self.data.get(key)
+ if v is None or v.expiration <= time.time():
+ return None
+ return v
+ finally:
+ self.lock.release()
+
+ def put(self, key, value):
+ """Associate key and value in the cache.
+ @param key: the key
+ @type key: (dns.name.Name, int, int) tuple whose values are the
+ query name, rdtype, and rdclass.
+ @param value: The answer being cached
+ @type value: dns.resolver.Answer object
+ """
+
+ try:
+ self.lock.acquire()
+ self._maybe_clean()
+ self.data[key] = value
+ finally:
+ self.lock.release()
+
+ def flush(self, key=None):
+ """Flush the cache.
+
+ If I{key} is specified, only that item is flushed. Otherwise
+ the entire cache is flushed.
+
+ @param key: the key to flush
+ @type key: (dns.name.Name, int, int) tuple or None
+ """
+
+ try:
+ self.lock.acquire()
+ if key is not None:
+ if key in self.data:
+ del self.data[key]
+ else:
+ self.data = {}
+ self.next_cleaning = time.time() + self.cleaning_interval
+ finally:
+ self.lock.release()
+
+
+class LRUCacheNode(object):
+
+ """LRUCache node.
+ """
+
+ def __init__(self, key, value):
+ self.key = key
+ self.value = value
+ self.prev = self
+ self.next = self
+
+ def link_before(self, node):
+ self.prev = node.prev
+ self.next = node
+ node.prev.next = self
+ node.prev = self
+
+ def link_after(self, node):
+ self.prev = node
+ self.next = node.next
+ node.next.prev = self
+ node.next = self
+
+ def unlink(self):
+ self.next.prev = self.prev
+ self.prev.next = self.next
+
+
+class LRUCache(object):
+
+ """Bounded least-recently-used DNS answer cache.
+
+ This cache is better than the simple cache (above) if you're
+ running a web crawler or other process that does a lot of
+ resolutions. The LRUCache has a maximum number of nodes, and when
+ it is full, the least-recently used node is removed to make space
+ for a new one.
+
+ @ivar data: A dictionary of cached data
+ @type data: dict
+ @ivar sentinel: sentinel node for circular doubly linked list of nodes
+ @type sentinel: LRUCacheNode object
+ @ivar max_size: The maximum number of nodes
+ @type max_size: int
+ """
+
+ def __init__(self, max_size=100000):
+ """Initialize a DNS cache.
+
+ @param max_size: The maximum number of nodes to cache; the default is
+ 100,000. Must be greater than 1.
+ @type max_size: int
+ """
+ self.data = {}
+ self.set_max_size(max_size)
+ self.sentinel = LRUCacheNode(None, None)
+ self.lock = _threading.Lock()
+
+ def set_max_size(self, max_size):
+ if max_size < 1:
+ max_size = 1
+ self.max_size = max_size
+
+ def get(self, key):
+ """Get the answer associated with I{key}. Returns None if
+ no answer is cached for the key.
+ @param key: the key
+ @type key: (dns.name.Name, int, int) tuple whose values are the
+ query name, rdtype, and rdclass.
+ @rtype: dns.resolver.Answer object or None
+ """
+ try:
+ self.lock.acquire()
+ node = self.data.get(key)
+ if node is None:
+ return None
+ # Unlink because we're either going to move the node to the front
+ # of the LRU list or we're going to free it.
+ node.unlink()
+ if node.value.expiration <= time.time():
+ del self.data[node.key]
+ return None
+ node.link_after(self.sentinel)
+ return node.value
+ finally:
+ self.lock.release()
+
+ def put(self, key, value):
+ """Associate key and value in the cache.
+ @param key: the key
+ @type key: (dns.name.Name, int, int) tuple whose values are the
+ query name, rdtype, and rdclass.
+ @param value: The answer being cached
+ @type value: dns.resolver.Answer object
+ """
+ try:
+ self.lock.acquire()
+ node = self.data.get(key)
+ if node is not None:
+ node.unlink()
+ del self.data[node.key]
+ while len(self.data) >= self.max_size:
+ node = self.sentinel.prev
+ node.unlink()
+ del self.data[node.key]
+ node = LRUCacheNode(key, value)
+ node.link_after(self.sentinel)
+ self.data[key] = node
+ finally:
+ self.lock.release()
+
+ def flush(self, key=None):
+ """Flush the cache.
+
+ If I{key} is specified, only that item is flushed. Otherwise
+ the entire cache is flushed.
+
+ @param key: the key to flush
+ @type key: (dns.name.Name, int, int) tuple or None
+ """
+ try:
+ self.lock.acquire()
+ if key is not None:
+ node = self.data.get(key)
+ if node is not None:
+ node.unlink()
+ del self.data[node.key]
+ else:
+ node = self.sentinel.next
+ while node != self.sentinel:
+ next = node.next
+ node.prev = None
+ node.next = None
+ node = next
+ self.data = {}
+ finally:
+ self.lock.release()
+
+
+class Resolver(object):
+
+ """DNS stub resolver
+
+ @ivar domain: The domain of this host
+ @type domain: dns.name.Name object
+ @ivar nameservers: A list of nameservers to query. Each nameserver is
+ a string which contains the IP address of a nameserver.
+ @type nameservers: list of strings
+ @ivar search: The search list. If the query name is a relative name,
+ the resolver will construct an absolute query name by appending the search
+ names one by one to the query name.
+ @type search: list of dns.name.Name objects
+ @ivar port: The port to which to send queries. The default is 53.
+ @type port: int
+ @ivar timeout: The number of seconds to wait for a response from a
+ server, before timing out.
+ @type timeout: float
+ @ivar lifetime: The total number of seconds to spend trying to get an
+ answer to the question. If the lifetime expires, a Timeout exception
+ will occur.
+ @type lifetime: float
+ @ivar keyring: The TSIG keyring to use. The default is None.
+ @type keyring: dict
+ @ivar keyname: The TSIG keyname to use. The default is None.
+ @type keyname: dns.name.Name object
+ @ivar keyalgorithm: The TSIG key algorithm to use. The default is
+ dns.tsig.default_algorithm.
+ @type keyalgorithm: string
+ @ivar edns: The EDNS level to use. The default is -1, no Edns.
+ @type edns: int
+ @ivar ednsflags: The EDNS flags
+ @type ednsflags: int
+ @ivar payload: The EDNS payload size. The default is 0.
+ @type payload: int
+ @ivar flags: The message flags to use. The default is None (i.e. not
+ overwritten)
+ @type flags: int
+ @ivar cache: The cache to use. The default is None.
+ @type cache: dns.resolver.Cache object
+ @ivar retry_servfail: should we retry a nameserver if it says SERVFAIL?
+ The default is 'false'.
+ @type retry_servfail: bool
+ """
+
+ def __init__(self, filename='/etc/resolv.conf', configure=True):
+ """Initialize a resolver instance.
+
+ @param filename: The filename of a configuration file in
+ standard /etc/resolv.conf format. This parameter is meaningful
+ only when I{configure} is true and the platform is POSIX.
+ @type filename: string or file object
+ @param configure: If True (the default), the resolver instance
+ is configured in the normal fashion for the operating system
+ the resolver is running on. (I.e. a /etc/resolv.conf file on
+ POSIX systems and from the registry on Windows systems.)
+ @type configure: bool"""
+
+ self.domain = None
+ self.nameservers = None
+ self.nameserver_ports = None
+ self.port = None
+ self.search = None
+ self.timeout = None
+ self.lifetime = None
+ self.keyring = None
+ self.keyname = None
+ self.keyalgorithm = None
+ self.edns = None
+ self.ednsflags = None
+ self.payload = None
+ self.cache = None
+ self.flags = None
+ self.retry_servfail = False
+ self.rotate = False
+
+ self.reset()
+ if configure:
+ if sys.platform == 'win32':
+ self.read_registry()
+ elif filename:
+ self.read_resolv_conf(filename)
+
+ def reset(self):
+ """Reset all resolver configuration to the defaults."""
+ self.domain = \
+ dns.name.Name(dns.name.from_text(socket.gethostname())[1:])
+ if len(self.domain) == 0:
+ self.domain = dns.name.root
+ self.nameservers = []
+ self.nameserver_ports = {}
+ self.port = 53
+ self.search = []
+ self.timeout = 2.0
+ self.lifetime = 30.0
+ self.keyring = None
+ self.keyname = None
+ self.keyalgorithm = dns.tsig.default_algorithm
+ self.edns = -1
+ self.ednsflags = 0
+ self.payload = 0
+ self.cache = None
+ self.flags = None
+ self.retry_servfail = False
+ self.rotate = False
+
+ def read_resolv_conf(self, f):
+ """Process f as a file in the /etc/resolv.conf format. If f is
+ a string, it is used as the name of the file to open; otherwise it
+ is treated as the file itself."""
+ if isinstance(f, string_types):
+ try:
+ f = open(f, 'r')
+ except IOError:
+ # /etc/resolv.conf doesn't exist, can't be read, etc.
+ # We'll just use the default resolver configuration.
+ self.nameservers = ['127.0.0.1']
+ return
+ want_close = True
+ else:
+ want_close = False
+ try:
+ for l in f:
+ if len(l) == 0 or l[0] == '#' or l[0] == ';':
+ continue
+ tokens = l.split()
+
+ # Any line containing less than 2 tokens is malformed
+ if len(tokens) < 2:
+ continue
+
+ if tokens[0] == 'nameserver':
+ self.nameservers.append(tokens[1])
+ elif tokens[0] == 'domain':
+ self.domain = dns.name.from_text(tokens[1])
+ elif tokens[0] == 'search':
+ for suffix in tokens[1:]:
+ self.search.append(dns.name.from_text(suffix))
+ elif tokens[0] == 'options':
+ if 'rotate' in tokens[1:]:
+ self.rotate = True
+ finally:
+ if want_close:
+ f.close()
+ if len(self.nameservers) == 0:
+ self.nameservers.append('127.0.0.1')
+
+ def _determine_split_char(self, entry):
+ #
+ # The windows registry irritatingly changes the list element
+ # delimiter in between ' ' and ',' (and vice-versa) in various
+ # versions of windows.
+ #
+ if entry.find(' ') >= 0:
+ split_char = ' '
+ elif entry.find(',') >= 0:
+ split_char = ','
+ else:
+ # probably a singleton; treat as a space-separated list.
+ split_char = ' '
+ return split_char
+
+ def _config_win32_nameservers(self, nameservers):
+ """Configure a NameServer registry entry."""
+ # we call str() on nameservers to convert it from unicode to ascii
+ nameservers = str(nameservers)
+ split_char = self._determine_split_char(nameservers)
+ ns_list = nameservers.split(split_char)
+ for ns in ns_list:
+ if ns not in self.nameservers:
+ self.nameservers.append(ns)
+
+ def _config_win32_domain(self, domain):
+ """Configure a Domain registry entry."""
+ # we call str() on domain to convert it from unicode to ascii
+ self.domain = dns.name.from_text(str(domain))
+
+ def _config_win32_search(self, search):
+ """Configure a Search registry entry."""
+ # we call str() on search to convert it from unicode to ascii
+ search = str(search)
+ split_char = self._determine_split_char(search)
+ search_list = search.split(split_char)
+ for s in search_list:
+ if s not in self.search:
+ self.search.append(dns.name.from_text(s))
+
+ def _config_win32_fromkey(self, key):
+ """Extract DNS info from a registry key."""
+ try:
+ servers, rtype = _winreg.QueryValueEx(key, 'NameServer')
+ except WindowsError: # pylint: disable=undefined-variable
+ servers = None
+ if servers:
+ self._config_win32_nameservers(servers)
+ try:
+ dom, rtype = _winreg.QueryValueEx(key, 'Domain')
+ if dom:
+ self._config_win32_domain(dom)
+ except WindowsError: # pylint: disable=undefined-variable
+ pass
+ else:
+ try:
+ servers, rtype = _winreg.QueryValueEx(key, 'DhcpNameServer')
+ except WindowsError: # pylint: disable=undefined-variable
+ servers = None
+ if servers:
+ self._config_win32_nameservers(servers)
+ try:
+ dom, rtype = _winreg.QueryValueEx(key, 'DhcpDomain')
+ if dom:
+ self._config_win32_domain(dom)
+ except WindowsError: # pylint: disable=undefined-variable
+ pass
+ try:
+ search, rtype = _winreg.QueryValueEx(key, 'SearchList')
+ except WindowsError: # pylint: disable=undefined-variable
+ search = None
+ if search:
+ self._config_win32_search(search)
+
+ def read_registry(self):
+ """Extract resolver configuration from the Windows registry."""
+ lm = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
+ want_scan = False
+ try:
+ try:
+ # XP, 2000
+ tcp_params = _winreg.OpenKey(lm,
+ r'SYSTEM\CurrentControlSet'
+ r'\Services\Tcpip\Parameters')
+ want_scan = True
+ except EnvironmentError:
+ # ME
+ tcp_params = _winreg.OpenKey(lm,
+ r'SYSTEM\CurrentControlSet'
+ r'\Services\VxD\MSTCP')
+ try:
+ self._config_win32_fromkey(tcp_params)
+ finally:
+ tcp_params.Close()
+ if want_scan:
+ interfaces = _winreg.OpenKey(lm,
+ r'SYSTEM\CurrentControlSet'
+ r'\Services\Tcpip\Parameters'
+ r'\Interfaces')
+ try:
+ i = 0
+ while True:
+ try:
+ guid = _winreg.EnumKey(interfaces, i)
+ i += 1
+ key = _winreg.OpenKey(interfaces, guid)
+ if not self._win32_is_nic_enabled(lm, guid, key):
+ continue
+ try:
+ self._config_win32_fromkey(key)
+ finally:
+ key.Close()
+ except EnvironmentError:
+ break
+ finally:
+ interfaces.Close()
+ finally:
+ lm.Close()
+
+ def _win32_is_nic_enabled(self, lm, guid, interface_key):
+ # Look in the Windows Registry to determine whether the network
+ # interface corresponding to the given guid is enabled.
+ #
+ # (Code contributed by Paul Marks, thanks!)
+ #
+ try:
+ # This hard-coded location seems to be consistent, at least
+ # from Windows 2000 through Vista.
+ connection_key = _winreg.OpenKey(
+ lm,
+ r'SYSTEM\CurrentControlSet\Control\Network'
+ r'\{4D36E972-E325-11CE-BFC1-08002BE10318}'
+ r'\%s\Connection' % guid)
+
+ try:
+ # The PnpInstanceID points to a key inside Enum
+ (pnp_id, ttype) = _winreg.QueryValueEx(
+ connection_key, 'PnpInstanceID')
+
+ if ttype != _winreg.REG_SZ:
+ raise ValueError
+
+ device_key = _winreg.OpenKey(
+ lm, r'SYSTEM\CurrentControlSet\Enum\%s' % pnp_id)
+
+ try:
+ # Get ConfigFlags for this device
+ (flags, ttype) = _winreg.QueryValueEx(
+ device_key, 'ConfigFlags')
+
+ if ttype != _winreg.REG_DWORD:
+ raise ValueError
+
+ # Based on experimentation, bit 0x1 indicates that the
+ # device is disabled.
+ return not flags & 0x1
+
+ finally:
+ device_key.Close()
+ finally:
+ connection_key.Close()
+ except (EnvironmentError, ValueError):
+ # Pre-vista, enabled interfaces seem to have a non-empty
+ # NTEContextList; this was how dnspython detected enabled
+ # nics before the code above was contributed. We've retained
+ # the old method since we don't know if the code above works
+ # on Windows 95/98/ME.
+ try:
+ (nte, ttype) = _winreg.QueryValueEx(interface_key,
+ 'NTEContextList')
+ return nte is not None
+ except WindowsError: # pylint: disable=undefined-variable
+ return False
+
+ def _compute_timeout(self, start):
+ now = time.time()
+ duration = now - start
+ if duration < 0:
+ if duration < -1:
+ # Time going backwards is bad. Just give up.
+ raise Timeout(timeout=duration)
+ else:
+ # Time went backwards, but only a little. This can
+ # happen, e.g. under vmware with older linux kernels.
+ # Pretend it didn't happen.
+ now = start
+ if duration >= self.lifetime:
+ raise Timeout(timeout=duration)
+ return min(self.lifetime - duration, self.timeout)
+
+ def query(self, qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN,
+ tcp=False, source=None, raise_on_no_answer=True, source_port=0):
+ """Query nameservers to find the answer to the question.
+
+ The I{qname}, I{rdtype}, and I{rdclass} parameters may be objects
+ of the appropriate type, or strings that can be converted into objects
+ of the appropriate type. E.g. For I{rdtype} the integer 2 and the
+ the string 'NS' both mean to query for records with DNS rdata type NS.
+
+ @param qname: the query name
+ @type qname: dns.name.Name object or string
+ @param rdtype: the query type
+ @type rdtype: int or string
+ @param rdclass: the query class
+ @type rdclass: int or string
+ @param tcp: use TCP to make the query (default is False).
+ @type tcp: bool
+ @param source: bind to this IP address (defaults to machine default
+ IP).
+ @type source: IP address in dotted quad notation
+ @param raise_on_no_answer: raise NoAnswer if there's no answer
+ (defaults is True).
+ @type raise_on_no_answer: bool
+ @param source_port: The port from which to send the message.
+ The default is 0.
+ @type source_port: int
+ @rtype: dns.resolver.Answer instance
+ @raises Timeout: no answers could be found in the specified lifetime
+ @raises NXDOMAIN: the query name does not exist
+ @raises YXDOMAIN: the query name is too long after DNAME substitution
+ @raises NoAnswer: the response did not contain an answer and
+ raise_on_no_answer is True.
+ @raises NoNameservers: no non-broken nameservers are available to
+ answer the question."""
+
+ if isinstance(qname, string_types):
+ qname = dns.name.from_text(qname, None)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ if dns.rdatatype.is_metatype(rdtype):
+ raise NoMetaqueries
+ if isinstance(rdclass, string_types):
+ rdclass = dns.rdataclass.from_text(rdclass)
+ if dns.rdataclass.is_metaclass(rdclass):
+ raise NoMetaqueries
+ qnames_to_try = []
+ if qname.is_absolute():
+ qnames_to_try.append(qname)
+ else:
+ if len(qname) > 1:
+ qnames_to_try.append(qname.concatenate(dns.name.root))
+ if self.search:
+ for suffix in self.search:
+ qnames_to_try.append(qname.concatenate(suffix))
+ else:
+ qnames_to_try.append(qname.concatenate(self.domain))
+ all_nxdomain = True
+ nxdomain_responses = {}
+ start = time.time()
+ _qname = None # make pylint happy
+ for _qname in qnames_to_try:
+ if self.cache:
+ answer = self.cache.get((_qname, rdtype, rdclass))
+ if answer is not None:
+ if answer.rrset is None and raise_on_no_answer:
+ raise NoAnswer(response=answer.response)
+ else:
+ return answer
+ request = dns.message.make_query(_qname, rdtype, rdclass)
+ if self.keyname is not None:
+ request.use_tsig(self.keyring, self.keyname,
+ algorithm=self.keyalgorithm)
+ request.use_edns(self.edns, self.ednsflags, self.payload)
+ if self.flags is not None:
+ request.flags = self.flags
+ response = None
+ #
+ # make a copy of the servers list so we can alter it later.
+ #
+ nameservers = self.nameservers[:]
+ errors = []
+ if self.rotate:
+ random.shuffle(nameservers)
+ backoff = 0.10
+ while response is None:
+ if len(nameservers) == 0:
+ raise NoNameservers(request=request, errors=errors)
+ for nameserver in nameservers[:]:
+ timeout = self._compute_timeout(start)
+ port = self.nameserver_ports.get(nameserver, self.port)
+ try:
+ tcp_attempt = tcp
+ if tcp:
+ response = dns.query.tcp(request, nameserver,
+ timeout, port,
+ source=source,
+ source_port=source_port)
+ else:
+ response = dns.query.udp(request, nameserver,
+ timeout, port,
+ source=source,
+ source_port=source_port)
+ if response.flags & dns.flags.TC:
+ # Response truncated; retry with TCP.
+ tcp_attempt = True
+ timeout = self._compute_timeout(start)
+ response = \
+ dns.query.tcp(request, nameserver,
+ timeout, port,
+ source=source,
+ source_port=source_port)
+ except (socket.error, dns.exception.Timeout) as ex:
+ #
+ # Communication failure or timeout. Go to the
+ # next server
+ #
+ errors.append((nameserver, tcp_attempt, port, ex,
+ response))
+ response = None
+ continue
+ except dns.query.UnexpectedSource as ex:
+ #
+ # Who knows? Keep going.
+ #
+ errors.append((nameserver, tcp_attempt, port, ex,
+ response))
+ response = None
+ continue
+ except dns.exception.FormError as ex:
+ #
+ # We don't understand what this server is
+ # saying. Take it out of the mix and
+ # continue.
+ #
+ nameservers.remove(nameserver)
+ errors.append((nameserver, tcp_attempt, port, ex,
+ response))
+ response = None
+ continue
+ except EOFError as ex:
+ #
+ # We're using TCP and they hung up on us.
+ # Probably they don't support TCP (though
+ # they're supposed to!). Take it out of the
+ # mix and continue.
+ #
+ nameservers.remove(nameserver)
+ errors.append((nameserver, tcp_attempt, port, ex,
+ response))
+ response = None
+ continue
+ rcode = response.rcode()
+ if rcode == dns.rcode.YXDOMAIN:
+ ex = YXDOMAIN()
+ errors.append((nameserver, tcp_attempt, port, ex,
+ response))
+ raise ex
+ if rcode == dns.rcode.NOERROR or \
+ rcode == dns.rcode.NXDOMAIN:
+ break
+ #
+ # We got a response, but we're not happy with the
+ # rcode in it. Remove the server from the mix if
+ # the rcode isn't SERVFAIL.
+ #
+ if rcode != dns.rcode.SERVFAIL or not self.retry_servfail:
+ nameservers.remove(nameserver)
+ errors.append((nameserver, tcp_attempt, port,
+ dns.rcode.to_text(rcode), response))
+ response = None
+ if response is not None:
+ break
+ #
+ # All nameservers failed!
+ #
+ if len(nameservers) > 0:
+ #
+ # But we still have servers to try. Sleep a bit
+ # so we don't pound them!
+ #
+ timeout = self._compute_timeout(start)
+ sleep_time = min(timeout, backoff)
+ backoff *= 2
+ time.sleep(sleep_time)
+ if response.rcode() == dns.rcode.NXDOMAIN:
+ nxdomain_responses[_qname] = response
+ continue
+ all_nxdomain = False
+ break
+ if all_nxdomain:
+ raise NXDOMAIN(qnames=qnames_to_try, responses=nxdomain_responses)
+ answer = Answer(_qname, rdtype, rdclass, response,
+ raise_on_no_answer)
+ if self.cache:
+ self.cache.put((_qname, rdtype, rdclass), answer)
+ return answer
+
+ def use_tsig(self, keyring, keyname=None,
+ algorithm=dns.tsig.default_algorithm):
+ """Add a TSIG signature to the query.
+
+ @param keyring: The TSIG keyring to use; defaults to None.
+ @type keyring: dict
+ @param keyname: The name of the TSIG key to use; defaults to None.
+ The key must be defined in the keyring. If a keyring is specified
+ but a keyname is not, then the key used will be the first key in the
+ keyring. Note that the order of keys in a dictionary is not defined,
+ so applications should supply a keyname when a keyring is used, unless
+ they know the keyring contains only one key.
+ @param algorithm: The TSIG key algorithm to use. The default
+ is dns.tsig.default_algorithm.
+ @type algorithm: string"""
+ self.keyring = keyring
+ if keyname is None:
+ self.keyname = list(self.keyring.keys())[0]
+ else:
+ self.keyname = keyname
+ self.keyalgorithm = algorithm
+
+ def use_edns(self, edns, ednsflags, payload):
+ """Configure Edns.
+
+ @param edns: The EDNS level to use. The default is -1, no Edns.
+ @type edns: int
+ @param ednsflags: The EDNS flags
+ @type ednsflags: int
+ @param payload: The EDNS payload size. The default is 0.
+ @type payload: int"""
+
+ if edns is None:
+ edns = -1
+ self.edns = edns
+ self.ednsflags = ednsflags
+ self.payload = payload
+
+ def set_flags(self, flags):
+ """Overrides the default flags with your own
+
+ @param flags: The flags to overwrite the default with
+ @type flags: int"""
+ self.flags = flags
+
+default_resolver = None
+
+
+def get_default_resolver():
+ """Get the default resolver, initializing it if necessary."""
+ if default_resolver is None:
+ reset_default_resolver()
+ return default_resolver
+
+
+def reset_default_resolver():
+ """Re-initialize default resolver.
+
+ resolv.conf will be re-read immediatelly.
+ """
+ global default_resolver
+ default_resolver = Resolver()
+
+
+def query(qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN,
+ tcp=False, source=None, raise_on_no_answer=True,
+ source_port=0):
+ """Query nameservers to find the answer to the question.
+
+ This is a convenience function that uses the default resolver
+ object to make the query.
+ @see: L{dns.resolver.Resolver.query} for more information on the
+ parameters."""
+ return get_default_resolver().query(qname, rdtype, rdclass, tcp, source,
+ raise_on_no_answer, source_port)
+
+
+def zone_for_name(name, rdclass=dns.rdataclass.IN, tcp=False, resolver=None):
+ """Find the name of the zone which contains the specified name.
+
+ @param name: the query name
+ @type name: absolute dns.name.Name object or string
+ @param rdclass: The query class
+ @type rdclass: int
+ @param tcp: use TCP to make the query (default is False).
+ @type tcp: bool
+ @param resolver: the resolver to use
+ @type resolver: dns.resolver.Resolver object or None
+ @rtype: dns.name.Name"""
+
+ if isinstance(name, string_types):
+ name = dns.name.from_text(name, dns.name.root)
+ if resolver is None:
+ resolver = get_default_resolver()
+ if not name.is_absolute():
+ raise NotAbsolute(name)
+ while 1:
+ try:
+ answer = resolver.query(name, dns.rdatatype.SOA, rdclass, tcp)
+ if answer.rrset.name == name:
+ return name
+ # otherwise we were CNAMEd or DNAMEd and need to look higher
+ except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer):
+ pass
+ try:
+ name = name.parent()
+ except dns.name.NoParent:
+ raise NoRootSOA
+
+#
+# Support for overriding the system resolver for all python code in the
+# running process.
+#
+
+_protocols_for_socktype = {
+ socket.SOCK_DGRAM: [socket.SOL_UDP],
+ socket.SOCK_STREAM: [socket.SOL_TCP],
+}
+
+_resolver = None
+_original_getaddrinfo = socket.getaddrinfo
+_original_getnameinfo = socket.getnameinfo
+_original_getfqdn = socket.getfqdn
+_original_gethostbyname = socket.gethostbyname
+_original_gethostbyname_ex = socket.gethostbyname_ex
+_original_gethostbyaddr = socket.gethostbyaddr
+
+
+def _getaddrinfo(host=None, service=None, family=socket.AF_UNSPEC, socktype=0,
+ proto=0, flags=0):
+ if flags & (socket.AI_ADDRCONFIG | socket.AI_V4MAPPED) != 0:
+ raise NotImplementedError
+ if host is None and service is None:
+ raise socket.gaierror(socket.EAI_NONAME)
+ v6addrs = []
+ v4addrs = []
+ canonical_name = None
+ try:
+ # Is host None or a V6 address literal?
+ if host is None:
+ canonical_name = 'localhost'
+ if flags & socket.AI_PASSIVE != 0:
+ v6addrs.append('::')
+ v4addrs.append('0.0.0.0')
+ else:
+ v6addrs.append('::1')
+ v4addrs.append('127.0.0.1')
+ else:
+ parts = host.split('%')
+ if len(parts) == 2:
+ ahost = parts[0]
+ else:
+ ahost = host
+ addr = dns.ipv6.inet_aton(ahost)
+ v6addrs.append(host)
+ canonical_name = host
+ except Exception:
+ try:
+ # Is it a V4 address literal?
+ addr = dns.ipv4.inet_aton(host)
+ v4addrs.append(host)
+ canonical_name = host
+ except Exception:
+ if flags & socket.AI_NUMERICHOST == 0:
+ try:
+ if family == socket.AF_INET6 or family == socket.AF_UNSPEC:
+ v6 = _resolver.query(host, dns.rdatatype.AAAA,
+ raise_on_no_answer=False)
+ # Note that setting host ensures we query the same name
+ # for A as we did for AAAA.
+ host = v6.qname
+ canonical_name = v6.canonical_name.to_text(True)
+ if v6.rrset is not None:
+ for rdata in v6.rrset:
+ v6addrs.append(rdata.address)
+ if family == socket.AF_INET or family == socket.AF_UNSPEC:
+ v4 = _resolver.query(host, dns.rdatatype.A,
+ raise_on_no_answer=False)
+ host = v4.qname
+ canonical_name = v4.canonical_name.to_text(True)
+ if v4.rrset is not None:
+ for rdata in v4.rrset:
+ v4addrs.append(rdata.address)
+ except dns.resolver.NXDOMAIN:
+ raise socket.gaierror(socket.EAI_NONAME)
+ except:
+ raise socket.gaierror(socket.EAI_SYSTEM)
+ port = None
+ try:
+ # Is it a port literal?
+ if service is None:
+ port = 0
+ else:
+ port = int(service)
+ except Exception:
+ if flags & socket.AI_NUMERICSERV == 0:
+ try:
+ port = socket.getservbyname(service)
+ except Exception:
+ pass
+ if port is None:
+ raise socket.gaierror(socket.EAI_NONAME)
+ tuples = []
+ if socktype == 0:
+ socktypes = [socket.SOCK_DGRAM, socket.SOCK_STREAM]
+ else:
+ socktypes = [socktype]
+ if flags & socket.AI_CANONNAME != 0:
+ cname = canonical_name
+ else:
+ cname = ''
+ if family == socket.AF_INET6 or family == socket.AF_UNSPEC:
+ for addr in v6addrs:
+ for socktype in socktypes:
+ for proto in _protocols_for_socktype[socktype]:
+ tuples.append((socket.AF_INET6, socktype, proto,
+ cname, (addr, port, 0, 0)))
+ if family == socket.AF_INET or family == socket.AF_UNSPEC:
+ for addr in v4addrs:
+ for socktype in socktypes:
+ for proto in _protocols_for_socktype[socktype]:
+ tuples.append((socket.AF_INET, socktype, proto,
+ cname, (addr, port)))
+ if len(tuples) == 0:
+ raise socket.gaierror(socket.EAI_NONAME)
+ return tuples
+
+
+def _getnameinfo(sockaddr, flags=0):
+ host = sockaddr[0]
+ port = sockaddr[1]
+ if len(sockaddr) == 4:
+ scope = sockaddr[3]
+ family = socket.AF_INET6
+ else:
+ scope = None
+ family = socket.AF_INET
+ tuples = _getaddrinfo(host, port, family, socket.SOCK_STREAM,
+ socket.SOL_TCP, 0)
+ if len(tuples) > 1:
+ raise socket.error('sockaddr resolved to multiple addresses')
+ addr = tuples[0][4][0]
+ if flags & socket.NI_DGRAM:
+ pname = 'udp'
+ else:
+ pname = 'tcp'
+ qname = dns.reversename.from_address(addr)
+ if flags & socket.NI_NUMERICHOST == 0:
+ try:
+ answer = _resolver.query(qname, 'PTR')
+ hostname = answer.rrset[0].target.to_text(True)
+ except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer):
+ if flags & socket.NI_NAMEREQD:
+ raise socket.gaierror(socket.EAI_NONAME)
+ hostname = addr
+ if scope is not None:
+ hostname += '%' + str(scope)
+ else:
+ hostname = addr
+ if scope is not None:
+ hostname += '%' + str(scope)
+ if flags & socket.NI_NUMERICSERV:
+ service = str(port)
+ else:
+ service = socket.getservbyport(port, pname)
+ return (hostname, service)
+
+
+def _getfqdn(name=None):
+ if name is None:
+ name = socket.gethostname()
+ try:
+ return _getnameinfo(_getaddrinfo(name, 80)[0][4])[0]
+ except Exception:
+ return name
+
+
+def _gethostbyname(name):
+ return _gethostbyname_ex(name)[2][0]
+
+
+def _gethostbyname_ex(name):
+ aliases = []
+ addresses = []
+ tuples = _getaddrinfo(name, 0, socket.AF_INET, socket.SOCK_STREAM,
+ socket.SOL_TCP, socket.AI_CANONNAME)
+ canonical = tuples[0][3]
+ for item in tuples:
+ addresses.append(item[4][0])
+ # XXX we just ignore aliases
+ return (canonical, aliases, addresses)
+
+
+def _gethostbyaddr(ip):
+ try:
+ dns.ipv6.inet_aton(ip)
+ sockaddr = (ip, 80, 0, 0)
+ family = socket.AF_INET6
+ except Exception:
+ sockaddr = (ip, 80)
+ family = socket.AF_INET
+ (name, port) = _getnameinfo(sockaddr, socket.NI_NAMEREQD)
+ aliases = []
+ addresses = []
+ tuples = _getaddrinfo(name, 0, family, socket.SOCK_STREAM, socket.SOL_TCP,
+ socket.AI_CANONNAME)
+ canonical = tuples[0][3]
+ for item in tuples:
+ addresses.append(item[4][0])
+ # XXX we just ignore aliases
+ return (canonical, aliases, addresses)
+
+
+def override_system_resolver(resolver=None):
+ """Override the system resolver routines in the socket module with
+ versions which use dnspython's resolver.
+
+ This can be useful in testing situations where you want to control
+ the resolution behavior of python code without having to change
+ the system's resolver settings (e.g. /etc/resolv.conf).
+
+ The resolver to use may be specified; if it's not, the default
+ resolver will be used.
+
+ @param resolver: the resolver to use
+ @type resolver: dns.resolver.Resolver object or None
+ """
+ if resolver is None:
+ resolver = get_default_resolver()
+ global _resolver
+ _resolver = resolver
+ socket.getaddrinfo = _getaddrinfo
+ socket.getnameinfo = _getnameinfo
+ socket.getfqdn = _getfqdn
+ socket.gethostbyname = _gethostbyname
+ socket.gethostbyname_ex = _gethostbyname_ex
+ socket.gethostbyaddr = _gethostbyaddr
+
+
+def restore_system_resolver():
+ """Undo the effects of override_system_resolver().
+ """
+ global _resolver
+ _resolver = None
+ socket.getaddrinfo = _original_getaddrinfo
+ socket.getnameinfo = _original_getnameinfo
+ socket.getfqdn = _original_getfqdn
+ socket.gethostbyname = _original_gethostbyname
+ socket.gethostbyname_ex = _original_gethostbyname_ex
+ socket.gethostbyaddr = _original_gethostbyaddr
diff --git a/Contents/Libraries/Shared/dns/reversename.py b/Contents/Libraries/Shared/dns/reversename.py
new file mode 100644
index 000000000..9ea9395a8
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/reversename.py
@@ -0,0 +1,89 @@
+# Copyright (C) 2006, 2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Reverse Map Names.
+
+@var ipv4_reverse_domain: The DNS IPv4 reverse-map domain, in-addr.arpa.
+@type ipv4_reverse_domain: dns.name.Name object
+@var ipv6_reverse_domain: The DNS IPv6 reverse-map domain, ip6.arpa.
+@type ipv6_reverse_domain: dns.name.Name object
+"""
+
+import binascii
+import sys
+
+import dns.name
+import dns.ipv6
+import dns.ipv4
+
+ipv4_reverse_domain = dns.name.from_text('in-addr.arpa.')
+ipv6_reverse_domain = dns.name.from_text('ip6.arpa.')
+
+
+def from_address(text):
+ """Convert an IPv4 or IPv6 address in textual form into a Name object whose
+ value is the reverse-map domain name of the address.
+ @param text: an IPv4 or IPv6 address in textual form (e.g. '127.0.0.1',
+ '::1')
+ @type text: str
+ @rtype: dns.name.Name object
+ """
+ try:
+ v6 = dns.ipv6.inet_aton(text)
+ if dns.ipv6.is_mapped(v6):
+ if sys.version_info >= (3,):
+ parts = ['%d' % byte for byte in v6[12:]]
+ else:
+ parts = ['%d' % ord(byte) for byte in v6[12:]]
+ origin = ipv4_reverse_domain
+ else:
+ parts = [x for x in str(binascii.hexlify(v6).decode())]
+ origin = ipv6_reverse_domain
+ except Exception:
+ parts = ['%d' %
+ byte for byte in bytearray(dns.ipv4.inet_aton(text))]
+ origin = ipv4_reverse_domain
+ parts.reverse()
+ return dns.name.from_text('.'.join(parts), origin=origin)
+
+
+def to_address(name):
+ """Convert a reverse map domain name into textual address form.
+ @param name: an IPv4 or IPv6 address in reverse-map form.
+ @type name: dns.name.Name object
+ @rtype: str
+ """
+ if name.is_subdomain(ipv4_reverse_domain):
+ name = name.relativize(ipv4_reverse_domain)
+ labels = list(name.labels)
+ labels.reverse()
+ text = b'.'.join(labels)
+ # run through inet_aton() to check syntax and make pretty.
+ return dns.ipv4.inet_ntoa(dns.ipv4.inet_aton(text))
+ elif name.is_subdomain(ipv6_reverse_domain):
+ name = name.relativize(ipv6_reverse_domain)
+ labels = list(name.labels)
+ labels.reverse()
+ parts = []
+ i = 0
+ l = len(labels)
+ while i < l:
+ parts.append(b''.join(labels[i:i + 4]))
+ i += 4
+ text = b':'.join(parts)
+ # run through inet_aton() to check syntax and make pretty.
+ return dns.ipv6.inet_ntoa(dns.ipv6.inet_aton(text))
+ else:
+ raise dns.exception.SyntaxError('unknown reverse-map address family')
diff --git a/Contents/Libraries/Shared/dns/rrset.py b/Contents/Libraries/Shared/dns/rrset.py
new file mode 100644
index 000000000..d0f8f9377
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/rrset.py
@@ -0,0 +1,182 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS RRsets (an RRset is a named rdataset)"""
+
+
+import dns.name
+import dns.rdataset
+import dns.rdataclass
+import dns.renderer
+from ._compat import string_types
+
+
+class RRset(dns.rdataset.Rdataset):
+
+ """A DNS RRset (named rdataset).
+
+ RRset inherits from Rdataset, and RRsets can be treated as
+ Rdatasets in most cases. There are, however, a few notable
+ exceptions. RRsets have different to_wire() and to_text() method
+ arguments, reflecting the fact that RRsets always have an owner
+ name.
+ """
+
+ __slots__ = ['name', 'deleting']
+
+ def __init__(self, name, rdclass, rdtype, covers=dns.rdatatype.NONE,
+ deleting=None):
+ """Create a new RRset."""
+
+ super(RRset, self).__init__(rdclass, rdtype, covers)
+ self.name = name
+ self.deleting = deleting
+
+ def _clone(self):
+ obj = super(RRset, self)._clone()
+ obj.name = self.name
+ obj.deleting = self.deleting
+ return obj
+
+ def __repr__(self):
+ if self.covers == 0:
+ ctext = ''
+ else:
+ ctext = '(' + dns.rdatatype.to_text(self.covers) + ')'
+ if self.deleting is not None:
+ dtext = ' delete=' + dns.rdataclass.to_text(self.deleting)
+ else:
+ dtext = ''
+ return ''
+
+ def __str__(self):
+ return self.to_text()
+
+ def __eq__(self, other):
+ """Two RRsets are equal if they have the same name and the same
+ rdataset
+
+ @rtype: bool"""
+ if not isinstance(other, RRset):
+ return False
+ if self.name != other.name:
+ return False
+ return super(RRset, self).__eq__(other)
+
+ def match(self, name, rdclass, rdtype, covers, deleting=None):
+ """Returns True if this rrset matches the specified class, type,
+ covers, and deletion state."""
+
+ if not super(RRset, self).match(rdclass, rdtype, covers):
+ return False
+ if self.name != name or self.deleting != deleting:
+ return False
+ return True
+
+ def to_text(self, origin=None, relativize=True, **kw):
+ """Convert the RRset into DNS master file format.
+
+ @see: L{dns.name.Name.choose_relativity} for more information
+ on how I{origin} and I{relativize} determine the way names
+ are emitted.
+
+ Any additional keyword arguments are passed on to the rdata
+ to_text() method.
+
+ @param origin: The origin for relative names, or None.
+ @type origin: dns.name.Name object
+ @param relativize: True if names should names be relativized
+ @type relativize: bool"""
+
+ return super(RRset, self).to_text(self.name, origin, relativize,
+ self.deleting, **kw)
+
+ def to_wire(self, file, compress=None, origin=None, **kw):
+ """Convert the RRset to wire format."""
+
+ return super(RRset, self).to_wire(self.name, file, compress, origin,
+ self.deleting, **kw)
+
+ def to_rdataset(self):
+ """Convert an RRset into an Rdataset.
+
+ @rtype: dns.rdataset.Rdataset object
+ """
+ return dns.rdataset.from_rdata_list(self.ttl, list(self))
+
+
+def from_text_list(name, ttl, rdclass, rdtype, text_rdatas,
+ idna_codec=None):
+ """Create an RRset with the specified name, TTL, class, and type, and with
+ the specified list of rdatas in text format.
+
+ @rtype: dns.rrset.RRset object
+ """
+
+ if isinstance(name, string_types):
+ name = dns.name.from_text(name, None, idna_codec=idna_codec)
+ if isinstance(rdclass, string_types):
+ rdclass = dns.rdataclass.from_text(rdclass)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ r = RRset(name, rdclass, rdtype)
+ r.update_ttl(ttl)
+ for t in text_rdatas:
+ rd = dns.rdata.from_text(r.rdclass, r.rdtype, t)
+ r.add(rd)
+ return r
+
+
+def from_text(name, ttl, rdclass, rdtype, *text_rdatas):
+ """Create an RRset with the specified name, TTL, class, and type and with
+ the specified rdatas in text format.
+
+ @rtype: dns.rrset.RRset object
+ """
+
+ return from_text_list(name, ttl, rdclass, rdtype, text_rdatas)
+
+
+def from_rdata_list(name, ttl, rdatas, idna_codec=None):
+ """Create an RRset with the specified name and TTL, and with
+ the specified list of rdata objects.
+
+ @rtype: dns.rrset.RRset object
+ """
+
+ if isinstance(name, string_types):
+ name = dns.name.from_text(name, None, idna_codec=idna_codec)
+
+ if len(rdatas) == 0:
+ raise ValueError("rdata list must not be empty")
+ r = None
+ for rd in rdatas:
+ if r is None:
+ r = RRset(name, rd.rdclass, rd.rdtype)
+ r.update_ttl(ttl)
+ r.add(rd)
+ return r
+
+
+def from_rdata(name, ttl, *rdatas):
+ """Create an RRset with the specified name and TTL, and with
+ the specified rdata objects.
+
+ @rtype: dns.rrset.RRset object
+ """
+
+ return from_rdata_list(name, ttl, rdatas)
diff --git a/Contents/Libraries/Shared/dns/set.py b/Contents/Libraries/Shared/dns/set.py
new file mode 100644
index 000000000..ef7fd2955
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/set.py
@@ -0,0 +1,259 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""A simple Set class."""
+
+
+class Set(object):
+
+ """A simple set class.
+
+ Sets are not in Python until 2.3, and rdata are not immutable so
+ we cannot use sets.Set anyway. This class implements subset of
+ the 2.3 Set interface using a list as the container.
+
+ @ivar items: A list of the items which are in the set
+ @type items: list"""
+
+ __slots__ = ['items']
+
+ def __init__(self, items=None):
+ """Initialize the set.
+
+ @param items: the initial set of items
+ @type items: any iterable or None
+ """
+
+ self.items = []
+ if items is not None:
+ for item in items:
+ self.add(item)
+
+ def __repr__(self):
+ return "dns.simpleset.Set(%s)" % repr(self.items)
+
+ def add(self, item):
+ """Add an item to the set."""
+ if item not in self.items:
+ self.items.append(item)
+
+ def remove(self, item):
+ """Remove an item from the set."""
+ self.items.remove(item)
+
+ def discard(self, item):
+ """Remove an item from the set if present."""
+ try:
+ self.items.remove(item)
+ except ValueError:
+ pass
+
+ def _clone(self):
+ """Make a (shallow) copy of the set.
+
+ There is a 'clone protocol' that subclasses of this class
+ should use. To make a copy, first call your super's _clone()
+ method, and use the object returned as the new instance. Then
+ make shallow copies of the attributes defined in the subclass.
+
+ This protocol allows us to write the set algorithms that
+ return new instances (e.g. union) once, and keep using them in
+ subclasses.
+ """
+
+ cls = self.__class__
+ obj = cls.__new__(cls)
+ obj.items = list(self.items)
+ return obj
+
+ def __copy__(self):
+ """Make a (shallow) copy of the set."""
+ return self._clone()
+
+ def copy(self):
+ """Make a (shallow) copy of the set."""
+ return self._clone()
+
+ def union_update(self, other):
+ """Update the set, adding any elements from other which are not
+ already in the set.
+ @param other: the collection of items with which to update the set
+ @type other: Set object
+ """
+ if not isinstance(other, Set):
+ raise ValueError('other must be a Set instance')
+ if self is other:
+ return
+ for item in other.items:
+ self.add(item)
+
+ def intersection_update(self, other):
+ """Update the set, removing any elements from other which are not
+ in both sets.
+ @param other: the collection of items with which to update the set
+ @type other: Set object
+ """
+ if not isinstance(other, Set):
+ raise ValueError('other must be a Set instance')
+ if self is other:
+ return
+ # we make a copy of the list so that we can remove items from
+ # the list without breaking the iterator.
+ for item in list(self.items):
+ if item not in other.items:
+ self.items.remove(item)
+
+ def difference_update(self, other):
+ """Update the set, removing any elements from other which are in
+ the set.
+ @param other: the collection of items with which to update the set
+ @type other: Set object
+ """
+ if not isinstance(other, Set):
+ raise ValueError('other must be a Set instance')
+ if self is other:
+ self.items = []
+ else:
+ for item in other.items:
+ self.discard(item)
+
+ def union(self, other):
+ """Return a new set which is the union of I{self} and I{other}.
+
+ @param other: the other set
+ @type other: Set object
+ @rtype: the same type as I{self}
+ """
+
+ obj = self._clone()
+ obj.union_update(other)
+ return obj
+
+ def intersection(self, other):
+ """Return a new set which is the intersection of I{self} and I{other}.
+
+ @param other: the other set
+ @type other: Set object
+ @rtype: the same type as I{self}
+ """
+
+ obj = self._clone()
+ obj.intersection_update(other)
+ return obj
+
+ def difference(self, other):
+ """Return a new set which I{self} - I{other}, i.e. the items
+ in I{self} which are not also in I{other}.
+
+ @param other: the other set
+ @type other: Set object
+ @rtype: the same type as I{self}
+ """
+
+ obj = self._clone()
+ obj.difference_update(other)
+ return obj
+
+ def __or__(self, other):
+ return self.union(other)
+
+ def __and__(self, other):
+ return self.intersection(other)
+
+ def __add__(self, other):
+ return self.union(other)
+
+ def __sub__(self, other):
+ return self.difference(other)
+
+ def __ior__(self, other):
+ self.union_update(other)
+ return self
+
+ def __iand__(self, other):
+ self.intersection_update(other)
+ return self
+
+ def __iadd__(self, other):
+ self.union_update(other)
+ return self
+
+ def __isub__(self, other):
+ self.difference_update(other)
+ return self
+
+ def update(self, other):
+ """Update the set, adding any elements from other which are not
+ already in the set.
+ @param other: the collection of items with which to update the set
+ @type other: any iterable type"""
+ for item in other:
+ self.add(item)
+
+ def clear(self):
+ """Make the set empty."""
+ self.items = []
+
+ def __eq__(self, other):
+ # Yes, this is inefficient but the sets we're dealing with are
+ # usually quite small, so it shouldn't hurt too much.
+ for item in self.items:
+ if item not in other.items:
+ return False
+ for item in other.items:
+ if item not in self.items:
+ return False
+ return True
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __len__(self):
+ return len(self.items)
+
+ def __iter__(self):
+ return iter(self.items)
+
+ def __getitem__(self, i):
+ return self.items[i]
+
+ def __delitem__(self, i):
+ del self.items[i]
+
+ def issubset(self, other):
+ """Is I{self} a subset of I{other}?
+
+ @rtype: bool
+ """
+
+ if not isinstance(other, Set):
+ raise ValueError('other must be a Set instance')
+ for item in self.items:
+ if item not in other.items:
+ return False
+ return True
+
+ def issuperset(self, other):
+ """Is I{self} a superset of I{other}?
+
+ @rtype: bool
+ """
+
+ if not isinstance(other, Set):
+ raise ValueError('other must be a Set instance')
+ for item in other.items:
+ if item not in self.items:
+ return False
+ return True
diff --git a/Contents/Libraries/Shared/dns/tokenizer.py b/Contents/Libraries/Shared/dns/tokenizer.py
new file mode 100644
index 000000000..04b982549
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/tokenizer.py
@@ -0,0 +1,564 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Tokenize DNS master file format"""
+
+from io import StringIO
+import sys
+
+import dns.exception
+import dns.name
+import dns.ttl
+from ._compat import long, text_type, binary_type
+
+_DELIMITERS = {
+ ' ': True,
+ '\t': True,
+ '\n': True,
+ ';': True,
+ '(': True,
+ ')': True,
+ '"': True}
+
+_QUOTING_DELIMITERS = {'"': True}
+
+EOF = 0
+EOL = 1
+WHITESPACE = 2
+IDENTIFIER = 3
+QUOTED_STRING = 4
+COMMENT = 5
+DELIMITER = 6
+
+
+class UngetBufferFull(dns.exception.DNSException):
+
+ """An attempt was made to unget a token when the unget buffer was full."""
+
+
+class Token(object):
+
+ """A DNS master file format token.
+
+ @ivar ttype: The token type
+ @type ttype: int
+ @ivar value: The token value
+ @type value: string
+ @ivar has_escape: Does the token value contain escapes?
+ @type has_escape: bool
+ """
+
+ def __init__(self, ttype, value='', has_escape=False):
+ """Initialize a token instance.
+
+ @param ttype: The token type
+ @type ttype: int
+ @param value: The token value
+ @type value: string
+ @param has_escape: Does the token value contain escapes?
+ @type has_escape: bool
+ """
+ self.ttype = ttype
+ self.value = value
+ self.has_escape = has_escape
+
+ def is_eof(self):
+ return self.ttype == EOF
+
+ def is_eol(self):
+ return self.ttype == EOL
+
+ def is_whitespace(self):
+ return self.ttype == WHITESPACE
+
+ def is_identifier(self):
+ return self.ttype == IDENTIFIER
+
+ def is_quoted_string(self):
+ return self.ttype == QUOTED_STRING
+
+ def is_comment(self):
+ return self.ttype == COMMENT
+
+ def is_delimiter(self):
+ return self.ttype == DELIMITER
+
+ def is_eol_or_eof(self):
+ return self.ttype == EOL or self.ttype == EOF
+
+ def __eq__(self, other):
+ if not isinstance(other, Token):
+ return False
+ return (self.ttype == other.ttype and
+ self.value == other.value)
+
+ def __ne__(self, other):
+ if not isinstance(other, Token):
+ return True
+ return (self.ttype != other.ttype or
+ self.value != other.value)
+
+ def __str__(self):
+ return '%d "%s"' % (self.ttype, self.value)
+
+ def unescape(self):
+ if not self.has_escape:
+ return self
+ unescaped = ''
+ l = len(self.value)
+ i = 0
+ while i < l:
+ c = self.value[i]
+ i += 1
+ if c == '\\':
+ if i >= l:
+ raise dns.exception.UnexpectedEnd
+ c = self.value[i]
+ i += 1
+ if c.isdigit():
+ if i >= l:
+ raise dns.exception.UnexpectedEnd
+ c2 = self.value[i]
+ i += 1
+ if i >= l:
+ raise dns.exception.UnexpectedEnd
+ c3 = self.value[i]
+ i += 1
+ if not (c2.isdigit() and c3.isdigit()):
+ raise dns.exception.SyntaxError
+ c = chr(int(c) * 100 + int(c2) * 10 + int(c3))
+ unescaped += c
+ return Token(self.ttype, unescaped)
+
+ # compatibility for old-style tuple tokens
+
+ def __len__(self):
+ return 2
+
+ def __iter__(self):
+ return iter((self.ttype, self.value))
+
+ def __getitem__(self, i):
+ if i == 0:
+ return self.ttype
+ elif i == 1:
+ return self.value
+ else:
+ raise IndexError
+
+
+class Tokenizer(object):
+
+ """A DNS master file format tokenizer.
+
+ A token is a (type, value) tuple, where I{type} is an int, and
+ I{value} is a string. The valid types are EOF, EOL, WHITESPACE,
+ IDENTIFIER, QUOTED_STRING, COMMENT, and DELIMITER.
+
+ @ivar file: The file to tokenize
+ @type file: file
+ @ivar ungotten_char: The most recently ungotten character, or None.
+ @type ungotten_char: string
+ @ivar ungotten_token: The most recently ungotten token, or None.
+ @type ungotten_token: (int, string) token tuple
+ @ivar multiline: The current multiline level. This value is increased
+ by one every time a '(' delimiter is read, and decreased by one every time
+ a ')' delimiter is read.
+ @type multiline: int
+ @ivar quoting: This variable is true if the tokenizer is currently
+ reading a quoted string.
+ @type quoting: bool
+ @ivar eof: This variable is true if the tokenizer has encountered EOF.
+ @type eof: bool
+ @ivar delimiters: The current delimiter dictionary.
+ @type delimiters: dict
+ @ivar line_number: The current line number
+ @type line_number: int
+ @ivar filename: A filename that will be returned by the L{where} method.
+ @type filename: string
+ """
+
+ def __init__(self, f=sys.stdin, filename=None):
+ """Initialize a tokenizer instance.
+
+ @param f: The file to tokenize. The default is sys.stdin.
+ This parameter may also be a string, in which case the tokenizer
+ will take its input from the contents of the string.
+ @type f: file or string
+ @param filename: the name of the filename that the L{where} method
+ will return.
+ @type filename: string
+ """
+
+ if isinstance(f, text_type):
+ f = StringIO(f)
+ if filename is None:
+ filename = ''
+ elif isinstance(f, binary_type):
+ f = StringIO(f.decode())
+ if filename is None:
+ filename = ''
+ else:
+ if filename is None:
+ if f is sys.stdin:
+ filename = ''
+ else:
+ filename = ''
+ self.file = f
+ self.ungotten_char = None
+ self.ungotten_token = None
+ self.multiline = 0
+ self.quoting = False
+ self.eof = False
+ self.delimiters = _DELIMITERS
+ self.line_number = 1
+ self.filename = filename
+
+ def _get_char(self):
+ """Read a character from input.
+ @rtype: string
+ """
+
+ if self.ungotten_char is None:
+ if self.eof:
+ c = ''
+ else:
+ c = self.file.read(1)
+ if c == '':
+ self.eof = True
+ elif c == '\n':
+ self.line_number += 1
+ else:
+ c = self.ungotten_char
+ self.ungotten_char = None
+ return c
+
+ def where(self):
+ """Return the current location in the input.
+
+ @rtype: (string, int) tuple. The first item is the filename of
+ the input, the second is the current line number.
+ """
+
+ return (self.filename, self.line_number)
+
+ def _unget_char(self, c):
+ """Unget a character.
+
+ The unget buffer for characters is only one character large; it is
+ an error to try to unget a character when the unget buffer is not
+ empty.
+
+ @param c: the character to unget
+ @type c: string
+ @raises UngetBufferFull: there is already an ungotten char
+ """
+
+ if self.ungotten_char is not None:
+ raise UngetBufferFull
+ self.ungotten_char = c
+
+ def skip_whitespace(self):
+ """Consume input until a non-whitespace character is encountered.
+
+ The non-whitespace character is then ungotten, and the number of
+ whitespace characters consumed is returned.
+
+ If the tokenizer is in multiline mode, then newlines are whitespace.
+
+ @rtype: int
+ """
+
+ skipped = 0
+ while True:
+ c = self._get_char()
+ if c != ' ' and c != '\t':
+ if (c != '\n') or not self.multiline:
+ self._unget_char(c)
+ return skipped
+ skipped += 1
+
+ def get(self, want_leading=False, want_comment=False):
+ """Get the next token.
+
+ @param want_leading: If True, return a WHITESPACE token if the
+ first character read is whitespace. The default is False.
+ @type want_leading: bool
+ @param want_comment: If True, return a COMMENT token if the
+ first token read is a comment. The default is False.
+ @type want_comment: bool
+ @rtype: Token object
+ @raises dns.exception.UnexpectedEnd: input ended prematurely
+ @raises dns.exception.SyntaxError: input was badly formed
+ """
+
+ if self.ungotten_token is not None:
+ token = self.ungotten_token
+ self.ungotten_token = None
+ if token.is_whitespace():
+ if want_leading:
+ return token
+ elif token.is_comment():
+ if want_comment:
+ return token
+ else:
+ return token
+ skipped = self.skip_whitespace()
+ if want_leading and skipped > 0:
+ return Token(WHITESPACE, ' ')
+ token = ''
+ ttype = IDENTIFIER
+ has_escape = False
+ while True:
+ c = self._get_char()
+ if c == '' or c in self.delimiters:
+ if c == '' and self.quoting:
+ raise dns.exception.UnexpectedEnd
+ if token == '' and ttype != QUOTED_STRING:
+ if c == '(':
+ self.multiline += 1
+ self.skip_whitespace()
+ continue
+ elif c == ')':
+ if self.multiline <= 0:
+ raise dns.exception.SyntaxError
+ self.multiline -= 1
+ self.skip_whitespace()
+ continue
+ elif c == '"':
+ if not self.quoting:
+ self.quoting = True
+ self.delimiters = _QUOTING_DELIMITERS
+ ttype = QUOTED_STRING
+ continue
+ else:
+ self.quoting = False
+ self.delimiters = _DELIMITERS
+ self.skip_whitespace()
+ continue
+ elif c == '\n':
+ return Token(EOL, '\n')
+ elif c == ';':
+ while 1:
+ c = self._get_char()
+ if c == '\n' or c == '':
+ break
+ token += c
+ if want_comment:
+ self._unget_char(c)
+ return Token(COMMENT, token)
+ elif c == '':
+ if self.multiline:
+ raise dns.exception.SyntaxError(
+ 'unbalanced parentheses')
+ return Token(EOF)
+ elif self.multiline:
+ self.skip_whitespace()
+ token = ''
+ continue
+ else:
+ return Token(EOL, '\n')
+ else:
+ # This code exists in case we ever want a
+ # delimiter to be returned. It never produces
+ # a token currently.
+ token = c
+ ttype = DELIMITER
+ else:
+ self._unget_char(c)
+ break
+ elif self.quoting:
+ if c == '\\':
+ c = self._get_char()
+ if c == '':
+ raise dns.exception.UnexpectedEnd
+ if c.isdigit():
+ c2 = self._get_char()
+ if c2 == '':
+ raise dns.exception.UnexpectedEnd
+ c3 = self._get_char()
+ if c == '':
+ raise dns.exception.UnexpectedEnd
+ if not (c2.isdigit() and c3.isdigit()):
+ raise dns.exception.SyntaxError
+ c = chr(int(c) * 100 + int(c2) * 10 + int(c3))
+ elif c == '\n':
+ raise dns.exception.SyntaxError('newline in quoted string')
+ elif c == '\\':
+ #
+ # It's an escape. Put it and the next character into
+ # the token; it will be checked later for goodness.
+ #
+ token += c
+ has_escape = True
+ c = self._get_char()
+ if c == '' or c == '\n':
+ raise dns.exception.UnexpectedEnd
+ token += c
+ if token == '' and ttype != QUOTED_STRING:
+ if self.multiline:
+ raise dns.exception.SyntaxError('unbalanced parentheses')
+ ttype = EOF
+ return Token(ttype, token, has_escape)
+
+ def unget(self, token):
+ """Unget a token.
+
+ The unget buffer for tokens is only one token large; it is
+ an error to try to unget a token when the unget buffer is not
+ empty.
+
+ @param token: the token to unget
+ @type token: Token object
+ @raises UngetBufferFull: there is already an ungotten token
+ """
+
+ if self.ungotten_token is not None:
+ raise UngetBufferFull
+ self.ungotten_token = token
+
+ def next(self):
+ """Return the next item in an iteration.
+ @rtype: (int, string)
+ """
+
+ token = self.get()
+ if token.is_eof():
+ raise StopIteration
+ return token
+
+ __next__ = next
+
+ def __iter__(self):
+ return self
+
+ # Helpers
+
+ def get_int(self):
+ """Read the next token and interpret it as an integer.
+
+ @raises dns.exception.SyntaxError:
+ @rtype: int
+ """
+
+ token = self.get().unescape()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError('expecting an identifier')
+ if not token.value.isdigit():
+ raise dns.exception.SyntaxError('expecting an integer')
+ return int(token.value)
+
+ def get_uint8(self):
+ """Read the next token and interpret it as an 8-bit unsigned
+ integer.
+
+ @raises dns.exception.SyntaxError:
+ @rtype: int
+ """
+
+ value = self.get_int()
+ if value < 0 or value > 255:
+ raise dns.exception.SyntaxError(
+ '%d is not an unsigned 8-bit integer' % value)
+ return value
+
+ def get_uint16(self):
+ """Read the next token and interpret it as a 16-bit unsigned
+ integer.
+
+ @raises dns.exception.SyntaxError:
+ @rtype: int
+ """
+
+ value = self.get_int()
+ if value < 0 or value > 65535:
+ raise dns.exception.SyntaxError(
+ '%d is not an unsigned 16-bit integer' % value)
+ return value
+
+ def get_uint32(self):
+ """Read the next token and interpret it as a 32-bit unsigned
+ integer.
+
+ @raises dns.exception.SyntaxError:
+ @rtype: int
+ """
+
+ token = self.get().unescape()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError('expecting an identifier')
+ if not token.value.isdigit():
+ raise dns.exception.SyntaxError('expecting an integer')
+ value = long(token.value)
+ if value < 0 or value > long(4294967296):
+ raise dns.exception.SyntaxError(
+ '%d is not an unsigned 32-bit integer' % value)
+ return value
+
+ def get_string(self, origin=None):
+ """Read the next token and interpret it as a string.
+
+ @raises dns.exception.SyntaxError:
+ @rtype: string
+ """
+
+ token = self.get().unescape()
+ if not (token.is_identifier() or token.is_quoted_string()):
+ raise dns.exception.SyntaxError('expecting a string')
+ return token.value
+
+ def get_identifier(self, origin=None):
+ """Read the next token and raise an exception if it is not an identifier.
+
+ @raises dns.exception.SyntaxError:
+ @rtype: string
+ """
+
+ token = self.get().unescape()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError('expecting an identifier')
+ return token.value
+
+ def get_name(self, origin=None):
+ """Read the next token and interpret it as a DNS name.
+
+ @raises dns.exception.SyntaxError:
+ @rtype: dns.name.Name object"""
+
+ token = self.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError('expecting an identifier')
+ return dns.name.from_text(token.value, origin)
+
+ def get_eol(self):
+ """Read the next token and raise an exception if it isn't EOL or
+ EOF.
+
+ @raises dns.exception.SyntaxError:
+ @rtype: string
+ """
+
+ token = self.get()
+ if not token.is_eol_or_eof():
+ raise dns.exception.SyntaxError(
+ 'expected EOL or EOF, got %d "%s"' % (token.ttype,
+ token.value))
+ return token.value
+
+ def get_ttl(self):
+ token = self.get().unescape()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError('expecting an identifier')
+ return dns.ttl.from_text(token.value)
diff --git a/Contents/Libraries/Shared/dns/tsig.py b/Contents/Libraries/Shared/dns/tsig.py
new file mode 100644
index 000000000..c57d879fa
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/tsig.py
@@ -0,0 +1,234 @@
+# Copyright (C) 2001-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS TSIG support."""
+
+import hmac
+import struct
+
+import dns.exception
+import dns.hash
+import dns.rdataclass
+import dns.name
+from ._compat import long, string_types, text_type
+
+class BadTime(dns.exception.DNSException):
+
+ """The current time is not within the TSIG's validity time."""
+
+
+class BadSignature(dns.exception.DNSException):
+
+ """The TSIG signature fails to verify."""
+
+
+class PeerError(dns.exception.DNSException):
+
+ """Base class for all TSIG errors generated by the remote peer"""
+
+
+class PeerBadKey(PeerError):
+
+ """The peer didn't know the key we used"""
+
+
+class PeerBadSignature(PeerError):
+
+ """The peer didn't like the signature we sent"""
+
+
+class PeerBadTime(PeerError):
+
+ """The peer didn't like the time we sent"""
+
+
+class PeerBadTruncation(PeerError):
+
+ """The peer didn't like amount of truncation in the TSIG we sent"""
+
+# TSIG Algorithms
+
+HMAC_MD5 = dns.name.from_text("HMAC-MD5.SIG-ALG.REG.INT")
+HMAC_SHA1 = dns.name.from_text("hmac-sha1")
+HMAC_SHA224 = dns.name.from_text("hmac-sha224")
+HMAC_SHA256 = dns.name.from_text("hmac-sha256")
+HMAC_SHA384 = dns.name.from_text("hmac-sha384")
+HMAC_SHA512 = dns.name.from_text("hmac-sha512")
+
+_hashes = {
+ HMAC_SHA224: 'SHA224',
+ HMAC_SHA256: 'SHA256',
+ HMAC_SHA384: 'SHA384',
+ HMAC_SHA512: 'SHA512',
+ HMAC_SHA1: 'SHA1',
+ HMAC_MD5: 'MD5',
+}
+
+default_algorithm = HMAC_MD5
+
+BADSIG = 16
+BADKEY = 17
+BADTIME = 18
+BADTRUNC = 22
+
+
+def sign(wire, keyname, secret, time, fudge, original_id, error,
+ other_data, request_mac, ctx=None, multi=False, first=True,
+ algorithm=default_algorithm):
+ """Return a (tsig_rdata, mac, ctx) tuple containing the HMAC TSIG rdata
+ for the input parameters, the HMAC MAC calculated by applying the
+ TSIG signature algorithm, and the TSIG digest context.
+ @rtype: (string, string, hmac.HMAC object)
+ @raises ValueError: I{other_data} is too long
+ @raises NotImplementedError: I{algorithm} is not supported
+ """
+
+ if isinstance(other_data, text_type):
+ other_data = other_data.encode()
+ (algorithm_name, digestmod) = get_algorithm(algorithm)
+ if first:
+ ctx = hmac.new(secret, digestmod=digestmod)
+ ml = len(request_mac)
+ if ml > 0:
+ ctx.update(struct.pack('!H', ml))
+ ctx.update(request_mac)
+ id = struct.pack('!H', original_id)
+ ctx.update(id)
+ ctx.update(wire[2:])
+ if first:
+ ctx.update(keyname.to_digestable())
+ ctx.update(struct.pack('!H', dns.rdataclass.ANY))
+ ctx.update(struct.pack('!I', 0))
+ long_time = time + long(0)
+ upper_time = (long_time >> 32) & long(0xffff)
+ lower_time = long_time & long(0xffffffff)
+ time_mac = struct.pack('!HIH', upper_time, lower_time, fudge)
+ pre_mac = algorithm_name + time_mac
+ ol = len(other_data)
+ if ol > 65535:
+ raise ValueError('TSIG Other Data is > 65535 bytes')
+ post_mac = struct.pack('!HH', error, ol) + other_data
+ if first:
+ ctx.update(pre_mac)
+ ctx.update(post_mac)
+ else:
+ ctx.update(time_mac)
+ mac = ctx.digest()
+ mpack = struct.pack('!H', len(mac))
+ tsig_rdata = pre_mac + mpack + mac + id + post_mac
+ if multi:
+ ctx = hmac.new(secret, digestmod=digestmod)
+ ml = len(mac)
+ ctx.update(struct.pack('!H', ml))
+ ctx.update(mac)
+ else:
+ ctx = None
+ return (tsig_rdata, mac, ctx)
+
+
+def hmac_md5(wire, keyname, secret, time, fudge, original_id, error,
+ other_data, request_mac, ctx=None, multi=False, first=True,
+ algorithm=default_algorithm):
+ return sign(wire, keyname, secret, time, fudge, original_id, error,
+ other_data, request_mac, ctx, multi, first, algorithm)
+
+
+def validate(wire, keyname, secret, now, request_mac, tsig_start, tsig_rdata,
+ tsig_rdlen, ctx=None, multi=False, first=True):
+ """Validate the specified TSIG rdata against the other input parameters.
+
+ @raises FormError: The TSIG is badly formed.
+ @raises BadTime: There is too much time skew between the client and the
+ server.
+ @raises BadSignature: The TSIG signature did not validate
+ @rtype: hmac.HMAC object"""
+
+ (adcount,) = struct.unpack("!H", wire[10:12])
+ if adcount == 0:
+ raise dns.exception.FormError
+ adcount -= 1
+ new_wire = wire[0:10] + struct.pack("!H", adcount) + wire[12:tsig_start]
+ current = tsig_rdata
+ (aname, used) = dns.name.from_wire(wire, current)
+ current = current + used
+ (upper_time, lower_time, fudge, mac_size) = \
+ struct.unpack("!HIHH", wire[current:current + 10])
+ time = ((upper_time + long(0)) << 32) + (lower_time + long(0))
+ current += 10
+ mac = wire[current:current + mac_size]
+ current += mac_size
+ (original_id, error, other_size) = \
+ struct.unpack("!HHH", wire[current:current + 6])
+ current += 6
+ other_data = wire[current:current + other_size]
+ current += other_size
+ if current != tsig_rdata + tsig_rdlen:
+ raise dns.exception.FormError
+ if error != 0:
+ if error == BADSIG:
+ raise PeerBadSignature
+ elif error == BADKEY:
+ raise PeerBadKey
+ elif error == BADTIME:
+ raise PeerBadTime
+ elif error == BADTRUNC:
+ raise PeerBadTruncation
+ else:
+ raise PeerError('unknown TSIG error code %d' % error)
+ time_low = time - fudge
+ time_high = time + fudge
+ if now < time_low or now > time_high:
+ raise BadTime
+ (junk, our_mac, ctx) = sign(new_wire, keyname, secret, time, fudge,
+ original_id, error, other_data,
+ request_mac, ctx, multi, first, aname)
+ if our_mac != mac:
+ raise BadSignature
+ return ctx
+
+
+def get_algorithm(algorithm):
+ """Returns the wire format string and the hash module to use for the
+ specified TSIG algorithm
+
+ @rtype: (string, hash constructor)
+ @raises NotImplementedError: I{algorithm} is not supported
+ """
+
+ if isinstance(algorithm, string_types):
+ algorithm = dns.name.from_text(algorithm)
+
+ try:
+ return (algorithm.to_digestable(), dns.hash.hashes[_hashes[algorithm]])
+ except KeyError:
+ raise NotImplementedError("TSIG algorithm " + str(algorithm) +
+ " is not supported")
+
+
+def get_algorithm_and_mac(wire, tsig_rdata, tsig_rdlen):
+ """Return the tsig algorithm for the specified tsig_rdata
+ @raises FormError: The TSIG is badly formed.
+ """
+ current = tsig_rdata
+ (aname, used) = dns.name.from_wire(wire, current)
+ current = current + used
+ (upper_time, lower_time, fudge, mac_size) = \
+ struct.unpack("!HIHH", wire[current:current + 10])
+ current += 10
+ mac = wire[current:current + mac_size]
+ current += mac_size
+ if current > tsig_rdata + tsig_rdlen:
+ raise dns.exception.FormError
+ return (aname, mac)
diff --git a/Contents/Libraries/Shared/dns/tsigkeyring.py b/Contents/Libraries/Shared/dns/tsigkeyring.py
new file mode 100644
index 000000000..01f87027c
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/tsigkeyring.py
@@ -0,0 +1,48 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""A place to store TSIG keys."""
+
+from dns._compat import maybe_decode, maybe_encode
+
+import base64
+
+import dns.name
+
+
+def from_text(textring):
+ """Convert a dictionary containing (textual DNS name, base64 secret) pairs
+ into a binary keyring which has (dns.name.Name, binary secret) pairs.
+ @rtype: dict"""
+
+ keyring = {}
+ for keytext in textring:
+ keyname = dns.name.from_text(keytext)
+ secret = base64.decodestring(maybe_encode(textring[keytext]))
+ keyring[keyname] = secret
+ return keyring
+
+
+def to_text(keyring):
+ """Convert a dictionary containing (dns.name.Name, binary secret) pairs
+ into a text keyring which has (textual DNS name, base64 secret) pairs.
+ @rtype: dict"""
+
+ textring = {}
+ for keyname in keyring:
+ keytext = maybe_decode(keyname.to_text())
+ secret = maybe_decode(base64.encodestring(keyring[keyname]))
+ textring[keytext] = secret
+ return textring
diff --git a/Contents/Libraries/Shared/dns/ttl.py b/Contents/Libraries/Shared/dns/ttl.py
new file mode 100644
index 000000000..a27d82518
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/ttl.py
@@ -0,0 +1,68 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS TTL conversion."""
+
+import dns.exception
+from ._compat import long
+
+
+class BadTTL(dns.exception.SyntaxError):
+
+ """DNS TTL value is not well-formed."""
+
+
+def from_text(text):
+ """Convert the text form of a TTL to an integer.
+
+ The BIND 8 units syntax for TTLs (e.g. '1w6d4h3m10s') is supported.
+
+ @param text: the textual TTL
+ @type text: string
+ @raises dns.ttl.BadTTL: the TTL is not well-formed
+ @rtype: int
+ """
+
+ if text.isdigit():
+ total = long(text)
+ else:
+ if not text[0].isdigit():
+ raise BadTTL
+ total = long(0)
+ current = long(0)
+ for c in text:
+ if c.isdigit():
+ current *= 10
+ current += long(c)
+ else:
+ c = c.lower()
+ if c == 'w':
+ total += current * long(604800)
+ elif c == 'd':
+ total += current * long(86400)
+ elif c == 'h':
+ total += current * long(3600)
+ elif c == 'm':
+ total += current * long(60)
+ elif c == 's':
+ total += current
+ else:
+ raise BadTTL("unknown unit '%s'" % c)
+ current = 0
+ if not current == 0:
+ raise BadTTL("trailing integer")
+ if total < long(0) or total > long(2147483647):
+ raise BadTTL("TTL should be between 0 and 2^31 - 1 (inclusive)")
+ return total
diff --git a/Contents/Libraries/Shared/dns/update.py b/Contents/Libraries/Shared/dns/update.py
new file mode 100644
index 000000000..59728d982
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/update.py
@@ -0,0 +1,249 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Dynamic Update Support"""
+
+
+import dns.message
+import dns.name
+import dns.opcode
+import dns.rdata
+import dns.rdataclass
+import dns.rdataset
+import dns.tsig
+from ._compat import string_types
+
+
+class Update(dns.message.Message):
+
+ def __init__(self, zone, rdclass=dns.rdataclass.IN, keyring=None,
+ keyname=None, keyalgorithm=dns.tsig.default_algorithm):
+ """Initialize a new DNS Update object.
+
+ @param zone: The zone which is being updated.
+ @type zone: A dns.name.Name or string
+ @param rdclass: The class of the zone; defaults to dns.rdataclass.IN.
+ @type rdclass: An int designating the class, or a string whose value
+ is the name of a class.
+ @param keyring: The TSIG keyring to use; defaults to None.
+ @type keyring: dict
+ @param keyname: The name of the TSIG key to use; defaults to None.
+ The key must be defined in the keyring. If a keyring is specified
+ but a keyname is not, then the key used will be the first key in the
+ keyring. Note that the order of keys in a dictionary is not defined,
+ so applications should supply a keyname when a keyring is used, unless
+ they know the keyring contains only one key.
+ @type keyname: dns.name.Name or string
+ @param keyalgorithm: The TSIG algorithm to use; defaults to
+ dns.tsig.default_algorithm. Constants for TSIG algorithms are defined
+ in dns.tsig, and the currently implemented algorithms are
+ HMAC_MD5, HMAC_SHA1, HMAC_SHA224, HMAC_SHA256, HMAC_SHA384, and
+ HMAC_SHA512.
+ @type keyalgorithm: string
+ """
+ super(Update, self).__init__()
+ self.flags |= dns.opcode.to_flags(dns.opcode.UPDATE)
+ if isinstance(zone, string_types):
+ zone = dns.name.from_text(zone)
+ self.origin = zone
+ if isinstance(rdclass, string_types):
+ rdclass = dns.rdataclass.from_text(rdclass)
+ self.zone_rdclass = rdclass
+ self.find_rrset(self.question, self.origin, rdclass, dns.rdatatype.SOA,
+ create=True, force_unique=True)
+ if keyring is not None:
+ self.use_tsig(keyring, keyname, algorithm=keyalgorithm)
+
+ def _add_rr(self, name, ttl, rd, deleting=None, section=None):
+ """Add a single RR to the update section."""
+
+ if section is None:
+ section = self.authority
+ covers = rd.covers()
+ rrset = self.find_rrset(section, name, self.zone_rdclass, rd.rdtype,
+ covers, deleting, True, True)
+ rrset.add(rd, ttl)
+
+ def _add(self, replace, section, name, *args):
+ """Add records. The first argument is the replace mode. If
+ false, RRs are added to an existing RRset; if true, the RRset
+ is replaced with the specified contents. The second
+ argument is the section to add to. The third argument
+ is always a name. The other arguments can be:
+
+ - rdataset...
+
+ - ttl, rdata...
+
+ - ttl, rdtype, string..."""
+
+ if isinstance(name, string_types):
+ name = dns.name.from_text(name, None)
+ if isinstance(args[0], dns.rdataset.Rdataset):
+ for rds in args:
+ if replace:
+ self.delete(name, rds.rdtype)
+ for rd in rds:
+ self._add_rr(name, rds.ttl, rd, section=section)
+ else:
+ args = list(args)
+ ttl = int(args.pop(0))
+ if isinstance(args[0], dns.rdata.Rdata):
+ if replace:
+ self.delete(name, args[0].rdtype)
+ for rd in args:
+ self._add_rr(name, ttl, rd, section=section)
+ else:
+ rdtype = args.pop(0)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ if replace:
+ self.delete(name, rdtype)
+ for s in args:
+ rd = dns.rdata.from_text(self.zone_rdclass, rdtype, s,
+ self.origin)
+ self._add_rr(name, ttl, rd, section=section)
+
+ def add(self, name, *args):
+ """Add records. The first argument is always a name. The other
+ arguments can be:
+
+ - rdataset...
+
+ - ttl, rdata...
+
+ - ttl, rdtype, string..."""
+ self._add(False, self.authority, name, *args)
+
+ def delete(self, name, *args):
+ """Delete records. The first argument is always a name. The other
+ arguments can be:
+
+ - I{nothing}
+
+ - rdataset...
+
+ - rdata...
+
+ - rdtype, [string...]"""
+
+ if isinstance(name, string_types):
+ name = dns.name.from_text(name, None)
+ if len(args) == 0:
+ self.find_rrset(self.authority, name, dns.rdataclass.ANY,
+ dns.rdatatype.ANY, dns.rdatatype.NONE,
+ dns.rdatatype.ANY, True, True)
+ elif isinstance(args[0], dns.rdataset.Rdataset):
+ for rds in args:
+ for rd in rds:
+ self._add_rr(name, 0, rd, dns.rdataclass.NONE)
+ else:
+ args = list(args)
+ if isinstance(args[0], dns.rdata.Rdata):
+ for rd in args:
+ self._add_rr(name, 0, rd, dns.rdataclass.NONE)
+ else:
+ rdtype = args.pop(0)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ if len(args) == 0:
+ self.find_rrset(self.authority, name,
+ self.zone_rdclass, rdtype,
+ dns.rdatatype.NONE,
+ dns.rdataclass.ANY,
+ True, True)
+ else:
+ for s in args:
+ rd = dns.rdata.from_text(self.zone_rdclass, rdtype, s,
+ self.origin)
+ self._add_rr(name, 0, rd, dns.rdataclass.NONE)
+
+ def replace(self, name, *args):
+ """Replace records. The first argument is always a name. The other
+ arguments can be:
+
+ - rdataset...
+
+ - ttl, rdata...
+
+ - ttl, rdtype, string...
+
+ Note that if you want to replace the entire node, you should do
+ a delete of the name followed by one or more calls to add."""
+
+ self._add(True, self.authority, name, *args)
+
+ def present(self, name, *args):
+ """Require that an owner name (and optionally an rdata type,
+ or specific rdataset) exists as a prerequisite to the
+ execution of the update. The first argument is always a name.
+ The other arguments can be:
+
+ - rdataset...
+
+ - rdata...
+
+ - rdtype, string..."""
+
+ if isinstance(name, string_types):
+ name = dns.name.from_text(name, None)
+ if len(args) == 0:
+ self.find_rrset(self.answer, name,
+ dns.rdataclass.ANY, dns.rdatatype.ANY,
+ dns.rdatatype.NONE, None,
+ True, True)
+ elif isinstance(args[0], dns.rdataset.Rdataset) or \
+ isinstance(args[0], dns.rdata.Rdata) or \
+ len(args) > 1:
+ if not isinstance(args[0], dns.rdataset.Rdataset):
+ # Add a 0 TTL
+ args = list(args)
+ args.insert(0, 0)
+ self._add(False, self.answer, name, *args)
+ else:
+ rdtype = args[0]
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ self.find_rrset(self.answer, name,
+ dns.rdataclass.ANY, rdtype,
+ dns.rdatatype.NONE, None,
+ True, True)
+
+ def absent(self, name, rdtype=None):
+ """Require that an owner name (and optionally an rdata type) does
+ not exist as a prerequisite to the execution of the update."""
+
+ if isinstance(name, string_types):
+ name = dns.name.from_text(name, None)
+ if rdtype is None:
+ self.find_rrset(self.answer, name,
+ dns.rdataclass.NONE, dns.rdatatype.ANY,
+ dns.rdatatype.NONE, None,
+ True, True)
+ else:
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ self.find_rrset(self.answer, name,
+ dns.rdataclass.NONE, rdtype,
+ dns.rdatatype.NONE, None,
+ True, True)
+
+ def to_wire(self, origin=None, max_size=65535):
+ """Return a string containing the update in DNS compressed wire
+ format.
+ @rtype: string"""
+ if origin is None:
+ origin = self.origin
+ return super(Update, self).to_wire(origin, max_size)
diff --git a/Contents/Libraries/Shared/dns/version.py b/Contents/Libraries/Shared/dns/version.py
new file mode 100644
index 000000000..9e8dbb1b0
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/version.py
@@ -0,0 +1,34 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""dnspython release version information."""
+
+MAJOR = 1
+MINOR = 15
+MICRO = 0
+RELEASELEVEL = 0x0f
+SERIAL = 0
+
+if RELEASELEVEL == 0x0f:
+ version = '%d.%d.%d' % (MAJOR, MINOR, MICRO)
+elif RELEASELEVEL == 0x00:
+ version = '%d.%d.%dx%d' % \
+ (MAJOR, MINOR, MICRO, SERIAL)
+else:
+ version = '%d.%d.%d%x%d' % \
+ (MAJOR, MINOR, MICRO, RELEASELEVEL, SERIAL)
+
+hexversion = MAJOR << 24 | MINOR << 16 | MICRO << 8 | RELEASELEVEL << 4 | \
+ SERIAL
diff --git a/Contents/Libraries/Shared/dns/wiredata.py b/Contents/Libraries/Shared/dns/wiredata.py
new file mode 100644
index 000000000..ccef59545
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/wiredata.py
@@ -0,0 +1,103 @@
+# Copyright (C) 2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Wire Data Helper"""
+
+import sys
+
+import dns.exception
+from ._compat import binary_type, string_types
+
+# Figure out what constant python passes for an unspecified slice bound.
+# It's supposed to be sys.maxint, yet on 64-bit windows sys.maxint is 2^31 - 1
+# but Python uses 2^63 - 1 as the constant. Rather than making pointless
+# extra comparisons, duplicating code, or weakening WireData, we just figure
+# out what constant Python will use.
+
+
+class _SliceUnspecifiedBound(binary_type):
+
+ def __getitem__(self, key):
+ return key.stop
+
+ if sys.version_info < (3,):
+ def __getslice__(self, i, j): # pylint: disable=getslice-method
+ return self.__getitem__(slice(i, j))
+
+_unspecified_bound = _SliceUnspecifiedBound()[1:]
+
+
+class WireData(binary_type):
+ # WireData is a string with stricter slicing
+
+ def __getitem__(self, key):
+ try:
+ if isinstance(key, slice):
+ # make sure we are not going outside of valid ranges,
+ # do stricter control of boundaries than python does
+ # by default
+ start = key.start
+ stop = key.stop
+
+ if sys.version_info < (3,):
+ if stop == _unspecified_bound:
+ # handle the case where the right bound is unspecified
+ stop = len(self)
+
+ if start < 0 or stop < 0:
+ raise dns.exception.FormError
+ # If it's not an empty slice, access left and right bounds
+ # to make sure they're valid
+ if start != stop:
+ super(WireData, self).__getitem__(start)
+ super(WireData, self).__getitem__(stop - 1)
+ else:
+ for index in (start, stop):
+ if index is None:
+ continue
+ elif abs(index) > len(self):
+ raise dns.exception.FormError
+
+ return WireData(super(WireData, self).__getitem__(
+ slice(start, stop)))
+ return bytearray(self.unwrap())[key]
+ except IndexError:
+ raise dns.exception.FormError
+
+ if sys.version_info < (3,):
+ def __getslice__(self, i, j): # pylint: disable=getslice-method
+ return self.__getitem__(slice(i, j))
+
+ def __iter__(self):
+ i = 0
+ while 1:
+ try:
+ yield self[i]
+ i += 1
+ except dns.exception.FormError:
+ raise StopIteration
+
+ def unwrap(self):
+ return binary_type(self)
+
+
+def maybe_wrap(wire):
+ if isinstance(wire, WireData):
+ return wire
+ elif isinstance(wire, binary_type):
+ return WireData(wire)
+ elif isinstance(wire, string_types):
+ return WireData(wire.encode())
+ raise ValueError("unhandled type %s" % type(wire))
diff --git a/Contents/Libraries/Shared/dns/zone.py b/Contents/Libraries/Shared/dns/zone.py
new file mode 100644
index 000000000..468618f67
--- /dev/null
+++ b/Contents/Libraries/Shared/dns/zone.py
@@ -0,0 +1,1087 @@
+# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose with or without fee is hereby granted,
+# provided that the above copyright notice and this permission notice
+# appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""DNS Zones."""
+
+from __future__ import generators
+
+import sys
+import re
+import os
+from io import BytesIO
+
+import dns.exception
+import dns.name
+import dns.node
+import dns.rdataclass
+import dns.rdatatype
+import dns.rdata
+import dns.rrset
+import dns.tokenizer
+import dns.ttl
+import dns.grange
+from ._compat import string_types, text_type
+
+
+_py3 = sys.version_info > (3,)
+
+
+class BadZone(dns.exception.DNSException):
+
+ """The DNS zone is malformed."""
+
+
+class NoSOA(BadZone):
+
+ """The DNS zone has no SOA RR at its origin."""
+
+
+class NoNS(BadZone):
+
+ """The DNS zone has no NS RRset at its origin."""
+
+
+class UnknownOrigin(BadZone):
+
+ """The DNS zone's origin is unknown."""
+
+
+class Zone(object):
+
+ """A DNS zone.
+
+ A Zone is a mapping from names to nodes. The zone object may be
+ treated like a Python dictionary, e.g. zone[name] will retrieve
+ the node associated with that name. The I{name} may be a
+ dns.name.Name object, or it may be a string. In the either case,
+ if the name is relative it is treated as relative to the origin of
+ the zone.
+
+ @ivar rdclass: The zone's rdata class; the default is class IN.
+ @type rdclass: int
+ @ivar origin: The origin of the zone.
+ @type origin: dns.name.Name object
+ @ivar nodes: A dictionary mapping the names of nodes in the zone to the
+ nodes themselves.
+ @type nodes: dict
+ @ivar relativize: should names in the zone be relativized?
+ @type relativize: bool
+ @cvar node_factory: the factory used to create a new node
+ @type node_factory: class or callable
+ """
+
+ node_factory = dns.node.Node
+
+ __slots__ = ['rdclass', 'origin', 'nodes', 'relativize']
+
+ def __init__(self, origin, rdclass=dns.rdataclass.IN, relativize=True):
+ """Initialize a zone object.
+
+ @param origin: The origin of the zone.
+ @type origin: dns.name.Name object
+ @param rdclass: The zone's rdata class; the default is class IN.
+ @type rdclass: int"""
+
+ if origin is not None:
+ if isinstance(origin, string_types):
+ origin = dns.name.from_text(origin)
+ elif not isinstance(origin, dns.name.Name):
+ raise ValueError("origin parameter must be convertible to a "
+ "DNS name")
+ if not origin.is_absolute():
+ raise ValueError("origin parameter must be an absolute name")
+ self.origin = origin
+ self.rdclass = rdclass
+ self.nodes = {}
+ self.relativize = relativize
+
+ def __eq__(self, other):
+ """Two zones are equal if they have the same origin, class, and
+ nodes.
+ @rtype: bool
+ """
+
+ if not isinstance(other, Zone):
+ return False
+ if self.rdclass != other.rdclass or \
+ self.origin != other.origin or \
+ self.nodes != other.nodes:
+ return False
+ return True
+
+ def __ne__(self, other):
+ """Are two zones not equal?
+ @rtype: bool
+ """
+
+ return not self.__eq__(other)
+
+ def _validate_name(self, name):
+ if isinstance(name, string_types):
+ name = dns.name.from_text(name, None)
+ elif not isinstance(name, dns.name.Name):
+ raise KeyError("name parameter must be convertible to a DNS name")
+ if name.is_absolute():
+ if not name.is_subdomain(self.origin):
+ raise KeyError(
+ "name parameter must be a subdomain of the zone origin")
+ if self.relativize:
+ name = name.relativize(self.origin)
+ return name
+
+ def __getitem__(self, key):
+ key = self._validate_name(key)
+ return self.nodes[key]
+
+ def __setitem__(self, key, value):
+ key = self._validate_name(key)
+ self.nodes[key] = value
+
+ def __delitem__(self, key):
+ key = self._validate_name(key)
+ del self.nodes[key]
+
+ def __iter__(self):
+ return self.nodes.__iter__()
+
+ def iterkeys(self):
+ if _py3:
+ return self.nodes.keys()
+ else:
+ return self.nodes.iterkeys() # pylint: disable=dict-iter-method
+
+ def keys(self):
+ return self.nodes.keys()
+
+ def itervalues(self):
+ if _py3:
+ return self.nodes.values()
+ else:
+ return self.nodes.itervalues() # pylint: disable=dict-iter-method
+
+ def values(self):
+ return self.nodes.values()
+
+ def items(self):
+ return self.nodes.items()
+
+ iteritems = items
+
+ def get(self, key):
+ key = self._validate_name(key)
+ return self.nodes.get(key)
+
+ def __contains__(self, other):
+ return other in self.nodes
+
+ def find_node(self, name, create=False):
+ """Find a node in the zone, possibly creating it.
+
+ @param name: the name of the node to find
+ @type name: dns.name.Name object or string
+ @param create: should the node be created if it doesn't exist?
+ @type create: bool
+ @raises KeyError: the name is not known and create was not specified.
+ @rtype: dns.node.Node object
+ """
+
+ name = self._validate_name(name)
+ node = self.nodes.get(name)
+ if node is None:
+ if not create:
+ raise KeyError
+ node = self.node_factory()
+ self.nodes[name] = node
+ return node
+
+ def get_node(self, name, create=False):
+ """Get a node in the zone, possibly creating it.
+
+ This method is like L{find_node}, except it returns None instead
+ of raising an exception if the node does not exist and creation
+ has not been requested.
+
+ @param name: the name of the node to find
+ @type name: dns.name.Name object or string
+ @param create: should the node be created if it doesn't exist?
+ @type create: bool
+ @rtype: dns.node.Node object or None
+ """
+
+ try:
+ node = self.find_node(name, create)
+ except KeyError:
+ node = None
+ return node
+
+ def delete_node(self, name):
+ """Delete the specified node if it exists.
+
+ It is not an error if the node does not exist.
+ """
+
+ name = self._validate_name(name)
+ if name in self.nodes:
+ del self.nodes[name]
+
+ def find_rdataset(self, name, rdtype, covers=dns.rdatatype.NONE,
+ create=False):
+ """Look for rdata with the specified name and type in the zone,
+ and return an rdataset encapsulating it.
+
+ The I{name}, I{rdtype}, and I{covers} parameters may be
+ strings, in which case they will be converted to their proper
+ type.
+
+ The rdataset returned is not a copy; changes to it will change
+ the zone.
+
+ KeyError is raised if the name or type are not found.
+ Use L{get_rdataset} if you want to have None returned instead.
+
+ @param name: the owner name to look for
+ @type name: DNS.name.Name object or string
+ @param rdtype: the rdata type desired
+ @type rdtype: int or string
+ @param covers: the covered type (defaults to None)
+ @type covers: int or string
+ @param create: should the node and rdataset be created if they do not
+ exist?
+ @type create: bool
+ @raises KeyError: the node or rdata could not be found
+ @rtype: dns.rrset.RRset object
+ """
+
+ name = self._validate_name(name)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ if isinstance(covers, string_types):
+ covers = dns.rdatatype.from_text(covers)
+ node = self.find_node(name, create)
+ return node.find_rdataset(self.rdclass, rdtype, covers, create)
+
+ def get_rdataset(self, name, rdtype, covers=dns.rdatatype.NONE,
+ create=False):
+ """Look for rdata with the specified name and type in the zone,
+ and return an rdataset encapsulating it.
+
+ The I{name}, I{rdtype}, and I{covers} parameters may be
+ strings, in which case they will be converted to their proper
+ type.
+
+ The rdataset returned is not a copy; changes to it will change
+ the zone.
+
+ None is returned if the name or type are not found.
+ Use L{find_rdataset} if you want to have KeyError raised instead.
+
+ @param name: the owner name to look for
+ @type name: DNS.name.Name object or string
+ @param rdtype: the rdata type desired
+ @type rdtype: int or string
+ @param covers: the covered type (defaults to None)
+ @type covers: int or string
+ @param create: should the node and rdataset be created if they do not
+ exist?
+ @type create: bool
+ @rtype: dns.rrset.RRset object
+ """
+
+ try:
+ rdataset = self.find_rdataset(name, rdtype, covers, create)
+ except KeyError:
+ rdataset = None
+ return rdataset
+
+ def delete_rdataset(self, name, rdtype, covers=dns.rdatatype.NONE):
+ """Delete the rdataset matching I{rdtype} and I{covers}, if it
+ exists at the node specified by I{name}.
+
+ The I{name}, I{rdtype}, and I{covers} parameters may be
+ strings, in which case they will be converted to their proper
+ type.
+
+ It is not an error if the node does not exist, or if there is no
+ matching rdataset at the node.
+
+ If the node has no rdatasets after the deletion, it will itself
+ be deleted.
+
+ @param name: the owner name to look for
+ @type name: DNS.name.Name object or string
+ @param rdtype: the rdata type desired
+ @type rdtype: int or string
+ @param covers: the covered type (defaults to None)
+ @type covers: int or string
+ """
+
+ name = self._validate_name(name)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ if isinstance(covers, string_types):
+ covers = dns.rdatatype.from_text(covers)
+ node = self.get_node(name)
+ if node is not None:
+ node.delete_rdataset(self.rdclass, rdtype, covers)
+ if len(node) == 0:
+ self.delete_node(name)
+
+ def replace_rdataset(self, name, replacement):
+ """Replace an rdataset at name.
+
+ It is not an error if there is no rdataset matching I{replacement}.
+
+ Ownership of the I{replacement} object is transferred to the zone;
+ in other words, this method does not store a copy of I{replacement}
+ at the node, it stores I{replacement} itself.
+
+ If the I{name} node does not exist, it is created.
+
+ @param name: the owner name
+ @type name: DNS.name.Name object or string
+ @param replacement: the replacement rdataset
+ @type replacement: dns.rdataset.Rdataset
+ """
+
+ if replacement.rdclass != self.rdclass:
+ raise ValueError('replacement.rdclass != zone.rdclass')
+ node = self.find_node(name, True)
+ node.replace_rdataset(replacement)
+
+ def find_rrset(self, name, rdtype, covers=dns.rdatatype.NONE):
+ """Look for rdata with the specified name and type in the zone,
+ and return an RRset encapsulating it.
+
+ The I{name}, I{rdtype}, and I{covers} parameters may be
+ strings, in which case they will be converted to their proper
+ type.
+
+ This method is less efficient than the similar
+ L{find_rdataset} because it creates an RRset instead of
+ returning the matching rdataset. It may be more convenient
+ for some uses since it returns an object which binds the owner
+ name to the rdata.
+
+ This method may not be used to create new nodes or rdatasets;
+ use L{find_rdataset} instead.
+
+ KeyError is raised if the name or type are not found.
+ Use L{get_rrset} if you want to have None returned instead.
+
+ @param name: the owner name to look for
+ @type name: DNS.name.Name object or string
+ @param rdtype: the rdata type desired
+ @type rdtype: int or string
+ @param covers: the covered type (defaults to None)
+ @type covers: int or string
+ @raises KeyError: the node or rdata could not be found
+ @rtype: dns.rrset.RRset object
+ """
+
+ name = self._validate_name(name)
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ if isinstance(covers, string_types):
+ covers = dns.rdatatype.from_text(covers)
+ rdataset = self.nodes[name].find_rdataset(self.rdclass, rdtype, covers)
+ rrset = dns.rrset.RRset(name, self.rdclass, rdtype, covers)
+ rrset.update(rdataset)
+ return rrset
+
+ def get_rrset(self, name, rdtype, covers=dns.rdatatype.NONE):
+ """Look for rdata with the specified name and type in the zone,
+ and return an RRset encapsulating it.
+
+ The I{name}, I{rdtype}, and I{covers} parameters may be
+ strings, in which case they will be converted to their proper
+ type.
+
+ This method is less efficient than the similar L{get_rdataset}
+ because it creates an RRset instead of returning the matching
+ rdataset. It may be more convenient for some uses since it
+ returns an object which binds the owner name to the rdata.
+
+ This method may not be used to create new nodes or rdatasets;
+ use L{find_rdataset} instead.
+
+ None is returned if the name or type are not found.
+ Use L{find_rrset} if you want to have KeyError raised instead.
+
+ @param name: the owner name to look for
+ @type name: DNS.name.Name object or string
+ @param rdtype: the rdata type desired
+ @type rdtype: int or string
+ @param covers: the covered type (defaults to None)
+ @type covers: int or string
+ @rtype: dns.rrset.RRset object
+ """
+
+ try:
+ rrset = self.find_rrset(name, rdtype, covers)
+ except KeyError:
+ rrset = None
+ return rrset
+
+ def iterate_rdatasets(self, rdtype=dns.rdatatype.ANY,
+ covers=dns.rdatatype.NONE):
+ """Return a generator which yields (name, rdataset) tuples for
+ all rdatasets in the zone which have the specified I{rdtype}
+ and I{covers}. If I{rdtype} is dns.rdatatype.ANY, the default,
+ then all rdatasets will be matched.
+
+ @param rdtype: int or string
+ @type rdtype: int or string
+ @param covers: the covered type (defaults to None)
+ @type covers: int or string
+ """
+
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ if isinstance(covers, string_types):
+ covers = dns.rdatatype.from_text(covers)
+ for (name, node) in self.iteritems():
+ for rds in node:
+ if rdtype == dns.rdatatype.ANY or \
+ (rds.rdtype == rdtype and rds.covers == covers):
+ yield (name, rds)
+
+ def iterate_rdatas(self, rdtype=dns.rdatatype.ANY,
+ covers=dns.rdatatype.NONE):
+ """Return a generator which yields (name, ttl, rdata) tuples for
+ all rdatas in the zone which have the specified I{rdtype}
+ and I{covers}. If I{rdtype} is dns.rdatatype.ANY, the default,
+ then all rdatas will be matched.
+
+ @param rdtype: int or string
+ @type rdtype: int or string
+ @param covers: the covered type (defaults to None)
+ @type covers: int or string
+ """
+
+ if isinstance(rdtype, string_types):
+ rdtype = dns.rdatatype.from_text(rdtype)
+ if isinstance(covers, string_types):
+ covers = dns.rdatatype.from_text(covers)
+ for (name, node) in self.iteritems():
+ for rds in node:
+ if rdtype == dns.rdatatype.ANY or \
+ (rds.rdtype == rdtype and rds.covers == covers):
+ for rdata in rds:
+ yield (name, rds.ttl, rdata)
+
+ def to_file(self, f, sorted=True, relativize=True, nl=None):
+ """Write a zone to a file.
+
+ @param f: file or string. If I{f} is a string, it is treated
+ as the name of a file to open.
+ @param sorted: if True, the file will be written with the
+ names sorted in DNSSEC order from least to greatest. Otherwise
+ the names will be written in whatever order they happen to have
+ in the zone's dictionary.
+ @param relativize: if True, domain names in the output will be
+ relativized to the zone's origin (if possible).
+ @type relativize: bool
+ @param nl: The end of line string. If not specified, the
+ output will use the platform's native end-of-line marker (i.e.
+ LF on POSIX, CRLF on Windows, CR on Macintosh).
+ @type nl: string or None
+ """
+
+ if isinstance(f, string_types):
+ f = open(f, 'wb')
+ want_close = True
+ else:
+ want_close = False
+
+ # must be in this way, f.encoding may contain None, or even attribute
+ # may not be there
+ file_enc = getattr(f, 'encoding', None)
+ if file_enc is None:
+ file_enc = 'utf-8'
+
+ if nl is None:
+ nl_b = os.linesep.encode(file_enc) # binary mode, '\n' is not enough
+ nl = u'\n'
+ elif isinstance(nl, string_types):
+ nl_b = nl.encode(file_enc)
+ else:
+ nl_b = nl
+ nl = nl.decode()
+
+ try:
+ if sorted:
+ names = list(self.keys())
+ names.sort()
+ else:
+ names = self.iterkeys()
+ for n in names:
+ l = self[n].to_text(n, origin=self.origin,
+ relativize=relativize)
+ if isinstance(l, text_type):
+ l_b = l.encode(file_enc)
+ else:
+ l_b = l
+ l = l.decode()
+
+ try:
+ f.write(l_b)
+ f.write(nl_b)
+ except TypeError: # textual mode
+ f.write(l)
+ f.write(nl)
+ finally:
+ if want_close:
+ f.close()
+
+ def to_text(self, sorted=True, relativize=True, nl=None):
+ """Return a zone's text as though it were written to a file.
+
+ @param sorted: if True, the file will be written with the
+ names sorted in DNSSEC order from least to greatest. Otherwise
+ the names will be written in whatever order they happen to have
+ in the zone's dictionary.
+ @param relativize: if True, domain names in the output will be
+ relativized to the zone's origin (if possible).
+ @type relativize: bool
+ @param nl: The end of line string. If not specified, the
+ output will use the platform's native end-of-line marker (i.e.
+ LF on POSIX, CRLF on Windows, CR on Macintosh).
+ @type nl: string or None
+ """
+ temp_buffer = BytesIO()
+ self.to_file(temp_buffer, sorted, relativize, nl)
+ return_value = temp_buffer.getvalue()
+ temp_buffer.close()
+ return return_value
+
+ def check_origin(self):
+ """Do some simple checking of the zone's origin.
+
+ @raises dns.zone.NoSOA: there is no SOA RR
+ @raises dns.zone.NoNS: there is no NS RRset
+ @raises KeyError: there is no origin node
+ """
+ if self.relativize:
+ name = dns.name.empty
+ else:
+ name = self.origin
+ if self.get_rdataset(name, dns.rdatatype.SOA) is None:
+ raise NoSOA
+ if self.get_rdataset(name, dns.rdatatype.NS) is None:
+ raise NoNS
+
+
+class _MasterReader(object):
+
+ """Read a DNS master file
+
+ @ivar tok: The tokenizer
+ @type tok: dns.tokenizer.Tokenizer object
+ @ivar ttl: The default TTL
+ @type ttl: int
+ @ivar last_name: The last name read
+ @type last_name: dns.name.Name object
+ @ivar current_origin: The current origin
+ @type current_origin: dns.name.Name object
+ @ivar relativize: should names in the zone be relativized?
+ @type relativize: bool
+ @ivar zone: the zone
+ @type zone: dns.zone.Zone object
+ @ivar saved_state: saved reader state (used when processing $INCLUDE)
+ @type saved_state: list of (tokenizer, current_origin, last_name, file)
+ tuples.
+ @ivar current_file: the file object of the $INCLUDed file being parsed
+ (None if no $INCLUDE is active).
+ @ivar allow_include: is $INCLUDE allowed?
+ @type allow_include: bool
+ @ivar check_origin: should sanity checks of the origin node be done?
+ The default is True.
+ @type check_origin: bool
+ """
+
+ def __init__(self, tok, origin, rdclass, relativize, zone_factory=Zone,
+ allow_include=False, check_origin=True):
+ if isinstance(origin, string_types):
+ origin = dns.name.from_text(origin)
+ self.tok = tok
+ self.current_origin = origin
+ self.relativize = relativize
+ self.ttl = 0
+ self.last_name = self.current_origin
+ self.zone = zone_factory(origin, rdclass, relativize=relativize)
+ self.saved_state = []
+ self.current_file = None
+ self.allow_include = allow_include
+ self.check_origin = check_origin
+
+ def _eat_line(self):
+ while 1:
+ token = self.tok.get()
+ if token.is_eol_or_eof():
+ break
+
+ def _rr_line(self):
+ """Process one line from a DNS master file."""
+ # Name
+ if self.current_origin is None:
+ raise UnknownOrigin
+ token = self.tok.get(want_leading=True)
+ if not token.is_whitespace():
+ self.last_name = dns.name.from_text(
+ token.value, self.current_origin)
+ else:
+ token = self.tok.get()
+ if token.is_eol_or_eof():
+ # treat leading WS followed by EOL/EOF as if they were EOL/EOF.
+ return
+ self.tok.unget(token)
+ name = self.last_name
+ if not name.is_subdomain(self.zone.origin):
+ self._eat_line()
+ return
+ if self.relativize:
+ name = name.relativize(self.zone.origin)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ # TTL
+ try:
+ ttl = dns.ttl.from_text(token.value)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ except dns.ttl.BadTTL:
+ ttl = self.ttl
+ # Class
+ try:
+ rdclass = dns.rdataclass.from_text(token.value)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ except dns.exception.SyntaxError:
+ raise dns.exception.SyntaxError
+ except Exception:
+ rdclass = self.zone.rdclass
+ if rdclass != self.zone.rdclass:
+ raise dns.exception.SyntaxError("RR class is not zone's class")
+ # Type
+ try:
+ rdtype = dns.rdatatype.from_text(token.value)
+ except:
+ raise dns.exception.SyntaxError(
+ "unknown rdatatype '%s'" % token.value)
+ n = self.zone.nodes.get(name)
+ if n is None:
+ n = self.zone.node_factory()
+ self.zone.nodes[name] = n
+ try:
+ rd = dns.rdata.from_text(rdclass, rdtype, self.tok,
+ self.current_origin, False)
+ except dns.exception.SyntaxError:
+ # Catch and reraise.
+ (ty, va) = sys.exc_info()[:2]
+ raise va
+ except:
+ # All exceptions that occur in the processing of rdata
+ # are treated as syntax errors. This is not strictly
+ # correct, but it is correct almost all of the time.
+ # We convert them to syntax errors so that we can emit
+ # helpful filename:line info.
+ (ty, va) = sys.exc_info()[:2]
+ raise dns.exception.SyntaxError(
+ "caught exception %s: %s" % (str(ty), str(va)))
+
+ rd.choose_relativity(self.zone.origin, self.relativize)
+ covers = rd.covers()
+ rds = n.find_rdataset(rdclass, rdtype, covers, True)
+ rds.add(rd, ttl)
+
+ def _parse_modify(self, side):
+ # Here we catch everything in '{' '}' in a group so we can replace it
+ # with ''.
+ is_generate1 = re.compile("^.*\$({(\+|-?)(\d+),(\d+),(.)}).*$")
+ is_generate2 = re.compile("^.*\$({(\+|-?)(\d+)}).*$")
+ is_generate3 = re.compile("^.*\$({(\+|-?)(\d+),(\d+)}).*$")
+ # Sometimes there are modifiers in the hostname. These come after
+ # the dollar sign. They are in the form: ${offset[,width[,base]]}.
+ # Make names
+ g1 = is_generate1.match(side)
+ if g1:
+ mod, sign, offset, width, base = g1.groups()
+ if sign == '':
+ sign = '+'
+ g2 = is_generate2.match(side)
+ if g2:
+ mod, sign, offset = g2.groups()
+ if sign == '':
+ sign = '+'
+ width = 0
+ base = 'd'
+ g3 = is_generate3.match(side)
+ if g3:
+ mod, sign, offset, width = g1.groups()
+ if sign == '':
+ sign = '+'
+ width = g1.groups()[2]
+ base = 'd'
+
+ if not (g1 or g2 or g3):
+ mod = ''
+ sign = '+'
+ offset = 0
+ width = 0
+ base = 'd'
+
+ if base != 'd':
+ raise NotImplementedError()
+
+ return mod, sign, offset, width, base
+
+ def _generate_line(self):
+ # range lhs [ttl] [class] type rhs [ comment ]
+ """Process one line containing the GENERATE statement from a DNS
+ master file."""
+ if self.current_origin is None:
+ raise UnknownOrigin
+
+ token = self.tok.get()
+ # Range (required)
+ try:
+ start, stop, step = dns.grange.from_text(token.value)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ except:
+ raise dns.exception.SyntaxError
+
+ # lhs (required)
+ try:
+ lhs = token.value
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ except:
+ raise dns.exception.SyntaxError
+
+ # TTL
+ try:
+ ttl = dns.ttl.from_text(token.value)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ except dns.ttl.BadTTL:
+ ttl = self.ttl
+ # Class
+ try:
+ rdclass = dns.rdataclass.from_text(token.value)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ except dns.exception.SyntaxError:
+ raise dns.exception.SyntaxError
+ except Exception:
+ rdclass = self.zone.rdclass
+ if rdclass != self.zone.rdclass:
+ raise dns.exception.SyntaxError("RR class is not zone's class")
+ # Type
+ try:
+ rdtype = dns.rdatatype.from_text(token.value)
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError
+ except Exception:
+ raise dns.exception.SyntaxError("unknown rdatatype '%s'" %
+ token.value)
+
+ # lhs (required)
+ try:
+ rhs = token.value
+ except:
+ raise dns.exception.SyntaxError
+
+ lmod, lsign, loffset, lwidth, lbase = self._parse_modify(lhs)
+ rmod, rsign, roffset, rwidth, rbase = self._parse_modify(rhs)
+ for i in range(start, stop + 1, step):
+ # +1 because bind is inclusive and python is exclusive
+
+ if lsign == u'+':
+ lindex = i + int(loffset)
+ elif lsign == u'-':
+ lindex = i - int(loffset)
+
+ if rsign == u'-':
+ rindex = i - int(roffset)
+ elif rsign == u'+':
+ rindex = i + int(roffset)
+
+ lzfindex = str(lindex).zfill(int(lwidth))
+ rzfindex = str(rindex).zfill(int(rwidth))
+
+ name = lhs.replace(u'$%s' % (lmod), lzfindex)
+ rdata = rhs.replace(u'$%s' % (rmod), rzfindex)
+
+ self.last_name = dns.name.from_text(name, self.current_origin)
+ name = self.last_name
+ if not name.is_subdomain(self.zone.origin):
+ self._eat_line()
+ return
+ if self.relativize:
+ name = name.relativize(self.zone.origin)
+
+ n = self.zone.nodes.get(name)
+ if n is None:
+ n = self.zone.node_factory()
+ self.zone.nodes[name] = n
+ try:
+ rd = dns.rdata.from_text(rdclass, rdtype, rdata,
+ self.current_origin, False)
+ except dns.exception.SyntaxError:
+ # Catch and reraise.
+ (ty, va) = sys.exc_info()[:2]
+ raise va
+ except:
+ # All exceptions that occur in the processing of rdata
+ # are treated as syntax errors. This is not strictly
+ # correct, but it is correct almost all of the time.
+ # We convert them to syntax errors so that we can emit
+ # helpful filename:line info.
+ (ty, va) = sys.exc_info()[:2]
+ raise dns.exception.SyntaxError("caught exception %s: %s" %
+ (str(ty), str(va)))
+
+ rd.choose_relativity(self.zone.origin, self.relativize)
+ covers = rd.covers()
+ rds = n.find_rdataset(rdclass, rdtype, covers, True)
+ rds.add(rd, ttl)
+
+ def read(self):
+ """Read a DNS master file and build a zone object.
+
+ @raises dns.zone.NoSOA: No SOA RR was found at the zone origin
+ @raises dns.zone.NoNS: No NS RRset was found at the zone origin
+ """
+
+ try:
+ while 1:
+ token = self.tok.get(True, True)
+ if token.is_eof():
+ if self.current_file is not None:
+ self.current_file.close()
+ if len(self.saved_state) > 0:
+ (self.tok,
+ self.current_origin,
+ self.last_name,
+ self.current_file,
+ self.ttl) = self.saved_state.pop(-1)
+ continue
+ break
+ elif token.is_eol():
+ continue
+ elif token.is_comment():
+ self.tok.get_eol()
+ continue
+ elif token.value[0] == u'$':
+ c = token.value.upper()
+ if c == u'$TTL':
+ token = self.tok.get()
+ if not token.is_identifier():
+ raise dns.exception.SyntaxError("bad $TTL")
+ self.ttl = dns.ttl.from_text(token.value)
+ self.tok.get_eol()
+ elif c == u'$ORIGIN':
+ self.current_origin = self.tok.get_name()
+ self.tok.get_eol()
+ if self.zone.origin is None:
+ self.zone.origin = self.current_origin
+ elif c == u'$INCLUDE' and self.allow_include:
+ token = self.tok.get()
+ filename = token.value
+ token = self.tok.get()
+ if token.is_identifier():
+ new_origin =\
+ dns.name.from_text(token.value,
+ self.current_origin)
+ self.tok.get_eol()
+ elif not token.is_eol_or_eof():
+ raise dns.exception.SyntaxError(
+ "bad origin in $INCLUDE")
+ else:
+ new_origin = self.current_origin
+ self.saved_state.append((self.tok,
+ self.current_origin,
+ self.last_name,
+ self.current_file,
+ self.ttl))
+ self.current_file = open(filename, 'r')
+ self.tok = dns.tokenizer.Tokenizer(self.current_file,
+ filename)
+ self.current_origin = new_origin
+ elif c == u'$GENERATE':
+ self._generate_line()
+ else:
+ raise dns.exception.SyntaxError(
+ "Unknown master file directive '" + c + "'")
+ continue
+ self.tok.unget(token)
+ self._rr_line()
+ except dns.exception.SyntaxError as detail:
+ (filename, line_number) = self.tok.where()
+ if detail is None:
+ detail = "syntax error"
+ raise dns.exception.SyntaxError(
+ "%s:%d: %s" % (filename, line_number, detail))
+
+ # Now that we're done reading, do some basic checking of the zone.
+ if self.check_origin:
+ self.zone.check_origin()
+
+
+def from_text(text, origin=None, rdclass=dns.rdataclass.IN,
+ relativize=True, zone_factory=Zone, filename=None,
+ allow_include=False, check_origin=True):
+ """Build a zone object from a master file format string.
+
+ @param text: the master file format input
+ @type text: string.
+ @param origin: The origin of the zone; if not specified, the first
+ $ORIGIN statement in the master file will determine the origin of the
+ zone.
+ @type origin: dns.name.Name object or string
+ @param rdclass: The zone's rdata class; the default is class IN.
+ @type rdclass: int
+ @param relativize: should names be relativized? The default is True
+ @type relativize: bool
+ @param zone_factory: The zone factory to use
+ @type zone_factory: function returning a Zone
+ @param filename: The filename to emit when describing where an error
+ occurred; the default is ''.
+ @type filename: string
+ @param allow_include: is $INCLUDE allowed?
+ @type allow_include: bool
+ @param check_origin: should sanity checks of the origin node be done?
+ The default is True.
+ @type check_origin: bool
+ @raises dns.zone.NoSOA: No SOA RR was found at the zone origin
+ @raises dns.zone.NoNS: No NS RRset was found at the zone origin
+ @rtype: dns.zone.Zone object
+ """
+
+ # 'text' can also be a file, but we don't publish that fact
+ # since it's an implementation detail. The official file
+ # interface is from_file().
+
+ if filename is None:
+ filename = ''
+ tok = dns.tokenizer.Tokenizer(text, filename)
+ reader = _MasterReader(tok, origin, rdclass, relativize, zone_factory,
+ allow_include=allow_include,
+ check_origin=check_origin)
+ reader.read()
+ return reader.zone
+
+
+def from_file(f, origin=None, rdclass=dns.rdataclass.IN,
+ relativize=True, zone_factory=Zone, filename=None,
+ allow_include=True, check_origin=True):
+ """Read a master file and build a zone object.
+
+ @param f: file or string. If I{f} is a string, it is treated
+ as the name of a file to open.
+ @param origin: The origin of the zone; if not specified, the first
+ $ORIGIN statement in the master file will determine the origin of the
+ zone.
+ @type origin: dns.name.Name object or string
+ @param rdclass: The zone's rdata class; the default is class IN.
+ @type rdclass: int
+ @param relativize: should names be relativized? The default is True
+ @type relativize: bool
+ @param zone_factory: The zone factory to use
+ @type zone_factory: function returning a Zone
+ @param filename: The filename to emit when describing where an error
+ occurred; the default is '', or the value of I{f} if I{f} is a
+ string.
+ @type filename: string
+ @param allow_include: is $INCLUDE allowed?
+ @type allow_include: bool
+ @param check_origin: should sanity checks of the origin node be done?
+ The default is True.
+ @type check_origin: bool
+ @raises dns.zone.NoSOA: No SOA RR was found at the zone origin
+ @raises dns.zone.NoNS: No NS RRset was found at the zone origin
+ @rtype: dns.zone.Zone object
+ """
+
+ str_type = string_types
+ opts = 'rU'
+
+ if isinstance(f, str_type):
+ if filename is None:
+ filename = f
+ f = open(f, opts)
+ want_close = True
+ else:
+ if filename is None:
+ filename = ''
+ want_close = False
+
+ try:
+ z = from_text(f, origin, rdclass, relativize, zone_factory,
+ filename, allow_include, check_origin)
+ finally:
+ if want_close:
+ f.close()
+ return z
+
+
+def from_xfr(xfr, zone_factory=Zone, relativize=True, check_origin=True):
+ """Convert the output of a zone transfer generator into a zone object.
+
+ @param xfr: The xfr generator
+ @type xfr: generator of dns.message.Message objects
+ @param relativize: should names be relativized? The default is True.
+ It is essential that the relativize setting matches the one specified
+ to dns.query.xfr().
+ @type relativize: bool
+ @param check_origin: should sanity checks of the origin node be done?
+ The default is True.
+ @type check_origin: bool
+ @raises dns.zone.NoSOA: No SOA RR was found at the zone origin
+ @raises dns.zone.NoNS: No NS RRset was found at the zone origin
+ @rtype: dns.zone.Zone object
+ """
+
+ z = None
+ for r in xfr:
+ if z is None:
+ if relativize:
+ origin = r.origin
+ else:
+ origin = r.answer[0].name
+ rdclass = r.answer[0].rdclass
+ z = zone_factory(origin, rdclass, relativize=relativize)
+ for rrset in r.answer:
+ znode = z.nodes.get(rrset.name)
+ if not znode:
+ znode = z.node_factory()
+ z.nodes[rrset.name] = znode
+ zrds = znode.find_rdataset(rrset.rdclass, rrset.rdtype,
+ rrset.covers, True)
+ zrds.update_ttl(rrset.ttl)
+ for rd in rrset:
+ rd.choose_relativity(z.origin, relativize)
+ zrds.add(rd)
+ if check_origin:
+ z.check_origin()
+ return z
diff --git a/Contents/Libraries/Shared/fcache/cache.py b/Contents/Libraries/Shared/fcache/cache.py
index 3dc99ec71..695f916c3 100644
--- a/Contents/Libraries/Shared/fcache/cache.py
+++ b/Contents/Libraries/Shared/fcache/cache.py
@@ -5,10 +5,11 @@
import shutil
import tempfile
import traceback
+import hashlib
import appdirs
-from scandir import scandir
+from scandir import scandir, scandir_generic as _scandir_generic
try:
from collections.abc import MutableMapping
@@ -89,7 +90,7 @@ class FileCache(MutableMapping):
"""
def __init__(self, appname, flag='c', mode=0o666, keyencoding='utf-8',
- serialize=True, app_cache_dir=None):
+ serialize=True, app_cache_dir=None, key_file_ext=".txt"):
"""Initialize a :class:`FileCache` object."""
if not isinstance(flag, str):
raise TypeError("flag must be str not '{}'".format(type(flag)))
@@ -130,6 +131,7 @@ def __init__(self, appname, flag='c', mode=0o666, keyencoding='utf-8',
self._mode = mode
self._keyencoding = keyencoding
self._serialize = serialize
+ self.key_file_ext = key_file_ext
def _parse_appname(self, appname):
"""Splits an appname into the appname and subcache components."""
@@ -188,6 +190,11 @@ def sync(self):
except:
logger.error("Couldn't write content from %r to cache file: %r: %s", ekey, filename,
traceback.format_exc())
+ try:
+ self.__write_to_file(filename + self.key_file_ext, ekey)
+ except:
+ logger.error("Couldn't write content from %r to cache file: %r: %s", ekey, filename,
+ traceback.format_exc())
self._buffer.clear()
self._sync = False
@@ -196,8 +203,7 @@ def _closed(self, *args, **kwargs):
raise ValueError("invalid operation on closed cache")
def _encode_key(self, key):
- """Encode key using *hex_codec* for constructing a cache filename.
-
+ """
Keys are implicitly converted to :class:`bytes` if passed as
:class:`str`.
@@ -206,16 +212,15 @@ def _encode_key(self, key):
key = key.encode(self._keyencoding)
elif not isinstance(key, bytes):
raise TypeError("key must be bytes or str")
- return codecs.encode(key, 'hex_codec').decode(self._keyencoding)
+ return key.decode(self._keyencoding)
def _decode_key(self, key):
- """Decode key using hex_codec to retrieve the original key.
-
+ """
Keys are returned as :class:`str` if serialization is enabled.
Keys are returned as :class:`bytes` if serialization is disabled.
"""
- bkey = codecs.decode(key.encode(self._keyencoding), 'hex_codec')
+ bkey = key.encode(self._keyencoding)
return bkey.decode(self._keyencoding) if self._serialize else bkey
def _dumps(self, value):
@@ -226,17 +231,24 @@ def _loads(self, value):
def _key_to_filename(self, key):
"""Convert an encoded key to an absolute cache filename."""
- return os.path.join(self.cache_dir, key)
+ if isinstance(key, unicode):
+ key = key.encode(self._keyencoding)
+ return os.path.join(self.cache_dir, hashlib.md5(key).hexdigest())
def _filename_to_key(self, absfilename):
"""Convert an absolute cache filename to a key name."""
- return os.path.split(absfilename)[1]
+ hkey_hdr_fn = absfilename + self.key_file_ext
+ if os.path.isfile(hkey_hdr_fn):
+ with open(hkey_hdr_fn, 'rb') as f:
+ key = f.read()
+ return key.decode(self._keyencoding) if self._serialize else key
- def _all_filenames(self):
+ def _all_filenames(self, scandir_generic=True):
"""Return a list of absolute cache filenames"""
+ _scandir = _scandir_generic if scandir_generic else scandir
try:
- for entry in scandir(self.cache_dir):
- if entry.is_file(follow_symlinks=False):
+ for entry in _scandir(self.cache_dir):
+ if entry.is_file(follow_symlinks=False) and not entry.name.endswith(self.key_file_ext):
yield os.path.join(self.cache_dir, entry.name)
except (FileNotFoundError, OSError):
raise StopIteration
@@ -249,14 +261,17 @@ def _all_keys(self):
else:
return set(file_keys + list(self._buffer))
- def _write_to_file(self, filename, bytesvalue):
+ def __write_to_file(self, filename, value):
"""Write bytesvalue to filename."""
fh, tmp = tempfile.mkstemp()
with os.fdopen(fh, self._flag) as f:
- f.write(self._dumps(bytesvalue))
+ f.write(value)
rename(tmp, filename)
os.chmod(filename, self._mode)
+ def _write_to_file(self, filename, bytesvalue):
+ self.__write_to_file(filename, self._dumps(bytesvalue))
+
def _read_from_file(self, filename):
"""Read data from filename."""
try:
@@ -273,6 +288,7 @@ def __setitem__(self, key, value):
else:
filename = self._key_to_filename(ekey)
self._write_to_file(filename, value)
+ self.__write_to_file(filename + self.key_file_ext, ekey)
def __getitem__(self, key):
ekey = self._encode_key(key)
@@ -282,8 +298,9 @@ def __getitem__(self, key):
except KeyError:
pass
filename = self._key_to_filename(ekey)
- if filename not in self._all_filenames():
+ if not os.path.isfile(filename):
raise KeyError(key)
+
return self._read_from_file(filename)
def __delitem__(self, key):
@@ -300,6 +317,11 @@ def __delitem__(self, key):
except (IOError, OSError):
pass
+ try:
+ os.remove(filename + self.key_file_ext)
+ except (IOError, OSError):
+ pass
+
def __iter__(self):
for key in self._all_keys():
yield self._decode_key(key)
@@ -309,4 +331,10 @@ def __len__(self):
def __contains__(self, key):
ekey = self._encode_key(key)
- return ekey in self._all_keys()
+ if not self._sync:
+ try:
+ return ekey in self._buffer
+ except KeyError:
+ pass
+ filename = self._key_to_filename(ekey)
+ return os.path.isfile(filename)
diff --git a/Contents/Libraries/Shared/idna/__init__.py b/Contents/Libraries/Shared/idna/__init__.py
new file mode 100644
index 000000000..847bf9354
--- /dev/null
+++ b/Contents/Libraries/Shared/idna/__init__.py
@@ -0,0 +1,2 @@
+from .package_data import __version__
+from .core import *
diff --git a/Contents/Libraries/Shared/requests/packages/idna/codec.py b/Contents/Libraries/Shared/idna/codec.py
similarity index 100%
rename from Contents/Libraries/Shared/requests/packages/idna/codec.py
rename to Contents/Libraries/Shared/idna/codec.py
diff --git a/Contents/Libraries/Shared/requests/packages/idna/compat.py b/Contents/Libraries/Shared/idna/compat.py
similarity index 100%
rename from Contents/Libraries/Shared/requests/packages/idna/compat.py
rename to Contents/Libraries/Shared/idna/compat.py
diff --git a/Contents/Libraries/Shared/requests/packages/idna/core.py b/Contents/Libraries/Shared/idna/core.py
similarity index 87%
rename from Contents/Libraries/Shared/requests/packages/idna/core.py
rename to Contents/Libraries/Shared/idna/core.py
index ff3b38d64..090c2c18d 100644
--- a/Contents/Libraries/Shared/requests/packages/idna/core.py
+++ b/Contents/Libraries/Shared/idna/core.py
@@ -34,7 +34,11 @@ class InvalidCodepointContext(IDNAError):
def _combining_class(cp):
- return unicodedata.combining(unichr(cp))
+ v = unicodedata.combining(unichr(cp))
+ if v == 0:
+ if not unicodedata.name(unichr(cp)):
+ raise ValueError("Unknown character in unicodedata")
+ return v
def _is_script(cp, script):
return intranges_contain(ord(cp), idnadata.scripts[script])
@@ -71,7 +75,6 @@ def check_bidi(label, check_ltr=False):
raise IDNABidiError('Unknown directionality in label {0} at position {1}'.format(repr(label), idx))
if direction in ['R', 'AL', 'AN']:
bidi_label = True
- break
if not bidi_label and not check_ltr:
return True
@@ -156,9 +159,9 @@ def valid_contextj(label, pos):
ok = False
for i in range(pos-1, -1, -1):
joining_type = idnadata.joining_types.get(ord(label[i]))
- if joining_type == 'T':
+ if joining_type == ord('T'):
continue
- if joining_type in ['L', 'D']:
+ if joining_type in [ord('L'), ord('D')]:
ok = True
break
@@ -168,9 +171,9 @@ def valid_contextj(label, pos):
ok = False
for i in range(pos+1, len(label)):
joining_type = idnadata.joining_types.get(ord(label[i]))
- if joining_type == 'T':
+ if joining_type == ord('T'):
continue
- if joining_type in ['R', 'D']:
+ if joining_type in [ord('R'), ord('D')]:
ok = True
break
return ok
@@ -211,9 +214,9 @@ def valid_contexto(label, pos, exception=False):
for cp in label:
if cp == u'\u30fb':
continue
- if not _is_script(cp, 'Hiragana') and not _is_script(cp, 'Katakana') and not _is_script(cp, 'Han'):
- return False
- return True
+ if _is_script(cp, 'Hiragana') or _is_script(cp, 'Katakana') or _is_script(cp, 'Han'):
+ return True
+ return False
elif 0x660 <= cp_value <= 0x669:
for cp in label:
@@ -244,8 +247,13 @@ def check_label(label):
if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']):
continue
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']):
- if not valid_contextj(label, pos):
- raise InvalidCodepointContext('Joiner {0} not allowed at position {1} in {2}'.format(_unot(cp_value), pos+1, repr(label)))
+ try:
+ if not valid_contextj(label, pos):
+ raise InvalidCodepointContext('Joiner {0} not allowed at position {1} in {2}'.format(
+ _unot(cp_value), pos+1, repr(label)))
+ except ValueError:
+ raise IDNAError('Unknown codepoint adjacent to joiner {0} at position {1} in {2}'.format(
+ _unot(cp_value), pos+1, repr(label)))
elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']):
if not valid_contexto(label, pos):
raise InvalidCodepointContext('Codepoint {0} not allowed at position {1} in {2}'.format(_unot(cp_value), pos+1, repr(label)))
@@ -261,12 +269,12 @@ def alabel(label):
label = label.encode('ascii')
try:
ulabel(label)
- except:
+ except IDNAError:
raise IDNAError('The label {0} is not a valid A-label'.format(label))
if not valid_label_length(label):
raise IDNAError('Label too long')
return label
- except UnicodeError:
+ except UnicodeEncodeError:
pass
if not label:
@@ -288,7 +296,7 @@ def ulabel(label):
if not isinstance(label, (bytes, bytearray)):
try:
label = label.encode('ascii')
- except UnicodeError:
+ except UnicodeEncodeError:
check_label(label)
return label
@@ -317,10 +325,10 @@ def uts46_remap(domain, std3_rules=True, transitional=False):
replacement = uts46row[2] if len(uts46row) == 3 else None
if (status == "V" or
(status == "D" and not transitional) or
- (status == "3" and std3_rules and replacement is None)):
+ (status == "3" and not std3_rules and replacement is None)):
output += char
elif replacement is not None and (status == "M" or
- (status == "3" and std3_rules) or
+ (status == "3" and not std3_rules) or
(status == "D" and transitional)):
output += replacement
elif status != "I":
@@ -344,15 +352,17 @@ def encode(s, strict=False, uts46=False, std3_rules=False, transitional=False):
labels = s.split('.')
else:
labels = _unicode_dots_re.split(s)
- while labels and not labels[0]:
- del labels[0]
- if not labels:
+ if not labels or labels == ['']:
raise IDNAError('Empty domain')
if labels[-1] == '':
del labels[-1]
trailing_dot = True
for label in labels:
- result.append(alabel(label))
+ s = alabel(label)
+ if s:
+ result.append(s)
+ else:
+ raise IDNAError('Empty label')
if trailing_dot:
result.append(b'')
s = b'.'.join(result)
@@ -373,15 +383,17 @@ def decode(s, strict=False, uts46=False, std3_rules=False):
labels = _unicode_dots_re.split(s)
else:
labels = s.split(u'.')
- while labels and not labels[0]:
- del labels[0]
- if not labels:
+ if not labels or labels == ['']:
raise IDNAError('Empty domain')
if not labels[-1]:
del labels[-1]
trailing_dot = True
for label in labels:
- result.append(ulabel(label))
+ s = ulabel(label)
+ if s:
+ result.append(s)
+ else:
+ raise IDNAError('Empty label')
if trailing_dot:
result.append(u'')
return u'.'.join(result)
diff --git a/Contents/Libraries/Shared/idna/idnadata.py b/Contents/Libraries/Shared/idna/idnadata.py
new file mode 100644
index 000000000..17974e233
--- /dev/null
+++ b/Contents/Libraries/Shared/idna/idnadata.py
@@ -0,0 +1,1893 @@
+# This file is automatically generated by tools/idna-data
+
+__version__ = "10.0.0"
+scripts = {
+ 'Greek': (
+ 0x37000000374,
+ 0x37500000378,
+ 0x37a0000037e,
+ 0x37f00000380,
+ 0x38400000385,
+ 0x38600000387,
+ 0x3880000038b,
+ 0x38c0000038d,
+ 0x38e000003a2,
+ 0x3a3000003e2,
+ 0x3f000000400,
+ 0x1d2600001d2b,
+ 0x1d5d00001d62,
+ 0x1d6600001d6b,
+ 0x1dbf00001dc0,
+ 0x1f0000001f16,
+ 0x1f1800001f1e,
+ 0x1f2000001f46,
+ 0x1f4800001f4e,
+ 0x1f5000001f58,
+ 0x1f5900001f5a,
+ 0x1f5b00001f5c,
+ 0x1f5d00001f5e,
+ 0x1f5f00001f7e,
+ 0x1f8000001fb5,
+ 0x1fb600001fc5,
+ 0x1fc600001fd4,
+ 0x1fd600001fdc,
+ 0x1fdd00001ff0,
+ 0x1ff200001ff5,
+ 0x1ff600001fff,
+ 0x212600002127,
+ 0xab650000ab66,
+ 0x101400001018f,
+ 0x101a0000101a1,
+ 0x1d2000001d246,
+ ),
+ 'Han': (
+ 0x2e8000002e9a,
+ 0x2e9b00002ef4,
+ 0x2f0000002fd6,
+ 0x300500003006,
+ 0x300700003008,
+ 0x30210000302a,
+ 0x30380000303c,
+ 0x340000004db6,
+ 0x4e0000009feb,
+ 0xf9000000fa6e,
+ 0xfa700000fada,
+ 0x200000002a6d7,
+ 0x2a7000002b735,
+ 0x2b7400002b81e,
+ 0x2b8200002cea2,
+ 0x2ceb00002ebe1,
+ 0x2f8000002fa1e,
+ ),
+ 'Hebrew': (
+ 0x591000005c8,
+ 0x5d0000005eb,
+ 0x5f0000005f5,
+ 0xfb1d0000fb37,
+ 0xfb380000fb3d,
+ 0xfb3e0000fb3f,
+ 0xfb400000fb42,
+ 0xfb430000fb45,
+ 0xfb460000fb50,
+ ),
+ 'Hiragana': (
+ 0x304100003097,
+ 0x309d000030a0,
+ 0x1b0010001b11f,
+ 0x1f2000001f201,
+ ),
+ 'Katakana': (
+ 0x30a1000030fb,
+ 0x30fd00003100,
+ 0x31f000003200,
+ 0x32d0000032ff,
+ 0x330000003358,
+ 0xff660000ff70,
+ 0xff710000ff9e,
+ 0x1b0000001b001,
+ ),
+}
+joining_types = {
+ 0x600: 85,
+ 0x601: 85,
+ 0x602: 85,
+ 0x603: 85,
+ 0x604: 85,
+ 0x605: 85,
+ 0x608: 85,
+ 0x60b: 85,
+ 0x620: 68,
+ 0x621: 85,
+ 0x622: 82,
+ 0x623: 82,
+ 0x624: 82,
+ 0x625: 82,
+ 0x626: 68,
+ 0x627: 82,
+ 0x628: 68,
+ 0x629: 82,
+ 0x62a: 68,
+ 0x62b: 68,
+ 0x62c: 68,
+ 0x62d: 68,
+ 0x62e: 68,
+ 0x62f: 82,
+ 0x630: 82,
+ 0x631: 82,
+ 0x632: 82,
+ 0x633: 68,
+ 0x634: 68,
+ 0x635: 68,
+ 0x636: 68,
+ 0x637: 68,
+ 0x638: 68,
+ 0x639: 68,
+ 0x63a: 68,
+ 0x63b: 68,
+ 0x63c: 68,
+ 0x63d: 68,
+ 0x63e: 68,
+ 0x63f: 68,
+ 0x640: 67,
+ 0x641: 68,
+ 0x642: 68,
+ 0x643: 68,
+ 0x644: 68,
+ 0x645: 68,
+ 0x646: 68,
+ 0x647: 68,
+ 0x648: 82,
+ 0x649: 68,
+ 0x64a: 68,
+ 0x66e: 68,
+ 0x66f: 68,
+ 0x671: 82,
+ 0x672: 82,
+ 0x673: 82,
+ 0x674: 85,
+ 0x675: 82,
+ 0x676: 82,
+ 0x677: 82,
+ 0x678: 68,
+ 0x679: 68,
+ 0x67a: 68,
+ 0x67b: 68,
+ 0x67c: 68,
+ 0x67d: 68,
+ 0x67e: 68,
+ 0x67f: 68,
+ 0x680: 68,
+ 0x681: 68,
+ 0x682: 68,
+ 0x683: 68,
+ 0x684: 68,
+ 0x685: 68,
+ 0x686: 68,
+ 0x687: 68,
+ 0x688: 82,
+ 0x689: 82,
+ 0x68a: 82,
+ 0x68b: 82,
+ 0x68c: 82,
+ 0x68d: 82,
+ 0x68e: 82,
+ 0x68f: 82,
+ 0x690: 82,
+ 0x691: 82,
+ 0x692: 82,
+ 0x693: 82,
+ 0x694: 82,
+ 0x695: 82,
+ 0x696: 82,
+ 0x697: 82,
+ 0x698: 82,
+ 0x699: 82,
+ 0x69a: 68,
+ 0x69b: 68,
+ 0x69c: 68,
+ 0x69d: 68,
+ 0x69e: 68,
+ 0x69f: 68,
+ 0x6a0: 68,
+ 0x6a1: 68,
+ 0x6a2: 68,
+ 0x6a3: 68,
+ 0x6a4: 68,
+ 0x6a5: 68,
+ 0x6a6: 68,
+ 0x6a7: 68,
+ 0x6a8: 68,
+ 0x6a9: 68,
+ 0x6aa: 68,
+ 0x6ab: 68,
+ 0x6ac: 68,
+ 0x6ad: 68,
+ 0x6ae: 68,
+ 0x6af: 68,
+ 0x6b0: 68,
+ 0x6b1: 68,
+ 0x6b2: 68,
+ 0x6b3: 68,
+ 0x6b4: 68,
+ 0x6b5: 68,
+ 0x6b6: 68,
+ 0x6b7: 68,
+ 0x6b8: 68,
+ 0x6b9: 68,
+ 0x6ba: 68,
+ 0x6bb: 68,
+ 0x6bc: 68,
+ 0x6bd: 68,
+ 0x6be: 68,
+ 0x6bf: 68,
+ 0x6c0: 82,
+ 0x6c1: 68,
+ 0x6c2: 68,
+ 0x6c3: 82,
+ 0x6c4: 82,
+ 0x6c5: 82,
+ 0x6c6: 82,
+ 0x6c7: 82,
+ 0x6c8: 82,
+ 0x6c9: 82,
+ 0x6ca: 82,
+ 0x6cb: 82,
+ 0x6cc: 68,
+ 0x6cd: 82,
+ 0x6ce: 68,
+ 0x6cf: 82,
+ 0x6d0: 68,
+ 0x6d1: 68,
+ 0x6d2: 82,
+ 0x6d3: 82,
+ 0x6d5: 82,
+ 0x6dd: 85,
+ 0x6ee: 82,
+ 0x6ef: 82,
+ 0x6fa: 68,
+ 0x6fb: 68,
+ 0x6fc: 68,
+ 0x6ff: 68,
+ 0x710: 82,
+ 0x712: 68,
+ 0x713: 68,
+ 0x714: 68,
+ 0x715: 82,
+ 0x716: 82,
+ 0x717: 82,
+ 0x718: 82,
+ 0x719: 82,
+ 0x71a: 68,
+ 0x71b: 68,
+ 0x71c: 68,
+ 0x71d: 68,
+ 0x71e: 82,
+ 0x71f: 68,
+ 0x720: 68,
+ 0x721: 68,
+ 0x722: 68,
+ 0x723: 68,
+ 0x724: 68,
+ 0x725: 68,
+ 0x726: 68,
+ 0x727: 68,
+ 0x728: 82,
+ 0x729: 68,
+ 0x72a: 82,
+ 0x72b: 68,
+ 0x72c: 82,
+ 0x72d: 68,
+ 0x72e: 68,
+ 0x72f: 82,
+ 0x74d: 82,
+ 0x74e: 68,
+ 0x74f: 68,
+ 0x750: 68,
+ 0x751: 68,
+ 0x752: 68,
+ 0x753: 68,
+ 0x754: 68,
+ 0x755: 68,
+ 0x756: 68,
+ 0x757: 68,
+ 0x758: 68,
+ 0x759: 82,
+ 0x75a: 82,
+ 0x75b: 82,
+ 0x75c: 68,
+ 0x75d: 68,
+ 0x75e: 68,
+ 0x75f: 68,
+ 0x760: 68,
+ 0x761: 68,
+ 0x762: 68,
+ 0x763: 68,
+ 0x764: 68,
+ 0x765: 68,
+ 0x766: 68,
+ 0x767: 68,
+ 0x768: 68,
+ 0x769: 68,
+ 0x76a: 68,
+ 0x76b: 82,
+ 0x76c: 82,
+ 0x76d: 68,
+ 0x76e: 68,
+ 0x76f: 68,
+ 0x770: 68,
+ 0x771: 82,
+ 0x772: 68,
+ 0x773: 82,
+ 0x774: 82,
+ 0x775: 68,
+ 0x776: 68,
+ 0x777: 68,
+ 0x778: 82,
+ 0x779: 82,
+ 0x77a: 68,
+ 0x77b: 68,
+ 0x77c: 68,
+ 0x77d: 68,
+ 0x77e: 68,
+ 0x77f: 68,
+ 0x7ca: 68,
+ 0x7cb: 68,
+ 0x7cc: 68,
+ 0x7cd: 68,
+ 0x7ce: 68,
+ 0x7cf: 68,
+ 0x7d0: 68,
+ 0x7d1: 68,
+ 0x7d2: 68,
+ 0x7d3: 68,
+ 0x7d4: 68,
+ 0x7d5: 68,
+ 0x7d6: 68,
+ 0x7d7: 68,
+ 0x7d8: 68,
+ 0x7d9: 68,
+ 0x7da: 68,
+ 0x7db: 68,
+ 0x7dc: 68,
+ 0x7dd: 68,
+ 0x7de: 68,
+ 0x7df: 68,
+ 0x7e0: 68,
+ 0x7e1: 68,
+ 0x7e2: 68,
+ 0x7e3: 68,
+ 0x7e4: 68,
+ 0x7e5: 68,
+ 0x7e6: 68,
+ 0x7e7: 68,
+ 0x7e8: 68,
+ 0x7e9: 68,
+ 0x7ea: 68,
+ 0x7fa: 67,
+ 0x840: 82,
+ 0x841: 68,
+ 0x842: 68,
+ 0x843: 68,
+ 0x844: 68,
+ 0x845: 68,
+ 0x846: 82,
+ 0x847: 82,
+ 0x848: 68,
+ 0x849: 82,
+ 0x84a: 68,
+ 0x84b: 68,
+ 0x84c: 68,
+ 0x84d: 68,
+ 0x84e: 68,
+ 0x84f: 68,
+ 0x850: 68,
+ 0x851: 68,
+ 0x852: 68,
+ 0x853: 68,
+ 0x854: 82,
+ 0x855: 68,
+ 0x856: 85,
+ 0x857: 85,
+ 0x858: 85,
+ 0x860: 68,
+ 0x861: 85,
+ 0x862: 68,
+ 0x863: 68,
+ 0x864: 68,
+ 0x865: 68,
+ 0x866: 85,
+ 0x867: 82,
+ 0x868: 68,
+ 0x869: 82,
+ 0x86a: 82,
+ 0x8a0: 68,
+ 0x8a1: 68,
+ 0x8a2: 68,
+ 0x8a3: 68,
+ 0x8a4: 68,
+ 0x8a5: 68,
+ 0x8a6: 68,
+ 0x8a7: 68,
+ 0x8a8: 68,
+ 0x8a9: 68,
+ 0x8aa: 82,
+ 0x8ab: 82,
+ 0x8ac: 82,
+ 0x8ad: 85,
+ 0x8ae: 82,
+ 0x8af: 68,
+ 0x8b0: 68,
+ 0x8b1: 82,
+ 0x8b2: 82,
+ 0x8b3: 68,
+ 0x8b4: 68,
+ 0x8b6: 68,
+ 0x8b7: 68,
+ 0x8b8: 68,
+ 0x8b9: 82,
+ 0x8ba: 68,
+ 0x8bb: 68,
+ 0x8bc: 68,
+ 0x8bd: 68,
+ 0x8e2: 85,
+ 0x1806: 85,
+ 0x1807: 68,
+ 0x180a: 67,
+ 0x180e: 85,
+ 0x1820: 68,
+ 0x1821: 68,
+ 0x1822: 68,
+ 0x1823: 68,
+ 0x1824: 68,
+ 0x1825: 68,
+ 0x1826: 68,
+ 0x1827: 68,
+ 0x1828: 68,
+ 0x1829: 68,
+ 0x182a: 68,
+ 0x182b: 68,
+ 0x182c: 68,
+ 0x182d: 68,
+ 0x182e: 68,
+ 0x182f: 68,
+ 0x1830: 68,
+ 0x1831: 68,
+ 0x1832: 68,
+ 0x1833: 68,
+ 0x1834: 68,
+ 0x1835: 68,
+ 0x1836: 68,
+ 0x1837: 68,
+ 0x1838: 68,
+ 0x1839: 68,
+ 0x183a: 68,
+ 0x183b: 68,
+ 0x183c: 68,
+ 0x183d: 68,
+ 0x183e: 68,
+ 0x183f: 68,
+ 0x1840: 68,
+ 0x1841: 68,
+ 0x1842: 68,
+ 0x1843: 68,
+ 0x1844: 68,
+ 0x1845: 68,
+ 0x1846: 68,
+ 0x1847: 68,
+ 0x1848: 68,
+ 0x1849: 68,
+ 0x184a: 68,
+ 0x184b: 68,
+ 0x184c: 68,
+ 0x184d: 68,
+ 0x184e: 68,
+ 0x184f: 68,
+ 0x1850: 68,
+ 0x1851: 68,
+ 0x1852: 68,
+ 0x1853: 68,
+ 0x1854: 68,
+ 0x1855: 68,
+ 0x1856: 68,
+ 0x1857: 68,
+ 0x1858: 68,
+ 0x1859: 68,
+ 0x185a: 68,
+ 0x185b: 68,
+ 0x185c: 68,
+ 0x185d: 68,
+ 0x185e: 68,
+ 0x185f: 68,
+ 0x1860: 68,
+ 0x1861: 68,
+ 0x1862: 68,
+ 0x1863: 68,
+ 0x1864: 68,
+ 0x1865: 68,
+ 0x1866: 68,
+ 0x1867: 68,
+ 0x1868: 68,
+ 0x1869: 68,
+ 0x186a: 68,
+ 0x186b: 68,
+ 0x186c: 68,
+ 0x186d: 68,
+ 0x186e: 68,
+ 0x186f: 68,
+ 0x1870: 68,
+ 0x1871: 68,
+ 0x1872: 68,
+ 0x1873: 68,
+ 0x1874: 68,
+ 0x1875: 68,
+ 0x1876: 68,
+ 0x1877: 68,
+ 0x1880: 85,
+ 0x1881: 85,
+ 0x1882: 85,
+ 0x1883: 85,
+ 0x1884: 85,
+ 0x1885: 84,
+ 0x1886: 84,
+ 0x1887: 68,
+ 0x1888: 68,
+ 0x1889: 68,
+ 0x188a: 68,
+ 0x188b: 68,
+ 0x188c: 68,
+ 0x188d: 68,
+ 0x188e: 68,
+ 0x188f: 68,
+ 0x1890: 68,
+ 0x1891: 68,
+ 0x1892: 68,
+ 0x1893: 68,
+ 0x1894: 68,
+ 0x1895: 68,
+ 0x1896: 68,
+ 0x1897: 68,
+ 0x1898: 68,
+ 0x1899: 68,
+ 0x189a: 68,
+ 0x189b: 68,
+ 0x189c: 68,
+ 0x189d: 68,
+ 0x189e: 68,
+ 0x189f: 68,
+ 0x18a0: 68,
+ 0x18a1: 68,
+ 0x18a2: 68,
+ 0x18a3: 68,
+ 0x18a4: 68,
+ 0x18a5: 68,
+ 0x18a6: 68,
+ 0x18a7: 68,
+ 0x18a8: 68,
+ 0x18aa: 68,
+ 0x200c: 85,
+ 0x200d: 67,
+ 0x202f: 85,
+ 0x2066: 85,
+ 0x2067: 85,
+ 0x2068: 85,
+ 0x2069: 85,
+ 0xa840: 68,
+ 0xa841: 68,
+ 0xa842: 68,
+ 0xa843: 68,
+ 0xa844: 68,
+ 0xa845: 68,
+ 0xa846: 68,
+ 0xa847: 68,
+ 0xa848: 68,
+ 0xa849: 68,
+ 0xa84a: 68,
+ 0xa84b: 68,
+ 0xa84c: 68,
+ 0xa84d: 68,
+ 0xa84e: 68,
+ 0xa84f: 68,
+ 0xa850: 68,
+ 0xa851: 68,
+ 0xa852: 68,
+ 0xa853: 68,
+ 0xa854: 68,
+ 0xa855: 68,
+ 0xa856: 68,
+ 0xa857: 68,
+ 0xa858: 68,
+ 0xa859: 68,
+ 0xa85a: 68,
+ 0xa85b: 68,
+ 0xa85c: 68,
+ 0xa85d: 68,
+ 0xa85e: 68,
+ 0xa85f: 68,
+ 0xa860: 68,
+ 0xa861: 68,
+ 0xa862: 68,
+ 0xa863: 68,
+ 0xa864: 68,
+ 0xa865: 68,
+ 0xa866: 68,
+ 0xa867: 68,
+ 0xa868: 68,
+ 0xa869: 68,
+ 0xa86a: 68,
+ 0xa86b: 68,
+ 0xa86c: 68,
+ 0xa86d: 68,
+ 0xa86e: 68,
+ 0xa86f: 68,
+ 0xa870: 68,
+ 0xa871: 68,
+ 0xa872: 76,
+ 0xa873: 85,
+ 0x10ac0: 68,
+ 0x10ac1: 68,
+ 0x10ac2: 68,
+ 0x10ac3: 68,
+ 0x10ac4: 68,
+ 0x10ac5: 82,
+ 0x10ac6: 85,
+ 0x10ac7: 82,
+ 0x10ac8: 85,
+ 0x10ac9: 82,
+ 0x10aca: 82,
+ 0x10acb: 85,
+ 0x10acc: 85,
+ 0x10acd: 76,
+ 0x10ace: 82,
+ 0x10acf: 82,
+ 0x10ad0: 82,
+ 0x10ad1: 82,
+ 0x10ad2: 82,
+ 0x10ad3: 68,
+ 0x10ad4: 68,
+ 0x10ad5: 68,
+ 0x10ad6: 68,
+ 0x10ad7: 76,
+ 0x10ad8: 68,
+ 0x10ad9: 68,
+ 0x10ada: 68,
+ 0x10adb: 68,
+ 0x10adc: 68,
+ 0x10add: 82,
+ 0x10ade: 68,
+ 0x10adf: 68,
+ 0x10ae0: 68,
+ 0x10ae1: 82,
+ 0x10ae2: 85,
+ 0x10ae3: 85,
+ 0x10ae4: 82,
+ 0x10aeb: 68,
+ 0x10aec: 68,
+ 0x10aed: 68,
+ 0x10aee: 68,
+ 0x10aef: 82,
+ 0x10b80: 68,
+ 0x10b81: 82,
+ 0x10b82: 68,
+ 0x10b83: 82,
+ 0x10b84: 82,
+ 0x10b85: 82,
+ 0x10b86: 68,
+ 0x10b87: 68,
+ 0x10b88: 68,
+ 0x10b89: 82,
+ 0x10b8a: 68,
+ 0x10b8b: 68,
+ 0x10b8c: 82,
+ 0x10b8d: 68,
+ 0x10b8e: 82,
+ 0x10b8f: 82,
+ 0x10b90: 68,
+ 0x10b91: 82,
+ 0x10ba9: 82,
+ 0x10baa: 82,
+ 0x10bab: 82,
+ 0x10bac: 82,
+ 0x10bad: 68,
+ 0x10bae: 68,
+ 0x10baf: 85,
+ 0x1e900: 68,
+ 0x1e901: 68,
+ 0x1e902: 68,
+ 0x1e903: 68,
+ 0x1e904: 68,
+ 0x1e905: 68,
+ 0x1e906: 68,
+ 0x1e907: 68,
+ 0x1e908: 68,
+ 0x1e909: 68,
+ 0x1e90a: 68,
+ 0x1e90b: 68,
+ 0x1e90c: 68,
+ 0x1e90d: 68,
+ 0x1e90e: 68,
+ 0x1e90f: 68,
+ 0x1e910: 68,
+ 0x1e911: 68,
+ 0x1e912: 68,
+ 0x1e913: 68,
+ 0x1e914: 68,
+ 0x1e915: 68,
+ 0x1e916: 68,
+ 0x1e917: 68,
+ 0x1e918: 68,
+ 0x1e919: 68,
+ 0x1e91a: 68,
+ 0x1e91b: 68,
+ 0x1e91c: 68,
+ 0x1e91d: 68,
+ 0x1e91e: 68,
+ 0x1e91f: 68,
+ 0x1e920: 68,
+ 0x1e921: 68,
+ 0x1e922: 68,
+ 0x1e923: 68,
+ 0x1e924: 68,
+ 0x1e925: 68,
+ 0x1e926: 68,
+ 0x1e927: 68,
+ 0x1e928: 68,
+ 0x1e929: 68,
+ 0x1e92a: 68,
+ 0x1e92b: 68,
+ 0x1e92c: 68,
+ 0x1e92d: 68,
+ 0x1e92e: 68,
+ 0x1e92f: 68,
+ 0x1e930: 68,
+ 0x1e931: 68,
+ 0x1e932: 68,
+ 0x1e933: 68,
+ 0x1e934: 68,
+ 0x1e935: 68,
+ 0x1e936: 68,
+ 0x1e937: 68,
+ 0x1e938: 68,
+ 0x1e939: 68,
+ 0x1e93a: 68,
+ 0x1e93b: 68,
+ 0x1e93c: 68,
+ 0x1e93d: 68,
+ 0x1e93e: 68,
+ 0x1e93f: 68,
+ 0x1e940: 68,
+ 0x1e941: 68,
+ 0x1e942: 68,
+ 0x1e943: 68,
+}
+codepoint_classes = {
+ 'PVALID': (
+ 0x2d0000002e,
+ 0x300000003a,
+ 0x610000007b,
+ 0xdf000000f7,
+ 0xf800000100,
+ 0x10100000102,
+ 0x10300000104,
+ 0x10500000106,
+ 0x10700000108,
+ 0x1090000010a,
+ 0x10b0000010c,
+ 0x10d0000010e,
+ 0x10f00000110,
+ 0x11100000112,
+ 0x11300000114,
+ 0x11500000116,
+ 0x11700000118,
+ 0x1190000011a,
+ 0x11b0000011c,
+ 0x11d0000011e,
+ 0x11f00000120,
+ 0x12100000122,
+ 0x12300000124,
+ 0x12500000126,
+ 0x12700000128,
+ 0x1290000012a,
+ 0x12b0000012c,
+ 0x12d0000012e,
+ 0x12f00000130,
+ 0x13100000132,
+ 0x13500000136,
+ 0x13700000139,
+ 0x13a0000013b,
+ 0x13c0000013d,
+ 0x13e0000013f,
+ 0x14200000143,
+ 0x14400000145,
+ 0x14600000147,
+ 0x14800000149,
+ 0x14b0000014c,
+ 0x14d0000014e,
+ 0x14f00000150,
+ 0x15100000152,
+ 0x15300000154,
+ 0x15500000156,
+ 0x15700000158,
+ 0x1590000015a,
+ 0x15b0000015c,
+ 0x15d0000015e,
+ 0x15f00000160,
+ 0x16100000162,
+ 0x16300000164,
+ 0x16500000166,
+ 0x16700000168,
+ 0x1690000016a,
+ 0x16b0000016c,
+ 0x16d0000016e,
+ 0x16f00000170,
+ 0x17100000172,
+ 0x17300000174,
+ 0x17500000176,
+ 0x17700000178,
+ 0x17a0000017b,
+ 0x17c0000017d,
+ 0x17e0000017f,
+ 0x18000000181,
+ 0x18300000184,
+ 0x18500000186,
+ 0x18800000189,
+ 0x18c0000018e,
+ 0x19200000193,
+ 0x19500000196,
+ 0x1990000019c,
+ 0x19e0000019f,
+ 0x1a1000001a2,
+ 0x1a3000001a4,
+ 0x1a5000001a6,
+ 0x1a8000001a9,
+ 0x1aa000001ac,
+ 0x1ad000001ae,
+ 0x1b0000001b1,
+ 0x1b4000001b5,
+ 0x1b6000001b7,
+ 0x1b9000001bc,
+ 0x1bd000001c4,
+ 0x1ce000001cf,
+ 0x1d0000001d1,
+ 0x1d2000001d3,
+ 0x1d4000001d5,
+ 0x1d6000001d7,
+ 0x1d8000001d9,
+ 0x1da000001db,
+ 0x1dc000001de,
+ 0x1df000001e0,
+ 0x1e1000001e2,
+ 0x1e3000001e4,
+ 0x1e5000001e6,
+ 0x1e7000001e8,
+ 0x1e9000001ea,
+ 0x1eb000001ec,
+ 0x1ed000001ee,
+ 0x1ef000001f1,
+ 0x1f5000001f6,
+ 0x1f9000001fa,
+ 0x1fb000001fc,
+ 0x1fd000001fe,
+ 0x1ff00000200,
+ 0x20100000202,
+ 0x20300000204,
+ 0x20500000206,
+ 0x20700000208,
+ 0x2090000020a,
+ 0x20b0000020c,
+ 0x20d0000020e,
+ 0x20f00000210,
+ 0x21100000212,
+ 0x21300000214,
+ 0x21500000216,
+ 0x21700000218,
+ 0x2190000021a,
+ 0x21b0000021c,
+ 0x21d0000021e,
+ 0x21f00000220,
+ 0x22100000222,
+ 0x22300000224,
+ 0x22500000226,
+ 0x22700000228,
+ 0x2290000022a,
+ 0x22b0000022c,
+ 0x22d0000022e,
+ 0x22f00000230,
+ 0x23100000232,
+ 0x2330000023a,
+ 0x23c0000023d,
+ 0x23f00000241,
+ 0x24200000243,
+ 0x24700000248,
+ 0x2490000024a,
+ 0x24b0000024c,
+ 0x24d0000024e,
+ 0x24f000002b0,
+ 0x2b9000002c2,
+ 0x2c6000002d2,
+ 0x2ec000002ed,
+ 0x2ee000002ef,
+ 0x30000000340,
+ 0x34200000343,
+ 0x3460000034f,
+ 0x35000000370,
+ 0x37100000372,
+ 0x37300000374,
+ 0x37700000378,
+ 0x37b0000037e,
+ 0x39000000391,
+ 0x3ac000003cf,
+ 0x3d7000003d8,
+ 0x3d9000003da,
+ 0x3db000003dc,
+ 0x3dd000003de,
+ 0x3df000003e0,
+ 0x3e1000003e2,
+ 0x3e3000003e4,
+ 0x3e5000003e6,
+ 0x3e7000003e8,
+ 0x3e9000003ea,
+ 0x3eb000003ec,
+ 0x3ed000003ee,
+ 0x3ef000003f0,
+ 0x3f3000003f4,
+ 0x3f8000003f9,
+ 0x3fb000003fd,
+ 0x43000000460,
+ 0x46100000462,
+ 0x46300000464,
+ 0x46500000466,
+ 0x46700000468,
+ 0x4690000046a,
+ 0x46b0000046c,
+ 0x46d0000046e,
+ 0x46f00000470,
+ 0x47100000472,
+ 0x47300000474,
+ 0x47500000476,
+ 0x47700000478,
+ 0x4790000047a,
+ 0x47b0000047c,
+ 0x47d0000047e,
+ 0x47f00000480,
+ 0x48100000482,
+ 0x48300000488,
+ 0x48b0000048c,
+ 0x48d0000048e,
+ 0x48f00000490,
+ 0x49100000492,
+ 0x49300000494,
+ 0x49500000496,
+ 0x49700000498,
+ 0x4990000049a,
+ 0x49b0000049c,
+ 0x49d0000049e,
+ 0x49f000004a0,
+ 0x4a1000004a2,
+ 0x4a3000004a4,
+ 0x4a5000004a6,
+ 0x4a7000004a8,
+ 0x4a9000004aa,
+ 0x4ab000004ac,
+ 0x4ad000004ae,
+ 0x4af000004b0,
+ 0x4b1000004b2,
+ 0x4b3000004b4,
+ 0x4b5000004b6,
+ 0x4b7000004b8,
+ 0x4b9000004ba,
+ 0x4bb000004bc,
+ 0x4bd000004be,
+ 0x4bf000004c0,
+ 0x4c2000004c3,
+ 0x4c4000004c5,
+ 0x4c6000004c7,
+ 0x4c8000004c9,
+ 0x4ca000004cb,
+ 0x4cc000004cd,
+ 0x4ce000004d0,
+ 0x4d1000004d2,
+ 0x4d3000004d4,
+ 0x4d5000004d6,
+ 0x4d7000004d8,
+ 0x4d9000004da,
+ 0x4db000004dc,
+ 0x4dd000004de,
+ 0x4df000004e0,
+ 0x4e1000004e2,
+ 0x4e3000004e4,
+ 0x4e5000004e6,
+ 0x4e7000004e8,
+ 0x4e9000004ea,
+ 0x4eb000004ec,
+ 0x4ed000004ee,
+ 0x4ef000004f0,
+ 0x4f1000004f2,
+ 0x4f3000004f4,
+ 0x4f5000004f6,
+ 0x4f7000004f8,
+ 0x4f9000004fa,
+ 0x4fb000004fc,
+ 0x4fd000004fe,
+ 0x4ff00000500,
+ 0x50100000502,
+ 0x50300000504,
+ 0x50500000506,
+ 0x50700000508,
+ 0x5090000050a,
+ 0x50b0000050c,
+ 0x50d0000050e,
+ 0x50f00000510,
+ 0x51100000512,
+ 0x51300000514,
+ 0x51500000516,
+ 0x51700000518,
+ 0x5190000051a,
+ 0x51b0000051c,
+ 0x51d0000051e,
+ 0x51f00000520,
+ 0x52100000522,
+ 0x52300000524,
+ 0x52500000526,
+ 0x52700000528,
+ 0x5290000052a,
+ 0x52b0000052c,
+ 0x52d0000052e,
+ 0x52f00000530,
+ 0x5590000055a,
+ 0x56100000587,
+ 0x591000005be,
+ 0x5bf000005c0,
+ 0x5c1000005c3,
+ 0x5c4000005c6,
+ 0x5c7000005c8,
+ 0x5d0000005eb,
+ 0x5f0000005f3,
+ 0x6100000061b,
+ 0x62000000640,
+ 0x64100000660,
+ 0x66e00000675,
+ 0x679000006d4,
+ 0x6d5000006dd,
+ 0x6df000006e9,
+ 0x6ea000006f0,
+ 0x6fa00000700,
+ 0x7100000074b,
+ 0x74d000007b2,
+ 0x7c0000007f6,
+ 0x8000000082e,
+ 0x8400000085c,
+ 0x8600000086b,
+ 0x8a0000008b5,
+ 0x8b6000008be,
+ 0x8d4000008e2,
+ 0x8e300000958,
+ 0x96000000964,
+ 0x96600000970,
+ 0x97100000984,
+ 0x9850000098d,
+ 0x98f00000991,
+ 0x993000009a9,
+ 0x9aa000009b1,
+ 0x9b2000009b3,
+ 0x9b6000009ba,
+ 0x9bc000009c5,
+ 0x9c7000009c9,
+ 0x9cb000009cf,
+ 0x9d7000009d8,
+ 0x9e0000009e4,
+ 0x9e6000009f2,
+ 0x9fc000009fd,
+ 0xa0100000a04,
+ 0xa0500000a0b,
+ 0xa0f00000a11,
+ 0xa1300000a29,
+ 0xa2a00000a31,
+ 0xa3200000a33,
+ 0xa3500000a36,
+ 0xa3800000a3a,
+ 0xa3c00000a3d,
+ 0xa3e00000a43,
+ 0xa4700000a49,
+ 0xa4b00000a4e,
+ 0xa5100000a52,
+ 0xa5c00000a5d,
+ 0xa6600000a76,
+ 0xa8100000a84,
+ 0xa8500000a8e,
+ 0xa8f00000a92,
+ 0xa9300000aa9,
+ 0xaaa00000ab1,
+ 0xab200000ab4,
+ 0xab500000aba,
+ 0xabc00000ac6,
+ 0xac700000aca,
+ 0xacb00000ace,
+ 0xad000000ad1,
+ 0xae000000ae4,
+ 0xae600000af0,
+ 0xaf900000b00,
+ 0xb0100000b04,
+ 0xb0500000b0d,
+ 0xb0f00000b11,
+ 0xb1300000b29,
+ 0xb2a00000b31,
+ 0xb3200000b34,
+ 0xb3500000b3a,
+ 0xb3c00000b45,
+ 0xb4700000b49,
+ 0xb4b00000b4e,
+ 0xb5600000b58,
+ 0xb5f00000b64,
+ 0xb6600000b70,
+ 0xb7100000b72,
+ 0xb8200000b84,
+ 0xb8500000b8b,
+ 0xb8e00000b91,
+ 0xb9200000b96,
+ 0xb9900000b9b,
+ 0xb9c00000b9d,
+ 0xb9e00000ba0,
+ 0xba300000ba5,
+ 0xba800000bab,
+ 0xbae00000bba,
+ 0xbbe00000bc3,
+ 0xbc600000bc9,
+ 0xbca00000bce,
+ 0xbd000000bd1,
+ 0xbd700000bd8,
+ 0xbe600000bf0,
+ 0xc0000000c04,
+ 0xc0500000c0d,
+ 0xc0e00000c11,
+ 0xc1200000c29,
+ 0xc2a00000c3a,
+ 0xc3d00000c45,
+ 0xc4600000c49,
+ 0xc4a00000c4e,
+ 0xc5500000c57,
+ 0xc5800000c5b,
+ 0xc6000000c64,
+ 0xc6600000c70,
+ 0xc8000000c84,
+ 0xc8500000c8d,
+ 0xc8e00000c91,
+ 0xc9200000ca9,
+ 0xcaa00000cb4,
+ 0xcb500000cba,
+ 0xcbc00000cc5,
+ 0xcc600000cc9,
+ 0xcca00000cce,
+ 0xcd500000cd7,
+ 0xcde00000cdf,
+ 0xce000000ce4,
+ 0xce600000cf0,
+ 0xcf100000cf3,
+ 0xd0000000d04,
+ 0xd0500000d0d,
+ 0xd0e00000d11,
+ 0xd1200000d45,
+ 0xd4600000d49,
+ 0xd4a00000d4f,
+ 0xd5400000d58,
+ 0xd5f00000d64,
+ 0xd6600000d70,
+ 0xd7a00000d80,
+ 0xd8200000d84,
+ 0xd8500000d97,
+ 0xd9a00000db2,
+ 0xdb300000dbc,
+ 0xdbd00000dbe,
+ 0xdc000000dc7,
+ 0xdca00000dcb,
+ 0xdcf00000dd5,
+ 0xdd600000dd7,
+ 0xdd800000de0,
+ 0xde600000df0,
+ 0xdf200000df4,
+ 0xe0100000e33,
+ 0xe3400000e3b,
+ 0xe4000000e4f,
+ 0xe5000000e5a,
+ 0xe8100000e83,
+ 0xe8400000e85,
+ 0xe8700000e89,
+ 0xe8a00000e8b,
+ 0xe8d00000e8e,
+ 0xe9400000e98,
+ 0xe9900000ea0,
+ 0xea100000ea4,
+ 0xea500000ea6,
+ 0xea700000ea8,
+ 0xeaa00000eac,
+ 0xead00000eb3,
+ 0xeb400000eba,
+ 0xebb00000ebe,
+ 0xec000000ec5,
+ 0xec600000ec7,
+ 0xec800000ece,
+ 0xed000000eda,
+ 0xede00000ee0,
+ 0xf0000000f01,
+ 0xf0b00000f0c,
+ 0xf1800000f1a,
+ 0xf2000000f2a,
+ 0xf3500000f36,
+ 0xf3700000f38,
+ 0xf3900000f3a,
+ 0xf3e00000f43,
+ 0xf4400000f48,
+ 0xf4900000f4d,
+ 0xf4e00000f52,
+ 0xf5300000f57,
+ 0xf5800000f5c,
+ 0xf5d00000f69,
+ 0xf6a00000f6d,
+ 0xf7100000f73,
+ 0xf7400000f75,
+ 0xf7a00000f81,
+ 0xf8200000f85,
+ 0xf8600000f93,
+ 0xf9400000f98,
+ 0xf9900000f9d,
+ 0xf9e00000fa2,
+ 0xfa300000fa7,
+ 0xfa800000fac,
+ 0xfad00000fb9,
+ 0xfba00000fbd,
+ 0xfc600000fc7,
+ 0x10000000104a,
+ 0x10500000109e,
+ 0x10d0000010fb,
+ 0x10fd00001100,
+ 0x120000001249,
+ 0x124a0000124e,
+ 0x125000001257,
+ 0x125800001259,
+ 0x125a0000125e,
+ 0x126000001289,
+ 0x128a0000128e,
+ 0x1290000012b1,
+ 0x12b2000012b6,
+ 0x12b8000012bf,
+ 0x12c0000012c1,
+ 0x12c2000012c6,
+ 0x12c8000012d7,
+ 0x12d800001311,
+ 0x131200001316,
+ 0x13180000135b,
+ 0x135d00001360,
+ 0x138000001390,
+ 0x13a0000013f6,
+ 0x14010000166d,
+ 0x166f00001680,
+ 0x16810000169b,
+ 0x16a0000016eb,
+ 0x16f1000016f9,
+ 0x17000000170d,
+ 0x170e00001715,
+ 0x172000001735,
+ 0x174000001754,
+ 0x17600000176d,
+ 0x176e00001771,
+ 0x177200001774,
+ 0x1780000017b4,
+ 0x17b6000017d4,
+ 0x17d7000017d8,
+ 0x17dc000017de,
+ 0x17e0000017ea,
+ 0x18100000181a,
+ 0x182000001878,
+ 0x1880000018ab,
+ 0x18b0000018f6,
+ 0x19000000191f,
+ 0x19200000192c,
+ 0x19300000193c,
+ 0x19460000196e,
+ 0x197000001975,
+ 0x1980000019ac,
+ 0x19b0000019ca,
+ 0x19d0000019da,
+ 0x1a0000001a1c,
+ 0x1a2000001a5f,
+ 0x1a6000001a7d,
+ 0x1a7f00001a8a,
+ 0x1a9000001a9a,
+ 0x1aa700001aa8,
+ 0x1ab000001abe,
+ 0x1b0000001b4c,
+ 0x1b5000001b5a,
+ 0x1b6b00001b74,
+ 0x1b8000001bf4,
+ 0x1c0000001c38,
+ 0x1c4000001c4a,
+ 0x1c4d00001c7e,
+ 0x1cd000001cd3,
+ 0x1cd400001cfa,
+ 0x1d0000001d2c,
+ 0x1d2f00001d30,
+ 0x1d3b00001d3c,
+ 0x1d4e00001d4f,
+ 0x1d6b00001d78,
+ 0x1d7900001d9b,
+ 0x1dc000001dfa,
+ 0x1dfb00001e00,
+ 0x1e0100001e02,
+ 0x1e0300001e04,
+ 0x1e0500001e06,
+ 0x1e0700001e08,
+ 0x1e0900001e0a,
+ 0x1e0b00001e0c,
+ 0x1e0d00001e0e,
+ 0x1e0f00001e10,
+ 0x1e1100001e12,
+ 0x1e1300001e14,
+ 0x1e1500001e16,
+ 0x1e1700001e18,
+ 0x1e1900001e1a,
+ 0x1e1b00001e1c,
+ 0x1e1d00001e1e,
+ 0x1e1f00001e20,
+ 0x1e2100001e22,
+ 0x1e2300001e24,
+ 0x1e2500001e26,
+ 0x1e2700001e28,
+ 0x1e2900001e2a,
+ 0x1e2b00001e2c,
+ 0x1e2d00001e2e,
+ 0x1e2f00001e30,
+ 0x1e3100001e32,
+ 0x1e3300001e34,
+ 0x1e3500001e36,
+ 0x1e3700001e38,
+ 0x1e3900001e3a,
+ 0x1e3b00001e3c,
+ 0x1e3d00001e3e,
+ 0x1e3f00001e40,
+ 0x1e4100001e42,
+ 0x1e4300001e44,
+ 0x1e4500001e46,
+ 0x1e4700001e48,
+ 0x1e4900001e4a,
+ 0x1e4b00001e4c,
+ 0x1e4d00001e4e,
+ 0x1e4f00001e50,
+ 0x1e5100001e52,
+ 0x1e5300001e54,
+ 0x1e5500001e56,
+ 0x1e5700001e58,
+ 0x1e5900001e5a,
+ 0x1e5b00001e5c,
+ 0x1e5d00001e5e,
+ 0x1e5f00001e60,
+ 0x1e6100001e62,
+ 0x1e6300001e64,
+ 0x1e6500001e66,
+ 0x1e6700001e68,
+ 0x1e6900001e6a,
+ 0x1e6b00001e6c,
+ 0x1e6d00001e6e,
+ 0x1e6f00001e70,
+ 0x1e7100001e72,
+ 0x1e7300001e74,
+ 0x1e7500001e76,
+ 0x1e7700001e78,
+ 0x1e7900001e7a,
+ 0x1e7b00001e7c,
+ 0x1e7d00001e7e,
+ 0x1e7f00001e80,
+ 0x1e8100001e82,
+ 0x1e8300001e84,
+ 0x1e8500001e86,
+ 0x1e8700001e88,
+ 0x1e8900001e8a,
+ 0x1e8b00001e8c,
+ 0x1e8d00001e8e,
+ 0x1e8f00001e90,
+ 0x1e9100001e92,
+ 0x1e9300001e94,
+ 0x1e9500001e9a,
+ 0x1e9c00001e9e,
+ 0x1e9f00001ea0,
+ 0x1ea100001ea2,
+ 0x1ea300001ea4,
+ 0x1ea500001ea6,
+ 0x1ea700001ea8,
+ 0x1ea900001eaa,
+ 0x1eab00001eac,
+ 0x1ead00001eae,
+ 0x1eaf00001eb0,
+ 0x1eb100001eb2,
+ 0x1eb300001eb4,
+ 0x1eb500001eb6,
+ 0x1eb700001eb8,
+ 0x1eb900001eba,
+ 0x1ebb00001ebc,
+ 0x1ebd00001ebe,
+ 0x1ebf00001ec0,
+ 0x1ec100001ec2,
+ 0x1ec300001ec4,
+ 0x1ec500001ec6,
+ 0x1ec700001ec8,
+ 0x1ec900001eca,
+ 0x1ecb00001ecc,
+ 0x1ecd00001ece,
+ 0x1ecf00001ed0,
+ 0x1ed100001ed2,
+ 0x1ed300001ed4,
+ 0x1ed500001ed6,
+ 0x1ed700001ed8,
+ 0x1ed900001eda,
+ 0x1edb00001edc,
+ 0x1edd00001ede,
+ 0x1edf00001ee0,
+ 0x1ee100001ee2,
+ 0x1ee300001ee4,
+ 0x1ee500001ee6,
+ 0x1ee700001ee8,
+ 0x1ee900001eea,
+ 0x1eeb00001eec,
+ 0x1eed00001eee,
+ 0x1eef00001ef0,
+ 0x1ef100001ef2,
+ 0x1ef300001ef4,
+ 0x1ef500001ef6,
+ 0x1ef700001ef8,
+ 0x1ef900001efa,
+ 0x1efb00001efc,
+ 0x1efd00001efe,
+ 0x1eff00001f08,
+ 0x1f1000001f16,
+ 0x1f2000001f28,
+ 0x1f3000001f38,
+ 0x1f4000001f46,
+ 0x1f5000001f58,
+ 0x1f6000001f68,
+ 0x1f7000001f71,
+ 0x1f7200001f73,
+ 0x1f7400001f75,
+ 0x1f7600001f77,
+ 0x1f7800001f79,
+ 0x1f7a00001f7b,
+ 0x1f7c00001f7d,
+ 0x1fb000001fb2,
+ 0x1fb600001fb7,
+ 0x1fc600001fc7,
+ 0x1fd000001fd3,
+ 0x1fd600001fd8,
+ 0x1fe000001fe3,
+ 0x1fe400001fe8,
+ 0x1ff600001ff7,
+ 0x214e0000214f,
+ 0x218400002185,
+ 0x2c3000002c5f,
+ 0x2c6100002c62,
+ 0x2c6500002c67,
+ 0x2c6800002c69,
+ 0x2c6a00002c6b,
+ 0x2c6c00002c6d,
+ 0x2c7100002c72,
+ 0x2c7300002c75,
+ 0x2c7600002c7c,
+ 0x2c8100002c82,
+ 0x2c8300002c84,
+ 0x2c8500002c86,
+ 0x2c8700002c88,
+ 0x2c8900002c8a,
+ 0x2c8b00002c8c,
+ 0x2c8d00002c8e,
+ 0x2c8f00002c90,
+ 0x2c9100002c92,
+ 0x2c9300002c94,
+ 0x2c9500002c96,
+ 0x2c9700002c98,
+ 0x2c9900002c9a,
+ 0x2c9b00002c9c,
+ 0x2c9d00002c9e,
+ 0x2c9f00002ca0,
+ 0x2ca100002ca2,
+ 0x2ca300002ca4,
+ 0x2ca500002ca6,
+ 0x2ca700002ca8,
+ 0x2ca900002caa,
+ 0x2cab00002cac,
+ 0x2cad00002cae,
+ 0x2caf00002cb0,
+ 0x2cb100002cb2,
+ 0x2cb300002cb4,
+ 0x2cb500002cb6,
+ 0x2cb700002cb8,
+ 0x2cb900002cba,
+ 0x2cbb00002cbc,
+ 0x2cbd00002cbe,
+ 0x2cbf00002cc0,
+ 0x2cc100002cc2,
+ 0x2cc300002cc4,
+ 0x2cc500002cc6,
+ 0x2cc700002cc8,
+ 0x2cc900002cca,
+ 0x2ccb00002ccc,
+ 0x2ccd00002cce,
+ 0x2ccf00002cd0,
+ 0x2cd100002cd2,
+ 0x2cd300002cd4,
+ 0x2cd500002cd6,
+ 0x2cd700002cd8,
+ 0x2cd900002cda,
+ 0x2cdb00002cdc,
+ 0x2cdd00002cde,
+ 0x2cdf00002ce0,
+ 0x2ce100002ce2,
+ 0x2ce300002ce5,
+ 0x2cec00002ced,
+ 0x2cee00002cf2,
+ 0x2cf300002cf4,
+ 0x2d0000002d26,
+ 0x2d2700002d28,
+ 0x2d2d00002d2e,
+ 0x2d3000002d68,
+ 0x2d7f00002d97,
+ 0x2da000002da7,
+ 0x2da800002daf,
+ 0x2db000002db7,
+ 0x2db800002dbf,
+ 0x2dc000002dc7,
+ 0x2dc800002dcf,
+ 0x2dd000002dd7,
+ 0x2dd800002ddf,
+ 0x2de000002e00,
+ 0x2e2f00002e30,
+ 0x300500003008,
+ 0x302a0000302e,
+ 0x303c0000303d,
+ 0x304100003097,
+ 0x30990000309b,
+ 0x309d0000309f,
+ 0x30a1000030fb,
+ 0x30fc000030ff,
+ 0x31050000312f,
+ 0x31a0000031bb,
+ 0x31f000003200,
+ 0x340000004db6,
+ 0x4e0000009feb,
+ 0xa0000000a48d,
+ 0xa4d00000a4fe,
+ 0xa5000000a60d,
+ 0xa6100000a62c,
+ 0xa6410000a642,
+ 0xa6430000a644,
+ 0xa6450000a646,
+ 0xa6470000a648,
+ 0xa6490000a64a,
+ 0xa64b0000a64c,
+ 0xa64d0000a64e,
+ 0xa64f0000a650,
+ 0xa6510000a652,
+ 0xa6530000a654,
+ 0xa6550000a656,
+ 0xa6570000a658,
+ 0xa6590000a65a,
+ 0xa65b0000a65c,
+ 0xa65d0000a65e,
+ 0xa65f0000a660,
+ 0xa6610000a662,
+ 0xa6630000a664,
+ 0xa6650000a666,
+ 0xa6670000a668,
+ 0xa6690000a66a,
+ 0xa66b0000a66c,
+ 0xa66d0000a670,
+ 0xa6740000a67e,
+ 0xa67f0000a680,
+ 0xa6810000a682,
+ 0xa6830000a684,
+ 0xa6850000a686,
+ 0xa6870000a688,
+ 0xa6890000a68a,
+ 0xa68b0000a68c,
+ 0xa68d0000a68e,
+ 0xa68f0000a690,
+ 0xa6910000a692,
+ 0xa6930000a694,
+ 0xa6950000a696,
+ 0xa6970000a698,
+ 0xa6990000a69a,
+ 0xa69b0000a69c,
+ 0xa69e0000a6e6,
+ 0xa6f00000a6f2,
+ 0xa7170000a720,
+ 0xa7230000a724,
+ 0xa7250000a726,
+ 0xa7270000a728,
+ 0xa7290000a72a,
+ 0xa72b0000a72c,
+ 0xa72d0000a72e,
+ 0xa72f0000a732,
+ 0xa7330000a734,
+ 0xa7350000a736,
+ 0xa7370000a738,
+ 0xa7390000a73a,
+ 0xa73b0000a73c,
+ 0xa73d0000a73e,
+ 0xa73f0000a740,
+ 0xa7410000a742,
+ 0xa7430000a744,
+ 0xa7450000a746,
+ 0xa7470000a748,
+ 0xa7490000a74a,
+ 0xa74b0000a74c,
+ 0xa74d0000a74e,
+ 0xa74f0000a750,
+ 0xa7510000a752,
+ 0xa7530000a754,
+ 0xa7550000a756,
+ 0xa7570000a758,
+ 0xa7590000a75a,
+ 0xa75b0000a75c,
+ 0xa75d0000a75e,
+ 0xa75f0000a760,
+ 0xa7610000a762,
+ 0xa7630000a764,
+ 0xa7650000a766,
+ 0xa7670000a768,
+ 0xa7690000a76a,
+ 0xa76b0000a76c,
+ 0xa76d0000a76e,
+ 0xa76f0000a770,
+ 0xa7710000a779,
+ 0xa77a0000a77b,
+ 0xa77c0000a77d,
+ 0xa77f0000a780,
+ 0xa7810000a782,
+ 0xa7830000a784,
+ 0xa7850000a786,
+ 0xa7870000a789,
+ 0xa78c0000a78d,
+ 0xa78e0000a790,
+ 0xa7910000a792,
+ 0xa7930000a796,
+ 0xa7970000a798,
+ 0xa7990000a79a,
+ 0xa79b0000a79c,
+ 0xa79d0000a79e,
+ 0xa79f0000a7a0,
+ 0xa7a10000a7a2,
+ 0xa7a30000a7a4,
+ 0xa7a50000a7a6,
+ 0xa7a70000a7a8,
+ 0xa7a90000a7aa,
+ 0xa7b50000a7b6,
+ 0xa7b70000a7b8,
+ 0xa7f70000a7f8,
+ 0xa7fa0000a828,
+ 0xa8400000a874,
+ 0xa8800000a8c6,
+ 0xa8d00000a8da,
+ 0xa8e00000a8f8,
+ 0xa8fb0000a8fc,
+ 0xa8fd0000a8fe,
+ 0xa9000000a92e,
+ 0xa9300000a954,
+ 0xa9800000a9c1,
+ 0xa9cf0000a9da,
+ 0xa9e00000a9ff,
+ 0xaa000000aa37,
+ 0xaa400000aa4e,
+ 0xaa500000aa5a,
+ 0xaa600000aa77,
+ 0xaa7a0000aac3,
+ 0xaadb0000aade,
+ 0xaae00000aaf0,
+ 0xaaf20000aaf7,
+ 0xab010000ab07,
+ 0xab090000ab0f,
+ 0xab110000ab17,
+ 0xab200000ab27,
+ 0xab280000ab2f,
+ 0xab300000ab5b,
+ 0xab600000ab66,
+ 0xabc00000abeb,
+ 0xabec0000abee,
+ 0xabf00000abfa,
+ 0xac000000d7a4,
+ 0xfa0e0000fa10,
+ 0xfa110000fa12,
+ 0xfa130000fa15,
+ 0xfa1f0000fa20,
+ 0xfa210000fa22,
+ 0xfa230000fa25,
+ 0xfa270000fa2a,
+ 0xfb1e0000fb1f,
+ 0xfe200000fe30,
+ 0xfe730000fe74,
+ 0x100000001000c,
+ 0x1000d00010027,
+ 0x100280001003b,
+ 0x1003c0001003e,
+ 0x1003f0001004e,
+ 0x100500001005e,
+ 0x10080000100fb,
+ 0x101fd000101fe,
+ 0x102800001029d,
+ 0x102a0000102d1,
+ 0x102e0000102e1,
+ 0x1030000010320,
+ 0x1032d00010341,
+ 0x103420001034a,
+ 0x103500001037b,
+ 0x103800001039e,
+ 0x103a0000103c4,
+ 0x103c8000103d0,
+ 0x104280001049e,
+ 0x104a0000104aa,
+ 0x104d8000104fc,
+ 0x1050000010528,
+ 0x1053000010564,
+ 0x1060000010737,
+ 0x1074000010756,
+ 0x1076000010768,
+ 0x1080000010806,
+ 0x1080800010809,
+ 0x1080a00010836,
+ 0x1083700010839,
+ 0x1083c0001083d,
+ 0x1083f00010856,
+ 0x1086000010877,
+ 0x108800001089f,
+ 0x108e0000108f3,
+ 0x108f4000108f6,
+ 0x1090000010916,
+ 0x109200001093a,
+ 0x10980000109b8,
+ 0x109be000109c0,
+ 0x10a0000010a04,
+ 0x10a0500010a07,
+ 0x10a0c00010a14,
+ 0x10a1500010a18,
+ 0x10a1900010a34,
+ 0x10a3800010a3b,
+ 0x10a3f00010a40,
+ 0x10a6000010a7d,
+ 0x10a8000010a9d,
+ 0x10ac000010ac8,
+ 0x10ac900010ae7,
+ 0x10b0000010b36,
+ 0x10b4000010b56,
+ 0x10b6000010b73,
+ 0x10b8000010b92,
+ 0x10c0000010c49,
+ 0x10cc000010cf3,
+ 0x1100000011047,
+ 0x1106600011070,
+ 0x1107f000110bb,
+ 0x110d0000110e9,
+ 0x110f0000110fa,
+ 0x1110000011135,
+ 0x1113600011140,
+ 0x1115000011174,
+ 0x1117600011177,
+ 0x11180000111c5,
+ 0x111ca000111cd,
+ 0x111d0000111db,
+ 0x111dc000111dd,
+ 0x1120000011212,
+ 0x1121300011238,
+ 0x1123e0001123f,
+ 0x1128000011287,
+ 0x1128800011289,
+ 0x1128a0001128e,
+ 0x1128f0001129e,
+ 0x1129f000112a9,
+ 0x112b0000112eb,
+ 0x112f0000112fa,
+ 0x1130000011304,
+ 0x113050001130d,
+ 0x1130f00011311,
+ 0x1131300011329,
+ 0x1132a00011331,
+ 0x1133200011334,
+ 0x113350001133a,
+ 0x1133c00011345,
+ 0x1134700011349,
+ 0x1134b0001134e,
+ 0x1135000011351,
+ 0x1135700011358,
+ 0x1135d00011364,
+ 0x113660001136d,
+ 0x1137000011375,
+ 0x114000001144b,
+ 0x114500001145a,
+ 0x11480000114c6,
+ 0x114c7000114c8,
+ 0x114d0000114da,
+ 0x11580000115b6,
+ 0x115b8000115c1,
+ 0x115d8000115de,
+ 0x1160000011641,
+ 0x1164400011645,
+ 0x116500001165a,
+ 0x11680000116b8,
+ 0x116c0000116ca,
+ 0x117000001171a,
+ 0x1171d0001172c,
+ 0x117300001173a,
+ 0x118c0000118ea,
+ 0x118ff00011900,
+ 0x11a0000011a3f,
+ 0x11a4700011a48,
+ 0x11a5000011a84,
+ 0x11a8600011a9a,
+ 0x11ac000011af9,
+ 0x11c0000011c09,
+ 0x11c0a00011c37,
+ 0x11c3800011c41,
+ 0x11c5000011c5a,
+ 0x11c7200011c90,
+ 0x11c9200011ca8,
+ 0x11ca900011cb7,
+ 0x11d0000011d07,
+ 0x11d0800011d0a,
+ 0x11d0b00011d37,
+ 0x11d3a00011d3b,
+ 0x11d3c00011d3e,
+ 0x11d3f00011d48,
+ 0x11d5000011d5a,
+ 0x120000001239a,
+ 0x1248000012544,
+ 0x130000001342f,
+ 0x1440000014647,
+ 0x1680000016a39,
+ 0x16a4000016a5f,
+ 0x16a6000016a6a,
+ 0x16ad000016aee,
+ 0x16af000016af5,
+ 0x16b0000016b37,
+ 0x16b4000016b44,
+ 0x16b5000016b5a,
+ 0x16b6300016b78,
+ 0x16b7d00016b90,
+ 0x16f0000016f45,
+ 0x16f5000016f7f,
+ 0x16f8f00016fa0,
+ 0x16fe000016fe2,
+ 0x17000000187ed,
+ 0x1880000018af3,
+ 0x1b0000001b11f,
+ 0x1b1700001b2fc,
+ 0x1bc000001bc6b,
+ 0x1bc700001bc7d,
+ 0x1bc800001bc89,
+ 0x1bc900001bc9a,
+ 0x1bc9d0001bc9f,
+ 0x1da000001da37,
+ 0x1da3b0001da6d,
+ 0x1da750001da76,
+ 0x1da840001da85,
+ 0x1da9b0001daa0,
+ 0x1daa10001dab0,
+ 0x1e0000001e007,
+ 0x1e0080001e019,
+ 0x1e01b0001e022,
+ 0x1e0230001e025,
+ 0x1e0260001e02b,
+ 0x1e8000001e8c5,
+ 0x1e8d00001e8d7,
+ 0x1e9220001e94b,
+ 0x1e9500001e95a,
+ 0x200000002a6d7,
+ 0x2a7000002b735,
+ 0x2b7400002b81e,
+ 0x2b8200002cea2,
+ 0x2ceb00002ebe1,
+ ),
+ 'CONTEXTJ': (
+ 0x200c0000200e,
+ ),
+ 'CONTEXTO': (
+ 0xb7000000b8,
+ 0x37500000376,
+ 0x5f3000005f5,
+ 0x6600000066a,
+ 0x6f0000006fa,
+ 0x30fb000030fc,
+ ),
+}
diff --git a/Contents/Libraries/Shared/requests/packages/idna/intranges.py b/Contents/Libraries/Shared/idna/intranges.py
similarity index 76%
rename from Contents/Libraries/Shared/requests/packages/idna/intranges.py
rename to Contents/Libraries/Shared/idna/intranges.py
index ee8a175d6..fa8a73566 100644
--- a/Contents/Libraries/Shared/requests/packages/idna/intranges.py
+++ b/Contents/Libraries/Shared/idna/intranges.py
@@ -11,6 +11,8 @@ def intranges_from_list(list_):
"""Represent a list of integers as a sequence of ranges:
((start_0, end_0), (start_1, end_1), ...), such that the original
integers are exactly those x such that start_i <= x < end_i for some i.
+
+ Ranges are encoded as single integers (start << 32 | end), not as tuples.
"""
sorted_list = sorted(list_)
@@ -21,26 +23,31 @@ def intranges_from_list(list_):
if sorted_list[i] == sorted_list[i+1]-1:
continue
current_range = sorted_list[last_write+1:i+1]
- range_tuple = (current_range[0], current_range[-1] + 1)
- ranges.append(range_tuple)
+ ranges.append(_encode_range(current_range[0], current_range[-1] + 1))
last_write = i
return tuple(ranges)
+def _encode_range(start, end):
+ return (start << 32) | end
+
+def _decode_range(r):
+ return (r >> 32), (r & ((1 << 32) - 1))
+
def intranges_contain(int_, ranges):
"""Determine if `int_` falls into one of the ranges in `ranges`."""
- tuple_ = (int_, int_)
+ tuple_ = _encode_range(int_, 0)
pos = bisect.bisect_left(ranges, tuple_)
# we could be immediately ahead of a tuple (start, end)
# with start < int_ <= end
if pos > 0:
- left, right = ranges[pos-1]
+ left, right = _decode_range(ranges[pos-1])
if left <= int_ < right:
return True
# or we could be immediately behind a tuple (int_, end)
if pos < len(ranges):
- left, _ = ranges[pos]
+ left, _ = _decode_range(ranges[pos])
if left == int_:
return True
return False
diff --git a/Contents/Libraries/Shared/idna/package_data.py b/Contents/Libraries/Shared/idna/package_data.py
new file mode 100644
index 000000000..39c192bae
--- /dev/null
+++ b/Contents/Libraries/Shared/idna/package_data.py
@@ -0,0 +1,2 @@
+__version__ = '2.7'
+
diff --git a/Contents/Libraries/Shared/requests/packages/idna/uts46data.py b/Contents/Libraries/Shared/idna/uts46data.py
similarity index 92%
rename from Contents/Libraries/Shared/requests/packages/idna/uts46data.py
rename to Contents/Libraries/Shared/idna/uts46data.py
index 48da8408f..79731cb9e 100644
--- a/Contents/Libraries/Shared/requests/packages/idna/uts46data.py
+++ b/Contents/Libraries/Shared/idna/uts46data.py
@@ -1,9 +1,10 @@
-# This file is automatically generated by tools/build-uts46data.py
+# This file is automatically generated by tools/idna-data
# vim: set fileencoding=utf-8 :
"""IDNA Mapping Table from UTS46."""
+__version__ = "10.0.0"
def _seg_0():
return [
(0x0, '3'),
@@ -634,7 +635,8 @@ def _seg_6():
(0x37A, '3', u' ι'),
(0x37B, 'V'),
(0x37E, '3', u';'),
- (0x37F, 'X'),
+ (0x37F, 'M', u'ϳ'),
+ (0x380, 'X'),
(0x384, '3', u' ́'),
(0x385, '3', u' ̈́'),
(0x386, 'M', u'ά'),
@@ -729,11 +731,11 @@ def _seg_6():
(0x400, 'M', u'ѐ'),
(0x401, 'M', u'ё'),
(0x402, 'M', u'ђ'),
- (0x403, 'M', u'ѓ'),
]
def _seg_7():
return [
+ (0x403, 'M', u'ѓ'),
(0x404, 'M', u'є'),
(0x405, 'M', u'ѕ'),
(0x406, 'M', u'і'),
@@ -833,11 +835,11 @@ def _seg_7():
(0x49B, 'V'),
(0x49C, 'M', u'ҝ'),
(0x49D, 'V'),
- (0x49E, 'M', u'ҟ'),
]
def _seg_8():
return [
+ (0x49E, 'M', u'ҟ'),
(0x49F, 'V'),
(0x4A0, 'M', u'ҡ'),
(0x4A1, 'V'),
@@ -937,11 +939,11 @@ def _seg_8():
(0x500, 'M', u'ԁ'),
(0x501, 'V'),
(0x502, 'M', u'ԃ'),
- (0x503, 'V'),
]
def _seg_9():
return [
+ (0x503, 'V'),
(0x504, 'M', u'ԅ'),
(0x505, 'V'),
(0x506, 'M', u'ԇ'),
@@ -978,7 +980,15 @@ def _seg_9():
(0x525, 'V'),
(0x526, 'M', u'ԧ'),
(0x527, 'V'),
- (0x528, 'X'),
+ (0x528, 'M', u'ԩ'),
+ (0x529, 'V'),
+ (0x52A, 'M', u'ԫ'),
+ (0x52B, 'V'),
+ (0x52C, 'M', u'ԭ'),
+ (0x52D, 'V'),
+ (0x52E, 'M', u'ԯ'),
+ (0x52F, 'V'),
+ (0x530, 'X'),
(0x531, 'M', u'ա'),
(0x532, 'M', u'բ'),
(0x533, 'M', u'գ'),
@@ -1025,7 +1035,7 @@ def _seg_9():
(0x588, 'X'),
(0x589, 'V'),
(0x58B, 'X'),
- (0x58F, 'V'),
+ (0x58D, 'V'),
(0x590, 'X'),
(0x591, 'V'),
(0x5C8, 'X'),
@@ -1033,6 +1043,10 @@ def _seg_9():
(0x5EB, 'X'),
(0x5F0, 'V'),
(0x5F5, 'X'),
+ ]
+
+def _seg_10():
+ return [
(0x606, 'V'),
(0x61C, 'X'),
(0x61E, 'V'),
@@ -1042,10 +1056,6 @@ def _seg_9():
(0x678, 'M', u'يٴ'),
(0x679, 'V'),
(0x6DD, 'X'),
- ]
-
-def _seg_10():
- return [
(0x6DE, 'V'),
(0x70E, 'X'),
(0x710, 'V'),
@@ -1062,13 +1072,15 @@ def _seg_10():
(0x85C, 'X'),
(0x85E, 'V'),
(0x85F, 'X'),
+ (0x860, 'V'),
+ (0x86B, 'X'),
(0x8A0, 'V'),
- (0x8A1, 'X'),
- (0x8A2, 'V'),
- (0x8AD, 'X'),
- (0x8E4, 'V'),
- (0x8FF, 'X'),
- (0x900, 'V'),
+ (0x8B5, 'X'),
+ (0x8B6, 'V'),
+ (0x8BE, 'X'),
+ (0x8D4, 'V'),
+ (0x8E2, 'X'),
+ (0x8E3, 'V'),
(0x958, 'M', u'क़'),
(0x959, 'M', u'ख़'),
(0x95A, 'M', u'ग़'),
@@ -1078,10 +1090,6 @@ def _seg_10():
(0x95E, 'M', u'फ़'),
(0x95F, 'M', u'य़'),
(0x960, 'V'),
- (0x978, 'X'),
- (0x979, 'V'),
- (0x980, 'X'),
- (0x981, 'V'),
(0x984, 'X'),
(0x985, 'V'),
(0x98D, 'X'),
@@ -1110,7 +1118,7 @@ def _seg_10():
(0x9E0, 'V'),
(0x9E4, 'X'),
(0x9E6, 'V'),
- (0x9FC, 'X'),
+ (0x9FE, 'X'),
(0xA01, 'V'),
(0xA04, 'X'),
(0xA05, 'V'),
@@ -1139,6 +1147,10 @@ def _seg_10():
(0xA4E, 'X'),
(0xA51, 'V'),
(0xA52, 'X'),
+ ]
+
+def _seg_11():
+ return [
(0xA59, 'M', u'ਖ਼'),
(0xA5A, 'M', u'ਗ਼'),
(0xA5B, 'M', u'ਜ਼'),
@@ -1146,10 +1158,6 @@ def _seg_10():
(0xA5D, 'X'),
(0xA5E, 'M', u'ਫ਼'),
(0xA5F, 'X'),
- ]
-
-def _seg_11():
- return [
(0xA66, 'V'),
(0xA76, 'X'),
(0xA81, 'V'),
@@ -1178,6 +1186,8 @@ def _seg_11():
(0xAE4, 'X'),
(0xAE6, 'V'),
(0xAF2, 'X'),
+ (0xAF9, 'V'),
+ (0xB00, 'X'),
(0xB01, 'V'),
(0xB04, 'X'),
(0xB05, 'V'),
@@ -1239,8 +1249,12 @@ def _seg_11():
(0xBD8, 'X'),
(0xBE6, 'V'),
(0xBFB, 'X'),
- (0xC01, 'V'),
+ (0xC00, 'V'),
(0xC04, 'X'),
+ ]
+
+def _seg_12():
+ return [
(0xC05, 'V'),
(0xC0D, 'X'),
(0xC0E, 'V'),
@@ -1248,12 +1262,6 @@ def _seg_11():
(0xC12, 'V'),
(0xC29, 'X'),
(0xC2A, 'V'),
- (0xC34, 'X'),
- (0xC35, 'V'),
- ]
-
-def _seg_12():
- return [
(0xC3A, 'X'),
(0xC3D, 'V'),
(0xC45, 'X'),
@@ -1264,14 +1272,12 @@ def _seg_12():
(0xC55, 'V'),
(0xC57, 'X'),
(0xC58, 'V'),
- (0xC5A, 'X'),
+ (0xC5B, 'X'),
(0xC60, 'V'),
(0xC64, 'X'),
(0xC66, 'V'),
(0xC70, 'X'),
(0xC78, 'V'),
- (0xC80, 'X'),
- (0xC82, 'V'),
(0xC84, 'X'),
(0xC85, 'V'),
(0xC8D, 'X'),
@@ -1299,27 +1305,21 @@ def _seg_12():
(0xCF0, 'X'),
(0xCF1, 'V'),
(0xCF3, 'X'),
- (0xD02, 'V'),
+ (0xD00, 'V'),
(0xD04, 'X'),
(0xD05, 'V'),
(0xD0D, 'X'),
(0xD0E, 'V'),
(0xD11, 'X'),
(0xD12, 'V'),
- (0xD3B, 'X'),
- (0xD3D, 'V'),
(0xD45, 'X'),
(0xD46, 'V'),
(0xD49, 'X'),
(0xD4A, 'V'),
- (0xD4F, 'X'),
- (0xD57, 'V'),
- (0xD58, 'X'),
- (0xD60, 'V'),
+ (0xD50, 'X'),
+ (0xD54, 'V'),
(0xD64, 'X'),
(0xD66, 'V'),
- (0xD76, 'X'),
- (0xD79, 'V'),
(0xD80, 'X'),
(0xD82, 'V'),
(0xD84, 'X'),
@@ -1341,6 +1341,8 @@ def _seg_12():
(0xDD7, 'X'),
(0xDD8, 'V'),
(0xDE0, 'X'),
+ (0xDE6, 'V'),
+ (0xDF0, 'X'),
(0xDF2, 'V'),
(0xDF5, 'X'),
(0xE01, 'V'),
@@ -1353,11 +1355,11 @@ def _seg_12():
(0xE83, 'X'),
(0xE84, 'V'),
(0xE85, 'X'),
- (0xE87, 'V'),
]
def _seg_13():
return [
+ (0xE87, 'V'),
(0xE89, 'X'),
(0xE8A, 'V'),
(0xE8B, 'X'),
@@ -1457,11 +1459,11 @@ def _seg_13():
(0x124E, 'X'),
(0x1250, 'V'),
(0x1257, 'X'),
- (0x1258, 'V'),
]
def _seg_14():
return [
+ (0x1258, 'V'),
(0x1259, 'X'),
(0x125A, 'V'),
(0x125E, 'X'),
@@ -1492,13 +1494,20 @@ def _seg_14():
(0x1380, 'V'),
(0x139A, 'X'),
(0x13A0, 'V'),
- (0x13F5, 'X'),
+ (0x13F6, 'X'),
+ (0x13F8, 'M', u'Ᏸ'),
+ (0x13F9, 'M', u'Ᏹ'),
+ (0x13FA, 'M', u'Ᏺ'),
+ (0x13FB, 'M', u'Ᏻ'),
+ (0x13FC, 'M', u'Ᏼ'),
+ (0x13FD, 'M', u'Ᏽ'),
+ (0x13FE, 'X'),
(0x1400, 'V'),
(0x1680, 'X'),
(0x1681, 'V'),
(0x169D, 'X'),
(0x16A0, 'V'),
- (0x16F1, 'X'),
+ (0x16F9, 'X'),
(0x1700, 'V'),
(0x170D, 'X'),
(0x170E, 'V'),
@@ -1535,7 +1544,7 @@ def _seg_14():
(0x18B0, 'V'),
(0x18F6, 'X'),
(0x1900, 'V'),
- (0x191D, 'X'),
+ (0x191F, 'X'),
(0x1920, 'V'),
(0x192C, 'X'),
(0x1930, 'V'),
@@ -1554,6 +1563,10 @@ def _seg_14():
(0x19DB, 'X'),
(0x19DE, 'V'),
(0x1A1C, 'X'),
+ ]
+
+def _seg_15():
+ return [
(0x1A1E, 'V'),
(0x1A5F, 'X'),
(0x1A60, 'V'),
@@ -1562,12 +1575,10 @@ def _seg_14():
(0x1A8A, 'X'),
(0x1A90, 'V'),
(0x1A9A, 'X'),
- ]
-
-def _seg_15():
- return [
(0x1AA0, 'V'),
(0x1AAE, 'X'),
+ (0x1AB0, 'V'),
+ (0x1ABF, 'X'),
(0x1B00, 'V'),
(0x1B4C, 'X'),
(0x1B50, 'V'),
@@ -1579,11 +1590,19 @@ def _seg_15():
(0x1C3B, 'V'),
(0x1C4A, 'X'),
(0x1C4D, 'V'),
- (0x1C80, 'X'),
+ (0x1C80, 'M', u'в'),
+ (0x1C81, 'M', u'д'),
+ (0x1C82, 'M', u'о'),
+ (0x1C83, 'M', u'с'),
+ (0x1C84, 'M', u'т'),
+ (0x1C86, 'M', u'ъ'),
+ (0x1C87, 'M', u'ѣ'),
+ (0x1C88, 'M', u'ꙋ'),
+ (0x1C89, 'X'),
(0x1CC0, 'V'),
(0x1CC8, 'X'),
(0x1CD0, 'V'),
- (0x1CF7, 'X'),
+ (0x1CFA, 'X'),
(0x1D00, 'V'),
(0x1D2C, 'M', u'a'),
(0x1D2D, 'M', u'æ'),
@@ -1648,6 +1667,10 @@ def _seg_15():
(0x1D68, 'M', u'ρ'),
(0x1D69, 'M', u'φ'),
(0x1D6A, 'M', u'χ'),
+ ]
+
+def _seg_16():
+ return [
(0x1D6B, 'V'),
(0x1D78, 'M', u'н'),
(0x1D79, 'V'),
@@ -1666,10 +1689,6 @@ def _seg_15():
(0x1DA7, 'M', u'ᵻ'),
(0x1DA8, 'M', u'ʝ'),
(0x1DA9, 'M', u'ɭ'),
- ]
-
-def _seg_16():
- return [
(0x1DAA, 'M', u'ᶅ'),
(0x1DAB, 'M', u'ʟ'),
(0x1DAC, 'M', u'ɱ'),
@@ -1693,8 +1712,8 @@ def _seg_16():
(0x1DBE, 'M', u'ʒ'),
(0x1DBF, 'M', u'θ'),
(0x1DC0, 'V'),
- (0x1DE7, 'X'),
- (0x1DFC, 'V'),
+ (0x1DFA, 'X'),
+ (0x1DFB, 'V'),
(0x1E00, 'M', u'ḁ'),
(0x1E01, 'V'),
(0x1E02, 'M', u'ḃ'),
@@ -1752,6 +1771,10 @@ def _seg_16():
(0x1E36, 'M', u'ḷ'),
(0x1E37, 'V'),
(0x1E38, 'M', u'ḹ'),
+ ]
+
+def _seg_17():
+ return [
(0x1E39, 'V'),
(0x1E3A, 'M', u'ḻ'),
(0x1E3B, 'V'),
@@ -1770,10 +1793,6 @@ def _seg_16():
(0x1E48, 'M', u'ṉ'),
(0x1E49, 'V'),
(0x1E4A, 'M', u'ṋ'),
- ]
-
-def _seg_17():
- return [
(0x1E4B, 'V'),
(0x1E4C, 'M', u'ṍ'),
(0x1E4D, 'V'),
@@ -1856,6 +1875,10 @@ def _seg_17():
(0x1E9F, 'V'),
(0x1EA0, 'M', u'ạ'),
(0x1EA1, 'V'),
+ ]
+
+def _seg_18():
+ return [
(0x1EA2, 'M', u'ả'),
(0x1EA3, 'V'),
(0x1EA4, 'M', u'ấ'),
@@ -1874,10 +1897,6 @@ def _seg_17():
(0x1EB1, 'V'),
(0x1EB2, 'M', u'ẳ'),
(0x1EB3, 'V'),
- ]
-
-def _seg_18():
- return [
(0x1EB4, 'M', u'ẵ'),
(0x1EB5, 'V'),
(0x1EB6, 'M', u'ặ'),
@@ -1960,6 +1979,10 @@ def _seg_18():
(0x1F0B, 'M', u'ἃ'),
(0x1F0C, 'M', u'ἄ'),
(0x1F0D, 'M', u'ἅ'),
+ ]
+
+def _seg_19():
+ return [
(0x1F0E, 'M', u'ἆ'),
(0x1F0F, 'M', u'ἇ'),
(0x1F10, 'V'),
@@ -1978,10 +2001,6 @@ def _seg_18():
(0x1F2B, 'M', u'ἣ'),
(0x1F2C, 'M', u'ἤ'),
(0x1F2D, 'M', u'ἥ'),
- ]
-
-def _seg_19():
- return [
(0x1F2E, 'M', u'ἦ'),
(0x1F2F, 'M', u'ἧ'),
(0x1F30, 'V'),
@@ -2064,6 +2083,10 @@ def _seg_19():
(0x1F9A, 'M', u'ἢι'),
(0x1F9B, 'M', u'ἣι'),
(0x1F9C, 'M', u'ἤι'),
+ ]
+
+def _seg_20():
+ return [
(0x1F9D, 'M', u'ἥι'),
(0x1F9E, 'M', u'ἦι'),
(0x1F9F, 'M', u'ἧι'),
@@ -2082,10 +2105,6 @@ def _seg_19():
(0x1FAC, 'M', u'ὤι'),
(0x1FAD, 'M', u'ὥι'),
(0x1FAE, 'M', u'ὦι'),
- ]
-
-def _seg_20():
- return [
(0x1FAF, 'M', u'ὧι'),
(0x1FB0, 'V'),
(0x1FB2, 'M', u'ὰι'),
@@ -2168,6 +2187,10 @@ def _seg_20():
(0x2024, 'X'),
(0x2027, 'V'),
(0x2028, 'X'),
+ ]
+
+def _seg_21():
+ return [
(0x202F, '3', u' '),
(0x2030, 'V'),
(0x2033, 'M', u'′′'),
@@ -2186,10 +2209,6 @@ def _seg_20():
(0x204A, 'V'),
(0x2057, 'M', u'′′′′'),
(0x2058, 'V'),
- ]
-
-def _seg_21():
- return [
(0x205F, '3', u' '),
(0x2060, 'I'),
(0x2061, 'X'),
@@ -2243,7 +2262,7 @@ def _seg_21():
(0x20A0, 'V'),
(0x20A8, 'M', u'rs'),
(0x20A9, 'V'),
- (0x20BB, 'X'),
+ (0x20C0, 'X'),
(0x20D0, 'V'),
(0x20F1, 'X'),
(0x2100, '3', u'a/c'),
@@ -2272,6 +2291,10 @@ def _seg_21():
(0x2120, 'M', u'sm'),
(0x2121, 'M', u'tel'),
(0x2122, 'M', u'tm'),
+ ]
+
+def _seg_22():
+ return [
(0x2123, 'V'),
(0x2124, 'M', u'z'),
(0x2125, 'V'),
@@ -2290,10 +2313,6 @@ def _seg_21():
(0x2133, 'M', u'm'),
(0x2134, 'M', u'o'),
(0x2135, 'M', u'א'),
- ]
-
-def _seg_22():
- return [
(0x2136, 'M', u'ב'),
(0x2137, 'M', u'ג'),
(0x2138, 'M', u'ד'),
@@ -2362,7 +2381,8 @@ def _seg_22():
(0x2183, 'X'),
(0x2184, 'V'),
(0x2189, 'M', u'0⁄3'),
- (0x218A, 'X'),
+ (0x218A, 'V'),
+ (0x218C, 'X'),
(0x2190, 'V'),
(0x222C, 'M', u'∫∫'),
(0x222D, 'M', u'∫∫∫'),
@@ -2375,10 +2395,12 @@ def _seg_22():
(0x226E, '3'),
(0x2270, 'V'),
(0x2329, 'M', u'〈'),
+ ]
+
+def _seg_23():
+ return [
(0x232A, 'M', u'〉'),
(0x232B, 'V'),
- (0x23F4, 'X'),
- (0x2400, 'V'),
(0x2427, 'X'),
(0x2440, 'V'),
(0x244B, 'X'),
@@ -2394,10 +2416,6 @@ def _seg_22():
(0x2469, 'M', u'10'),
(0x246A, 'M', u'11'),
(0x246B, 'M', u'12'),
- ]
-
-def _seg_23():
- return [
(0x246C, 'M', u'13'),
(0x246D, 'M', u'14'),
(0x246E, 'M', u'15'),
@@ -2481,6 +2499,10 @@ def _seg_23():
(0x24CF, 'M', u'z'),
(0x24D0, 'M', u'a'),
(0x24D1, 'M', u'b'),
+ ]
+
+def _seg_24():
+ return [
(0x24D2, 'M', u'c'),
(0x24D3, 'M', u'd'),
(0x24D4, 'M', u'e'),
@@ -2498,10 +2520,6 @@ def _seg_23():
(0x24E0, 'M', u'q'),
(0x24E1, 'M', u'r'),
(0x24E2, 'M', u's'),
- ]
-
-def _seg_24():
- return [
(0x24E3, 'M', u't'),
(0x24E4, 'M', u'u'),
(0x24E5, 'M', u'v'),
@@ -2511,8 +2529,6 @@ def _seg_24():
(0x24E9, 'M', u'z'),
(0x24EA, 'M', u'0'),
(0x24EB, 'V'),
- (0x2700, 'X'),
- (0x2701, 'V'),
(0x2A0C, 'M', u'∫∫∫∫'),
(0x2A0D, 'V'),
(0x2A74, '3', u'::='),
@@ -2521,9 +2537,17 @@ def _seg_24():
(0x2A77, 'V'),
(0x2ADC, 'M', u'⫝̸'),
(0x2ADD, 'V'),
- (0x2B4D, 'X'),
- (0x2B50, 'V'),
- (0x2B5A, 'X'),
+ (0x2B74, 'X'),
+ (0x2B76, 'V'),
+ (0x2B96, 'X'),
+ (0x2B98, 'V'),
+ (0x2BBA, 'X'),
+ (0x2BBD, 'V'),
+ (0x2BC9, 'X'),
+ (0x2BCA, 'V'),
+ (0x2BD3, 'X'),
+ (0x2BEC, 'V'),
+ (0x2BF0, 'X'),
(0x2C00, 'M', u'ⰰ'),
(0x2C01, 'M', u'ⰱ'),
(0x2C02, 'M', u'ⰲ'),
@@ -2579,6 +2603,10 @@ def _seg_24():
(0x2C62, 'M', u'ɫ'),
(0x2C63, 'M', u'ᵽ'),
(0x2C64, 'M', u'ɽ'),
+ ]
+
+def _seg_25():
+ return [
(0x2C65, 'V'),
(0x2C67, 'M', u'ⱨ'),
(0x2C68, 'V'),
@@ -2602,10 +2630,6 @@ def _seg_24():
(0x2C80, 'M', u'ⲁ'),
(0x2C81, 'V'),
(0x2C82, 'M', u'ⲃ'),
- ]
-
-def _seg_25():
- return [
(0x2C83, 'V'),
(0x2C84, 'M', u'ⲅ'),
(0x2C85, 'V'),
@@ -2683,6 +2707,10 @@ def _seg_25():
(0x2CCD, 'V'),
(0x2CCE, 'M', u'ⳏ'),
(0x2CCF, 'V'),
+ ]
+
+def _seg_26():
+ return [
(0x2CD0, 'M', u'ⳑ'),
(0x2CD1, 'V'),
(0x2CD2, 'M', u'ⳓ'),
@@ -2706,10 +2734,6 @@ def _seg_25():
(0x2CEB, 'M', u'ⳬ'),
(0x2CEC, 'V'),
(0x2CED, 'M', u'ⳮ'),
- ]
-
-def _seg_26():
- return [
(0x2CEE, 'V'),
(0x2CF2, 'M', u'ⳳ'),
(0x2CF3, 'V'),
@@ -2744,7 +2768,7 @@ def _seg_26():
(0x2DD8, 'V'),
(0x2DDF, 'X'),
(0x2DE0, 'V'),
- (0x2E3C, 'X'),
+ (0x2E4A, 'X'),
(0x2E80, 'V'),
(0x2E9A, 'X'),
(0x2E9B, 'V'),
@@ -2787,6 +2811,10 @@ def _seg_26():
(0x2F20, 'M', u'士'),
(0x2F21, 'M', u'夂'),
(0x2F22, 'M', u'夊'),
+ ]
+
+def _seg_27():
+ return [
(0x2F23, 'M', u'夕'),
(0x2F24, 'M', u'大'),
(0x2F25, 'M', u'女'),
@@ -2810,10 +2838,6 @@ def _seg_26():
(0x2F37, 'M', u'弋'),
(0x2F38, 'M', u'弓'),
(0x2F39, 'M', u'彐'),
- ]
-
-def _seg_27():
- return [
(0x2F3A, 'M', u'彡'),
(0x2F3B, 'M', u'彳'),
(0x2F3C, 'M', u'心'),
@@ -2891,6 +2915,10 @@ def _seg_27():
(0x2F84, 'M', u'至'),
(0x2F85, 'M', u'臼'),
(0x2F86, 'M', u'舌'),
+ ]
+
+def _seg_28():
+ return [
(0x2F87, 'M', u'舛'),
(0x2F88, 'M', u'舟'),
(0x2F89, 'M', u'艮'),
@@ -2914,10 +2942,6 @@ def _seg_27():
(0x2F9B, 'M', u'走'),
(0x2F9C, 'M', u'足'),
(0x2F9D, 'M', u'身'),
- ]
-
-def _seg_28():
- return [
(0x2F9E, 'M', u'車'),
(0x2F9F, 'M', u'辛'),
(0x2FA0, 'M', u'辰'),
@@ -2995,9 +3019,13 @@ def _seg_28():
(0x309F, 'M', u'より'),
(0x30A0, 'V'),
(0x30FF, 'M', u'コト'),
+ ]
+
+def _seg_29():
+ return [
(0x3100, 'X'),
(0x3105, 'V'),
- (0x312E, 'X'),
+ (0x312F, 'X'),
(0x3131, 'M', u'ᄀ'),
(0x3132, 'M', u'ᄁ'),
(0x3133, 'M', u'ᆪ'),
@@ -3018,10 +3046,6 @@ def _seg_28():
(0x3142, 'M', u'ᄇ'),
(0x3143, 'M', u'ᄈ'),
(0x3144, 'M', u'ᄡ'),
- ]
-
-def _seg_29():
- return [
(0x3145, 'M', u'ᄉ'),
(0x3146, 'M', u'ᄊ'),
(0x3147, 'M', u'ᄋ'),
@@ -3099,6 +3123,10 @@ def _seg_29():
(0x318F, 'X'),
(0x3190, 'V'),
(0x3192, 'M', u'一'),
+ ]
+
+def _seg_30():
+ return [
(0x3193, 'M', u'二'),
(0x3194, 'M', u'三'),
(0x3195, 'M', u'四'),
@@ -3122,10 +3150,6 @@ def _seg_29():
(0x3202, '3', u'(ᄃ)'),
(0x3203, '3', u'(ᄅ)'),
(0x3204, '3', u'(ᄆ)'),
- ]
-
-def _seg_30():
- return [
(0x3205, '3', u'(ᄇ)'),
(0x3206, '3', u'(ᄉ)'),
(0x3207, '3', u'(ᄋ)'),
@@ -3203,6 +3227,10 @@ def _seg_30():
(0x3256, 'M', u'26'),
(0x3257, 'M', u'27'),
(0x3258, 'M', u'28'),
+ ]
+
+def _seg_31():
+ return [
(0x3259, 'M', u'29'),
(0x325A, 'M', u'30'),
(0x325B, 'M', u'31'),
@@ -3226,10 +3254,6 @@ def _seg_30():
(0x326D, 'M', u'ᄒ'),
(0x326E, 'M', u'가'),
(0x326F, 'M', u'나'),
- ]
-
-def _seg_31():
- return [
(0x3270, 'M', u'다'),
(0x3271, 'M', u'라'),
(0x3272, 'M', u'마'),
@@ -3307,6 +3331,10 @@ def _seg_31():
(0x32BA, 'M', u'45'),
(0x32BB, 'M', u'46'),
(0x32BC, 'M', u'47'),
+ ]
+
+def _seg_32():
+ return [
(0x32BD, 'M', u'48'),
(0x32BE, 'M', u'49'),
(0x32BF, 'M', u'50'),
@@ -3330,10 +3358,6 @@ def _seg_31():
(0x32D1, 'M', u'イ'),
(0x32D2, 'M', u'ウ'),
(0x32D3, 'M', u'エ'),
- ]
-
-def _seg_32():
- return [
(0x32D4, 'M', u'オ'),
(0x32D5, 'M', u'カ'),
(0x32D6, 'M', u'キ'),
@@ -3411,6 +3435,10 @@ def _seg_32():
(0x331E, 'M', u'コーポ'),
(0x331F, 'M', u'サイクル'),
(0x3320, 'M', u'サンチーム'),
+ ]
+
+def _seg_33():
+ return [
(0x3321, 'M', u'シリング'),
(0x3322, 'M', u'センチ'),
(0x3323, 'M', u'セント'),
@@ -3434,10 +3462,6 @@ def _seg_32():
(0x3335, 'M', u'フラン'),
(0x3336, 'M', u'ヘクタール'),
(0x3337, 'M', u'ペソ'),
- ]
-
-def _seg_33():
- return [
(0x3338, 'M', u'ペニヒ'),
(0x3339, 'M', u'ヘルツ'),
(0x333A, 'M', u'ペンス'),
@@ -3515,6 +3539,10 @@ def _seg_33():
(0x3382, 'M', u'μa'),
(0x3383, 'M', u'ma'),
(0x3384, 'M', u'ka'),
+ ]
+
+def _seg_34():
+ return [
(0x3385, 'M', u'kb'),
(0x3386, 'M', u'mb'),
(0x3387, 'M', u'gb'),
@@ -3538,10 +3566,6 @@ def _seg_33():
(0x3399, 'M', u'fm'),
(0x339A, 'M', u'nm'),
(0x339B, 'M', u'μm'),
- ]
-
-def _seg_34():
- return [
(0x339C, 'M', u'mm'),
(0x339D, 'M', u'cm'),
(0x339E, 'M', u'km'),
@@ -3619,6 +3643,10 @@ def _seg_34():
(0x33E6, 'M', u'7日'),
(0x33E7, 'M', u'8日'),
(0x33E8, 'M', u'9日'),
+ ]
+
+def _seg_35():
+ return [
(0x33E9, 'M', u'10日'),
(0x33EA, 'M', u'11日'),
(0x33EB, 'M', u'12日'),
@@ -3642,14 +3670,10 @@ def _seg_34():
(0x33FD, 'M', u'30日'),
(0x33FE, 'M', u'31日'),
(0x33FF, 'M', u'gal'),
- ]
-
-def _seg_35():
- return [
(0x3400, 'V'),
(0x4DB6, 'X'),
(0x4DC0, 'V'),
- (0x9FCD, 'X'),
+ (0x9FEB, 'X'),
(0xA000, 'V'),
(0xA48D, 'X'),
(0xA490, 'V'),
@@ -3723,11 +3747,20 @@ def _seg_35():
(0xA692, 'M', u'ꚓ'),
(0xA693, 'V'),
(0xA694, 'M', u'ꚕ'),
+ ]
+
+def _seg_36():
+ return [
(0xA695, 'V'),
(0xA696, 'M', u'ꚗ'),
(0xA697, 'V'),
- (0xA698, 'X'),
- (0xA69F, 'V'),
+ (0xA698, 'M', u'ꚙ'),
+ (0xA699, 'V'),
+ (0xA69A, 'M', u'ꚛ'),
+ (0xA69B, 'V'),
+ (0xA69C, 'M', u'ъ'),
+ (0xA69D, 'M', u'ь'),
+ (0xA69E, 'V'),
(0xA6F8, 'X'),
(0xA700, 'V'),
(0xA722, 'M', u'ꜣ'),
@@ -3746,10 +3779,6 @@ def _seg_35():
(0xA72F, 'V'),
(0xA732, 'M', u'ꜳ'),
(0xA733, 'V'),
- ]
-
-def _seg_36():
- return [
(0xA734, 'M', u'ꜵ'),
(0xA735, 'V'),
(0xA736, 'M', u'ꜷ'),
@@ -3822,6 +3851,10 @@ def _seg_36():
(0xA780, 'M', u'ꞁ'),
(0xA781, 'V'),
(0xA782, 'M', u'ꞃ'),
+ ]
+
+def _seg_37():
+ return [
(0xA783, 'V'),
(0xA784, 'M', u'ꞅ'),
(0xA785, 'V'),
@@ -3831,12 +3864,20 @@ def _seg_36():
(0xA78C, 'V'),
(0xA78D, 'M', u'ɥ'),
(0xA78E, 'V'),
- (0xA78F, 'X'),
(0xA790, 'M', u'ꞑ'),
(0xA791, 'V'),
(0xA792, 'M', u'ꞓ'),
(0xA793, 'V'),
- (0xA794, 'X'),
+ (0xA796, 'M', u'ꞗ'),
+ (0xA797, 'V'),
+ (0xA798, 'M', u'ꞙ'),
+ (0xA799, 'V'),
+ (0xA79A, 'M', u'ꞛ'),
+ (0xA79B, 'V'),
+ (0xA79C, 'M', u'ꞝ'),
+ (0xA79D, 'V'),
+ (0xA79E, 'M', u'ꞟ'),
+ (0xA79F, 'V'),
(0xA7A0, 'M', u'ꞡ'),
(0xA7A1, 'V'),
(0xA7A2, 'M', u'ꞣ'),
@@ -3848,12 +3889,22 @@ def _seg_36():
(0xA7A8, 'M', u'ꞩ'),
(0xA7A9, 'V'),
(0xA7AA, 'M', u'ɦ'),
- (0xA7AB, 'X'),
+ (0xA7AB, 'M', u'ɜ'),
+ (0xA7AC, 'M', u'ɡ'),
+ (0xA7AD, 'M', u'ɬ'),
+ (0xA7AE, 'M', u'ɪ'),
+ (0xA7AF, 'X'),
+ (0xA7B0, 'M', u'ʞ'),
+ (0xA7B1, 'M', u'ʇ'),
+ (0xA7B2, 'M', u'ʝ'),
+ (0xA7B3, 'M', u'ꭓ'),
+ (0xA7B4, 'M', u'ꞵ'),
+ (0xA7B5, 'V'),
+ (0xA7B6, 'M', u'ꞷ'),
+ (0xA7B7, 'V'),
+ (0xA7B8, 'X'),
+ (0xA7F7, 'V'),
(0xA7F8, 'M', u'ħ'),
- ]
-
-def _seg_37():
- return [
(0xA7F9, 'M', u'œ'),
(0xA7FA, 'V'),
(0xA82C, 'X'),
@@ -3862,11 +3913,11 @@ def _seg_37():
(0xA840, 'V'),
(0xA878, 'X'),
(0xA880, 'V'),
- (0xA8C5, 'X'),
+ (0xA8C6, 'X'),
(0xA8CE, 'V'),
(0xA8DA, 'X'),
(0xA8E0, 'V'),
- (0xA8FC, 'X'),
+ (0xA8FE, 'X'),
(0xA900, 'V'),
(0xA954, 'X'),
(0xA95F, 'V'),
@@ -3876,7 +3927,7 @@ def _seg_37():
(0xA9CF, 'V'),
(0xA9DA, 'X'),
(0xA9DE, 'V'),
- (0xA9E0, 'X'),
+ (0xA9FF, 'X'),
(0xAA00, 'V'),
(0xAA37, 'X'),
(0xAA40, 'V'),
@@ -3884,8 +3935,6 @@ def _seg_37():
(0xAA50, 'V'),
(0xAA5A, 'X'),
(0xAA5C, 'V'),
- (0xAA7C, 'X'),
- (0xAA80, 'V'),
(0xAAC3, 'X'),
(0xAADB, 'V'),
(0xAAF7, 'X'),
@@ -3899,6 +3948,97 @@ def _seg_37():
(0xAB27, 'X'),
(0xAB28, 'V'),
(0xAB2F, 'X'),
+ (0xAB30, 'V'),
+ (0xAB5C, 'M', u'ꜧ'),
+ (0xAB5D, 'M', u'ꬷ'),
+ (0xAB5E, 'M', u'ɫ'),
+ (0xAB5F, 'M', u'ꭒ'),
+ (0xAB60, 'V'),
+ (0xAB66, 'X'),
+ ]
+
+def _seg_38():
+ return [
+ (0xAB70, 'M', u'Ꭰ'),
+ (0xAB71, 'M', u'Ꭱ'),
+ (0xAB72, 'M', u'Ꭲ'),
+ (0xAB73, 'M', u'Ꭳ'),
+ (0xAB74, 'M', u'Ꭴ'),
+ (0xAB75, 'M', u'Ꭵ'),
+ (0xAB76, 'M', u'Ꭶ'),
+ (0xAB77, 'M', u'Ꭷ'),
+ (0xAB78, 'M', u'Ꭸ'),
+ (0xAB79, 'M', u'Ꭹ'),
+ (0xAB7A, 'M', u'Ꭺ'),
+ (0xAB7B, 'M', u'Ꭻ'),
+ (0xAB7C, 'M', u'Ꭼ'),
+ (0xAB7D, 'M', u'Ꭽ'),
+ (0xAB7E, 'M', u'Ꭾ'),
+ (0xAB7F, 'M', u'Ꭿ'),
+ (0xAB80, 'M', u'Ꮀ'),
+ (0xAB81, 'M', u'Ꮁ'),
+ (0xAB82, 'M', u'Ꮂ'),
+ (0xAB83, 'M', u'Ꮃ'),
+ (0xAB84, 'M', u'Ꮄ'),
+ (0xAB85, 'M', u'Ꮅ'),
+ (0xAB86, 'M', u'Ꮆ'),
+ (0xAB87, 'M', u'Ꮇ'),
+ (0xAB88, 'M', u'Ꮈ'),
+ (0xAB89, 'M', u'Ꮉ'),
+ (0xAB8A, 'M', u'Ꮊ'),
+ (0xAB8B, 'M', u'Ꮋ'),
+ (0xAB8C, 'M', u'Ꮌ'),
+ (0xAB8D, 'M', u'Ꮍ'),
+ (0xAB8E, 'M', u'Ꮎ'),
+ (0xAB8F, 'M', u'Ꮏ'),
+ (0xAB90, 'M', u'Ꮐ'),
+ (0xAB91, 'M', u'Ꮑ'),
+ (0xAB92, 'M', u'Ꮒ'),
+ (0xAB93, 'M', u'Ꮓ'),
+ (0xAB94, 'M', u'Ꮔ'),
+ (0xAB95, 'M', u'Ꮕ'),
+ (0xAB96, 'M', u'Ꮖ'),
+ (0xAB97, 'M', u'Ꮗ'),
+ (0xAB98, 'M', u'Ꮘ'),
+ (0xAB99, 'M', u'Ꮙ'),
+ (0xAB9A, 'M', u'Ꮚ'),
+ (0xAB9B, 'M', u'Ꮛ'),
+ (0xAB9C, 'M', u'Ꮜ'),
+ (0xAB9D, 'M', u'Ꮝ'),
+ (0xAB9E, 'M', u'Ꮞ'),
+ (0xAB9F, 'M', u'Ꮟ'),
+ (0xABA0, 'M', u'Ꮠ'),
+ (0xABA1, 'M', u'Ꮡ'),
+ (0xABA2, 'M', u'Ꮢ'),
+ (0xABA3, 'M', u'Ꮣ'),
+ (0xABA4, 'M', u'Ꮤ'),
+ (0xABA5, 'M', u'Ꮥ'),
+ (0xABA6, 'M', u'Ꮦ'),
+ (0xABA7, 'M', u'Ꮧ'),
+ (0xABA8, 'M', u'Ꮨ'),
+ (0xABA9, 'M', u'Ꮩ'),
+ (0xABAA, 'M', u'Ꮪ'),
+ (0xABAB, 'M', u'Ꮫ'),
+ (0xABAC, 'M', u'Ꮬ'),
+ (0xABAD, 'M', u'Ꮭ'),
+ (0xABAE, 'M', u'Ꮮ'),
+ (0xABAF, 'M', u'Ꮯ'),
+ (0xABB0, 'M', u'Ꮰ'),
+ (0xABB1, 'M', u'Ꮱ'),
+ (0xABB2, 'M', u'Ꮲ'),
+ (0xABB3, 'M', u'Ꮳ'),
+ (0xABB4, 'M', u'Ꮴ'),
+ (0xABB5, 'M', u'Ꮵ'),
+ (0xABB6, 'M', u'Ꮶ'),
+ (0xABB7, 'M', u'Ꮷ'),
+ (0xABB8, 'M', u'Ꮸ'),
+ (0xABB9, 'M', u'Ꮹ'),
+ (0xABBA, 'M', u'Ꮺ'),
+ (0xABBB, 'M', u'Ꮻ'),
+ (0xABBC, 'M', u'Ꮼ'),
+ (0xABBD, 'M', u'Ꮽ'),
+ (0xABBE, 'M', u'Ꮾ'),
+ (0xABBF, 'M', u'Ꮿ'),
(0xABC0, 'V'),
(0xABEE, 'X'),
(0xABF0, 'V'),
@@ -3919,6 +4059,10 @@ def _seg_37():
(0xF907, 'M', u'龜'),
(0xF909, 'M', u'契'),
(0xF90A, 'M', u'金'),
+ ]
+
+def _seg_39():
+ return [
(0xF90B, 'M', u'喇'),
(0xF90C, 'M', u'奈'),
(0xF90D, 'M', u'懶'),
@@ -3954,10 +4098,6 @@ def _seg_37():
(0xF92B, 'M', u'狼'),
(0xF92C, 'M', u'郎'),
(0xF92D, 'M', u'來'),
- ]
-
-def _seg_38():
- return [
(0xF92E, 'M', u'冷'),
(0xF92F, 'M', u'勞'),
(0xF930, 'M', u'擄'),
@@ -4023,6 +4163,10 @@ def _seg_38():
(0xF96C, 'M', u'塞'),
(0xF96D, 'M', u'省'),
(0xF96E, 'M', u'葉'),
+ ]
+
+def _seg_40():
+ return [
(0xF96F, 'M', u'說'),
(0xF970, 'M', u'殺'),
(0xF971, 'M', u'辰'),
@@ -4058,10 +4202,6 @@ def _seg_38():
(0xF98F, 'M', u'憐'),
(0xF990, 'M', u'戀'),
(0xF991, 'M', u'撚'),
- ]
-
-def _seg_39():
- return [
(0xF992, 'M', u'漣'),
(0xF993, 'M', u'煉'),
(0xF994, 'M', u'璉'),
@@ -4127,6 +4267,10 @@ def _seg_39():
(0xF9D0, 'M', u'類'),
(0xF9D1, 'M', u'六'),
(0xF9D2, 'M', u'戮'),
+ ]
+
+def _seg_41():
+ return [
(0xF9D3, 'M', u'陸'),
(0xF9D4, 'M', u'倫'),
(0xF9D5, 'M', u'崙'),
@@ -4162,10 +4306,6 @@ def _seg_39():
(0xF9F3, 'M', u'麟'),
(0xF9F4, 'M', u'林'),
(0xF9F5, 'M', u'淋'),
- ]
-
-def _seg_40():
- return [
(0xF9F6, 'M', u'臨'),
(0xF9F7, 'M', u'立'),
(0xF9F8, 'M', u'笠'),
@@ -4231,6 +4371,10 @@ def _seg_40():
(0xFA39, 'M', u'塀'),
(0xFA3A, 'M', u'墨'),
(0xFA3B, 'M', u'層'),
+ ]
+
+def _seg_42():
+ return [
(0xFA3C, 'M', u'屮'),
(0xFA3D, 'M', u'悔'),
(0xFA3E, 'M', u'慨'),
@@ -4266,10 +4410,6 @@ def _seg_40():
(0xFA5C, 'M', u'臭'),
(0xFA5D, 'M', u'艹'),
(0xFA5F, 'M', u'著'),
- ]
-
-def _seg_41():
- return [
(0xFA60, 'M', u'褐'),
(0xFA61, 'M', u'視'),
(0xFA62, 'M', u'謁'),
@@ -4335,6 +4475,10 @@ def _seg_41():
(0xFA9F, 'M', u'犯'),
(0xFAA0, 'M', u'猪'),
(0xFAA1, 'M', u'瑱'),
+ ]
+
+def _seg_43():
+ return [
(0xFAA2, 'M', u'甆'),
(0xFAA3, 'M', u'画'),
(0xFAA4, 'M', u'瘝'),
@@ -4370,10 +4514,6 @@ def _seg_41():
(0xFAC2, 'M', u'輸'),
(0xFAC3, 'M', u'遲'),
(0xFAC4, 'M', u'醙'),
- ]
-
-def _seg_42():
- return [
(0xFAC5, 'M', u'鉶'),
(0xFAC6, 'M', u'陼'),
(0xFAC7, 'M', u'難'),
@@ -4439,6 +4579,10 @@ def _seg_42():
(0xFB38, 'M', u'טּ'),
(0xFB39, 'M', u'יּ'),
(0xFB3A, 'M', u'ךּ'),
+ ]
+
+def _seg_44():
+ return [
(0xFB3B, 'M', u'כּ'),
(0xFB3C, 'M', u'לּ'),
(0xFB3D, 'X'),
@@ -4474,10 +4618,6 @@ def _seg_42():
(0xFB7A, 'M', u'چ'),
(0xFB7E, 'M', u'ڇ'),
(0xFB82, 'M', u'ڍ'),
- ]
-
-def _seg_43():
- return [
(0xFB84, 'M', u'ڌ'),
(0xFB86, 'M', u'ڎ'),
(0xFB88, 'M', u'ڈ'),
@@ -4543,6 +4683,10 @@ def _seg_43():
(0xFC19, 'M', u'خج'),
(0xFC1A, 'M', u'خح'),
(0xFC1B, 'M', u'خم'),
+ ]
+
+def _seg_45():
+ return [
(0xFC1C, 'M', u'سج'),
(0xFC1D, 'M', u'سح'),
(0xFC1E, 'M', u'سخ'),
@@ -4578,10 +4722,6 @@ def _seg_43():
(0xFC3C, 'M', u'كم'),
(0xFC3D, 'M', u'كى'),
(0xFC3E, 'M', u'كي'),
- ]
-
-def _seg_44():
- return [
(0xFC3F, 'M', u'لج'),
(0xFC40, 'M', u'لح'),
(0xFC41, 'M', u'لخ'),
@@ -4647,6 +4787,10 @@ def _seg_44():
(0xFC7D, 'M', u'في'),
(0xFC7E, 'M', u'قى'),
(0xFC7F, 'M', u'قي'),
+ ]
+
+def _seg_46():
+ return [
(0xFC80, 'M', u'كا'),
(0xFC81, 'M', u'كل'),
(0xFC82, 'M', u'كم'),
@@ -4682,10 +4826,6 @@ def _seg_44():
(0xFCA0, 'M', u'به'),
(0xFCA1, 'M', u'تج'),
(0xFCA2, 'M', u'تح'),
- ]
-
-def _seg_45():
- return [
(0xFCA3, 'M', u'تخ'),
(0xFCA4, 'M', u'تم'),
(0xFCA5, 'M', u'ته'),
@@ -4751,6 +4891,10 @@ def _seg_45():
(0xFCE1, 'M', u'بم'),
(0xFCE2, 'M', u'به'),
(0xFCE3, 'M', u'تم'),
+ ]
+
+def _seg_47():
+ return [
(0xFCE4, 'M', u'ته'),
(0xFCE5, 'M', u'ثم'),
(0xFCE6, 'M', u'ثه'),
@@ -4786,10 +4930,6 @@ def _seg_45():
(0xFD04, 'M', u'خي'),
(0xFD05, 'M', u'صى'),
(0xFD06, 'M', u'صي'),
- ]
-
-def _seg_46():
- return [
(0xFD07, 'M', u'ضى'),
(0xFD08, 'M', u'ضي'),
(0xFD09, 'M', u'شج'),
@@ -4855,6 +4995,10 @@ def _seg_46():
(0xFD57, 'M', u'تمخ'),
(0xFD58, 'M', u'جمح'),
(0xFD5A, 'M', u'حمي'),
+ ]
+
+def _seg_48():
+ return [
(0xFD5B, 'M', u'حمى'),
(0xFD5C, 'M', u'سحج'),
(0xFD5D, 'M', u'سجح'),
@@ -4890,10 +5034,6 @@ def _seg_46():
(0xFD87, 'M', u'لمح'),
(0xFD89, 'M', u'محج'),
(0xFD8A, 'M', u'محم'),
- ]
-
-def _seg_47():
- return [
(0xFD8B, 'M', u'محي'),
(0xFD8C, 'M', u'مجح'),
(0xFD8D, 'M', u'مجم'),
@@ -4959,6 +5099,10 @@ def _seg_47():
(0xFDF3, 'M', u'اكبر'),
(0xFDF4, 'M', u'محمد'),
(0xFDF5, 'M', u'صلعم'),
+ ]
+
+def _seg_49():
+ return [
(0xFDF6, 'M', u'رسول'),
(0xFDF7, 'M', u'عليه'),
(0xFDF8, 'M', u'وسلم'),
@@ -4980,7 +5124,7 @@ def _seg_47():
(0xFE18, 'M', u'〗'),
(0xFE19, 'X'),
(0xFE20, 'V'),
- (0xFE27, 'X'),
+ (0xFE30, 'X'),
(0xFE31, 'M', u'—'),
(0xFE32, 'M', u'–'),
(0xFE33, '3', u'_'),
@@ -4994,10 +5138,6 @@ def _seg_47():
(0xFE3C, 'M', u'】'),
(0xFE3D, 'M', u'《'),
(0xFE3E, 'M', u'》'),
- ]
-
-def _seg_48():
- return [
(0xFE3F, 'M', u'〈'),
(0xFE40, 'M', u'〉'),
(0xFE41, 'M', u'「'),
@@ -5063,6 +5203,10 @@ def _seg_48():
(0xFE8F, 'M', u'ب'),
(0xFE93, 'M', u'ة'),
(0xFE95, 'M', u'ت'),
+ ]
+
+def _seg_50():
+ return [
(0xFE99, 'M', u'ث'),
(0xFE9D, 'M', u'ج'),
(0xFEA1, 'M', u'ح'),
@@ -5098,10 +5242,6 @@ def _seg_48():
(0xFF00, 'X'),
(0xFF01, '3', u'!'),
(0xFF02, '3', u'"'),
- ]
-
-def _seg_49():
- return [
(0xFF03, '3', u'#'),
(0xFF04, '3', u'$'),
(0xFF05, '3', u'%'),
@@ -5167,6 +5307,10 @@ def _seg_49():
(0xFF41, 'M', u'a'),
(0xFF42, 'M', u'b'),
(0xFF43, 'M', u'c'),
+ ]
+
+def _seg_51():
+ return [
(0xFF44, 'M', u'd'),
(0xFF45, 'M', u'e'),
(0xFF46, 'M', u'f'),
@@ -5202,10 +5346,6 @@ def _seg_49():
(0xFF64, 'M', u'、'),
(0xFF65, 'M', u'・'),
(0xFF66, 'M', u'ヲ'),
- ]
-
-def _seg_50():
- return [
(0xFF67, 'M', u'ァ'),
(0xFF68, 'M', u'ィ'),
(0xFF69, 'M', u'ゥ'),
@@ -5271,6 +5411,10 @@ def _seg_50():
(0xFFA5, 'M', u'ᆬ'),
(0xFFA6, 'M', u'ᆭ'),
(0xFFA7, 'M', u'ᄃ'),
+ ]
+
+def _seg_52():
+ return [
(0xFFA8, 'M', u'ᄄ'),
(0xFFA9, 'M', u'ᄅ'),
(0xFFAA, 'M', u'ᆰ'),
@@ -5306,10 +5450,6 @@ def _seg_50():
(0xFFCB, 'M', u'ᅨ'),
(0xFFCC, 'M', u'ᅩ'),
(0xFFCD, 'M', u'ᅪ'),
- ]
-
-def _seg_51():
- return [
(0xFFCE, 'M', u'ᅫ'),
(0xFFCF, 'M', u'ᅬ'),
(0xFFD0, 'X'),
@@ -5359,21 +5499,29 @@ def _seg_51():
(0x10107, 'V'),
(0x10134, 'X'),
(0x10137, 'V'),
- (0x1018B, 'X'),
+ (0x1018F, 'X'),
(0x10190, 'V'),
(0x1019C, 'X'),
+ (0x101A0, 'V'),
+ (0x101A1, 'X'),
(0x101D0, 'V'),
(0x101FE, 'X'),
(0x10280, 'V'),
(0x1029D, 'X'),
(0x102A0, 'V'),
(0x102D1, 'X'),
+ (0x102E0, 'V'),
+ (0x102FC, 'X'),
(0x10300, 'V'),
- (0x1031F, 'X'),
- (0x10320, 'V'),
(0x10324, 'X'),
- (0x10330, 'V'),
+ (0x1032D, 'V'),
+ ]
+
+def _seg_53():
+ return [
(0x1034B, 'X'),
+ (0x10350, 'V'),
+ (0x1037B, 'X'),
(0x10380, 'V'),
(0x1039E, 'X'),
(0x1039F, 'V'),
@@ -5410,10 +5558,6 @@ def _seg_51():
(0x1041B, 'M', u'𐑃'),
(0x1041C, 'M', u'𐑄'),
(0x1041D, 'M', u'𐑅'),
- ]
-
-def _seg_52():
- return [
(0x1041E, 'M', u'𐑆'),
(0x1041F, 'M', u'𐑇'),
(0x10420, 'M', u'𐑈'),
@@ -5428,6 +5572,61 @@ def _seg_52():
(0x1049E, 'X'),
(0x104A0, 'V'),
(0x104AA, 'X'),
+ (0x104B0, 'M', u'𐓘'),
+ (0x104B1, 'M', u'𐓙'),
+ (0x104B2, 'M', u'𐓚'),
+ (0x104B3, 'M', u'𐓛'),
+ (0x104B4, 'M', u'𐓜'),
+ (0x104B5, 'M', u'𐓝'),
+ (0x104B6, 'M', u'𐓞'),
+ (0x104B7, 'M', u'𐓟'),
+ (0x104B8, 'M', u'𐓠'),
+ (0x104B9, 'M', u'𐓡'),
+ (0x104BA, 'M', u'𐓢'),
+ (0x104BB, 'M', u'𐓣'),
+ (0x104BC, 'M', u'𐓤'),
+ (0x104BD, 'M', u'𐓥'),
+ (0x104BE, 'M', u'𐓦'),
+ (0x104BF, 'M', u'𐓧'),
+ (0x104C0, 'M', u'𐓨'),
+ (0x104C1, 'M', u'𐓩'),
+ (0x104C2, 'M', u'𐓪'),
+ (0x104C3, 'M', u'𐓫'),
+ (0x104C4, 'M', u'𐓬'),
+ (0x104C5, 'M', u'𐓭'),
+ (0x104C6, 'M', u'𐓮'),
+ (0x104C7, 'M', u'𐓯'),
+ (0x104C8, 'M', u'𐓰'),
+ (0x104C9, 'M', u'𐓱'),
+ (0x104CA, 'M', u'𐓲'),
+ (0x104CB, 'M', u'𐓳'),
+ (0x104CC, 'M', u'𐓴'),
+ (0x104CD, 'M', u'𐓵'),
+ (0x104CE, 'M', u'𐓶'),
+ (0x104CF, 'M', u'𐓷'),
+ (0x104D0, 'M', u'𐓸'),
+ (0x104D1, 'M', u'𐓹'),
+ (0x104D2, 'M', u'𐓺'),
+ (0x104D3, 'M', u'𐓻'),
+ (0x104D4, 'X'),
+ (0x104D8, 'V'),
+ (0x104FC, 'X'),
+ (0x10500, 'V'),
+ (0x10528, 'X'),
+ (0x10530, 'V'),
+ (0x10564, 'X'),
+ (0x1056F, 'V'),
+ (0x10570, 'X'),
+ (0x10600, 'V'),
+ (0x10737, 'X'),
+ ]
+
+def _seg_54():
+ return [
+ (0x10740, 'V'),
+ (0x10756, 'X'),
+ (0x10760, 'V'),
+ (0x10768, 'X'),
(0x10800, 'V'),
(0x10806, 'X'),
(0x10808, 'V'),
@@ -5441,8 +5640,14 @@ def _seg_52():
(0x1083F, 'V'),
(0x10856, 'X'),
(0x10857, 'V'),
- (0x10860, 'X'),
- (0x10900, 'V'),
+ (0x1089F, 'X'),
+ (0x108A7, 'V'),
+ (0x108B0, 'X'),
+ (0x108E0, 'V'),
+ (0x108F3, 'X'),
+ (0x108F4, 'V'),
+ (0x108F6, 'X'),
+ (0x108FB, 'V'),
(0x1091C, 'X'),
(0x1091F, 'V'),
(0x1093A, 'X'),
@@ -5450,9 +5655,9 @@ def _seg_52():
(0x10940, 'X'),
(0x10980, 'V'),
(0x109B8, 'X'),
- (0x109BE, 'V'),
- (0x109C0, 'X'),
- (0x10A00, 'V'),
+ (0x109BC, 'V'),
+ (0x109D0, 'X'),
+ (0x109D2, 'V'),
(0x10A04, 'X'),
(0x10A05, 'V'),
(0x10A07, 'X'),
@@ -5469,7 +5674,11 @@ def _seg_52():
(0x10A50, 'V'),
(0x10A59, 'X'),
(0x10A60, 'V'),
- (0x10A80, 'X'),
+ (0x10AA0, 'X'),
+ (0x10AC0, 'V'),
+ (0x10AE7, 'X'),
+ (0x10AEB, 'V'),
+ (0x10AF7, 'X'),
(0x10B00, 'V'),
(0x10B36, 'X'),
(0x10B39, 'V'),
@@ -5477,16 +5686,80 @@ def _seg_52():
(0x10B58, 'V'),
(0x10B73, 'X'),
(0x10B78, 'V'),
- (0x10B80, 'X'),
+ (0x10B92, 'X'),
+ (0x10B99, 'V'),
+ (0x10B9D, 'X'),
+ (0x10BA9, 'V'),
+ (0x10BB0, 'X'),
(0x10C00, 'V'),
(0x10C49, 'X'),
+ (0x10C80, 'M', u'𐳀'),
+ (0x10C81, 'M', u'𐳁'),
+ (0x10C82, 'M', u'𐳂'),
+ (0x10C83, 'M', u'𐳃'),
+ (0x10C84, 'M', u'𐳄'),
+ (0x10C85, 'M', u'𐳅'),
+ (0x10C86, 'M', u'𐳆'),
+ (0x10C87, 'M', u'𐳇'),
+ (0x10C88, 'M', u'𐳈'),
+ (0x10C89, 'M', u'𐳉'),
+ (0x10C8A, 'M', u'𐳊'),
+ (0x10C8B, 'M', u'𐳋'),
+ (0x10C8C, 'M', u'𐳌'),
+ (0x10C8D, 'M', u'𐳍'),
+ (0x10C8E, 'M', u'𐳎'),
+ (0x10C8F, 'M', u'𐳏'),
+ (0x10C90, 'M', u'𐳐'),
+ (0x10C91, 'M', u'𐳑'),
+ (0x10C92, 'M', u'𐳒'),
+ (0x10C93, 'M', u'𐳓'),
+ (0x10C94, 'M', u'𐳔'),
+ (0x10C95, 'M', u'𐳕'),
+ (0x10C96, 'M', u'𐳖'),
+ (0x10C97, 'M', u'𐳗'),
+ (0x10C98, 'M', u'𐳘'),
+ (0x10C99, 'M', u'𐳙'),
+ (0x10C9A, 'M', u'𐳚'),
+ (0x10C9B, 'M', u'𐳛'),
+ (0x10C9C, 'M', u'𐳜'),
+ (0x10C9D, 'M', u'𐳝'),
+ ]
+
+def _seg_55():
+ return [
+ (0x10C9E, 'M', u'𐳞'),
+ (0x10C9F, 'M', u'𐳟'),
+ (0x10CA0, 'M', u'𐳠'),
+ (0x10CA1, 'M', u'𐳡'),
+ (0x10CA2, 'M', u'𐳢'),
+ (0x10CA3, 'M', u'𐳣'),
+ (0x10CA4, 'M', u'𐳤'),
+ (0x10CA5, 'M', u'𐳥'),
+ (0x10CA6, 'M', u'𐳦'),
+ (0x10CA7, 'M', u'𐳧'),
+ (0x10CA8, 'M', u'𐳨'),
+ (0x10CA9, 'M', u'𐳩'),
+ (0x10CAA, 'M', u'𐳪'),
+ (0x10CAB, 'M', u'𐳫'),
+ (0x10CAC, 'M', u'𐳬'),
+ (0x10CAD, 'M', u'𐳭'),
+ (0x10CAE, 'M', u'𐳮'),
+ (0x10CAF, 'M', u'𐳯'),
+ (0x10CB0, 'M', u'𐳰'),
+ (0x10CB1, 'M', u'𐳱'),
+ (0x10CB2, 'M', u'𐳲'),
+ (0x10CB3, 'X'),
+ (0x10CC0, 'V'),
+ (0x10CF3, 'X'),
+ (0x10CFA, 'V'),
+ (0x10D00, 'X'),
(0x10E60, 'V'),
(0x10E7F, 'X'),
(0x11000, 'V'),
(0x1104E, 'X'),
(0x11052, 'V'),
(0x11070, 'X'),
- (0x11080, 'V'),
+ (0x1107F, 'V'),
(0x110BD, 'X'),
(0x110BE, 'V'),
(0x110C2, 'X'),
@@ -5498,36 +5771,235 @@ def _seg_52():
(0x11135, 'X'),
(0x11136, 'V'),
(0x11144, 'X'),
+ (0x11150, 'V'),
+ (0x11177, 'X'),
(0x11180, 'V'),
- (0x111C9, 'X'),
+ (0x111CE, 'X'),
(0x111D0, 'V'),
- (0x111DA, 'X'),
+ (0x111E0, 'X'),
+ (0x111E1, 'V'),
+ (0x111F5, 'X'),
+ (0x11200, 'V'),
+ (0x11212, 'X'),
+ (0x11213, 'V'),
+ (0x1123F, 'X'),
+ (0x11280, 'V'),
+ (0x11287, 'X'),
+ (0x11288, 'V'),
+ (0x11289, 'X'),
+ (0x1128A, 'V'),
+ (0x1128E, 'X'),
+ (0x1128F, 'V'),
+ (0x1129E, 'X'),
+ (0x1129F, 'V'),
+ (0x112AA, 'X'),
+ (0x112B0, 'V'),
+ (0x112EB, 'X'),
+ (0x112F0, 'V'),
+ (0x112FA, 'X'),
+ (0x11300, 'V'),
+ (0x11304, 'X'),
+ (0x11305, 'V'),
+ (0x1130D, 'X'),
+ (0x1130F, 'V'),
+ (0x11311, 'X'),
+ (0x11313, 'V'),
+ (0x11329, 'X'),
+ (0x1132A, 'V'),
+ (0x11331, 'X'),
+ (0x11332, 'V'),
+ (0x11334, 'X'),
+ (0x11335, 'V'),
+ (0x1133A, 'X'),
+ (0x1133C, 'V'),
+ (0x11345, 'X'),
+ (0x11347, 'V'),
+ (0x11349, 'X'),
+ (0x1134B, 'V'),
+ (0x1134E, 'X'),
+ (0x11350, 'V'),
+ (0x11351, 'X'),
+ (0x11357, 'V'),
+ (0x11358, 'X'),
+ (0x1135D, 'V'),
+ (0x11364, 'X'),
+ (0x11366, 'V'),
+ (0x1136D, 'X'),
+ (0x11370, 'V'),
+ (0x11375, 'X'),
+ ]
+
+def _seg_56():
+ return [
+ (0x11400, 'V'),
+ (0x1145A, 'X'),
+ (0x1145B, 'V'),
+ (0x1145C, 'X'),
+ (0x1145D, 'V'),
+ (0x1145E, 'X'),
+ (0x11480, 'V'),
+ (0x114C8, 'X'),
+ (0x114D0, 'V'),
+ (0x114DA, 'X'),
+ (0x11580, 'V'),
+ (0x115B6, 'X'),
+ (0x115B8, 'V'),
+ (0x115DE, 'X'),
+ (0x11600, 'V'),
+ (0x11645, 'X'),
+ (0x11650, 'V'),
+ (0x1165A, 'X'),
+ (0x11660, 'V'),
+ (0x1166D, 'X'),
(0x11680, 'V'),
(0x116B8, 'X'),
(0x116C0, 'V'),
(0x116CA, 'X'),
+ (0x11700, 'V'),
+ (0x1171A, 'X'),
+ (0x1171D, 'V'),
+ (0x1172C, 'X'),
+ (0x11730, 'V'),
+ (0x11740, 'X'),
+ (0x118A0, 'M', u'𑣀'),
+ (0x118A1, 'M', u'𑣁'),
+ (0x118A2, 'M', u'𑣂'),
+ (0x118A3, 'M', u'𑣃'),
+ (0x118A4, 'M', u'𑣄'),
+ (0x118A5, 'M', u'𑣅'),
+ (0x118A6, 'M', u'𑣆'),
+ (0x118A7, 'M', u'𑣇'),
+ (0x118A8, 'M', u'𑣈'),
+ (0x118A9, 'M', u'𑣉'),
+ (0x118AA, 'M', u'𑣊'),
+ (0x118AB, 'M', u'𑣋'),
+ (0x118AC, 'M', u'𑣌'),
+ (0x118AD, 'M', u'𑣍'),
+ (0x118AE, 'M', u'𑣎'),
+ (0x118AF, 'M', u'𑣏'),
+ (0x118B0, 'M', u'𑣐'),
+ (0x118B1, 'M', u'𑣑'),
+ (0x118B2, 'M', u'𑣒'),
+ (0x118B3, 'M', u'𑣓'),
+ (0x118B4, 'M', u'𑣔'),
+ (0x118B5, 'M', u'𑣕'),
+ (0x118B6, 'M', u'𑣖'),
+ (0x118B7, 'M', u'𑣗'),
+ (0x118B8, 'M', u'𑣘'),
+ (0x118B9, 'M', u'𑣙'),
+ (0x118BA, 'M', u'𑣚'),
+ (0x118BB, 'M', u'𑣛'),
+ (0x118BC, 'M', u'𑣜'),
+ (0x118BD, 'M', u'𑣝'),
+ (0x118BE, 'M', u'𑣞'),
+ (0x118BF, 'M', u'𑣟'),
+ (0x118C0, 'V'),
+ (0x118F3, 'X'),
+ (0x118FF, 'V'),
+ (0x11900, 'X'),
+ (0x11A00, 'V'),
+ (0x11A48, 'X'),
+ (0x11A50, 'V'),
+ (0x11A84, 'X'),
+ (0x11A86, 'V'),
+ (0x11A9D, 'X'),
+ (0x11A9E, 'V'),
+ (0x11AA3, 'X'),
+ (0x11AC0, 'V'),
+ (0x11AF9, 'X'),
+ (0x11C00, 'V'),
+ (0x11C09, 'X'),
+ (0x11C0A, 'V'),
+ (0x11C37, 'X'),
+ (0x11C38, 'V'),
+ (0x11C46, 'X'),
+ (0x11C50, 'V'),
+ (0x11C6D, 'X'),
+ (0x11C70, 'V'),
+ (0x11C90, 'X'),
+ (0x11C92, 'V'),
+ (0x11CA8, 'X'),
+ (0x11CA9, 'V'),
+ (0x11CB7, 'X'),
+ (0x11D00, 'V'),
+ (0x11D07, 'X'),
+ (0x11D08, 'V'),
+ (0x11D0A, 'X'),
+ (0x11D0B, 'V'),
+ (0x11D37, 'X'),
+ (0x11D3A, 'V'),
+ (0x11D3B, 'X'),
+ (0x11D3C, 'V'),
+ (0x11D3E, 'X'),
+ ]
+
+def _seg_57():
+ return [
+ (0x11D3F, 'V'),
+ (0x11D48, 'X'),
+ (0x11D50, 'V'),
+ (0x11D5A, 'X'),
(0x12000, 'V'),
- (0x1236F, 'X'),
+ (0x1239A, 'X'),
(0x12400, 'V'),
- (0x12463, 'X'),
+ (0x1246F, 'X'),
(0x12470, 'V'),
- (0x12474, 'X'),
+ (0x12475, 'X'),
+ (0x12480, 'V'),
+ (0x12544, 'X'),
(0x13000, 'V'),
(0x1342F, 'X'),
- ]
-
-def _seg_53():
- return [
+ (0x14400, 'V'),
+ (0x14647, 'X'),
(0x16800, 'V'),
(0x16A39, 'X'),
+ (0x16A40, 'V'),
+ (0x16A5F, 'X'),
+ (0x16A60, 'V'),
+ (0x16A6A, 'X'),
+ (0x16A6E, 'V'),
+ (0x16A70, 'X'),
+ (0x16AD0, 'V'),
+ (0x16AEE, 'X'),
+ (0x16AF0, 'V'),
+ (0x16AF6, 'X'),
+ (0x16B00, 'V'),
+ (0x16B46, 'X'),
+ (0x16B50, 'V'),
+ (0x16B5A, 'X'),
+ (0x16B5B, 'V'),
+ (0x16B62, 'X'),
+ (0x16B63, 'V'),
+ (0x16B78, 'X'),
+ (0x16B7D, 'V'),
+ (0x16B90, 'X'),
(0x16F00, 'V'),
(0x16F45, 'X'),
(0x16F50, 'V'),
(0x16F7F, 'X'),
(0x16F8F, 'V'),
(0x16FA0, 'X'),
+ (0x16FE0, 'V'),
+ (0x16FE2, 'X'),
+ (0x17000, 'V'),
+ (0x187ED, 'X'),
+ (0x18800, 'V'),
+ (0x18AF3, 'X'),
(0x1B000, 'V'),
- (0x1B002, 'X'),
+ (0x1B11F, 'X'),
+ (0x1B170, 'V'),
+ (0x1B2FC, 'X'),
+ (0x1BC00, 'V'),
+ (0x1BC6B, 'X'),
+ (0x1BC70, 'V'),
+ (0x1BC7D, 'X'),
+ (0x1BC80, 'V'),
+ (0x1BC89, 'X'),
+ (0x1BC90, 'V'),
+ (0x1BC9A, 'X'),
+ (0x1BC9C, 'V'),
+ (0x1BCA0, 'I'),
+ (0x1BCA4, 'X'),
(0x1D000, 'V'),
(0x1D0F6, 'X'),
(0x1D100, 'V'),
@@ -5550,7 +6022,7 @@ def _seg_53():
(0x1D1BF, 'M', u'𝆹𝅥𝅯'),
(0x1D1C0, 'M', u'𝆺𝅥𝅯'),
(0x1D1C1, 'V'),
- (0x1D1DE, 'X'),
+ (0x1D1E9, 'X'),
(0x1D200, 'V'),
(0x1D246, 'X'),
(0x1D300, 'V'),
@@ -5563,6 +6035,10 @@ def _seg_53():
(0x1D403, 'M', u'd'),
(0x1D404, 'M', u'e'),
(0x1D405, 'M', u'f'),
+ ]
+
+def _seg_58():
+ return [
(0x1D406, 'M', u'g'),
(0x1D407, 'M', u'h'),
(0x1D408, 'M', u'i'),
@@ -5618,10 +6094,6 @@ def _seg_53():
(0x1D43A, 'M', u'g'),
(0x1D43B, 'M', u'h'),
(0x1D43C, 'M', u'i'),
- ]
-
-def _seg_54():
- return [
(0x1D43D, 'M', u'j'),
(0x1D43E, 'M', u'k'),
(0x1D43F, 'M', u'l'),
@@ -5667,6 +6139,10 @@ def _seg_54():
(0x1D467, 'M', u'z'),
(0x1D468, 'M', u'a'),
(0x1D469, 'M', u'b'),
+ ]
+
+def _seg_59():
+ return [
(0x1D46A, 'M', u'c'),
(0x1D46B, 'M', u'd'),
(0x1D46C, 'M', u'e'),
@@ -5722,10 +6198,6 @@ def _seg_54():
(0x1D49E, 'M', u'c'),
(0x1D49F, 'M', u'd'),
(0x1D4A0, 'X'),
- ]
-
-def _seg_55():
- return [
(0x1D4A2, 'M', u'g'),
(0x1D4A3, 'X'),
(0x1D4A5, 'M', u'j'),
@@ -5771,6 +6243,10 @@ def _seg_55():
(0x1D4CE, 'M', u'y'),
(0x1D4CF, 'M', u'z'),
(0x1D4D0, 'M', u'a'),
+ ]
+
+def _seg_60():
+ return [
(0x1D4D1, 'M', u'b'),
(0x1D4D2, 'M', u'c'),
(0x1D4D3, 'M', u'd'),
@@ -5826,10 +6302,6 @@ def _seg_55():
(0x1D505, 'M', u'b'),
(0x1D506, 'X'),
(0x1D507, 'M', u'd'),
- ]
-
-def _seg_56():
- return [
(0x1D508, 'M', u'e'),
(0x1D509, 'M', u'f'),
(0x1D50A, 'M', u'g'),
@@ -5875,6 +6347,10 @@ def _seg_56():
(0x1D533, 'M', u'v'),
(0x1D534, 'M', u'w'),
(0x1D535, 'M', u'x'),
+ ]
+
+def _seg_61():
+ return [
(0x1D536, 'M', u'y'),
(0x1D537, 'M', u'z'),
(0x1D538, 'M', u'a'),
@@ -5930,10 +6406,6 @@ def _seg_56():
(0x1D56C, 'M', u'a'),
(0x1D56D, 'M', u'b'),
(0x1D56E, 'M', u'c'),
- ]
-
-def _seg_57():
- return [
(0x1D56F, 'M', u'd'),
(0x1D570, 'M', u'e'),
(0x1D571, 'M', u'f'),
@@ -5979,6 +6451,10 @@ def _seg_57():
(0x1D599, 'M', u't'),
(0x1D59A, 'M', u'u'),
(0x1D59B, 'M', u'v'),
+ ]
+
+def _seg_62():
+ return [
(0x1D59C, 'M', u'w'),
(0x1D59D, 'M', u'x'),
(0x1D59E, 'M', u'y'),
@@ -6034,10 +6510,6 @@ def _seg_57():
(0x1D5D0, 'M', u'w'),
(0x1D5D1, 'M', u'x'),
(0x1D5D2, 'M', u'y'),
- ]
-
-def _seg_58():
- return [
(0x1D5D3, 'M', u'z'),
(0x1D5D4, 'M', u'a'),
(0x1D5D5, 'M', u'b'),
@@ -6083,6 +6555,10 @@ def _seg_58():
(0x1D5FD, 'M', u'p'),
(0x1D5FE, 'M', u'q'),
(0x1D5FF, 'M', u'r'),
+ ]
+
+def _seg_63():
+ return [
(0x1D600, 'M', u's'),
(0x1D601, 'M', u't'),
(0x1D602, 'M', u'u'),
@@ -6138,10 +6614,6 @@ def _seg_58():
(0x1D634, 'M', u's'),
(0x1D635, 'M', u't'),
(0x1D636, 'M', u'u'),
- ]
-
-def _seg_59():
- return [
(0x1D637, 'M', u'v'),
(0x1D638, 'M', u'w'),
(0x1D639, 'M', u'x'),
@@ -6187,6 +6659,10 @@ def _seg_59():
(0x1D661, 'M', u'l'),
(0x1D662, 'M', u'm'),
(0x1D663, 'M', u'n'),
+ ]
+
+def _seg_64():
+ return [
(0x1D664, 'M', u'o'),
(0x1D665, 'M', u'p'),
(0x1D666, 'M', u'q'),
@@ -6242,10 +6718,6 @@ def _seg_59():
(0x1D698, 'M', u'o'),
(0x1D699, 'M', u'p'),
(0x1D69A, 'M', u'q'),
- ]
-
-def _seg_60():
- return [
(0x1D69B, 'M', u'r'),
(0x1D69C, 'M', u's'),
(0x1D69D, 'M', u't'),
@@ -6291,6 +6763,10 @@ def _seg_60():
(0x1D6C6, 'M', u'ε'),
(0x1D6C7, 'M', u'ζ'),
(0x1D6C8, 'M', u'η'),
+ ]
+
+def _seg_65():
+ return [
(0x1D6C9, 'M', u'θ'),
(0x1D6CA, 'M', u'ι'),
(0x1D6CB, 'M', u'κ'),
@@ -6346,10 +6822,6 @@ def _seg_60():
(0x1D6FE, 'M', u'γ'),
(0x1D6FF, 'M', u'δ'),
(0x1D700, 'M', u'ε'),
- ]
-
-def _seg_61():
- return [
(0x1D701, 'M', u'ζ'),
(0x1D702, 'M', u'η'),
(0x1D703, 'M', u'θ'),
@@ -6395,6 +6867,10 @@ def _seg_61():
(0x1D72C, 'M', u'ρ'),
(0x1D72D, 'M', u'θ'),
(0x1D72E, 'M', u'σ'),
+ ]
+
+def _seg_66():
+ return [
(0x1D72F, 'M', u'τ'),
(0x1D730, 'M', u'υ'),
(0x1D731, 'M', u'φ'),
@@ -6450,10 +6926,6 @@ def _seg_61():
(0x1D764, 'M', u'ο'),
(0x1D765, 'M', u'π'),
(0x1D766, 'M', u'ρ'),
- ]
-
-def _seg_62():
- return [
(0x1D767, 'M', u'θ'),
(0x1D768, 'M', u'σ'),
(0x1D769, 'M', u'τ'),
@@ -6499,6 +6971,10 @@ def _seg_62():
(0x1D792, 'M', u'γ'),
(0x1D793, 'M', u'δ'),
(0x1D794, 'M', u'ε'),
+ ]
+
+def _seg_67():
+ return [
(0x1D795, 'M', u'ζ'),
(0x1D796, 'M', u'η'),
(0x1D797, 'M', u'θ'),
@@ -6554,10 +7030,6 @@ def _seg_62():
(0x1D7CA, 'M', u'ϝ'),
(0x1D7CC, 'X'),
(0x1D7CE, 'M', u'0'),
- ]
-
-def _seg_63():
- return [
(0x1D7CF, 'M', u'1'),
(0x1D7D0, 'M', u'2'),
(0x1D7D1, 'M', u'3'),
@@ -6603,11 +7075,74 @@ def _seg_63():
(0x1D7F9, 'M', u'3'),
(0x1D7FA, 'M', u'4'),
(0x1D7FB, 'M', u'5'),
+ ]
+
+def _seg_68():
+ return [
(0x1D7FC, 'M', u'6'),
(0x1D7FD, 'M', u'7'),
(0x1D7FE, 'M', u'8'),
(0x1D7FF, 'M', u'9'),
- (0x1D800, 'X'),
+ (0x1D800, 'V'),
+ (0x1DA8C, 'X'),
+ (0x1DA9B, 'V'),
+ (0x1DAA0, 'X'),
+ (0x1DAA1, 'V'),
+ (0x1DAB0, 'X'),
+ (0x1E000, 'V'),
+ (0x1E007, 'X'),
+ (0x1E008, 'V'),
+ (0x1E019, 'X'),
+ (0x1E01B, 'V'),
+ (0x1E022, 'X'),
+ (0x1E023, 'V'),
+ (0x1E025, 'X'),
+ (0x1E026, 'V'),
+ (0x1E02B, 'X'),
+ (0x1E800, 'V'),
+ (0x1E8C5, 'X'),
+ (0x1E8C7, 'V'),
+ (0x1E8D7, 'X'),
+ (0x1E900, 'M', u'𞤢'),
+ (0x1E901, 'M', u'𞤣'),
+ (0x1E902, 'M', u'𞤤'),
+ (0x1E903, 'M', u'𞤥'),
+ (0x1E904, 'M', u'𞤦'),
+ (0x1E905, 'M', u'𞤧'),
+ (0x1E906, 'M', u'𞤨'),
+ (0x1E907, 'M', u'𞤩'),
+ (0x1E908, 'M', u'𞤪'),
+ (0x1E909, 'M', u'𞤫'),
+ (0x1E90A, 'M', u'𞤬'),
+ (0x1E90B, 'M', u'𞤭'),
+ (0x1E90C, 'M', u'𞤮'),
+ (0x1E90D, 'M', u'𞤯'),
+ (0x1E90E, 'M', u'𞤰'),
+ (0x1E90F, 'M', u'𞤱'),
+ (0x1E910, 'M', u'𞤲'),
+ (0x1E911, 'M', u'𞤳'),
+ (0x1E912, 'M', u'𞤴'),
+ (0x1E913, 'M', u'𞤵'),
+ (0x1E914, 'M', u'𞤶'),
+ (0x1E915, 'M', u'𞤷'),
+ (0x1E916, 'M', u'𞤸'),
+ (0x1E917, 'M', u'𞤹'),
+ (0x1E918, 'M', u'𞤺'),
+ (0x1E919, 'M', u'𞤻'),
+ (0x1E91A, 'M', u'𞤼'),
+ (0x1E91B, 'M', u'𞤽'),
+ (0x1E91C, 'M', u'𞤾'),
+ (0x1E91D, 'M', u'𞤿'),
+ (0x1E91E, 'M', u'𞥀'),
+ (0x1E91F, 'M', u'𞥁'),
+ (0x1E920, 'M', u'𞥂'),
+ (0x1E921, 'M', u'𞥃'),
+ (0x1E922, 'V'),
+ (0x1E94B, 'X'),
+ (0x1E950, 'V'),
+ (0x1E95A, 'X'),
+ (0x1E95E, 'V'),
+ (0x1E960, 'X'),
(0x1EE00, 'M', u'ا'),
(0x1EE01, 'M', u'ب'),
(0x1EE02, 'M', u'ج'),
@@ -6644,6 +7179,10 @@ def _seg_63():
(0x1EE21, 'M', u'ب'),
(0x1EE22, 'M', u'ج'),
(0x1EE23, 'X'),
+ ]
+
+def _seg_69():
+ return [
(0x1EE24, 'M', u'ه'),
(0x1EE25, 'X'),
(0x1EE27, 'M', u'ح'),
@@ -6658,10 +7197,6 @@ def _seg_63():
(0x1EE30, 'M', u'ف'),
(0x1EE31, 'M', u'ص'),
(0x1EE32, 'M', u'ق'),
- ]
-
-def _seg_64():
- return [
(0x1EE33, 'X'),
(0x1EE34, 'M', u'ش'),
(0x1EE35, 'M', u'ت'),
@@ -6748,6 +7283,10 @@ def _seg_64():
(0x1EE90, 'M', u'ف'),
(0x1EE91, 'M', u'ص'),
(0x1EE92, 'M', u'ق'),
+ ]
+
+def _seg_70():
+ return [
(0x1EE93, 'M', u'ر'),
(0x1EE94, 'M', u'ش'),
(0x1EE95, 'M', u'ت'),
@@ -6762,10 +7301,6 @@ def _seg_64():
(0x1EEA2, 'M', u'ج'),
(0x1EEA3, 'M', u'د'),
(0x1EEA4, 'X'),
- ]
-
-def _seg_65():
- return [
(0x1EEA5, 'M', u'و'),
(0x1EEA6, 'M', u'ز'),
(0x1EEA7, 'M', u'ح'),
@@ -6799,11 +7334,11 @@ def _seg_65():
(0x1F0A0, 'V'),
(0x1F0AF, 'X'),
(0x1F0B1, 'V'),
- (0x1F0BF, 'X'),
+ (0x1F0C0, 'X'),
(0x1F0C1, 'V'),
(0x1F0D0, 'X'),
(0x1F0D1, 'V'),
- (0x1F0E0, 'X'),
+ (0x1F0F6, 'X'),
(0x1F101, '3', u'0,'),
(0x1F102, '3', u'1,'),
(0x1F103, '3', u'2,'),
@@ -6814,7 +7349,8 @@ def _seg_65():
(0x1F108, '3', u'7,'),
(0x1F109, '3', u'8,'),
(0x1F10A, '3', u'9,'),
- (0x1F10B, 'X'),
+ (0x1F10B, 'V'),
+ (0x1F10D, 'X'),
(0x1F110, '3', u'(a)'),
(0x1F111, '3', u'(b)'),
(0x1F112, '3', u'(c)'),
@@ -6851,6 +7387,10 @@ def _seg_65():
(0x1F131, 'M', u'b'),
(0x1F132, 'M', u'c'),
(0x1F133, 'M', u'd'),
+ ]
+
+def _seg_71():
+ return [
(0x1F134, 'M', u'e'),
(0x1F135, 'M', u'f'),
(0x1F136, 'M', u'g'),
@@ -6866,10 +7406,6 @@ def _seg_65():
(0x1F140, 'M', u'q'),
(0x1F141, 'M', u'r'),
(0x1F142, 'M', u's'),
- ]
-
-def _seg_66():
- return [
(0x1F143, 'M', u't'),
(0x1F144, 'M', u'u'),
(0x1F145, 'M', u'v'),
@@ -6890,7 +7426,7 @@ def _seg_66():
(0x1F170, 'V'),
(0x1F190, 'M', u'dj'),
(0x1F191, 'V'),
- (0x1F19B, 'X'),
+ (0x1F1AD, 'X'),
(0x1F1E6, 'V'),
(0x1F200, 'M', u'ほか'),
(0x1F201, 'M', u'ココ'),
@@ -6939,7 +7475,8 @@ def _seg_66():
(0x1F238, 'M', u'申'),
(0x1F239, 'M', u'割'),
(0x1F23A, 'M', u'営'),
- (0x1F23B, 'X'),
+ (0x1F23B, 'M', u'配'),
+ (0x1F23C, 'X'),
(0x1F240, 'M', u'〔本〕'),
(0x1F241, 'M', u'〔三〕'),
(0x1F242, 'M', u'〔二〕'),
@@ -6953,52 +7490,56 @@ def _seg_66():
(0x1F250, 'M', u'得'),
(0x1F251, 'M', u'可'),
(0x1F252, 'X'),
- (0x1F300, 'V'),
- (0x1F321, 'X'),
- (0x1F330, 'V'),
- (0x1F336, 'X'),
- (0x1F337, 'V'),
- (0x1F37D, 'X'),
- (0x1F380, 'V'),
- (0x1F394, 'X'),
- (0x1F3A0, 'V'),
- (0x1F3C5, 'X'),
- (0x1F3C6, 'V'),
- (0x1F3CB, 'X'),
- (0x1F3E0, 'V'),
- (0x1F3F1, 'X'),
- (0x1F400, 'V'),
- (0x1F43F, 'X'),
- (0x1F440, 'V'),
+ (0x1F260, 'V'),
]
-def _seg_67():
+def _seg_72():
return [
- (0x1F441, 'X'),
- (0x1F442, 'V'),
- (0x1F4F8, 'X'),
- (0x1F4F9, 'V'),
- (0x1F4FD, 'X'),
- (0x1F500, 'V'),
- (0x1F53E, 'X'),
- (0x1F540, 'V'),
- (0x1F544, 'X'),
- (0x1F550, 'V'),
- (0x1F568, 'X'),
- (0x1F5FB, 'V'),
- (0x1F641, 'X'),
- (0x1F645, 'V'),
- (0x1F650, 'X'),
- (0x1F680, 'V'),
- (0x1F6C6, 'X'),
+ (0x1F266, 'X'),
+ (0x1F300, 'V'),
+ (0x1F6D5, 'X'),
+ (0x1F6E0, 'V'),
+ (0x1F6ED, 'X'),
+ (0x1F6F0, 'V'),
+ (0x1F6F9, 'X'),
(0x1F700, 'V'),
(0x1F774, 'X'),
+ (0x1F780, 'V'),
+ (0x1F7D5, 'X'),
+ (0x1F800, 'V'),
+ (0x1F80C, 'X'),
+ (0x1F810, 'V'),
+ (0x1F848, 'X'),
+ (0x1F850, 'V'),
+ (0x1F85A, 'X'),
+ (0x1F860, 'V'),
+ (0x1F888, 'X'),
+ (0x1F890, 'V'),
+ (0x1F8AE, 'X'),
+ (0x1F900, 'V'),
+ (0x1F90C, 'X'),
+ (0x1F910, 'V'),
+ (0x1F93F, 'X'),
+ (0x1F940, 'V'),
+ (0x1F94D, 'X'),
+ (0x1F950, 'V'),
+ (0x1F96C, 'X'),
+ (0x1F980, 'V'),
+ (0x1F998, 'X'),
+ (0x1F9C0, 'V'),
+ (0x1F9C1, 'X'),
+ (0x1F9D0, 'V'),
+ (0x1F9E7, 'X'),
(0x20000, 'V'),
(0x2A6D7, 'X'),
(0x2A700, 'V'),
(0x2B735, 'X'),
(0x2B740, 'V'),
(0x2B81E, 'X'),
+ (0x2B820, 'V'),
+ (0x2CEA2, 'X'),
+ (0x2CEB0, 'V'),
+ (0x2EBE1, 'X'),
(0x2F800, 'M', u'丽'),
(0x2F801, 'M', u'丸'),
(0x2F802, 'M', u'乁'),
@@ -7054,6 +7595,10 @@ def _seg_67():
(0x2F836, 'M', u'及'),
(0x2F837, 'M', u'叟'),
(0x2F838, 'M', u'𠭣'),
+ ]
+
+def _seg_73():
+ return [
(0x2F839, 'M', u'叫'),
(0x2F83A, 'M', u'叱'),
(0x2F83B, 'M', u'吆'),
@@ -7074,10 +7619,6 @@ def _seg_67():
(0x2F84B, 'M', u'圖'),
(0x2F84C, 'M', u'嘆'),
(0x2F84D, 'M', u'圗'),
- ]
-
-def _seg_68():
- return [
(0x2F84E, 'M', u'噑'),
(0x2F84F, 'M', u'噴'),
(0x2F850, 'M', u'切'),
@@ -7158,6 +7699,10 @@ def _seg_68():
(0x2F89E, 'M', u'志'),
(0x2F89F, 'M', u'忹'),
(0x2F8A0, 'M', u'悁'),
+ ]
+
+def _seg_74():
+ return [
(0x2F8A1, 'M', u'㤺'),
(0x2F8A2, 'M', u'㤜'),
(0x2F8A3, 'M', u'悔'),
@@ -7178,10 +7723,6 @@ def _seg_68():
(0x2F8B2, 'M', u'成'),
(0x2F8B3, 'M', u'戛'),
(0x2F8B4, 'M', u'扝'),
- ]
-
-def _seg_69():
- return [
(0x2F8B5, 'M', u'抱'),
(0x2F8B6, 'M', u'拔'),
(0x2F8B7, 'M', u'捐'),
@@ -7262,6 +7803,10 @@ def _seg_69():
(0x2F902, 'M', u'流'),
(0x2F903, 'M', u'浩'),
(0x2F904, 'M', u'浸'),
+ ]
+
+def _seg_75():
+ return [
(0x2F905, 'M', u'涅'),
(0x2F906, 'M', u'𣴞'),
(0x2F907, 'M', u'洴'),
@@ -7282,10 +7827,6 @@ def _seg_69():
(0x2F916, 'M', u'㶖'),
(0x2F917, 'M', u'灊'),
(0x2F918, 'M', u'災'),
- ]
-
-def _seg_70():
- return [
(0x2F919, 'M', u'灷'),
(0x2F91A, 'M', u'炭'),
(0x2F91B, 'M', u'𠔥'),
@@ -7366,6 +7907,10 @@ def _seg_70():
(0x2F969, 'M', u'糣'),
(0x2F96A, 'M', u'紀'),
(0x2F96B, 'M', u'𥾆'),
+ ]
+
+def _seg_76():
+ return [
(0x2F96C, 'M', u'絣'),
(0x2F96D, 'M', u'䌁'),
(0x2F96E, 'M', u'緇'),
@@ -7386,10 +7931,6 @@ def _seg_70():
(0x2F97D, 'M', u'聠'),
(0x2F97E, 'M', u'𦖨'),
(0x2F97F, 'M', u'聰'),
- ]
-
-def _seg_71():
- return [
(0x2F980, 'M', u'𣍟'),
(0x2F981, 'M', u'䏕'),
(0x2F982, 'M', u'育'),
@@ -7470,6 +8011,10 @@ def _seg_71():
(0x2F9CD, 'M', u'䚾'),
(0x2F9CE, 'M', u'䛇'),
(0x2F9CF, 'M', u'誠'),
+ ]
+
+def _seg_77():
+ return [
(0x2F9D0, 'M', u'諭'),
(0x2F9D1, 'M', u'變'),
(0x2F9D2, 'M', u'豕'),
@@ -7490,10 +8035,6 @@ def _seg_71():
(0x2F9E1, 'M', u'𨗭'),
(0x2F9E2, 'M', u'邔'),
(0x2F9E3, 'M', u'郱'),
- ]
-
-def _seg_72():
- return [
(0x2F9E4, 'M', u'鄑'),
(0x2F9E5, 'M', u'𨜮'),
(0x2F9E6, 'M', u'鄛'),
@@ -7630,4 +8171,9 @@ def _seg_72():
+ _seg_70()
+ _seg_71()
+ _seg_72()
+ + _seg_73()
+ + _seg_74()
+ + _seg_75()
+ + _seg_76()
+ + _seg_77()
)
diff --git a/Contents/Libraries/Shared/inflect.py b/Contents/Libraries/Shared/inflect.py
new file mode 100644
index 000000000..be61aa341
--- /dev/null
+++ b/Contents/Libraries/Shared/inflect.py
@@ -0,0 +1,3801 @@
+"""
+ inflect.py: correctly generate plurals, ordinals, indefinite articles;
+ convert numbers to words
+ Copyright (C) 2010 Paul Dyson
+
+ Based upon the Perl module Lingua::EN::Inflect by Damian Conway.
+
+ The original Perl module Lingua::EN::Inflect by Damian Conway is
+ available from http://search.cpan.org/~dconway/
+
+ This module can be downloaded at http://pypi.org/project/inflect
+
+methods:
+ classical inflect
+ plural plural_noun plural_verb plural_adj singular_noun no num a an
+ compare compare_nouns compare_verbs compare_adjs
+ present_participle
+ ordinal
+ number_to_words
+ join
+ defnoun defverb defadj defa defan
+
+ INFLECTIONS: classical inflect
+ plural plural_noun plural_verb plural_adj singular_noun compare
+ no num a an present_participle
+
+ PLURALS: classical inflect
+ plural plural_noun plural_verb plural_adj singular_noun no num
+ compare compare_nouns compare_verbs compare_adjs
+
+ COMPARISONS: classical
+ compare compare_nouns compare_verbs compare_adjs
+
+ ARTICLES: classical inflect num a an
+
+ NUMERICAL: ordinal number_to_words
+
+ USER_DEFINED: defnoun defverb defadj defa defan
+
+Exceptions:
+ UnknownClassicalModeError
+ BadNumValueError
+ BadChunkingOptionError
+ NumOutOfRangeError
+ BadUserDefinedPatternError
+ BadRcFileError
+ BadGenderError
+
+"""
+
+from __future__ import unicode_literals
+
+import ast
+import sys
+import re
+
+
+class UnknownClassicalModeError(Exception):
+ pass
+
+
+class BadNumValueError(Exception):
+ pass
+
+
+class BadChunkingOptionError(Exception):
+ pass
+
+
+class NumOutOfRangeError(Exception):
+ pass
+
+
+class BadUserDefinedPatternError(Exception):
+ pass
+
+
+class BadRcFileError(Exception):
+ pass
+
+
+class BadGenderError(Exception):
+ pass
+
+
+__version__ = "2.1.0"
+
+
+STDOUT_ON = False
+
+
+def print3(txt):
+ if STDOUT_ON:
+ print(txt)
+
+
+def enclose(s):
+ return "(?:%s)" % s
+
+
+def joinstem(cutpoint=0, words=""):
+ """
+ join stem of each word in words into a string for regex
+ each word is truncated at cutpoint
+ cutpoint is usually negative indicating the number of letters to remove
+ from the end of each word
+
+ e.g.
+ joinstem(-2, ["ephemeris", "iris", ".*itis"]) returns
+ (?:ephemer|ir|.*it)
+
+ """
+ return enclose("|".join(w[:cutpoint] for w in words))
+
+
+def bysize(words):
+ """
+ take a list of words and return a dict of sets sorted by word length
+ e.g.
+ ret[3]=set(['ant', 'cat', 'dog', 'pig'])
+ ret[4]=set(['frog', 'goat'])
+ ret[5]=set(['horse'])
+ ret[8]=set(['elephant'])
+ """
+ ret = {}
+ for w in words:
+ if len(w) not in ret:
+ ret[len(w)] = set()
+ ret[len(w)].add(w)
+ return ret
+
+
+def make_pl_si_lists(lst, plending, siendingsize, dojoinstem=True):
+ """
+ given a list of singular words: lst
+ an ending to append to make the plural: plending
+ the number of characters to remove from the singular
+ before appending plending: siendingsize
+ a flag whether to create a joinstem: dojoinstem
+
+ return:
+ a list of pluralised words: si_list (called si because this is what you need to
+ look for to make the singular)
+ the pluralised words as a dict of sets sorted by word length: si_bysize
+ the singular words as a dict of sets sorted by word length: pl_bysize
+ if dojoinstem is True: a regular expression that matches any of the stems: stem
+ """
+ if siendingsize is not None:
+ siendingsize = -siendingsize
+ si_list = [w[:siendingsize] + plending for w in lst]
+ pl_bysize = bysize(lst)
+ si_bysize = bysize(si_list)
+ if dojoinstem:
+ stem = joinstem(siendingsize, lst)
+ return si_list, si_bysize, pl_bysize, stem
+ else:
+ return si_list, si_bysize, pl_bysize
+
+
+# 1. PLURALS
+
+pl_sb_irregular_s = {
+ "corpus": "corpuses|corpora",
+ "opus": "opuses|opera",
+ "genus": "genera",
+ "mythos": "mythoi",
+ "penis": "penises|penes",
+ "testis": "testes",
+ "atlas": "atlases|atlantes",
+ "yes": "yeses",
+}
+
+pl_sb_irregular = {
+ "child": "children",
+ "brother": "brothers|brethren",
+ "loaf": "loaves",
+ "hoof": "hoofs|hooves",
+ "beef": "beefs|beeves",
+ "thief": "thiefs|thieves",
+ "money": "monies",
+ "mongoose": "mongooses",
+ "ox": "oxen",
+ "cow": "cows|kine",
+ "graffito": "graffiti",
+ "octopus": "octopuses|octopodes",
+ "genie": "genies|genii",
+ "ganglion": "ganglions|ganglia",
+ "trilby": "trilbys",
+ "turf": "turfs|turves",
+ "numen": "numina",
+ "atman": "atmas",
+ "occiput": "occiputs|occipita",
+ "sabretooth": "sabretooths",
+ "sabertooth": "sabertooths",
+ "lowlife": "lowlifes",
+ "flatfoot": "flatfoots",
+ "tenderfoot": "tenderfoots",
+ "romany": "romanies",
+ "jerry": "jerries",
+ "mary": "maries",
+ "talouse": "talouses",
+ "blouse": "blouses",
+ "rom": "roma",
+ "carmen": "carmina",
+}
+
+pl_sb_irregular.update(pl_sb_irregular_s)
+# pl_sb_irregular_keys = enclose('|'.join(pl_sb_irregular.keys()))
+
+pl_sb_irregular_caps = {
+ "Romany": "Romanies",
+ "Jerry": "Jerrys",
+ "Mary": "Marys",
+ "Rom": "Roma",
+}
+
+pl_sb_irregular_compound = {"prima donna": "prima donnas|prime donne"}
+
+si_sb_irregular = {v: k for (k, v) in pl_sb_irregular.items()}
+keys = list(si_sb_irregular.keys())
+for k in keys:
+ if "|" in k:
+ k1, k2 = k.split("|")
+ si_sb_irregular[k1] = si_sb_irregular[k2] = si_sb_irregular[k]
+ del si_sb_irregular[k]
+si_sb_irregular_caps = {v: k for (k, v) in pl_sb_irregular_caps.items()}
+si_sb_irregular_compound = {v: k for (k, v) in pl_sb_irregular_compound.items()}
+keys = list(si_sb_irregular_compound.keys())
+for k in keys:
+ if "|" in k:
+ k1, k2 = k.split("|")
+ si_sb_irregular_compound[k1] = si_sb_irregular_compound[
+ k2
+ ] = si_sb_irregular_compound[k]
+ del si_sb_irregular_compound[k]
+
+# si_sb_irregular_keys = enclose('|'.join(si_sb_irregular.keys()))
+
+# Z's that don't double
+
+pl_sb_z_zes_list = ("quartz", "topaz")
+pl_sb_z_zes_bysize = bysize(pl_sb_z_zes_list)
+
+pl_sb_ze_zes_list = ("snooze",)
+pl_sb_ze_zes_bysize = bysize(pl_sb_ze_zes_list)
+
+
+# CLASSICAL "..is" -> "..ides"
+
+pl_sb_C_is_ides_complete = [
+ # GENERAL WORDS...
+ "ephemeris",
+ "iris",
+ "clitoris",
+ "chrysalis",
+ "epididymis",
+]
+
+pl_sb_C_is_ides_endings = [
+ # INFLAMATIONS...
+ "itis"
+]
+
+pl_sb_C_is_ides = joinstem(
+ -2, pl_sb_C_is_ides_complete + [".*%s" % w for w in pl_sb_C_is_ides_endings]
+)
+
+pl_sb_C_is_ides_list = pl_sb_C_is_ides_complete + pl_sb_C_is_ides_endings
+
+(
+ si_sb_C_is_ides_list,
+ si_sb_C_is_ides_bysize,
+ pl_sb_C_is_ides_bysize,
+) = make_pl_si_lists(pl_sb_C_is_ides_list, "ides", 2, dojoinstem=False)
+
+
+# CLASSICAL "..a" -> "..ata"
+
+pl_sb_C_a_ata_list = (
+ "anathema",
+ "bema",
+ "carcinoma",
+ "charisma",
+ "diploma",
+ "dogma",
+ "drama",
+ "edema",
+ "enema",
+ "enigma",
+ "lemma",
+ "lymphoma",
+ "magma",
+ "melisma",
+ "miasma",
+ "oedema",
+ "sarcoma",
+ "schema",
+ "soma",
+ "stigma",
+ "stoma",
+ "trauma",
+ "gumma",
+ "pragma",
+)
+
+(
+ si_sb_C_a_ata_list,
+ si_sb_C_a_ata_bysize,
+ pl_sb_C_a_ata_bysize,
+ pl_sb_C_a_ata,
+) = make_pl_si_lists(pl_sb_C_a_ata_list, "ata", 1)
+
+# UNCONDITIONAL "..a" -> "..ae"
+
+pl_sb_U_a_ae_list = ("alumna", "alga", "vertebra", "persona")
+(
+ si_sb_U_a_ae_list,
+ si_sb_U_a_ae_bysize,
+ pl_sb_U_a_ae_bysize,
+ pl_sb_U_a_ae,
+) = make_pl_si_lists(pl_sb_U_a_ae_list, "e", None)
+
+# CLASSICAL "..a" -> "..ae"
+
+pl_sb_C_a_ae_list = (
+ "amoeba",
+ "antenna",
+ "formula",
+ "hyperbola",
+ "medusa",
+ "nebula",
+ "parabola",
+ "abscissa",
+ "hydra",
+ "nova",
+ "lacuna",
+ "aurora",
+ "umbra",
+ "flora",
+ "fauna",
+)
+(
+ si_sb_C_a_ae_list,
+ si_sb_C_a_ae_bysize,
+ pl_sb_C_a_ae_bysize,
+ pl_sb_C_a_ae,
+) = make_pl_si_lists(pl_sb_C_a_ae_list, "e", None)
+
+
+# CLASSICAL "..en" -> "..ina"
+
+pl_sb_C_en_ina_list = ("stamen", "foramen", "lumen")
+
+(
+ si_sb_C_en_ina_list,
+ si_sb_C_en_ina_bysize,
+ pl_sb_C_en_ina_bysize,
+ pl_sb_C_en_ina,
+) = make_pl_si_lists(pl_sb_C_en_ina_list, "ina", 2)
+
+
+# UNCONDITIONAL "..um" -> "..a"
+
+pl_sb_U_um_a_list = (
+ "bacterium",
+ "agendum",
+ "desideratum",
+ "erratum",
+ "stratum",
+ "datum",
+ "ovum",
+ "extremum",
+ "candelabrum",
+)
+(
+ si_sb_U_um_a_list,
+ si_sb_U_um_a_bysize,
+ pl_sb_U_um_a_bysize,
+ pl_sb_U_um_a,
+) = make_pl_si_lists(pl_sb_U_um_a_list, "a", 2)
+
+# CLASSICAL "..um" -> "..a"
+
+pl_sb_C_um_a_list = (
+ "maximum",
+ "minimum",
+ "momentum",
+ "optimum",
+ "quantum",
+ "cranium",
+ "curriculum",
+ "dictum",
+ "phylum",
+ "aquarium",
+ "compendium",
+ "emporium",
+ "enconium",
+ "gymnasium",
+ "honorarium",
+ "interregnum",
+ "lustrum",
+ "memorandum",
+ "millennium",
+ "rostrum",
+ "spectrum",
+ "speculum",
+ "stadium",
+ "trapezium",
+ "ultimatum",
+ "medium",
+ "vacuum",
+ "velum",
+ "consortium",
+ "arboretum",
+)
+
+(
+ si_sb_C_um_a_list,
+ si_sb_C_um_a_bysize,
+ pl_sb_C_um_a_bysize,
+ pl_sb_C_um_a,
+) = make_pl_si_lists(pl_sb_C_um_a_list, "a", 2)
+
+
+# UNCONDITIONAL "..us" -> "i"
+
+pl_sb_U_us_i_list = (
+ "alumnus",
+ "alveolus",
+ "bacillus",
+ "bronchus",
+ "locus",
+ "nucleus",
+ "stimulus",
+ "meniscus",
+ "sarcophagus",
+)
+(
+ si_sb_U_us_i_list,
+ si_sb_U_us_i_bysize,
+ pl_sb_U_us_i_bysize,
+ pl_sb_U_us_i,
+) = make_pl_si_lists(pl_sb_U_us_i_list, "i", 2)
+
+# CLASSICAL "..us" -> "..i"
+
+pl_sb_C_us_i_list = (
+ "focus",
+ "radius",
+ "genius",
+ "incubus",
+ "succubus",
+ "nimbus",
+ "fungus",
+ "nucleolus",
+ "stylus",
+ "torus",
+ "umbilicus",
+ "uterus",
+ "hippopotamus",
+ "cactus",
+)
+
+(
+ si_sb_C_us_i_list,
+ si_sb_C_us_i_bysize,
+ pl_sb_C_us_i_bysize,
+ pl_sb_C_us_i,
+) = make_pl_si_lists(pl_sb_C_us_i_list, "i", 2)
+
+
+# CLASSICAL "..us" -> "..us" (ASSIMILATED 4TH DECLENSION LATIN NOUNS)
+
+pl_sb_C_us_us = (
+ "status",
+ "apparatus",
+ "prospectus",
+ "sinus",
+ "hiatus",
+ "impetus",
+ "plexus",
+)
+pl_sb_C_us_us_bysize = bysize(pl_sb_C_us_us)
+
+# UNCONDITIONAL "..on" -> "a"
+
+pl_sb_U_on_a_list = (
+ "criterion",
+ "perihelion",
+ "aphelion",
+ "phenomenon",
+ "prolegomenon",
+ "noumenon",
+ "organon",
+ "asyndeton",
+ "hyperbaton",
+)
+(
+ si_sb_U_on_a_list,
+ si_sb_U_on_a_bysize,
+ pl_sb_U_on_a_bysize,
+ pl_sb_U_on_a,
+) = make_pl_si_lists(pl_sb_U_on_a_list, "a", 2)
+
+# CLASSICAL "..on" -> "..a"
+
+pl_sb_C_on_a_list = ("oxymoron",)
+
+(
+ si_sb_C_on_a_list,
+ si_sb_C_on_a_bysize,
+ pl_sb_C_on_a_bysize,
+ pl_sb_C_on_a,
+) = make_pl_si_lists(pl_sb_C_on_a_list, "a", 2)
+
+
+# CLASSICAL "..o" -> "..i" (BUT NORMALLY -> "..os")
+
+pl_sb_C_o_i = [
+ "solo",
+ "soprano",
+ "basso",
+ "alto",
+ "contralto",
+ "tempo",
+ "piano",
+ "virtuoso",
+] # list not tuple so can concat for pl_sb_U_o_os
+
+pl_sb_C_o_i_bysize = bysize(pl_sb_C_o_i)
+si_sb_C_o_i_bysize = bysize(["%si" % w[:-1] for w in pl_sb_C_o_i])
+
+pl_sb_C_o_i_stems = joinstem(-1, pl_sb_C_o_i)
+
+# ALWAYS "..o" -> "..os"
+
+pl_sb_U_o_os_complete = {"ado", "ISO", "NATO", "NCO", "NGO", "oto"}
+si_sb_U_o_os_complete = {"%ss" % w for w in pl_sb_U_o_os_complete}
+
+
+pl_sb_U_o_os_endings = [
+ "aficionado",
+ "aggro",
+ "albino",
+ "allegro",
+ "ammo",
+ "Antananarivo",
+ "archipelago",
+ "armadillo",
+ "auto",
+ "avocado",
+ "Bamako",
+ "Barquisimeto",
+ "bimbo",
+ "bingo",
+ "Biro",
+ "bolero",
+ "Bolzano",
+ "bongo",
+ "Boto",
+ "burro",
+ "Cairo",
+ "canto",
+ "cappuccino",
+ "casino",
+ "cello",
+ "Chicago",
+ "Chimango",
+ "cilantro",
+ "cochito",
+ "coco",
+ "Colombo",
+ "Colorado",
+ "commando",
+ "concertino",
+ "contango",
+ "credo",
+ "crescendo",
+ "cyano",
+ "demo",
+ "ditto",
+ "Draco",
+ "dynamo",
+ "embryo",
+ "Esperanto",
+ "espresso",
+ "euro",
+ "falsetto",
+ "Faro",
+ "fiasco",
+ "Filipino",
+ "flamenco",
+ "furioso",
+ "generalissimo",
+ "Gestapo",
+ "ghetto",
+ "gigolo",
+ "gizmo",
+ "Greensboro",
+ "gringo",
+ "Guaiabero",
+ "guano",
+ "gumbo",
+ "gyro",
+ "hairdo",
+ "hippo",
+ "Idaho",
+ "impetigo",
+ "inferno",
+ "info",
+ "intermezzo",
+ "intertrigo",
+ "Iquico",
+ "jumbo",
+ "junto",
+ "Kakapo",
+ "kilo",
+ "Kinkimavo",
+ "Kokako",
+ "Kosovo",
+ "Lesotho",
+ "libero",
+ "libido",
+ "libretto",
+ "lido",
+ "Lilo",
+ "limbo",
+ "limo",
+ "lineno",
+ "lingo",
+ "lino",
+ "livedo",
+ "loco",
+ "logo",
+ "lumbago",
+ "macho",
+ "macro",
+ "mafioso",
+ "magneto",
+ "magnifico",
+ "Majuro",
+ "Malabo",
+ "manifesto",
+ "Maputo",
+ "Maracaibo",
+ "medico",
+ "memo",
+ "metro",
+ "Mexico",
+ "micro",
+ "Milano",
+ "Monaco",
+ "mono",
+ "Montenegro",
+ "Morocco",
+ "Muqdisho",
+ "myo",
+ "neutrino",
+ "Ningbo",
+ "octavo",
+ "oregano",
+ "Orinoco",
+ "Orlando",
+ "Oslo",
+ "panto",
+ "Paramaribo",
+ "Pardusco",
+ "pedalo",
+ "photo",
+ "pimento",
+ "pinto",
+ "pleco",
+ "Pluto",
+ "pogo",
+ "polo",
+ "poncho",
+ "Porto-Novo",
+ "Porto",
+ "pro",
+ "psycho",
+ "pueblo",
+ "quarto",
+ "Quito",
+ "rhino",
+ "risotto",
+ "rococo",
+ "rondo",
+ "Sacramento",
+ "saddo",
+ "sago",
+ "salvo",
+ "Santiago",
+ "Sapporo",
+ "Sarajevo",
+ "scherzando",
+ "scherzo",
+ "silo",
+ "sirocco",
+ "sombrero",
+ "staccato",
+ "sterno",
+ "stucco",
+ "stylo",
+ "sumo",
+ "Taiko",
+ "techno",
+ "terrazzo",
+ "testudo",
+ "timpano",
+ "tiro",
+ "tobacco",
+ "Togo",
+ "Tokyo",
+ "torero",
+ "Torino",
+ "Toronto",
+ "torso",
+ "tremolo",
+ "typo",
+ "tyro",
+ "ufo",
+ "UNESCO",
+ "vaquero",
+ "vermicello",
+ "verso",
+ "vibrato",
+ "violoncello",
+ "Virgo",
+ "weirdo",
+ "WHO",
+ "WTO",
+ "Yamoussoukro",
+ "yo-yo",
+ "zero",
+ "Zibo",
+] + pl_sb_C_o_i
+
+pl_sb_U_o_os_bysize = bysize(pl_sb_U_o_os_endings)
+si_sb_U_o_os_bysize = bysize(["%ss" % w for w in pl_sb_U_o_os_endings])
+
+
+# UNCONDITIONAL "..ch" -> "..chs"
+
+pl_sb_U_ch_chs_list = ("czech", "eunuch", "stomach")
+
+(
+ si_sb_U_ch_chs_list,
+ si_sb_U_ch_chs_bysize,
+ pl_sb_U_ch_chs_bysize,
+ pl_sb_U_ch_chs,
+) = make_pl_si_lists(pl_sb_U_ch_chs_list, "s", None)
+
+
+# UNCONDITIONAL "..[ei]x" -> "..ices"
+
+pl_sb_U_ex_ices_list = ("codex", "murex", "silex")
+(
+ si_sb_U_ex_ices_list,
+ si_sb_U_ex_ices_bysize,
+ pl_sb_U_ex_ices_bysize,
+ pl_sb_U_ex_ices,
+) = make_pl_si_lists(pl_sb_U_ex_ices_list, "ices", 2)
+
+pl_sb_U_ix_ices_list = ("radix", "helix")
+(
+ si_sb_U_ix_ices_list,
+ si_sb_U_ix_ices_bysize,
+ pl_sb_U_ix_ices_bysize,
+ pl_sb_U_ix_ices,
+) = make_pl_si_lists(pl_sb_U_ix_ices_list, "ices", 2)
+
+# CLASSICAL "..[ei]x" -> "..ices"
+
+pl_sb_C_ex_ices_list = (
+ "vortex",
+ "vertex",
+ "cortex",
+ "latex",
+ "pontifex",
+ "apex",
+ "index",
+ "simplex",
+)
+
+(
+ si_sb_C_ex_ices_list,
+ si_sb_C_ex_ices_bysize,
+ pl_sb_C_ex_ices_bysize,
+ pl_sb_C_ex_ices,
+) = make_pl_si_lists(pl_sb_C_ex_ices_list, "ices", 2)
+
+
+pl_sb_C_ix_ices_list = ("appendix",)
+
+(
+ si_sb_C_ix_ices_list,
+ si_sb_C_ix_ices_bysize,
+ pl_sb_C_ix_ices_bysize,
+ pl_sb_C_ix_ices,
+) = make_pl_si_lists(pl_sb_C_ix_ices_list, "ices", 2)
+
+
+# ARABIC: ".." -> "..i"
+
+pl_sb_C_i_list = ("afrit", "afreet", "efreet")
+
+(si_sb_C_i_list, si_sb_C_i_bysize, pl_sb_C_i_bysize, pl_sb_C_i) = make_pl_si_lists(
+ pl_sb_C_i_list, "i", None
+)
+
+
+# HEBREW: ".." -> "..im"
+
+pl_sb_C_im_list = ("goy", "seraph", "cherub")
+
+(si_sb_C_im_list, si_sb_C_im_bysize, pl_sb_C_im_bysize, pl_sb_C_im) = make_pl_si_lists(
+ pl_sb_C_im_list, "im", None
+)
+
+
+# UNCONDITIONAL "..man" -> "..mans"
+
+pl_sb_U_man_mans_list = """
+ ataman caiman cayman ceriman
+ desman dolman farman harman hetman
+ human leman ottoman shaman talisman
+""".split()
+pl_sb_U_man_mans_caps_list = """
+ Alabaman Bahaman Burman German
+ Hiroshiman Liman Nakayaman Norman Oklahoman
+ Panaman Roman Selman Sonaman Tacoman Yakiman
+ Yokohaman Yuman
+""".split()
+
+(
+ si_sb_U_man_mans_list,
+ si_sb_U_man_mans_bysize,
+ pl_sb_U_man_mans_bysize,
+) = make_pl_si_lists(pl_sb_U_man_mans_list, "s", None, dojoinstem=False)
+(
+ si_sb_U_man_mans_caps_list,
+ si_sb_U_man_mans_caps_bysize,
+ pl_sb_U_man_mans_caps_bysize,
+) = make_pl_si_lists(pl_sb_U_man_mans_caps_list, "s", None, dojoinstem=False)
+
+
+pl_sb_uninflected_s_complete = [
+ # PAIRS OR GROUPS SUBSUMED TO A SINGULAR...
+ "breeches",
+ "britches",
+ "pajamas",
+ "pyjamas",
+ "clippers",
+ "gallows",
+ "hijinks",
+ "headquarters",
+ "pliers",
+ "scissors",
+ "testes",
+ "herpes",
+ "pincers",
+ "shears",
+ "proceedings",
+ "trousers",
+ # UNASSIMILATED LATIN 4th DECLENSION
+ "cantus",
+ "coitus",
+ "nexus",
+ # RECENT IMPORTS...
+ "contretemps",
+ "corps",
+ "debris",
+ "siemens",
+ # DISEASES
+ "mumps",
+ # MISCELLANEOUS OTHERS...
+ "diabetes",
+ "jackanapes",
+ "series",
+ "species",
+ "subspecies",
+ "rabies",
+ "chassis",
+ "innings",
+ "news",
+ "mews",
+ "haggis",
+]
+
+pl_sb_uninflected_s_endings = [
+ # RECENT IMPORTS...
+ "ois",
+ # DISEASES
+ "measles",
+]
+
+pl_sb_uninflected_s = pl_sb_uninflected_s_complete + [
+ ".*%s" % w for w in pl_sb_uninflected_s_endings
+]
+
+pl_sb_uninflected_herd = (
+ # DON'T INFLECT IN CLASSICAL MODE, OTHERWISE NORMAL INFLECTION
+ "wildebeest",
+ "swine",
+ "eland",
+ "bison",
+ "buffalo",
+ "elk",
+ "rhinoceros",
+ "zucchini",
+ "caribou",
+ "dace",
+ "grouse",
+ "guinea fowl",
+ "guinea-fowl",
+ "haddock",
+ "hake",
+ "halibut",
+ "herring",
+ "mackerel",
+ "pickerel",
+ "pike",
+ "roe",
+ "seed",
+ "shad",
+ "snipe",
+ "teal",
+ "turbot",
+ "water fowl",
+ "water-fowl",
+)
+
+pl_sb_uninflected_complete = [
+ # SOME FISH AND HERD ANIMALS
+ "tuna",
+ "salmon",
+ "mackerel",
+ "trout",
+ "bream",
+ "sea-bass",
+ "sea bass",
+ "carp",
+ "cod",
+ "flounder",
+ "whiting",
+ "moose",
+ # OTHER ODDITIES
+ "graffiti",
+ "djinn",
+ "samuri",
+ "offspring",
+ "pence",
+ "quid",
+ "hertz",
+] + pl_sb_uninflected_s_complete
+# SOME WORDS ENDING IN ...s (OFTEN PAIRS TAKEN AS A WHOLE)
+
+pl_sb_uninflected_caps = [
+ # ALL NATIONALS ENDING IN -ese
+ "Portuguese",
+ "Amoyese",
+ "Borghese",
+ "Congoese",
+ "Faroese",
+ "Foochowese",
+ "Genevese",
+ "Genoese",
+ "Gilbertese",
+ "Hottentotese",
+ "Kiplingese",
+ "Kongoese",
+ "Lucchese",
+ "Maltese",
+ "Nankingese",
+ "Niasese",
+ "Pekingese",
+ "Piedmontese",
+ "Pistoiese",
+ "Sarawakese",
+ "Shavese",
+ "Vermontese",
+ "Wenchowese",
+ "Yengeese",
+]
+
+
+pl_sb_uninflected_endings = [
+ # SOME FISH AND HERD ANIMALS
+ "fish",
+ "deer",
+ "sheep",
+ # ALL NATIONALS ENDING IN -ese
+ "nese",
+ "rese",
+ "lese",
+ "mese",
+ # DISEASES
+ "pox",
+ # OTHER ODDITIES
+ "craft",
+] + pl_sb_uninflected_s_endings
+# SOME WORDS ENDING IN ...s (OFTEN PAIRS TAKEN AS A WHOLE)
+
+
+pl_sb_uninflected_bysize = bysize(pl_sb_uninflected_endings)
+
+
+# SINGULAR WORDS ENDING IN ...s (ALL INFLECT WITH ...es)
+
+pl_sb_singular_s_complete = [
+ "acropolis",
+ "aegis",
+ "alias",
+ "asbestos",
+ "bathos",
+ "bias",
+ "bronchitis",
+ "bursitis",
+ "caddis",
+ "cannabis",
+ "canvas",
+ "chaos",
+ "cosmos",
+ "dais",
+ "digitalis",
+ "epidermis",
+ "ethos",
+ "eyas",
+ "gas",
+ "glottis",
+ "hubris",
+ "ibis",
+ "lens",
+ "mantis",
+ "marquis",
+ "metropolis",
+ "pathos",
+ "pelvis",
+ "polis",
+ "rhinoceros",
+ "sassafras",
+ "trellis",
+] + pl_sb_C_is_ides_complete
+
+
+pl_sb_singular_s_endings = ["ss", "us"] + pl_sb_C_is_ides_endings
+
+pl_sb_singular_s_bysize = bysize(pl_sb_singular_s_endings)
+
+si_sb_singular_s_complete = ["%ses" % w for w in pl_sb_singular_s_complete]
+si_sb_singular_s_endings = ["%ses" % w for w in pl_sb_singular_s_endings]
+si_sb_singular_s_bysize = bysize(si_sb_singular_s_endings)
+
+pl_sb_singular_s_es = ["[A-Z].*es"]
+
+pl_sb_singular_s = enclose(
+ "|".join(
+ pl_sb_singular_s_complete
+ + [".*%s" % w for w in pl_sb_singular_s_endings]
+ + pl_sb_singular_s_es
+ )
+)
+
+
+# PLURALS ENDING IN uses -> use
+
+
+si_sb_ois_oi_case = ("Bolshois", "Hanois")
+
+si_sb_uses_use_case = ("Betelgeuses", "Duses", "Meuses", "Syracuses", "Toulouses")
+
+si_sb_uses_use = (
+ "abuses",
+ "applauses",
+ "blouses",
+ "carouses",
+ "causes",
+ "chartreuses",
+ "clauses",
+ "contuses",
+ "douses",
+ "excuses",
+ "fuses",
+ "grouses",
+ "hypotenuses",
+ "masseuses",
+ "menopauses",
+ "misuses",
+ "muses",
+ "overuses",
+ "pauses",
+ "peruses",
+ "profuses",
+ "recluses",
+ "reuses",
+ "ruses",
+ "souses",
+ "spouses",
+ "suffuses",
+ "transfuses",
+ "uses",
+)
+
+si_sb_ies_ie_case = (
+ "Addies",
+ "Aggies",
+ "Allies",
+ "Amies",
+ "Angies",
+ "Annies",
+ "Annmaries",
+ "Archies",
+ "Arties",
+ "Aussies",
+ "Barbies",
+ "Barries",
+ "Basies",
+ "Bennies",
+ "Bernies",
+ "Berties",
+ "Bessies",
+ "Betties",
+ "Billies",
+ "Blondies",
+ "Bobbies",
+ "Bonnies",
+ "Bowies",
+ "Brandies",
+ "Bries",
+ "Brownies",
+ "Callies",
+ "Carnegies",
+ "Carries",
+ "Cassies",
+ "Charlies",
+ "Cheries",
+ "Christies",
+ "Connies",
+ "Curies",
+ "Dannies",
+ "Debbies",
+ "Dixies",
+ "Dollies",
+ "Donnies",
+ "Drambuies",
+ "Eddies",
+ "Effies",
+ "Ellies",
+ "Elsies",
+ "Eries",
+ "Ernies",
+ "Essies",
+ "Eugenies",
+ "Fannies",
+ "Flossies",
+ "Frankies",
+ "Freddies",
+ "Gillespies",
+ "Goldies",
+ "Gracies",
+ "Guthries",
+ "Hallies",
+ "Hatties",
+ "Hetties",
+ "Hollies",
+ "Jackies",
+ "Jamies",
+ "Janies",
+ "Jannies",
+ "Jeanies",
+ "Jeannies",
+ "Jennies",
+ "Jessies",
+ "Jimmies",
+ "Jodies",
+ "Johnies",
+ "Johnnies",
+ "Josies",
+ "Julies",
+ "Kalgoorlies",
+ "Kathies",
+ "Katies",
+ "Kellies",
+ "Kewpies",
+ "Kristies",
+ "Laramies",
+ "Lassies",
+ "Lauries",
+ "Leslies",
+ "Lessies",
+ "Lillies",
+ "Lizzies",
+ "Lonnies",
+ "Lories",
+ "Lorries",
+ "Lotties",
+ "Louies",
+ "Mackenzies",
+ "Maggies",
+ "Maisies",
+ "Mamies",
+ "Marcies",
+ "Margies",
+ "Maries",
+ "Marjories",
+ "Matties",
+ "McKenzies",
+ "Melanies",
+ "Mickies",
+ "Millies",
+ "Minnies",
+ "Mollies",
+ "Mounties",
+ "Nannies",
+ "Natalies",
+ "Nellies",
+ "Netties",
+ "Ollies",
+ "Ozzies",
+ "Pearlies",
+ "Pottawatomies",
+ "Reggies",
+ "Richies",
+ "Rickies",
+ "Robbies",
+ "Ronnies",
+ "Rosalies",
+ "Rosemaries",
+ "Rosies",
+ "Roxies",
+ "Rushdies",
+ "Ruthies",
+ "Sadies",
+ "Sallies",
+ "Sammies",
+ "Scotties",
+ "Selassies",
+ "Sherries",
+ "Sophies",
+ "Stacies",
+ "Stefanies",
+ "Stephanies",
+ "Stevies",
+ "Susies",
+ "Sylvies",
+ "Tammies",
+ "Terries",
+ "Tessies",
+ "Tommies",
+ "Tracies",
+ "Trekkies",
+ "Valaries",
+ "Valeries",
+ "Valkyries",
+ "Vickies",
+ "Virgies",
+ "Willies",
+ "Winnies",
+ "Wylies",
+ "Yorkies",
+)
+
+si_sb_ies_ie = (
+ "aeries",
+ "baggies",
+ "belies",
+ "biggies",
+ "birdies",
+ "bogies",
+ "bonnies",
+ "boogies",
+ "bookies",
+ "bourgeoisies",
+ "brownies",
+ "budgies",
+ "caddies",
+ "calories",
+ "camaraderies",
+ "cockamamies",
+ "collies",
+ "cookies",
+ "coolies",
+ "cooties",
+ "coteries",
+ "crappies",
+ "curies",
+ "cutesies",
+ "dogies",
+ "eyrie",
+ "floozies",
+ "footsies",
+ "freebies",
+ "genies",
+ "goalies",
+ "groupies",
+ "hies",
+ "jalousies",
+ "junkies",
+ "kiddies",
+ "laddies",
+ "lassies",
+ "lies",
+ "lingeries",
+ "magpies",
+ "menageries",
+ "mommies",
+ "movies",
+ "neckties",
+ "newbies",
+ "nighties",
+ "oldies",
+ "organdies",
+ "overlies",
+ "pies",
+ "pinkies",
+ "pixies",
+ "potpies",
+ "prairies",
+ "quickies",
+ "reveries",
+ "rookies",
+ "rotisseries",
+ "softies",
+ "sorties",
+ "species",
+ "stymies",
+ "sweeties",
+ "ties",
+ "underlies",
+ "unties",
+ "veggies",
+ "vies",
+ "yuppies",
+ "zombies",
+)
+
+
+si_sb_oes_oe_case = (
+ "Chloes",
+ "Crusoes",
+ "Defoes",
+ "Faeroes",
+ "Ivanhoes",
+ "Joes",
+ "McEnroes",
+ "Moes",
+ "Monroes",
+ "Noes",
+ "Poes",
+ "Roscoes",
+ "Tahoes",
+ "Tippecanoes",
+ "Zoes",
+)
+
+si_sb_oes_oe = (
+ "aloes",
+ "backhoes",
+ "canoes",
+ "does",
+ "floes",
+ "foes",
+ "hoes",
+ "mistletoes",
+ "oboes",
+ "pekoes",
+ "roes",
+ "sloes",
+ "throes",
+ "tiptoes",
+ "toes",
+ "woes",
+)
+
+si_sb_z_zes = ("quartzes", "topazes")
+
+si_sb_zzes_zz = ("buzzes", "fizzes", "frizzes", "razzes")
+
+si_sb_ches_che_case = (
+ "Andromaches",
+ "Apaches",
+ "Blanches",
+ "Comanches",
+ "Nietzsches",
+ "Porsches",
+ "Roches",
+)
+
+si_sb_ches_che = (
+ "aches",
+ "avalanches",
+ "backaches",
+ "bellyaches",
+ "caches",
+ "cloches",
+ "creches",
+ "douches",
+ "earaches",
+ "fiches",
+ "headaches",
+ "heartaches",
+ "microfiches",
+ "niches",
+ "pastiches",
+ "psyches",
+ "quiches",
+ "stomachaches",
+ "toothaches",
+)
+
+si_sb_xes_xe = ("annexes", "axes", "deluxes", "pickaxes")
+
+si_sb_sses_sse_case = ("Hesses", "Jesses", "Larousses", "Matisses")
+si_sb_sses_sse = (
+ "bouillabaisses",
+ "crevasses",
+ "demitasses",
+ "impasses",
+ "mousses",
+ "posses",
+)
+
+si_sb_ves_ve_case = (
+ # *[nwl]ives -> [nwl]live
+ "Clives",
+ "Palmolives",
+)
+si_sb_ves_ve = (
+ # *[^d]eaves -> eave
+ "interweaves",
+ "weaves",
+ # *[nwl]ives -> [nwl]live
+ "olives",
+ # *[eoa]lves -> [eoa]lve
+ "bivalves",
+ "dissolves",
+ "resolves",
+ "salves",
+ "twelves",
+ "valves",
+)
+
+
+plverb_special_s = enclose(
+ "|".join(
+ [pl_sb_singular_s]
+ + pl_sb_uninflected_s
+ + list(pl_sb_irregular_s.keys())
+ + ["(.*[csx])is", "(.*)ceps", "[A-Z].*s"]
+ )
+)
+
+pl_sb_postfix_adj = {
+ "general": [r"(?!major|lieutenant|brigadier|adjutant|.*star)\S+"],
+ "martial": ["court"],
+ "force": ["pound"],
+}
+
+for k in list(pl_sb_postfix_adj.keys()):
+ pl_sb_postfix_adj[k] = enclose(
+ enclose("|".join(pl_sb_postfix_adj[k])) + "(?=(?:-|\\s+)%s)" % k
+ )
+
+pl_sb_postfix_adj_stems = "(" + "|".join(list(pl_sb_postfix_adj.values())) + ")(.*)"
+
+
+# PLURAL WORDS ENDING IS es GO TO SINGULAR is
+
+si_sb_es_is = (
+ "amanuenses",
+ "amniocenteses",
+ "analyses",
+ "antitheses",
+ "apotheoses",
+ "arterioscleroses",
+ "atheroscleroses",
+ "axes",
+ # 'bases', # bases -> basis
+ "catalyses",
+ "catharses",
+ "chasses",
+ "cirrhoses",
+ "cocces",
+ "crises",
+ "diagnoses",
+ "dialyses",
+ "diereses",
+ "electrolyses",
+ "emphases",
+ "exegeses",
+ "geneses",
+ "halitoses",
+ "hydrolyses",
+ "hypnoses",
+ "hypotheses",
+ "hystereses",
+ "metamorphoses",
+ "metastases",
+ "misdiagnoses",
+ "mitoses",
+ "mononucleoses",
+ "narcoses",
+ "necroses",
+ "nemeses",
+ "neuroses",
+ "oases",
+ "osmoses",
+ "osteoporoses",
+ "paralyses",
+ "parentheses",
+ "parthenogeneses",
+ "periphrases",
+ "photosyntheses",
+ "probosces",
+ "prognoses",
+ "prophylaxes",
+ "prostheses",
+ "preces",
+ "psoriases",
+ "psychoanalyses",
+ "psychokineses",
+ "psychoses",
+ "scleroses",
+ "scolioses",
+ "sepses",
+ "silicoses",
+ "symbioses",
+ "synopses",
+ "syntheses",
+ "taxes",
+ "telekineses",
+ "theses",
+ "thromboses",
+ "tuberculoses",
+ "urinalyses",
+)
+
+pl_prep_list = """
+ about above across after among around at athwart before behind
+ below beneath beside besides between betwixt beyond but by
+ during except for from in into near of off on onto out over
+ since till to under until unto upon with""".split()
+
+pl_prep_list_da = pl_prep_list + ["de", "du", "da"]
+
+pl_prep_bysize = bysize(pl_prep_list_da)
+
+pl_prep = enclose("|".join(pl_prep_list_da))
+
+pl_sb_prep_dual_compound = (
+ r"(.*?)((?:-|\s+)(?:" + pl_prep + r")(?:-|\s+))a(?:-|\s+)(.*)"
+)
+
+
+singular_pronoun_genders = {
+ "neuter",
+ "feminine",
+ "masculine",
+ "gender-neutral",
+ "feminine or masculine",
+ "masculine or feminine",
+}
+
+pl_pron_nom = {
+ # NOMINATIVE REFLEXIVE
+ "i": "we",
+ "myself": "ourselves",
+ "you": "you",
+ "yourself": "yourselves",
+ "she": "they",
+ "herself": "themselves",
+ "he": "they",
+ "himself": "themselves",
+ "it": "they",
+ "itself": "themselves",
+ "they": "they",
+ "themself": "themselves",
+ # POSSESSIVE
+ "mine": "ours",
+ "yours": "yours",
+ "hers": "theirs",
+ "his": "theirs",
+ "its": "theirs",
+ "theirs": "theirs",
+}
+
+si_pron = {}
+si_pron["nom"] = {v: k for (k, v) in pl_pron_nom.items()}
+si_pron["nom"]["we"] = "I"
+
+
+pl_pron_acc = {
+ # ACCUSATIVE REFLEXIVE
+ "me": "us",
+ "myself": "ourselves",
+ "you": "you",
+ "yourself": "yourselves",
+ "her": "them",
+ "herself": "themselves",
+ "him": "them",
+ "himself": "themselves",
+ "it": "them",
+ "itself": "themselves",
+ "them": "them",
+ "themself": "themselves",
+}
+
+pl_pron_acc_keys = enclose("|".join(list(pl_pron_acc.keys())))
+pl_pron_acc_keys_bysize = bysize(list(pl_pron_acc.keys()))
+
+si_pron["acc"] = {v: k for (k, v) in pl_pron_acc.items()}
+
+for thecase, plur, gend, sing in (
+ ("nom", "they", "neuter", "it"),
+ ("nom", "they", "feminine", "she"),
+ ("nom", "they", "masculine", "he"),
+ ("nom", "they", "gender-neutral", "they"),
+ ("nom", "they", "feminine or masculine", "she or he"),
+ ("nom", "they", "masculine or feminine", "he or she"),
+ ("nom", "themselves", "neuter", "itself"),
+ ("nom", "themselves", "feminine", "herself"),
+ ("nom", "themselves", "masculine", "himself"),
+ ("nom", "themselves", "gender-neutral", "themself"),
+ ("nom", "themselves", "feminine or masculine", "herself or himself"),
+ ("nom", "themselves", "masculine or feminine", "himself or herself"),
+ ("nom", "theirs", "neuter", "its"),
+ ("nom", "theirs", "feminine", "hers"),
+ ("nom", "theirs", "masculine", "his"),
+ ("nom", "theirs", "gender-neutral", "theirs"),
+ ("nom", "theirs", "feminine or masculine", "hers or his"),
+ ("nom", "theirs", "masculine or feminine", "his or hers"),
+ ("acc", "them", "neuter", "it"),
+ ("acc", "them", "feminine", "her"),
+ ("acc", "them", "masculine", "him"),
+ ("acc", "them", "gender-neutral", "them"),
+ ("acc", "them", "feminine or masculine", "her or him"),
+ ("acc", "them", "masculine or feminine", "him or her"),
+ ("acc", "themselves", "neuter", "itself"),
+ ("acc", "themselves", "feminine", "herself"),
+ ("acc", "themselves", "masculine", "himself"),
+ ("acc", "themselves", "gender-neutral", "themself"),
+ ("acc", "themselves", "feminine or masculine", "herself or himself"),
+ ("acc", "themselves", "masculine or feminine", "himself or herself"),
+):
+ try:
+ si_pron[thecase][plur][gend] = sing
+ except TypeError:
+ si_pron[thecase][plur] = {}
+ si_pron[thecase][plur][gend] = sing
+
+
+si_pron_acc_keys = enclose("|".join(list(si_pron["acc"].keys())))
+si_pron_acc_keys_bysize = bysize(list(si_pron["acc"].keys()))
+
+
+def get_si_pron(thecase, word, gender):
+ try:
+ sing = si_pron[thecase][word]
+ except KeyError:
+ raise # not a pronoun
+ try:
+ return sing[gender] # has several types due to gender
+ except TypeError:
+ return sing # answer independent of gender
+
+
+plverb_irregular_pres = {
+ # 1st PERS. SING. 2ND PERS. SING. 3RD PERS. SINGULAR
+ # 3RD PERS. (INDET.)
+ "am": "are",
+ "are": "are",
+ "is": "are",
+ "was": "were",
+ "were": "were",
+ "was": "were",
+ "have": "have",
+ "have": "have",
+ "has": "have",
+ "do": "do",
+ "do": "do",
+ "does": "do",
+}
+
+plverb_ambiguous_pres = {
+ # 1st PERS. SING. 2ND PERS. SING. 3RD PERS. SINGULAR
+ # 3RD PERS. (INDET.)
+ "act": "act",
+ "act": "act",
+ "acts": "act",
+ "blame": "blame",
+ "blame": "blame",
+ "blames": "blame",
+ "can": "can",
+ "can": "can",
+ "can": "can",
+ "must": "must",
+ "must": "must",
+ "must": "must",
+ "fly": "fly",
+ "fly": "fly",
+ "flies": "fly",
+ "copy": "copy",
+ "copy": "copy",
+ "copies": "copy",
+ "drink": "drink",
+ "drink": "drink",
+ "drinks": "drink",
+ "fight": "fight",
+ "fight": "fight",
+ "fights": "fight",
+ "fire": "fire",
+ "fire": "fire",
+ "fires": "fire",
+ "like": "like",
+ "like": "like",
+ "likes": "like",
+ "look": "look",
+ "look": "look",
+ "looks": "look",
+ "make": "make",
+ "make": "make",
+ "makes": "make",
+ "reach": "reach",
+ "reach": "reach",
+ "reaches": "reach",
+ "run": "run",
+ "run": "run",
+ "runs": "run",
+ "sink": "sink",
+ "sink": "sink",
+ "sinks": "sink",
+ "sleep": "sleep",
+ "sleep": "sleep",
+ "sleeps": "sleep",
+ "view": "view",
+ "view": "view",
+ "views": "view",
+}
+
+plverb_ambiguous_pres_keys = enclose("|".join(list(plverb_ambiguous_pres.keys())))
+
+
+plverb_irregular_non_pres = (
+ "did",
+ "had",
+ "ate",
+ "made",
+ "put",
+ "spent",
+ "fought",
+ "sank",
+ "gave",
+ "sought",
+ "shall",
+ "could",
+ "ought",
+ "should",
+)
+
+plverb_ambiguous_non_pres = enclose(
+ "|".join(("thought", "saw", "bent", "will", "might", "cut"))
+)
+
+# "..oes" -> "..oe" (the rest are "..oes" -> "o")
+
+pl_v_oes_oe = ("canoes", "floes", "oboes", "roes", "throes", "woes")
+pl_v_oes_oe_endings_size4 = ("hoes", "toes")
+pl_v_oes_oe_endings_size5 = ("shoes",)
+
+
+pl_count_zero = ("0", "no", "zero", "nil")
+
+
+pl_count_one = ("1", "a", "an", "one", "each", "every", "this", "that")
+
+pl_adj_special = {"a": "some", "an": "some", "this": "these", "that": "those"}
+
+pl_adj_special_keys = enclose("|".join(list(pl_adj_special.keys())))
+
+pl_adj_poss = {
+ "my": "our",
+ "your": "your",
+ "its": "their",
+ "her": "their",
+ "his": "their",
+ "their": "their",
+}
+
+pl_adj_poss_keys = enclose("|".join(list(pl_adj_poss.keys())))
+
+
+# 2. INDEFINITE ARTICLES
+
+# THIS PATTERN MATCHES STRINGS OF CAPITALS STARTING WITH A "VOWEL-SOUND"
+# CONSONANT FOLLOWED BY ANOTHER CONSONANT, AND WHICH ARE NOT LIKELY
+# TO BE REAL WORDS (OH, ALL RIGHT THEN, IT'S JUST MAGIC!)
+
+A_abbrev = r"""
+(?! FJO | [HLMNS]Y. | RY[EO] | SQU
+ | ( F[LR]? | [HL] | MN? | N | RH? | S[CHKLMNPTVW]? | X(YL)?) [AEIOU])
+[FHLMNRSX][A-Z]
+"""
+
+# THIS PATTERN CODES THE BEGINNINGS OF ALL ENGLISH WORDS BEGINING WITH A
+# 'y' FOLLOWED BY A CONSONANT. ANY OTHER Y-CONSONANT PREFIX THEREFORE
+# IMPLIES AN ABBREVIATION.
+
+A_y_cons = "y(b[lor]|cl[ea]|fere|gg|p[ios]|rou|tt)"
+
+# EXCEPTIONS TO EXCEPTIONS
+
+A_explicit_a = enclose("|".join(("unabomber", "unanimous", "US")))
+
+A_explicit_an = enclose(
+ "|".join(("euler", "hour(?!i)", "heir", "honest", "hono[ur]", "mpeg"))
+)
+
+A_ordinal_an = enclose("|".join(("[aefhilmnorsx]-?th",)))
+
+A_ordinal_a = enclose("|".join(("[bcdgjkpqtuvwyz]-?th",)))
+
+
+# NUMERICAL INFLECTIONS
+
+nth = {
+ 0: "th",
+ 1: "st",
+ 2: "nd",
+ 3: "rd",
+ 4: "th",
+ 5: "th",
+ 6: "th",
+ 7: "th",
+ 8: "th",
+ 9: "th",
+ 11: "th",
+ 12: "th",
+ 13: "th",
+}
+
+ordinal = dict(
+ ty="tieth",
+ one="first",
+ two="second",
+ three="third",
+ five="fifth",
+ eight="eighth",
+ nine="ninth",
+ twelve="twelfth",
+)
+
+ordinal_suff = "|".join(list(ordinal.keys()))
+
+
+# NUMBERS
+
+unit = ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
+teen = [
+ "ten",
+ "eleven",
+ "twelve",
+ "thirteen",
+ "fourteen",
+ "fifteen",
+ "sixteen",
+ "seventeen",
+ "eighteen",
+ "nineteen",
+]
+ten = [
+ "",
+ "",
+ "twenty",
+ "thirty",
+ "forty",
+ "fifty",
+ "sixty",
+ "seventy",
+ "eighty",
+ "ninety",
+]
+mill = [
+ " ",
+ " thousand",
+ " million",
+ " billion",
+ " trillion",
+ " quadrillion",
+ " quintillion",
+ " sextillion",
+ " septillion",
+ " octillion",
+ " nonillion",
+ " decillion",
+]
+
+
+# SUPPORT CLASSICAL PLURALIZATIONS
+
+def_classical = dict(
+ all=False, zero=False, herd=False, names=True, persons=False, ancient=False
+)
+
+all_classical = {k: True for k in list(def_classical.keys())}
+no_classical = {k: False for k in list(def_classical.keys())}
+
+
+# Maps strings to built-in constant types
+string_to_constant = {"True": True, "False": False, "None": None}
+
+
+class engine:
+ def __init__(self):
+
+ self.classical_dict = def_classical.copy()
+ self.persistent_count = None
+ self.mill_count = 0
+ self.pl_sb_user_defined = []
+ self.pl_v_user_defined = []
+ self.pl_adj_user_defined = []
+ self.si_sb_user_defined = []
+ self.A_a_user_defined = []
+ self.thegender = "neuter"
+
+ deprecated_methods = dict(
+ pl="plural",
+ plnoun="plural_noun",
+ plverb="plural_verb",
+ pladj="plural_adj",
+ sinoun="single_noun",
+ prespart="present_participle",
+ numwords="number_to_words",
+ plequal="compare",
+ plnounequal="compare_nouns",
+ plverbequal="compare_verbs",
+ pladjequal="compare_adjs",
+ wordlist="join",
+ )
+
+ def __getattr__(self, meth):
+ if meth in self.deprecated_methods:
+ print3(
+ "{}() deprecated, use {}()".format(meth, self.deprecated_methods[meth])
+ )
+ raise DeprecationWarning
+ raise AttributeError
+
+ def defnoun(self, singular, plural):
+ """
+ Set the noun plural of singular to plural.
+
+ """
+ self.checkpat(singular)
+ self.checkpatplural(plural)
+ self.pl_sb_user_defined.extend((singular, plural))
+ self.si_sb_user_defined.extend((plural, singular))
+ return 1
+
+ def defverb(self, s1, p1, s2, p2, s3, p3):
+ """
+ Set the verb plurals for s1, s2 and s3 to p1, p2 and p3 respectively.
+
+ Where 1, 2 and 3 represent the 1st, 2nd and 3rd person forms of the verb.
+
+ """
+ self.checkpat(s1)
+ self.checkpat(s2)
+ self.checkpat(s3)
+ self.checkpatplural(p1)
+ self.checkpatplural(p2)
+ self.checkpatplural(p3)
+ self.pl_v_user_defined.extend((s1, p1, s2, p2, s3, p3))
+ return 1
+
+ def defadj(self, singular, plural):
+ """
+ Set the adjective plural of singular to plural.
+
+ """
+ self.checkpat(singular)
+ self.checkpatplural(plural)
+ self.pl_adj_user_defined.extend((singular, plural))
+ return 1
+
+ def defa(self, pattern):
+ """
+ Define the indefinate article as 'a' for words matching pattern.
+
+ """
+ self.checkpat(pattern)
+ self.A_a_user_defined.extend((pattern, "a"))
+ return 1
+
+ def defan(self, pattern):
+ """
+ Define the indefinate article as 'an' for words matching pattern.
+
+ """
+ self.checkpat(pattern)
+ self.A_a_user_defined.extend((pattern, "an"))
+ return 1
+
+ def checkpat(self, pattern):
+ """
+ check for errors in a regex pattern
+ """
+ if pattern is None:
+ return
+ try:
+ re.match(pattern, "")
+ except re.error:
+ print3("\nBad user-defined singular pattern:\n\t%s\n" % pattern)
+ raise BadUserDefinedPatternError
+
+ def checkpatplural(self, pattern):
+ """
+ check for errors in a regex replace pattern
+ """
+ return
+
+ def ud_match(self, word, wordlist):
+ for i in range(len(wordlist) - 2, -2, -2): # backwards through even elements
+ mo = re.search(r"^%s$" % wordlist[i], word, re.IGNORECASE)
+ if mo:
+ if wordlist[i + 1] is None:
+ return None
+ pl = re.sub(
+ r"\$(\d+)", r"\\1", wordlist[i + 1]
+ ) # change $n to \n for expand
+ return mo.expand(pl)
+ return None
+
+ def classical(self, **kwargs):
+ """
+ turn classical mode on and off for various categories
+
+ turn on all classical modes:
+ classical()
+ classical(all=True)
+
+ turn on or off specific claassical modes:
+ e.g.
+ classical(herd=True)
+ classical(names=False)
+
+ By default all classical modes are off except names.
+
+ unknown value in args or key in kwargs rasies
+ exception: UnknownClasicalModeError
+
+ """
+ classical_mode = list(def_classical.keys())
+ if not kwargs:
+ self.classical_dict = all_classical.copy()
+ return
+ if "all" in kwargs:
+ if kwargs["all"]:
+ self.classical_dict = all_classical.copy()
+ else:
+ self.classical_dict = no_classical.copy()
+
+ for k, v in list(kwargs.items()):
+ if k in classical_mode:
+ self.classical_dict[k] = v
+ else:
+ raise UnknownClassicalModeError
+
+ def num(self, count=None, show=None): # (;$count,$show)
+ """
+ Set the number to be used in other method calls.
+
+ Returns count.
+
+ Set show to False to return '' instead.
+
+ """
+ if count is not None:
+ try:
+ self.persistent_count = int(count)
+ except ValueError:
+ raise BadNumValueError
+ if (show is None) or show:
+ return str(count)
+ else:
+ self.persistent_count = None
+ return ""
+
+ def gender(self, gender):
+ """
+ set the gender for the singular of plural pronouns
+
+ can be one of:
+ 'neuter' ('they' -> 'it')
+ 'feminine' ('they' -> 'she')
+ 'masculine' ('they' -> 'he')
+ 'gender-neutral' ('they' -> 'they')
+ 'feminine or masculine' ('they' -> 'she or he')
+ 'masculine or feminine' ('they' -> 'he or she')
+ """
+ if gender in singular_pronoun_genders:
+ self.thegender = gender
+ else:
+ raise BadGenderError
+
+ def _get_value_from_ast(self, obj):
+ """
+ Return the value of the ast object.
+ """
+ if isinstance(obj, ast.Num):
+ return obj.n
+ elif isinstance(obj, ast.Str):
+ return obj.s
+ elif isinstance(obj, ast.List):
+ return [self._get_value_from_ast(e) for e in obj.elts]
+ elif isinstance(obj, ast.Tuple):
+ return tuple([self._get_value_from_ast(e) for e in obj.elts])
+
+ # None, True and False are NameConstants in Py3.4 and above.
+ elif sys.version_info.major >= 3 and isinstance(obj, ast.NameConstant):
+ return obj.value
+
+ # For python versions below 3.4
+ elif isinstance(obj, ast.Name) and (obj.id in ["True", "False", "None"]):
+ return string_to_constant[obj.id]
+
+ # Probably passed a variable name.
+ # Or passed a single word without wrapping it in quotes as an argument
+ # ex: p.inflect("I plural(see)") instead of p.inflect("I plural('see')")
+ raise NameError("name '%s' is not defined" % obj.id)
+
+ def _string_to_substitute(self, mo, methods_dict):
+ """
+ Return the string to be substituted for the match.
+ """
+ matched_text, f_name = mo.groups()
+ # matched_text is the complete match string. e.g. plural_noun(cat)
+ # f_name is the function name. e.g. plural_noun
+
+ # Return matched_text if function name is not in methods_dict
+ if f_name not in methods_dict:
+ return matched_text
+
+ # Parse the matched text
+ a_tree = ast.parse(matched_text)
+
+ # get the args and kwargs from ast objects
+ args_list = [self._get_value_from_ast(a) for a in a_tree.body[0].value.args]
+ kwargs_list = {
+ kw.arg: self._get_value_from_ast(kw.value)
+ for kw in a_tree.body[0].value.keywords
+ }
+
+ # Call the corresponding function
+ return methods_dict[f_name](*args_list, **kwargs_list)
+
+ # 0. PERFORM GENERAL INFLECTIONS IN A STRING
+
+ def inflect(self, text):
+ """
+ Perform inflections in a string.
+
+ e.g. inflect('The plural of cat is plural(cat)') returns
+ 'The plural of cat is cats'
+
+ can use plural, plural_noun, plural_verb, plural_adj,
+ singular_noun, a, an, no, ordinal, number_to_words,
+ and prespart
+
+ """
+ save_persistent_count = self.persistent_count
+
+ # Dictionary of allowed methods
+ methods_dict = {
+ "plural": self.plural,
+ "plural_adj": self.plural_adj,
+ "plural_noun": self.plural_noun,
+ "plural_verb": self.plural_verb,
+ "singular_noun": self.singular_noun,
+ "a": self.a,
+ "an": self.a,
+ "no": self.no,
+ "ordinal": self.ordinal,
+ "number_to_words": self.number_to_words,
+ "present_participle": self.present_participle,
+ "num": self.num,
+ }
+
+ # Regular expression to find Python's function call syntax
+ functions_re = re.compile(r"((\w+)\([^)]*\)*)", re.IGNORECASE)
+ output = functions_re.sub(
+ lambda mo: self._string_to_substitute(mo, methods_dict), text
+ )
+ self.persistent_count = save_persistent_count
+ return output
+
+ # ## PLURAL SUBROUTINES
+
+ def postprocess(self, orig, inflected):
+ if "|" in inflected:
+ inflected = inflected.split("|")[self.classical_dict["all"]]
+ result = inflected.split(" ")
+ # Try to fix word wise capitalization
+ for index, word in enumerate(orig.split(" ")):
+ if word == "I":
+ # Is this the only word for exceptions like this
+ # Where the original is fully capitalized
+ # without 'meaning' capitalization?
+ # Also this fails to handle a capitalizaion in context
+ continue
+ if word.capitalize() == word:
+ result[index] = result[index].capitalize()
+ if word == word.upper():
+ result[index] = result[index].upper()
+ return " ".join(result)
+
+ def partition_word(self, text):
+ mo = re.search(r"\A(\s*)(.+?)(\s*)\Z", text)
+ try:
+ return mo.group(1), mo.group(2), mo.group(3)
+ except AttributeError: # empty string
+ return "", "", ""
+
+ def plural(self, text, count=None):
+ """
+ Return the plural of text.
+
+ If count supplied, then return text if count is one of:
+ 1, a, an, one, each, every, this, that
+ otherwise return the plural.
+
+ Whitespace at the start and end is preserved.
+
+ """
+ pre, word, post = self.partition_word(text)
+ if not word:
+ return text
+ plural = self.postprocess(
+ word,
+ self._pl_special_adjective(word, count)
+ or self._pl_special_verb(word, count)
+ or self._plnoun(word, count),
+ )
+ return "{}{}{}".format(pre, plural, post)
+
+ def plural_noun(self, text, count=None):
+ """
+ Return the plural of text, where text is a noun.
+
+ If count supplied, then return text if count is one of:
+ 1, a, an, one, each, every, this, that
+ otherwise return the plural.
+
+ Whitespace at the start and end is preserved.
+
+ """
+ pre, word, post = self.partition_word(text)
+ if not word:
+ return text
+ plural = self.postprocess(word, self._plnoun(word, count))
+ return "{}{}{}".format(pre, plural, post)
+
+ def plural_verb(self, text, count=None):
+ """
+ Return the plural of text, where text is a verb.
+
+ If count supplied, then return text if count is one of:
+ 1, a, an, one, each, every, this, that
+ otherwise return the plural.
+
+ Whitespace at the start and end is preserved.
+
+ """
+ pre, word, post = self.partition_word(text)
+ if not word:
+ return text
+ plural = self.postprocess(
+ word,
+ self._pl_special_verb(word, count) or self._pl_general_verb(word, count),
+ )
+ return "{}{}{}".format(pre, plural, post)
+
+ def plural_adj(self, text, count=None):
+ """
+ Return the plural of text, where text is an adjective.
+
+ If count supplied, then return text if count is one of:
+ 1, a, an, one, each, every, this, that
+ otherwise return the plural.
+
+ Whitespace at the start and end is preserved.
+
+ """
+ pre, word, post = self.partition_word(text)
+ if not word:
+ return text
+ plural = self.postprocess(word, self._pl_special_adjective(word, count) or word)
+ return "{}{}{}".format(pre, plural, post)
+
+ def compare(self, word1, word2):
+ """
+ compare word1 and word2 for equality regardless of plurality
+
+ return values:
+ eq - the strings are equal
+ p:s - word1 is the plural of word2
+ s:p - word2 is the plural of word1
+ p:p - word1 and word2 are two different plural forms of the one word
+ False - otherwise
+
+ """
+ return (
+ self._plequal(word1, word2, self.plural_noun)
+ or self._plequal(word1, word2, self.plural_verb)
+ or self._plequal(word1, word2, self.plural_adj)
+ )
+
+ def compare_nouns(self, word1, word2):
+ """
+ compare word1 and word2 for equality regardless of plurality
+ word1 and word2 are to be treated as nouns
+
+ return values:
+ eq - the strings are equal
+ p:s - word1 is the plural of word2
+ s:p - word2 is the plural of word1
+ p:p - word1 and word2 are two different plural forms of the one word
+ False - otherwise
+
+ """
+ return self._plequal(word1, word2, self.plural_noun)
+
+ def compare_verbs(self, word1, word2):
+ """
+ compare word1 and word2 for equality regardless of plurality
+ word1 and word2 are to be treated as verbs
+
+ return values:
+ eq - the strings are equal
+ p:s - word1 is the plural of word2
+ s:p - word2 is the plural of word1
+ p:p - word1 and word2 are two different plural forms of the one word
+ False - otherwise
+
+ """
+ return self._plequal(word1, word2, self.plural_verb)
+
+ def compare_adjs(self, word1, word2):
+ """
+ compare word1 and word2 for equality regardless of plurality
+ word1 and word2 are to be treated as adjectives
+
+ return values:
+ eq - the strings are equal
+ p:s - word1 is the plural of word2
+ s:p - word2 is the plural of word1
+ p:p - word1 and word2 are two different plural forms of the one word
+ False - otherwise
+
+ """
+ return self._plequal(word1, word2, self.plural_adj)
+
+ def singular_noun(self, text, count=None, gender=None):
+ """
+ Return the singular of text, where text is a plural noun.
+
+ If count supplied, then return the singular if count is one of:
+ 1, a, an, one, each, every, this, that or if count is None
+ otherwise return text unchanged.
+
+ Whitespace at the start and end is preserved.
+
+ """
+ pre, word, post = self.partition_word(text)
+ if not word:
+ return text
+ sing = self._sinoun(word, count=count, gender=gender)
+ if sing is not False:
+ plural = self.postprocess(
+ word, self._sinoun(word, count=count, gender=gender)
+ )
+ return "{}{}{}".format(pre, plural, post)
+ return False
+
+ def _plequal(self, word1, word2, pl):
+ classval = self.classical_dict.copy()
+ self.classical_dict = all_classical.copy()
+ if word1 == word2:
+ return "eq"
+ if word1 == pl(word2):
+ return "p:s"
+ if pl(word1) == word2:
+ return "s:p"
+ self.classical_dict = no_classical.copy()
+ if word1 == pl(word2):
+ return "p:s"
+ if pl(word1) == word2:
+ return "s:p"
+ self.classical_dict = classval.copy()
+
+ if pl == self.plural or pl == self.plural_noun:
+ if self._pl_check_plurals_N(word1, word2):
+ return "p:p"
+ if self._pl_check_plurals_N(word2, word1):
+ return "p:p"
+ if pl == self.plural or pl == self.plural_adj:
+ if self._pl_check_plurals_adj(word1, word2):
+ return "p:p"
+ return False
+
+ def _pl_reg_plurals(self, pair, stems, end1, end2):
+ pattern = r"({})({}\|\1{}|{}\|\1{})".format(stems, end1, end2, end2, end1)
+ return bool(re.search(pattern, pair))
+
+ def _pl_check_plurals_N(self, word1, word2):
+ stem_endings = (
+ (pl_sb_C_a_ata, "as", "ata"),
+ (pl_sb_C_is_ides, "is", "ides"),
+ (pl_sb_C_a_ae, "s", "e"),
+ (pl_sb_C_en_ina, "ens", "ina"),
+ (pl_sb_C_um_a, "ums", "a"),
+ (pl_sb_C_us_i, "uses", "i"),
+ (pl_sb_C_on_a, "ons", "a"),
+ (pl_sb_C_o_i_stems, "os", "i"),
+ (pl_sb_C_ex_ices, "exes", "ices"),
+ (pl_sb_C_ix_ices, "ixes", "ices"),
+ (pl_sb_C_i, "s", "i"),
+ (pl_sb_C_im, "s", "im"),
+ (".*eau", "s", "x"),
+ (".*ieu", "s", "x"),
+ (".*tri", "xes", "ces"),
+ (".{2,}[yia]n", "xes", "ges"),
+ )
+ pair = "{}|{}".format(word1, word2)
+
+ return (
+ pair in pl_sb_irregular_s.values()
+ or pair in pl_sb_irregular.values()
+ or pair in pl_sb_irregular_caps.values()
+ or any(
+ self._pl_reg_plurals(pair, stems, end1, end2)
+ for stems, end1, end2 in stem_endings
+ )
+ )
+
+ def _pl_check_plurals_adj(self, word1, word2):
+ word1a = word1[: word1.rfind("'")] if word1.endswith(("'s", "'")) else ""
+ word2a = word2[: word2.rfind("'")] if word2.endswith(("'s", "'")) else ""
+
+ return (
+ word1a
+ and word2a
+ and (
+ self._pl_check_plurals_N(word1a, word2a)
+ or self._pl_check_plurals_N(word2a, word1a)
+ )
+ )
+
+ def get_count(self, count=None):
+ if count is None and self.persistent_count is not None:
+ count = self.persistent_count
+
+ if count is not None:
+ count = (
+ 1
+ if (
+ (str(count) in pl_count_one)
+ or (
+ self.classical_dict["zero"]
+ and str(count).lower() in pl_count_zero
+ )
+ )
+ else 2
+ )
+ else:
+ count = ""
+ return count
+
+ # @profile
+ def _plnoun(self, word, count=None):
+ count = self.get_count(count)
+
+ # DEFAULT TO PLURAL
+
+ if count == 1:
+ return word
+
+ # HANDLE USER-DEFINED NOUNS
+
+ value = self.ud_match(word, self.pl_sb_user_defined)
+ if value is not None:
+ return value
+
+ # HANDLE EMPTY WORD, SINGULAR COUNT AND UNINFLECTED PLURALS
+
+ if word == "":
+ return word
+
+ lowerword = word.lower()
+
+ if lowerword in pl_sb_uninflected_complete:
+ return word
+
+ if word in pl_sb_uninflected_caps:
+ return word
+
+ for k, v in pl_sb_uninflected_bysize.items():
+ if lowerword[-k:] in v:
+ return word
+
+ if self.classical_dict["herd"] and lowerword in pl_sb_uninflected_herd:
+ return word
+
+ # HANDLE COMPOUNDS ("Governor General", "mother-in-law", "aide-de-camp", ETC.)
+
+ mo = re.search(r"^(?:%s)$" % pl_sb_postfix_adj_stems, word, re.IGNORECASE)
+ if mo and mo.group(2) != "":
+ return "{}{}".format(self._plnoun(mo.group(1), 2), mo.group(2))
+
+ if " a " in lowerword or "-a-" in lowerword:
+ mo = re.search(r"^(?:%s)$" % pl_sb_prep_dual_compound, word, re.IGNORECASE)
+ if mo and mo.group(2) != "" and mo.group(3) != "":
+ return "{}{}{}".format(
+ self._plnoun(mo.group(1), 2), mo.group(2), self._plnoun(mo.group(3))
+ )
+
+ lowersplit = lowerword.split(" ")
+ if len(lowersplit) >= 3:
+ for numword in range(1, len(lowersplit) - 1):
+ if lowersplit[numword] in pl_prep_list_da:
+ return " ".join(
+ lowersplit[: numword - 1]
+ + [self._plnoun(lowersplit[numword - 1], 2)]
+ + lowersplit[numword:]
+ )
+
+ # only pluralize denominators in units
+ mo = re.search(
+ r"(?P.+)( (%s) .+)" % "|".join(["per", "a"]), lowerword
+ )
+ if mo:
+ index = len(mo.group("denominator"))
+ return "{}{}".format(self._plnoun(word[:index]), word[index:])
+
+ # handle units given in degrees (only accept if
+ # there is no more than one word following)
+ # degree Celsius => degrees Celsius but degree
+ # fahrenheit hour => degree fahrenheit hours
+ if len(lowersplit) >= 2 and lowersplit[-2] in ["degree"]:
+ return " ".join([self._plnoun(lowersplit[0])] + lowersplit[1:])
+
+ lowersplit = lowerword.split("-")
+ if len(lowersplit) >= 3:
+ for numword in range(1, len(lowersplit) - 1):
+ if lowersplit[numword] in pl_prep_list_da:
+ return " ".join(
+ lowersplit[: numword - 1]
+ + [
+ self._plnoun(lowersplit[numword - 1], 2)
+ + "-"
+ + lowersplit[numword]
+ + "-"
+ ]
+ ) + " ".join(lowersplit[(numword + 1) :])
+
+ # HANDLE PRONOUNS
+
+ for k, v in pl_pron_acc_keys_bysize.items():
+ if lowerword[-k:] in v: # ends with accusivate pronoun
+ for pk, pv in pl_prep_bysize.items():
+ if lowerword[:pk] in pv: # starts with a prep
+ if lowerword.split() == [lowerword[:pk], lowerword[-k:]]:
+ # only whitespace in between
+ return lowerword[:-k] + pl_pron_acc[lowerword[-k:]]
+
+ try:
+ return pl_pron_nom[word.lower()]
+ except KeyError:
+ pass
+
+ try:
+ return pl_pron_acc[word.lower()]
+ except KeyError:
+ pass
+
+ # HANDLE ISOLATED IRREGULAR PLURALS
+
+ wordsplit = word.split()
+ wordlast = wordsplit[-1]
+ lowerwordlast = wordlast.lower()
+
+ if wordlast in list(pl_sb_irregular_caps.keys()):
+ llen = len(wordlast)
+ return "{}{}".format(word[:-llen], pl_sb_irregular_caps[wordlast])
+
+ if lowerwordlast in list(pl_sb_irregular.keys()):
+ llen = len(lowerwordlast)
+ return "{}{}".format(word[:-llen], pl_sb_irregular[lowerwordlast])
+
+ if (" ".join(wordsplit[-2:])).lower() in list(pl_sb_irregular_compound.keys()):
+ llen = len(
+ " ".join(wordsplit[-2:])
+ ) # TODO: what if 2 spaces between these words?
+ return "{}{}".format(
+ word[:-llen],
+ pl_sb_irregular_compound[(" ".join(wordsplit[-2:])).lower()],
+ )
+
+ if lowerword[-3:] == "quy":
+ return word[:-1] + "ies"
+
+ if lowerword[-6:] == "person":
+ if self.classical_dict["persons"]:
+ return word + "s"
+ else:
+ return word[:-4] + "ople"
+
+ # HANDLE FAMILIES OF IRREGULAR PLURALS
+
+ if lowerword[-3:] == "man":
+ for k, v in pl_sb_U_man_mans_bysize.items():
+ if lowerword[-k:] in v:
+ return word + "s"
+ for k, v in pl_sb_U_man_mans_caps_bysize.items():
+ if word[-k:] in v:
+ return word + "s"
+ return word[:-3] + "men"
+ if lowerword[-5:] == "mouse":
+ return word[:-5] + "mice"
+ if lowerword[-5:] == "louse":
+ return word[:-5] + "lice"
+ if lowerword[-5:] == "goose":
+ return word[:-5] + "geese"
+ if lowerword[-5:] == "tooth":
+ return word[:-5] + "teeth"
+ if lowerword[-4:] == "foot":
+ return word[:-4] + "feet"
+ if lowerword[-4:] == "taco":
+ return word[:-5] + "tacos"
+
+ if lowerword == "die":
+ return "dice"
+
+ # HANDLE UNASSIMILATED IMPORTS
+
+ if lowerword[-4:] == "ceps":
+ return word
+ if lowerword[-4:] == "zoon":
+ return word[:-2] + "a"
+ if lowerword[-3:] in ("cis", "sis", "xis"):
+ return word[:-2] + "es"
+
+ for lastlet, d, numend, post in (
+ ("h", pl_sb_U_ch_chs_bysize, None, "s"),
+ ("x", pl_sb_U_ex_ices_bysize, -2, "ices"),
+ ("x", pl_sb_U_ix_ices_bysize, -2, "ices"),
+ ("m", pl_sb_U_um_a_bysize, -2, "a"),
+ ("s", pl_sb_U_us_i_bysize, -2, "i"),
+ ("n", pl_sb_U_on_a_bysize, -2, "a"),
+ ("a", pl_sb_U_a_ae_bysize, None, "e"),
+ ):
+ if lowerword[-1] == lastlet: # this test to add speed
+ for k, v in d.items():
+ if lowerword[-k:] in v:
+ return word[:numend] + post
+
+ # HANDLE INCOMPLETELY ASSIMILATED IMPORTS
+
+ if self.classical_dict["ancient"]:
+ if lowerword[-4:] == "trix":
+ return word[:-1] + "ces"
+ if lowerword[-3:] in ("eau", "ieu"):
+ return word + "x"
+ if lowerword[-3:] in ("ynx", "inx", "anx") and len(word) > 4:
+ return word[:-1] + "ges"
+
+ for lastlet, d, numend, post in (
+ ("n", pl_sb_C_en_ina_bysize, -2, "ina"),
+ ("x", pl_sb_C_ex_ices_bysize, -2, "ices"),
+ ("x", pl_sb_C_ix_ices_bysize, -2, "ices"),
+ ("m", pl_sb_C_um_a_bysize, -2, "a"),
+ ("s", pl_sb_C_us_i_bysize, -2, "i"),
+ ("s", pl_sb_C_us_us_bysize, None, ""),
+ ("a", pl_sb_C_a_ae_bysize, None, "e"),
+ ("a", pl_sb_C_a_ata_bysize, None, "ta"),
+ ("s", pl_sb_C_is_ides_bysize, -1, "des"),
+ ("o", pl_sb_C_o_i_bysize, -1, "i"),
+ ("n", pl_sb_C_on_a_bysize, -2, "a"),
+ ):
+ if lowerword[-1] == lastlet: # this test to add speed
+ for k, v in d.items():
+ if lowerword[-k:] in v:
+ return word[:numend] + post
+
+ for d, numend, post in (
+ (pl_sb_C_i_bysize, None, "i"),
+ (pl_sb_C_im_bysize, None, "im"),
+ ):
+ for k, v in d.items():
+ if lowerword[-k:] in v:
+ return word[:numend] + post
+
+ # HANDLE SINGULAR NOUNS ENDING IN ...s OR OTHER SILIBANTS
+
+ if lowerword in pl_sb_singular_s_complete:
+ return word + "es"
+
+ for k, v in pl_sb_singular_s_bysize.items():
+ if lowerword[-k:] in v:
+ return word + "es"
+
+ if lowerword[-2:] == "es" and word[0] == word[0].upper():
+ return word + "es"
+
+ if lowerword[-1] == "z":
+ for k, v in pl_sb_z_zes_bysize.items():
+ if lowerword[-k:] in v:
+ return word + "es"
+
+ if lowerword[-2:-1] != "z":
+ return word + "zes"
+
+ if lowerword[-2:] == "ze":
+ for k, v in pl_sb_ze_zes_bysize.items():
+ if lowerword[-k:] in v:
+ return word + "s"
+
+ if lowerword[-2:] in ("ch", "sh", "zz", "ss") or lowerword[-1] == "x":
+ return word + "es"
+
+ # HANDLE ...f -> ...ves
+
+ if lowerword[-3:] in ("elf", "alf", "olf"):
+ return word[:-1] + "ves"
+ if lowerword[-3:] == "eaf" and lowerword[-4:-3] != "d":
+ return word[:-1] + "ves"
+ if lowerword[-4:] in ("nife", "life", "wife"):
+ return word[:-2] + "ves"
+ if lowerword[-3:] == "arf":
+ return word[:-1] + "ves"
+
+ # HANDLE ...y
+
+ if lowerword[-1] == "y":
+ if lowerword[-2:-1] in "aeiou" or len(word) == 1:
+ return word + "s"
+
+ if self.classical_dict["names"]:
+ if lowerword[-1] == "y" and word[0] == word[0].upper():
+ return word + "s"
+
+ return word[:-1] + "ies"
+
+ # HANDLE ...o
+
+ if lowerword in pl_sb_U_o_os_complete:
+ return word + "s"
+
+ for k, v in pl_sb_U_o_os_bysize.items():
+ if lowerword[-k:] in v:
+ return word + "s"
+
+ if lowerword[-2:] in ("ao", "eo", "io", "oo", "uo"):
+ return word + "s"
+
+ if lowerword[-1] == "o":
+ return word + "es"
+
+ # OTHERWISE JUST ADD ...s
+
+ return "%ss" % word
+
+ def _pl_special_verb(self, word, count=None):
+ if self.classical_dict["zero"] and str(count).lower() in pl_count_zero:
+ return False
+ count = self.get_count(count)
+
+ if count == 1:
+ return word
+
+ # HANDLE USER-DEFINED VERBS
+
+ value = self.ud_match(word, self.pl_v_user_defined)
+ if value is not None:
+ return value
+
+ # HANDLE IRREGULAR PRESENT TENSE (SIMPLE AND COMPOUND)
+
+ lowerword = word.lower()
+ try:
+ firstword = lowerword.split()[0]
+ except IndexError:
+ return False # word is ''
+
+ if firstword in list(plverb_irregular_pres.keys()):
+ return "{}{}".format(
+ plverb_irregular_pres[firstword], word[len(firstword) :]
+ )
+
+ # HANDLE IRREGULAR FUTURE, PRETERITE AND PERFECT TENSES
+
+ if firstword in plverb_irregular_non_pres:
+ return word
+
+ # HANDLE PRESENT NEGATIONS (SIMPLE AND COMPOUND)
+
+ if firstword.endswith("n't") and firstword[:-3] in list(
+ plverb_irregular_pres.keys()
+ ):
+ return "{}n't{}".format(
+ plverb_irregular_pres[firstword[:-3]], word[len(firstword) :]
+ )
+
+ if firstword.endswith("n't"):
+ return word
+
+ # HANDLE SPECIAL CASES
+
+ mo = re.search(r"^(%s)$" % plverb_special_s, word)
+ if mo:
+ return False
+ if re.search(r"\s", word):
+ return False
+ if lowerword == "quizzes":
+ return "quiz"
+
+ # HANDLE STANDARD 3RD PERSON (CHOP THE ...(e)s OFF SINGLE WORDS)
+
+ if (
+ lowerword[-4:] in ("ches", "shes", "zzes", "sses")
+ or lowerword[-3:] == "xes"
+ ):
+ return word[:-2]
+
+ if lowerword[-3:] == "ies" and len(word) > 3:
+ return lowerword[:-3] + "y"
+
+ if (
+ lowerword in pl_v_oes_oe
+ or lowerword[-4:] in pl_v_oes_oe_endings_size4
+ or lowerword[-5:] in pl_v_oes_oe_endings_size5
+ ):
+ return word[:-1]
+
+ if lowerword.endswith("oes") and len(word) > 3:
+ return lowerword[:-2]
+
+ mo = re.search(r"^(.*[^s])s$", word, re.IGNORECASE)
+ if mo:
+ return mo.group(1)
+
+ # OTHERWISE, A REGULAR VERB (HANDLE ELSEWHERE)
+
+ return False
+
+ def _pl_general_verb(self, word, count=None):
+ count = self.get_count(count)
+
+ if count == 1:
+ return word
+
+ # HANDLE AMBIGUOUS PRESENT TENSES (SIMPLE AND COMPOUND)
+
+ mo = re.search(
+ r"^(%s)((\s.*)?)$" % plverb_ambiguous_pres_keys, word, re.IGNORECASE
+ )
+ if mo:
+ return "{}{}".format(
+ plverb_ambiguous_pres[mo.group(1).lower()], mo.group(2)
+ )
+
+ # HANDLE AMBIGUOUS PRETERITE AND PERFECT TENSES
+
+ mo = re.search(
+ r"^(%s)((\s.*)?)$" % plverb_ambiguous_non_pres, word, re.IGNORECASE
+ )
+ if mo:
+ return word
+
+ # OTHERWISE, 1st OR 2ND PERSON IS UNINFLECTED
+
+ return word
+
+ def _pl_special_adjective(self, word, count=None):
+ count = self.get_count(count)
+
+ if count == 1:
+ return word
+
+ # HANDLE USER-DEFINED ADJECTIVES
+
+ value = self.ud_match(word, self.pl_adj_user_defined)
+ if value is not None:
+ return value
+
+ # HANDLE KNOWN CASES
+
+ mo = re.search(r"^(%s)$" % pl_adj_special_keys, word, re.IGNORECASE)
+ if mo:
+ return "%s" % (pl_adj_special[mo.group(1).lower()])
+
+ # HANDLE POSSESSIVES
+
+ mo = re.search(r"^(%s)$" % pl_adj_poss_keys, word, re.IGNORECASE)
+ if mo:
+ return "%s" % (pl_adj_poss[mo.group(1).lower()])
+
+ mo = re.search(r"^(.*)'s?$", word)
+ if mo:
+ pl = self.plural_noun(mo.group(1))
+ trailing_s = "" if pl[-1] == "s" else "s"
+ return "{}'{}".format(pl, trailing_s)
+
+ # OTHERWISE, NO IDEA
+
+ return False
+
+ # @profile
+ def _sinoun(self, word, count=None, gender=None):
+ count = self.get_count(count)
+
+ # DEFAULT TO PLURAL
+
+ if count == 2:
+ return word
+
+ # SET THE GENDER
+
+ try:
+ if gender is None:
+ gender = self.thegender
+ elif gender not in singular_pronoun_genders:
+ raise BadGenderError
+ except (TypeError, IndexError):
+ raise BadGenderError
+
+ # HANDLE USER-DEFINED NOUNS
+
+ value = self.ud_match(word, self.si_sb_user_defined)
+ if value is not None:
+ return value
+
+ # HANDLE EMPTY WORD, SINGULAR COUNT AND UNINFLECTED PLURALS
+
+ if word == "":
+ return word
+
+ lowerword = word.lower()
+
+ if word in si_sb_ois_oi_case:
+ return word[:-1]
+
+ if lowerword in pl_sb_uninflected_complete:
+ return word
+
+ if word in pl_sb_uninflected_caps:
+ return word
+
+ for k, v in pl_sb_uninflected_bysize.items():
+ if lowerword[-k:] in v:
+ return word
+
+ if self.classical_dict["herd"] and lowerword in pl_sb_uninflected_herd:
+ return word
+
+ if lowerword in pl_sb_C_us_us:
+ return word
+
+ # HANDLE COMPOUNDS ("Governor General", "mother-in-law", "aide-de-camp", ETC.)
+
+ mo = re.search(r"^(?:%s)$" % pl_sb_postfix_adj_stems, word, re.IGNORECASE)
+ if mo and mo.group(2) != "":
+ return "{}{}".format(
+ self._sinoun(mo.group(1), 1, gender=gender), mo.group(2)
+ )
+
+ lowersplit = lowerword.split(" ")
+ if len(lowersplit) >= 3:
+ for numword in range(1, len(lowersplit) - 1):
+ if lowersplit[numword] in pl_prep_list_da:
+ return " ".join(
+ lowersplit[: numword - 1]
+ + [
+ self._sinoun(lowersplit[numword - 1], 1, gender=gender)
+ or lowersplit[numword - 1]
+ ]
+ + lowersplit[numword:]
+ )
+
+ lowersplit = lowerword.split("-")
+ if len(lowersplit) >= 3:
+ for numword in range(1, len(lowersplit) - 1):
+ if lowersplit[numword] in pl_prep_list_da:
+ return " ".join(
+ lowersplit[: numword - 1]
+ + [
+ (
+ self._sinoun(lowersplit[numword - 1], 1, gender=gender)
+ or lowersplit[numword - 1]
+ )
+ + "-"
+ + lowersplit[numword]
+ + "-"
+ ]
+ ) + " ".join(lowersplit[(numword + 1) :])
+
+ # HANDLE PRONOUNS
+
+ for k, v in si_pron_acc_keys_bysize.items():
+ if lowerword[-k:] in v: # ends with accusivate pronoun
+ for pk, pv in pl_prep_bysize.items():
+ if lowerword[:pk] in pv: # starts with a prep
+ if lowerword.split() == [lowerword[:pk], lowerword[-k:]]:
+ # only whitespace in between
+ return lowerword[:-k] + get_si_pron(
+ "acc", lowerword[-k:], gender
+ )
+
+ try:
+ return get_si_pron("nom", word.lower(), gender)
+ except KeyError:
+ pass
+
+ try:
+ return get_si_pron("acc", word.lower(), gender)
+ except KeyError:
+ pass
+
+ # HANDLE ISOLATED IRREGULAR PLURALS
+
+ wordsplit = word.split()
+ wordlast = wordsplit[-1]
+ lowerwordlast = wordlast.lower()
+
+ if wordlast in list(si_sb_irregular_caps.keys()):
+ llen = len(wordlast)
+ return "{}{}".format(word[:-llen], si_sb_irregular_caps[wordlast])
+
+ if lowerwordlast in list(si_sb_irregular.keys()):
+ llen = len(lowerwordlast)
+ return "{}{}".format(word[:-llen], si_sb_irregular[lowerwordlast])
+
+ if (" ".join(wordsplit[-2:])).lower() in list(si_sb_irregular_compound.keys()):
+ llen = len(
+ " ".join(wordsplit[-2:])
+ ) # TODO: what if 2 spaces between these words?
+ return "{}{}".format(
+ word[:-llen],
+ si_sb_irregular_compound[(" ".join(wordsplit[-2:])).lower()],
+ )
+
+ if lowerword[-5:] == "quies":
+ return word[:-3] + "y"
+
+ if lowerword[-7:] == "persons":
+ return word[:-1]
+ if lowerword[-6:] == "people":
+ return word[:-4] + "rson"
+
+ # HANDLE FAMILIES OF IRREGULAR PLURALS
+
+ if lowerword[-4:] == "mans":
+ for k, v in si_sb_U_man_mans_bysize.items():
+ if lowerword[-k:] in v:
+ return word[:-1]
+ for k, v in si_sb_U_man_mans_caps_bysize.items():
+ if word[-k:] in v:
+ return word[:-1]
+ if lowerword[-3:] == "men":
+ return word[:-3] + "man"
+ if lowerword[-4:] == "mice":
+ return word[:-4] + "mouse"
+ if lowerword[-4:] == "lice":
+ return word[:-4] + "louse"
+ if lowerword[-5:] == "geese":
+ return word[:-5] + "goose"
+ if lowerword[-5:] == "teeth":
+ return word[:-5] + "tooth"
+ if lowerword[-4:] == "feet":
+ return word[:-4] + "foot"
+
+ if lowerword == "dice":
+ return "die"
+
+ # HANDLE UNASSIMILATED IMPORTS
+
+ if lowerword[-4:] == "ceps":
+ return word
+ if lowerword[-3:] == "zoa":
+ return word[:-1] + "on"
+
+ for lastlet, d, numend, post in (
+ ("s", si_sb_U_ch_chs_bysize, -1, ""),
+ ("s", si_sb_U_ex_ices_bysize, -4, "ex"),
+ ("s", si_sb_U_ix_ices_bysize, -4, "ix"),
+ ("a", si_sb_U_um_a_bysize, -1, "um"),
+ ("i", si_sb_U_us_i_bysize, -1, "us"),
+ ("a", si_sb_U_on_a_bysize, -1, "on"),
+ ("e", si_sb_U_a_ae_bysize, -1, ""),
+ ):
+ if lowerword[-1] == lastlet: # this test to add speed
+ for k, v in d.items():
+ if lowerword[-k:] in v:
+ return word[:numend] + post
+
+ # HANDLE INCOMPLETELY ASSIMILATED IMPORTS
+
+ if self.classical_dict["ancient"]:
+
+ if lowerword[-6:] == "trices":
+ return word[:-3] + "x"
+ if lowerword[-4:] in ("eaux", "ieux"):
+ return word[:-1]
+ if lowerword[-5:] in ("ynges", "inges", "anges") and len(word) > 6:
+ return word[:-3] + "x"
+
+ for lastlet, d, numend, post in (
+ ("a", si_sb_C_en_ina_bysize, -3, "en"),
+ ("s", si_sb_C_ex_ices_bysize, -4, "ex"),
+ ("s", si_sb_C_ix_ices_bysize, -4, "ix"),
+ ("a", si_sb_C_um_a_bysize, -1, "um"),
+ ("i", si_sb_C_us_i_bysize, -1, "us"),
+ ("s", pl_sb_C_us_us_bysize, None, ""),
+ ("e", si_sb_C_a_ae_bysize, -1, ""),
+ ("a", si_sb_C_a_ata_bysize, -2, ""),
+ ("s", si_sb_C_is_ides_bysize, -3, "s"),
+ ("i", si_sb_C_o_i_bysize, -1, "o"),
+ ("a", si_sb_C_on_a_bysize, -1, "on"),
+ ("m", si_sb_C_im_bysize, -2, ""),
+ ("i", si_sb_C_i_bysize, -1, ""),
+ ):
+ if lowerword[-1] == lastlet: # this test to add speed
+ for k, v in d.items():
+ if lowerword[-k:] in v:
+ return word[:numend] + post
+
+ # HANDLE PLURLS ENDING IN uses -> use
+
+ if (
+ lowerword[-6:] == "houses"
+ or word in si_sb_uses_use_case
+ or lowerword in si_sb_uses_use
+ ):
+ return word[:-1]
+
+ # HANDLE PLURLS ENDING IN ies -> ie
+
+ if word in si_sb_ies_ie_case or lowerword in si_sb_ies_ie:
+ return word[:-1]
+
+ # HANDLE PLURLS ENDING IN oes -> oe
+
+ if (
+ lowerword[-5:] == "shoes"
+ or word in si_sb_oes_oe_case
+ or lowerword in si_sb_oes_oe
+ ):
+ return word[:-1]
+
+ # HANDLE SINGULAR NOUNS ENDING IN ...s OR OTHER SILIBANTS
+
+ if word in si_sb_sses_sse_case or lowerword in si_sb_sses_sse:
+ return word[:-1]
+
+ if lowerword in si_sb_singular_s_complete:
+ return word[:-2]
+
+ for k, v in si_sb_singular_s_bysize.items():
+ if lowerword[-k:] in v:
+ return word[:-2]
+
+ if lowerword[-4:] == "eses" and word[0] == word[0].upper():
+ return word[:-2]
+
+ if lowerword in si_sb_z_zes:
+ return word[:-2]
+
+ if lowerword in si_sb_zzes_zz:
+ return word[:-2]
+
+ if lowerword[-4:] == "zzes":
+ return word[:-3]
+
+ if word in si_sb_ches_che_case or lowerword in si_sb_ches_che:
+ return word[:-1]
+
+ if lowerword[-4:] in ("ches", "shes"):
+ return word[:-2]
+
+ if lowerword in si_sb_xes_xe:
+ return word[:-1]
+
+ if lowerword[-3:] == "xes":
+ return word[:-2]
+
+ # HANDLE ...f -> ...ves
+
+ if word in si_sb_ves_ve_case or lowerword in si_sb_ves_ve:
+ return word[:-1]
+
+ if lowerword[-3:] == "ves":
+ if lowerword[-5:-3] in ("el", "al", "ol"):
+ return word[:-3] + "f"
+ if lowerword[-5:-3] == "ea" and word[-6:-5] != "d":
+ return word[:-3] + "f"
+ if lowerword[-5:-3] in ("ni", "li", "wi"):
+ return word[:-3] + "fe"
+ if lowerword[-5:-3] == "ar":
+ return word[:-3] + "f"
+
+ # HANDLE ...y
+
+ if lowerword[-2:] == "ys":
+ if len(lowerword) > 2 and lowerword[-3] in "aeiou":
+ return word[:-1]
+
+ if self.classical_dict["names"]:
+ if lowerword[-2:] == "ys" and word[0] == word[0].upper():
+ return word[:-1]
+
+ if lowerword[-3:] == "ies":
+ return word[:-3] + "y"
+
+ # HANDLE ...o
+
+ if lowerword[-2:] == "os":
+
+ if lowerword in si_sb_U_o_os_complete:
+ return word[:-1]
+
+ for k, v in si_sb_U_o_os_bysize.items():
+ if lowerword[-k:] in v:
+ return word[:-1]
+
+ if lowerword[-3:] in ("aos", "eos", "ios", "oos", "uos"):
+ return word[:-1]
+
+ if lowerword[-3:] == "oes":
+ return word[:-2]
+
+ # UNASSIMILATED IMPORTS FINAL RULE
+
+ if word in si_sb_es_is:
+ return word[:-2] + "is"
+
+ # OTHERWISE JUST REMOVE ...s
+
+ if lowerword[-1] == "s":
+ return word[:-1]
+
+ # COULD NOT FIND SINGULAR
+
+ return False
+
+ # ADJECTIVES
+
+ def a(self, text, count=1):
+ """
+ Return the appropriate indefinite article followed by text.
+
+ The indefinite article is either 'a' or 'an'.
+
+ If count is not one, then return count followed by text
+ instead of 'a' or 'an'.
+
+ Whitespace at the start and end is preserved.
+
+ """
+ mo = re.search(r"\A(\s*)(?:an?\s+)?(.+?)(\s*)\Z", text, re.IGNORECASE)
+ if mo:
+ word = mo.group(2)
+ if not word:
+ return text
+ pre = mo.group(1)
+ post = mo.group(3)
+ result = self._indef_article(word, count)
+ return "{}{}{}".format(pre, result, post)
+ return ""
+
+ an = a
+
+ def _indef_article(self, word, count):
+ mycount = self.get_count(count)
+
+ if mycount != 1:
+ return "{} {}".format(count, word)
+
+ # HANDLE USER-DEFINED VARIANTS
+
+ value = self.ud_match(word, self.A_a_user_defined)
+ if value is not None:
+ return "{} {}".format(value, word)
+
+ # HANDLE ORDINAL FORMS
+
+ for a in ((r"^(%s)" % A_ordinal_a, "a"), (r"^(%s)" % A_ordinal_an, "an")):
+ mo = re.search(a[0], word, re.IGNORECASE)
+ if mo:
+ return "{} {}".format(a[1], word)
+
+ # HANDLE SPECIAL CASES
+
+ for a in (
+ (r"^(%s)" % A_explicit_an, "an"),
+ (r"^[aefhilmnorsx]$", "an"),
+ (r"^[bcdgjkpqtuvwyz]$", "a"),
+ ):
+ mo = re.search(a[0], word, re.IGNORECASE)
+ if mo:
+ return "{} {}".format(a[1], word)
+
+ # HANDLE ABBREVIATIONS
+
+ for a in (
+ (r"(%s)" % A_abbrev, "an", re.VERBOSE),
+ (r"^[aefhilmnorsx][.-]", "an", re.IGNORECASE),
+ (r"^[a-z][.-]", "a", re.IGNORECASE),
+ ):
+ mo = re.search(a[0], word, a[2])
+ if mo:
+ return "{} {}".format(a[1], word)
+
+ # HANDLE CONSONANTS
+
+ mo = re.search(r"^[^aeiouy]", word, re.IGNORECASE)
+ if mo:
+ return "a %s" % word
+
+ # HANDLE SPECIAL VOWEL-FORMS
+
+ for a in (
+ (r"^e[uw]", "a"),
+ (r"^onc?e\b", "a"),
+ (r"^onetime\b", "a"),
+ (r"^uni([^nmd]|mo)", "a"),
+ (r"^u[bcfghjkqrst][aeiou]", "a"),
+ (r"^ukr", "a"),
+ (r"^(%s)" % A_explicit_a, "a"),
+ ):
+ mo = re.search(a[0], word, re.IGNORECASE)
+ if mo:
+ return "{} {}".format(a[1], word)
+
+ # HANDLE SPECIAL CAPITALS
+
+ mo = re.search(r"^U[NK][AIEO]?", word)
+ if mo:
+ return "a %s" % word
+
+ # HANDLE VOWELS
+
+ mo = re.search(r"^[aeiou]", word, re.IGNORECASE)
+ if mo:
+ return "an %s" % word
+
+ # HANDLE y... (BEFORE CERTAIN CONSONANTS IMPLIES (UNNATURALIZED) "i.." SOUND)
+
+ mo = re.search(r"^(%s)" % A_y_cons, word, re.IGNORECASE)
+ if mo:
+ return "an %s" % word
+
+ # OTHERWISE, GUESS "a"
+ return "a %s" % word
+
+ # 2. TRANSLATE ZERO-QUANTIFIED $word TO "no plural($word)"
+
+ def no(self, text, count=None):
+ """
+ If count is 0, no, zero or nil, return 'no' followed by the plural
+ of text.
+
+ If count is one of:
+ 1, a, an, one, each, every, this, that
+ return count followed by text.
+
+ Otherwise return count follow by the plural of text.
+
+ In the return value count is always followed by a space.
+
+ Whitespace at the start and end is preserved.
+
+ """
+ if count is None and self.persistent_count is not None:
+ count = self.persistent_count
+
+ if count is None:
+ count = 0
+ mo = re.search(r"\A(\s*)(.+?)(\s*)\Z", text)
+ pre = mo.group(1)
+ word = mo.group(2)
+ post = mo.group(3)
+
+ if str(count).lower() in pl_count_zero:
+ return "{}no {}{}".format(pre, self.plural(word, 0), post)
+ else:
+ return "{}{} {}{}".format(pre, count, self.plural(word, count), post)
+
+ # PARTICIPLES
+
+ def present_participle(self, word):
+ """
+ Return the present participle for word.
+
+ word is the 3rd person singular verb.
+
+ """
+ plv = self.plural_verb(word, 2)
+
+ for pat, repl in (
+ (r"ie$", r"y"),
+ (r"ue$", r"u"), # TODO: isn't ue$ -> u encompassed in the following rule?
+ (r"([auy])e$", r"\g<1>"),
+ (r"ski$", r"ski"),
+ (r"[^b]i$", r""),
+ (r"^(are|were)$", r"be"),
+ (r"^(had)$", r"hav"),
+ (r"^(hoe)$", r"\g<1>"),
+ (r"([^e])e$", r"\g<1>"),
+ (r"er$", r"er"),
+ (r"([^aeiou][aeiouy]([bdgmnprst]))$", r"\g<1>\g<2>"),
+ ):
+ (ans, num) = re.subn(pat, repl, plv)
+ if num:
+ return "%sing" % ans
+ return "%sing" % ans
+
+ # NUMERICAL INFLECTIONS
+
+ def ordinal(self, num):
+ """
+ Return the ordinal of num.
+
+ num can be an integer or text
+
+ e.g. ordinal(1) returns '1st'
+ ordinal('one') returns 'first'
+
+ """
+ if re.match(r"\d", str(num)):
+ try:
+ num % 2
+ n = num
+ except TypeError:
+ if "." in str(num):
+ try:
+ # numbers after decimal,
+ # so only need last one for ordinal
+ n = int(num[-1])
+
+ except ValueError: # ends with '.', so need to use whole string
+ n = int(num[:-1])
+ else:
+ n = int(num)
+ try:
+ post = nth[n % 100]
+ except KeyError:
+ post = nth[n % 10]
+ return "{}{}".format(num, post)
+ else:
+ mo = re.search(r"(%s)\Z" % ordinal_suff, num)
+ try:
+ post = ordinal[mo.group(1)]
+ return re.sub(r"(%s)\Z" % ordinal_suff, post, num)
+ except AttributeError:
+ return "%sth" % num
+
+ def millfn(self, ind=0):
+ if ind > len(mill) - 1:
+ print3("number out of range")
+ raise NumOutOfRangeError
+ return mill[ind]
+
+ def unitfn(self, units, mindex=0):
+ return "{}{}".format(unit[units], self.millfn(mindex))
+
+ def tenfn(self, tens, units, mindex=0):
+ if tens != 1:
+ return "{}{}{}{}".format(
+ ten[tens],
+ "-" if tens and units else "",
+ unit[units],
+ self.millfn(mindex),
+ )
+ return "{}{}".format(teen[units], mill[mindex])
+
+ def hundfn(self, hundreds, tens, units, mindex):
+ if hundreds:
+ andword = " %s " % self.number_args["andword"] if tens or units else ""
+ return "{} hundred{}{}{}, ".format(
+ unit[hundreds], # use unit not unitfn as simpler
+ andword,
+ self.tenfn(tens, units),
+ self.millfn(mindex),
+ )
+ if tens or units:
+ return "{}{}, ".format(self.tenfn(tens, units), self.millfn(mindex))
+ return ""
+
+ def group1sub(self, mo):
+ units = int(mo.group(1))
+ if units == 1:
+ return " %s, " % self.number_args["one"]
+ elif units:
+ return "%s, " % unit[units]
+ else:
+ return " %s, " % self.number_args["zero"]
+
+ def group1bsub(self, mo):
+ units = int(mo.group(1))
+ if units:
+ return "%s, " % unit[units]
+ else:
+ return " %s, " % self.number_args["zero"]
+
+ def group2sub(self, mo):
+ tens = int(mo.group(1))
+ units = int(mo.group(2))
+ if tens:
+ return "%s, " % self.tenfn(tens, units)
+ if units:
+ return " {} {}, ".format(self.number_args["zero"], unit[units])
+ return " {} {}, ".format(self.number_args["zero"], self.number_args["zero"])
+
+ def group3sub(self, mo):
+ hundreds = int(mo.group(1))
+ tens = int(mo.group(2))
+ units = int(mo.group(3))
+ if hundreds == 1:
+ hunword = " %s" % self.number_args["one"]
+ elif hundreds:
+ hunword = "%s" % unit[hundreds]
+ else:
+ hunword = " %s" % self.number_args["zero"]
+ if tens:
+ tenword = self.tenfn(tens, units)
+ elif units:
+ tenword = " {} {}".format(self.number_args["zero"], unit[units])
+ else:
+ tenword = " {} {}".format(
+ self.number_args["zero"], self.number_args["zero"]
+ )
+ return "{} {}, ".format(hunword, tenword)
+
+ def hundsub(self, mo):
+ ret = self.hundfn(
+ int(mo.group(1)), int(mo.group(2)), int(mo.group(3)), self.mill_count
+ )
+ self.mill_count += 1
+ return ret
+
+ def tensub(self, mo):
+ return "%s, " % self.tenfn(int(mo.group(1)), int(mo.group(2)), self.mill_count)
+
+ def unitsub(self, mo):
+ return "%s, " % self.unitfn(int(mo.group(1)), self.mill_count)
+
+ def enword(self, num, group):
+ # import pdb
+ # pdb.set_trace()
+
+ if group == 1:
+ num = re.sub(r"(\d)", self.group1sub, num)
+ elif group == 2:
+ num = re.sub(r"(\d)(\d)", self.group2sub, num)
+ num = re.sub(r"(\d)", self.group1bsub, num, 1)
+ elif group == 3:
+ num = re.sub(r"(\d)(\d)(\d)", self.group3sub, num)
+ num = re.sub(r"(\d)(\d)", self.group2sub, num, 1)
+ num = re.sub(r"(\d)", self.group1sub, num, 1)
+ elif int(num) == 0:
+ num = self.number_args["zero"]
+ elif int(num) == 1:
+ num = self.number_args["one"]
+ else:
+ num = num.lstrip().lstrip("0")
+ self.mill_count = 0
+ # surely there's a better way to do the next bit
+ mo = re.search(r"(\d)(\d)(\d)(?=\D*\Z)", num)
+ while mo:
+ num = re.sub(r"(\d)(\d)(\d)(?=\D*\Z)", self.hundsub, num, 1)
+ mo = re.search(r"(\d)(\d)(\d)(?=\D*\Z)", num)
+ num = re.sub(r"(\d)(\d)(?=\D*\Z)", self.tensub, num, 1)
+ num = re.sub(r"(\d)(?=\D*\Z)", self.unitsub, num, 1)
+ return num
+
+ def blankfn(self, mo):
+ """ do a global blank replace
+ TODO: surely this can be done with an option to re.sub
+ rather than this fn
+ """
+ return ""
+
+ def commafn(self, mo):
+ """ do a global ',' replace
+ TODO: surely this can be done with an option to re.sub
+ rather than this fn
+ """
+ return ","
+
+ def spacefn(self, mo):
+ """ do a global ' ' replace
+ TODO: surely this can be done with an option to re.sub
+ rather than this fn
+ """
+ return " "
+
+ def number_to_words(
+ self,
+ num,
+ wantlist=False,
+ group=0,
+ comma=",",
+ andword="and",
+ zero="zero",
+ one="one",
+ decimal="point",
+ threshold=None,
+ ):
+ """
+ Return a number in words.
+
+ group = 1, 2 or 3 to group numbers before turning into words
+ comma: define comma
+ andword: word for 'and'. Can be set to ''.
+ e.g. "one hundred and one" vs "one hundred one"
+ zero: word for '0'
+ one: word for '1'
+ decimal: word for decimal point
+ threshold: numbers above threshold not turned into words
+
+ parameters not remembered from last call. Departure from Perl version.
+ """
+ self.number_args = dict(andword=andword, zero=zero, one=one)
+ num = "%s" % num
+
+ # Handle "stylistic" conversions (up to a given threshold)...
+ if threshold is not None and float(num) > threshold:
+ spnum = num.split(".", 1)
+ while comma:
+ (spnum[0], n) = re.subn(r"(\d)(\d{3}(?:,|\Z))", r"\1,\2", spnum[0])
+ if n == 0:
+ break
+ try:
+ return "{}.{}".format(spnum[0], spnum[1])
+ except IndexError:
+ return "%s" % spnum[0]
+
+ if group < 0 or group > 3:
+ raise BadChunkingOptionError
+ nowhite = num.lstrip()
+ if nowhite[0] == "+":
+ sign = "plus"
+ elif nowhite[0] == "-":
+ sign = "minus"
+ else:
+ sign = ""
+
+ myord = num[-2:] in ("st", "nd", "rd", "th")
+ if myord:
+ num = num[:-2]
+ finalpoint = False
+ if decimal:
+ if group != 0:
+ chunks = num.split(".")
+ else:
+ chunks = num.split(".", 1)
+ if chunks[-1] == "": # remove blank string if nothing after decimal
+ chunks = chunks[:-1]
+ finalpoint = True # add 'point' to end of output
+ else:
+ chunks = [num]
+
+ first = 1
+ loopstart = 0
+
+ if chunks[0] == "":
+ first = 0
+ if len(chunks) > 1:
+ loopstart = 1
+
+ for i in range(loopstart, len(chunks)):
+ chunk = chunks[i]
+ # remove all non numeric \D
+ chunk = re.sub(r"\D", self.blankfn, chunk)
+ if chunk == "":
+ chunk = "0"
+
+ if group == 0 and (first == 0 or first == ""):
+ chunk = self.enword(chunk, 1)
+ else:
+ chunk = self.enword(chunk, group)
+
+ if chunk[-2:] == ", ":
+ chunk = chunk[:-2]
+ chunk = re.sub(r"\s+,", self.commafn, chunk)
+
+ if group == 0 and first:
+ chunk = re.sub(r", (\S+)\s+\Z", " %s \\1" % andword, chunk)
+ chunk = re.sub(r"\s+", self.spacefn, chunk)
+ # chunk = re.sub(r"(\A\s|\s\Z)", self.blankfn, chunk)
+ chunk = chunk.strip()
+ if first:
+ first = ""
+ chunks[i] = chunk
+
+ numchunks = []
+ if first != 0:
+ numchunks = chunks[0].split("%s " % comma)
+
+ if myord and numchunks:
+ # TODO: can this be just one re as it is in perl?
+ mo = re.search(r"(%s)\Z" % ordinal_suff, numchunks[-1])
+ if mo:
+ numchunks[-1] = re.sub(
+ r"(%s)\Z" % ordinal_suff, ordinal[mo.group(1)], numchunks[-1]
+ )
+ else:
+ numchunks[-1] += "th"
+
+ for chunk in chunks[1:]:
+ numchunks.append(decimal)
+ numchunks.extend(chunk.split("%s " % comma))
+
+ if finalpoint:
+ numchunks.append(decimal)
+
+ # wantlist: Perl list context. can explictly specify in Python
+ if wantlist:
+ if sign:
+ numchunks = [sign] + numchunks
+ return numchunks
+ elif group:
+ signout = "%s " % sign if sign else ""
+ return "{}{}".format(signout, ", ".join(numchunks))
+ else:
+ signout = "%s " % sign if sign else ""
+ num = "{}{}".format(signout, numchunks.pop(0))
+ if decimal is None:
+ first = True
+ else:
+ first = not num.endswith(decimal)
+ for nc in numchunks:
+ if nc == decimal:
+ num += " %s" % nc
+ first = 0
+ elif first:
+ num += "{} {}".format(comma, nc)
+ else:
+ num += " %s" % nc
+ return num
+
+ # Join words with commas and a trailing 'and' (when appropriate)...
+
+ def join(
+ self,
+ words,
+ sep=None,
+ sep_spaced=True,
+ final_sep=None,
+ conj="and",
+ conj_spaced=True,
+ ):
+ """
+ Join words into a list.
+
+ e.g. join(['ant', 'bee', 'fly']) returns 'ant, bee, and fly'
+
+ options:
+ conj: replacement for 'and'
+ sep: separator. default ',', unless ',' is in the list then ';'
+ final_sep: final separator. default ',', unless ',' is in the list then ';'
+ conj_spaced: boolean. Should conj have spaces around it
+
+ """
+ if not words:
+ return ""
+ if len(words) == 1:
+ return words[0]
+
+ if conj_spaced:
+ if conj == "":
+ conj = " "
+ else:
+ conj = " %s " % conj
+
+ if len(words) == 2:
+ return "{}{}{}".format(words[0], conj, words[1])
+
+ if sep is None:
+ if "," in "".join(words):
+ sep = ";"
+ else:
+ sep = ","
+ if final_sep is None:
+ final_sep = sep
+
+ final_sep = "{}{}".format(final_sep, conj)
+
+ if sep_spaced:
+ sep += " "
+
+ return "{}{}{}".format(sep.join(words[0:-1]), final_sep, words[-1])
diff --git a/Contents/Libraries/Shared/ipaddress.py b/Contents/Libraries/Shared/ipaddress.py
new file mode 100644
index 000000000..f2d076684
--- /dev/null
+++ b/Contents/Libraries/Shared/ipaddress.py
@@ -0,0 +1,2419 @@
+# Copyright 2007 Google Inc.
+# Licensed to PSF under a Contributor Agreement.
+
+"""A fast, lightweight IPv4/IPv6 manipulation library in Python.
+
+This library is used to create/poke/manipulate IPv4 and IPv6 addresses
+and networks.
+
+"""
+
+from __future__ import unicode_literals
+
+
+import itertools
+import struct
+
+__version__ = '1.0.22'
+
+# Compatibility functions
+_compat_int_types = (int,)
+try:
+ _compat_int_types = (int, long)
+except NameError:
+ pass
+try:
+ _compat_str = unicode
+except NameError:
+ _compat_str = str
+ assert bytes != str
+if b'\0'[0] == 0: # Python 3 semantics
+ def _compat_bytes_to_byte_vals(byt):
+ return byt
+else:
+ def _compat_bytes_to_byte_vals(byt):
+ return [struct.unpack(b'!B', b)[0] for b in byt]
+try:
+ _compat_int_from_byte_vals = int.from_bytes
+except AttributeError:
+ def _compat_int_from_byte_vals(bytvals, endianess):
+ assert endianess == 'big'
+ res = 0
+ for bv in bytvals:
+ assert isinstance(bv, _compat_int_types)
+ res = (res << 8) + bv
+ return res
+
+
+def _compat_to_bytes(intval, length, endianess):
+ assert isinstance(intval, _compat_int_types)
+ assert endianess == 'big'
+ if length == 4:
+ if intval < 0 or intval >= 2 ** 32:
+ raise struct.error("integer out of range for 'I' format code")
+ return struct.pack(b'!I', intval)
+ elif length == 16:
+ if intval < 0 or intval >= 2 ** 128:
+ raise struct.error("integer out of range for 'QQ' format code")
+ return struct.pack(b'!QQ', intval >> 64, intval & 0xffffffffffffffff)
+ else:
+ raise NotImplementedError()
+
+
+if hasattr(int, 'bit_length'):
+ # Not int.bit_length , since that won't work in 2.7 where long exists
+ def _compat_bit_length(i):
+ return i.bit_length()
+else:
+ def _compat_bit_length(i):
+ for res in itertools.count():
+ if i >> res == 0:
+ return res
+
+
+def _compat_range(start, end, step=1):
+ assert step > 0
+ i = start
+ while i < end:
+ yield i
+ i += step
+
+
+class _TotalOrderingMixin(object):
+ __slots__ = ()
+
+ # Helper that derives the other comparison operations from
+ # __lt__ and __eq__
+ # We avoid functools.total_ordering because it doesn't handle
+ # NotImplemented correctly yet (http://bugs.python.org/issue10042)
+ def __eq__(self, other):
+ raise NotImplementedError
+
+ def __ne__(self, other):
+ equal = self.__eq__(other)
+ if equal is NotImplemented:
+ return NotImplemented
+ return not equal
+
+ def __lt__(self, other):
+ raise NotImplementedError
+
+ def __le__(self, other):
+ less = self.__lt__(other)
+ if less is NotImplemented or not less:
+ return self.__eq__(other)
+ return less
+
+ def __gt__(self, other):
+ less = self.__lt__(other)
+ if less is NotImplemented:
+ return NotImplemented
+ equal = self.__eq__(other)
+ if equal is NotImplemented:
+ return NotImplemented
+ return not (less or equal)
+
+ def __ge__(self, other):
+ less = self.__lt__(other)
+ if less is NotImplemented:
+ return NotImplemented
+ return not less
+
+
+IPV4LENGTH = 32
+IPV6LENGTH = 128
+
+
+class AddressValueError(ValueError):
+ """A Value Error related to the address."""
+
+
+class NetmaskValueError(ValueError):
+ """A Value Error related to the netmask."""
+
+
+def ip_address(address):
+ """Take an IP string/int and return an object of the correct type.
+
+ Args:
+ address: A string or integer, the IP address. Either IPv4 or
+ IPv6 addresses may be supplied; integers less than 2**32 will
+ be considered to be IPv4 by default.
+
+ Returns:
+ An IPv4Address or IPv6Address object.
+
+ Raises:
+ ValueError: if the *address* passed isn't either a v4 or a v6
+ address
+
+ """
+ try:
+ return IPv4Address(address)
+ except (AddressValueError, NetmaskValueError):
+ pass
+
+ try:
+ return IPv6Address(address)
+ except (AddressValueError, NetmaskValueError):
+ pass
+
+ if isinstance(address, bytes):
+ raise AddressValueError(
+ '%r does not appear to be an IPv4 or IPv6 address. '
+ 'Did you pass in a bytes (str in Python 2) instead of'
+ ' a unicode object?' % address)
+
+ raise ValueError('%r does not appear to be an IPv4 or IPv6 address' %
+ address)
+
+
+def ip_network(address, strict=True):
+ """Take an IP string/int and return an object of the correct type.
+
+ Args:
+ address: A string or integer, the IP network. Either IPv4 or
+ IPv6 networks may be supplied; integers less than 2**32 will
+ be considered to be IPv4 by default.
+
+ Returns:
+ An IPv4Network or IPv6Network object.
+
+ Raises:
+ ValueError: if the string passed isn't either a v4 or a v6
+ address. Or if the network has host bits set.
+
+ """
+ try:
+ return IPv4Network(address, strict)
+ except (AddressValueError, NetmaskValueError):
+ pass
+
+ try:
+ return IPv6Network(address, strict)
+ except (AddressValueError, NetmaskValueError):
+ pass
+
+ if isinstance(address, bytes):
+ raise AddressValueError(
+ '%r does not appear to be an IPv4 or IPv6 network. '
+ 'Did you pass in a bytes (str in Python 2) instead of'
+ ' a unicode object?' % address)
+
+ raise ValueError('%r does not appear to be an IPv4 or IPv6 network' %
+ address)
+
+
+def ip_interface(address):
+ """Take an IP string/int and return an object of the correct type.
+
+ Args:
+ address: A string or integer, the IP address. Either IPv4 or
+ IPv6 addresses may be supplied; integers less than 2**32 will
+ be considered to be IPv4 by default.
+
+ Returns:
+ An IPv4Interface or IPv6Interface object.
+
+ Raises:
+ ValueError: if the string passed isn't either a v4 or a v6
+ address.
+
+ Notes:
+ The IPv?Interface classes describe an Address on a particular
+ Network, so they're basically a combination of both the Address
+ and Network classes.
+
+ """
+ try:
+ return IPv4Interface(address)
+ except (AddressValueError, NetmaskValueError):
+ pass
+
+ try:
+ return IPv6Interface(address)
+ except (AddressValueError, NetmaskValueError):
+ pass
+
+ raise ValueError('%r does not appear to be an IPv4 or IPv6 interface' %
+ address)
+
+
+def v4_int_to_packed(address):
+ """Represent an address as 4 packed bytes in network (big-endian) order.
+
+ Args:
+ address: An integer representation of an IPv4 IP address.
+
+ Returns:
+ The integer address packed as 4 bytes in network (big-endian) order.
+
+ Raises:
+ ValueError: If the integer is negative or too large to be an
+ IPv4 IP address.
+
+ """
+ try:
+ return _compat_to_bytes(address, 4, 'big')
+ except (struct.error, OverflowError):
+ raise ValueError("Address negative or too large for IPv4")
+
+
+def v6_int_to_packed(address):
+ """Represent an address as 16 packed bytes in network (big-endian) order.
+
+ Args:
+ address: An integer representation of an IPv6 IP address.
+
+ Returns:
+ The integer address packed as 16 bytes in network (big-endian) order.
+
+ """
+ try:
+ return _compat_to_bytes(address, 16, 'big')
+ except (struct.error, OverflowError):
+ raise ValueError("Address negative or too large for IPv6")
+
+
+def _split_optional_netmask(address):
+ """Helper to split the netmask and raise AddressValueError if needed"""
+ addr = _compat_str(address).split('/')
+ if len(addr) > 2:
+ raise AddressValueError("Only one '/' permitted in %r" % address)
+ return addr
+
+
+def _find_address_range(addresses):
+ """Find a sequence of sorted deduplicated IPv#Address.
+
+ Args:
+ addresses: a list of IPv#Address objects.
+
+ Yields:
+ A tuple containing the first and last IP addresses in the sequence.
+
+ """
+ it = iter(addresses)
+ first = last = next(it)
+ for ip in it:
+ if ip._ip != last._ip + 1:
+ yield first, last
+ first = ip
+ last = ip
+ yield first, last
+
+
+def _count_righthand_zero_bits(number, bits):
+ """Count the number of zero bits on the right hand side.
+
+ Args:
+ number: an integer.
+ bits: maximum number of bits to count.
+
+ Returns:
+ The number of zero bits on the right hand side of the number.
+
+ """
+ if number == 0:
+ return bits
+ return min(bits, _compat_bit_length(~number & (number - 1)))
+
+
+def summarize_address_range(first, last):
+ """Summarize a network range given the first and last IP addresses.
+
+ Example:
+ >>> list(summarize_address_range(IPv4Address('192.0.2.0'),
+ ... IPv4Address('192.0.2.130')))
+ ... #doctest: +NORMALIZE_WHITESPACE
+ [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'),
+ IPv4Network('192.0.2.130/32')]
+
+ Args:
+ first: the first IPv4Address or IPv6Address in the range.
+ last: the last IPv4Address or IPv6Address in the range.
+
+ Returns:
+ An iterator of the summarized IPv(4|6) network objects.
+
+ Raise:
+ TypeError:
+ If the first and last objects are not IP addresses.
+ If the first and last objects are not the same version.
+ ValueError:
+ If the last object is not greater than the first.
+ If the version of the first address is not 4 or 6.
+
+ """
+ if (not (isinstance(first, _BaseAddress) and
+ isinstance(last, _BaseAddress))):
+ raise TypeError('first and last must be IP addresses, not networks')
+ if first.version != last.version:
+ raise TypeError("%s and %s are not of the same version" % (
+ first, last))
+ if first > last:
+ raise ValueError('last IP address must be greater than first')
+
+ if first.version == 4:
+ ip = IPv4Network
+ elif first.version == 6:
+ ip = IPv6Network
+ else:
+ raise ValueError('unknown IP version')
+
+ ip_bits = first._max_prefixlen
+ first_int = first._ip
+ last_int = last._ip
+ while first_int <= last_int:
+ nbits = min(_count_righthand_zero_bits(first_int, ip_bits),
+ _compat_bit_length(last_int - first_int + 1) - 1)
+ net = ip((first_int, ip_bits - nbits))
+ yield net
+ first_int += 1 << nbits
+ if first_int - 1 == ip._ALL_ONES:
+ break
+
+
+def _collapse_addresses_internal(addresses):
+ """Loops through the addresses, collapsing concurrent netblocks.
+
+ Example:
+
+ ip1 = IPv4Network('192.0.2.0/26')
+ ip2 = IPv4Network('192.0.2.64/26')
+ ip3 = IPv4Network('192.0.2.128/26')
+ ip4 = IPv4Network('192.0.2.192/26')
+
+ _collapse_addresses_internal([ip1, ip2, ip3, ip4]) ->
+ [IPv4Network('192.0.2.0/24')]
+
+ This shouldn't be called directly; it is called via
+ collapse_addresses([]).
+
+ Args:
+ addresses: A list of IPv4Network's or IPv6Network's
+
+ Returns:
+ A list of IPv4Network's or IPv6Network's depending on what we were
+ passed.
+
+ """
+ # First merge
+ to_merge = list(addresses)
+ subnets = {}
+ while to_merge:
+ net = to_merge.pop()
+ supernet = net.supernet()
+ existing = subnets.get(supernet)
+ if existing is None:
+ subnets[supernet] = net
+ elif existing != net:
+ # Merge consecutive subnets
+ del subnets[supernet]
+ to_merge.append(supernet)
+ # Then iterate over resulting networks, skipping subsumed subnets
+ last = None
+ for net in sorted(subnets.values()):
+ if last is not None:
+ # Since they are sorted,
+ # last.network_address <= net.network_address is a given.
+ if last.broadcast_address >= net.broadcast_address:
+ continue
+ yield net
+ last = net
+
+
+def collapse_addresses(addresses):
+ """Collapse a list of IP objects.
+
+ Example:
+ collapse_addresses([IPv4Network('192.0.2.0/25'),
+ IPv4Network('192.0.2.128/25')]) ->
+ [IPv4Network('192.0.2.0/24')]
+
+ Args:
+ addresses: An iterator of IPv4Network or IPv6Network objects.
+
+ Returns:
+ An iterator of the collapsed IPv(4|6)Network objects.
+
+ Raises:
+ TypeError: If passed a list of mixed version objects.
+
+ """
+ addrs = []
+ ips = []
+ nets = []
+
+ # split IP addresses and networks
+ for ip in addresses:
+ if isinstance(ip, _BaseAddress):
+ if ips and ips[-1]._version != ip._version:
+ raise TypeError("%s and %s are not of the same version" % (
+ ip, ips[-1]))
+ ips.append(ip)
+ elif ip._prefixlen == ip._max_prefixlen:
+ if ips and ips[-1]._version != ip._version:
+ raise TypeError("%s and %s are not of the same version" % (
+ ip, ips[-1]))
+ try:
+ ips.append(ip.ip)
+ except AttributeError:
+ ips.append(ip.network_address)
+ else:
+ if nets and nets[-1]._version != ip._version:
+ raise TypeError("%s and %s are not of the same version" % (
+ ip, nets[-1]))
+ nets.append(ip)
+
+ # sort and dedup
+ ips = sorted(set(ips))
+
+ # find consecutive address ranges in the sorted sequence and summarize them
+ if ips:
+ for first, last in _find_address_range(ips):
+ addrs.extend(summarize_address_range(first, last))
+
+ return _collapse_addresses_internal(addrs + nets)
+
+
+def get_mixed_type_key(obj):
+ """Return a key suitable for sorting between networks and addresses.
+
+ Address and Network objects are not sortable by default; they're
+ fundamentally different so the expression
+
+ IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')
+
+ doesn't make any sense. There are some times however, where you may wish
+ to have ipaddress sort these for you anyway. If you need to do this, you
+ can use this function as the key= argument to sorted().
+
+ Args:
+ obj: either a Network or Address object.
+ Returns:
+ appropriate key.
+
+ """
+ if isinstance(obj, _BaseNetwork):
+ return obj._get_networks_key()
+ elif isinstance(obj, _BaseAddress):
+ return obj._get_address_key()
+ return NotImplemented
+
+
+class _IPAddressBase(_TotalOrderingMixin):
+
+ """The mother class."""
+
+ __slots__ = ()
+
+ @property
+ def exploded(self):
+ """Return the longhand version of the IP address as a string."""
+ return self._explode_shorthand_ip_string()
+
+ @property
+ def compressed(self):
+ """Return the shorthand version of the IP address as a string."""
+ return _compat_str(self)
+
+ @property
+ def reverse_pointer(self):
+ """The name of the reverse DNS pointer for the IP address, e.g.:
+ >>> ipaddress.ip_address("127.0.0.1").reverse_pointer
+ '1.0.0.127.in-addr.arpa'
+ >>> ipaddress.ip_address("2001:db8::1").reverse_pointer
+ '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'
+
+ """
+ return self._reverse_pointer()
+
+ @property
+ def version(self):
+ msg = '%200s has no version specified' % (type(self),)
+ raise NotImplementedError(msg)
+
+ def _check_int_address(self, address):
+ if address < 0:
+ msg = "%d (< 0) is not permitted as an IPv%d address"
+ raise AddressValueError(msg % (address, self._version))
+ if address > self._ALL_ONES:
+ msg = "%d (>= 2**%d) is not permitted as an IPv%d address"
+ raise AddressValueError(msg % (address, self._max_prefixlen,
+ self._version))
+
+ def _check_packed_address(self, address, expected_len):
+ address_len = len(address)
+ if address_len != expected_len:
+ msg = (
+ '%r (len %d != %d) is not permitted as an IPv%d address. '
+ 'Did you pass in a bytes (str in Python 2) instead of'
+ ' a unicode object?')
+ raise AddressValueError(msg % (address, address_len,
+ expected_len, self._version))
+
+ @classmethod
+ def _ip_int_from_prefix(cls, prefixlen):
+ """Turn the prefix length into a bitwise netmask
+
+ Args:
+ prefixlen: An integer, the prefix length.
+
+ Returns:
+ An integer.
+
+ """
+ return cls._ALL_ONES ^ (cls._ALL_ONES >> prefixlen)
+
+ @classmethod
+ def _prefix_from_ip_int(cls, ip_int):
+ """Return prefix length from the bitwise netmask.
+
+ Args:
+ ip_int: An integer, the netmask in expanded bitwise format
+
+ Returns:
+ An integer, the prefix length.
+
+ Raises:
+ ValueError: If the input intermingles zeroes & ones
+ """
+ trailing_zeroes = _count_righthand_zero_bits(ip_int,
+ cls._max_prefixlen)
+ prefixlen = cls._max_prefixlen - trailing_zeroes
+ leading_ones = ip_int >> trailing_zeroes
+ all_ones = (1 << prefixlen) - 1
+ if leading_ones != all_ones:
+ byteslen = cls._max_prefixlen // 8
+ details = _compat_to_bytes(ip_int, byteslen, 'big')
+ msg = 'Netmask pattern %r mixes zeroes & ones'
+ raise ValueError(msg % details)
+ return prefixlen
+
+ @classmethod
+ def _report_invalid_netmask(cls, netmask_str):
+ msg = '%r is not a valid netmask' % netmask_str
+ raise NetmaskValueError(msg)
+
+ @classmethod
+ def _prefix_from_prefix_string(cls, prefixlen_str):
+ """Return prefix length from a numeric string
+
+ Args:
+ prefixlen_str: The string to be converted
+
+ Returns:
+ An integer, the prefix length.
+
+ Raises:
+ NetmaskValueError: If the input is not a valid netmask
+ """
+ # int allows a leading +/- as well as surrounding whitespace,
+ # so we ensure that isn't the case
+ if not _BaseV4._DECIMAL_DIGITS.issuperset(prefixlen_str):
+ cls._report_invalid_netmask(prefixlen_str)
+ try:
+ prefixlen = int(prefixlen_str)
+ except ValueError:
+ cls._report_invalid_netmask(prefixlen_str)
+ if not (0 <= prefixlen <= cls._max_prefixlen):
+ cls._report_invalid_netmask(prefixlen_str)
+ return prefixlen
+
+ @classmethod
+ def _prefix_from_ip_string(cls, ip_str):
+ """Turn a netmask/hostmask string into a prefix length
+
+ Args:
+ ip_str: The netmask/hostmask to be converted
+
+ Returns:
+ An integer, the prefix length.
+
+ Raises:
+ NetmaskValueError: If the input is not a valid netmask/hostmask
+ """
+ # Parse the netmask/hostmask like an IP address.
+ try:
+ ip_int = cls._ip_int_from_string(ip_str)
+ except AddressValueError:
+ cls._report_invalid_netmask(ip_str)
+
+ # Try matching a netmask (this would be /1*0*/ as a bitwise regexp).
+ # Note that the two ambiguous cases (all-ones and all-zeroes) are
+ # treated as netmasks.
+ try:
+ return cls._prefix_from_ip_int(ip_int)
+ except ValueError:
+ pass
+
+ # Invert the bits, and try matching a /0+1+/ hostmask instead.
+ ip_int ^= cls._ALL_ONES
+ try:
+ return cls._prefix_from_ip_int(ip_int)
+ except ValueError:
+ cls._report_invalid_netmask(ip_str)
+
+ def __reduce__(self):
+ return self.__class__, (_compat_str(self),)
+
+
+class _BaseAddress(_IPAddressBase):
+
+ """A generic IP object.
+
+ This IP class contains the version independent methods which are
+ used by single IP addresses.
+ """
+
+ __slots__ = ()
+
+ def __int__(self):
+ return self._ip
+
+ def __eq__(self, other):
+ try:
+ return (self._ip == other._ip and
+ self._version == other._version)
+ except AttributeError:
+ return NotImplemented
+
+ def __lt__(self, other):
+ if not isinstance(other, _IPAddressBase):
+ return NotImplemented
+ if not isinstance(other, _BaseAddress):
+ raise TypeError('%s and %s are not of the same type' % (
+ self, other))
+ if self._version != other._version:
+ raise TypeError('%s and %s are not of the same version' % (
+ self, other))
+ if self._ip != other._ip:
+ return self._ip < other._ip
+ return False
+
+ # Shorthand for Integer addition and subtraction. This is not
+ # meant to ever support addition/subtraction of addresses.
+ def __add__(self, other):
+ if not isinstance(other, _compat_int_types):
+ return NotImplemented
+ return self.__class__(int(self) + other)
+
+ def __sub__(self, other):
+ if not isinstance(other, _compat_int_types):
+ return NotImplemented
+ return self.__class__(int(self) - other)
+
+ def __repr__(self):
+ return '%s(%r)' % (self.__class__.__name__, _compat_str(self))
+
+ def __str__(self):
+ return _compat_str(self._string_from_ip_int(self._ip))
+
+ def __hash__(self):
+ return hash(hex(int(self._ip)))
+
+ def _get_address_key(self):
+ return (self._version, self)
+
+ def __reduce__(self):
+ return self.__class__, (self._ip,)
+
+
+class _BaseNetwork(_IPAddressBase):
+
+ """A generic IP network object.
+
+ This IP class contains the version independent methods which are
+ used by networks.
+
+ """
+ def __init__(self, address):
+ self._cache = {}
+
+ def __repr__(self):
+ return '%s(%r)' % (self.__class__.__name__, _compat_str(self))
+
+ def __str__(self):
+ return '%s/%d' % (self.network_address, self.prefixlen)
+
+ def hosts(self):
+ """Generate Iterator over usable hosts in a network.
+
+ This is like __iter__ except it doesn't return the network
+ or broadcast addresses.
+
+ """
+ network = int(self.network_address)
+ broadcast = int(self.broadcast_address)
+ for x in _compat_range(network + 1, broadcast):
+ yield self._address_class(x)
+
+ def __iter__(self):
+ network = int(self.network_address)
+ broadcast = int(self.broadcast_address)
+ for x in _compat_range(network, broadcast + 1):
+ yield self._address_class(x)
+
+ def __getitem__(self, n):
+ network = int(self.network_address)
+ broadcast = int(self.broadcast_address)
+ if n >= 0:
+ if network + n > broadcast:
+ raise IndexError('address out of range')
+ return self._address_class(network + n)
+ else:
+ n += 1
+ if broadcast + n < network:
+ raise IndexError('address out of range')
+ return self._address_class(broadcast + n)
+
+ def __lt__(self, other):
+ if not isinstance(other, _IPAddressBase):
+ return NotImplemented
+ if not isinstance(other, _BaseNetwork):
+ raise TypeError('%s and %s are not of the same type' % (
+ self, other))
+ if self._version != other._version:
+ raise TypeError('%s and %s are not of the same version' % (
+ self, other))
+ if self.network_address != other.network_address:
+ return self.network_address < other.network_address
+ if self.netmask != other.netmask:
+ return self.netmask < other.netmask
+ return False
+
+ def __eq__(self, other):
+ try:
+ return (self._version == other._version and
+ self.network_address == other.network_address and
+ int(self.netmask) == int(other.netmask))
+ except AttributeError:
+ return NotImplemented
+
+ def __hash__(self):
+ return hash(int(self.network_address) ^ int(self.netmask))
+
+ def __contains__(self, other):
+ # always false if one is v4 and the other is v6.
+ if self._version != other._version:
+ return False
+ # dealing with another network.
+ if isinstance(other, _BaseNetwork):
+ return False
+ # dealing with another address
+ else:
+ # address
+ return (int(self.network_address) <= int(other._ip) <=
+ int(self.broadcast_address))
+
+ def overlaps(self, other):
+ """Tell if self is partly contained in other."""
+ return self.network_address in other or (
+ self.broadcast_address in other or (
+ other.network_address in self or (
+ other.broadcast_address in self)))
+
+ @property
+ def broadcast_address(self):
+ x = self._cache.get('broadcast_address')
+ if x is None:
+ x = self._address_class(int(self.network_address) |
+ int(self.hostmask))
+ self._cache['broadcast_address'] = x
+ return x
+
+ @property
+ def hostmask(self):
+ x = self._cache.get('hostmask')
+ if x is None:
+ x = self._address_class(int(self.netmask) ^ self._ALL_ONES)
+ self._cache['hostmask'] = x
+ return x
+
+ @property
+ def with_prefixlen(self):
+ return '%s/%d' % (self.network_address, self._prefixlen)
+
+ @property
+ def with_netmask(self):
+ return '%s/%s' % (self.network_address, self.netmask)
+
+ @property
+ def with_hostmask(self):
+ return '%s/%s' % (self.network_address, self.hostmask)
+
+ @property
+ def num_addresses(self):
+ """Number of hosts in the current subnet."""
+ return int(self.broadcast_address) - int(self.network_address) + 1
+
+ @property
+ def _address_class(self):
+ # Returning bare address objects (rather than interfaces) allows for
+ # more consistent behaviour across the network address, broadcast
+ # address and individual host addresses.
+ msg = '%200s has no associated address class' % (type(self),)
+ raise NotImplementedError(msg)
+
+ @property
+ def prefixlen(self):
+ return self._prefixlen
+
+ def address_exclude(self, other):
+ """Remove an address from a larger block.
+
+ For example:
+
+ addr1 = ip_network('192.0.2.0/28')
+ addr2 = ip_network('192.0.2.1/32')
+ list(addr1.address_exclude(addr2)) =
+ [IPv4Network('192.0.2.0/32'), IPv4Network('192.0.2.2/31'),
+ IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.8/29')]
+
+ or IPv6:
+
+ addr1 = ip_network('2001:db8::1/32')
+ addr2 = ip_network('2001:db8::1/128')
+ list(addr1.address_exclude(addr2)) =
+ [ip_network('2001:db8::1/128'),
+ ip_network('2001:db8::2/127'),
+ ip_network('2001:db8::4/126'),
+ ip_network('2001:db8::8/125'),
+ ...
+ ip_network('2001:db8:8000::/33')]
+
+ Args:
+ other: An IPv4Network or IPv6Network object of the same type.
+
+ Returns:
+ An iterator of the IPv(4|6)Network objects which is self
+ minus other.
+
+ Raises:
+ TypeError: If self and other are of differing address
+ versions, or if other is not a network object.
+ ValueError: If other is not completely contained by self.
+
+ """
+ if not self._version == other._version:
+ raise TypeError("%s and %s are not of the same version" % (
+ self, other))
+
+ if not isinstance(other, _BaseNetwork):
+ raise TypeError("%s is not a network object" % other)
+
+ if not other.subnet_of(self):
+ raise ValueError('%s not contained in %s' % (other, self))
+ if other == self:
+ return
+
+ # Make sure we're comparing the network of other.
+ other = other.__class__('%s/%s' % (other.network_address,
+ other.prefixlen))
+
+ s1, s2 = self.subnets()
+ while s1 != other and s2 != other:
+ if other.subnet_of(s1):
+ yield s2
+ s1, s2 = s1.subnets()
+ elif other.subnet_of(s2):
+ yield s1
+ s1, s2 = s2.subnets()
+ else:
+ # If we got here, there's a bug somewhere.
+ raise AssertionError('Error performing exclusion: '
+ 's1: %s s2: %s other: %s' %
+ (s1, s2, other))
+ if s1 == other:
+ yield s2
+ elif s2 == other:
+ yield s1
+ else:
+ # If we got here, there's a bug somewhere.
+ raise AssertionError('Error performing exclusion: '
+ 's1: %s s2: %s other: %s' %
+ (s1, s2, other))
+
+ def compare_networks(self, other):
+ """Compare two IP objects.
+
+ This is only concerned about the comparison of the integer
+ representation of the network addresses. This means that the
+ host bits aren't considered at all in this method. If you want
+ to compare host bits, you can easily enough do a
+ 'HostA._ip < HostB._ip'
+
+ Args:
+ other: An IP object.
+
+ Returns:
+ If the IP versions of self and other are the same, returns:
+
+ -1 if self < other:
+ eg: IPv4Network('192.0.2.0/25') < IPv4Network('192.0.2.128/25')
+ IPv6Network('2001:db8::1000/124') <
+ IPv6Network('2001:db8::2000/124')
+ 0 if self == other
+ eg: IPv4Network('192.0.2.0/24') == IPv4Network('192.0.2.0/24')
+ IPv6Network('2001:db8::1000/124') ==
+ IPv6Network('2001:db8::1000/124')
+ 1 if self > other
+ eg: IPv4Network('192.0.2.128/25') > IPv4Network('192.0.2.0/25')
+ IPv6Network('2001:db8::2000/124') >
+ IPv6Network('2001:db8::1000/124')
+
+ Raises:
+ TypeError if the IP versions are different.
+
+ """
+ # does this need to raise a ValueError?
+ if self._version != other._version:
+ raise TypeError('%s and %s are not of the same type' % (
+ self, other))
+ # self._version == other._version below here:
+ if self.network_address < other.network_address:
+ return -1
+ if self.network_address > other.network_address:
+ return 1
+ # self.network_address == other.network_address below here:
+ if self.netmask < other.netmask:
+ return -1
+ if self.netmask > other.netmask:
+ return 1
+ return 0
+
+ def _get_networks_key(self):
+ """Network-only key function.
+
+ Returns an object that identifies this address' network and
+ netmask. This function is a suitable "key" argument for sorted()
+ and list.sort().
+
+ """
+ return (self._version, self.network_address, self.netmask)
+
+ def subnets(self, prefixlen_diff=1, new_prefix=None):
+ """The subnets which join to make the current subnet.
+
+ In the case that self contains only one IP
+ (self._prefixlen == 32 for IPv4 or self._prefixlen == 128
+ for IPv6), yield an iterator with just ourself.
+
+ Args:
+ prefixlen_diff: An integer, the amount the prefix length
+ should be increased by. This should not be set if
+ new_prefix is also set.
+ new_prefix: The desired new prefix length. This must be a
+ larger number (smaller prefix) than the existing prefix.
+ This should not be set if prefixlen_diff is also set.
+
+ Returns:
+ An iterator of IPv(4|6) objects.
+
+ Raises:
+ ValueError: The prefixlen_diff is too small or too large.
+ OR
+ prefixlen_diff and new_prefix are both set or new_prefix
+ is a smaller number than the current prefix (smaller
+ number means a larger network)
+
+ """
+ if self._prefixlen == self._max_prefixlen:
+ yield self
+ return
+
+ if new_prefix is not None:
+ if new_prefix < self._prefixlen:
+ raise ValueError('new prefix must be longer')
+ if prefixlen_diff != 1:
+ raise ValueError('cannot set prefixlen_diff and new_prefix')
+ prefixlen_diff = new_prefix - self._prefixlen
+
+ if prefixlen_diff < 0:
+ raise ValueError('prefix length diff must be > 0')
+ new_prefixlen = self._prefixlen + prefixlen_diff
+
+ if new_prefixlen > self._max_prefixlen:
+ raise ValueError(
+ 'prefix length diff %d is invalid for netblock %s' % (
+ new_prefixlen, self))
+
+ start = int(self.network_address)
+ end = int(self.broadcast_address) + 1
+ step = (int(self.hostmask) + 1) >> prefixlen_diff
+ for new_addr in _compat_range(start, end, step):
+ current = self.__class__((new_addr, new_prefixlen))
+ yield current
+
+ def supernet(self, prefixlen_diff=1, new_prefix=None):
+ """The supernet containing the current network.
+
+ Args:
+ prefixlen_diff: An integer, the amount the prefix length of
+ the network should be decreased by. For example, given a
+ /24 network and a prefixlen_diff of 3, a supernet with a
+ /21 netmask is returned.
+
+ Returns:
+ An IPv4 network object.
+
+ Raises:
+ ValueError: If self.prefixlen - prefixlen_diff < 0. I.e., you have
+ a negative prefix length.
+ OR
+ If prefixlen_diff and new_prefix are both set or new_prefix is a
+ larger number than the current prefix (larger number means a
+ smaller network)
+
+ """
+ if self._prefixlen == 0:
+ return self
+
+ if new_prefix is not None:
+ if new_prefix > self._prefixlen:
+ raise ValueError('new prefix must be shorter')
+ if prefixlen_diff != 1:
+ raise ValueError('cannot set prefixlen_diff and new_prefix')
+ prefixlen_diff = self._prefixlen - new_prefix
+
+ new_prefixlen = self.prefixlen - prefixlen_diff
+ if new_prefixlen < 0:
+ raise ValueError(
+ 'current prefixlen is %d, cannot have a prefixlen_diff of %d' %
+ (self.prefixlen, prefixlen_diff))
+ return self.__class__((
+ int(self.network_address) & (int(self.netmask) << prefixlen_diff),
+ new_prefixlen))
+
+ @property
+ def is_multicast(self):
+ """Test if the address is reserved for multicast use.
+
+ Returns:
+ A boolean, True if the address is a multicast address.
+ See RFC 2373 2.7 for details.
+
+ """
+ return (self.network_address.is_multicast and
+ self.broadcast_address.is_multicast)
+
+ @staticmethod
+ def _is_subnet_of(a, b):
+ try:
+ # Always false if one is v4 and the other is v6.
+ if a._version != b._version:
+ raise TypeError("%s and %s are not of the same version" (a, b))
+ return (b.network_address <= a.network_address and
+ b.broadcast_address >= a.broadcast_address)
+ except AttributeError:
+ raise TypeError("Unable to test subnet containment "
+ "between %s and %s" % (a, b))
+
+ def subnet_of(self, other):
+ """Return True if this network is a subnet of other."""
+ return self._is_subnet_of(self, other)
+
+ def supernet_of(self, other):
+ """Return True if this network is a supernet of other."""
+ return self._is_subnet_of(other, self)
+
+ @property
+ def is_reserved(self):
+ """Test if the address is otherwise IETF reserved.
+
+ Returns:
+ A boolean, True if the address is within one of the
+ reserved IPv6 Network ranges.
+
+ """
+ return (self.network_address.is_reserved and
+ self.broadcast_address.is_reserved)
+
+ @property
+ def is_link_local(self):
+ """Test if the address is reserved for link-local.
+
+ Returns:
+ A boolean, True if the address is reserved per RFC 4291.
+
+ """
+ return (self.network_address.is_link_local and
+ self.broadcast_address.is_link_local)
+
+ @property
+ def is_private(self):
+ """Test if this address is allocated for private networks.
+
+ Returns:
+ A boolean, True if the address is reserved per
+ iana-ipv4-special-registry or iana-ipv6-special-registry.
+
+ """
+ return (self.network_address.is_private and
+ self.broadcast_address.is_private)
+
+ @property
+ def is_global(self):
+ """Test if this address is allocated for public networks.
+
+ Returns:
+ A boolean, True if the address is not reserved per
+ iana-ipv4-special-registry or iana-ipv6-special-registry.
+
+ """
+ return not self.is_private
+
+ @property
+ def is_unspecified(self):
+ """Test if the address is unspecified.
+
+ Returns:
+ A boolean, True if this is the unspecified address as defined in
+ RFC 2373 2.5.2.
+
+ """
+ return (self.network_address.is_unspecified and
+ self.broadcast_address.is_unspecified)
+
+ @property
+ def is_loopback(self):
+ """Test if the address is a loopback address.
+
+ Returns:
+ A boolean, True if the address is a loopback address as defined in
+ RFC 2373 2.5.3.
+
+ """
+ return (self.network_address.is_loopback and
+ self.broadcast_address.is_loopback)
+
+
+class _BaseV4(object):
+
+ """Base IPv4 object.
+
+ The following methods are used by IPv4 objects in both single IP
+ addresses and networks.
+
+ """
+
+ __slots__ = ()
+ _version = 4
+ # Equivalent to 255.255.255.255 or 32 bits of 1's.
+ _ALL_ONES = (2 ** IPV4LENGTH) - 1
+ _DECIMAL_DIGITS = frozenset('0123456789')
+
+ # the valid octets for host and netmasks. only useful for IPv4.
+ _valid_mask_octets = frozenset([255, 254, 252, 248, 240, 224, 192, 128, 0])
+
+ _max_prefixlen = IPV4LENGTH
+ # There are only a handful of valid v4 netmasks, so we cache them all
+ # when constructed (see _make_netmask()).
+ _netmask_cache = {}
+
+ def _explode_shorthand_ip_string(self):
+ return _compat_str(self)
+
+ @classmethod
+ def _make_netmask(cls, arg):
+ """Make a (netmask, prefix_len) tuple from the given argument.
+
+ Argument can be:
+ - an integer (the prefix length)
+ - a string representing the prefix length (e.g. "24")
+ - a string representing the prefix netmask (e.g. "255.255.255.0")
+ """
+ if arg not in cls._netmask_cache:
+ if isinstance(arg, _compat_int_types):
+ prefixlen = arg
+ else:
+ try:
+ # Check for a netmask in prefix length form
+ prefixlen = cls._prefix_from_prefix_string(arg)
+ except NetmaskValueError:
+ # Check for a netmask or hostmask in dotted-quad form.
+ # This may raise NetmaskValueError.
+ prefixlen = cls._prefix_from_ip_string(arg)
+ netmask = IPv4Address(cls._ip_int_from_prefix(prefixlen))
+ cls._netmask_cache[arg] = netmask, prefixlen
+ return cls._netmask_cache[arg]
+
+ @classmethod
+ def _ip_int_from_string(cls, ip_str):
+ """Turn the given IP string into an integer for comparison.
+
+ Args:
+ ip_str: A string, the IP ip_str.
+
+ Returns:
+ The IP ip_str as an integer.
+
+ Raises:
+ AddressValueError: if ip_str isn't a valid IPv4 Address.
+
+ """
+ if not ip_str:
+ raise AddressValueError('Address cannot be empty')
+
+ octets = ip_str.split('.')
+ if len(octets) != 4:
+ raise AddressValueError("Expected 4 octets in %r" % ip_str)
+
+ try:
+ return _compat_int_from_byte_vals(
+ map(cls._parse_octet, octets), 'big')
+ except ValueError as exc:
+ raise AddressValueError("%s in %r" % (exc, ip_str))
+
+ @classmethod
+ def _parse_octet(cls, octet_str):
+ """Convert a decimal octet into an integer.
+
+ Args:
+ octet_str: A string, the number to parse.
+
+ Returns:
+ The octet as an integer.
+
+ Raises:
+ ValueError: if the octet isn't strictly a decimal from [0..255].
+
+ """
+ if not octet_str:
+ raise ValueError("Empty octet not permitted")
+ # Whitelist the characters, since int() allows a lot of bizarre stuff.
+ if not cls._DECIMAL_DIGITS.issuperset(octet_str):
+ msg = "Only decimal digits permitted in %r"
+ raise ValueError(msg % octet_str)
+ # We do the length check second, since the invalid character error
+ # is likely to be more informative for the user
+ if len(octet_str) > 3:
+ msg = "At most 3 characters permitted in %r"
+ raise ValueError(msg % octet_str)
+ # Convert to integer (we know digits are legal)
+ octet_int = int(octet_str, 10)
+ # Any octets that look like they *might* be written in octal,
+ # and which don't look exactly the same in both octal and
+ # decimal are rejected as ambiguous
+ if octet_int > 7 and octet_str[0] == '0':
+ msg = "Ambiguous (octal/decimal) value in %r not permitted"
+ raise ValueError(msg % octet_str)
+ if octet_int > 255:
+ raise ValueError("Octet %d (> 255) not permitted" % octet_int)
+ return octet_int
+
+ @classmethod
+ def _string_from_ip_int(cls, ip_int):
+ """Turns a 32-bit integer into dotted decimal notation.
+
+ Args:
+ ip_int: An integer, the IP address.
+
+ Returns:
+ The IP address as a string in dotted decimal notation.
+
+ """
+ return '.'.join(_compat_str(struct.unpack(b'!B', b)[0]
+ if isinstance(b, bytes)
+ else b)
+ for b in _compat_to_bytes(ip_int, 4, 'big'))
+
+ def _is_hostmask(self, ip_str):
+ """Test if the IP string is a hostmask (rather than a netmask).
+
+ Args:
+ ip_str: A string, the potential hostmask.
+
+ Returns:
+ A boolean, True if the IP string is a hostmask.
+
+ """
+ bits = ip_str.split('.')
+ try:
+ parts = [x for x in map(int, bits) if x in self._valid_mask_octets]
+ except ValueError:
+ return False
+ if len(parts) != len(bits):
+ return False
+ if parts[0] < parts[-1]:
+ return True
+ return False
+
+ def _reverse_pointer(self):
+ """Return the reverse DNS pointer name for the IPv4 address.
+
+ This implements the method described in RFC1035 3.5.
+
+ """
+ reverse_octets = _compat_str(self).split('.')[::-1]
+ return '.'.join(reverse_octets) + '.in-addr.arpa'
+
+ @property
+ def max_prefixlen(self):
+ return self._max_prefixlen
+
+ @property
+ def version(self):
+ return self._version
+
+
+class IPv4Address(_BaseV4, _BaseAddress):
+
+ """Represent and manipulate single IPv4 Addresses."""
+
+ __slots__ = ('_ip', '__weakref__')
+
+ def __init__(self, address):
+
+ """
+ Args:
+ address: A string or integer representing the IP
+
+ Additionally, an integer can be passed, so
+ IPv4Address('192.0.2.1') == IPv4Address(3221225985).
+ or, more generally
+ IPv4Address(int(IPv4Address('192.0.2.1'))) ==
+ IPv4Address('192.0.2.1')
+
+ Raises:
+ AddressValueError: If ipaddress isn't a valid IPv4 address.
+
+ """
+ # Efficient constructor from integer.
+ if isinstance(address, _compat_int_types):
+ self._check_int_address(address)
+ self._ip = address
+ return
+
+ # Constructing from a packed address
+ if isinstance(address, bytes):
+ self._check_packed_address(address, 4)
+ bvs = _compat_bytes_to_byte_vals(address)
+ self._ip = _compat_int_from_byte_vals(bvs, 'big')
+ return
+
+ # Assume input argument to be string or any object representation
+ # which converts into a formatted IP string.
+ addr_str = _compat_str(address)
+ if '/' in addr_str:
+ raise AddressValueError("Unexpected '/' in %r" % address)
+ self._ip = self._ip_int_from_string(addr_str)
+
+ @property
+ def packed(self):
+ """The binary representation of this address."""
+ return v4_int_to_packed(self._ip)
+
+ @property
+ def is_reserved(self):
+ """Test if the address is otherwise IETF reserved.
+
+ Returns:
+ A boolean, True if the address is within the
+ reserved IPv4 Network range.
+
+ """
+ return self in self._constants._reserved_network
+
+ @property
+ def is_private(self):
+ """Test if this address is allocated for private networks.
+
+ Returns:
+ A boolean, True if the address is reserved per
+ iana-ipv4-special-registry.
+
+ """
+ return any(self in net for net in self._constants._private_networks)
+
+ @property
+ def is_global(self):
+ return (
+ self not in self._constants._public_network and
+ not self.is_private)
+
+ @property
+ def is_multicast(self):
+ """Test if the address is reserved for multicast use.
+
+ Returns:
+ A boolean, True if the address is multicast.
+ See RFC 3171 for details.
+
+ """
+ return self in self._constants._multicast_network
+
+ @property
+ def is_unspecified(self):
+ """Test if the address is unspecified.
+
+ Returns:
+ A boolean, True if this is the unspecified address as defined in
+ RFC 5735 3.
+
+ """
+ return self == self._constants._unspecified_address
+
+ @property
+ def is_loopback(self):
+ """Test if the address is a loopback address.
+
+ Returns:
+ A boolean, True if the address is a loopback per RFC 3330.
+
+ """
+ return self in self._constants._loopback_network
+
+ @property
+ def is_link_local(self):
+ """Test if the address is reserved for link-local.
+
+ Returns:
+ A boolean, True if the address is link-local per RFC 3927.
+
+ """
+ return self in self._constants._linklocal_network
+
+
+class IPv4Interface(IPv4Address):
+
+ def __init__(self, address):
+ if isinstance(address, (bytes, _compat_int_types)):
+ IPv4Address.__init__(self, address)
+ self.network = IPv4Network(self._ip)
+ self._prefixlen = self._max_prefixlen
+ return
+
+ if isinstance(address, tuple):
+ IPv4Address.__init__(self, address[0])
+ if len(address) > 1:
+ self._prefixlen = int(address[1])
+ else:
+ self._prefixlen = self._max_prefixlen
+
+ self.network = IPv4Network(address, strict=False)
+ self.netmask = self.network.netmask
+ self.hostmask = self.network.hostmask
+ return
+
+ addr = _split_optional_netmask(address)
+ IPv4Address.__init__(self, addr[0])
+
+ self.network = IPv4Network(address, strict=False)
+ self._prefixlen = self.network._prefixlen
+
+ self.netmask = self.network.netmask
+ self.hostmask = self.network.hostmask
+
+ def __str__(self):
+ return '%s/%d' % (self._string_from_ip_int(self._ip),
+ self.network.prefixlen)
+
+ def __eq__(self, other):
+ address_equal = IPv4Address.__eq__(self, other)
+ if not address_equal or address_equal is NotImplemented:
+ return address_equal
+ try:
+ return self.network == other.network
+ except AttributeError:
+ # An interface with an associated network is NOT the
+ # same as an unassociated address. That's why the hash
+ # takes the extra info into account.
+ return False
+
+ def __lt__(self, other):
+ address_less = IPv4Address.__lt__(self, other)
+ if address_less is NotImplemented:
+ return NotImplemented
+ try:
+ return (self.network < other.network or
+ self.network == other.network and address_less)
+ except AttributeError:
+ # We *do* allow addresses and interfaces to be sorted. The
+ # unassociated address is considered less than all interfaces.
+ return False
+
+ def __hash__(self):
+ return self._ip ^ self._prefixlen ^ int(self.network.network_address)
+
+ __reduce__ = _IPAddressBase.__reduce__
+
+ @property
+ def ip(self):
+ return IPv4Address(self._ip)
+
+ @property
+ def with_prefixlen(self):
+ return '%s/%s' % (self._string_from_ip_int(self._ip),
+ self._prefixlen)
+
+ @property
+ def with_netmask(self):
+ return '%s/%s' % (self._string_from_ip_int(self._ip),
+ self.netmask)
+
+ @property
+ def with_hostmask(self):
+ return '%s/%s' % (self._string_from_ip_int(self._ip),
+ self.hostmask)
+
+
+class IPv4Network(_BaseV4, _BaseNetwork):
+
+ """This class represents and manipulates 32-bit IPv4 network + addresses..
+
+ Attributes: [examples for IPv4Network('192.0.2.0/27')]
+ .network_address: IPv4Address('192.0.2.0')
+ .hostmask: IPv4Address('0.0.0.31')
+ .broadcast_address: IPv4Address('192.0.2.32')
+ .netmask: IPv4Address('255.255.255.224')
+ .prefixlen: 27
+
+ """
+ # Class to use when creating address objects
+ _address_class = IPv4Address
+
+ def __init__(self, address, strict=True):
+
+ """Instantiate a new IPv4 network object.
+
+ Args:
+ address: A string or integer representing the IP [& network].
+ '192.0.2.0/24'
+ '192.0.2.0/255.255.255.0'
+ '192.0.0.2/0.0.0.255'
+ are all functionally the same in IPv4. Similarly,
+ '192.0.2.1'
+ '192.0.2.1/255.255.255.255'
+ '192.0.2.1/32'
+ are also functionally equivalent. That is to say, failing to
+ provide a subnetmask will create an object with a mask of /32.
+
+ If the mask (portion after the / in the argument) is given in
+ dotted quad form, it is treated as a netmask if it starts with a
+ non-zero field (e.g. /255.0.0.0 == /8) and as a hostmask if it
+ starts with a zero field (e.g. 0.255.255.255 == /8), with the
+ single exception of an all-zero mask which is treated as a
+ netmask == /0. If no mask is given, a default of /32 is used.
+
+ Additionally, an integer can be passed, so
+ IPv4Network('192.0.2.1') == IPv4Network(3221225985)
+ or, more generally
+ IPv4Interface(int(IPv4Interface('192.0.2.1'))) ==
+ IPv4Interface('192.0.2.1')
+
+ Raises:
+ AddressValueError: If ipaddress isn't a valid IPv4 address.
+ NetmaskValueError: If the netmask isn't valid for
+ an IPv4 address.
+ ValueError: If strict is True and a network address is not
+ supplied.
+
+ """
+ _BaseNetwork.__init__(self, address)
+
+ # Constructing from a packed address or integer
+ if isinstance(address, (_compat_int_types, bytes)):
+ self.network_address = IPv4Address(address)
+ self.netmask, self._prefixlen = self._make_netmask(
+ self._max_prefixlen)
+ # fixme: address/network test here.
+ return
+
+ if isinstance(address, tuple):
+ if len(address) > 1:
+ arg = address[1]
+ else:
+ # We weren't given an address[1]
+ arg = self._max_prefixlen
+ self.network_address = IPv4Address(address[0])
+ self.netmask, self._prefixlen = self._make_netmask(arg)
+ packed = int(self.network_address)
+ if packed & int(self.netmask) != packed:
+ if strict:
+ raise ValueError('%s has host bits set' % self)
+ else:
+ self.network_address = IPv4Address(packed &
+ int(self.netmask))
+ return
+
+ # Assume input argument to be string or any object representation
+ # which converts into a formatted IP prefix string.
+ addr = _split_optional_netmask(address)
+ self.network_address = IPv4Address(self._ip_int_from_string(addr[0]))
+
+ if len(addr) == 2:
+ arg = addr[1]
+ else:
+ arg = self._max_prefixlen
+ self.netmask, self._prefixlen = self._make_netmask(arg)
+
+ if strict:
+ if (IPv4Address(int(self.network_address) & int(self.netmask)) !=
+ self.network_address):
+ raise ValueError('%s has host bits set' % self)
+ self.network_address = IPv4Address(int(self.network_address) &
+ int(self.netmask))
+
+ if self._prefixlen == (self._max_prefixlen - 1):
+ self.hosts = self.__iter__
+
+ @property
+ def is_global(self):
+ """Test if this address is allocated for public networks.
+
+ Returns:
+ A boolean, True if the address is not reserved per
+ iana-ipv4-special-registry.
+
+ """
+ return (not (self.network_address in IPv4Network('100.64.0.0/10') and
+ self.broadcast_address in IPv4Network('100.64.0.0/10')) and
+ not self.is_private)
+
+
+class _IPv4Constants(object):
+
+ _linklocal_network = IPv4Network('169.254.0.0/16')
+
+ _loopback_network = IPv4Network('127.0.0.0/8')
+
+ _multicast_network = IPv4Network('224.0.0.0/4')
+
+ _public_network = IPv4Network('100.64.0.0/10')
+
+ _private_networks = [
+ IPv4Network('0.0.0.0/8'),
+ IPv4Network('10.0.0.0/8'),
+ IPv4Network('127.0.0.0/8'),
+ IPv4Network('169.254.0.0/16'),
+ IPv4Network('172.16.0.0/12'),
+ IPv4Network('192.0.0.0/29'),
+ IPv4Network('192.0.0.170/31'),
+ IPv4Network('192.0.2.0/24'),
+ IPv4Network('192.168.0.0/16'),
+ IPv4Network('198.18.0.0/15'),
+ IPv4Network('198.51.100.0/24'),
+ IPv4Network('203.0.113.0/24'),
+ IPv4Network('240.0.0.0/4'),
+ IPv4Network('255.255.255.255/32'),
+ ]
+
+ _reserved_network = IPv4Network('240.0.0.0/4')
+
+ _unspecified_address = IPv4Address('0.0.0.0')
+
+
+IPv4Address._constants = _IPv4Constants
+
+
+class _BaseV6(object):
+
+ """Base IPv6 object.
+
+ The following methods are used by IPv6 objects in both single IP
+ addresses and networks.
+
+ """
+
+ __slots__ = ()
+ _version = 6
+ _ALL_ONES = (2 ** IPV6LENGTH) - 1
+ _HEXTET_COUNT = 8
+ _HEX_DIGITS = frozenset('0123456789ABCDEFabcdef')
+ _max_prefixlen = IPV6LENGTH
+
+ # There are only a bunch of valid v6 netmasks, so we cache them all
+ # when constructed (see _make_netmask()).
+ _netmask_cache = {}
+
+ @classmethod
+ def _make_netmask(cls, arg):
+ """Make a (netmask, prefix_len) tuple from the given argument.
+
+ Argument can be:
+ - an integer (the prefix length)
+ - a string representing the prefix length (e.g. "24")
+ - a string representing the prefix netmask (e.g. "255.255.255.0")
+ """
+ if arg not in cls._netmask_cache:
+ if isinstance(arg, _compat_int_types):
+ prefixlen = arg
+ else:
+ prefixlen = cls._prefix_from_prefix_string(arg)
+ netmask = IPv6Address(cls._ip_int_from_prefix(prefixlen))
+ cls._netmask_cache[arg] = netmask, prefixlen
+ return cls._netmask_cache[arg]
+
+ @classmethod
+ def _ip_int_from_string(cls, ip_str):
+ """Turn an IPv6 ip_str into an integer.
+
+ Args:
+ ip_str: A string, the IPv6 ip_str.
+
+ Returns:
+ An int, the IPv6 address
+
+ Raises:
+ AddressValueError: if ip_str isn't a valid IPv6 Address.
+
+ """
+ if not ip_str:
+ raise AddressValueError('Address cannot be empty')
+
+ parts = ip_str.split(':')
+
+ # An IPv6 address needs at least 2 colons (3 parts).
+ _min_parts = 3
+ if len(parts) < _min_parts:
+ msg = "At least %d parts expected in %r" % (_min_parts, ip_str)
+ raise AddressValueError(msg)
+
+ # If the address has an IPv4-style suffix, convert it to hexadecimal.
+ if '.' in parts[-1]:
+ try:
+ ipv4_int = IPv4Address(parts.pop())._ip
+ except AddressValueError as exc:
+ raise AddressValueError("%s in %r" % (exc, ip_str))
+ parts.append('%x' % ((ipv4_int >> 16) & 0xFFFF))
+ parts.append('%x' % (ipv4_int & 0xFFFF))
+
+ # An IPv6 address can't have more than 8 colons (9 parts).
+ # The extra colon comes from using the "::" notation for a single
+ # leading or trailing zero part.
+ _max_parts = cls._HEXTET_COUNT + 1
+ if len(parts) > _max_parts:
+ msg = "At most %d colons permitted in %r" % (
+ _max_parts - 1, ip_str)
+ raise AddressValueError(msg)
+
+ # Disregarding the endpoints, find '::' with nothing in between.
+ # This indicates that a run of zeroes has been skipped.
+ skip_index = None
+ for i in _compat_range(1, len(parts) - 1):
+ if not parts[i]:
+ if skip_index is not None:
+ # Can't have more than one '::'
+ msg = "At most one '::' permitted in %r" % ip_str
+ raise AddressValueError(msg)
+ skip_index = i
+
+ # parts_hi is the number of parts to copy from above/before the '::'
+ # parts_lo is the number of parts to copy from below/after the '::'
+ if skip_index is not None:
+ # If we found a '::', then check if it also covers the endpoints.
+ parts_hi = skip_index
+ parts_lo = len(parts) - skip_index - 1
+ if not parts[0]:
+ parts_hi -= 1
+ if parts_hi:
+ msg = "Leading ':' only permitted as part of '::' in %r"
+ raise AddressValueError(msg % ip_str) # ^: requires ^::
+ if not parts[-1]:
+ parts_lo -= 1
+ if parts_lo:
+ msg = "Trailing ':' only permitted as part of '::' in %r"
+ raise AddressValueError(msg % ip_str) # :$ requires ::$
+ parts_skipped = cls._HEXTET_COUNT - (parts_hi + parts_lo)
+ if parts_skipped < 1:
+ msg = "Expected at most %d other parts with '::' in %r"
+ raise AddressValueError(msg % (cls._HEXTET_COUNT - 1, ip_str))
+ else:
+ # Otherwise, allocate the entire address to parts_hi. The
+ # endpoints could still be empty, but _parse_hextet() will check
+ # for that.
+ if len(parts) != cls._HEXTET_COUNT:
+ msg = "Exactly %d parts expected without '::' in %r"
+ raise AddressValueError(msg % (cls._HEXTET_COUNT, ip_str))
+ if not parts[0]:
+ msg = "Leading ':' only permitted as part of '::' in %r"
+ raise AddressValueError(msg % ip_str) # ^: requires ^::
+ if not parts[-1]:
+ msg = "Trailing ':' only permitted as part of '::' in %r"
+ raise AddressValueError(msg % ip_str) # :$ requires ::$
+ parts_hi = len(parts)
+ parts_lo = 0
+ parts_skipped = 0
+
+ try:
+ # Now, parse the hextets into a 128-bit integer.
+ ip_int = 0
+ for i in range(parts_hi):
+ ip_int <<= 16
+ ip_int |= cls._parse_hextet(parts[i])
+ ip_int <<= 16 * parts_skipped
+ for i in range(-parts_lo, 0):
+ ip_int <<= 16
+ ip_int |= cls._parse_hextet(parts[i])
+ return ip_int
+ except ValueError as exc:
+ raise AddressValueError("%s in %r" % (exc, ip_str))
+
+ @classmethod
+ def _parse_hextet(cls, hextet_str):
+ """Convert an IPv6 hextet string into an integer.
+
+ Args:
+ hextet_str: A string, the number to parse.
+
+ Returns:
+ The hextet as an integer.
+
+ Raises:
+ ValueError: if the input isn't strictly a hex number from
+ [0..FFFF].
+
+ """
+ # Whitelist the characters, since int() allows a lot of bizarre stuff.
+ if not cls._HEX_DIGITS.issuperset(hextet_str):
+ raise ValueError("Only hex digits permitted in %r" % hextet_str)
+ # We do the length check second, since the invalid character error
+ # is likely to be more informative for the user
+ if len(hextet_str) > 4:
+ msg = "At most 4 characters permitted in %r"
+ raise ValueError(msg % hextet_str)
+ # Length check means we can skip checking the integer value
+ return int(hextet_str, 16)
+
+ @classmethod
+ def _compress_hextets(cls, hextets):
+ """Compresses a list of hextets.
+
+ Compresses a list of strings, replacing the longest continuous
+ sequence of "0" in the list with "" and adding empty strings at
+ the beginning or at the end of the string such that subsequently
+ calling ":".join(hextets) will produce the compressed version of
+ the IPv6 address.
+
+ Args:
+ hextets: A list of strings, the hextets to compress.
+
+ Returns:
+ A list of strings.
+
+ """
+ best_doublecolon_start = -1
+ best_doublecolon_len = 0
+ doublecolon_start = -1
+ doublecolon_len = 0
+ for index, hextet in enumerate(hextets):
+ if hextet == '0':
+ doublecolon_len += 1
+ if doublecolon_start == -1:
+ # Start of a sequence of zeros.
+ doublecolon_start = index
+ if doublecolon_len > best_doublecolon_len:
+ # This is the longest sequence of zeros so far.
+ best_doublecolon_len = doublecolon_len
+ best_doublecolon_start = doublecolon_start
+ else:
+ doublecolon_len = 0
+ doublecolon_start = -1
+
+ if best_doublecolon_len > 1:
+ best_doublecolon_end = (best_doublecolon_start +
+ best_doublecolon_len)
+ # For zeros at the end of the address.
+ if best_doublecolon_end == len(hextets):
+ hextets += ['']
+ hextets[best_doublecolon_start:best_doublecolon_end] = ['']
+ # For zeros at the beginning of the address.
+ if best_doublecolon_start == 0:
+ hextets = [''] + hextets
+
+ return hextets
+
+ @classmethod
+ def _string_from_ip_int(cls, ip_int=None):
+ """Turns a 128-bit integer into hexadecimal notation.
+
+ Args:
+ ip_int: An integer, the IP address.
+
+ Returns:
+ A string, the hexadecimal representation of the address.
+
+ Raises:
+ ValueError: The address is bigger than 128 bits of all ones.
+
+ """
+ if ip_int is None:
+ ip_int = int(cls._ip)
+
+ if ip_int > cls._ALL_ONES:
+ raise ValueError('IPv6 address is too large')
+
+ hex_str = '%032x' % ip_int
+ hextets = ['%x' % int(hex_str[x:x + 4], 16) for x in range(0, 32, 4)]
+
+ hextets = cls._compress_hextets(hextets)
+ return ':'.join(hextets)
+
+ def _explode_shorthand_ip_string(self):
+ """Expand a shortened IPv6 address.
+
+ Args:
+ ip_str: A string, the IPv6 address.
+
+ Returns:
+ A string, the expanded IPv6 address.
+
+ """
+ if isinstance(self, IPv6Network):
+ ip_str = _compat_str(self.network_address)
+ elif isinstance(self, IPv6Interface):
+ ip_str = _compat_str(self.ip)
+ else:
+ ip_str = _compat_str(self)
+
+ ip_int = self._ip_int_from_string(ip_str)
+ hex_str = '%032x' % ip_int
+ parts = [hex_str[x:x + 4] for x in range(0, 32, 4)]
+ if isinstance(self, (_BaseNetwork, IPv6Interface)):
+ return '%s/%d' % (':'.join(parts), self._prefixlen)
+ return ':'.join(parts)
+
+ def _reverse_pointer(self):
+ """Return the reverse DNS pointer name for the IPv6 address.
+
+ This implements the method described in RFC3596 2.5.
+
+ """
+ reverse_chars = self.exploded[::-1].replace(':', '')
+ return '.'.join(reverse_chars) + '.ip6.arpa'
+
+ @property
+ def max_prefixlen(self):
+ return self._max_prefixlen
+
+ @property
+ def version(self):
+ return self._version
+
+
+class IPv6Address(_BaseV6, _BaseAddress):
+
+ """Represent and manipulate single IPv6 Addresses."""
+
+ __slots__ = ('_ip', '__weakref__')
+
+ def __init__(self, address):
+ """Instantiate a new IPv6 address object.
+
+ Args:
+ address: A string or integer representing the IP
+
+ Additionally, an integer can be passed, so
+ IPv6Address('2001:db8::') ==
+ IPv6Address(42540766411282592856903984951653826560)
+ or, more generally
+ IPv6Address(int(IPv6Address('2001:db8::'))) ==
+ IPv6Address('2001:db8::')
+
+ Raises:
+ AddressValueError: If address isn't a valid IPv6 address.
+
+ """
+ # Efficient constructor from integer.
+ if isinstance(address, _compat_int_types):
+ self._check_int_address(address)
+ self._ip = address
+ return
+
+ # Constructing from a packed address
+ if isinstance(address, bytes):
+ self._check_packed_address(address, 16)
+ bvs = _compat_bytes_to_byte_vals(address)
+ self._ip = _compat_int_from_byte_vals(bvs, 'big')
+ return
+
+ # Assume input argument to be string or any object representation
+ # which converts into a formatted IP string.
+ addr_str = _compat_str(address)
+ if '/' in addr_str:
+ raise AddressValueError("Unexpected '/' in %r" % address)
+ self._ip = self._ip_int_from_string(addr_str)
+
+ @property
+ def packed(self):
+ """The binary representation of this address."""
+ return v6_int_to_packed(self._ip)
+
+ @property
+ def is_multicast(self):
+ """Test if the address is reserved for multicast use.
+
+ Returns:
+ A boolean, True if the address is a multicast address.
+ See RFC 2373 2.7 for details.
+
+ """
+ return self in self._constants._multicast_network
+
+ @property
+ def is_reserved(self):
+ """Test if the address is otherwise IETF reserved.
+
+ Returns:
+ A boolean, True if the address is within one of the
+ reserved IPv6 Network ranges.
+
+ """
+ return any(self in x for x in self._constants._reserved_networks)
+
+ @property
+ def is_link_local(self):
+ """Test if the address is reserved for link-local.
+
+ Returns:
+ A boolean, True if the address is reserved per RFC 4291.
+
+ """
+ return self in self._constants._linklocal_network
+
+ @property
+ def is_site_local(self):
+ """Test if the address is reserved for site-local.
+
+ Note that the site-local address space has been deprecated by RFC 3879.
+ Use is_private to test if this address is in the space of unique local
+ addresses as defined by RFC 4193.
+
+ Returns:
+ A boolean, True if the address is reserved per RFC 3513 2.5.6.
+
+ """
+ return self in self._constants._sitelocal_network
+
+ @property
+ def is_private(self):
+ """Test if this address is allocated for private networks.
+
+ Returns:
+ A boolean, True if the address is reserved per
+ iana-ipv6-special-registry.
+
+ """
+ return any(self in net for net in self._constants._private_networks)
+
+ @property
+ def is_global(self):
+ """Test if this address is allocated for public networks.
+
+ Returns:
+ A boolean, true if the address is not reserved per
+ iana-ipv6-special-registry.
+
+ """
+ return not self.is_private
+
+ @property
+ def is_unspecified(self):
+ """Test if the address is unspecified.
+
+ Returns:
+ A boolean, True if this is the unspecified address as defined in
+ RFC 2373 2.5.2.
+
+ """
+ return self._ip == 0
+
+ @property
+ def is_loopback(self):
+ """Test if the address is a loopback address.
+
+ Returns:
+ A boolean, True if the address is a loopback address as defined in
+ RFC 2373 2.5.3.
+
+ """
+ return self._ip == 1
+
+ @property
+ def ipv4_mapped(self):
+ """Return the IPv4 mapped address.
+
+ Returns:
+ If the IPv6 address is a v4 mapped address, return the
+ IPv4 mapped address. Return None otherwise.
+
+ """
+ if (self._ip >> 32) != 0xFFFF:
+ return None
+ return IPv4Address(self._ip & 0xFFFFFFFF)
+
+ @property
+ def teredo(self):
+ """Tuple of embedded teredo IPs.
+
+ Returns:
+ Tuple of the (server, client) IPs or None if the address
+ doesn't appear to be a teredo address (doesn't start with
+ 2001::/32)
+
+ """
+ if (self._ip >> 96) != 0x20010000:
+ return None
+ return (IPv4Address((self._ip >> 64) & 0xFFFFFFFF),
+ IPv4Address(~self._ip & 0xFFFFFFFF))
+
+ @property
+ def sixtofour(self):
+ """Return the IPv4 6to4 embedded address.
+
+ Returns:
+ The IPv4 6to4-embedded address if present or None if the
+ address doesn't appear to contain a 6to4 embedded address.
+
+ """
+ if (self._ip >> 112) != 0x2002:
+ return None
+ return IPv4Address((self._ip >> 80) & 0xFFFFFFFF)
+
+
+class IPv6Interface(IPv6Address):
+
+ def __init__(self, address):
+ if isinstance(address, (bytes, _compat_int_types)):
+ IPv6Address.__init__(self, address)
+ self.network = IPv6Network(self._ip)
+ self._prefixlen = self._max_prefixlen
+ return
+ if isinstance(address, tuple):
+ IPv6Address.__init__(self, address[0])
+ if len(address) > 1:
+ self._prefixlen = int(address[1])
+ else:
+ self._prefixlen = self._max_prefixlen
+ self.network = IPv6Network(address, strict=False)
+ self.netmask = self.network.netmask
+ self.hostmask = self.network.hostmask
+ return
+
+ addr = _split_optional_netmask(address)
+ IPv6Address.__init__(self, addr[0])
+ self.network = IPv6Network(address, strict=False)
+ self.netmask = self.network.netmask
+ self._prefixlen = self.network._prefixlen
+ self.hostmask = self.network.hostmask
+
+ def __str__(self):
+ return '%s/%d' % (self._string_from_ip_int(self._ip),
+ self.network.prefixlen)
+
+ def __eq__(self, other):
+ address_equal = IPv6Address.__eq__(self, other)
+ if not address_equal or address_equal is NotImplemented:
+ return address_equal
+ try:
+ return self.network == other.network
+ except AttributeError:
+ # An interface with an associated network is NOT the
+ # same as an unassociated address. That's why the hash
+ # takes the extra info into account.
+ return False
+
+ def __lt__(self, other):
+ address_less = IPv6Address.__lt__(self, other)
+ if address_less is NotImplemented:
+ return NotImplemented
+ try:
+ return (self.network < other.network or
+ self.network == other.network and address_less)
+ except AttributeError:
+ # We *do* allow addresses and interfaces to be sorted. The
+ # unassociated address is considered less than all interfaces.
+ return False
+
+ def __hash__(self):
+ return self._ip ^ self._prefixlen ^ int(self.network.network_address)
+
+ __reduce__ = _IPAddressBase.__reduce__
+
+ @property
+ def ip(self):
+ return IPv6Address(self._ip)
+
+ @property
+ def with_prefixlen(self):
+ return '%s/%s' % (self._string_from_ip_int(self._ip),
+ self._prefixlen)
+
+ @property
+ def with_netmask(self):
+ return '%s/%s' % (self._string_from_ip_int(self._ip),
+ self.netmask)
+
+ @property
+ def with_hostmask(self):
+ return '%s/%s' % (self._string_from_ip_int(self._ip),
+ self.hostmask)
+
+ @property
+ def is_unspecified(self):
+ return self._ip == 0 and self.network.is_unspecified
+
+ @property
+ def is_loopback(self):
+ return self._ip == 1 and self.network.is_loopback
+
+
+class IPv6Network(_BaseV6, _BaseNetwork):
+
+ """This class represents and manipulates 128-bit IPv6 networks.
+
+ Attributes: [examples for IPv6('2001:db8::1000/124')]
+ .network_address: IPv6Address('2001:db8::1000')
+ .hostmask: IPv6Address('::f')
+ .broadcast_address: IPv6Address('2001:db8::100f')
+ .netmask: IPv6Address('ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff0')
+ .prefixlen: 124
+
+ """
+
+ # Class to use when creating address objects
+ _address_class = IPv6Address
+
+ def __init__(self, address, strict=True):
+ """Instantiate a new IPv6 Network object.
+
+ Args:
+ address: A string or integer representing the IPv6 network or the
+ IP and prefix/netmask.
+ '2001:db8::/128'
+ '2001:db8:0000:0000:0000:0000:0000:0000/128'
+ '2001:db8::'
+ are all functionally the same in IPv6. That is to say,
+ failing to provide a subnetmask will create an object with
+ a mask of /128.
+
+ Additionally, an integer can be passed, so
+ IPv6Network('2001:db8::') ==
+ IPv6Network(42540766411282592856903984951653826560)
+ or, more generally
+ IPv6Network(int(IPv6Network('2001:db8::'))) ==
+ IPv6Network('2001:db8::')
+
+ strict: A boolean. If true, ensure that we have been passed
+ A true network address, eg, 2001:db8::1000/124 and not an
+ IP address on a network, eg, 2001:db8::1/124.
+
+ Raises:
+ AddressValueError: If address isn't a valid IPv6 address.
+ NetmaskValueError: If the netmask isn't valid for
+ an IPv6 address.
+ ValueError: If strict was True and a network address was not
+ supplied.
+
+ """
+ _BaseNetwork.__init__(self, address)
+
+ # Efficient constructor from integer or packed address
+ if isinstance(address, (bytes, _compat_int_types)):
+ self.network_address = IPv6Address(address)
+ self.netmask, self._prefixlen = self._make_netmask(
+ self._max_prefixlen)
+ return
+
+ if isinstance(address, tuple):
+ if len(address) > 1:
+ arg = address[1]
+ else:
+ arg = self._max_prefixlen
+ self.netmask, self._prefixlen = self._make_netmask(arg)
+ self.network_address = IPv6Address(address[0])
+ packed = int(self.network_address)
+ if packed & int(self.netmask) != packed:
+ if strict:
+ raise ValueError('%s has host bits set' % self)
+ else:
+ self.network_address = IPv6Address(packed &
+ int(self.netmask))
+ return
+
+ # Assume input argument to be string or any object representation
+ # which converts into a formatted IP prefix string.
+ addr = _split_optional_netmask(address)
+
+ self.network_address = IPv6Address(self._ip_int_from_string(addr[0]))
+
+ if len(addr) == 2:
+ arg = addr[1]
+ else:
+ arg = self._max_prefixlen
+ self.netmask, self._prefixlen = self._make_netmask(arg)
+
+ if strict:
+ if (IPv6Address(int(self.network_address) & int(self.netmask)) !=
+ self.network_address):
+ raise ValueError('%s has host bits set' % self)
+ self.network_address = IPv6Address(int(self.network_address) &
+ int(self.netmask))
+
+ if self._prefixlen == (self._max_prefixlen - 1):
+ self.hosts = self.__iter__
+
+ def hosts(self):
+ """Generate Iterator over usable hosts in a network.
+
+ This is like __iter__ except it doesn't return the
+ Subnet-Router anycast address.
+
+ """
+ network = int(self.network_address)
+ broadcast = int(self.broadcast_address)
+ for x in _compat_range(network + 1, broadcast + 1):
+ yield self._address_class(x)
+
+ @property
+ def is_site_local(self):
+ """Test if the address is reserved for site-local.
+
+ Note that the site-local address space has been deprecated by RFC 3879.
+ Use is_private to test if this address is in the space of unique local
+ addresses as defined by RFC 4193.
+
+ Returns:
+ A boolean, True if the address is reserved per RFC 3513 2.5.6.
+
+ """
+ return (self.network_address.is_site_local and
+ self.broadcast_address.is_site_local)
+
+
+class _IPv6Constants(object):
+
+ _linklocal_network = IPv6Network('fe80::/10')
+
+ _multicast_network = IPv6Network('ff00::/8')
+
+ _private_networks = [
+ IPv6Network('::1/128'),
+ IPv6Network('::/128'),
+ IPv6Network('::ffff:0:0/96'),
+ IPv6Network('100::/64'),
+ IPv6Network('2001::/23'),
+ IPv6Network('2001:2::/48'),
+ IPv6Network('2001:db8::/32'),
+ IPv6Network('2001:10::/28'),
+ IPv6Network('fc00::/7'),
+ IPv6Network('fe80::/10'),
+ ]
+
+ _reserved_networks = [
+ IPv6Network('::/8'), IPv6Network('100::/8'),
+ IPv6Network('200::/7'), IPv6Network('400::/6'),
+ IPv6Network('800::/5'), IPv6Network('1000::/4'),
+ IPv6Network('4000::/3'), IPv6Network('6000::/3'),
+ IPv6Network('8000::/3'), IPv6Network('A000::/3'),
+ IPv6Network('C000::/3'), IPv6Network('E000::/4'),
+ IPv6Network('F000::/5'), IPv6Network('F800::/6'),
+ IPv6Network('FE00::/9'),
+ ]
+
+ _sitelocal_network = IPv6Network('fec0::/10')
+
+
+IPv6Address._constants = _IPv6Constants
diff --git a/Contents/Libraries/Shared/js2py/__init__.py b/Contents/Libraries/Shared/js2py/__init__.py
new file mode 100644
index 000000000..a7fe5979c
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/__init__.py
@@ -0,0 +1,75 @@
+# The MIT License
+#
+# Copyright 2014, 2015 Piotr Dabkowski
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the 'Software'),
+# to deal in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+# the Software, and to permit persons to whom the Software is furnished to do so, subject
+# to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all copies or
+# substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+# LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
+""" This module allows you to translate and execute Javascript in pure python.
+ Basically its implementation of ECMAScript 5.1 in pure python.
+
+ Use eval_js method to execute javascript code and get resulting python object (builtin if possible).
+
+ EXAMPLE:
+ >>> import js2py
+ >>> add = js2py.eval_js('function add(a, b) {return a + b}')
+ >>> add(1, 2) + 3
+ 6
+ >>> add('1', 2, 3)
+ u'12'
+ >>> add.constructor
+ function Function() { [python code] }
+
+
+ Or use EvalJs to execute many javascript code fragments under same context - you would be able to get any
+ variable from the context!
+
+ >>> js = js2py.EvalJs()
+ >>> js.execute('var a = 10; function f(x) {return x*x};')
+ >>> js.f(9)
+ 81
+ >>> js.a
+ 10
+
+ Also you can use its console method to play with interactive javascript console.
+
+
+ Use parse_js to parse (syntax tree is just like in esprima.js) and translate_js to trasnlate JavaScript.
+
+ Finally, you can use pyimport statement from inside JS code to import and use python libraries.
+
+ >>> js2py.eval_js('pyimport urllib; urllib.urlopen("https://www.google.com")')
+
+ NOTE: This module is still not fully finished:
+
+ Date and JSON builtin objects are not implemented
+ Array prototype is not fully finished (will be soon)
+
+ Other than that everything should work fine.
+
+"""
+
+__author__ = 'Piotr Dabkowski'
+__all__ = [
+ 'EvalJs', 'translate_js', 'import_js', 'eval_js', 'parse_js',
+ 'translate_file', 'run_file', 'disable_pyimport', 'eval_js6',
+ 'translate_js6', 'PyJsException', 'get_file_contents',
+ 'write_file_contents', 'require'
+]
+
+from .base import PyJsException
+from .evaljs import *
+from .translators import parse as parse_js
+from .node_import import require
diff --git a/Contents/Libraries/Shared/js2py/base.py b/Contents/Libraries/Shared/js2py/base.py
new file mode 100644
index 000000000..cf1eca08d
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/base.py
@@ -0,0 +1,3273 @@
+'''Most important file in Js2Py implementation: PyJs class - father of all PyJs objects'''
+from copy import copy
+import re
+
+from .translators.friendly_nodes import REGEXP_CONVERTER
+from .utils.injector import fix_js_args
+from types import FunctionType, ModuleType, GeneratorType, BuiltinFunctionType, MethodType, BuiltinMethodType
+from math import floor, log10
+import traceback
+try:
+ import numpy
+ NUMPY_AVAILABLE = True
+except:
+ NUMPY_AVAILABLE = False
+
+# python 3 support
+import six
+if six.PY3:
+ basestring = str
+ long = int
+ xrange = range
+ unicode = str
+
+
+def str_repr(s):
+ if six.PY2:
+ return repr(s.encode('utf-8'))
+ else:
+ return repr(s)
+
+
+def MakeError(name, message):
+ """Returns PyJsException with PyJsError inside"""
+ return JsToPyException(ERRORS[name](Js(message)))
+
+
+def to_python(val):
+ if not isinstance(val, PyJs):
+ return val
+ if isinstance(val, PyJsUndefined) or isinstance(val, PyJsNull):
+ return None
+ elif isinstance(val, PyJsNumber):
+ # this can be either float or long/int better to assume its int/long when a whole number...
+ v = val.value
+ try:
+ i = int(v) if v == v else v # nan...
+ return v if i != v else i
+ except:
+ return v
+ elif isinstance(val, (PyJsString, PyJsBoolean)):
+ return val.value
+ elif isinstance(val, PyObjectWrapper):
+ return val.__dict__['obj']
+ elif isinstance(val, PyJsArray) and val.CONVERT_TO_PY_PRIMITIVES:
+ return to_list(val)
+ elif isinstance(val, PyJsObject) and val.CONVERT_TO_PY_PRIMITIVES:
+ return to_dict(val)
+ else:
+ return JsObjectWrapper(val)
+
+
+def to_dict(js_obj,
+ known=None): # fixed recursion error in self referencing objects
+ res = {}
+ if known is None:
+ known = {}
+ if js_obj in known:
+ return known[js_obj]
+ known[js_obj] = res
+ for k in js_obj:
+ name = k.value
+ input = js_obj.get(name)
+ output = to_python(input)
+ if isinstance(output, JsObjectWrapper):
+ if output._obj.Class == 'Object':
+ output = to_dict(output._obj, known)
+ known[input] = output
+ elif output._obj.Class in [
+ 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray',
+ 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array',
+ 'Float32Array', 'Float64Array'
+ ]:
+ output = to_list(output._obj)
+ known[input] = output
+ res[name] = output
+ return res
+
+
+def to_list(js_obj, known=None):
+ res = len(js_obj) * [None]
+ if known is None:
+ known = {}
+ if js_obj in known:
+ return known[js_obj]
+ known[js_obj] = res
+ for k in js_obj:
+ try:
+ name = int(k.value)
+ except:
+ continue
+ input = js_obj.get(str(name))
+ output = to_python(input)
+ if isinstance(output, JsObjectWrapper):
+ if output._obj.Class in [
+ 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray',
+ 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array',
+ 'Float32Array', 'Float64Array', 'Arguments'
+ ]:
+ output = to_list(output._obj, known)
+ known[input] = output
+ elif output._obj.Class in ['Object']:
+ output = to_dict(output._obj)
+ known[input] = output
+ res[name] = output
+ return res
+
+
+def HJs(val):
+ if hasattr(val, '__call__'): #
+
+ @Js
+ def PyWrapper(this, arguments, var=None):
+ args = tuple(to_python(e) for e in arguments.to_list())
+ try:
+ py_res = val.__call__(*args)
+ except Exception as e:
+ message = 'your Python function failed! '
+ try:
+ message += e.message
+ except:
+ pass
+ raise MakeError('Error', message)
+ return py_wrap(py_res)
+
+ try:
+ PyWrapper.func_name = val.__name__
+ except:
+ pass
+ return PyWrapper
+ if isinstance(val, tuple):
+ val = list(val)
+ return Js(val)
+
+
+def Js(val, Clamped=False):
+ '''Converts Py type to PyJs type'''
+ if isinstance(val, PyJs):
+ return val
+ elif val is None:
+ return undefined
+ elif isinstance(val, basestring):
+ return PyJsString(val, StringPrototype)
+ elif isinstance(val, bool):
+ return true if val else false
+ elif isinstance(val, float) or isinstance(val, int) or isinstance(
+ val, long) or (NUMPY_AVAILABLE and isinstance(
+ val,
+ (numpy.int8, numpy.uint8, numpy.int16, numpy.uint16,
+ numpy.int32, numpy.uint32, numpy.float32, numpy.float64))):
+ # This is supposed to speed things up. may not be the case
+ if val in NUM_BANK:
+ return NUM_BANK[val]
+ return PyJsNumber(float(val), NumberPrototype)
+ elif isinstance(val, FunctionType):
+ return PyJsFunction(val, FunctionPrototype)
+ #elif isinstance(val, ModuleType):
+ # mod = {}
+ # for name in dir(val):
+ # value = getattr(val, name)
+ # if isinstance(value, ModuleType):
+ # continue # prevent recursive module conversion
+ # try:
+ # jsval = HJs(value)
+ # except RuntimeError:
+ # print 'Could not convert %s to PyJs object!' % name
+ # continue
+ # mod[name] = jsval
+ # return Js(mod)
+ #elif isintance(val, ClassType):
+
+ elif isinstance(val, dict): # convert to object
+ temp = PyJsObject({}, ObjectPrototype)
+ for k, v in six.iteritems(val):
+ temp.put(Js(k), Js(v))
+ return temp
+ elif isinstance(val, (list, tuple)): #Convert to array
+ return PyJsArray(val, ArrayPrototype)
+ # convert to typedarray
+ elif isinstance(val, JsObjectWrapper):
+ return val.__dict__['_obj']
+ elif NUMPY_AVAILABLE and isinstance(val, numpy.ndarray):
+ if val.dtype == numpy.int8:
+ return PyJsInt8Array(val, Int8ArrayPrototype)
+ elif val.dtype == numpy.uint8 and not Clamped:
+ return PyJsUint8Array(val, Uint8ArrayPrototype)
+ elif val.dtype == numpy.uint8 and Clamped:
+ return PyJsUint8ClampedArray(val, Uint8ClampedArrayPrototype)
+ elif val.dtype == numpy.int16:
+ return PyJsInt16Array(val, Int16ArrayPrototype)
+ elif val.dtype == numpy.uint16:
+ return PyJsUint16Array(val, Uint16ArrayPrototype)
+
+ elif val.dtype == numpy.int32:
+ return PyJsInt32Array(val, Int32ArrayPrototype)
+ elif val.dtype == numpy.uint32:
+ return PyJsUint16Array(val, Uint32ArrayPrototype)
+
+ elif val.dtype == numpy.float32:
+ return PyJsFloat32Array(val, Float32ArrayPrototype)
+ elif val.dtype == numpy.float64:
+ return PyJsFloat64Array(val, Float64ArrayPrototype)
+ else: # try to convert to js object
+ return py_wrap(val)
+ #raise RuntimeError('Cant convert python type to js (%s)' % repr(val))
+ #try:
+ # obj = {}
+ # for name in dir(val):
+ # if name.startswith('_'): #dont wrap attrs that start with _
+ # continue
+ # value = getattr(val, name)
+ # import types
+ # if not isinstance(value, (FunctionType, BuiltinFunctionType, MethodType, BuiltinMethodType,
+ # dict, int, basestring, bool, float, long, list, tuple)):
+ # continue
+ # obj[name] = HJs(value)
+ # return Js(obj)
+ #except:
+ # raise RuntimeError('Cant convert python type to js (%s)' % repr(val))
+
+
+def Type(val):
+ try:
+ return val.TYPE
+ except:
+ raise RuntimeError('Invalid type: ' + str(val))
+
+
+def is_data_descriptor(desc):
+ return desc and ('value' in desc or 'writable' in desc)
+
+
+def is_accessor_descriptor(desc):
+ return desc and ('get' in desc or 'set' in desc)
+
+
+def is_generic_descriptor(desc):
+ return desc and not (is_data_descriptor(desc)
+ or is_accessor_descriptor(desc))
+
+
+##############################################################################
+
+
+class PyJs(object):
+ PRIMITIVES = frozenset(
+ ['String', 'Number', 'Boolean', 'Undefined', 'Null'])
+ TYPE = 'Object'
+ Class = None
+ extensible = True
+ prototype = None
+ own = {}
+ GlobalObject = None
+ IS_CHILD_SCOPE = False
+ CONVERT_TO_PY_PRIMITIVES = False
+ value = None
+ buff = None
+
+ def __init__(self, value=None, prototype=None, extensible=False):
+ '''Constructor for Number String and Boolean'''
+ # I dont think this is needed anymore
+ # if self.Class=='String' and not isinstance(value, basestring):
+ # raise TypeError
+ # if self.Class=='Number':
+ # if not isinstance(value, float):
+ # if not (isinstance(value, int) or isinstance(value, long)):
+ # raise TypeError
+ # value = float(value)
+ # if self.Class=='Boolean' and not isinstance(value, bool):
+ # raise TypeError
+ self.value = value
+ self.extensible = extensible
+ self.prototype = prototype
+ self.own = {}
+ self.buff = None
+
+ def is_undefined(self):
+ return self.Class == 'Undefined'
+
+ def is_null(self):
+ return self.Class == 'Null'
+
+ def is_primitive(self):
+ return self.TYPE in self.PRIMITIVES
+
+ def is_object(self):
+ return not self.is_primitive()
+
+ def _type(self):
+ return Type(self)
+
+ def is_callable(self):
+ return hasattr(self, 'call')
+
+ def get_own_property(self, prop):
+ return self.own.get(prop)
+
+ def get_property(self, prop):
+ cand = self.get_own_property(prop)
+ if cand:
+ return cand
+ if self.prototype is not None:
+ return self.prototype.get_property(prop)
+
+ def update_array(self):
+ for i in range(self.get('length').to_uint32()):
+ self.put(str(i), Js(self.buff[i]))
+
+ def get(self, prop): #external use!
+ #prop = prop.value
+ if self.Class == 'Undefined' or self.Class == 'Null':
+ raise MakeError('TypeError',
+ 'Undefined and null dont have properties!')
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ if not isinstance(prop, basestring): raise RuntimeError('Bug')
+ if NUMPY_AVAILABLE and prop.isdigit():
+ if isinstance(self.buff, numpy.ndarray):
+ self.update_array()
+ cand = self.get_property(prop)
+ if cand is None:
+ return Js(None)
+ if is_data_descriptor(cand):
+ return cand['value']
+ if cand['get'].is_undefined():
+ return cand['get']
+ return cand['get'].call(self)
+
+ def can_put(self, prop): #to check
+ desc = self.get_own_property(prop)
+ if desc: #if we have this property
+ if is_accessor_descriptor(desc):
+ return desc['set'].is_callable(
+ ) # Check if setter method is defined
+ else: #data desc
+ return desc['writable']
+ if self.prototype is not None:
+ return self.extensible
+ inherited = self.get_property(prop)
+ if inherited is None:
+ return self.extensible
+ if is_accessor_descriptor(inherited):
+ return not inherited['set'].is_undefined()
+ elif self.extensible:
+ return inherited['writable']
+ return False
+
+ def put(self, prop, val, op=None): #external use!
+ '''Just like in js: self.prop op= val
+ for example when op is '+' it will be self.prop+=val
+ op can be either None for simple assignment or one of:
+ * / % + - << >> & ^ |'''
+ if self.Class == 'Undefined' or self.Class == 'Null':
+ raise MakeError('TypeError',
+ 'Undefined and null dont have properties!')
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ if NUMPY_AVAILABLE and prop.isdigit():
+ if self.Class == 'Int8Array':
+ val = Js(numpy.int8(val.to_number().value))
+ elif self.Class == 'Uint8Array':
+ val = Js(numpy.uint8(val.to_number().value))
+ elif self.Class == 'Uint8ClampedArray':
+ if val < Js(numpy.uint8(0)):
+ val = Js(numpy.uint8(0))
+ elif val > Js(numpy.uint8(255)):
+ val = Js(numpy.uint8(255))
+ else:
+ val = Js(numpy.uint8(val.to_number().value))
+ elif self.Class == 'Int16Array':
+ val = Js(numpy.int16(val.to_number().value))
+ elif self.Class == 'Uint16Array':
+ val = Js(numpy.uint16(val.to_number().value))
+ elif self.Class == 'Int32Array':
+ val = Js(numpy.int32(val.to_number().value))
+ elif self.Class == 'Uint32Array':
+ val = Js(numpy.uint32(val.to_number().value))
+ elif self.Class == 'Float32Array':
+ val = Js(numpy.float32(val.to_number().value))
+ elif self.Class == 'Float64Array':
+ val = Js(numpy.float64(val.to_number().value))
+ if isinstance(self.buff, numpy.ndarray):
+ self.buff[int(prop)] = int(val.to_number().value)
+ #we need to set the value to the incremented one
+ if op is not None:
+ val = getattr(self.get(prop), OP_METHODS[op])(val)
+ if not self.can_put(prop):
+ return val
+ own_desc = self.get_own_property(prop)
+ if is_data_descriptor(own_desc):
+ if self.Class in [
+ 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray',
+ 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array',
+ 'Float32Array', 'Float64Array'
+ ]:
+ self.define_own_property(prop, {'value': val})
+ else:
+ self.own[prop]['value'] = val
+ return val
+ desc = self.get_property(prop)
+ if is_accessor_descriptor(desc):
+ desc['set'].call(self, (val, ))
+ else:
+ new = {
+ 'value': val,
+ 'writable': True,
+ 'configurable': True,
+ 'enumerable': True
+ }
+ if self.Class in [
+ 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray',
+ 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array',
+ 'Float32Array', 'Float64Array'
+ ]:
+ self.define_own_property(prop, new)
+ else:
+ self.own[prop] = new
+ return val
+
+ def has_property(self, prop):
+ return self.get_property(prop) is not None
+
+ def delete(self, prop):
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ desc = self.get_own_property(prop)
+ if desc is None:
+ return Js(True)
+ if desc['configurable']:
+ del self.own[prop]
+ return Js(True)
+ return Js(False)
+
+ def default_value(
+ self, hint=None
+ ): # made a mistake at the very early stage and made it to prefer string... caused lots! of problems
+ order = ('valueOf', 'toString')
+ if hint == 'String' or (hint is None and self.Class == 'Date'):
+ order = ('toString', 'valueOf')
+ for meth_name in order:
+ method = self.get(meth_name)
+ if method is not None and method.is_callable():
+ cand = method.call(self)
+ if cand.is_primitive():
+ return cand
+ raise MakeError('TypeError',
+ 'Cannot convert object to primitive value')
+
+ def define_own_property(self, prop,
+ desc): #Internal use only. External through Object
+ # prop must be a Py string. Desc is either a descriptor or accessor.
+ #Messy method - raw translation from Ecma spec to prevent any bugs. # todo check this
+ current = self.get_own_property(prop)
+
+ extensible = self.extensible
+ if not current: #We are creating a new property
+ if not extensible:
+ return False
+ if is_data_descriptor(desc) or is_generic_descriptor(desc):
+ DEFAULT_DATA_DESC = {
+ 'value': undefined, #undefined
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ DEFAULT_DATA_DESC.update(desc)
+ self.own[prop] = DEFAULT_DATA_DESC
+ else:
+ DEFAULT_ACCESSOR_DESC = {
+ 'get': undefined, #undefined
+ 'set': undefined, #undefined
+ 'enumerable': False,
+ 'configurable': False
+ }
+ DEFAULT_ACCESSOR_DESC.update(desc)
+ self.own[prop] = DEFAULT_ACCESSOR_DESC
+ return True
+ if not desc or desc == current: #We dont need to change anything.
+ return True
+ configurable = current['configurable']
+ if not configurable: #Prevent changing configurable or enumerable
+ if desc.get('configurable'):
+ return False
+ if 'enumerable' in desc and desc['enumerable'] != current[
+ 'enumerable']:
+ return False
+ if is_generic_descriptor(desc):
+ pass
+ elif is_data_descriptor(current) != is_data_descriptor(desc):
+ if not configurable:
+ return False
+ if is_data_descriptor(current):
+ del current['value']
+ del current['writable']
+ current['set'] = undefined #undefined
+ current['get'] = undefined #undefined
+ else:
+ del current['set']
+ del current['get']
+ current['value'] = undefined #undefined
+ current['writable'] = False
+ elif is_data_descriptor(current) and is_data_descriptor(desc):
+ if not configurable:
+ if not current['writable'] and desc.get('writable'):
+ return False
+ if not current['writable'] and 'value' in desc and current[
+ 'value'] != desc['value']:
+ return False
+ elif is_accessor_descriptor(current) and is_accessor_descriptor(desc):
+ if not configurable:
+ if 'set' in desc and desc['set'] is not current['set']:
+ return False
+ if 'get' in desc and desc['get'] is not current['get']:
+ return False
+ current.update(desc)
+ return True
+
+ #these methods will work only for Number class
+ def is_infinity(self):
+ assert self.Class == 'Number'
+ return self.value == float('inf') or self.value == -float('inf')
+
+ def is_nan(self):
+ assert self.Class == 'Number'
+ return self.value != self.value #nan!=nan evaluates to true
+
+ def is_finite(self):
+ return not (self.is_nan() or self.is_infinity())
+
+ #Type Conversions. to_type. All must return pyjs subclass instance
+
+ def to_primitive(self, hint=None):
+ if self.is_primitive():
+ return self
+ if hint is None and (
+ self.Class == 'Number' or self.Class == 'Boolean'
+ ): # favour number for Class== Number or Boolean default = String
+ hint = 'Number'
+ return self.default_value(hint)
+
+ def to_boolean(self):
+ typ = Type(self)
+ if typ == 'Boolean': #no need to convert
+ return self
+ elif typ == 'Null' or typ == 'Undefined': #they are both always false
+ return false
+ elif typ == 'Number' or typ == 'String': #false only for 0, '' and NaN
+ return Js(bool(
+ self.value
+ and self.value == self.value)) # test for nan (nan -> flase)
+ else: #object - always true
+ return true
+
+ def to_number(self):
+ typ = Type(self)
+ if typ == 'Null': #null is 0
+ return Js(0)
+ elif typ == 'Undefined': # undefined is NaN
+ return NaN
+ elif typ == 'Boolean': # 1 for true 0 for false
+ return Js(int(self.value))
+ elif typ == 'Number': # or self.Class=='Number': # no need to convert
+ return self
+ elif typ == 'String':
+ s = self.value.strip() #Strip white space
+ if not s: # '' is simply 0
+ return Js(0)
+ if 'x' in s or 'X' in s[:3]: #hex (positive only)
+ try: # try to convert
+ num = int(s, 16)
+ except ValueError: # could not convert > NaN
+ return NaN
+ return Js(num)
+ sign = 1 #get sign
+ if s[0] in '+-':
+ if s[0] == '-':
+ sign = -1
+ s = s[1:]
+ if s == 'Infinity': #Check for infinity keyword. 'NaN' will be NaN anyway.
+ return Js(sign * float('inf'))
+ try: #decimal try
+ num = sign * float(s) # Converted
+ except ValueError:
+ return NaN # could not convert to decimal > return NaN
+ return Js(num)
+ else: #object - most likely it will be NaN.
+ return self.to_primitive('Number').to_number()
+
+ def to_string(self):
+ typ = Type(self)
+ if typ == 'Null':
+ return Js('null')
+ elif typ == 'Undefined':
+ return Js('undefined')
+ elif typ == 'Boolean':
+ return Js('true') if self.value else Js('false')
+ elif typ == 'Number': #or self.Class=='Number':
+ return Js(unicode(js_dtoa(self.value)))
+ elif typ == 'String':
+ return self
+ else: #object
+ return self.to_primitive('String').to_string()
+
+ def to_object(self):
+ typ = self.TYPE
+ if typ == 'Null' or typ == 'Undefined':
+ raise MakeError('TypeError',
+ 'undefined or null can\'t be converted to object')
+ elif typ == 'Boolean': # Unsure here... todo repair here
+ return Boolean.create(self)
+ elif typ == 'Number': #?
+ return Number.create(self)
+ elif typ == 'String': #?
+ return String.create(self)
+ else: #object
+ return self
+
+ def to_int32(self):
+ num = self.to_number()
+ if num.is_nan() or num.is_infinity():
+ return 0
+ int32 = int(num.value) % 2**32
+ return int(int32 - 2**32 if int32 >= 2**31 else int32)
+
+ def strict_equality_comparison(self, other):
+ return PyJsStrictEq(self, other)
+
+ def cok(self):
+ """Check object coercible"""
+ if self.Class in ('Undefined', 'Null'):
+ raise MakeError('TypeError',
+ 'undefined or null can\'t be converted to object')
+
+ def to_int(self):
+ num = self.to_number()
+ if num.is_nan():
+ return 0
+ elif num.is_infinity():
+ return 10**20 if num.value > 0 else -10**20
+ return int(num.value)
+
+ def to_uint32(self):
+ num = self.to_number()
+ if num.is_nan() or num.is_infinity():
+ return 0
+ return int(num.value) % 2**32
+
+ def to_uint16(self):
+ num = self.to_number()
+ if num.is_nan() or num.is_infinity():
+ return 0
+ return int(num.value) % 2**16
+
+ def to_int16(self):
+ num = self.to_number()
+ if num.is_nan() or num.is_infinity():
+ return 0
+ int16 = int(num.value) % 2**16
+ return int(int16 - 2**16 if int16 >= 2**15 else int16)
+
+ def same_as(self, other):
+ typ = Type(self)
+ if typ != other.Class:
+ return False
+ if typ == 'Undefined' or typ == 'Null':
+ return True
+ if typ == 'Boolean' or typ == 'Number' or typ == 'String':
+ return self.value == other.value
+ else: #object
+ return self is other #Id compare.
+
+ #Not to be used by translation (only internal use)
+ def __getitem__(self, item):
+ return self.get(
+ str(item) if not isinstance(item, PyJs) else item.to_string().
+ value)
+
+ def __setitem__(self, item, value):
+ self.put(
+ str(item) if not isinstance(item, PyJs) else
+ item.to_string().value, Js(value))
+
+ def __len__(self):
+ try:
+ return self.get('length').to_uint32()
+ except:
+ raise TypeError(
+ 'This object (%s) does not have length property' % self.Class)
+
+ #Oprators-------------
+ #Unary, other will be implemented as functions. Increments and decrements
+ # will be methods of Number class
+ def __neg__(self): #-u
+ return Js(-self.to_number().value)
+
+ def __pos__(self): #+u
+ return self.to_number()
+
+ def __invert__(self): #~u
+ return Js(Js(~self.to_int32()).to_int32())
+
+ def neg(self): # !u cant do 'not u' :(
+ return Js(not self.to_boolean().value)
+
+ def __nonzero__(self):
+ return self.to_boolean().value
+
+ def __bool__(self):
+ return self.to_boolean().value
+
+ def typeof(self):
+ if self.is_callable():
+ return Js('function')
+ typ = Type(self).lower()
+ if typ == 'null':
+ typ = 'object'
+ return Js(typ)
+
+ #Bitwise operators
+ # <<, >>, &, ^, |
+
+ # <<
+ def __lshift__(self, other):
+ lnum = self.to_int32()
+ rnum = other.to_uint32()
+ shiftCount = rnum & 0x1F
+ return Js(Js(lnum << shiftCount).to_int32())
+
+ # >>
+ def __rshift__(self, other):
+ lnum = self.to_int32()
+ rnum = other.to_uint32()
+ shiftCount = rnum & 0x1F
+ return Js(Js(lnum >> shiftCount).to_int32())
+
+ # >>>
+ def pyjs_bshift(self, other):
+ lnum = self.to_uint32()
+ rnum = other.to_uint32()
+ shiftCount = rnum & 0x1F
+ return Js(Js(lnum >> shiftCount).to_uint32())
+
+ # &
+ def __and__(self, other):
+ lnum = self.to_int32()
+ rnum = other.to_int32()
+ return Js(Js(lnum & rnum).to_int32())
+
+ # ^
+ def __xor__(self, other):
+ lnum = self.to_int32()
+ rnum = other.to_int32()
+ return Js(Js(lnum ^ rnum).to_int32())
+
+ # |
+ def __or__(self, other):
+ lnum = self.to_int32()
+ rnum = other.to_int32()
+ return Js(Js(lnum | rnum).to_int32())
+
+ # Additive operators
+ # + and - are implemented here
+
+ # +
+ def __add__(self, other):
+ a = self.to_primitive()
+ b = other.to_primitive()
+ if a.TYPE == 'String' or b.TYPE == 'String':
+ return Js(a.to_string().value + b.to_string().value)
+ a = a.to_number()
+ b = b.to_number()
+ return Js(a.value + b.value)
+
+ # -
+ def __sub__(self, other):
+ return Js(self.to_number().value - other.to_number().value)
+
+ #Multiplicative operators
+ # *, / and % are implemented here
+
+ # *
+ def __mul__(self, other):
+ return Js(self.to_number().value * other.to_number().value)
+
+ # /
+ def __div__(self, other):
+ a = self.to_number().value
+ b = other.to_number().value
+ if b:
+ return Js(a / b)
+ if not a or a != a:
+ return NaN
+ return Infinity if a > 0 else -Infinity
+
+ # %
+ def __mod__(self, other):
+ a = self.to_number().value
+ b = other.to_number().value
+ if abs(a) == float('inf') or not b:
+ return NaN
+ if abs(b) == float('inf'):
+ return Js(a)
+ pyres = Js(a % b) #different signs in python and javascript
+ #python has the same sign as b and js has the same
+ #sign as a.
+ if a < 0 and pyres.value > 0:
+ pyres.value -= abs(b)
+ elif a > 0 and pyres.value < 0:
+ pyres.value += abs(b)
+ return Js(pyres)
+
+ #Comparisons (I dont implement === and !== here, these
+ # will be implemented as external functions later)
+ # <, <=, !=, ==, >=, > are implemented here.
+
+ def abstract_relational_comparison(self, other, self_first=True):
+ ''' self=
+ def __ge__(self, other):
+ res = self.abstract_relational_comparison(other, True)
+ if res.is_undefined():
+ return false
+ return res.neg()
+
+ #>
+ def __gt__(self, other):
+ res = self.abstract_relational_comparison(other, False)
+ if res.is_undefined():
+ return false
+ return res
+
+ def abstract_equality_comparison(self, other):
+ ''' returns the result of JS == compare.
+ result is PyJs type: bool'''
+ tx, ty = self.TYPE, other.TYPE
+ if tx == ty:
+ if tx == 'Undefined' or tx == 'Null':
+ return true
+ if tx == 'Number' or tx == 'String' or tx == 'Boolean':
+ return Js(self.value == other.value)
+ return Js(self is other) # Object
+ elif (tx == 'Undefined' and ty == 'Null') or (ty == 'Undefined'
+ and tx == 'Null'):
+ return true
+ elif tx == 'Number' and ty == 'String':
+ return self.abstract_equality_comparison(other.to_number())
+ elif tx == 'String' and ty == 'Number':
+ return self.to_number().abstract_equality_comparison(other)
+ elif tx == 'Boolean':
+ return self.to_number().abstract_equality_comparison(other)
+ elif ty == 'Boolean':
+ return self.abstract_equality_comparison(other.to_number())
+ elif (tx == 'String' or tx == 'Number') and other.is_object():
+ return self.abstract_equality_comparison(other.to_primitive())
+ elif (ty == 'String' or ty == 'Number') and self.is_object():
+ return self.to_primitive().abstract_equality_comparison(other)
+ else:
+ return false
+
+ #==
+ def __eq__(self, other):
+ return self.abstract_equality_comparison(other)
+
+ #!=
+ def __ne__(self, other):
+ return self.abstract_equality_comparison(other).neg()
+
+ #Other methods (instanceof)
+
+ def instanceof(self, other):
+ '''checks if self is instance of other'''
+ if not hasattr(other, 'has_instance'):
+ return false
+ return other.has_instance(self)
+
+ #iteration
+ def __iter__(self):
+ #Returns a generator of all own enumerable properties
+ # since the size od self.own can change we need to use different method of iteration.
+ # SLOW! New items will NOT show up.
+ returned = {}
+ if not self.IS_CHILD_SCOPE:
+ cands = sorted(
+ name for name in self.own if self.own[name]['enumerable'])
+ else:
+ cands = sorted(name for name in self.own)
+ for cand in cands:
+ check = self.own.get(cand)
+ if check and check['enumerable']:
+ yield Js(cand)
+
+ def contains(self, other):
+ if not self.is_object():
+ raise MakeError(
+ 'TypeError',
+ "You can\'t use 'in' operator to search in non-objects")
+ return Js(self.has_property(other.to_string().value))
+
+ #Other Special methods
+ def __call__(self, *args):
+ '''Call a property prop as a function (this will be global object).
+
+ NOTE: dont pass this and arguments here, these will be added
+ automatically!'''
+ if not self.is_callable():
+ raise MakeError('TypeError',
+ '%s is not a function' % self.typeof())
+ return self.call(self.GlobalObject, args)
+
+ def create(self, *args):
+ '''Generally not a constructor, raise an error'''
+ raise MakeError('TypeError', '%s is not a constructor' % self.Class)
+
+ def __unicode__(self):
+ return self.to_string().value
+
+ def __repr__(self):
+ if self.Class == 'Object':
+ res = []
+ for e in self:
+ res.append(str_repr(e.value) + ': ' + str_repr(self.get(e)))
+ return '{%s}' % ', '.join(res)
+ elif self.Class == 'String':
+ return str_repr(self.value)
+ elif self.Class in [
+ 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray',
+ 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array',
+ 'Float32Array', 'Float64Array'
+ ]:
+ res = []
+ for e in self:
+ res.append(repr(self.get(e)))
+ return '[%s]' % ', '.join(res)
+ else:
+ val = str_repr(self.to_string().value)
+ return val
+
+ def _fuck_python3(
+ self
+ ): # hack to make object hashable in python 3 (__eq__ causes problems)
+ return object.__hash__(self)
+
+ def callprop(self, prop, *args):
+ '''Call a property prop as a method (this will be self).
+
+ NOTE: dont pass this and arguments here, these will be added
+ automatically!'''
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ cand = self.get(prop)
+ if not cand.is_callable():
+ raise MakeError('TypeError',
+ '%s is not a function' % cand.typeof())
+ return cand.call(self, args)
+
+ def to_python(self):
+ """returns equivalent python object.
+ for example if this object is javascript array then this method will return equivalent python array"""
+ return to_python(self)
+
+ def to_py(self):
+ """returns equivalent python object.
+ for example if this object is javascript array then this method will return equivalent python array"""
+ return self.to_python()
+
+
+if six.PY3:
+ PyJs.__hash__ = PyJs._fuck_python3
+ PyJs.__truediv__ = PyJs.__div__
+#Define some more classes representing operators:
+
+
+def PyJsStrictEq(a, b):
+ '''a===b'''
+ tx, ty = Type(a), Type(b)
+ if tx != ty:
+ return false
+ if tx == 'Undefined' or tx == 'Null':
+ return true
+ if a.is_primitive(): #string bool and number case
+ return Js(a.value == b.value)
+ if a.Class == b.Class == 'PyObjectWrapper':
+ return Js(a.obj == b.obj)
+ return Js(a is b) # object comparison
+
+
+def PyJsStrictNeq(a, b):
+ ''' a!==b'''
+ return PyJsStrictEq(a, b).neg()
+
+
+def PyJsBshift(a, b):
+ """a>>>b"""
+ return a.pyjs_bshift(b)
+
+
+def PyJsComma(a, b):
+ return b
+
+
+from .internals.simplex import JsException as PyJsException, js_dtoa
+import pyjsparser
+pyjsparser.parser.ENABLE_JS2PY_ERRORS = lambda msg: MakeError('SyntaxError', msg)
+
+
+class PyJsSwitchException(Exception):
+ pass
+
+
+PyJs.MakeError = staticmethod(MakeError)
+
+
+def JsToPyException(js):
+ temp = PyJsException()
+ temp.mes = js
+ return temp
+
+
+def PyExceptionToJs(py):
+ return py.mes
+
+
+#Scope class it will hold all the variables accessible to user
+class Scope(PyJs):
+ Class = 'global'
+ extensible = True
+ IS_CHILD_SCOPE = True
+
+ # todo speed up
+ # in order to speed up this very important class the top scope should behave differently than
+ # child scopes, child scope should not have this property descriptor thing because they cant be changed anyway
+ # they are all confugurable= False
+
+ def __init__(self, scope, closure=None):
+ """Doc"""
+ self.prototype = closure
+ if closure is None:
+ # global, top level scope
+ self.own = {}
+ for k, v in six.iteritems(scope):
+ # set all the global items
+ self.define_own_property(
+ k, {
+ 'value': v,
+ 'configurable': False,
+ 'writable': False,
+ 'enumerable': False
+ })
+ else:
+ # not global, less powerful but faster closure.
+ self.own = scope # simple dictionary which maps name directly to js object.
+
+ def register(self, lval):
+ # registered keeps only global registered variables
+ if self.prototype is None:
+ # define in global scope
+ if lval in self.own:
+ self.own[lval]['configurable'] = False
+ else:
+ self.define_own_property(
+ lval, {
+ 'value': undefined,
+ 'configurable': False,
+ 'writable': True,
+ 'enumerable': True
+ })
+ elif lval not in self.own:
+ # define in local scope since it has not been defined yet
+ self.own[lval] = undefined # default value
+
+ def registers(self, lvals):
+ """register multiple variables"""
+ for lval in lvals:
+ self.register(lval)
+
+ def put(self, lval, val, op=None):
+ if self.prototype is None:
+ # global scope put, simple
+ return PyJs.put(self, lval, val, op)
+ else:
+ # trying to put in local scope
+ # we dont know yet in which scope we should place this var
+ if lval in self.own:
+ if op: # increment operation
+ val = getattr(self.own[lval], OP_METHODS[op])(val)
+ self.own[lval] = val
+ return val
+ else:
+ #try to put in the lower scope since we cant put in this one (var wasn't registered)
+ return self.prototype.put(lval, val, op)
+
+ def force_own_put(self, prop, val, configurable=False):
+ if self.prototype is None: # global scope
+ self.own[prop] = {
+ 'value': val,
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': configurable
+ }
+ else:
+ self.own[prop] = val
+
+ def get(self, prop, throw=True):
+ #note prop is always a Py String
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ if self.prototype is not None:
+ # fast local scope
+ cand = self.own.get(prop)
+ if cand is None:
+ return self.prototype.get(prop, throw)
+ return cand
+ # slow, global scope
+ if prop not in self.own:
+ if throw:
+ raise MakeError('ReferenceError', '%s is not defined' % prop)
+ return undefined
+ return PyJs.get(self, prop)
+
+ def delete(self, lval):
+ if self.prototype is not None:
+ if lval in self.own:
+ return false
+ return self.prototype.delete(lval)
+ # we are in global scope here. Must exist and be configurable to delete
+ if lval not in self.own:
+ # this lval does not exist, why do you want to delete it???
+ return true
+ if self.own[lval]['configurable']:
+ del self.own[lval]
+ return true
+ # not configurable, cant delete
+ return false
+
+ def pyimport(self, name, module):
+ self.register(name)
+ self.put(name, py_wrap(module))
+
+ def __repr__(self):
+ return u'[Object Global]'
+
+ def to_python(self):
+ return to_python(self)
+
+
+class This(Scope):
+ IS_CHILD_SCOPE = False
+
+ def get(self, prop, throw=False):
+ return Scope.get(self, prop, throw)
+
+
+class JsObjectWrapper(object):
+ def __init__(self, obj):
+ self.__dict__['_obj'] = obj
+
+ def __call__(self, *args):
+ args = tuple(Js(e) for e in args)
+ if '_prop_of' in self.__dict__:
+ parent, meth = self.__dict__['_prop_of']
+ return to_python(parent._obj.callprop(meth, *args))
+ return to_python(self._obj(*args))
+
+ def __getattr__(self, item):
+ if item == 'new' and self._obj.is_callable():
+ # return instance initializer
+ def PyJsInstanceInit(*args):
+ args = tuple(Js(e) for e in args)
+ return self._obj.create(*args).to_python()
+
+ return PyJsInstanceInit
+ cand = to_python(self._obj.get(str(item)))
+ # handling method calling... obj.meth(). Value of this in meth should be self
+ if isinstance(cand, self.__class__):
+ cand.__dict__['_prop_of'] = self, str(item)
+ return cand
+
+ def __setattr__(self, item, value):
+ self._obj.put(str(item), Js(value))
+
+ def __getitem__(self, item):
+ cand = to_python(self._obj.get(str(item)))
+ if isinstance(cand, self.__class__):
+ cand.__dict__['_prop_of'] = self, str(item)
+ return cand
+
+ def __setitem__(self, item, value):
+ self._obj.put(str(item), Js(value))
+
+ def __iter__(self):
+ if self._obj.Class in [
+ 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray',
+ 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array',
+ 'Float32Array', 'Float64Array'
+ ]:
+ return iter(self.to_list())
+ elif self._obj.Class == 'Object':
+ return iter(self.to_dict())
+ else:
+ raise MakeError('TypeError',
+ '%s is not iterable in Python' % self._obj.Class)
+
+ def __repr__(self):
+ if self._obj.is_primitive() or self._obj.is_callable():
+ return repr(self._obj)
+ elif self._obj.Class in ('Array', 'Int8Array', 'Uint8Array',
+ 'Uint8ClampedArray', 'Int16Array',
+ 'Uint16Array', 'Int32Array', 'Uint32Array',
+ 'Float32Array', 'Float64Array', 'Arguments'):
+ return repr(self.to_list())
+ return repr(self.to_dict())
+
+ def __len__(self):
+ return len(self._obj)
+
+ def __nonzero__(self):
+ return bool(self._obj)
+
+ def __bool__(self):
+ return bool(self._obj)
+
+ def to_dict(self):
+ return to_dict(self.__dict__['_obj'])
+
+ def to_list(self):
+ return to_list(self.__dict__['_obj'])
+
+
+class PyObjectWrapper(PyJs):
+ Class = 'PyObjectWrapper'
+
+ def __init__(self, obj):
+ self.obj = obj
+
+ def get(self, prop):
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ try:
+ if prop.isdigit():
+ return py_wrap(self.obj[int(prop)])
+ return py_wrap(getattr(self.obj, prop))
+ except:
+ return undefined
+
+ def put(self, prop, val, op=None, throw=False):
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ try:
+ if isinstance(op, bool):
+ raise ValueError("Op must be a string")
+ elif op is not None:
+ if op: # increment operation
+ val = getattr(self.get(prop), OP_METHODS[op])(val)
+ setattr(self.obj, prop, to_python(val))
+ except AttributeError:
+ raise MakeError('TypeError', 'Read only object probably...')
+ return val
+
+ def __call__(self, *args):
+ py_args = tuple(to_python(e) for e in args)
+ try:
+ py_res = self.obj.__call__(*py_args)
+ except Exception as e:
+ message = 'your Python function failed! '
+ try:
+ message += e.message
+ except:
+ pass
+ raise MakeError('Error', message)
+ return py_wrap(py_res)
+
+ def callprop(self, prop, *args):
+ py_args = tuple(to_python(e) for e in args)
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ return self.get(prop)(*py_args)
+
+ def delete(self, prop):
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ try:
+ if prop.isdigit():
+ del self.obj[int(prop)]
+ else:
+ delattr(self.obj, prop)
+ return true
+ except:
+ return false
+
+ def __repr__(self):
+ return 'PyObjectWrapper(%s)' % str(self.obj)
+
+ def to_python(self):
+ return self.obj
+
+ def to_py(self):
+ return self.obj
+
+
+def py_wrap(py):
+ if isinstance(py, (FunctionType, BuiltinFunctionType, MethodType,
+ BuiltinMethodType, dict, int, str, bool, float, list,
+ tuple, long, basestring)) or py is None:
+ return HJs(py)
+ return PyObjectWrapper(py)
+
+
+##############################################################################
+#Define types
+
+
+#Object
+class PyJsObject(PyJs):
+ Class = 'Object'
+
+ def __init__(self, prop_descs={}, prototype=None, extensible=True):
+ self.prototype = prototype
+ self.extensible = extensible
+ self.own = {}
+ for prop, desc in six.iteritems(prop_descs):
+ self.define_own_property(prop, desc)
+
+ def __repr__(self):
+ return repr(self.to_python().to_dict())
+
+
+ObjectPrototype = PyJsObject()
+
+
+#Function
+class PyJsFunction(PyJs):
+ Class = 'Function'
+
+ def __init__(self, func, prototype=None, extensible=True, source=None):
+ cand = fix_js_args(func)
+ has_scope = cand is func
+ func = cand
+ self.argcount = six.get_function_code(func).co_argcount - 2 - has_scope
+ self.code = func
+ self.source = source if source else '{ [python code] }'
+ self.func_name = func.__name__ if not func.__name__.startswith(
+ 'PyJs_anonymous') else ''
+ self.extensible = extensible
+ self.prototype = prototype
+ self.own = {}
+ #set own property length to the number of arguments
+ self.define_own_property(
+ 'length', {
+ 'value': Js(self.argcount),
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': False
+ })
+
+ if self.func_name:
+ self.define_own_property(
+ 'name', {
+ 'value': Js(self.func_name),
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': True
+ })
+
+ # set own prototype
+ proto = Js({})
+ # constructor points to this function
+ proto.define_own_property(
+ 'constructor', {
+ 'value': self,
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': True
+ })
+ self.define_own_property(
+ 'prototype', {
+ 'value': proto,
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ })
+
+ def _set_name(self, name):
+ '''name is py type'''
+ if self.own.get('name'):
+ self.func_name = name
+ self.own['name']['value'] = Js(name)
+
+ def construct(self, *args):
+ proto = self.get('prototype')
+ if not proto.is_object(): # set to standard prototype
+ proto = ObjectPrototype
+ obj = PyJsObject(prototype=proto)
+ cand = self.call(obj, *args)
+ return cand if cand.is_object() else obj
+
+ def call(self, this, args=()):
+ '''Calls this function and returns a result
+ (converted to PyJs type so func can return python types)
+
+ this must be a PyJs object and args must be a python tuple of PyJs objects.
+
+ arguments object is passed automatically and will be equal to Js(args)
+ (tuple converted to arguments object).You dont need to worry about number
+ of arguments you provide if you supply less then missing ones will be set
+ to undefined (but not present in arguments object).
+ And if you supply too much then excess will not be passed
+ (but they will be present in arguments object).
+ '''
+ if not hasattr(args, '__iter__'): #get rid of it later
+ args = (args, )
+ args = tuple(Js(e) for e in args) # this wont be needed later
+
+ arguments = PyJsArguments(
+ args, self) # tuple will be converted to arguments object.
+ arglen = self.argcount #function expects this number of args.
+ if len(args) > arglen:
+ args = args[0:arglen]
+ elif len(args) < arglen:
+ args += (undefined, ) * (arglen - len(args))
+ args += this, arguments #append extra params to the arg list
+ try:
+ return Js(self.code(*args))
+ except NotImplementedError:
+ raise
+ except RuntimeError as e: # maximum recursion
+ raise MakeError(
+ 'RangeError', e.message if
+ not isinstance(e, NotImplementedError) else 'Not implemented!')
+
+ def has_instance(self, other):
+ # I am not sure here so instanceof may not work lol.
+ if not other.is_object():
+ return false
+ proto = self.get('prototype')
+ if not proto.is_object():
+ raise TypeError(
+ 'Function has non-object prototype in instanceof check')
+ while True:
+ other = other.prototype
+ if not other: # todo make sure that the condition is not None or null
+ return false
+ if other is proto:
+ return true
+
+ def create(self, *args):
+ proto = self.get('prototype')
+ if not proto.is_object():
+ proto = ObjectPrototype
+ new = PyJsObject(prototype=proto)
+ res = self.call(new, args)
+ if res.is_object():
+ return res
+ return new
+
+
+class PyJsBoundFunction(PyJsFunction):
+ def __init__(self, target, bound_this, bound_args):
+ self.target = target
+ self.bound_this = bound_this
+ self.bound_args = bound_args
+ self.argcount = target.argcount
+ self.code = target.code
+ self.source = target.source
+ self.func_name = target.func_name
+ self.extensible = True
+ self.prototype = FunctionPrototype
+ self.own = {}
+ # set own property length to the number of arguments
+ self.define_own_property(
+ 'length', {
+ 'value': target.get('length') - Js(len(self.bound_args)),
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': False
+ })
+
+ if self.func_name:
+ self.define_own_property(
+ 'name', {
+ 'value': Js(self.func_name),
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': True
+ })
+
+ # set own prototype
+ proto = Js({})
+ # constructor points to this function
+ proto.define_own_property(
+ 'constructor', {
+ 'value': self,
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': True
+ })
+ self.define_own_property(
+ 'prototype', {
+ 'value': proto,
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ })
+
+ def call(self, this, args=()):
+ return self.target.call(self.bound_this, self.bound_args + args)
+
+ def has_instance(self, other):
+ return self.target.has_instance(other)
+
+
+PyJs.PyJsBoundFunction = PyJsBoundFunction
+
+OP_METHODS = {
+ '*': '__mul__',
+ '/': '__div__',
+ '%': '__mod__',
+ '+': '__add__',
+ '-': '__sub__',
+ '<<': '__lshift__',
+ '>>': '__rshift__',
+ '&': '__and__',
+ '^': '__xor__',
+ '|': '__or__',
+ '>>>': 'pyjs_bshift'
+}
+
+
+def Empty():
+ return Js(None)
+
+
+#Number
+class PyJsNumber(PyJs): #Note i dont implement +0 and -0. Just 0.
+ TYPE = 'Number'
+ Class = 'Number'
+
+
+NumberPrototype = PyJsObject({}, ObjectPrototype)
+NumberPrototype.Class = 'Number'
+NumberPrototype.value = 0
+
+Infinity = PyJsNumber(float('inf'), NumberPrototype)
+NaN = PyJsNumber(float('nan'), NumberPrototype)
+PyJs.NaN = NaN
+PyJs.Infinity = Infinity
+
+# This dict aims to increase speed of string creation by storing character instances
+CHAR_BANK = {}
+NUM_BANK = {}
+PyJs.CHAR_BANK = CHAR_BANK
+
+
+#String
+# Different than implementation design in order to improve performance
+#for example I dont create separate property for each character in string, it would take ages.
+class PyJsString(PyJs):
+ TYPE = 'String'
+ Class = 'String'
+ extensible = False
+
+ def __init__(self, value=None, prototype=None):
+ '''Constructor for Number String and Boolean'''
+ if not isinstance(value, basestring):
+ raise TypeError # this will be internal error
+ self.value = value
+ self.prototype = prototype
+ self.own = {}
+ # this should be optimized because its mych slower than python str creation (about 50 times!)
+ # Dont create separate properties for every index. Just
+ self.own['length'] = {
+ 'value': Js(len(value)),
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ if len(value) == 1:
+ CHAR_BANK[value] = self #, 'writable': False,
+ # 'enumerable': True, 'configurable': False}
+
+ def get(self, prop):
+ if not isinstance(prop, basestring):
+ prop = prop.to_string().value
+ try:
+ index = int(prop)
+ if index < 0:
+ return undefined
+ char = self.value[index]
+ if char not in CHAR_BANK:
+ Js(char) # this will add char to CHAR BANK
+ return CHAR_BANK[char]
+ except Exception:
+ pass
+ return PyJs.get(self, prop)
+
+ def can_put(self, prop):
+ return False
+
+ def __iter__(self):
+ for i in xrange(len(self.value)):
+ yield Js(i) # maybe create an int bank?
+
+
+StringPrototype = PyJsObject({}, ObjectPrototype)
+StringPrototype.Class = 'String'
+StringPrototype.value = ''
+
+CHAR_BANK[''] = Js('')
+
+
+#Boolean
+class PyJsBoolean(PyJs):
+ TYPE = 'Boolean'
+ Class = 'Boolean'
+
+
+BooleanPrototype = PyJsObject({}, ObjectPrototype)
+BooleanPrototype.Class = 'Boolean'
+BooleanPrototype.value = False
+
+true = PyJsBoolean(True, BooleanPrototype)
+false = PyJsBoolean(False, BooleanPrototype)
+
+
+#Undefined
+class PyJsUndefined(PyJs):
+ TYPE = 'Undefined'
+ Class = 'Undefined'
+
+ def __init__(self):
+ pass
+
+
+undefined = PyJsUndefined()
+
+
+#Null
+class PyJsNull(PyJs):
+ TYPE = 'Null'
+ Class = 'Null'
+
+ def __init__(self):
+ pass
+
+
+null = PyJsNull()
+PyJs.null = null
+
+
+class PyJsArray(PyJs):
+ Class = 'Array'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsArrayBuffer(PyJs):
+ Class = 'ArrayBuffer'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsInt8Array(PyJs):
+ Class = 'Int8Array'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsUint8Array(PyJs):
+ Class = 'Uint8Array'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsUint8ClampedArray(PyJs):
+ Class = 'Uint8ClampedArray'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsInt16Array(PyJs):
+ Class = 'Int16Array'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsUint16Array(PyJs):
+ Class = 'Uint16Array'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsInt32Array(PyJs):
+ Class = 'Int32Array'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsUint32Array(PyJs):
+ Class = 'Uint32Array'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsFloat32Array(PyJs):
+ Class = 'Float32Array'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+class PyJsFloat64Array(PyJs):
+ Class = 'Float64Array'
+
+ def __init__(self, arr=[], prototype=None):
+ self.extensible = True
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': Js(0),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ for i, e in enumerate(arr):
+ self.define_own_property(
+ str(i), {
+ 'value': Js(e),
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ })
+
+ def define_own_property(self, prop, desc):
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc[
+ 'value'].value # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc)
+ new_len = desc['value'].to_uint32()
+ if new_len != desc['value'].to_number().value:
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = Js(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ str(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = Js(old_len + 1)
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+ elif prop.isdigit():
+ index = int(int(prop) % 2**32)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = Js(index + 1)
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+ def __repr__(self):
+ return repr(self.to_python().to_list())
+
+
+ArrayPrototype = PyJsArray([], ObjectPrototype)
+
+ArrayBufferPrototype = PyJsArrayBuffer([], ObjectPrototype)
+
+Int8ArrayPrototype = PyJsInt8Array([], ObjectPrototype)
+
+Uint8ArrayPrototype = PyJsUint8Array([], ObjectPrototype)
+
+Uint8ClampedArrayPrototype = PyJsUint8ClampedArray([], ObjectPrototype)
+
+Int16ArrayPrototype = PyJsInt16Array([], ObjectPrototype)
+
+Uint16ArrayPrototype = PyJsUint16Array([], ObjectPrototype)
+
+Int32ArrayPrototype = PyJsInt32Array([], ObjectPrototype)
+
+Uint32ArrayPrototype = PyJsUint32Array([], ObjectPrototype)
+
+Float32ArrayPrototype = PyJsFloat32Array([], ObjectPrototype)
+
+Float64ArrayPrototype = PyJsFloat64Array([], ObjectPrototype)
+
+
+class PyJsArguments(PyJs):
+ Class = 'Arguments'
+
+ def __init__(self, args, callee):
+ self.own = {}
+ self.extensible = True
+ self.prototype = ObjectPrototype
+ self.define_own_property(
+ 'length', {
+ 'value': Js(len(args)),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': True
+ })
+ self.define_own_property(
+ 'callee', {
+ 'value': callee,
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': True
+ })
+ for i, e in enumerate(args):
+ self.put(str(i), Js(e))
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+
+#We can define function proto after number proto because func uses number in its init
+FunctionPrototype = PyJsFunction(Empty, ObjectPrototype)
+FunctionPrototype.own['name']['value'] = Js('')
+
+# I will not rewrite RegExp engine from scratch. I will use re because its much faster.
+# I have to only make sure that I am handling all the differences correctly.
+REGEXP_DB = {}
+
+
+class PyJsRegExp(PyJs):
+ Class = 'RegExp'
+ extensible = True
+
+ def __init__(self, regexp, prototype=None):
+
+ self.prototype = prototype
+ self.glob = False
+ self.ignore_case = 0
+ self.multiline = 0
+ # self._cache = {'str':'NoStringEmpty23093',
+ # 'iterator': None,
+ # 'lastpos': -1,
+ # 'matches': {}}
+ flags = ''
+ if not regexp[-1] == '/':
+ #contains some flags (allowed are i, g, m
+ spl = regexp.rfind('/')
+ flags = set(regexp[spl + 1:])
+ self.value = regexp[1:spl]
+ if 'g' in flags:
+ self.glob = True
+ if 'i' in flags:
+ self.ignore_case = re.IGNORECASE
+ if 'm' in flags:
+ self.multiline = re.MULTILINE
+ else:
+ self.value = regexp[1:-1]
+
+ try:
+ if self.value in REGEXP_DB:
+ self.pat = REGEXP_DB[regexp]
+ else:
+ comp = 'None'
+ # we have to check whether pattern is valid.
+ # also this will speed up matching later
+ # todo critical fix patter conversion etc. ..!!!!!
+ # ugly hacks porting js reg exp to py reg exp works in 99% of cases ;)
+ possible_fixes = [(u'[]', u'[\0]'), (u'[^]', u'[^\0]'),
+ (u'nofix1791', u'nofix1791')]
+ reg = self.value
+ for fix, rep in possible_fixes:
+ comp = REGEXP_CONVERTER._interpret_regexp(reg, flags)
+ #print 'reg -> comp', reg, '->', comp
+ try:
+ self.pat = re.compile(
+ comp, self.ignore_case | self.multiline)
+ #print reg, '->', comp
+ break
+ except:
+ reg = reg.replace(fix, rep)
+ # print 'Fix', fix, '->', rep, '=', reg
+ else:
+ raise
+ REGEXP_DB[regexp] = self.pat
+ except:
+ #print 'Invalid pattern but fuck it', self.value, comp
+ raise MakeError(
+ 'SyntaxError',
+ 'Invalid RegExp pattern: %s -> %s' % (repr(self.value),
+ repr(comp)))
+ # now set own properties:
+ self.own = {
+ 'source': {
+ 'value': Js(self.value),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ },
+ 'global': {
+ 'value': Js(self.glob),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ },
+ 'ignoreCase': {
+ 'value': Js(bool(self.ignore_case)),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ },
+ 'multiline': {
+ 'value': Js(bool(self.multiline)),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ },
+ 'lastIndex': {
+ 'value': Js(0),
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': False
+ }
+ }
+
+ def match(self, string, pos):
+ '''string is of course py string'''
+ return self.pat.match(string, pos) # way easier :)
+ # assert 0<=pos <= len(string)
+ # if not pos:
+ # return re.match(self.pat, string)
+ # else:
+ # if self._cache['str']==string:
+ # if pos>self._cache['lastpos']:
+ # for m in self._cache['iterator']:
+ # start = m.start()
+ # self._cache['lastpos'] = start
+ # self._cache['matches'][start] = m
+ # if start==pos:
+ # return m
+ # elif start>pos:
+ # return None
+ # self._cache['lastpos'] = len(string)
+ # return None
+ # else:
+ # return self._cache['matches'].get(pos)
+ # else:
+ # self._cache['str'] = string
+ # self._cache['matches'] = {}
+ # self._cache['lastpos'] = -1
+ # self._cache['iterator'] = re.finditer(self.pat, string)
+ # return self.match(string, pos)
+
+
+def JsRegExp(source):
+ # Takes regexp literal!
+ return PyJsRegExp(source, RegExpPrototype)
+
+
+RegExpPrototype = PyJsRegExp('/(?:)/', ObjectPrototype)
+
+####Exceptions:
+default_attrs = {'writable': True, 'enumerable': False, 'configurable': True}
+
+
+def fill_in_props(obj, props, default_desc):
+ for prop, value in props.items():
+ default_desc['value'] = Js(value)
+ obj.define_own_property(prop, default_desc)
+
+
+class PyJsError(PyJs):
+ Class = 'Error'
+ extensible = True
+
+ def __init__(self, message=None, prototype=None):
+ self.prototype = prototype
+ self.own = {}
+ if message is not None:
+ self.put('message', Js(message).to_string())
+ self.own['message']['enumerable'] = False
+
+
+ErrorPrototype = PyJsError(Js(''), ObjectPrototype)
+
+
+@Js
+def Error(message):
+ return PyJsError(None if message.is_undefined() else message,
+ ErrorPrototype)
+
+
+Error.create = Error
+err = {'name': 'Error', 'constructor': Error}
+fill_in_props(ErrorPrototype, err, default_attrs)
+Error.define_own_property(
+ 'prototype', {
+ 'value': ErrorPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+
+def define_error_type(name):
+ TypeErrorPrototype = PyJsError(None, ErrorPrototype)
+
+ @Js
+ def TypeError(message):
+ return PyJsError(None if message.is_undefined() else message,
+ TypeErrorPrototype)
+
+ err = {'name': name, 'constructor': TypeError}
+ fill_in_props(TypeErrorPrototype, err, default_attrs)
+ TypeError.define_own_property(
+ 'prototype', {
+ 'value': TypeErrorPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+ ERRORS[name] = TypeError
+
+
+ERRORS = {'Error': Error}
+ERROR_NAMES = ['Eval', 'Type', 'Range', 'Reference', 'Syntax', 'URI']
+
+for e in ERROR_NAMES:
+ define_error_type(e + 'Error')
+
+##############################################################################
+# Import and fill prototypes here.
+
+
+#this works only for data properties
+def fill_prototype(prototype, Class, attrs, constructor=False):
+ for i in dir(Class):
+ e = getattr(Class, i)
+ if six.PY2:
+ if hasattr(e, '__func__'):
+ temp = PyJsFunction(e.__func__, FunctionPrototype)
+ attrs = dict((k, v) for k, v in attrs.iteritems())
+ attrs['value'] = temp
+ prototype.define_own_property(i, attrs)
+ else:
+ if hasattr(e, '__call__') and not i.startswith('__'):
+ temp = PyJsFunction(e, FunctionPrototype)
+ attrs = dict((k, v) for k, v in attrs.items())
+ attrs['value'] = temp
+ prototype.define_own_property(i, attrs)
+ if constructor:
+ attrs['value'] = constructor
+ prototype.define_own_property('constructor', attrs)
+
+
+PyJs.undefined = undefined
+PyJs.Js = staticmethod(Js)
+
+from .prototypes import jsfunction, jsobject, jsnumber, jsstring, jsboolean, jsarray, jsregexp, jserror, jsarraybuffer, jstypedarray
+
+#Object proto
+fill_prototype(ObjectPrototype, jsobject.ObjectPrototype, default_attrs)
+
+
+#Define __proto__ accessor (this cant be done by fill_prototype since)
+@Js
+def __proto__():
+ return this.prototype if this.prototype is not None else null
+
+
+getter = __proto__
+
+
+@Js
+def __proto__(val):
+ if val.is_object():
+ this.prototype = val
+
+
+setter = __proto__
+ObjectPrototype.define_own_property('__proto__', {
+ 'set': setter,
+ 'get': getter,
+ 'enumerable': False,
+ 'configurable': True
+})
+
+#Function proto
+fill_prototype(FunctionPrototype, jsfunction.FunctionPrototype, default_attrs)
+#Number proto
+fill_prototype(NumberPrototype, jsnumber.NumberPrototype, default_attrs)
+#String proto
+fill_prototype(StringPrototype, jsstring.StringPrototype, default_attrs)
+#Boolean proto
+fill_prototype(BooleanPrototype, jsboolean.BooleanPrototype, default_attrs)
+#Array proto
+fill_prototype(ArrayPrototype, jsarray.ArrayPrototype, default_attrs)
+# ArrayBuffer proto
+fill_prototype(ArrayBufferPrototype, jsarraybuffer.ArrayBufferPrototype,
+ default_attrs)
+# Int8Array proto
+fill_prototype(Int8ArrayPrototype, jstypedarray.TypedArrayPrototype,
+ default_attrs)
+# Uint8Array proto
+fill_prototype(Uint8ArrayPrototype, jstypedarray.TypedArrayPrototype,
+ default_attrs)
+# Uint8ClampedArray proto
+fill_prototype(Uint8ClampedArrayPrototype, jstypedarray.TypedArrayPrototype,
+ default_attrs)
+# Int16Array proto
+fill_prototype(Int16ArrayPrototype, jstypedarray.TypedArrayPrototype,
+ default_attrs)
+# Uint16Array proto
+fill_prototype(Uint16ArrayPrototype, jstypedarray.TypedArrayPrototype,
+ default_attrs)
+# Int32Array proto
+fill_prototype(Int32ArrayPrototype, jstypedarray.TypedArrayPrototype,
+ default_attrs)
+# Uint32Array proto
+fill_prototype(Uint32ArrayPrototype, jstypedarray.TypedArrayPrototype,
+ default_attrs)
+# Float32Array proto
+fill_prototype(Float32ArrayPrototype, jstypedarray.TypedArrayPrototype,
+ default_attrs)
+# Float64Array proto
+fill_prototype(Float64ArrayPrototype, jstypedarray.TypedArrayPrototype,
+ default_attrs)
+#Error proto
+fill_prototype(ErrorPrototype, jserror.ErrorPrototype, default_attrs)
+#RegExp proto
+fill_prototype(RegExpPrototype, jsregexp.RegExpPrototype, default_attrs)
+# add exec to regexpfunction (cant add it automatically because of its name :(
+RegExpPrototype.own['exec'] = RegExpPrototype.own['exec2']
+del RegExpPrototype.own['exec2']
+
+#########################################################################
+# Constructors
+
+
+# String
+@Js
+def String(st):
+ if not len(arguments):
+ return Js('')
+ return arguments[0].to_string()
+
+
+@Js
+def string_constructor():
+ temp = PyJsObject(prototype=StringPrototype)
+ temp.Class = 'String'
+ #temp.TYPE = 'String'
+ if not len(arguments):
+ temp.value = ''
+ else:
+ temp.value = arguments[0].to_string().value
+ for i, ch in enumerate(temp.value): # this will make things long...
+ temp.own[str(i)] = {
+ 'value': Js(ch),
+ 'writable': False,
+ 'enumerable': True,
+ 'configurable': True
+ }
+ temp.own['length'] = {
+ 'value': Js(len(temp.value)),
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ return temp
+
+
+String.create = string_constructor
+
+# RegExp
+REG_EXP_FLAGS = ('g', 'i', 'm')
+
+
+@Js
+def RegExp(pattern, flags):
+ if pattern.Class == 'RegExp':
+ if not flags.is_undefined():
+ raise MakeError(
+ 'TypeError',
+ 'Cannot supply flags when constructing one RegExp from another'
+ )
+ # return unchanged
+ return pattern
+ #pattern is not a regexp
+ if pattern.is_undefined():
+ pattern = ''
+ else:
+ pattern = pattern.to_string().value
+ # try:
+ # pattern = REGEXP_CONVERTER._unescape_string(pattern.to_string().value)
+ # except:
+ # raise MakeError('SyntaxError', 'Invalid regexp')
+ flags = flags.to_string().value if not flags.is_undefined() else ''
+ for flag in flags:
+ if flag not in REG_EXP_FLAGS:
+ raise MakeError(
+ 'SyntaxError',
+ 'Invalid flags supplied to RegExp constructor "%s"' % flag)
+ if len(set(flags)) != len(flags):
+ raise MakeError(
+ 'SyntaxError',
+ 'Invalid flags supplied to RegExp constructor "%s"' % flags)
+ pattern = '/%s/' % (pattern if pattern else '(?:)') + flags
+ return JsRegExp(pattern)
+
+
+RegExp.create = RegExp
+PyJs.RegExp = RegExp
+
+# Number
+
+
+@Js
+def Number():
+ if len(arguments):
+ return arguments[0].to_number()
+ else:
+ return Js(0)
+
+
+@Js
+def number_constructor():
+ temp = PyJsObject(prototype=NumberPrototype)
+ temp.Class = 'Number'
+ #temp.TYPE = 'Number'
+ if len(arguments):
+ temp.value = arguments[0].to_number().value
+ else:
+ temp.value = 0
+ return temp
+
+
+Number.create = number_constructor
+
+# Boolean
+
+
+@Js
+def Boolean(value):
+ return value.to_boolean()
+
+
+@Js
+def boolean_constructor(value):
+ temp = PyJsObject(prototype=BooleanPrototype)
+ temp.Class = 'Boolean'
+ #temp.TYPE = 'Boolean'
+ temp.value = value.to_boolean().value
+ return temp
+
+
+Boolean.create = boolean_constructor
+
+##############################################################################
+
+
+def appengine(code):
+ try:
+ return translator.translate_js(code.decode('utf-8'))
+ except:
+ return traceback.format_exc()
+
+
+builtins = ('true', 'false', 'null', 'undefined', 'Infinity', 'NaN')
+
+scope = dict(zip(builtins, [eval(e) for e in builtins]))
+
+JS_BUILTINS = dict((k, v) for k, v in scope.items())
+
+# Fill in NUM_BANK
+for e in xrange(-2**10, 2**14):
+ NUM_BANK[e] = Js(e)
+
+if __name__ == '__main__':
+ print(ObjectPrototype.get('toString').callprop('call'))
+ print(FunctionPrototype.own)
+ a = null - Js(49404)
+ x = a.put('ser', Js('der'))
+ print(Js(0) or Js('p') and Js(4.0000000000050000001))
+ FunctionPrototype.put('Chuj', Js(409))
+ for e in FunctionPrototype:
+ print('Obk', e.get('__proto__').get('__proto__').get('__proto__'), e)
+ import code
+ s = Js(4)
+ b = Js(6)
+
+ s2 = Js(4)
+ o = ObjectPrototype
+ o.put('x', Js(100))
+ var = Scope(scope)
+ e = code.InteractiveConsole(globals())
+ #e.raw_input = interactor
+ e.interact()
diff --git a/Contents/Libraries/Shared/js2py/constructors/__init__.py b/Contents/Libraries/Shared/js2py/constructors/__init__.py
new file mode 100644
index 000000000..4bf956237
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/__init__.py
@@ -0,0 +1 @@
+__author__ = 'Piotr Dabkowski'
\ No newline at end of file
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsarray.py b/Contents/Libraries/Shared/js2py/constructors/jsarray.py
new file mode 100644
index 000000000..1550589d7
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsarray.py
@@ -0,0 +1,48 @@
+from ..base import *
+
+
+@Js
+def Array():
+ if len(arguments) == 0 or len(arguments) > 1:
+ return arguments.to_list()
+ a = arguments[0]
+ if isinstance(a, PyJsNumber):
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js([])
+ temp.put('length', a)
+ return temp
+ return [a]
+
+
+Array.create = Array
+Array.own['length']['value'] = Js(1)
+
+
+@Js
+def isArray(arg):
+ return arg.Class == 'Array'
+
+
+Array.define_own_property('isArray', {
+ 'value': isArray,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
+
+Array.define_own_property(
+ 'prototype', {
+ 'value': ArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+ArrayPrototype.define_own_property('constructor', {
+ 'value': Array,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsarraybuffer.py b/Contents/Libraries/Shared/js2py/constructors/jsarraybuffer.py
new file mode 100644
index 000000000..6da71aab3
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsarraybuffer.py
@@ -0,0 +1,41 @@
+# this is based on jsarray.py
+
+# todo check everything :)
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def ArrayBuffer():
+ a = arguments[0]
+ if isinstance(a, PyJsNumber):
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(bytearray([0] * length))
+ return temp
+ return Js(bytearray([0]))
+
+
+ArrayBuffer.create = ArrayBuffer
+ArrayBuffer.own['length']['value'] = Js(None)
+
+ArrayBuffer.define_own_property(
+ 'prototype', {
+ 'value': ArrayBufferPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+ArrayBufferPrototype.define_own_property(
+ 'constructor', {
+ 'value': ArrayBuffer,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': True
+ })
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsboolean.py b/Contents/Libraries/Shared/js2py/constructors/jsboolean.py
new file mode 100644
index 000000000..743b110d6
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsboolean.py
@@ -0,0 +1,16 @@
+from ..base import *
+
+BooleanPrototype.define_own_property('constructor', {
+ 'value': Boolean,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
+
+Boolean.define_own_property(
+ 'prototype', {
+ 'value': BooleanPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsdate.py b/Contents/Libraries/Shared/js2py/constructors/jsdate.py
new file mode 100644
index 000000000..98de64319
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsdate.py
@@ -0,0 +1,405 @@
+from ..base import *
+from .time_helpers import *
+
+TZ_OFFSET = (time.altzone // 3600)
+ABS_OFFSET = abs(TZ_OFFSET)
+TZ_NAME = time.tzname[1]
+ISO_FORMAT = '%s-%s-%sT%s:%s:%s.%sZ'
+
+
+@Js
+def Date(year, month, date, hours, minutes, seconds, ms):
+ return now().to_string()
+
+
+Date.Class = 'Date'
+
+
+def now():
+ return PyJsDate(int(time.time() * 1000), prototype=DatePrototype)
+
+
+@Js
+def UTC(year, month, date, hours, minutes, seconds, ms): # todo complete this
+ args = arguments
+ y = args[0].to_number()
+ m = args[1].to_number()
+ l = len(args)
+ dt = args[2].to_number() if l > 2 else Js(1)
+ h = args[3].to_number() if l > 3 else Js(0)
+ mi = args[4].to_number() if l > 4 else Js(0)
+ sec = args[5].to_number() if l > 5 else Js(0)
+ mili = args[6].to_number() if l > 6 else Js(0)
+ if not y.is_nan() and 0 <= y.value <= 99:
+ y = y + Js(1900)
+ t = TimeClip(MakeDate(MakeDay(y, m, dt), MakeTime(h, mi, sec, mili)))
+ return PyJsDate(t, prototype=DatePrototype)
+
+
+@Js
+def parse(string):
+ return PyJsDate(
+ TimeClip(parse_date(string.to_string().value)),
+ prototype=DatePrototype)
+
+
+Date.define_own_property('now', {
+ 'value': Js(now),
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
+
+Date.define_own_property('parse', {
+ 'value': parse,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
+
+Date.define_own_property('UTC', {
+ 'value': UTC,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
+
+
+class PyJsDate(PyJs):
+ Class = 'Date'
+ extensible = True
+
+ def __init__(self, value, prototype=None):
+ self.value = value
+ self.own = {}
+ self.prototype = prototype
+
+ # todo fix this problematic datetime part
+ def to_local_dt(self):
+ return datetime.datetime.utcfromtimestamp(
+ UTCToLocal(self.value) // 1000)
+
+ def to_utc_dt(self):
+ return datetime.datetime.utcfromtimestamp(self.value // 1000)
+
+ def local_strftime(self, pattern):
+ if self.value is NaN:
+ return 'Invalid Date'
+ try:
+ dt = self.to_local_dt()
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'unsupported date range. Will fix in future versions')
+ try:
+ return dt.strftime(pattern)
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'Could not generate date string from this date (limitations of python.datetime)'
+ )
+
+ def utc_strftime(self, pattern):
+ if self.value is NaN:
+ return 'Invalid Date'
+ try:
+ dt = self.to_utc_dt()
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'unsupported date range. Will fix in future versions')
+ try:
+ return dt.strftime(pattern)
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'Could not generate date string from this date (limitations of python.datetime)'
+ )
+
+
+def parse_date(py_string): # todo support all date string formats
+ try:
+ try:
+ dt = datetime.datetime.strptime(py_string, "%Y-%m-%dT%H:%M:%S.%fZ")
+ except:
+ dt = datetime.datetime.strptime(py_string, "%Y-%m-%dT%H:%M:%SZ")
+ return MakeDate(
+ MakeDay(Js(dt.year), Js(dt.month - 1), Js(dt.day)),
+ MakeTime(
+ Js(dt.hour), Js(dt.minute), Js(dt.second),
+ Js(dt.microsecond // 1000)))
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'Could not parse date %s - unsupported date format. Currently only supported format is RFC3339 utc. Sorry!'
+ % py_string)
+
+
+def date_constructor(*args):
+ if len(args) >= 2:
+ return date_constructor2(*args)
+ elif len(args) == 1:
+ return date_constructor1(args[0])
+ else:
+ return date_constructor0()
+
+
+def date_constructor0():
+ return now()
+
+
+def date_constructor1(value):
+ v = value.to_primitive()
+ if v._type() == 'String':
+ v = parse_date(v.value)
+ else:
+ v = v.to_int()
+ return PyJsDate(TimeClip(v), prototype=DatePrototype)
+
+
+def date_constructor2(*args):
+ y = args[0].to_number()
+ m = args[1].to_number()
+ l = len(args)
+ dt = args[2].to_number() if l > 2 else Js(1)
+ h = args[3].to_number() if l > 3 else Js(0)
+ mi = args[4].to_number() if l > 4 else Js(0)
+ sec = args[5].to_number() if l > 5 else Js(0)
+ mili = args[6].to_number() if l > 6 else Js(0)
+ if not y.is_nan() and 0 <= y.value <= 99:
+ y = y + Js(1900)
+ t = TimeClip(
+ LocalToUTC(MakeDate(MakeDay(y, m, dt), MakeTime(h, mi, sec, mili))))
+ return PyJsDate(t, prototype=DatePrototype)
+
+
+Date.create = date_constructor
+
+DatePrototype = PyJsDate(float('nan'), prototype=ObjectPrototype)
+
+
+def check_date(obj):
+ if obj.Class != 'Date':
+ raise MakeError('TypeError', 'this is not a Date object')
+
+
+class DateProto:
+ def toString():
+ check_date(this)
+ if this.value is NaN:
+ return 'Invalid Date'
+ offset = (UTCToLocal(this.value) - this.value) // msPerHour
+ return this.local_strftime(
+ '%a %b %d %Y %H:%M:%S GMT') + '%s00 (%s)' % (pad(
+ offset, 2, True), GetTimeZoneName(this.value))
+
+ def toDateString():
+ check_date(this)
+ return this.local_strftime('%d %B %Y')
+
+ def toTimeString():
+ check_date(this)
+ return this.local_strftime('%H:%M:%S')
+
+ def toLocaleString():
+ check_date(this)
+ return this.local_strftime('%d %B %Y %H:%M:%S')
+
+ def toLocaleDateString():
+ check_date(this)
+ return this.local_strftime('%d %B %Y')
+
+ def toLocaleTimeString():
+ check_date(this)
+ return this.local_strftime('%H:%M:%S')
+
+ def valueOf():
+ check_date(this)
+ return this.value
+
+ def getTime():
+ check_date(this)
+ return this.value
+
+ def getFullYear():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return YearFromTime(UTCToLocal(this.value))
+
+ def getUTCFullYear():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return YearFromTime(this.value)
+
+ def getMonth():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return MonthFromTime(UTCToLocal(this.value))
+
+ def getDate():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return DateFromTime(UTCToLocal(this.value))
+
+ def getUTCMonth():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return MonthFromTime(this.value)
+
+ def getUTCDate():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return DateFromTime(this.value)
+
+ def getDay():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return WeekDay(UTCToLocal(this.value))
+
+ def getUTCDay():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return WeekDay(this.value)
+
+ def getHours():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return HourFromTime(UTCToLocal(this.value))
+
+ def getUTCHours():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return HourFromTime(this.value)
+
+ def getMinutes():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return MinFromTime(UTCToLocal(this.value))
+
+ def getUTCMinutes():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return MinFromTime(this.value)
+
+ def getSeconds():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return SecFromTime(UTCToLocal(this.value))
+
+ def getUTCSeconds():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return SecFromTime(this.value)
+
+ def getMilliseconds():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return msFromTime(UTCToLocal(this.value))
+
+ def getUTCMilliseconds():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return msFromTime(this.value)
+
+ def getTimezoneOffset():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return (this.value - UTCToLocal(this.value)) // 60000
+
+ def setTime(time):
+ check_date(this)
+ this.value = TimeClip(time.to_number().to_int())
+ return this.value
+
+ def setMilliseconds(ms):
+ check_date(this)
+ t = UTCToLocal(this.value)
+ tim = MakeTime(
+ HourFromTime(t), MinFromTime(t), SecFromTime(t), ms.to_int())
+ u = TimeClip(LocalToUTC(MakeDate(Day(t), tim)))
+ this.value = u
+ return u
+
+ def setUTCMilliseconds(ms):
+ check_date(this)
+ t = this.value
+ tim = MakeTime(
+ HourFromTime(t), MinFromTime(t), SecFromTime(t), ms.to_int())
+ u = TimeClip(MakeDate(Day(t), tim))
+ this.value = u
+ return u
+
+ # todo Complete all setters!
+
+ def toUTCString():
+ check_date(this)
+ return this.utc_strftime('%d %B %Y %H:%M:%S')
+
+ def toISOString():
+ check_date(this)
+ t = this.value
+ year = YearFromTime(t)
+ month, day, hour, minute, second, milli = pad(
+ MonthFromTime(t) + 1), pad(DateFromTime(t)), pad(
+ HourFromTime(t)), pad(MinFromTime(t)), pad(
+ SecFromTime(t)), pad(msFromTime(t))
+ return ISO_FORMAT % (unicode(year) if 0 <= year <= 9999 else pad(
+ year, 6, True), month, day, hour, minute, second, milli)
+
+ def toJSON(key):
+ o = this.to_object()
+ tv = o.to_primitive('Number')
+ if tv.Class == 'Number' and not tv.is_finite():
+ return this.null
+ toISO = o.get('toISOString')
+ if not toISO.is_callable():
+ raise this.MakeError('TypeError', 'toISOString is not callable')
+ return toISO.call(o, ())
+
+
+def pad(num, n=2, sign=False):
+ '''returns n digit string representation of the num'''
+ s = unicode(abs(num))
+ if len(s) < n:
+ s = '0' * (n - len(s)) + s
+ if not sign:
+ return s
+ if num >= 0:
+ return '+' + s
+ else:
+ return '-' + s
+
+
+fill_prototype(DatePrototype, DateProto, default_attrs)
+
+Date.define_own_property(
+ 'prototype', {
+ 'value': DatePrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+DatePrototype.define_own_property('constructor', {
+ 'value': Date,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsfloat32array.py b/Contents/Libraries/Shared/js2py/constructors/jsfloat32array.py
new file mode 100644
index 000000000..3a1219167
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsfloat32array.py
@@ -0,0 +1,87 @@
+# this is based on jsarray.py
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def Float32Array():
+ TypedArray = (PyJsInt8Array, PyJsUint8Array, PyJsUint8ClampedArray,
+ PyJsInt16Array, PyJsUint16Array, PyJsInt32Array,
+ PyJsUint32Array, PyJsFloat32Array, PyJsFloat64Array)
+ a = arguments[0]
+ if isinstance(a, PyJsNumber): # length
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(numpy.full(length, 0, dtype=numpy.float32))
+ temp.put('length', a)
+ return temp
+ elif isinstance(a, PyJsString): # object (string)
+ temp = Js(numpy.array(list(a.value), dtype=numpy.float32))
+ temp.put('length', Js(len(list(a.value))))
+ return temp
+ elif isinstance(a, PyJsArray) or isinstance(a, TypedArray) or isinstance(
+ a, PyJsArrayBuffer): # object (Array, TypedArray)
+ array = a.to_list()
+ array = [(int(item.value) if item.value != None else 0)
+ for item in array]
+ temp = Js(numpy.array(array, dtype=numpy.float32))
+ temp.put('length', Js(len(array)))
+ return temp
+ elif isinstance(a, PyObjectWrapper): # object (ArrayBuffer, etc)
+ if len(a.obj) % 4 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Byte length of Float32Array should be a multiple of 4')
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ if offset % 4 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Start offset of Float32Array should be a multiple of 4')
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = int((len(a.obj) - offset) / 4)
+ array = numpy.frombuffer(
+ a.obj, dtype=numpy.float32, count=length, offset=offset)
+ temp = Js(array)
+ temp.put('length', Js(length))
+ temp.buff = array
+ return temp
+ temp = Js(numpy.full(0, 0, dtype=numpy.float32))
+ temp.put('length', Js(0))
+ return temp
+
+
+Float32Array.create = Float32Array
+Float32Array.own['length']['value'] = Js(3)
+
+Float32Array.define_own_property(
+ 'prototype', {
+ 'value': Float32ArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+Float32ArrayPrototype.define_own_property(
+ 'constructor', {
+ 'value': Float32Array,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+Float32ArrayPrototype.define_own_property('BYTES_PER_ELEMENT', {
+ 'value': Js(4),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsfloat64array.py b/Contents/Libraries/Shared/js2py/constructors/jsfloat64array.py
new file mode 100644
index 000000000..9ea5f052a
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsfloat64array.py
@@ -0,0 +1,87 @@
+# this is based on jsarray.py
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def Float64Array():
+ TypedArray = (PyJsInt8Array, PyJsUint8Array, PyJsUint8ClampedArray,
+ PyJsInt16Array, PyJsUint16Array, PyJsInt32Array,
+ PyJsUint32Array, PyJsFloat32Array, PyJsFloat64Array)
+ a = arguments[0]
+ if isinstance(a, PyJsNumber): # length
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(numpy.full(length, 0, dtype=numpy.float64))
+ temp.put('length', a)
+ return temp
+ elif isinstance(a, PyJsString): # object (string)
+ temp = Js(numpy.array(list(a.value), dtype=numpy.float64))
+ temp.put('length', Js(len(list(a.value))))
+ return temp
+ elif isinstance(a, PyJsArray) or isinstance(a, TypedArray) or isinstance(
+ a, PyJsArrayBuffer): # object (Array, TypedArray)
+ array = a.to_list()
+ array = [(int(item.value) if item.value != None else 0)
+ for item in array]
+ temp = Js(numpy.array(array, dtype=numpy.float64))
+ temp.put('length', Js(len(array)))
+ return temp
+ elif isinstance(a, PyObjectWrapper): # object (ArrayBuffer, etc)
+ if len(a.obj) % 8 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Byte length of Float64Array should be a multiple of 8')
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ if offset % 8 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Start offset of Float64Array should be a multiple of 8')
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = int((len(a.obj) - offset) / 8)
+ array = numpy.frombuffer(
+ a.obj, dtype=numpy.float64, count=length, offset=offset)
+ temp = Js(array)
+ temp.put('length', Js(length))
+ temp.buff = array
+ return temp
+ temp = Js(numpy.full(0, 0, dtype=numpy.float64))
+ temp.put('length', Js(0))
+ return temp
+
+
+Float64Array.create = Float64Array
+Float64Array.own['length']['value'] = Js(3)
+
+Float64Array.define_own_property(
+ 'prototype', {
+ 'value': Float64ArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+Float64ArrayPrototype.define_own_property(
+ 'constructor', {
+ 'value': Float64Array,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+Float64ArrayPrototype.define_own_property('BYTES_PER_ELEMENT', {
+ 'value': Js(8),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsfunction.py b/Contents/Libraries/Shared/js2py/constructors/jsfunction.py
new file mode 100644
index 000000000..c4ace2c39
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsfunction.py
@@ -0,0 +1,52 @@
+from ..base import *
+try:
+ from ..translators.translator import translate_js
+except:
+ pass
+
+
+@Js
+def Function():
+ # convert arguments to python list of strings
+ a = [e.to_string().value for e in arguments.to_list()]
+ body = ';'
+ args = ()
+ if len(a):
+ body = '%s;' % a[-1]
+ args = a[:-1]
+ # translate this function to js inline function
+ js_func = '(function (%s) {%s})' % (','.join(args), body)
+ # now translate js inline to python function
+ py_func = translate_js(js_func, '')
+ # add set func scope to global scope
+ # a but messy solution but works :)
+ globals()['var'] = PyJs.GlobalObject
+ # define py function and return it
+ temp = executor(py_func, globals())
+ temp.source = '{%s}' % body
+ temp.func_name = 'anonymous'
+ return temp
+
+
+def executor(f, glob):
+ exec (f, globals())
+ return globals()['PyJs_anonymous_0_']
+
+
+#new statement simply calls Function
+Function.create = Function
+
+#set constructor property inside FunctionPrototype
+
+fill_in_props(FunctionPrototype, {'constructor': Function}, default_attrs)
+
+#attach prototype to Function constructor
+Function.define_own_property(
+ 'prototype', {
+ 'value': FunctionPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+#Fix Function length (its 0 and should be 1)
+Function.own['length']['value'] = Js(1)
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsint16array.py b/Contents/Libraries/Shared/js2py/constructors/jsint16array.py
new file mode 100644
index 000000000..c2864105d
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsint16array.py
@@ -0,0 +1,87 @@
+# this is based on jsarray.py
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def Int16Array():
+ TypedArray = (PyJsInt8Array, PyJsUint8Array, PyJsUint8ClampedArray,
+ PyJsInt16Array, PyJsUint16Array, PyJsInt32Array,
+ PyJsUint32Array, PyJsFloat32Array, PyJsFloat64Array)
+ a = arguments[0]
+ if isinstance(a, PyJsNumber): # length
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(numpy.full(length, 0, dtype=numpy.int16))
+ temp.put('length', a)
+ return temp
+ elif isinstance(a, PyJsString): # object (string)
+ temp = Js(numpy.array(list(a.value), dtype=numpy.int16))
+ temp.put('length', Js(len(list(a.value))))
+ return temp
+ elif isinstance(a, PyJsArray) or isinstance(a, TypedArray) or isinstance(
+ a, PyJsArrayBuffer): # object (Array, TypedArray)
+ array = a.to_list()
+ array = [(int(item.value) if item.value != None else 0)
+ for item in array]
+ temp = Js(numpy.array(array, dtype=numpy.int16))
+ temp.put('length', Js(len(array)))
+ return temp
+ elif isinstance(a, PyObjectWrapper): # object (ArrayBuffer, etc)
+ if len(a.obj) % 2 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Byte length of Int16Array should be a multiple of 2')
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ if offset % 2 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Start offset of Int16Array should be a multiple of 2')
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = int((len(a.obj) - offset) / 2)
+ array = numpy.frombuffer(
+ a.obj, dtype=numpy.int16, count=length, offset=offset)
+ temp = Js(array)
+ temp.put('length', Js(length))
+ temp.buff = array
+ return temp
+ temp = Js(numpy.full(0, 0, dtype=numpy.int16))
+ temp.put('length', Js(0))
+ return temp
+
+
+Int16Array.create = Int16Array
+Int16Array.own['length']['value'] = Js(3)
+
+Int16Array.define_own_property(
+ 'prototype', {
+ 'value': Int16ArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+Int16ArrayPrototype.define_own_property(
+ 'constructor', {
+ 'value': Int16Array,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+Int16ArrayPrototype.define_own_property('BYTES_PER_ELEMENT', {
+ 'value': Js(2),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsint32array.py b/Contents/Libraries/Shared/js2py/constructors/jsint32array.py
new file mode 100644
index 000000000..2e8c4e846
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsint32array.py
@@ -0,0 +1,87 @@
+# this is based on jsarray.py
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def Int32Array():
+ TypedArray = (PyJsInt8Array, PyJsUint8Array, PyJsUint8ClampedArray,
+ PyJsInt16Array, PyJsUint16Array, PyJsInt32Array,
+ PyJsUint32Array, PyJsFloat32Array, PyJsFloat64Array)
+ a = arguments[0]
+ if isinstance(a, PyJsNumber): # length
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(numpy.full(length, 0, dtype=numpy.int32))
+ temp.put('length', a)
+ return temp
+ elif isinstance(a, PyJsString): # object (string)
+ temp = Js(numpy.array(list(a.value), dtype=numpy.int32))
+ temp.put('length', Js(len(list(a.value))))
+ return temp
+ elif isinstance(a, PyJsArray) or isinstance(a, TypedArray) or isinstance(
+ a, PyJsArrayBuffer): # object (Array, TypedArray)
+ array = a.to_list()
+ array = [(int(item.value) if item.value != None else 0)
+ for item in array]
+ temp = Js(numpy.array(array, dtype=numpy.int32))
+ temp.put('length', Js(len(array)))
+ return temp
+ elif isinstance(a, PyObjectWrapper): # object (ArrayBuffer, etc)
+ if len(a.obj) % 4 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Byte length of Int32Array should be a multiple of 4')
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ if offset % 4 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Start offset of Int32Array should be a multiple of 4')
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = int((len(a.obj) - offset) / 4)
+ array = numpy.frombuffer(
+ a.obj, dtype=numpy.int32, count=length, offset=offset)
+ temp = Js(array)
+ temp.put('length', Js(length))
+ temp.buff = array
+ return temp
+ temp = Js(numpy.full(0, 0, dtype=numpy.int32))
+ temp.put('length', Js(0))
+ return temp
+
+
+Int32Array.create = Int32Array
+Int32Array.own['length']['value'] = Js(3)
+
+Int32Array.define_own_property(
+ 'prototype', {
+ 'value': Int32ArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+Int32ArrayPrototype.define_own_property(
+ 'constructor', {
+ 'value': Int32Array,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+Int32ArrayPrototype.define_own_property('BYTES_PER_ELEMENT', {
+ 'value': Js(4),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsint8array.py b/Contents/Libraries/Shared/js2py/constructors/jsint8array.py
new file mode 100644
index 000000000..3396afea0
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsint8array.py
@@ -0,0 +1,79 @@
+# this is based on jsarray.py
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def Int8Array():
+ TypedArray = (PyJsInt8Array, PyJsUint8Array, PyJsUint8ClampedArray,
+ PyJsInt16Array, PyJsUint16Array, PyJsInt32Array,
+ PyJsUint32Array, PyJsFloat32Array, PyJsFloat64Array)
+ a = arguments[0]
+ if isinstance(a, PyJsNumber): # length
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(numpy.full(length, 0, dtype=numpy.int8))
+ temp.put('length', a)
+ return temp
+ elif isinstance(a, PyJsString): # object (string)
+ temp = Js(numpy.array(list(a.value), dtype=numpy.int8))
+ temp.put('length', Js(len(list(a.value))))
+ return temp
+ elif isinstance(a, PyJsArray) or isinstance(a, TypedArray) or isinstance(
+ a, PyJsArrayBuffer): # object (Array, TypedArray)
+ array = a.to_list()
+ array = [(int(item.value) if item.value != None else 0)
+ for item in array]
+ temp = Js(numpy.array(array, dtype=numpy.int8))
+ temp.put('length', Js(len(array)))
+ return temp
+ elif isinstance(a, PyObjectWrapper): # object (ArrayBuffer, etc)
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = int(len(a.obj) - offset)
+ array = numpy.frombuffer(
+ a.obj, dtype=numpy.int8, count=length, offset=offset)
+ temp = Js(array)
+ temp.put('length', Js(length))
+ temp.buff = array
+ return temp
+ temp = Js(numpy.full(0, 0, dtype=numpy.int8))
+ temp.put('length', Js(0))
+ return temp
+
+
+Int8Array.create = Int8Array
+Int8Array.own['length']['value'] = Js(3)
+
+Int8Array.define_own_property(
+ 'prototype', {
+ 'value': Int8ArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+Int8ArrayPrototype.define_own_property(
+ 'constructor', {
+ 'value': Int8Array,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+Int8ArrayPrototype.define_own_property('BYTES_PER_ELEMENT', {
+ 'value': Js(1),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsmath.py b/Contents/Libraries/Shared/js2py/constructors/jsmath.py
new file mode 100644
index 000000000..06751a3b2
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsmath.py
@@ -0,0 +1,157 @@
+from ..base import *
+import math
+import random
+
+Math = PyJsObject(prototype=ObjectPrototype)
+Math.Class = 'Math'
+
+CONSTANTS = {
+ 'E': 2.7182818284590452354,
+ 'LN10': 2.302585092994046,
+ 'LN2': 0.6931471805599453,
+ 'LOG2E': 1.4426950408889634,
+ 'LOG10E': 0.4342944819032518,
+ 'PI': 3.1415926535897932,
+ 'SQRT1_2': 0.7071067811865476,
+ 'SQRT2': 1.4142135623730951
+}
+
+for constant, value in CONSTANTS.items():
+ Math.define_own_property(
+ constant, {
+ 'value': Js(value),
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': False
+ })
+
+
+class MathFunctions:
+ def abs(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ return abs(a)
+
+ def acos(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ try:
+ return math.acos(a)
+ except:
+ return NaN
+
+ def asin(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ try:
+ return math.asin(a)
+ except:
+ return NaN
+
+ def atan(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ return math.atan(a)
+
+ def atan2(y, x):
+ a = x.to_number().value
+ b = y.to_number().value
+ if a != a or b != b: # it must be a nan
+ return NaN
+ return math.atan2(b, a)
+
+ def ceil(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ return math.ceil(a)
+
+ def floor(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ return math.floor(a)
+
+ def round(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ return round(a)
+
+ def sin(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ return math.sin(a)
+
+ def cos(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ return math.cos(a)
+
+ def tan(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ return math.tan(a)
+
+ def log(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ try:
+ return math.log(a)
+ except:
+ return NaN
+
+ def exp(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ return math.exp(a)
+
+ def pow(x, y):
+ a = x.to_number().value
+ b = y.to_number().value
+ if a != a or b != b: # it must be a nan
+ return NaN
+ try:
+ return a**b
+ except:
+ return NaN
+
+ def sqrt(x):
+ a = x.to_number().value
+ if a != a: # it must be a nan
+ return NaN
+ try:
+ return a**0.5
+ except:
+ return NaN
+
+ def min():
+ if not len(arguments):
+ return Infinity
+ lis = tuple(e.to_number().value for e in arguments.to_list())
+ if any(e != e for e in lis): # we dont want NaNs
+ return NaN
+ return min(*lis)
+
+ def max():
+ if not len(arguments):
+ return -Infinity
+ lis = tuple(e.to_number().value for e in arguments.to_list())
+ if any(e != e for e in lis): # we dont want NaNs
+ return NaN
+ return max(*lis)
+
+ def random():
+ return random.random()
+
+
+fill_prototype(Math, MathFunctions, default_attrs)
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsnumber.py b/Contents/Libraries/Shared/js2py/constructors/jsnumber.py
new file mode 100644
index 000000000..9ba7c7c79
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsnumber.py
@@ -0,0 +1,23 @@
+from ..base import *
+
+CONSTS = {
+ 'prototype': NumberPrototype,
+ 'MAX_VALUE': 1.7976931348623157e308,
+ 'MIN_VALUE': 5.0e-324,
+ 'NaN': NaN,
+ 'NEGATIVE_INFINITY': float('-inf'),
+ 'POSITIVE_INFINITY': float('inf')
+}
+
+fill_in_props(Number, CONSTS, {
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
+
+NumberPrototype.define_own_property('constructor', {
+ 'value': Number,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsobject.py b/Contents/Libraries/Shared/js2py/constructors/jsobject.py
new file mode 100644
index 000000000..c4e0ada39
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsobject.py
@@ -0,0 +1,198 @@
+from ..base import *
+import six
+
+#todo Double check everything is OK
+
+
+@Js
+def Object():
+ val = arguments.get('0')
+ if val.is_null() or val.is_undefined():
+ return PyJsObject(prototype=ObjectPrototype)
+ return val.to_object()
+
+
+@Js
+def object_constructor():
+ if len(arguments):
+ val = arguments.get('0')
+ if val.TYPE == 'Object':
+ #Implementation dependent, but my will simply return :)
+ return val
+ elif val.TYPE in ('Number', 'String', 'Boolean'):
+ return val.to_object()
+ return PyJsObject(prototype=ObjectPrototype)
+
+
+Object.create = object_constructor
+Object.own['length']['value'] = Js(1)
+
+
+class ObjectMethods:
+ def getPrototypeOf(obj):
+ if not obj.is_object():
+ raise MakeError('TypeError',
+ 'Object.getPrototypeOf called on non-object')
+ return null if obj.prototype is None else obj.prototype
+
+ def getOwnPropertyDescriptor(obj, prop):
+ if not obj.is_object():
+ raise MakeError(
+ 'TypeError',
+ 'Object.getOwnPropertyDescriptor called on non-object')
+ return obj.own.get(
+ prop.to_string().
+ value) # will return undefined if we dont have this prop
+
+ def getOwnPropertyNames(obj):
+ if not obj.is_object():
+ raise MakeError(
+ 'TypeError',
+ 'Object.getOwnPropertyDescriptor called on non-object')
+ return obj.own.keys()
+
+ def create(obj):
+ if not (obj.is_object() or obj.is_null()):
+ raise MakeError('TypeError',
+ 'Object prototype may only be an Object or null')
+ temp = PyJsObject(prototype=(None if obj.is_null() else obj))
+ if len(arguments) > 1 and not arguments[1].is_undefined():
+ if six.PY2:
+ ObjectMethods.defineProperties.__func__(temp, arguments[1])
+ else:
+ ObjectMethods.defineProperties(temp, arguments[1])
+ return temp
+
+ def defineProperty(obj, prop, attrs):
+ if not obj.is_object():
+ raise MakeError('TypeError',
+ 'Object.defineProperty called on non-object')
+ name = prop.to_string().value
+ if not obj.define_own_property(name, ToPropertyDescriptor(attrs)):
+ raise MakeError('TypeError', 'Cannot redefine property: %s' % name)
+ return obj
+
+ def defineProperties(obj, properties):
+ if not obj.is_object():
+ raise MakeError('TypeError',
+ 'Object.defineProperties called on non-object')
+ props = properties.to_object()
+ for name in props:
+ desc = ToPropertyDescriptor(props.get(name.value))
+ if not obj.define_own_property(name.value, desc):
+ raise MakeError(
+ 'TypeError',
+ 'Failed to define own property: %s' % name.value)
+ return obj
+
+ def seal(obj):
+ if not obj.is_object():
+ raise MakeError('TypeError', 'Object.seal called on non-object')
+ for desc in obj.own.values():
+ desc['configurable'] = False
+ obj.extensible = False
+ return obj
+
+ def freeze(obj):
+ if not obj.is_object():
+ raise MakeError('TypeError', 'Object.freeze called on non-object')
+ for desc in obj.own.values():
+ desc['configurable'] = False
+ if is_data_descriptor(desc):
+ desc['writable'] = False
+ obj.extensible = False
+ return obj
+
+ def preventExtensions(obj):
+ if not obj.is_object():
+ raise MakeError('TypeError',
+ 'Object.preventExtensions on non-object')
+ obj.extensible = False
+ return obj
+
+ def isSealed(obj):
+ if not obj.is_object():
+ raise MakeError('TypeError',
+ 'Object.isSealed called on non-object')
+ if obj.extensible:
+ return False
+ for desc in obj.own.values():
+ if desc['configurable']:
+ return False
+ return True
+
+ def isFrozen(obj):
+ if not obj.is_object():
+ raise MakeError('TypeError',
+ 'Object.isFrozen called on non-object')
+ if obj.extensible:
+ return False
+ for desc in obj.own.values():
+ if desc['configurable']:
+ return False
+ if is_data_descriptor(desc) and desc['writable']:
+ return False
+ return True
+
+ def isExtensible(obj):
+ if not obj.is_object():
+ raise MakeError('TypeError',
+ 'Object.isExtensible called on non-object')
+ return obj.extensible
+
+ def keys(obj):
+ if not obj.is_object():
+ raise MakeError('TypeError', 'Object.keys called on non-object')
+ return [e for e, d in six.iteritems(obj.own) if d.get('enumerable')]
+
+
+# add methods attached to Object constructor
+fill_prototype(Object, ObjectMethods, default_attrs)
+# add constructor to prototype
+fill_in_props(ObjectPrototype, {'constructor': Object}, default_attrs)
+# add prototype property to the constructor.
+Object.define_own_property(
+ 'prototype', {
+ 'value': ObjectPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+# some utility functions:
+
+
+def ToPropertyDescriptor(obj): # page 38 (50 absolute)
+ if obj.TYPE != 'Object':
+ raise MakeError('TypeError',
+ 'Can\'t convert non-object to property descriptor')
+ desc = {}
+ if obj.has_property('enumerable'):
+ desc['enumerable'] = obj.get('enumerable').to_boolean().value
+ if obj.has_property('configurable'):
+ desc['configurable'] = obj.get('configurable').to_boolean().value
+ if obj.has_property('value'):
+ desc['value'] = obj.get('value')
+ if obj.has_property('writable'):
+ desc['writable'] = obj.get('writable').to_boolean().value
+ if obj.has_property('get'):
+ cand = obj.get('get')
+ if not (cand.is_undefined() or cand.is_callable()):
+ raise MakeError(
+ 'TypeError',
+ 'Invalid getter (it has to be a function or undefined)')
+ desc['get'] = cand
+ if obj.has_property('set'):
+ cand = obj.get('set')
+ if not (cand.is_undefined() or cand.is_callable()):
+ raise MakeError(
+ 'TypeError',
+ 'Invalid setter (it has to be a function or undefined)')
+ desc['set'] = cand
+ if ('get' in desc or 'set' in desc) and ('value' in desc
+ or 'writable' in desc):
+ raise MakeError(
+ 'TypeError',
+ 'Invalid property. A property cannot both have accessors and be writable or have a value.'
+ )
+ return desc
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsregexp.py b/Contents/Libraries/Shared/js2py/constructors/jsregexp.py
new file mode 100644
index 000000000..2dfc25cb9
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsregexp.py
@@ -0,0 +1,16 @@
+from ..base import *
+
+RegExpPrototype.define_own_property('constructor', {
+ 'value': RegExp,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
+
+RegExp.define_own_property(
+ 'prototype', {
+ 'value': RegExpPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsstring.py b/Contents/Libraries/Shared/js2py/constructors/jsstring.py
new file mode 100644
index 000000000..0650d0f59
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsstring.py
@@ -0,0 +1,40 @@
+from ..base import *
+# python 3 support
+import six
+if six.PY3:
+ unichr = chr
+
+
+@Js
+def fromCharCode():
+ args = arguments.to_list()
+ res = u''
+ for e in args:
+ res += unichr(e.to_uint16())
+ return this.Js(res)
+
+
+fromCharCode.own['length']['value'] = Js(1)
+
+String.define_own_property(
+ 'fromCharCode', {
+ 'value': fromCharCode,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+String.define_own_property(
+ 'prototype', {
+ 'value': StringPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+StringPrototype.define_own_property('constructor', {
+ 'value': String,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsuint16array.py b/Contents/Libraries/Shared/js2py/constructors/jsuint16array.py
new file mode 100644
index 000000000..a61be246d
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsuint16array.py
@@ -0,0 +1,87 @@
+# this is based on jsarray.py
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def Uint16Array():
+ TypedArray = (PyJsInt8Array, PyJsUint8Array, PyJsUint8ClampedArray,
+ PyJsInt16Array, PyJsUint16Array, PyJsInt32Array,
+ PyJsUint32Array, PyJsFloat32Array, PyJsFloat64Array)
+ a = arguments[0]
+ if isinstance(a, PyJsNumber): # length
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(numpy.full(length, 0, dtype=numpy.uint16))
+ temp.put('length', a)
+ return temp
+ elif isinstance(a, PyJsString): # object (string)
+ temp = Js(numpy.array(list(a.value), dtype=numpy.uint16))
+ temp.put('length', Js(len(list(a.value))))
+ return temp
+ elif isinstance(a, PyJsArray) or isinstance(a, TypedArray) or isinstance(
+ a, PyJsArrayBuffer): # object (Array, TypedArray)
+ array = a.to_list()
+ array = [(int(item.value) if item.value != None else 0)
+ for item in array]
+ temp = Js(numpy.array(array, dtype=numpy.uint16))
+ temp.put('length', Js(len(array)))
+ return temp
+ elif isinstance(a, PyObjectWrapper): # object (ArrayBuffer, etc)
+ if len(a.obj) % 2 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Byte length of Uint16Array should be a multiple of 2')
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ if offset % 2 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Start offset of Uint16Array should be a multiple of 2')
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = int((len(a.obj) - offset) / 2)
+ array = numpy.frombuffer(
+ a.obj, dtype=numpy.uint16, count=length, offset=offset)
+ temp = Js(array)
+ temp.put('length', Js(length))
+ temp.buff = array
+ return temp
+ temp = Js(numpy.full(0, 0, dtype=numpy.uint16))
+ temp.put('length', Js(0))
+ return temp
+
+
+Uint16Array.create = Uint16Array
+Uint16Array.own['length']['value'] = Js(3)
+
+Uint16Array.define_own_property(
+ 'prototype', {
+ 'value': Uint16ArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+Uint16ArrayPrototype.define_own_property(
+ 'constructor', {
+ 'value': Uint16Array,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+Uint16ArrayPrototype.define_own_property('BYTES_PER_ELEMENT', {
+ 'value': Js(2),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsuint32array.py b/Contents/Libraries/Shared/js2py/constructors/jsuint32array.py
new file mode 100644
index 000000000..c6f57c94d
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsuint32array.py
@@ -0,0 +1,95 @@
+# this is based on jsarray.py
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def Uint32Array():
+ TypedArray = (PyJsInt8Array, PyJsUint8Array, PyJsUint8ClampedArray,
+ PyJsInt16Array, PyJsUint16Array, PyJsInt32Array,
+ PyJsUint32Array, PyJsFloat32Array, PyJsFloat64Array)
+ a = arguments[0]
+ if isinstance(a, PyJsNumber): # length
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(numpy.full(length, 0, dtype=numpy.uint32))
+ temp.put('length', a)
+ return temp
+ elif isinstance(a, PyJsString): # object (string)
+ temp = Js(numpy.array(list(a.value), dtype=numpy.uint32))
+ temp.put('length', Js(len(list(a.value))))
+ return temp
+ elif isinstance(a, PyJsArray) or isinstance(a, TypedArray) or isinstance(
+ a, PyJsArrayBuffer): # object (Array, TypedArray)
+ array = a.to_list()
+ array = [(int(item.value) if item.value != None else 0)
+ for item in array]
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = len(array) - offset
+ temp = Js(
+ numpy.array(array[offset:offset + length], dtype=numpy.uint32))
+ temp.put('length', Js(length))
+ return temp
+ elif isinstance(a, PyObjectWrapper): # object (ArrayBuffer, etc)
+ if len(a.obj) % 4 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Byte length of Uint32Array should be a multiple of 4')
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ if offset % 4 != 0:
+ raise MakeError(
+ 'RangeError',
+ 'Start offset of Uint32Array should be a multiple of 4')
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = int((len(a.obj) - offset) / 4)
+ temp = Js(
+ numpy.frombuffer(
+ a.obj, dtype=numpy.uint32, count=length, offset=offset))
+ temp.put('length', Js(length))
+ return temp
+ temp = Js(numpy.full(0, 0, dtype=numpy.uint32))
+ temp.put('length', Js(0))
+ return temp
+
+
+Uint32Array.create = Uint32Array
+Uint32Array.own['length']['value'] = Js(3)
+
+Uint32Array.define_own_property(
+ 'prototype', {
+ 'value': Uint32ArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+Uint32ArrayPrototype.define_own_property(
+ 'constructor', {
+ 'value': Uint32Array,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+Uint32ArrayPrototype.define_own_property('BYTES_PER_ELEMENT', {
+ 'value': Js(4),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsuint8array.py b/Contents/Libraries/Shared/js2py/constructors/jsuint8array.py
new file mode 100644
index 000000000..4b2199da2
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsuint8array.py
@@ -0,0 +1,79 @@
+# this is based on jsarray.py
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def Uint8Array():
+ TypedArray = (PyJsInt8Array, PyJsUint8Array, PyJsUint8ClampedArray,
+ PyJsInt16Array, PyJsUint16Array, PyJsInt32Array,
+ PyJsUint32Array, PyJsFloat32Array, PyJsFloat64Array)
+ a = arguments[0]
+ if isinstance(a, PyJsNumber): # length
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(numpy.full(length, 0, dtype=numpy.uint8))
+ temp.put('length', a)
+ return temp
+ elif isinstance(a, PyJsString): # object (string)
+ temp = Js(numpy.array(list(a.value), dtype=numpy.uint8))
+ temp.put('length', Js(len(list(a.value))))
+ return temp
+ elif isinstance(a, PyJsArray) or isinstance(a, TypedArray) or isinstance(
+ a, PyJsArrayBuffer): # object (Array, TypedArray)
+ array = a.to_list()
+ array = [(int(item.value) if item.value != None else 0)
+ for item in array]
+ temp = Js(numpy.array(array, dtype=numpy.uint8))
+ temp.put('length', Js(len(array)))
+ return temp
+ elif isinstance(a, PyObjectWrapper): # object (ArrayBuffer, etc)
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = int(len(a.obj) - offset)
+ array = numpy.frombuffer(
+ a.obj, dtype=numpy.uint8, count=length, offset=offset)
+ temp = Js(array)
+ temp.put('length', Js(length))
+ temp.buff = array
+ return temp
+ temp = Js(numpy.full(0, 0, dtype=numpy.uint8))
+ temp.put('length', Js(0))
+ return temp
+
+
+Uint8Array.create = Uint8Array
+Uint8Array.own['length']['value'] = Js(3)
+
+Uint8Array.define_own_property(
+ 'prototype', {
+ 'value': Uint8ArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+Uint8ArrayPrototype.define_own_property(
+ 'constructor', {
+ 'value': Uint8Array,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+Uint8ArrayPrototype.define_own_property('BYTES_PER_ELEMENT', {
+ 'value': Js(1),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/jsuint8clampedarray.py b/Contents/Libraries/Shared/js2py/constructors/jsuint8clampedarray.py
new file mode 100644
index 000000000..7b5e350b2
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/jsuint8clampedarray.py
@@ -0,0 +1,79 @@
+# this is based on jsarray.py
+
+from ..base import *
+try:
+ import numpy
+except:
+ pass
+
+
+@Js
+def Uint8ClampedArray():
+ TypedArray = (PyJsInt8Array, PyJsUint8Array, PyJsUint8ClampedArray,
+ PyJsInt16Array, PyJsUint16Array, PyJsInt32Array,
+ PyJsUint32Array, PyJsFloat32Array, PyJsFloat64Array)
+ a = arguments[0]
+ if isinstance(a, PyJsNumber): # length
+ length = a.to_uint32()
+ if length != a.value:
+ raise MakeError('RangeError', 'Invalid array length')
+ temp = Js(numpy.full(length, 0, dtype=numpy.uint8), Clamped=True)
+ temp.put('length', a)
+ return temp
+ elif isinstance(a, PyJsString): # object (string)
+ temp = Js(numpy.array(list(a.value), dtype=numpy.uint8), Clamped=True)
+ temp.put('length', Js(len(list(a.value))))
+ return temp
+ elif isinstance(a, PyJsArray) or isinstance(a, TypedArray) or isinstance(
+ a, PyJsArrayBuffer): # object (Array, TypedArray)
+ array = a.to_list()
+ array = [(int(item.value) if item.value != None else 0)
+ for item in array]
+ temp = Js(numpy.array(array, dtype=numpy.uint8), Clamped=True)
+ temp.put('length', Js(len(array)))
+ return temp
+ elif isinstance(a, PyObjectWrapper): # object (ArrayBuffer, etc)
+ if len(arguments) > 1:
+ offset = int(arguments[1].value)
+ else:
+ offset = 0
+ if len(arguments) > 2:
+ length = int(arguments[2].value)
+ else:
+ length = int(len(a.obj) - offset)
+ array = numpy.frombuffer(
+ a.obj, dtype=numpy.uint8, count=length, offset=offset)
+ temp = Js(array, Clamped=True)
+ temp.put('length', Js(length))
+ temp.buff = array
+ return temp
+ temp = Js(numpy.full(0, 0, dtype=numpy.uint8), Clamped=True)
+ temp.put('length', Js(0))
+ return temp
+
+
+Uint8ClampedArray.create = Uint8ClampedArray
+Uint8ClampedArray.own['length']['value'] = Js(3)
+
+Uint8ClampedArray.define_own_property(
+ 'prototype', {
+ 'value': Uint8ClampedArrayPrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+Uint8ClampedArrayPrototype.define_own_property(
+ 'constructor', {
+ 'value': Uint8ClampedArray,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+ })
+
+Uint8ClampedArrayPrototype.define_own_property('BYTES_PER_ELEMENT', {
+ 'value': Js(1),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+})
diff --git a/Contents/Libraries/Shared/js2py/constructors/time_helpers.py b/Contents/Libraries/Shared/js2py/constructors/time_helpers.py
new file mode 100644
index 000000000..a744d8cac
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/constructors/time_helpers.py
@@ -0,0 +1,207 @@
+# NOTE: t must be INT!!!
+import time
+import datetime
+import warnings
+
+try:
+ from tzlocal import get_localzone
+ LOCAL_ZONE = get_localzone()
+except: # except all problems...
+ warnings.warn(
+ 'Please install or fix tzlocal library (pip install tzlocal) in order to make Date object work better. Otherwise I will assume DST is in effect all the time'
+ )
+
+ class LOCAL_ZONE:
+ @staticmethod
+ def dst(*args):
+ return 1
+
+
+from js2py.base import MakeError
+CUM = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365)
+msPerDay = 86400000
+msPerYear = int(86400000 * 365.242)
+msPerSecond = 1000
+msPerMinute = 60000
+msPerHour = 3600000
+HoursPerDay = 24
+MinutesPerHour = 60
+SecondsPerMinute = 60
+NaN = float('nan')
+LocalTZA = -time.timezone * msPerSecond
+
+
+def DaylightSavingTA(t):
+ if t is NaN:
+ return t
+ try:
+ return int(
+ LOCAL_ZONE.dst(datetime.datetime.utcfromtimestamp(
+ t // 1000)).seconds) * 1000
+ except:
+ warnings.warn(
+ 'Invalid datetime date, assumed DST time, may be inaccurate...',
+ Warning)
+ return 1
+ #raise MakeError('TypeError', 'date not supported by python.datetime. I will solve it in future versions')
+
+
+def GetTimeZoneName(t):
+ return time.tzname[DaylightSavingTA(t) > 0]
+
+
+def LocalToUTC(t):
+ return t - LocalTZA - DaylightSavingTA(t - LocalTZA)
+
+
+def UTCToLocal(t):
+ return t + LocalTZA + DaylightSavingTA(t)
+
+
+def Day(t):
+ return t // 86400000
+
+
+def TimeWithinDay(t):
+ return t % 86400000
+
+
+def DaysInYear(y):
+ if y % 4:
+ return 365
+ elif y % 100:
+ return 366
+ elif y % 400:
+ return 365
+ else:
+ return 366
+
+
+def DayFromYear(y):
+ return 365 * (y - 1970) + (y - 1969) // 4 - (y - 1901) // 100 + (
+ y - 1601) // 400
+
+
+def TimeFromYear(y):
+ return 86400000 * DayFromYear(y)
+
+
+def YearFromTime(t):
+ guess = 1970 - t // 31556908800 # msPerYear
+ gt = TimeFromYear(guess)
+ if gt <= t:
+ while gt <= t:
+ guess += 1
+ gt = TimeFromYear(guess)
+ return guess - 1
+ else:
+ while gt > t:
+ guess -= 1
+ gt = TimeFromYear(guess)
+ return guess
+
+
+def DayWithinYear(t):
+ return Day(t) - DayFromYear(YearFromTime(t))
+
+
+def InLeapYear(t):
+ y = YearFromTime(t)
+ if y % 4:
+ return 0
+ elif y % 100:
+ return 1
+ elif y % 400:
+ return 0
+ else:
+ return 1
+
+
+def MonthFromTime(t):
+ day = DayWithinYear(t)
+ leap = InLeapYear(t)
+ if day < 31:
+ return 0
+ day -= leap
+ if day < 59:
+ return 1
+ elif day < 90:
+ return 2
+ elif day < 120:
+ return 3
+ elif day < 151:
+ return 4
+ elif day < 181:
+ return 5
+ elif day < 212:
+ return 6
+ elif day < 243:
+ return 7
+ elif day < 273:
+ return 8
+ elif day < 304:
+ return 9
+ elif day < 334:
+ return 10
+ else:
+ return 11
+
+
+def DateFromTime(t):
+ mon = MonthFromTime(t)
+ day = DayWithinYear(t)
+ return day - CUM[mon] - (1 if InLeapYear(t) and mon >= 2 else 0) + 1
+
+
+def WeekDay(t):
+ # 0 == sunday
+ return (Day(t) + 4) % 7
+
+
+def msFromTime(t):
+ return t % 1000
+
+
+def SecFromTime(t):
+ return (t // 1000) % 60
+
+
+def MinFromTime(t):
+ return (t // 60000) % 60
+
+
+def HourFromTime(t):
+ return (t // 3600000) % 24
+
+
+def MakeTime(hour, Min, sec, ms):
+ # takes PyJs objects and returns t
+ if not (hour.is_finite() and Min.is_finite() and sec.is_finite()
+ and ms.is_finite()):
+ return NaN
+ h, m, s, milli = hour.to_int(), Min.to_int(), sec.to_int(), ms.to_int()
+ return h * 3600000 + m * 60000 + s * 1000 + milli
+
+
+def MakeDay(year, month, date):
+ # takes PyJs objects and returns t
+ if not (year.is_finite() and month.is_finite() and date.is_finite()):
+ return NaN
+ y, m, dt = year.to_int(), month.to_int(), date.to_int()
+ y += m // 12
+ mn = m % 12
+ d = DayFromYear(y) + CUM[mn] + dt - 1 + (1 if DaysInYear(y) == 366
+ and mn >= 2 else 0)
+ return d # ms per day
+
+
+def MakeDate(day, time):
+ return 86400000 * day + time
+
+
+def TimeClip(t):
+ if t != t or abs(t) == float('inf'):
+ return NaN
+ if abs(t) > 8.64 * 10**15:
+ return NaN
+ return int(t)
diff --git a/Contents/Libraries/Shared/js2py/es6/__init__.py b/Contents/Libraries/Shared/js2py/es6/__init__.py
new file mode 100644
index 000000000..4a58d3f0b
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/es6/__init__.py
@@ -0,0 +1,41 @@
+INITIALISED = False
+babel = None
+babelPresetEs2015 = None
+
+
+def js6_to_js5(code):
+ global INITIALISED, babel, babelPresetEs2015
+ if not INITIALISED:
+ import signal, warnings, time
+ warnings.warn(
+ '\nImporting babel.py for the first time - this can take some time. \nPlease note that currently Javascript 6 in Js2Py is unstable and slow. Use only for tiny scripts!'
+ )
+
+ from .babel import babel as _babel
+ babel = _babel.Object.babel
+ babelPresetEs2015 = _babel.Object.babelPresetEs2015
+
+ # very weird hack. Somehow this helps babel to initialise properly!
+ try:
+ babel.transform('warmup', {'presets': {}})
+ signal.alarm(2)
+
+ def kill_it(a, b):
+ raise KeyboardInterrupt('Better work next time!')
+
+ signal.signal(signal.SIGALRM, kill_it)
+ babel.transform('stuckInALoop', {
+ 'presets': babelPresetEs2015
+ }).code
+ for n in range(3):
+ time.sleep(1)
+ except:
+ print("Initialised babel!")
+ INITIALISED = True
+ return babel.transform(code, {'presets': babelPresetEs2015}).code
+
+
+if __name__ == '__main__':
+ print(js6_to_js5('obj={}; obj.x = function() {return () => this}'))
+ print()
+ print(js6_to_js5('const a = 1;'))
diff --git a/Contents/Libraries/Shared/js2py/es6/babel.js b/Contents/Libraries/Shared/js2py/es6/babel.js
new file mode 100644
index 000000000..e088e470c
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/es6/babel.js
@@ -0,0 +1,6 @@
+// run buildBabel in this folder to convert this code to python!
+var babel = require("babel-core");
+var babelPresetEs2015 = require("babel-preset-es2015");
+
+Object.babelPresetEs2015 = babelPresetEs2015;
+Object.babel = babel;
diff --git a/Contents/Libraries/Shared/js2py/es6/babel.py b/Contents/Libraries/Shared/js2py/es6/babel.py
new file mode 100644
index 000000000..24623e64c
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/es6/babel.py
@@ -0,0 +1,52077 @@
+__all__ = ['babel']
+
+# Don't look below, you will not understand this Python code :) I don't.
+
+from js2py.pyjs import *
+# setting scope
+var = Scope( JS_BUILTINS )
+set_global_object(var)
+
+# Code follows:
+var.registers([])
+@Js
+def PyJs_anonymous_1_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'babel', u'require', u'babelPresetEs2015', u'exports', u'module'])
+ Js(u'use strict')
+ var.put(u'babel', var.get(u'require')(Js(u'babel-core')))
+ var.put(u'babelPresetEs2015', var.get(u'require')(Js(u'babel-preset-es2015')))
+ var.get(u'Object').put(u'babelPresetEs2015', var.get(u'babelPresetEs2015'))
+ var.get(u'Object').put(u'babel', var.get(u'babel'))
+PyJs_anonymous_1_._set_name(u'anonymous')
+PyJs_Object_2_ = Js({u'babel-core':Js(5.0),u'babel-preset-es2015':Js(95.0)})
+@Js
+def PyJs_anonymous_3_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ @Js
+ def PyJs_anonymous_4_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return JsRegExp(u'/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g')
+ PyJs_anonymous_4_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_4_)
+PyJs_anonymous_3_._set_name(u'anonymous')
+PyJs_Object_5_ = Js({})
+@Js
+def PyJs_anonymous_6_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'assembleStyles', u'require', u'exports', u'module'])
+ @Js
+ def PyJsHoisted_assembleStyles_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'styles'])
+ PyJs_Object_8_ = Js({u'reset':Js([Js(0.0), Js(0.0)]),u'bold':Js([Js(1.0), Js(22.0)]),u'dim':Js([Js(2.0), Js(22.0)]),u'italic':Js([Js(3.0), Js(23.0)]),u'underline':Js([Js(4.0), Js(24.0)]),u'inverse':Js([Js(7.0), Js(27.0)]),u'hidden':Js([Js(8.0), Js(28.0)]),u'strikethrough':Js([Js(9.0), Js(29.0)])})
+ PyJs_Object_9_ = Js({u'black':Js([Js(30.0), Js(39.0)]),u'red':Js([Js(31.0), Js(39.0)]),u'green':Js([Js(32.0), Js(39.0)]),u'yellow':Js([Js(33.0), Js(39.0)]),u'blue':Js([Js(34.0), Js(39.0)]),u'magenta':Js([Js(35.0), Js(39.0)]),u'cyan':Js([Js(36.0), Js(39.0)]),u'white':Js([Js(37.0), Js(39.0)]),u'gray':Js([Js(90.0), Js(39.0)])})
+ PyJs_Object_10_ = Js({u'bgBlack':Js([Js(40.0), Js(49.0)]),u'bgRed':Js([Js(41.0), Js(49.0)]),u'bgGreen':Js([Js(42.0), Js(49.0)]),u'bgYellow':Js([Js(43.0), Js(49.0)]),u'bgBlue':Js([Js(44.0), Js(49.0)]),u'bgMagenta':Js([Js(45.0), Js(49.0)]),u'bgCyan':Js([Js(46.0), Js(49.0)]),u'bgWhite':Js([Js(47.0), Js(49.0)])})
+ PyJs_Object_7_ = Js({u'modifiers':PyJs_Object_8_,u'colors':PyJs_Object_9_,u'bgColors':PyJs_Object_10_})
+ var.put(u'styles', PyJs_Object_7_)
+ var.get(u'styles').get(u'colors').put(u'grey', var.get(u'styles').get(u'colors').get(u'gray'))
+ @Js
+ def PyJs_anonymous_11_(groupName, this, arguments, var=var):
+ var = Scope({u'this':this, u'groupName':groupName, u'arguments':arguments}, var)
+ var.registers([u'groupName', u'group'])
+ var.put(u'group', var.get(u'styles').get(var.get(u'groupName')))
+ @Js
+ def PyJs_anonymous_12_(styleName, this, arguments, var=var):
+ var = Scope({u'this':this, u'styleName':styleName, u'arguments':arguments}, var)
+ var.registers([u'style', u'styleName'])
+ var.put(u'style', var.get(u'group').get(var.get(u'styleName')))
+ PyJs_Object_13_ = Js({u'open':((Js(u'\x1b[')+var.get(u'style').get(u'0'))+Js(u'm')),u'close':((Js(u'\x1b[')+var.get(u'style').get(u'1'))+Js(u'm'))})
+ var.get(u'styles').put(var.get(u'styleName'), var.get(u'group').put(var.get(u'styleName'), PyJs_Object_13_))
+ PyJs_anonymous_12_._set_name(u'anonymous')
+ var.get(u'Object').callprop(u'keys', var.get(u'group')).callprop(u'forEach', PyJs_anonymous_12_)
+ PyJs_Object_14_ = Js({u'value':var.get(u'group'),u'enumerable':Js(False)})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'styles'), var.get(u'groupName'), PyJs_Object_14_)
+ PyJs_anonymous_11_._set_name(u'anonymous')
+ var.get(u'Object').callprop(u'keys', var.get(u'styles')).callprop(u'forEach', PyJs_anonymous_11_)
+ return var.get(u'styles')
+ PyJsHoisted_assembleStyles_.func_name = u'assembleStyles'
+ var.put(u'assembleStyles', PyJsHoisted_assembleStyles_)
+ Js(u'use strict')
+ pass
+ PyJs_Object_15_ = Js({u'enumerable':var.get(u'true'),u'get':var.get(u'assembleStyles')})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'module'), Js(u'exports'), PyJs_Object_15_)
+PyJs_anonymous_6_._set_name(u'anonymous')
+PyJs_Object_16_ = Js({})
+@Js
+def PyJs_anonymous_17_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'defs', u'_esutils2', u'exports', u'_jsTokens2', u'_esutils', u'require', u'NEWLINE', u'module', u'BRACKET', u'JSX_TAG', u'_chalk', u'getTokenType', u'_interopRequireDefault', u'highlight', u'_jsTokens', u'_chalk2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_22_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_22_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_highlight_(text, this, arguments, var=var):
+ var = Scope({u'this':this, u'text':text, u'arguments':arguments}, var)
+ var.registers([u'text'])
+ @Js
+ def PyJs_anonymous_24_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'_len', u'_key', u'args', u'type', u'colorize'])
+ #for JS loop
+ var.put(u'_len', var.get(u'arguments').get(u'length'))
+ var.put(u'args', var.get(u'Array')(var.get(u'_len')))
+ var.put(u'_key', Js(0.0))
+ while (var.get(u'_key')')), var.get(u'maybeHighlight')(var.get(u'defs').get(u'gutter'), var.get(u'gutter')), var.get(u'line'), var.get(u'markerLine')]).callprop(u'join', Js(u''))
+ else:
+ return ((Js(u' ')+var.get(u'maybeHighlight')(var.get(u'defs').get(u'gutter'), var.get(u'gutter')))+var.get(u'line'))
+ PyJs_anonymous_21_._set_name(u'anonymous')
+ var.put(u'frame', var.get(u'lines').callprop(u'slice', var.get(u'start'), var.get(u'end')).callprop(u'map', PyJs_anonymous_21_).callprop(u'join', Js(u'\n')))
+ if var.get(u'highlighted'):
+ return var.get(u'_chalk2').get(u'default').callprop(u'reset', var.get(u'frame'))
+ else:
+ return var.get(u'frame')
+ PyJs_anonymous_18_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_18_)
+ var.put(u'_jsTokens', var.get(u'require')(Js(u'js-tokens')))
+ var.put(u'_jsTokens2', var.get(u'_interopRequireDefault')(var.get(u'_jsTokens')))
+ var.put(u'_esutils', var.get(u'require')(Js(u'esutils')))
+ var.put(u'_esutils2', var.get(u'_interopRequireDefault')(var.get(u'_esutils')))
+ var.put(u'_chalk', var.get(u'require')(Js(u'chalk')))
+ var.put(u'_chalk2', var.get(u'_interopRequireDefault')(var.get(u'_chalk')))
+ pass
+ PyJs_Object_23_ = Js({u'keyword':var.get(u'_chalk2').get(u'default').get(u'cyan'),u'capitalized':var.get(u'_chalk2').get(u'default').get(u'yellow'),u'jsx_tag':var.get(u'_chalk2').get(u'default').get(u'yellow'),u'punctuator':var.get(u'_chalk2').get(u'default').get(u'yellow'),u'number':var.get(u'_chalk2').get(u'default').get(u'magenta'),u'string':var.get(u'_chalk2').get(u'default').get(u'green'),u'regex':var.get(u'_chalk2').get(u'default').get(u'magenta'),u'comment':var.get(u'_chalk2').get(u'default').get(u'grey'),u'invalid':var.get(u'_chalk2').get(u'default').get(u'white').get(u'bgRed').get(u'bold'),u'gutter':var.get(u'_chalk2').get(u'default').get(u'grey'),u'marker':var.get(u'_chalk2').get(u'default').get(u'red').get(u'bold')})
+ var.put(u'defs', PyJs_Object_23_)
+ var.put(u'NEWLINE', JsRegExp(u'/\\r\\n|[\\n\\r\\u2028\\u2029]/'))
+ var.put(u'JSX_TAG', JsRegExp(u'/^[a-z][\\w-]*$/i'))
+ var.put(u'BRACKET', JsRegExp(u'/^[()\\[\\]{}]$/'))
+ pass
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_17_._set_name(u'anonymous')
+PyJs_Object_26_ = Js({u'chalk':Js(265.0),u'esutils':Js(276.0),u'js-tokens':Js(282.0)})
+@Js
+def PyJs_anonymous_27_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'./lib/api/node.js')))
+PyJs_anonymous_27_._set_name(u'anonymous')
+PyJs_Object_28_ = Js({u'./lib/api/node.js':Js(6.0)})
+@Js
+def PyJs_anonymous_29_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_isFunction', u'_fs', u'_pipeline2', u'_file', u'_babelTemplate', u'_buildExternalHelpers', u'transformFile', u'_interopRequireDefault', u'_babelTraverse', u'_pipeline', u'transform', u'_fs2', u'_babelMessages', u'exports', u'_babelTraverse2', u'_interopRequireWildcard', u'Plugin', u'_babelTypes', u'analyse', u'pipeline', u'_util', u'util', u'module', u'_optionManager2', u'_isFunction2', u'_config', u'transformFileSync', u'messages', u'_optionManager', u'transformFromAst', u't', u'_package', u'require'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_42_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_42_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_transformFileSync_(filename, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'filename':filename}, var)
+ var.registers([u'opts', u'filename'])
+ PyJs_Object_45_ = Js({})
+ var.put(u'opts', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else PyJs_Object_45_))
+ var.get(u'opts').put(u'filename', var.get(u'filename'))
+ return var.get(u'transform')(var.get(u'_fs2').get(u'default').callprop(u'readFileSync', var.get(u'filename'), Js(u'utf8')), var.get(u'opts'))
+ PyJsHoisted_transformFileSync_.func_name = u'transformFileSync'
+ var.put(u'transformFileSync', PyJsHoisted_transformFileSync_)
+ @Js
+ def PyJsHoisted_transformFile_(filename, opts, callback, this, arguments, var=var):
+ var = Scope({u'this':this, u'callback':callback, u'arguments':arguments, u'opts':opts, u'filename':filename}, var)
+ var.registers([u'callback', u'opts', u'filename'])
+ if PyJsComma(Js(0.0),var.get(u'_isFunction2').get(u'default'))(var.get(u'opts')):
+ var.put(u'callback', var.get(u'opts'))
+ PyJs_Object_43_ = Js({})
+ var.put(u'opts', PyJs_Object_43_)
+ var.get(u'opts').put(u'filename', var.get(u'filename'))
+ @Js
+ def PyJs_anonymous_44_(err, code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments, u'err':err}, var)
+ var.registers([u'code', u'result', u'err'])
+ var.put(u'result', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'err').neg():
+ try:
+ var.put(u'result', var.get(u'transform')(var.get(u'code'), var.get(u'opts')))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_5f657272_67108312 = var.own.get(u'_err')
+ var.force_own_put(u'_err', PyExceptionToJs(PyJsTempException))
+ try:
+ var.put(u'err', var.get(u'_err'))
+ finally:
+ if PyJsHolder_5f657272_67108312 is not None:
+ var.own[u'_err'] = PyJsHolder_5f657272_67108312
+ else:
+ del var.own[u'_err']
+ del PyJsHolder_5f657272_67108312
+ if var.get(u'err'):
+ var.get(u'callback')(var.get(u'err'))
+ else:
+ var.get(u'callback')(var.get(u"null"), var.get(u'result'))
+ PyJs_anonymous_44_._set_name(u'anonymous')
+ var.get(u'_fs2').get(u'default').callprop(u'readFile', var.get(u'filename'), PyJs_anonymous_44_)
+ PyJsHoisted_transformFile_.func_name = u'transformFile'
+ var.put(u'transformFile', PyJsHoisted_transformFile_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_41_ = Js({})
+ var.put(u'newObj', PyJs_Object_41_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_Plugin_(alias, this, arguments, var=var):
+ var = Scope({u'this':this, u'alias':alias, u'arguments':arguments}, var)
+ var.registers([u'alias'])
+ PyJsTempException = JsToPyException(var.get(u'Error').create(((Js(u'The (')+var.get(u'alias'))+Js(u') Babel 5 plugin is being run with Babel 6.'))))
+ raise PyJsTempException
+ PyJsHoisted_Plugin_.func_name = u'Plugin'
+ var.put(u'Plugin', PyJsHoisted_Plugin_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ def PyJs_LONG_30_(var=var):
+ return var.get(u'exports').put(u'OptionManager', var.get(u'exports').put(u'traverse', var.get(u'exports').put(u'types', var.get(u'exports').put(u'messages', var.get(u'exports').put(u'util', var.get(u'exports').put(u'version', var.get(u'exports').put(u'template', var.get(u'exports').put(u'buildExternalHelpers', var.get(u'exports').put(u'options', var.get(u'exports').put(u'File', var.get(u'undefined')))))))))))
+ var.get(u'exports').put(u'transformFromAst', var.get(u'exports').put(u'transform', var.get(u'exports').put(u'analyse', var.get(u'exports').put(u'Pipeline', PyJs_LONG_30_()))))
+ var.put(u'_file', var.get(u'require')(Js(u'../transformation/file')))
+ @Js
+ def PyJs_get_32_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_32_}, var)
+ var.registers([])
+ return var.get(u'_interopRequireDefault')(var.get(u'_file')).get(u'default')
+ PyJs_get_32_._set_name(u'get')
+ PyJs_Object_31_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_32_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'File'), PyJs_Object_31_)
+ var.put(u'_config', var.get(u'require')(Js(u'../transformation/file/options/config')))
+ @Js
+ def PyJs_get_34_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_34_}, var)
+ var.registers([])
+ return var.get(u'_interopRequireDefault')(var.get(u'_config')).get(u'default')
+ PyJs_get_34_._set_name(u'get')
+ PyJs_Object_33_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_34_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'options'), PyJs_Object_33_)
+ var.put(u'_buildExternalHelpers', var.get(u'require')(Js(u'../tools/build-external-helpers')))
+ @Js
+ def PyJs_get_36_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_36_}, var)
+ var.registers([])
+ return var.get(u'_interopRequireDefault')(var.get(u'_buildExternalHelpers')).get(u'default')
+ PyJs_get_36_._set_name(u'get')
+ PyJs_Object_35_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_36_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'buildExternalHelpers'), PyJs_Object_35_)
+ var.put(u'_babelTemplate', var.get(u'require')(Js(u'babel-template')))
+ @Js
+ def PyJs_get_38_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_38_}, var)
+ var.registers([])
+ return var.get(u'_interopRequireDefault')(var.get(u'_babelTemplate')).get(u'default')
+ PyJs_get_38_._set_name(u'get')
+ PyJs_Object_37_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_38_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'template'), PyJs_Object_37_)
+ var.put(u'_package', var.get(u'require')(Js(u'../../package')))
+ @Js
+ def PyJs_get_40_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_40_}, var)
+ var.registers([])
+ return var.get(u'_package').get(u'version')
+ PyJs_get_40_._set_name(u'get')
+ PyJs_Object_39_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_40_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'version'), PyJs_Object_39_)
+ var.get(u'exports').put(u'Plugin', var.get(u'Plugin'))
+ var.get(u'exports').put(u'transformFile', var.get(u'transformFile'))
+ var.get(u'exports').put(u'transformFileSync', var.get(u'transformFileSync'))
+ var.put(u'_isFunction', var.get(u'require')(Js(u'lodash/isFunction')))
+ var.put(u'_isFunction2', var.get(u'_interopRequireDefault')(var.get(u'_isFunction')))
+ var.put(u'_fs', var.get(u'require')(Js(u'fs')))
+ var.put(u'_fs2', var.get(u'_interopRequireDefault')(var.get(u'_fs')))
+ var.put(u'_util', var.get(u'require')(Js(u'../util')))
+ var.put(u'util', var.get(u'_interopRequireWildcard')(var.get(u'_util')))
+ var.put(u'_babelMessages', var.get(u'require')(Js(u'babel-messages')))
+ var.put(u'messages', var.get(u'_interopRequireWildcard')(var.get(u'_babelMessages')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ var.put(u'_babelTraverse', var.get(u'require')(Js(u'babel-traverse')))
+ var.put(u'_babelTraverse2', var.get(u'_interopRequireDefault')(var.get(u'_babelTraverse')))
+ var.put(u'_optionManager', var.get(u'require')(Js(u'../transformation/file/options/option-manager')))
+ var.put(u'_optionManager2', var.get(u'_interopRequireDefault')(var.get(u'_optionManager')))
+ var.put(u'_pipeline', var.get(u'require')(Js(u'../transformation/pipeline')))
+ var.put(u'_pipeline2', var.get(u'_interopRequireDefault')(var.get(u'_pipeline')))
+ pass
+ pass
+ var.get(u'exports').put(u'util', var.get(u'util'))
+ var.get(u'exports').put(u'messages', var.get(u'messages'))
+ var.get(u'exports').put(u'types', var.get(u't'))
+ var.get(u'exports').put(u'traverse', var.get(u'_babelTraverse2').get(u'default'))
+ var.get(u'exports').put(u'OptionManager', var.get(u'_optionManager2').get(u'default'))
+ pass
+ var.get(u'exports').put(u'Pipeline', var.get(u'_pipeline2').get(u'default'))
+ var.put(u'pipeline', var.get(u'_pipeline2').get(u'default').create())
+ var.put(u'analyse', var.get(u'exports').put(u'analyse', var.get(u'pipeline').get(u'analyse').callprop(u'bind', var.get(u'pipeline'))))
+ var.put(u'transform', var.get(u'exports').put(u'transform', var.get(u'pipeline').get(u'transform').callprop(u'bind', var.get(u'pipeline'))))
+ var.put(u'transformFromAst', var.get(u'exports').put(u'transformFromAst', var.get(u'pipeline').get(u'transformFromAst').callprop(u'bind', var.get(u'pipeline'))))
+ pass
+ pass
+PyJs_anonymous_29_._set_name(u'anonymous')
+PyJs_Object_46_ = Js({u'../../package':Js(28.0),u'../tools/build-external-helpers':Js(11.0),u'../transformation/file':Js(12.0),u'../transformation/file/options/config':Js(16.0),u'../transformation/file/options/option-manager':Js(18.0),u'../transformation/pipeline':Js(23.0),u'../util':Js(26.0),u'babel-messages':Js(57.0),u'babel-template':Js(221.0),u'babel-traverse':Js(225.0),u'babel-types':Js(258.0),u'fs':Js(523.0),u'lodash/isFunction':Js(463.0)})
+@Js
+def PyJs_anonymous_47_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_mergeWith', u'require', u'module', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'_mergeWith2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_50_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_50_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ @Js
+ def PyJs_anonymous_48_(dest, src, this, arguments, var=var):
+ var = Scope({u'dest':dest, u'src':src, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'dest', u'src'])
+ if (var.get(u'dest').neg() or var.get(u'src').neg()):
+ return var.get('undefined')
+ @Js
+ def PyJs_anonymous_49_(a, b, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'b':b, u'arguments':arguments}, var)
+ var.registers([u'a', u'_isArray', u'b', u'_iterator', u'item', u'newArray', u'_i', u'_ref'])
+ if (var.get(u'b') and var.get(u'Array').callprop(u'isArray', var.get(u'a'))):
+ var.put(u'newArray', var.get(u'b').callprop(u'slice', Js(0.0)))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'a'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'item', var.get(u'_ref'))
+ if (var.get(u'newArray').callprop(u'indexOf', var.get(u'item'))Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else var.get(u'process').callprop(u'cwd')))
+ if PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'_module2').get(u'default').typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'_module2').get(u'default'))),Js(u'object')):
+ return var.get(u"null")
+ var.put(u'relativeMod', var.get(u'relativeModules').get(var.get(u'relative')))
+ if var.get(u'relativeMod').neg():
+ var.put(u'relativeMod', var.get(u'_module2').get(u'default').create())
+ var.put(u'filename', var.get(u'_path2').get(u'default').callprop(u'join', var.get(u'relative'), Js(u'.babelrc')))
+ var.get(u'relativeMod').put(u'id', var.get(u'filename'))
+ var.get(u'relativeMod').put(u'filename', var.get(u'filename'))
+ var.get(u'relativeMod').put(u'paths', var.get(u'_module2').get(u'default').callprop(u'_nodeModulePaths', var.get(u'relative')))
+ var.get(u'relativeModules').put(var.get(u'relative'), var.get(u'relativeMod'))
+ try:
+ return var.get(u'_module2').get(u'default').callprop(u'_resolveFilename', var.get(u'loc'), var.get(u'relativeMod'))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_657272_57087007 = var.own.get(u'err')
+ var.force_own_put(u'err', PyExceptionToJs(PyJsTempException))
+ try:
+ return var.get(u"null")
+ finally:
+ if PyJsHolder_657272_57087007 is not None:
+ var.own[u'err'] = PyJsHolder_657272_57087007
+ else:
+ del var.own[u'err']
+ del PyJsHolder_657272_57087007
+ PyJs_anonymous_58_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_58_)
+ var.put(u'_module', var.get(u'require')(Js(u'module')))
+ var.put(u'_module2', var.get(u'_interopRequireDefault')(var.get(u'_module')))
+ var.put(u'_path', var.get(u'require')(Js(u'path')))
+ var.put(u'_path2', var.get(u'_interopRequireDefault')(var.get(u'_path')))
+ pass
+ PyJs_Object_60_ = Js({})
+ var.put(u'relativeModules', PyJs_Object_60_)
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+ PyJs_anonymous_57_._set_name(u'anonymous')
+ PyJs_anonymous_57_.callprop(u'call', var.get(u"this"), var.get(u'require')(Js(u'_process')))
+PyJs_anonymous_56_._set_name(u'anonymous')
+PyJs_Object_61_ = Js({u'_process':Js(531.0),u'babel-runtime/helpers/typeof':Js(114.0),u'module':Js(523.0),u'path':Js(530.0)})
+@Js
+def PyJs_anonymous_62_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_map', u'_inherits3', u'_inherits2', u'require', u'_possibleConstructorReturn3', u'_possibleConstructorReturn2', u'module', u'Store', u'_interopRequireDefault', u'_classCallCheck3', u'_classCallCheck2', u'_map2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_63_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_63_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_map', var.get(u'require')(Js(u'babel-runtime/core-js/map')))
+ var.put(u'_map2', var.get(u'_interopRequireDefault')(var.get(u'_map')))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_possibleConstructorReturn2', var.get(u'require')(Js(u'babel-runtime/helpers/possibleConstructorReturn')))
+ var.put(u'_possibleConstructorReturn3', var.get(u'_interopRequireDefault')(var.get(u'_possibleConstructorReturn2')))
+ var.put(u'_inherits2', var.get(u'require')(Js(u'babel-runtime/helpers/inherits')))
+ var.put(u'_inherits3', var.get(u'_interopRequireDefault')(var.get(u'_inherits2')))
+ pass
+ @Js
+ def PyJs_anonymous_64_(_Map, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'_Map':_Map}, var)
+ var.registers([u'Store', u'_Map'])
+ @Js
+ def PyJsHoisted_Store_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'_this'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'Store'))
+ var.put(u'_this', PyJsComma(Js(0.0),var.get(u'_possibleConstructorReturn3').get(u'default'))(var.get(u"this"), var.get(u'_Map').callprop(u'call', var.get(u"this"))))
+ PyJs_Object_65_ = Js({})
+ var.get(u'_this').put(u'dynamicData', PyJs_Object_65_)
+ return var.get(u'_this')
+ PyJsHoisted_Store_.func_name = u'Store'
+ var.put(u'Store', PyJsHoisted_Store_)
+ PyJsComma(Js(0.0),var.get(u'_inherits3').get(u'default'))(var.get(u'Store'), var.get(u'_Map'))
+ pass
+ @Js
+ def PyJs_setDynamic_66_(key, fn, this, arguments, var=var):
+ var = Scope({u'this':this, u'setDynamic':PyJs_setDynamic_66_, u'fn':fn, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'fn', u'key'])
+ var.get(u"this").get(u'dynamicData').put(var.get(u'key'), var.get(u'fn'))
+ PyJs_setDynamic_66_._set_name(u'setDynamic')
+ var.get(u'Store').get(u'prototype').put(u'setDynamic', PyJs_setDynamic_66_)
+ @Js
+ def PyJs_get_67_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key, u'get':PyJs_get_67_}, var)
+ var.registers([u'key', u'val'])
+ if var.get(u"this").callprop(u'has', var.get(u'key')):
+ return var.get(u'_Map').get(u'prototype').get(u'get').callprop(u'call', var.get(u"this"), var.get(u'key'))
+ else:
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u"this").get(u'dynamicData'), var.get(u'key')):
+ var.put(u'val', var.get(u"this").get(u'dynamicData').callprop(var.get(u'key')))
+ var.get(u"this").callprop(u'set', var.get(u'key'), var.get(u'val'))
+ return var.get(u'val')
+ PyJs_get_67_._set_name(u'get')
+ var.get(u'Store').get(u'prototype').put(u'get', PyJs_get_67_)
+ return var.get(u'Store')
+ PyJs_anonymous_64_._set_name(u'anonymous')
+ var.put(u'Store', PyJs_anonymous_64_(var.get(u'_map2').get(u'default')))
+ var.get(u'exports').put(u'default', var.get(u'Store'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_62_._set_name(u'anonymous')
+PyJs_Object_68_ = Js({u'babel-runtime/core-js/map':Js(98.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-runtime/helpers/inherits':Js(111.0),u'babel-runtime/helpers/possibleConstructorReturn':Js(113.0)})
+@Js
+def PyJs_anonymous_69_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_each', u'_babelTemplate', u'module', u'_babelHelpers', u'buildGlobal', u'_interopRequireDefault', u'buildVar', u'_each2', u'_babelTemplate2', u'_babelMessages', u'exports', u'_interopRequireWildcard', u'buildUmd', u'_babelTypes', u'_babelGenerator', u'buildHelpers', u'_babelGenerator2', u'buildUmdWrapper', u'require', u'messages', u'helpers', u't'])
+ @Js
+ def PyJsHoisted_buildVar_(namespace, builder, this, arguments, var=var):
+ var = Scope({u'this':this, u'builder':builder, u'namespace':namespace, u'arguments':arguments}, var)
+ var.registers([u'body', u'builder', u'namespace'])
+ var.put(u'body', Js([]))
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'namespace'), var.get(u't').callprop(u'objectExpression', Js([])))])))
+ var.get(u'builder')(var.get(u'body'))
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u'namespace')))
+ return var.get(u't').callprop(u'program', var.get(u'body'))
+ PyJsHoisted_buildVar_.func_name = u'buildVar'
+ var.put(u'buildVar', PyJsHoisted_buildVar_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_74_ = Js({})
+ var.put(u'newObj', PyJs_Object_74_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_buildUmd_(namespace, builder, this, arguments, var=var):
+ var = Scope({u'this':this, u'builder':builder, u'namespace':namespace, u'arguments':arguments}, var)
+ var.registers([u'body', u'builder', u'namespace'])
+ var.put(u'body', Js([]))
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'namespace'), var.get(u't').callprop(u'identifier', Js(u'global')))])))
+ var.get(u'builder')(var.get(u'body'))
+ PyJs_Object_77_ = Js({u'FACTORY_PARAMETERS':var.get(u't').callprop(u'identifier', Js(u'global')),u'BROWSER_ARGUMENTS':var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'identifier', Js(u'root')), var.get(u'namespace')), var.get(u't').callprop(u'objectExpression', Js([]))),u'COMMON_ARGUMENTS':var.get(u't').callprop(u'identifier', Js(u'exports')),u'AMD_ARGUMENTS':var.get(u't').callprop(u'arrayExpression', Js([var.get(u't').callprop(u'stringLiteral', Js(u'exports'))])),u'FACTORY_BODY':var.get(u'body'),u'UMD_ROOT':var.get(u't').callprop(u'identifier', Js(u'this'))})
+ return var.get(u't').callprop(u'program', Js([var.get(u'buildUmdWrapper')(PyJs_Object_77_)]))
+ PyJsHoisted_buildUmd_.func_name = u'buildUmd'
+ var.put(u'buildUmd', PyJsHoisted_buildUmd_)
+ @Js
+ def PyJsHoisted_buildHelpers_(body, namespace, whitelist, this, arguments, var=var):
+ var = Scope({u'body':body, u'this':this, u'whitelist':whitelist, u'namespace':namespace, u'arguments':arguments}, var)
+ var.registers([u'body', u'whitelist', u'namespace'])
+ @Js
+ def PyJs_anonymous_78_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name', u'key'])
+ if (var.get(u'whitelist') and (var.get(u'whitelist').callprop(u'indexOf', var.get(u'name'))Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else Js(u'global')))
+ var.put(u'namespace', var.get(u't').callprop(u'identifier', Js(u'babelHelpers')))
+ @Js
+ def PyJs_builder_71_(body, this, arguments, var=var):
+ var = Scope({u'body':body, u'this':this, u'builder':PyJs_builder_71_, u'arguments':arguments}, var)
+ var.registers([u'body'])
+ return var.get(u'buildHelpers')(var.get(u'body'), var.get(u'namespace'), var.get(u'whitelist'))
+ PyJs_builder_71_._set_name(u'builder')
+ var.put(u'builder', PyJs_builder_71_)
+ var.put(u'tree', PyJsComma(Js(0.0), Js(None)))
+ PyJs_Object_72_ = Js({u'global':var.get(u'buildGlobal'),u'umd':var.get(u'buildUmd'),u'var':var.get(u'buildVar')})
+ var.put(u'build', PyJs_Object_72_.get(var.get(u'outputType')))
+ if var.get(u'build'):
+ var.put(u'tree', var.get(u'build')(var.get(u'namespace'), var.get(u'builder')))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create(var.get(u'messages').callprop(u'get', Js(u'unsupportedOutputType'), var.get(u'outputType'))))
+ raise PyJsTempException
+ return PyJsComma(Js(0.0),var.get(u'_babelGenerator2').get(u'default'))(var.get(u'tree')).get(u'code')
+ PyJs_anonymous_70_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_70_)
+ var.put(u'_babelHelpers', var.get(u'require')(Js(u'babel-helpers')))
+ var.put(u'helpers', var.get(u'_interopRequireWildcard')(var.get(u'_babelHelpers')))
+ var.put(u'_babelGenerator', var.get(u'require')(Js(u'babel-generator')))
+ var.put(u'_babelGenerator2', var.get(u'_interopRequireDefault')(var.get(u'_babelGenerator')))
+ var.put(u'_babelMessages', var.get(u'require')(Js(u'babel-messages')))
+ var.put(u'messages', var.get(u'_interopRequireWildcard')(var.get(u'_babelMessages')))
+ var.put(u'_babelTemplate', var.get(u'require')(Js(u'babel-template')))
+ var.put(u'_babelTemplate2', var.get(u'_interopRequireDefault')(var.get(u'_babelTemplate')))
+ var.put(u'_each', var.get(u'require')(Js(u'lodash/each')))
+ var.put(u'_each2', var.get(u'_interopRequireDefault')(var.get(u'_each')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ def PyJs_LONG_75_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (root, factory) {\n if (typeof define === "function" && define.amd) {\n define(AMD_ARGUMENTS, factory);\n } else if (typeof exports === "object") {\n factory(COMMON_ARGUMENTS);\n } else {\n factory(BROWSER_ARGUMENTS);\n }\n })(UMD_ROOT, function (FACTORY_PARAMETERS) {\n FACTORY_BODY\n });\n'))
+ var.put(u'buildUmdWrapper', PyJs_LONG_75_())
+ pass
+ pass
+ pass
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_69_._set_name(u'anonymous')
+PyJs_Object_79_ = Js({u'babel-generator':Js(40.0),u'babel-helpers':Js(56.0),u'babel-messages':Js(57.0),u'babel-template':Js(221.0),u'babel-types':Js(258.0),u'lodash/each':Js(443.0)})
+@Js
+def PyJs_anonymous_80_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_81_(process, this, arguments, var=var):
+ var = Scope({u'process':process, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'_resolve', u'_store', u'_sourceMap', u'_shadowFunctions2', u'_babelHelpers', u'_logger2', u'_interopRequireDefault', u'_convertSourceMap', u'_getIterator3', u'_getIterator2', u'_shadowFunctions', u'_babelCodeFrame2', u'_typeof2', u'_typeof3', u'metadataVisitor', u'INTERNAL_PLUGINS', u'_possibleConstructorReturn3', u'_possibleConstructorReturn2', u'_babylon', u'_create2', u'errorVisitor', u'_metadata', u'_store2', u'_assign2', u'shebangRegex', u'_blockHoist', u'_classCallCheck3', u'_classCallCheck2', u'_pluginPass2', u'_sourceMap2', u'_create', u'_convertSourceMap2', u'process', u'_babelTypes', u'_babelTraverse2', u'_interopRequireWildcard', u'_inherits3', u'_inherits2', u'_pluginPass', u'_assign', u'_babelCodeFrame', u'_babelGenerator', u'_logger', u'_util', u'_defaults2', u'_path2', u'_optionManager2', u'_babelTraverse', u'util', u'_babelGenerator2', u'_blockHoist2', u'_babelHelpers2', u'_defaults', u'_optionManager', u't', u'File', u'_resolve2', u'_path'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_83_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_83_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_82_ = Js({})
+ var.put(u'newObj', PyJs_Object_82_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'File', var.get(u'undefined'))
+ var.put(u'_typeof2', var.get(u'require')(Js(u'babel-runtime/helpers/typeof')))
+ var.put(u'_typeof3', var.get(u'_interopRequireDefault')(var.get(u'_typeof2')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_create', var.get(u'require')(Js(u'babel-runtime/core-js/object/create')))
+ var.put(u'_create2', var.get(u'_interopRequireDefault')(var.get(u'_create')))
+ var.put(u'_assign', var.get(u'require')(Js(u'babel-runtime/core-js/object/assign')))
+ var.put(u'_assign2', var.get(u'_interopRequireDefault')(var.get(u'_assign')))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_possibleConstructorReturn2', var.get(u'require')(Js(u'babel-runtime/helpers/possibleConstructorReturn')))
+ var.put(u'_possibleConstructorReturn3', var.get(u'_interopRequireDefault')(var.get(u'_possibleConstructorReturn2')))
+ var.put(u'_inherits2', var.get(u'require')(Js(u'babel-runtime/helpers/inherits')))
+ var.put(u'_inherits3', var.get(u'_interopRequireDefault')(var.get(u'_inherits2')))
+ var.put(u'_babelHelpers', var.get(u'require')(Js(u'babel-helpers')))
+ var.put(u'_babelHelpers2', var.get(u'_interopRequireDefault')(var.get(u'_babelHelpers')))
+ var.put(u'_metadata', var.get(u'require')(Js(u'./metadata')))
+ var.put(u'metadataVisitor', var.get(u'_interopRequireWildcard')(var.get(u'_metadata')))
+ var.put(u'_convertSourceMap', var.get(u'require')(Js(u'convert-source-map')))
+ var.put(u'_convertSourceMap2', var.get(u'_interopRequireDefault')(var.get(u'_convertSourceMap')))
+ var.put(u'_optionManager', var.get(u'require')(Js(u'./options/option-manager')))
+ var.put(u'_optionManager2', var.get(u'_interopRequireDefault')(var.get(u'_optionManager')))
+ var.put(u'_pluginPass', var.get(u'require')(Js(u'../plugin-pass')))
+ var.put(u'_pluginPass2', var.get(u'_interopRequireDefault')(var.get(u'_pluginPass')))
+ var.put(u'_babelTraverse', var.get(u'require')(Js(u'babel-traverse')))
+ var.put(u'_babelTraverse2', var.get(u'_interopRequireDefault')(var.get(u'_babelTraverse')))
+ var.put(u'_sourceMap', var.get(u'require')(Js(u'source-map')))
+ var.put(u'_sourceMap2', var.get(u'_interopRequireDefault')(var.get(u'_sourceMap')))
+ var.put(u'_babelGenerator', var.get(u'require')(Js(u'babel-generator')))
+ var.put(u'_babelGenerator2', var.get(u'_interopRequireDefault')(var.get(u'_babelGenerator')))
+ var.put(u'_babelCodeFrame', var.get(u'require')(Js(u'babel-code-frame')))
+ var.put(u'_babelCodeFrame2', var.get(u'_interopRequireDefault')(var.get(u'_babelCodeFrame')))
+ var.put(u'_defaults', var.get(u'require')(Js(u'lodash/defaults')))
+ var.put(u'_defaults2', var.get(u'_interopRequireDefault')(var.get(u'_defaults')))
+ var.put(u'_logger', var.get(u'require')(Js(u'./logger')))
+ var.put(u'_logger2', var.get(u'_interopRequireDefault')(var.get(u'_logger')))
+ var.put(u'_store', var.get(u'require')(Js(u'../../store')))
+ var.put(u'_store2', var.get(u'_interopRequireDefault')(var.get(u'_store')))
+ var.put(u'_babylon', var.get(u'require')(Js(u'babylon')))
+ var.put(u'_util', var.get(u'require')(Js(u'../../util')))
+ var.put(u'util', var.get(u'_interopRequireWildcard')(var.get(u'_util')))
+ var.put(u'_path', var.get(u'require')(Js(u'path')))
+ var.put(u'_path2', var.get(u'_interopRequireDefault')(var.get(u'_path')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ var.put(u'_resolve', var.get(u'require')(Js(u'../../helpers/resolve')))
+ var.put(u'_resolve2', var.get(u'_interopRequireDefault')(var.get(u'_resolve')))
+ var.put(u'_blockHoist', var.get(u'require')(Js(u'../internal-plugins/block-hoist')))
+ var.put(u'_blockHoist2', var.get(u'_interopRequireDefault')(var.get(u'_blockHoist')))
+ var.put(u'_shadowFunctions', var.get(u'require')(Js(u'../internal-plugins/shadow-functions')))
+ var.put(u'_shadowFunctions2', var.get(u'_interopRequireDefault')(var.get(u'_shadowFunctions')))
+ pass
+ pass
+ var.put(u'shebangRegex', JsRegExp(u'/^#!.*/'))
+ var.put(u'INTERNAL_PLUGINS', Js([Js([var.get(u'_blockHoist2').get(u'default')]), Js([var.get(u'_shadowFunctions2').get(u'default')])]))
+ @Js
+ def PyJs_enter_85_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'enter':PyJs_enter_85_}, var)
+ var.registers([u'loc', u'state', u'path'])
+ var.put(u'loc', var.get(u'path').get(u'node').get(u'loc'))
+ if var.get(u'loc'):
+ var.get(u'state').put(u'loc', var.get(u'loc'))
+ var.get(u'path').callprop(u'stop')
+ PyJs_enter_85_._set_name(u'enter')
+ PyJs_Object_84_ = Js({u'enter':PyJs_enter_85_})
+ var.put(u'errorVisitor', PyJs_Object_84_)
+ @Js
+ def PyJs_anonymous_86_(_Store, this, arguments, var=var):
+ var = Scope({u'this':this, u'_Store':_Store, u'arguments':arguments}, var)
+ var.registers([u'_Store', u'File'])
+ @Js
+ def PyJsHoisted_File_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'pipeline', u'_this', u'opts'])
+ PyJs_Object_87_ = Js({})
+ var.put(u'opts', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else PyJs_Object_87_))
+ var.put(u'pipeline', var.get(u'arguments').get(u'1'))
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'File'))
+ var.put(u'_this', PyJsComma(Js(0.0),var.get(u'_possibleConstructorReturn3').get(u'default'))(var.get(u"this"), var.get(u'_Store').callprop(u'call', var.get(u"this"))))
+ var.get(u'_this').put(u'pipeline', var.get(u'pipeline'))
+ var.get(u'_this').put(u'log', var.get(u'_logger2').get(u'default').create(var.get(u'_this'), (var.get(u'opts').get(u'filename') or Js(u'unknown'))))
+ var.get(u'_this').put(u'opts', var.get(u'_this').callprop(u'initOptions', var.get(u'opts')))
+ PyJs_Object_88_ = Js({u'sourceType':var.get(u'_this').get(u'opts').get(u'sourceType'),u'sourceFileName':var.get(u'_this').get(u'opts').get(u'filename'),u'plugins':Js([])})
+ var.get(u'_this').put(u'parserOpts', PyJs_Object_88_)
+ var.get(u'_this').put(u'pluginVisitors', Js([]))
+ var.get(u'_this').put(u'pluginPasses', Js([]))
+ var.get(u'_this').callprop(u'buildPluginsForOptions', var.get(u'_this').get(u'opts'))
+ if var.get(u'_this').get(u'opts').get(u'passPerPreset'):
+ var.get(u'_this').put(u'perPresetOpts', Js([]))
+ @Js
+ def PyJs_anonymous_89_(presetOpts, this, arguments, var=var):
+ var = Scope({u'this':this, u'presetOpts':presetOpts, u'arguments':arguments}, var)
+ var.registers([u'presetOpts', u'perPresetOpts'])
+ var.put(u'perPresetOpts', PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u'_this').get(u'opts')), var.get(u'presetOpts')))
+ var.get(u'_this').get(u'perPresetOpts').callprop(u'push', var.get(u'perPresetOpts'))
+ var.get(u'_this').callprop(u'buildPluginsForOptions', var.get(u'perPresetOpts'))
+ PyJs_anonymous_89_._set_name(u'anonymous')
+ var.get(u'_this').get(u'opts').get(u'presets').callprop(u'forEach', PyJs_anonymous_89_)
+ PyJs_Object_92_ = Js({u'exported':Js([]),u'specifiers':Js([])})
+ PyJs_Object_91_ = Js({u'imports':Js([]),u'exports':PyJs_Object_92_})
+ PyJs_Object_90_ = Js({u'usedHelpers':Js([]),u'marked':Js([]),u'modules':PyJs_Object_91_})
+ var.get(u'_this').put(u'metadata', PyJs_Object_90_)
+ PyJs_Object_93_ = Js({})
+ var.get(u'_this').put(u'dynamicImportTypes', PyJs_Object_93_)
+ PyJs_Object_94_ = Js({})
+ var.get(u'_this').put(u'dynamicImportIds', PyJs_Object_94_)
+ var.get(u'_this').put(u'dynamicImports', Js([]))
+ PyJs_Object_95_ = Js({})
+ var.get(u'_this').put(u'declarations', PyJs_Object_95_)
+ PyJs_Object_96_ = Js({})
+ var.get(u'_this').put(u'usedHelpers', PyJs_Object_96_)
+ var.get(u'_this').put(u'path', var.get(u"null"))
+ PyJs_Object_97_ = Js({})
+ var.get(u'_this').put(u'ast', PyJs_Object_97_)
+ var.get(u'_this').put(u'code', Js(u''))
+ var.get(u'_this').put(u'shebang', Js(u''))
+ var.get(u'_this').put(u'hub', var.get(u'_babelTraverse').get(u'Hub').create(var.get(u'_this')))
+ return var.get(u'_this')
+ PyJsHoisted_File_.func_name = u'File'
+ var.put(u'File', PyJsHoisted_File_)
+ PyJsComma(Js(0.0),var.get(u'_inherits3').get(u'default'))(var.get(u'File'), var.get(u'_Store'))
+ pass
+ @Js
+ def PyJs_getMetadata_98_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getMetadata':PyJs_getMetadata_98_, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'_i', u'_ref', u'has'])
+ var.put(u'has', Js(False))
+ #for JS loop
+ var.put(u'_iterator', var.get(u"this").get(u'ast').get(u'program').get(u'body'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'node', var.get(u'_ref'))
+ if var.get(u't').callprop(u'isModuleDeclaration', var.get(u'node')):
+ var.put(u'has', var.get(u'true'))
+ break
+
+ if var.get(u'has'):
+ var.get(u"this").get(u'path').callprop(u'traverse', var.get(u'metadataVisitor'), var.get(u"this"))
+ PyJs_getMetadata_98_._set_name(u'getMetadata')
+ var.get(u'File').get(u'prototype').put(u'getMetadata', PyJs_getMetadata_98_)
+ @Js
+ def PyJs_initOptions_99_(opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'opts':opts, u'initOptions':PyJs_initOptions_99_}, var)
+ var.registers([u'basenameRelative', u'opts'])
+ var.put(u'opts', var.get(u'_optionManager2').get(u'default').create(var.get(u"this").get(u'log'), var.get(u"this").get(u'pipeline')).callprop(u'init', var.get(u'opts')))
+ if var.get(u'opts').get(u'inputSourceMap'):
+ var.get(u'opts').put(u'sourceMaps', var.get(u'true'))
+ if var.get(u'opts').get(u'moduleId'):
+ var.get(u'opts').put(u'moduleIds', var.get(u'true'))
+ var.get(u'opts').put(u'basename', var.get(u'_path2').get(u'default').callprop(u'basename', var.get(u'opts').get(u'filename'), var.get(u'_path2').get(u'default').callprop(u'extname', var.get(u'opts').get(u'filename'))))
+ var.get(u'opts').put(u'ignore', var.get(u'util').callprop(u'arrayify', var.get(u'opts').get(u'ignore'), var.get(u'util').get(u'regexify')))
+ if var.get(u'opts').get(u'only'):
+ var.get(u'opts').put(u'only', var.get(u'util').callprop(u'arrayify', var.get(u'opts').get(u'only'), var.get(u'util').get(u'regexify')))
+ PyJs_Object_100_ = Js({u'moduleRoot':var.get(u'opts').get(u'sourceRoot')})
+ PyJsComma(Js(0.0),var.get(u'_defaults2').get(u'default'))(var.get(u'opts'), PyJs_Object_100_)
+ PyJs_Object_101_ = Js({u'sourceRoot':var.get(u'opts').get(u'moduleRoot')})
+ PyJsComma(Js(0.0),var.get(u'_defaults2').get(u'default'))(var.get(u'opts'), PyJs_Object_101_)
+ PyJs_Object_102_ = Js({u'filenameRelative':var.get(u'opts').get(u'filename')})
+ PyJsComma(Js(0.0),var.get(u'_defaults2').get(u'default'))(var.get(u'opts'), PyJs_Object_102_)
+ var.put(u'basenameRelative', var.get(u'_path2').get(u'default').callprop(u'basename', var.get(u'opts').get(u'filenameRelative')))
+ PyJs_Object_103_ = Js({u'sourceFileName':var.get(u'basenameRelative'),u'sourceMapTarget':var.get(u'basenameRelative')})
+ PyJsComma(Js(0.0),var.get(u'_defaults2').get(u'default'))(var.get(u'opts'), PyJs_Object_103_)
+ return var.get(u'opts')
+ PyJs_initOptions_99_._set_name(u'initOptions')
+ var.get(u'File').get(u'prototype').put(u'initOptions', PyJs_initOptions_99_)
+ @Js
+ def PyJs_buildPluginsForOptions_104_(opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'opts':opts, u'buildPluginsForOptions':PyJs_buildPluginsForOptions_104_}, var)
+ var.registers([u'pluginOpts', u'_isArray2', u'plugin', u'_i2', u'_ref2', u'opts', u'plugins', u'currentPluginPasses', u'ref', u'currentPluginVisitors', u'_iterator2'])
+ if var.get(u'Array').callprop(u'isArray', var.get(u'opts').get(u'plugins')).neg():
+ return var.get('undefined')
+ var.put(u'plugins', var.get(u'opts').get(u'plugins').callprop(u'concat', var.get(u'INTERNAL_PLUGINS')))
+ var.put(u'currentPluginVisitors', Js([]))
+ var.put(u'currentPluginPasses', Js([]))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'plugins'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'ref', var.get(u'_ref2'))
+ var.put(u'plugin', var.get(u'ref').get(u'0'))
+ var.put(u'pluginOpts', var.get(u'ref').get(u'1'))
+ var.get(u'currentPluginVisitors').callprop(u'push', var.get(u'plugin').get(u'visitor'))
+ var.get(u'currentPluginPasses').callprop(u'push', var.get(u'_pluginPass2').get(u'default').create(var.get(u"this"), var.get(u'plugin'), var.get(u'pluginOpts')))
+ if var.get(u'plugin').get(u'manipulateOptions'):
+ var.get(u'plugin').callprop(u'manipulateOptions', var.get(u'opts'), var.get(u"this").get(u'parserOpts'), var.get(u"this"))
+
+ var.get(u"this").get(u'pluginVisitors').callprop(u'push', var.get(u'currentPluginVisitors'))
+ var.get(u"this").get(u'pluginPasses').callprop(u'push', var.get(u'currentPluginPasses'))
+ PyJs_buildPluginsForOptions_104_._set_name(u'buildPluginsForOptions')
+ var.get(u'File').get(u'prototype').put(u'buildPluginsForOptions', PyJs_buildPluginsForOptions_104_)
+ @Js
+ def PyJs_getModuleName_105_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getModuleName':PyJs_getModuleName_105_, u'arguments':arguments}, var)
+ var.registers([u'moduleName', u'sourceRootRegEx', u'opts', u'filenameRelative'])
+ var.put(u'opts', var.get(u"this").get(u'opts'))
+ if var.get(u'opts').get(u'moduleIds').neg():
+ return var.get(u"null")
+ if ((var.get(u'opts').get(u'moduleId')!=var.get(u"null")) and var.get(u'opts').get(u'getModuleId').neg()):
+ return var.get(u'opts').get(u'moduleId')
+ var.put(u'filenameRelative', var.get(u'opts').get(u'filenameRelative'))
+ var.put(u'moduleName', Js(u''))
+ if (var.get(u'opts').get(u'moduleRoot')!=var.get(u"null")):
+ var.put(u'moduleName', (var.get(u'opts').get(u'moduleRoot')+Js(u'/')))
+ if var.get(u'opts').get(u'filenameRelative').neg():
+ return (var.get(u'moduleName')+var.get(u'opts').get(u'filename').callprop(u'replace', JsRegExp(u'/^\\//'), Js(u'')))
+ if (var.get(u'opts').get(u'sourceRoot')!=var.get(u"null")):
+ var.put(u'sourceRootRegEx', var.get(u'RegExp').create(((Js(u'^')+var.get(u'opts').get(u'sourceRoot'))+Js(u'/?'))))
+ var.put(u'filenameRelative', var.get(u'filenameRelative').callprop(u'replace', var.get(u'sourceRootRegEx'), Js(u'')))
+ var.put(u'filenameRelative', var.get(u'filenameRelative').callprop(u'replace', JsRegExp(u'/\\.(\\w*?)$/'), Js(u'')))
+ var.put(u'moduleName', var.get(u'filenameRelative'), u'+')
+ var.put(u'moduleName', var.get(u'moduleName').callprop(u'replace', JsRegExp(u'/\\\\/g'), Js(u'/')))
+ if var.get(u'opts').get(u'getModuleId'):
+ return (var.get(u'opts').callprop(u'getModuleId', var.get(u'moduleName')) or var.get(u'moduleName'))
+ else:
+ return var.get(u'moduleName')
+ PyJs_getModuleName_105_._set_name(u'getModuleName')
+ var.get(u'File').get(u'prototype').put(u'getModuleName', PyJs_getModuleName_105_)
+ @Js
+ def PyJs_resolveModuleSource_106_(source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'resolveModuleSource':PyJs_resolveModuleSource_106_, u'arguments':arguments}, var)
+ var.registers([u'resolveModuleSource', u'source'])
+ var.put(u'resolveModuleSource', var.get(u"this").get(u'opts').get(u'resolveModuleSource'))
+ if var.get(u'resolveModuleSource'):
+ var.put(u'source', var.get(u'resolveModuleSource')(var.get(u'source'), var.get(u"this").get(u'opts').get(u'filename')))
+ return var.get(u'source')
+ PyJs_resolveModuleSource_106_._set_name(u'resolveModuleSource')
+ var.get(u'File').get(u'prototype').put(u'resolveModuleSource', PyJs_resolveModuleSource_106_)
+ @Js
+ def PyJs_addImport_107_(source, imported, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'imported':imported, u'arguments':arguments, u'addImport':PyJs_addImport_107_}, var)
+ var.registers([u'specifiers', u'imported', u'name', u'alias', u'source', u'declar', u'id'])
+ var.put(u'name', (var.get(u'arguments').get(u'2') if ((var.get(u'arguments').get(u'length')>Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else var.get(u'imported')))
+ var.put(u'alias', ((var.get(u'source')+Js(u':'))+var.get(u'imported')))
+ var.put(u'id', var.get(u"this").get(u'dynamicImportIds').get(var.get(u'alias')))
+ if var.get(u'id').neg():
+ var.put(u'source', var.get(u"this").callprop(u'resolveModuleSource', var.get(u'source')))
+ var.put(u'id', var.get(u"this").get(u'dynamicImportIds').put(var.get(u'alias'), var.get(u"this").get(u'scope').callprop(u'generateUidIdentifier', var.get(u'name'))))
+ var.put(u'specifiers', Js([]))
+ if PyJsStrictEq(var.get(u'imported'),Js(u'*')):
+ var.get(u'specifiers').callprop(u'push', var.get(u't').callprop(u'importNamespaceSpecifier', var.get(u'id')))
+ else:
+ if PyJsStrictEq(var.get(u'imported'),Js(u'default')):
+ var.get(u'specifiers').callprop(u'push', var.get(u't').callprop(u'importDefaultSpecifier', var.get(u'id')))
+ else:
+ var.get(u'specifiers').callprop(u'push', var.get(u't').callprop(u'importSpecifier', var.get(u'id'), var.get(u't').callprop(u'identifier', var.get(u'imported'))))
+ var.put(u'declar', var.get(u't').callprop(u'importDeclaration', var.get(u'specifiers'), var.get(u't').callprop(u'stringLiteral', var.get(u'source'))))
+ var.get(u'declar').put(u'_blockHoist', Js(3.0))
+ var.get(u"this").get(u'path').callprop(u'unshiftContainer', Js(u'body'), var.get(u'declar'))
+ return var.get(u'id')
+ PyJs_addImport_107_._set_name(u'addImport')
+ var.get(u'File').get(u'prototype').put(u'addImport', PyJs_addImport_107_)
+ @Js
+ def PyJs_addHelper_108_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'addHelper':PyJs_addHelper_108_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'uid', u'generator', u'res', u'declar', u'runtime', u'ref', u'name'])
+ var.put(u'declar', var.get(u"this").get(u'declarations').get(var.get(u'name')))
+ if var.get(u'declar'):
+ return var.get(u'declar')
+ if var.get(u"this").get(u'usedHelpers').get(var.get(u'name')).neg():
+ var.get(u"this").get(u'metadata').get(u'usedHelpers').callprop(u'push', var.get(u'name'))
+ var.get(u"this").get(u'usedHelpers').put(var.get(u'name'), var.get(u'true'))
+ var.put(u'generator', var.get(u"this").callprop(u'get', Js(u'helperGenerator')))
+ var.put(u'runtime', var.get(u"this").callprop(u'get', Js(u'helpersNamespace')))
+ if var.get(u'generator'):
+ var.put(u'res', var.get(u'generator')(var.get(u'name')))
+ if var.get(u'res'):
+ return var.get(u'res')
+ else:
+ if var.get(u'runtime'):
+ return var.get(u't').callprop(u'memberExpression', var.get(u'runtime'), var.get(u't').callprop(u'identifier', var.get(u'name')))
+ var.put(u'ref', PyJsComma(Js(0.0),var.get(u'_babelHelpers2').get(u'default'))(var.get(u'name')))
+ var.put(u'uid', var.get(u"this").get(u'declarations').put(var.get(u'name'), var.get(u"this").get(u'scope').callprop(u'generateUidIdentifier', var.get(u'name'))))
+ if (var.get(u't').callprop(u'isFunctionExpression', var.get(u'ref')) and var.get(u'ref').get(u'id').neg()):
+ var.get(u'ref').get(u'body').put(u'_compact', var.get(u'true'))
+ var.get(u'ref').put(u'_generated', var.get(u'true'))
+ var.get(u'ref').put(u'id', var.get(u'uid'))
+ var.get(u'ref').put(u'type', Js(u'FunctionDeclaration'))
+ var.get(u"this").get(u'path').callprop(u'unshiftContainer', Js(u'body'), var.get(u'ref'))
+ else:
+ var.get(u'ref').put(u'_compact', var.get(u'true'))
+ PyJs_Object_109_ = Js({u'id':var.get(u'uid'),u'init':var.get(u'ref'),u'unique':var.get(u'true')})
+ var.get(u"this").get(u'scope').callprop(u'push', PyJs_Object_109_)
+ return var.get(u'uid')
+ PyJs_addHelper_108_._set_name(u'addHelper')
+ var.get(u'File').get(u'prototype').put(u'addHelper', PyJs_addHelper_108_)
+ @Js
+ def PyJs_addTemplateObject_110_(helperName, strings, raw, this, arguments, var=var):
+ var = Scope({u'this':this, u'helperName':helperName, u'raw':raw, u'arguments':arguments, u'addTemplateObject':PyJs_addTemplateObject_110_, u'strings':strings}, var)
+ var.registers([u'name', u'helperName', u'raw', u'init', u'declar', u'stringIds', u'helperId', u'strings', u'uid'])
+ @Js
+ def PyJs_anonymous_111_(string, this, arguments, var=var):
+ var = Scope({u'this':this, u'string':string, u'arguments':arguments}, var)
+ var.registers([u'string'])
+ return var.get(u'string').get(u'value')
+ PyJs_anonymous_111_._set_name(u'anonymous')
+ var.put(u'stringIds', var.get(u'raw').get(u'elements').callprop(u'map', PyJs_anonymous_111_))
+ var.put(u'name', ((((var.get(u'helperName')+Js(u'_'))+var.get(u'raw').get(u'elements').get(u'length'))+Js(u'_'))+var.get(u'stringIds').callprop(u'join', Js(u','))))
+ var.put(u'declar', var.get(u"this").get(u'declarations').get(var.get(u'name')))
+ if var.get(u'declar'):
+ return var.get(u'declar')
+ var.put(u'uid', var.get(u"this").get(u'declarations').put(var.get(u'name'), var.get(u"this").get(u'scope').callprop(u'generateUidIdentifier', Js(u'templateObject'))))
+ var.put(u'helperId', var.get(u"this").callprop(u'addHelper', var.get(u'helperName')))
+ var.put(u'init', var.get(u't').callprop(u'callExpression', var.get(u'helperId'), Js([var.get(u'strings'), var.get(u'raw')])))
+ var.get(u'init').put(u'_compact', var.get(u'true'))
+ PyJs_Object_112_ = Js({u'id':var.get(u'uid'),u'init':var.get(u'init'),u'_blockHoist':Js(1.9)})
+ var.get(u"this").get(u'scope').callprop(u'push', PyJs_Object_112_)
+ return var.get(u'uid')
+ PyJs_addTemplateObject_110_._set_name(u'addTemplateObject')
+ var.get(u'File').get(u'prototype').put(u'addTemplateObject', PyJs_addTemplateObject_110_)
+ @Js
+ def PyJs_buildCodeFrameError_113_(node, msg, this, arguments, var=var):
+ var = Scope({u'node':node, u'msg':msg, u'buildCodeFrameError':PyJs_buildCodeFrameError_113_, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'loc', u'msg', u'err', u'Error'])
+ var.put(u'Error', (var.get(u'arguments').get(u'2') if ((var.get(u'arguments').get(u'length')>Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else var.get(u'SyntaxError')))
+ var.put(u'loc', (var.get(u'node') and (var.get(u'node').get(u'loc') or var.get(u'node').get(u'_loc'))))
+ var.put(u'err', var.get(u'Error').create(var.get(u'msg')))
+ if var.get(u'loc'):
+ var.get(u'err').put(u'loc', var.get(u'loc').get(u'start'))
+ else:
+ PyJsComma(Js(0.0),var.get(u'_babelTraverse2').get(u'default'))(var.get(u'node'), var.get(u'errorVisitor'), var.get(u"this").get(u'scope'), var.get(u'err'))
+ var.get(u'err').put(u'message', Js(u' (This is an error on an internal node. Probably an internal error'), u'+')
+ if var.get(u'err').get(u'loc'):
+ var.get(u'err').put(u'message', Js(u'. Location has been estimated.'), u'+')
+ var.get(u'err').put(u'message', Js(u')'), u'+')
+ return var.get(u'err')
+ PyJs_buildCodeFrameError_113_._set_name(u'buildCodeFrameError')
+ var.get(u'File').get(u'prototype').put(u'buildCodeFrameError', PyJs_buildCodeFrameError_113_)
+ @Js
+ def PyJs_mergeSourceMap_114_(map, this, arguments, var=var):
+ var = Scope({u'this':this, u'map':map, u'arguments':arguments, u'mergeSourceMap':PyJs_mergeSourceMap_114_}, var)
+ var.registers([u'_ret', u'map', u'inputMap'])
+ var.put(u'inputMap', var.get(u"this").get(u'opts').get(u'inputSourceMap'))
+ if var.get(u'inputMap'):
+ @Js
+ def PyJs_anonymous_115_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'mergedGenerator', u'source', u'mergedMap', u'outputMapConsumer', u'inputMapConsumer'])
+ var.put(u'inputMapConsumer', var.get(u'_sourceMap2').get(u'default').get(u'SourceMapConsumer').create(var.get(u'inputMap')))
+ var.put(u'outputMapConsumer', var.get(u'_sourceMap2').get(u'default').get(u'SourceMapConsumer').create(var.get(u'map')))
+ PyJs_Object_116_ = Js({u'file':var.get(u'inputMapConsumer').get(u'file'),u'sourceRoot':var.get(u'inputMapConsumer').get(u'sourceRoot')})
+ var.put(u'mergedGenerator', var.get(u'_sourceMap2').get(u'default').get(u'SourceMapGenerator').create(PyJs_Object_116_))
+ var.put(u'source', var.get(u'outputMapConsumer').get(u'sources').get(u'0'))
+ @Js
+ def PyJs_anonymous_117_(mapping, this, arguments, var=var):
+ var = Scope({u'this':this, u'mapping':mapping, u'arguments':arguments}, var)
+ var.registers([u'generatedPosition', u'mapping'])
+ PyJs_Object_118_ = Js({u'line':var.get(u'mapping').get(u'generatedLine'),u'column':var.get(u'mapping').get(u'generatedColumn'),u'source':var.get(u'source')})
+ var.put(u'generatedPosition', var.get(u'outputMapConsumer').callprop(u'generatedPositionFor', PyJs_Object_118_))
+ if (var.get(u'generatedPosition').get(u'column')!=var.get(u"null")):
+ PyJs_Object_120_ = Js({u'line':var.get(u'mapping').get(u'originalLine'),u'column':var.get(u'mapping').get(u'originalColumn')})
+ PyJs_Object_119_ = Js({u'source':var.get(u'mapping').get(u'source'),u'original':(var.get(u"null") if (var.get(u'mapping').get(u'source')==var.get(u"null")) else PyJs_Object_120_),u'generated':var.get(u'generatedPosition')})
+ var.get(u'mergedGenerator').callprop(u'addMapping', PyJs_Object_119_)
+ PyJs_anonymous_117_._set_name(u'anonymous')
+ var.get(u'inputMapConsumer').callprop(u'eachMapping', PyJs_anonymous_117_)
+ var.put(u'mergedMap', var.get(u'mergedGenerator').callprop(u'toJSON'))
+ var.get(u'inputMap').put(u'mappings', var.get(u'mergedMap').get(u'mappings'))
+ PyJs_Object_121_ = Js({u'v':var.get(u'inputMap')})
+ return PyJs_Object_121_
+ PyJs_anonymous_115_._set_name(u'anonymous')
+ var.put(u'_ret', PyJs_anonymous_115_())
+ if PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'_ret',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'_ret'))),Js(u'object')):
+ return var.get(u'_ret').get(u'v')
+ else:
+ return var.get(u'map')
+ PyJs_mergeSourceMap_114_._set_name(u'mergeSourceMap')
+ var.get(u'File').get(u'prototype').put(u'mergeSourceMap', PyJs_mergeSourceMap_114_)
+ @Js
+ def PyJs_parse_122_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'parse':PyJs_parse_122_, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code', u'ast', u'parser', u'parseCode', u'dirname', u'parserOpts'])
+ var.put(u'parseCode', var.get(u'_babylon').get(u'parse'))
+ var.put(u'parserOpts', var.get(u"this").get(u'opts').get(u'parserOpts'))
+ if var.get(u'parserOpts'):
+ PyJs_Object_123_ = Js({})
+ var.put(u'parserOpts', PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(PyJs_Object_123_, var.get(u"this").get(u'parserOpts'), var.get(u'parserOpts')))
+ if var.get(u'parserOpts').get(u'parser'):
+ if PyJsStrictEq(var.get(u'parserOpts').get(u'parser').typeof(),Js(u'string')):
+ var.put(u'dirname', (var.get(u'_path2').get(u'default').callprop(u'dirname', var.get(u"this").get(u'opts').get(u'filename')) or var.get(u'process').callprop(u'cwd')))
+ var.put(u'parser', PyJsComma(Js(0.0),var.get(u'_resolve2').get(u'default'))(var.get(u'parserOpts').get(u'parser'), var.get(u'dirname')))
+ if var.get(u'parser'):
+ var.put(u'parseCode', var.get(u'require')(var.get(u'parser')).get(u'parse'))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create((((Js(u"Couldn't find parser ")+var.get(u'parserOpts').get(u'parser'))+Js(u' with "parse" method relative to directory '))+var.get(u'dirname'))))
+ raise PyJsTempException
+ else:
+ var.put(u'parseCode', var.get(u'parserOpts').get(u'parser'))
+ @Js
+ def PyJs_parse_125_(source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'parse':PyJs_parse_125_, u'arguments':arguments}, var)
+ var.registers([u'source'])
+ return PyJsComma(Js(0.0),var.get(u'_babylon').get(u'parse'))(var.get(u'source'), var.get(u'parserOpts'))
+ PyJs_parse_125_._set_name(u'parse')
+ PyJs_Object_124_ = Js({u'parse':PyJs_parse_125_})
+ var.get(u'parserOpts').put(u'parser', PyJs_Object_124_)
+ var.get(u"this").get(u'log').callprop(u'debug', Js(u'Parse start'))
+ var.put(u'ast', var.get(u'parseCode')(var.get(u'code'), (var.get(u'parserOpts') or var.get(u"this").get(u'parserOpts'))))
+ var.get(u"this").get(u'log').callprop(u'debug', Js(u'Parse stop'))
+ return var.get(u'ast')
+ PyJs_parse_122_._set_name(u'parse')
+ var.get(u'File').get(u'prototype').put(u'parse', PyJs_parse_122_)
+ @Js
+ def PyJs__addAst_126_(ast, this, arguments, var=var):
+ var = Scope({u'this':this, u'_addAst':PyJs__addAst_126_, u'arguments':arguments, u'ast':ast}, var)
+ var.registers([u'ast'])
+ PyJs_Object_127_ = Js({u'hub':var.get(u"this").get(u'hub'),u'parentPath':var.get(u"null"),u'parent':var.get(u'ast'),u'container':var.get(u'ast'),u'key':Js(u'program')})
+ var.get(u"this").put(u'path', var.get(u'_babelTraverse').get(u'NodePath').callprop(u'get', PyJs_Object_127_).callprop(u'setContext'))
+ var.get(u"this").put(u'scope', var.get(u"this").get(u'path').get(u'scope'))
+ var.get(u"this").put(u'ast', var.get(u'ast'))
+ var.get(u"this").callprop(u'getMetadata')
+ PyJs__addAst_126_._set_name(u'_addAst')
+ var.get(u'File').get(u'prototype').put(u'_addAst', PyJs__addAst_126_)
+ @Js
+ def PyJs_addAst_128_(ast, this, arguments, var=var):
+ var = Scope({u'this':this, u'addAst':PyJs_addAst_128_, u'arguments':arguments, u'ast':ast}, var)
+ var.registers([u'ast'])
+ var.get(u"this").get(u'log').callprop(u'debug', Js(u'Start set AST'))
+ var.get(u"this").callprop(u'_addAst', var.get(u'ast'))
+ var.get(u"this").get(u'log').callprop(u'debug', Js(u'End set AST'))
+ PyJs_addAst_128_._set_name(u'addAst')
+ var.get(u'File').get(u'prototype').put(u'addAst', PyJs_addAst_128_)
+ @Js
+ def PyJs_transform_129_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'transform':PyJs_transform_129_}, var)
+ var.registers([u'i', u'visitor', u'pluginPasses'])
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'pass', var.get(u'_ref3'))
+ var.put(u'plugin', var.get(u'pass').get(u'plugin'))
+ var.put(u'fn', var.get(u'plugin').get(var.get(u'key')))
+ if var.get(u'fn'):
+ var.get(u'fn').callprop(u'call', var.get(u'pass'), var.get(u"this"))
+
+ PyJs_call_135_._set_name(u'call')
+ var.get(u'File').get(u'prototype').put(u'call', PyJs_call_135_)
+ @Js
+ def PyJs_parseInputSourceMap_136_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'parseInputSourceMap':PyJs_parseInputSourceMap_136_, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code', u'inputMap', u'opts'])
+ var.put(u'opts', var.get(u"this").get(u'opts'))
+ if PyJsStrictNeq(var.get(u'opts').get(u'inputSourceMap'),Js(False)):
+ var.put(u'inputMap', var.get(u'_convertSourceMap2').get(u'default').callprop(u'fromSource', var.get(u'code')))
+ if var.get(u'inputMap'):
+ var.get(u'opts').put(u'inputSourceMap', var.get(u'inputMap').callprop(u'toObject'))
+ var.put(u'code', var.get(u'_convertSourceMap2').get(u'default').callprop(u'removeComments', var.get(u'code')))
+ return var.get(u'code')
+ PyJs_parseInputSourceMap_136_._set_name(u'parseInputSourceMap')
+ var.get(u'File').get(u'prototype').put(u'parseInputSourceMap', PyJs_parseInputSourceMap_136_)
+ @Js
+ def PyJs_parseShebang_137_(this, arguments, var=var):
+ var = Scope({u'this':this, u'parseShebang':PyJs_parseShebang_137_, u'arguments':arguments}, var)
+ var.registers([u'shebangMatch'])
+ var.put(u'shebangMatch', var.get(u'shebangRegex').callprop(u'exec', var.get(u"this").get(u'code')))
+ if var.get(u'shebangMatch'):
+ var.get(u"this").put(u'shebang', var.get(u'shebangMatch').get(u'0'))
+ var.get(u"this").put(u'code', var.get(u"this").get(u'code').callprop(u'replace', var.get(u'shebangRegex'), Js(u'')))
+ PyJs_parseShebang_137_._set_name(u'parseShebang')
+ var.get(u'File').get(u'prototype').put(u'parseShebang', PyJs_parseShebang_137_)
+ @Js
+ def PyJs_makeResult_138_(_ref4, this, arguments, var=var):
+ var = Scope({u'this':this, u'makeResult':PyJs_makeResult_138_, u'_ref4':_ref4, u'arguments':arguments}, var)
+ var.registers([u'ignored', u'code', u'map', u'_ref4', u'ast', u'result'])
+ var.put(u'code', var.get(u'_ref4').get(u'code'))
+ var.put(u'map', var.get(u'_ref4').get(u'map'))
+ var.put(u'ast', var.get(u'_ref4').get(u'ast'))
+ var.put(u'ignored', var.get(u'_ref4').get(u'ignored'))
+ PyJs_Object_139_ = Js({u'metadata':var.get(u"null"),u'options':var.get(u"this").get(u'opts'),u'ignored':var.get(u'ignored').neg().neg(),u'code':var.get(u"null"),u'ast':var.get(u"null"),u'map':(var.get(u'map') or var.get(u"null"))})
+ var.put(u'result', PyJs_Object_139_)
+ if var.get(u"this").get(u'opts').get(u'code'):
+ var.get(u'result').put(u'code', var.get(u'code'))
+ if var.get(u"this").get(u'opts').get(u'ast'):
+ var.get(u'result').put(u'ast', var.get(u'ast'))
+ if var.get(u"this").get(u'opts').get(u'metadata'):
+ var.get(u'result').put(u'metadata', var.get(u"this").get(u'metadata'))
+ return var.get(u'result')
+ PyJs_makeResult_138_._set_name(u'makeResult')
+ var.get(u'File').get(u'prototype').put(u'makeResult', PyJs_makeResult_138_)
+ @Js
+ def PyJs_generate_140_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'generate':PyJs_generate_140_}, var)
+ var.registers([u'_result', u'generator', u'ast', u'result', u'dirname', u'gen', u'opts'])
+ var.put(u'opts', var.get(u"this").get(u'opts'))
+ var.put(u'ast', var.get(u"this").get(u'ast'))
+ PyJs_Object_141_ = Js({u'ast':var.get(u'ast')})
+ var.put(u'result', PyJs_Object_141_)
+ if var.get(u'opts').get(u'code').neg():
+ return var.get(u"this").callprop(u'makeResult', var.get(u'result'))
+ var.put(u'gen', var.get(u'_babelGenerator2').get(u'default'))
+ if var.get(u'opts').get(u'generatorOpts').get(u'generator'):
+ var.put(u'gen', var.get(u'opts').get(u'generatorOpts').get(u'generator'))
+ if PyJsStrictEq(var.get(u'gen',throw=False).typeof(),Js(u'string')):
+ var.put(u'dirname', (var.get(u'_path2').get(u'default').callprop(u'dirname', var.get(u"this").get(u'opts').get(u'filename')) or var.get(u'process').callprop(u'cwd')))
+ var.put(u'generator', PyJsComma(Js(0.0),var.get(u'_resolve2').get(u'default'))(var.get(u'gen'), var.get(u'dirname')))
+ if var.get(u'generator'):
+ var.put(u'gen', var.get(u'require')(var.get(u'generator')).get(u'print'))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create((((Js(u"Couldn't find generator ")+var.get(u'gen'))+Js(u' with "print" method relative to directory '))+var.get(u'dirname'))))
+ raise PyJsTempException
+ var.get(u"this").get(u'log').callprop(u'debug', Js(u'Generation start'))
+ var.put(u'_result', var.get(u'gen')(var.get(u'ast'), (PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'opts'), var.get(u'opts').get(u'generatorOpts')) if var.get(u'opts').get(u'generatorOpts') else var.get(u'opts')), var.get(u"this").get(u'code')))
+ var.get(u'result').put(u'code', var.get(u'_result').get(u'code'))
+ var.get(u'result').put(u'map', var.get(u'_result').get(u'map'))
+ var.get(u"this").get(u'log').callprop(u'debug', Js(u'Generation end'))
+ if var.get(u"this").get(u'shebang'):
+ var.get(u'result').put(u'code', ((var.get(u"this").get(u'shebang')+Js(u'\n'))+var.get(u'result').get(u'code')))
+ if var.get(u'result').get(u'map'):
+ var.get(u'result').put(u'map', var.get(u"this").callprop(u'mergeSourceMap', var.get(u'result').get(u'map')))
+ if (PyJsStrictEq(var.get(u'opts').get(u'sourceMaps'),Js(u'inline')) or PyJsStrictEq(var.get(u'opts').get(u'sourceMaps'),Js(u'both'))):
+ var.get(u'result').put(u'code', (Js(u'\n')+var.get(u'_convertSourceMap2').get(u'default').callprop(u'fromObject', var.get(u'result').get(u'map')).callprop(u'toComment')), u'+')
+ if PyJsStrictEq(var.get(u'opts').get(u'sourceMaps'),Js(u'inline')):
+ var.get(u'result').put(u'map', var.get(u"null"))
+ return var.get(u"this").callprop(u'makeResult', var.get(u'result'))
+ PyJs_generate_140_._set_name(u'generate')
+ var.get(u'File').get(u'prototype').put(u'generate', PyJs_generate_140_)
+ return var.get(u'File')
+ PyJs_anonymous_86_._set_name(u'anonymous')
+ var.put(u'File', PyJs_anonymous_86_(var.get(u'_store2').get(u'default')))
+ var.get(u'exports').put(u'default', var.get(u'File'))
+ var.get(u'exports').put(u'File', var.get(u'File'))
+ PyJs_anonymous_81_._set_name(u'anonymous')
+ PyJs_anonymous_81_.callprop(u'call', var.get(u"this"), var.get(u'require')(Js(u'_process')))
+PyJs_anonymous_80_._set_name(u'anonymous')
+PyJs_Object_142_ = Js({u'../../helpers/resolve':Js(9.0),u'../../store':Js(10.0),u'../../util':Js(26.0),u'../internal-plugins/block-hoist':Js(21.0),u'../internal-plugins/shadow-functions':Js(22.0),u'../plugin-pass':Js(24.0),u'./logger':Js(13.0),u'./metadata':Js(14.0),u'./options/option-manager':Js(18.0),u'_process':Js(531.0),u'babel-code-frame':Js(4.0),u'babel-generator':Js(40.0),u'babel-helpers':Js(56.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/core-js/object/assign':Js(100.0),u'babel-runtime/core-js/object/create':Js(101.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-runtime/helpers/inherits':Js(111.0),u'babel-runtime/helpers/possibleConstructorReturn':Js(113.0),u'babel-runtime/helpers/typeof':Js(114.0),u'babel-traverse':Js(225.0),u'babel-types':Js(258.0),u'babylon':Js(262.0),u'convert-source-map':Js(267.0),u'lodash/defaults':Js(442.0),u'path':Js(530.0),u'source-map':Js(519.0)})
+@Js
+def PyJs_anonymous_143_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'seenDeprecatedMessages', u'require', u'module', u'_node2', u'_node', u'verboseDebug', u'_interopRequireDefault', u'generalDebug', u'_classCallCheck3', u'_classCallCheck2', u'Logger'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_144_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_144_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_node', var.get(u'require')(Js(u'debug/node')))
+ var.put(u'_node2', var.get(u'_interopRequireDefault')(var.get(u'_node')))
+ pass
+ var.put(u'verboseDebug', PyJsComma(Js(0.0),var.get(u'_node2').get(u'default'))(Js(u'babel:verbose')))
+ var.put(u'generalDebug', PyJsComma(Js(0.0),var.get(u'_node2').get(u'default'))(Js(u'babel')))
+ var.put(u'seenDeprecatedMessages', Js([]))
+ @Js
+ def PyJs_anonymous_145_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'Logger'])
+ @Js
+ def PyJsHoisted_Logger_(file, filename, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'file':file, u'filename':filename}, var)
+ var.registers([u'file', u'filename'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'Logger'))
+ var.get(u"this").put(u'filename', var.get(u'filename'))
+ var.get(u"this").put(u'file', var.get(u'file'))
+ PyJsHoisted_Logger_.func_name = u'Logger'
+ var.put(u'Logger', PyJsHoisted_Logger_)
+ pass
+ @Js
+ def PyJs__buildMessage_146_(msg, this, arguments, var=var):
+ var = Scope({u'msg':msg, u'this':this, u'_buildMessage':PyJs__buildMessage_146_, u'arguments':arguments}, var)
+ var.registers([u'msg', u'parts'])
+ var.put(u'parts', (Js(u'[BABEL] ')+var.get(u"this").get(u'filename')))
+ if var.get(u'msg'):
+ var.put(u'parts', (Js(u': ')+var.get(u'msg')), u'+')
+ return var.get(u'parts')
+ PyJs__buildMessage_146_._set_name(u'_buildMessage')
+ var.get(u'Logger').get(u'prototype').put(u'_buildMessage', PyJs__buildMessage_146_)
+ @Js
+ def PyJs_warn_147_(msg, this, arguments, var=var):
+ var = Scope({u'msg':msg, u'this':this, u'warn':PyJs_warn_147_, u'arguments':arguments}, var)
+ var.registers([u'msg'])
+ var.get(u'console').callprop(u'warn', var.get(u"this").callprop(u'_buildMessage', var.get(u'msg')))
+ PyJs_warn_147_._set_name(u'warn')
+ var.get(u'Logger').get(u'prototype').put(u'warn', PyJs_warn_147_)
+ @Js
+ def PyJs_error_148_(msg, this, arguments, var=var):
+ var = Scope({u'msg':msg, u'this':this, u'arguments':arguments, u'error':PyJs_error_148_}, var)
+ var.registers([u'msg', u'Constructor'])
+ var.put(u'Constructor', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else var.get(u'Error')))
+ PyJsTempException = JsToPyException(var.get(u'Constructor').create(var.get(u"this").callprop(u'_buildMessage', var.get(u'msg'))))
+ raise PyJsTempException
+ PyJs_error_148_._set_name(u'error')
+ var.get(u'Logger').get(u'prototype').put(u'error', PyJs_error_148_)
+ @Js
+ def PyJs_deprecate_149_(msg, this, arguments, var=var):
+ var = Scope({u'msg':msg, u'this':this, u'deprecate':PyJs_deprecate_149_, u'arguments':arguments}, var)
+ var.registers([u'msg'])
+ if (var.get(u"this").get(u'file').get(u'opts') and var.get(u"this").get(u'file').get(u'opts').get(u'suppressDeprecationMessages')):
+ return var.get('undefined')
+ var.put(u'msg', var.get(u"this").callprop(u'_buildMessage', var.get(u'msg')))
+ if (var.get(u'seenDeprecatedMessages').callprop(u'indexOf', var.get(u'msg'))>=Js(0.0)):
+ return var.get('undefined')
+ var.get(u'seenDeprecatedMessages').callprop(u'push', var.get(u'msg'))
+ var.get(u'console').callprop(u'error', var.get(u'msg'))
+ PyJs_deprecate_149_._set_name(u'deprecate')
+ var.get(u'Logger').get(u'prototype').put(u'deprecate', PyJs_deprecate_149_)
+ @Js
+ def PyJs_verbose_150_(msg, this, arguments, var=var):
+ var = Scope({u'msg':msg, u'this':this, u'arguments':arguments, u'verbose':PyJs_verbose_150_}, var)
+ var.registers([u'msg'])
+ if var.get(u'verboseDebug').get(u'enabled'):
+ var.get(u'verboseDebug')(var.get(u"this").callprop(u'_buildMessage', var.get(u'msg')))
+ PyJs_verbose_150_._set_name(u'verbose')
+ var.get(u'Logger').get(u'prototype').put(u'verbose', PyJs_verbose_150_)
+ @Js
+ def PyJs_debug_151_(msg, this, arguments, var=var):
+ var = Scope({u'msg':msg, u'this':this, u'arguments':arguments, u'debug':PyJs_debug_151_}, var)
+ var.registers([u'msg'])
+ if var.get(u'generalDebug').get(u'enabled'):
+ var.get(u'generalDebug')(var.get(u"this").callprop(u'_buildMessage', var.get(u'msg')))
+ PyJs_debug_151_._set_name(u'debug')
+ var.get(u'Logger').get(u'prototype').put(u'debug', PyJs_debug_151_)
+ @Js
+ def PyJs_deopt_152_(node, msg, this, arguments, var=var):
+ var = Scope({u'node':node, u'msg':msg, u'this':this, u'arguments':arguments, u'deopt':PyJs_deopt_152_}, var)
+ var.registers([u'node', u'msg'])
+ var.get(u"this").callprop(u'debug', var.get(u'msg'))
+ PyJs_deopt_152_._set_name(u'deopt')
+ var.get(u'Logger').get(u'prototype').put(u'deopt', PyJs_deopt_152_)
+ return var.get(u'Logger')
+ PyJs_anonymous_145_._set_name(u'anonymous')
+ var.put(u'Logger', PyJs_anonymous_145_())
+ var.get(u'exports').put(u'default', var.get(u'Logger'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_143_._set_name(u'anonymous')
+PyJs_Object_153_ = Js({u'babel-runtime/helpers/classCallCheck':Js(110.0),u'debug/node':Js(270.0)})
+@Js
+def PyJs_anonymous_154_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'ExportDeclaration', u'ModuleDeclaration', u'_interopRequireWildcard', u'ImportDeclaration', u'require', u'_babelTypes', u'module', u't', u'_interopRequireDefault', u'Scope', u'_getIterator2', u'_getIterator3'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_156_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_156_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_Scope_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'path').callprop(u'skip')
+ PyJsHoisted_Scope_.func_name = u'Scope'
+ var.put(u'Scope', PyJsHoisted_Scope_)
+ @Js
+ def PyJsHoisted_ExportDeclaration_(path, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'file':file}, var)
+ var.registers([u'node', u'specifier', u'exports', u'name', u'_i2', u'_ref2', u'source', u'declar', u'_isArray2', u'exported', u'file', u'path', u'bindings', u'local', u'_iterator2'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'source', (var.get(u'node').get(u'source').get(u'value') if var.get(u'node').get(u'source') else var.get(u"null")))
+ var.put(u'exports', var.get(u'file').get(u'metadata').get(u'modules').get(u'exports'))
+ var.put(u'declar', var.get(u'path').callprop(u'get', Js(u'declaration')))
+ if var.get(u'declar').callprop(u'isStatement'):
+ var.put(u'bindings', var.get(u'declar').callprop(u'getBindingIdentifiers'))
+ for PyJsTemp in var.get(u'bindings'):
+ var.put(u'name', PyJsTemp)
+ var.get(u'exports').get(u'exported').callprop(u'push', var.get(u'name'))
+ PyJs_Object_165_ = Js({u'kind':Js(u'local'),u'local':var.get(u'name'),u'exported':(Js(u'default') if var.get(u'path').callprop(u'isExportDefaultDeclaration') else var.get(u'name'))})
+ var.get(u'exports').get(u'specifiers').callprop(u'push', PyJs_Object_165_)
+ if (var.get(u'path').callprop(u'isExportNamedDeclaration') and var.get(u'node').get(u'specifiers')):
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'node').get(u'specifiers'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'specifier', var.get(u'_ref2'))
+ var.put(u'exported', var.get(u'specifier').get(u'exported').get(u'name'))
+ var.get(u'exports').get(u'exported').callprop(u'push', var.get(u'exported'))
+ if var.get(u't').callprop(u'isExportDefaultSpecifier', var.get(u'specifier')):
+ PyJs_Object_166_ = Js({u'kind':Js(u'external'),u'local':var.get(u'exported'),u'exported':var.get(u'exported'),u'source':var.get(u'source')})
+ var.get(u'exports').get(u'specifiers').callprop(u'push', PyJs_Object_166_)
+ if var.get(u't').callprop(u'isExportNamespaceSpecifier', var.get(u'specifier')):
+ PyJs_Object_167_ = Js({u'kind':Js(u'external-namespace'),u'exported':var.get(u'exported'),u'source':var.get(u'source')})
+ var.get(u'exports').get(u'specifiers').callprop(u'push', PyJs_Object_167_)
+ var.put(u'local', var.get(u'specifier').get(u'local'))
+ if var.get(u'local').neg():
+ continue
+ if var.get(u'source'):
+ PyJs_Object_168_ = Js({u'kind':Js(u'external'),u'local':var.get(u'local').get(u'name'),u'exported':var.get(u'exported'),u'source':var.get(u'source')})
+ var.get(u'exports').get(u'specifiers').callprop(u'push', PyJs_Object_168_)
+ if var.get(u'source').neg():
+ PyJs_Object_169_ = Js({u'kind':Js(u'local'),u'local':var.get(u'local').get(u'name'),u'exported':var.get(u'exported')})
+ var.get(u'exports').get(u'specifiers').callprop(u'push', PyJs_Object_169_)
+
+ if var.get(u'path').callprop(u'isExportAllDeclaration'):
+ PyJs_Object_170_ = Js({u'kind':Js(u'external-all'),u'source':var.get(u'source')})
+ var.get(u'exports').get(u'specifiers').callprop(u'push', PyJs_Object_170_)
+ PyJsHoisted_ExportDeclaration_.func_name = u'ExportDeclaration'
+ var.put(u'ExportDeclaration', PyJsHoisted_ExportDeclaration_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_155_ = Js({})
+ var.put(u'newObj', PyJs_Object_155_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'ImportDeclaration', var.get(u'exports').put(u'ModuleDeclaration', var.get(u'undefined')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'ExportDeclaration', var.get(u'ExportDeclaration'))
+ var.get(u'exports').put(u'Scope', var.get(u'Scope'))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ @Js
+ def PyJs_enter_158_(path, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'file':file, u'enter':PyJs_enter_158_}, var)
+ var.registers([u'node', u'path', u'file'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u'node').get(u'source'):
+ var.get(u'node').get(u'source').put(u'value', var.get(u'file').callprop(u'resolveModuleSource', var.get(u'node').get(u'source').get(u'value')))
+ PyJs_enter_158_._set_name(u'enter')
+ PyJs_Object_157_ = Js({u'enter':PyJs_enter_158_})
+ var.put(u'ModuleDeclaration', var.get(u'exports').put(u'ModuleDeclaration', PyJs_Object_157_))
+ @Js
+ def PyJs_exit_160_(path, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'exit':PyJs_exit_160_, u'arguments':arguments, u'file':file}, var)
+ var.registers([u'node', u'specifiers', u'_isArray', u'imported', u'file', u'specifier', u'_i', u'importedName', u'_iterator', u'_ref', u'path', u'local'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'specifiers', Js([]))
+ var.put(u'imported', Js([]))
+ PyJs_Object_161_ = Js({u'source':var.get(u'node').get(u'source').get(u'value'),u'imported':var.get(u'imported'),u'specifiers':var.get(u'specifiers')})
+ var.get(u'file').get(u'metadata').get(u'modules').get(u'imports').callprop(u'push', PyJs_Object_161_)
+ #for JS loop
+ var.put(u'_iterator', var.get(u'path').callprop(u'get', Js(u'specifiers')))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'specifier', var.get(u'_ref'))
+ var.put(u'local', var.get(u'specifier').get(u'node').get(u'local').get(u'name'))
+ if var.get(u'specifier').callprop(u'isImportDefaultSpecifier'):
+ var.get(u'imported').callprop(u'push', Js(u'default'))
+ PyJs_Object_162_ = Js({u'kind':Js(u'named'),u'imported':Js(u'default'),u'local':var.get(u'local')})
+ var.get(u'specifiers').callprop(u'push', PyJs_Object_162_)
+ if var.get(u'specifier').callprop(u'isImportSpecifier'):
+ var.put(u'importedName', var.get(u'specifier').get(u'node').get(u'imported').get(u'name'))
+ var.get(u'imported').callprop(u'push', var.get(u'importedName'))
+ PyJs_Object_163_ = Js({u'kind':Js(u'named'),u'imported':var.get(u'importedName'),u'local':var.get(u'local')})
+ var.get(u'specifiers').callprop(u'push', PyJs_Object_163_)
+ if var.get(u'specifier').callprop(u'isImportNamespaceSpecifier'):
+ var.get(u'imported').callprop(u'push', Js(u'*'))
+ PyJs_Object_164_ = Js({u'kind':Js(u'namespace'),u'local':var.get(u'local')})
+ var.get(u'specifiers').callprop(u'push', PyJs_Object_164_)
+
+ PyJs_exit_160_._set_name(u'exit')
+ PyJs_Object_159_ = Js({u'exit':PyJs_exit_160_})
+ var.put(u'ImportDeclaration', var.get(u'exports').put(u'ImportDeclaration', PyJs_Object_159_))
+ pass
+ pass
+PyJs_anonymous_154_._set_name(u'anonymous')
+PyJs_Object_171_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_172_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_173_(process, this, arguments, var=var):
+ var = Scope({u'process':process, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'_resolve', u'existsCache', u'exists', u'_fs', u'process', u'buildConfigChain', u'_json2', u'_interopRequireDefault', u'_fs2', u'BABELIGNORE_FILENAME', u'_json', u'PACKAGE_FILENAME', u'jsonCache', u'_classCallCheck3', u'_classCallCheck2', u'_assign', u'BABELRC_FILENAME', u'_pathIsAbsolute2', u'_path2', u'_assign2', u'_resolve2', u'_pathIsAbsolute', u'ConfigChainBuilder', u'_path'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_174_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_174_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_buildConfigChain_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'builder', u'log', u'opts', u'filename'])
+ PyJs_Object_177_ = Js({})
+ var.put(u'opts', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else PyJs_Object_177_))
+ var.put(u'log', var.get(u'arguments').get(u'1'))
+ var.put(u'filename', var.get(u'opts').get(u'filename'))
+ var.put(u'builder', var.get(u'ConfigChainBuilder').create(var.get(u'log')))
+ if PyJsStrictNeq(var.get(u'opts').get(u'babelrc'),Js(False)):
+ var.get(u'builder').callprop(u'findConfigs', var.get(u'filename'))
+ PyJs_Object_178_ = Js({u'options':var.get(u'opts'),u'alias':Js(u'base'),u'dirname':(var.get(u'filename') and var.get(u'_path2').get(u'default').callprop(u'dirname', var.get(u'filename')))})
+ var.get(u'builder').callprop(u'mergeConfig', PyJs_Object_178_)
+ return var.get(u'builder').get(u'configs')
+ PyJsHoisted_buildConfigChain_.func_name = u'buildConfigChain'
+ var.put(u'buildConfigChain', PyJsHoisted_buildConfigChain_)
+ @Js
+ def PyJsHoisted_exists_(filename, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'filename':filename}, var)
+ var.registers([u'cached', u'filename'])
+ var.put(u'cached', var.get(u'existsCache').get(var.get(u'filename')))
+ if (var.get(u'cached')==var.get(u"null")):
+ return var.get(u'existsCache').put(var.get(u'filename'), var.get(u'_fs2').get(u'default').callprop(u'existsSync', var.get(u'filename')))
+ else:
+ return var.get(u'cached')
+ PyJsHoisted_exists_.func_name = u'exists'
+ var.put(u'exists', PyJsHoisted_exists_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_assign', var.get(u'require')(Js(u'babel-runtime/core-js/object/assign')))
+ var.put(u'_assign2', var.get(u'_interopRequireDefault')(var.get(u'_assign')))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.get(u'exports').put(u'default', var.get(u'buildConfigChain'))
+ var.put(u'_resolve', var.get(u'require')(Js(u'../../../helpers/resolve')))
+ var.put(u'_resolve2', var.get(u'_interopRequireDefault')(var.get(u'_resolve')))
+ var.put(u'_json', var.get(u'require')(Js(u'json5')))
+ var.put(u'_json2', var.get(u'_interopRequireDefault')(var.get(u'_json')))
+ var.put(u'_pathIsAbsolute', var.get(u'require')(Js(u'path-is-absolute')))
+ var.put(u'_pathIsAbsolute2', var.get(u'_interopRequireDefault')(var.get(u'_pathIsAbsolute')))
+ var.put(u'_path', var.get(u'require')(Js(u'path')))
+ var.put(u'_path2', var.get(u'_interopRequireDefault')(var.get(u'_path')))
+ var.put(u'_fs', var.get(u'require')(Js(u'fs')))
+ var.put(u'_fs2', var.get(u'_interopRequireDefault')(var.get(u'_fs')))
+ pass
+ PyJs_Object_175_ = Js({})
+ var.put(u'existsCache', PyJs_Object_175_)
+ PyJs_Object_176_ = Js({})
+ var.put(u'jsonCache', PyJs_Object_176_)
+ var.put(u'BABELIGNORE_FILENAME', Js(u'.babelignore'))
+ var.put(u'BABELRC_FILENAME', Js(u'.babelrc'))
+ var.put(u'PACKAGE_FILENAME', Js(u'package.json'))
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_179_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'ConfigChainBuilder'])
+ @Js
+ def PyJsHoisted_ConfigChainBuilder_(log, this, arguments, var=var):
+ var = Scope({u'this':this, u'log':log, u'arguments':arguments}, var)
+ var.registers([u'log'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'ConfigChainBuilder'))
+ var.get(u"this").put(u'resolvedConfigs', Js([]))
+ var.get(u"this").put(u'configs', Js([]))
+ var.get(u"this").put(u'log', var.get(u'log'))
+ PyJsHoisted_ConfigChainBuilder_.func_name = u'ConfigChainBuilder'
+ var.put(u'ConfigChainBuilder', PyJsHoisted_ConfigChainBuilder_)
+ pass
+ @Js
+ def PyJs_findConfigs_180_(loc, this, arguments, var=var):
+ var = Scope({u'this':this, u'loc':loc, u'arguments':arguments, u'findConfigs':PyJs_findConfigs_180_}, var)
+ var.registers([u'loc', u'ignoreLoc', u'foundIgnore', u'pkgLoc', u'foundConfig', u'configLoc'])
+ if var.get(u'loc').neg():
+ return var.get('undefined')
+ if PyJsComma(Js(0.0),var.get(u'_pathIsAbsolute2').get(u'default'))(var.get(u'loc')).neg():
+ var.put(u'loc', var.get(u'_path2').get(u'default').callprop(u'join', var.get(u'process').callprop(u'cwd'), var.get(u'loc')))
+ var.put(u'foundConfig', Js(False))
+ var.put(u'foundIgnore', Js(False))
+ while PyJsStrictNeq(var.get(u'loc'),var.put(u'loc', var.get(u'_path2').get(u'default').callprop(u'dirname', var.get(u'loc')))):
+ if var.get(u'foundConfig').neg():
+ var.put(u'configLoc', var.get(u'_path2').get(u'default').callprop(u'join', var.get(u'loc'), var.get(u'BABELRC_FILENAME')))
+ if var.get(u'exists')(var.get(u'configLoc')):
+ var.get(u"this").callprop(u'addConfig', var.get(u'configLoc'))
+ var.put(u'foundConfig', var.get(u'true'))
+ var.put(u'pkgLoc', var.get(u'_path2').get(u'default').callprop(u'join', var.get(u'loc'), var.get(u'PACKAGE_FILENAME')))
+ if (var.get(u'foundConfig').neg() and var.get(u'exists')(var.get(u'pkgLoc'))):
+ var.put(u'foundConfig', var.get(u"this").callprop(u'addConfig', var.get(u'pkgLoc'), Js(u'babel'), var.get(u'JSON')))
+ if var.get(u'foundIgnore').neg():
+ var.put(u'ignoreLoc', var.get(u'_path2').get(u'default').callprop(u'join', var.get(u'loc'), var.get(u'BABELIGNORE_FILENAME')))
+ if var.get(u'exists')(var.get(u'ignoreLoc')):
+ var.get(u"this").callprop(u'addIgnoreConfig', var.get(u'ignoreLoc'))
+ var.put(u'foundIgnore', var.get(u'true'))
+ if (var.get(u'foundIgnore') and var.get(u'foundConfig')):
+ return var.get('undefined')
+ PyJs_findConfigs_180_._set_name(u'findConfigs')
+ var.get(u'ConfigChainBuilder').get(u'prototype').put(u'findConfigs', PyJs_findConfigs_180_)
+ @Js
+ def PyJs_addIgnoreConfig_181_(loc, this, arguments, var=var):
+ var = Scope({u'this':this, u'loc':loc, u'arguments':arguments, u'addIgnoreConfig':PyJs_addIgnoreConfig_181_}, var)
+ var.registers([u'loc', u'lines', u'file'])
+ var.put(u'file', var.get(u'_fs2').get(u'default').callprop(u'readFileSync', var.get(u'loc'), Js(u'utf8')))
+ var.put(u'lines', var.get(u'file').callprop(u'split', Js(u'\n')))
+ @Js
+ def PyJs_anonymous_182_(line, this, arguments, var=var):
+ var = Scope({u'this':this, u'line':line, u'arguments':arguments}, var)
+ var.registers([u'line'])
+ return var.get(u'line').neg().neg()
+ PyJs_anonymous_182_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_183_(line, this, arguments, var=var):
+ var = Scope({u'this':this, u'line':line, u'arguments':arguments}, var)
+ var.registers([u'line'])
+ return var.get(u'line').callprop(u'replace', JsRegExp(u'/#(.*?)$/'), Js(u'')).callprop(u'trim')
+ PyJs_anonymous_183_._set_name(u'anonymous')
+ var.put(u'lines', var.get(u'lines').callprop(u'map', PyJs_anonymous_183_).callprop(u'filter', PyJs_anonymous_182_))
+ if var.get(u'lines').get(u'length'):
+ PyJs_Object_185_ = Js({u'ignore':var.get(u'lines')})
+ PyJs_Object_184_ = Js({u'options':PyJs_Object_185_,u'alias':var.get(u'loc'),u'dirname':var.get(u'_path2').get(u'default').callprop(u'dirname', var.get(u'loc'))})
+ var.get(u"this").callprop(u'mergeConfig', PyJs_Object_184_)
+ PyJs_addIgnoreConfig_181_._set_name(u'addIgnoreConfig')
+ var.get(u'ConfigChainBuilder').get(u'prototype').put(u'addIgnoreConfig', PyJs_addIgnoreConfig_181_)
+ @Js
+ def PyJs_addConfig_186_(loc, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'loc':loc, u'addConfig':PyJs_addConfig_186_, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'content', u'loc', u'json', u'options', u'key'])
+ var.put(u'json', (var.get(u'arguments').get(u'2') if ((var.get(u'arguments').get(u'length')>Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else var.get(u'_json2').get(u'default')))
+ if (var.get(u"this").get(u'resolvedConfigs').callprop(u'indexOf', var.get(u'loc'))>=Js(0.0)):
+ return Js(False)
+ var.get(u"this").get(u'resolvedConfigs').callprop(u'push', var.get(u'loc'))
+ var.put(u'content', var.get(u'_fs2').get(u'default').callprop(u'readFileSync', var.get(u'loc'), Js(u'utf8')))
+ var.put(u'options', PyJsComma(Js(0.0), Js(None)))
+ try:
+ var.put(u'options', var.get(u'jsonCache').put(var.get(u'content'), (var.get(u'jsonCache').get(var.get(u'content')) or var.get(u'json').callprop(u'parse', var.get(u'content')))))
+ if var.get(u'key'):
+ var.put(u'options', var.get(u'options').get(var.get(u'key')))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_657272_93340872 = var.own.get(u'err')
+ var.force_own_put(u'err', PyExceptionToJs(PyJsTempException))
+ try:
+ var.get(u'err').put(u'message', ((var.get(u'loc')+Js(u': Error while parsing JSON - '))+var.get(u'err').get(u'message')))
+ PyJsTempException = JsToPyException(var.get(u'err'))
+ raise PyJsTempException
+ finally:
+ if PyJsHolder_657272_93340872 is not None:
+ var.own[u'err'] = PyJsHolder_657272_93340872
+ else:
+ del var.own[u'err']
+ del PyJsHolder_657272_93340872
+ PyJs_Object_187_ = Js({u'options':var.get(u'options'),u'alias':var.get(u'loc'),u'dirname':var.get(u'_path2').get(u'default').callprop(u'dirname', var.get(u'loc'))})
+ var.get(u"this").callprop(u'mergeConfig', PyJs_Object_187_)
+ return var.get(u'options').neg().neg()
+ PyJs_addConfig_186_._set_name(u'addConfig')
+ var.get(u'ConfigChainBuilder').get(u'prototype').put(u'addConfig', PyJs_addConfig_186_)
+ @Js
+ def PyJs_mergeConfig_188_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments, u'mergeConfig':PyJs_mergeConfig_188_}, var)
+ var.registers([u'loc', u'envOpts', u'alias', u'envKey', u'extendsLoc', u'_ref', u'dirname', u'options'])
+ var.put(u'options', var.get(u'_ref').get(u'options'))
+ var.put(u'alias', var.get(u'_ref').get(u'alias'))
+ var.put(u'loc', var.get(u'_ref').get(u'loc'))
+ var.put(u'dirname', var.get(u'_ref').get(u'dirname'))
+ if var.get(u'options').neg():
+ return Js(False)
+ PyJs_Object_189_ = Js({})
+ var.put(u'options', PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(PyJs_Object_189_, var.get(u'options')))
+ var.put(u'dirname', (var.get(u'dirname') or var.get(u'process').callprop(u'cwd')))
+ var.put(u'loc', (var.get(u'loc') or var.get(u'alias')))
+ if var.get(u'options').get(u'extends'):
+ var.put(u'extendsLoc', PyJsComma(Js(0.0),var.get(u'_resolve2').get(u'default'))(var.get(u'options').get(u'extends'), var.get(u'dirname')))
+ if var.get(u'extendsLoc'):
+ var.get(u"this").callprop(u'addConfig', var.get(u'extendsLoc'))
+ else:
+ if var.get(u"this").get(u'log'):
+ var.get(u"this").get(u'log').callprop(u'error', (((Js(u"Couldn't resolve extends clause of ")+var.get(u'options').get(u'extends'))+Js(u' in '))+var.get(u'alias')))
+ var.get(u'options').delete(u'extends')
+ PyJs_Object_190_ = Js({u'options':var.get(u'options'),u'alias':var.get(u'alias'),u'loc':var.get(u'loc'),u'dirname':var.get(u'dirname')})
+ var.get(u"this").get(u'configs').callprop(u'push', PyJs_Object_190_)
+ var.put(u'envOpts', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'envKey', ((var.get(u'process').get(u'env').get(u'BABEL_ENV') or var.get(u'process').get(u'env').get(u'NODE_ENV')) or Js(u'development')))
+ if var.get(u'options').get(u'env'):
+ var.put(u'envOpts', var.get(u'options').get(u'env').get(var.get(u'envKey')))
+ var.get(u'options').delete(u'env')
+ PyJs_Object_191_ = Js({u'options':var.get(u'envOpts'),u'alias':((var.get(u'alias')+Js(u'.env.'))+var.get(u'envKey')),u'dirname':var.get(u'dirname')})
+ var.get(u"this").callprop(u'mergeConfig', PyJs_Object_191_)
+ PyJs_mergeConfig_188_._set_name(u'mergeConfig')
+ var.get(u'ConfigChainBuilder').get(u'prototype').put(u'mergeConfig', PyJs_mergeConfig_188_)
+ return var.get(u'ConfigChainBuilder')
+ PyJs_anonymous_179_._set_name(u'anonymous')
+ var.put(u'ConfigChainBuilder', PyJs_anonymous_179_())
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+ PyJs_anonymous_173_._set_name(u'anonymous')
+ PyJs_anonymous_173_.callprop(u'call', var.get(u"this"), var.get(u'require')(Js(u'_process')))
+PyJs_anonymous_172_._set_name(u'anonymous')
+PyJs_Object_192_ = Js({u'../../../helpers/resolve':Js(9.0),u'_process':Js(531.0),u'babel-runtime/core-js/object/assign':Js(100.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'fs':Js(523.0),u'json5':Js(284.0),u'path':Js(530.0),u'path-is-absolute':Js(499.0)})
+@Js
+def PyJs_anonymous_193_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ PyJs_Object_195_ = Js({u'type':Js(u'filename'),u'description':Js(u'filename to use when reading from stdin - this will be used in source-maps, errors etc'),u'default':Js(u'unknown'),u'shorthand':Js(u'f')})
+ PyJs_Object_196_ = Js({u'hidden':var.get(u'true'),u'type':Js(u'string')})
+ PyJs_Object_197_ = Js({u'hidden':var.get(u'true')})
+ PyJs_Object_199_ = Js({})
+ PyJs_Object_198_ = Js({u'hidden':var.get(u'true'),u'default':PyJs_Object_199_})
+ PyJs_Object_200_ = Js({u'description':Js(u''),u'hidden':var.get(u'true')})
+ PyJs_Object_201_ = Js({u'type':Js(u'boolean'),u'default':Js(False),u'description':Js(u'retain line numbers - will result in really ugly code')})
+ PyJs_Object_202_ = Js({u'description':Js(u'enable/disable ANSI syntax highlighting of code frames (on by default)'),u'type':Js(u'boolean'),u'default':var.get(u'true')})
+ PyJs_Object_203_ = Js({u'type':Js(u'boolean'),u'default':Js(False),u'hidden':var.get(u'true')})
+ PyJs_Object_204_ = Js({u'type':Js(u'list'),u'description':Js(u''),u'default':Js([])})
+ PyJs_Object_205_ = Js({u'type':Js(u'list'),u'default':Js([]),u'description':Js(u'')})
+ PyJs_Object_206_ = Js({u'type':Js(u'list'),u'description':Js(u'list of glob paths to **not** compile'),u'default':Js([])})
+ PyJs_Object_207_ = Js({u'type':Js(u'list'),u'description':Js(u'list of glob paths to **only** compile')})
+ PyJs_Object_208_ = Js({u'hidden':var.get(u'true'),u'default':var.get(u'true'),u'type':Js(u'boolean')})
+ PyJs_Object_209_ = Js({u'hidden':var.get(u'true'),u'default':var.get(u'true'),u'type':Js(u'boolean')})
+ PyJs_Object_210_ = Js({u'hidden':var.get(u'true'),u'default':var.get(u'true'),u'type':Js(u'boolean')})
+ PyJs_Object_211_ = Js({u'type':Js(u'string'),u'hidden':var.get(u'true')})
+ PyJs_Object_212_ = Js({u'type':Js(u'boolean'),u'default':var.get(u'true'),u'description':Js(u'write comments to generated output (true by default)')})
+ PyJs_Object_213_ = Js({u'hidden':var.get(u'true'),u'description':Js(u'optional callback to control whether a comment should be inserted, when this is used the comments option is ignored')})
+ PyJs_Object_214_ = Js({u'hidden':var.get(u'true'),u'description':Js(u'optional callback to wrap all visitor methods')})
+ PyJs_Object_215_ = Js({u'type':Js(u'booleanString'),u'default':Js(u'auto'),u'description':Js(u'do not include superfluous whitespace characters and line terminators [true|false|auto]')})
+ PyJs_Object_216_ = Js({u'type':Js(u'boolean'),u'default':Js(False),u'description':Js(u'save as much bytes when printing [true|false]')})
+ PyJs_Object_217_ = Js({u'alias':Js(u'sourceMaps'),u'hidden':var.get(u'true')})
+ PyJs_Object_218_ = Js({u'type':Js(u'booleanString'),u'description':Js(u'[true|false|inline]'),u'default':Js(False),u'shorthand':Js(u's')})
+ PyJs_Object_219_ = Js({u'type':Js(u'string'),u'description':Js(u'set `file` on returned source map')})
+ PyJs_Object_220_ = Js({u'type':Js(u'string'),u'description':Js(u'set `sources[0]` on returned source map')})
+ PyJs_Object_221_ = Js({u'type':Js(u'filename'),u'description':Js(u'the root from which all sources are relative')})
+ PyJs_Object_222_ = Js({u'description':Js(u'Whether or not to look up .babelrc and .babelignore files'),u'type':Js(u'boolean'),u'default':var.get(u'true')})
+ PyJs_Object_223_ = Js({u'description':Js(u''),u'default':Js(u'module')})
+ PyJs_Object_224_ = Js({u'type':Js(u'string'),u'description':Js(u'print a comment before any injected non-user code')})
+ PyJs_Object_225_ = Js({u'type':Js(u'string'),u'description':Js(u'print a comment after any injected non-user code')})
+ PyJs_Object_226_ = Js({u'hidden':var.get(u'true')})
+ PyJs_Object_227_ = Js({u'hidden':var.get(u'true')})
+ PyJs_Object_228_ = Js({u'type':Js(u'filename'),u'description':Js(u'optional prefix for the AMD module formatter that will be prepend to the filename on module definitions')})
+ PyJs_Object_229_ = Js({u'type':Js(u'boolean'),u'default':Js(False),u'shorthand':Js(u'M'),u'description':Js(u'insert an explicit id for modules')})
+ PyJs_Object_230_ = Js({u'description':Js(u'specify a custom name for module ids'),u'type':Js(u'string')})
+ PyJs_Object_231_ = Js({u'description':Js(u'Whether to spawn a traversal pass per a preset. By default all presets are merged.'),u'type':Js(u'boolean'),u'default':Js(False),u'hidden':var.get(u'true')})
+ PyJs_Object_232_ = Js({u'description':Js(u'Options to pass into the parser, or to change parsers (parserOpts.parser)'),u'default':Js(False)})
+ PyJs_Object_233_ = Js({u'description':Js(u'Options to pass into the generator, or to change generators (generatorOpts.generator)'),u'default':Js(False)})
+ PyJs_Object_194_ = Js({u'filename':PyJs_Object_195_,u'filenameRelative':PyJs_Object_196_,u'inputSourceMap':PyJs_Object_197_,u'env':PyJs_Object_198_,u'mode':PyJs_Object_200_,u'retainLines':PyJs_Object_201_,u'highlightCode':PyJs_Object_202_,u'suppressDeprecationMessages':PyJs_Object_203_,u'presets':PyJs_Object_204_,u'plugins':PyJs_Object_205_,u'ignore':PyJs_Object_206_,u'only':PyJs_Object_207_,u'code':PyJs_Object_208_,u'metadata':PyJs_Object_209_,u'ast':PyJs_Object_210_,u'extends':PyJs_Object_211_,u'comments':PyJs_Object_212_,u'shouldPrintComment':PyJs_Object_213_,u'wrapPluginVisitorMethod':PyJs_Object_214_,u'compact':PyJs_Object_215_,u'minified':PyJs_Object_216_,u'sourceMap':PyJs_Object_217_,u'sourceMaps':PyJs_Object_218_,u'sourceMapTarget':PyJs_Object_219_,u'sourceFileName':PyJs_Object_220_,u'sourceRoot':PyJs_Object_221_,u'babelrc':PyJs_Object_222_,u'sourceType':PyJs_Object_223_,u'auxiliaryCommentBefore':PyJs_Object_224_,u'auxiliaryCommentAfter':PyJs_Object_225_,u'resolveModuleSource':PyJs_Object_226_,u'getModuleId':PyJs_Object_227_,u'moduleRoot':PyJs_Object_228_,u'moduleIds':PyJs_Object_229_,u'moduleId':PyJs_Object_230_,u'passPerPreset':PyJs_Object_231_,u'parserOpts':PyJs_Object_232_,u'generatorOpts':PyJs_Object_233_})
+ var.get(u'module').put(u'exports', PyJs_Object_194_)
+PyJs_anonymous_193_._set_name(u'anonymous')
+PyJs_Object_234_ = Js({})
+@Js
+def PyJs_anonymous_235_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_config', u'_interopRequireWildcard', u'_parsers', u'require', u'exports', u'module', u'normaliseOptions', u'parsers', u'_config2', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_236_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_236_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_normaliseOptions_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'opt', u'val', u'parser', u'options', u'key'])
+ PyJs_Object_238_ = Js({})
+ var.put(u'options', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else PyJs_Object_238_))
+ for PyJsTemp in var.get(u'options'):
+ var.put(u'key', PyJsTemp)
+ var.put(u'val', var.get(u'options').get(var.get(u'key')))
+ if (var.get(u'val')==var.get(u"null")):
+ continue
+ var.put(u'opt', var.get(u'_config2').get(u'default').get(var.get(u'key')))
+ if (var.get(u'opt') and var.get(u'opt').get(u'alias')):
+ var.put(u'opt', var.get(u'_config2').get(u'default').get(var.get(u'opt').get(u'alias')))
+ if var.get(u'opt').neg():
+ continue
+ var.put(u'parser', var.get(u'parsers').get(var.get(u'opt').get(u'type')))
+ if var.get(u'parser'):
+ var.put(u'val', var.get(u'parser')(var.get(u'val')))
+ var.get(u'options').put(var.get(u'key'), var.get(u'val'))
+ return var.get(u'options')
+ PyJsHoisted_normaliseOptions_.func_name = u'normaliseOptions'
+ var.put(u'normaliseOptions', PyJsHoisted_normaliseOptions_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_237_ = Js({})
+ var.put(u'newObj', PyJs_Object_237_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'config', var.get(u'undefined'))
+ var.get(u'exports').put(u'normaliseOptions', var.get(u'normaliseOptions'))
+ var.put(u'_parsers', var.get(u'require')(Js(u'./parsers')))
+ var.put(u'parsers', var.get(u'_interopRequireWildcard')(var.get(u'_parsers')))
+ var.put(u'_config', var.get(u'require')(Js(u'./config')))
+ var.put(u'_config2', var.get(u'_interopRequireDefault')(var.get(u'_config')))
+ pass
+ pass
+ var.get(u'exports').put(u'config', var.get(u'_config2').get(u'default'))
+ pass
+PyJs_anonymous_235_._set_name(u'anonymous')
+PyJs_Object_239_ = Js({u'./config':Js(16.0),u'./parsers':Js(19.0)})
+@Js
+def PyJs_anonymous_240_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_241_(process, this, arguments, var=var):
+ var = Scope({u'process':process, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'_resolve', u'_plugin2', u'_plugin3', u'_interopRequireDefault', u'_merge', u'_clone', u'_getIterator2', u'_getIterator3', u'_path2', u'_typeof2', u'_typeof3', u'process', u'_node', u'_removed', u'_objectWithoutProperties2', u'_classCallCheck3', u'_classCallCheck2', u'_babelMessages', u'_stringify2', u'OptionManager', u'_interopRequireWildcard', u'_assign', u'_config3', u'_config2', u'_buildConfigChain2', u'_merge2', u'_assign2', u'_resolve2', u'_index', u'messages', u'_cloneDeepWith2', u'_clone2', u'_stringify', u'_objectWithoutProperties3', u'context', u'_removed2', u'_path', u'_cloneDeepWith', u'_buildConfigChain'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_243_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_243_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_242_ = Js({})
+ var.put(u'newObj', PyJs_Object_242_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_objectWithoutProperties2', var.get(u'require')(Js(u'babel-runtime/helpers/objectWithoutProperties')))
+ var.put(u'_objectWithoutProperties3', var.get(u'_interopRequireDefault')(var.get(u'_objectWithoutProperties2')))
+ var.put(u'_stringify', var.get(u'require')(Js(u'babel-runtime/core-js/json/stringify')))
+ var.put(u'_stringify2', var.get(u'_interopRequireDefault')(var.get(u'_stringify')))
+ var.put(u'_assign', var.get(u'require')(Js(u'babel-runtime/core-js/object/assign')))
+ var.put(u'_assign2', var.get(u'_interopRequireDefault')(var.get(u'_assign')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_typeof2', var.get(u'require')(Js(u'babel-runtime/helpers/typeof')))
+ var.put(u'_typeof3', var.get(u'_interopRequireDefault')(var.get(u'_typeof2')))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_node', var.get(u'require')(Js(u'../../../api/node')))
+ var.put(u'context', var.get(u'_interopRequireWildcard')(var.get(u'_node')))
+ var.put(u'_plugin2', var.get(u'require')(Js(u'../../plugin')))
+ var.put(u'_plugin3', var.get(u'_interopRequireDefault')(var.get(u'_plugin2')))
+ var.put(u'_babelMessages', var.get(u'require')(Js(u'babel-messages')))
+ var.put(u'messages', var.get(u'_interopRequireWildcard')(var.get(u'_babelMessages')))
+ var.put(u'_index', var.get(u'require')(Js(u'./index')))
+ var.put(u'_resolve', var.get(u'require')(Js(u'../../../helpers/resolve')))
+ var.put(u'_resolve2', var.get(u'_interopRequireDefault')(var.get(u'_resolve')))
+ var.put(u'_cloneDeepWith', var.get(u'require')(Js(u'lodash/cloneDeepWith')))
+ var.put(u'_cloneDeepWith2', var.get(u'_interopRequireDefault')(var.get(u'_cloneDeepWith')))
+ var.put(u'_clone', var.get(u'require')(Js(u'lodash/clone')))
+ var.put(u'_clone2', var.get(u'_interopRequireDefault')(var.get(u'_clone')))
+ var.put(u'_merge', var.get(u'require')(Js(u'../../../helpers/merge')))
+ var.put(u'_merge2', var.get(u'_interopRequireDefault')(var.get(u'_merge')))
+ var.put(u'_config2', var.get(u'require')(Js(u'./config')))
+ var.put(u'_config3', var.get(u'_interopRequireDefault')(var.get(u'_config2')))
+ var.put(u'_removed', var.get(u'require')(Js(u'./removed')))
+ var.put(u'_removed2', var.get(u'_interopRequireDefault')(var.get(u'_removed')))
+ var.put(u'_buildConfigChain', var.get(u'require')(Js(u'./build-config-chain')))
+ var.put(u'_buildConfigChain2', var.get(u'_interopRequireDefault')(var.get(u'_buildConfigChain')))
+ var.put(u'_path', var.get(u'require')(Js(u'path')))
+ var.put(u'_path2', var.get(u'_interopRequireDefault')(var.get(u'_path')))
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_244_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'OptionManager'])
+ @Js
+ def PyJsHoisted_OptionManager_(log, this, arguments, var=var):
+ var = Scope({u'this':this, u'log':log, u'arguments':arguments}, var)
+ var.registers([u'log'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'OptionManager'))
+ var.get(u"this").put(u'resolvedConfigs', Js([]))
+ var.get(u"this").put(u'options', var.get(u'OptionManager').callprop(u'createBareOptions'))
+ var.get(u"this").put(u'log', var.get(u'log'))
+ PyJsHoisted_OptionManager_.func_name = u'OptionManager'
+ var.put(u'OptionManager', PyJsHoisted_OptionManager_)
+ pass
+ @Js
+ def PyJs_memoisePluginContainer_245_(fn, loc, i, alias, this, arguments, var=var):
+ var = Scope({u'loc':loc, u'arguments':arguments, u'alias':alias, u'i':i, u'memoisePluginContainer':PyJs_memoisePluginContainer_245_, u'this':this, u'fn':fn}, var)
+ var.registers([u'_plugin', u'_isArray', u'obj', u'loc', u'i', u'cache', u'alias', u'_i', u'_iterator', u'_ref', u'fn'])
+ #for JS loop
+ var.put(u'_iterator', var.get(u'OptionManager').get(u'memoisedPlugins'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'cache', var.get(u'_ref'))
+ if PyJsStrictEq(var.get(u'cache').get(u'container'),var.get(u'fn')):
+ return var.get(u'cache').get(u'plugin')
+
+ var.put(u'obj', PyJsComma(Js(0.0), Js(None)))
+ if PyJsStrictEq(var.get(u'fn',throw=False).typeof(),Js(u'function')):
+ var.put(u'obj', var.get(u'fn')(var.get(u'context')))
+ else:
+ var.put(u'obj', var.get(u'fn'))
+ if PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'obj',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'obj'))),Js(u'object')):
+ var.put(u'_plugin', var.get(u'_plugin3').get(u'default').create(var.get(u'obj'), var.get(u'alias')))
+ PyJs_Object_246_ = Js({u'container':var.get(u'fn'),u'plugin':var.get(u'_plugin')})
+ var.get(u'OptionManager').get(u'memoisedPlugins').callprop(u'push', PyJs_Object_246_)
+ return var.get(u'_plugin')
+ else:
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(((var.get(u'messages').callprop(u'get', Js(u'pluginNotObject'), var.get(u'loc'), var.get(u'i'), (Js(u'undefined') if PyJsStrictEq(var.get(u'obj',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'obj'))))+var.get(u'loc'))+var.get(u'i'))))
+ raise PyJsTempException
+ PyJs_memoisePluginContainer_245_._set_name(u'memoisePluginContainer')
+ var.get(u'OptionManager').put(u'memoisePluginContainer', PyJs_memoisePluginContainer_245_)
+ @Js
+ def PyJs_createBareOptions_247_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'createBareOptions':PyJs_createBareOptions_247_}, var)
+ var.registers([u'_key', u'opt', u'opts'])
+ PyJs_Object_248_ = Js({})
+ var.put(u'opts', PyJs_Object_248_)
+ for PyJsTemp in var.get(u'_config3').get(u'default'):
+ var.put(u'_key', PyJsTemp)
+ var.put(u'opt', var.get(u'_config3').get(u'default').get(var.get(u'_key')))
+ var.get(u'opts').put(var.get(u'_key'), PyJsComma(Js(0.0),var.get(u'_clone2').get(u'default'))(var.get(u'opt').get(u'default')))
+ return var.get(u'opts')
+ PyJs_createBareOptions_247_._set_name(u'createBareOptions')
+ var.get(u'OptionManager').put(u'createBareOptions', PyJs_createBareOptions_247_)
+ @Js
+ def PyJs_normalisePlugin_249_(plugin, loc, i, alias, this, arguments, var=var):
+ var = Scope({u'loc':loc, u'normalisePlugin':PyJs_normalisePlugin_249_, u'arguments':arguments, u'alias':alias, u'i':i, u'plugin':plugin, u'this':this}, var)
+ var.registers([u'i', u'loc', u'alias', u'plugin'])
+ var.put(u'plugin', (var.get(u'plugin').get(u'default') if var.get(u'plugin').get(u'__esModule') else var.get(u'plugin')))
+ if var.get(u'plugin').instanceof(var.get(u'_plugin3').get(u'default')).neg():
+ if (PyJsStrictEq(var.get(u'plugin',throw=False).typeof(),Js(u'function')) or PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'plugin',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'plugin'))),Js(u'object'))):
+ var.put(u'plugin', var.get(u'OptionManager').callprop(u'memoisePluginContainer', var.get(u'plugin'), var.get(u'loc'), var.get(u'i'), var.get(u'alias')))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(var.get(u'messages').callprop(u'get', Js(u'pluginNotFunction'), var.get(u'loc'), var.get(u'i'), (Js(u'undefined') if PyJsStrictEq(var.get(u'plugin',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'plugin'))))))
+ raise PyJsTempException
+ var.get(u'plugin').callprop(u'init', var.get(u'loc'), var.get(u'i'))
+ return var.get(u'plugin')
+ PyJs_normalisePlugin_249_._set_name(u'normalisePlugin')
+ var.get(u'OptionManager').put(u'normalisePlugin', PyJs_normalisePlugin_249_)
+ @Js
+ def PyJs_normalisePlugins_250_(loc, dirname, plugins, this, arguments, var=var):
+ var = Scope({u'loc':loc, u'this':this, u'normalisePlugins':PyJs_normalisePlugins_250_, u'arguments':arguments, u'plugins':plugins, u'dirname':dirname}, var)
+ var.registers([u'loc', u'dirname', u'plugins'])
+ @Js
+ def PyJs_anonymous_251_(val, i, this, arguments, var=var):
+ var = Scope({u'i':i, u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'val', u'plugin', u'i', u'pluginLoc', u'alias', u'options'])
+ var.put(u'plugin', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'options', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'val').neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Falsy value found in plugins')))
+ raise PyJsTempException
+ if var.get(u'Array').callprop(u'isArray', var.get(u'val')):
+ var.put(u'plugin', var.get(u'val').get(u'0'))
+ var.put(u'options', var.get(u'val').get(u'1'))
+ else:
+ var.put(u'plugin', var.get(u'val'))
+ var.put(u'alias', (var.get(u'plugin') if PyJsStrictEq(var.get(u'plugin',throw=False).typeof(),Js(u'string')) else ((var.get(u'loc')+Js(u'$'))+var.get(u'i'))))
+ if PyJsStrictEq(var.get(u'plugin',throw=False).typeof(),Js(u'string')):
+ var.put(u'pluginLoc', (PyJsComma(Js(0.0),var.get(u'_resolve2').get(u'default'))((Js(u'babel-plugin-')+var.get(u'plugin')), var.get(u'dirname')) or PyJsComma(Js(0.0),var.get(u'_resolve2').get(u'default'))(var.get(u'plugin'), var.get(u'dirname'))))
+ if var.get(u'pluginLoc'):
+ var.put(u'plugin', var.get(u'require')(var.get(u'pluginLoc')))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'ReferenceError').create(var.get(u'messages').callprop(u'get', Js(u'pluginUnknown'), var.get(u'plugin'), var.get(u'loc'), var.get(u'i'), var.get(u'dirname'))))
+ raise PyJsTempException
+ var.put(u'plugin', var.get(u'OptionManager').callprop(u'normalisePlugin', var.get(u'plugin'), var.get(u'loc'), var.get(u'i'), var.get(u'alias')))
+ return Js([var.get(u'plugin'), var.get(u'options')])
+ PyJs_anonymous_251_._set_name(u'anonymous')
+ return var.get(u'plugins').callprop(u'map', PyJs_anonymous_251_)
+ PyJs_normalisePlugins_250_._set_name(u'normalisePlugins')
+ var.get(u'OptionManager').put(u'normalisePlugins', PyJs_normalisePlugins_250_)
+ @Js
+ def PyJs_mergeOptions_252_(_ref2, this, arguments, var=var):
+ var = Scope({u'this':this, u'mergeOptions':PyJs_mergeOptions_252_, u'_ref2':_ref2, u'arguments':arguments}, var)
+ var.registers([u'loc', u'presetConfigErr', u'dirname', u'option', u'_this', u'unknownOptErr', u'_ref2', u'extendingOpts', u'alias', u'_key2', u'rawOpts', u'opts'])
+ var.put(u'_this', var.get(u"this"))
+ var.put(u'rawOpts', var.get(u'_ref2').get(u'options'))
+ var.put(u'extendingOpts', var.get(u'_ref2').get(u'extending'))
+ var.put(u'alias', var.get(u'_ref2').get(u'alias'))
+ var.put(u'loc', var.get(u'_ref2').get(u'loc'))
+ var.put(u'dirname', var.get(u'_ref2').get(u'dirname'))
+ var.put(u'alias', (var.get(u'alias') or Js(u'foreign')))
+ if var.get(u'rawOpts').neg():
+ return var.get('undefined')
+ if (PyJsStrictNeq((Js(u'undefined') if PyJsStrictEq(var.get(u'rawOpts',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'rawOpts'))),Js(u'object')) or var.get(u'Array').callprop(u'isArray', var.get(u'rawOpts'))):
+ var.get(u"this").get(u'log').callprop(u'error', (Js(u'Invalid options type for ')+var.get(u'alias')), var.get(u'TypeError'))
+ @Js
+ def PyJs_anonymous_253_(val, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'val'])
+ if var.get(u'val').instanceof(var.get(u'_plugin3').get(u'default')):
+ return var.get(u'val')
+ PyJs_anonymous_253_._set_name(u'anonymous')
+ var.put(u'opts', PyJsComma(Js(0.0),var.get(u'_cloneDeepWith2').get(u'default'))(var.get(u'rawOpts'), PyJs_anonymous_253_))
+ var.put(u'dirname', (var.get(u'dirname') or var.get(u'process').callprop(u'cwd')))
+ var.put(u'loc', (var.get(u'loc') or var.get(u'alias')))
+ for PyJsTemp in var.get(u'opts'):
+ var.put(u'_key2', PyJsTemp)
+ var.put(u'option', var.get(u'_config3').get(u'default').get(var.get(u'_key2')))
+ if (var.get(u'option').neg() and var.get(u"this").get(u'log')):
+ if var.get(u'_removed2').get(u'default').get(var.get(u'_key2')):
+ var.get(u"this").get(u'log').callprop(u'error', (((((Js(u'Using removed Babel 5 option: ')+var.get(u'alias'))+Js(u'.'))+var.get(u'_key2'))+Js(u' - '))+var.get(u'_removed2').get(u'default').get(var.get(u'_key2')).get(u'message')), var.get(u'ReferenceError'))
+ else:
+ var.put(u'unknownOptErr', ((((Js(u'Unknown option: ')+var.get(u'alias'))+Js(u'.'))+var.get(u'_key2'))+Js(u'. Check out http://babeljs.io/docs/usage/options/ for more information about options.')))
+ var.put(u'presetConfigErr', Js(u"A common cause of this error is the presence of a configuration options object without the corresponding preset name. Example:\n\nInvalid:\n `{ presets: [{option: value}] }`\nValid:\n `{ presets: [['presetName', {option: value}]] }`\n\nFor more detailed information on preset configuration, please see http://babeljs.io/docs/plugins/#pluginpresets-options."))
+ var.get(u"this").get(u'log').callprop(u'error', ((var.get(u'unknownOptErr')+Js(u'\n\n'))+var.get(u'presetConfigErr')), var.get(u'ReferenceError'))
+ PyJsComma(Js(0.0),var.get(u'_index').get(u'normaliseOptions'))(var.get(u'opts'))
+ if var.get(u'opts').get(u'plugins'):
+ var.get(u'opts').put(u'plugins', var.get(u'OptionManager').callprop(u'normalisePlugins', var.get(u'loc'), var.get(u'dirname'), var.get(u'opts').get(u'plugins')))
+ if var.get(u'opts').get(u'presets'):
+ if var.get(u'opts').get(u'passPerPreset'):
+ @Js
+ def PyJs_anonymous_254_(preset, presetLoc, this, arguments, var=var):
+ var = Scope({u'presetLoc':presetLoc, u'this':this, u'preset':preset, u'arguments':arguments}, var)
+ var.registers([u'presetLoc', u'preset'])
+ PyJs_Object_255_ = Js({u'options':var.get(u'preset'),u'extending':var.get(u'preset'),u'alias':var.get(u'presetLoc'),u'loc':var.get(u'presetLoc'),u'dirname':var.get(u'dirname')})
+ var.get(u'_this').callprop(u'mergeOptions', PyJs_Object_255_)
+ PyJs_anonymous_254_._set_name(u'anonymous')
+ var.get(u'opts').put(u'presets', var.get(u"this").callprop(u'resolvePresets', var.get(u'opts').get(u'presets'), var.get(u'dirname'), PyJs_anonymous_254_))
+ else:
+ var.get(u"this").callprop(u'mergePresets', var.get(u'opts').get(u'presets'), var.get(u'dirname'))
+ var.get(u'opts').delete(u'presets')
+ if PyJsStrictEq(var.get(u'rawOpts'),var.get(u'extendingOpts')):
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'extendingOpts'), var.get(u'opts'))
+ else:
+ PyJsComma(Js(0.0),var.get(u'_merge2').get(u'default'))((var.get(u'extendingOpts') or var.get(u"this").get(u'options')), var.get(u'opts'))
+ PyJs_mergeOptions_252_._set_name(u'mergeOptions')
+ var.get(u'OptionManager').get(u'prototype').put(u'mergeOptions', PyJs_mergeOptions_252_)
+ @Js
+ def PyJs_mergePresets_256_(presets, dirname, this, arguments, var=var):
+ var = Scope({u'this':this, u'mergePresets':PyJs_mergePresets_256_, u'presets':presets, u'dirname':dirname, u'arguments':arguments}, var)
+ var.registers([u'presets', u'dirname', u'_this2'])
+ var.put(u'_this2', var.get(u"this"))
+ @Js
+ def PyJs_anonymous_257_(presetOpts, presetLoc, this, arguments, var=var):
+ var = Scope({u'presetLoc':presetLoc, u'this':this, u'presetOpts':presetOpts, u'arguments':arguments}, var)
+ var.registers([u'presetLoc', u'presetOpts'])
+ PyJs_Object_258_ = Js({u'options':var.get(u'presetOpts'),u'alias':var.get(u'presetLoc'),u'loc':var.get(u'presetLoc'),u'dirname':var.get(u'_path2').get(u'default').callprop(u'dirname', (var.get(u'presetLoc') or Js(u'')))})
+ var.get(u'_this2').callprop(u'mergeOptions', PyJs_Object_258_)
+ PyJs_anonymous_257_._set_name(u'anonymous')
+ var.get(u"this").callprop(u'resolvePresets', var.get(u'presets'), var.get(u'dirname'), PyJs_anonymous_257_)
+ PyJs_mergePresets_256_._set_name(u'mergePresets')
+ var.get(u'OptionManager').get(u'prototype').put(u'mergePresets', PyJs_mergePresets_256_)
+ @Js
+ def PyJs_resolvePresets_259_(presets, dirname, onResolve, this, arguments, var=var):
+ var = Scope({u'this':this, u'presets':presets, u'onResolve':onResolve, u'arguments':arguments, u'dirname':dirname, u'resolvePresets':PyJs_resolvePresets_259_}, var)
+ var.registers([u'onResolve', u'presets', u'dirname'])
+ @Js
+ def PyJs_anonymous_260_(val, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'val', u'_val', u'matches', u'rest', u'presetLoc', u'presetPath', u'_val2', u'__esModule', u'options', u'orgName'])
+ var.put(u'options', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'Array').callprop(u'isArray', var.get(u'val')):
+ if (var.get(u'val').get(u'length')>Js(2.0)):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(((Js(u'Unexpected extra options ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'val').callprop(u'slice', Js(2.0))))+Js(u' passed to preset.'))))
+ raise PyJsTempException
+ var.put(u'_val', var.get(u'val'))
+ var.put(u'val', var.get(u'_val').get(u'0'))
+ var.put(u'options', var.get(u'_val').get(u'1'))
+ var.put(u'presetLoc', PyJsComma(Js(0.0), Js(None)))
+ try:
+ if PyJsStrictEq(var.get(u'val',throw=False).typeof(),Js(u'string')):
+ var.put(u'presetLoc', (PyJsComma(Js(0.0),var.get(u'_resolve2').get(u'default'))((Js(u'babel-preset-')+var.get(u'val')), var.get(u'dirname')) or PyJsComma(Js(0.0),var.get(u'_resolve2').get(u'default'))(var.get(u'val'), var.get(u'dirname'))))
+ if var.get(u'presetLoc').neg():
+ var.put(u'matches', var.get(u'val').callprop(u'match', JsRegExp(u'/^(@[^/]+)\\/(.+)$/')))
+ if var.get(u'matches'):
+ var.put(u'orgName', var.get(u'matches').get(u'1'))
+ var.put(u'presetPath', var.get(u'matches').get(u'2'))
+ var.put(u'val', ((var.get(u'orgName')+Js(u'/babel-preset-'))+var.get(u'presetPath')))
+ var.put(u'presetLoc', PyJsComma(Js(0.0),var.get(u'_resolve2').get(u'default'))(var.get(u'val'), var.get(u'dirname')))
+ if var.get(u'presetLoc').neg():
+ PyJsTempException = JsToPyException(var.get(u'Error').create((((Js(u"Couldn't find preset ")+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'val')))+Js(u' relative to directory '))+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'dirname')))))
+ raise PyJsTempException
+ var.put(u'val', var.get(u'require')(var.get(u'presetLoc')))
+ if (PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'val',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'val'))),Js(u'object')) and var.get(u'val').get(u'__esModule')):
+ if var.get(u'val').get(u'default'):
+ var.put(u'val', var.get(u'val').get(u'default'))
+ else:
+ var.put(u'_val2', var.get(u'val'))
+ var.put(u'__esModule', var.get(u'_val2').get(u'__esModule'))
+ var.put(u'rest', PyJsComma(Js(0.0),var.get(u'_objectWithoutProperties3').get(u'default'))(var.get(u'_val2'), Js([Js(u'__esModule')])))
+ var.put(u'val', var.get(u'rest'))
+ if (PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'val',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'val'))),Js(u'object')) and var.get(u'val').get(u'buildPreset')):
+ var.put(u'val', var.get(u'val').get(u'buildPreset'))
+ if (PyJsStrictNeq(var.get(u'val',throw=False).typeof(),Js(u'function')) and PyJsStrictNeq(var.get(u'options'),var.get(u'undefined'))):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(((((Js(u'Options ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'options')))+Js(u' passed to '))+(var.get(u'presetLoc') or Js(u'a preset')))+Js(u' which does not accept options.'))))
+ raise PyJsTempException
+ if PyJsStrictEq(var.get(u'val',throw=False).typeof(),Js(u'function')):
+ var.put(u'val', var.get(u'val')(var.get(u'context'), var.get(u'options')))
+ if PyJsStrictNeq((Js(u'undefined') if PyJsStrictEq(var.get(u'val',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'val'))),Js(u'object')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(((Js(u'Unsupported preset format: ')+var.get(u'val'))+Js(u'.'))))
+ raise PyJsTempException
+ (var.get(u'onResolve') and var.get(u'onResolve')(var.get(u'val'), var.get(u'presetLoc')))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_49729099 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ if var.get(u'presetLoc'):
+ var.get(u'e').put(u'message', ((Js(u' (While processing preset: ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'presetLoc')))+Js(u')')), u'+')
+ PyJsTempException = JsToPyException(var.get(u'e'))
+ raise PyJsTempException
+ finally:
+ if PyJsHolder_65_49729099 is not None:
+ var.own[u'e'] = PyJsHolder_65_49729099
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_49729099
+ return var.get(u'val')
+ PyJs_anonymous_260_._set_name(u'anonymous')
+ return var.get(u'presets').callprop(u'map', PyJs_anonymous_260_)
+ PyJs_resolvePresets_259_._set_name(u'resolvePresets')
+ var.get(u'OptionManager').get(u'prototype').put(u'resolvePresets', PyJs_resolvePresets_259_)
+ @Js
+ def PyJs_normaliseOptions_261_(this, arguments, var=var):
+ var = Scope({u'this':this, u'normaliseOptions':PyJs_normaliseOptions_261_, u'arguments':arguments}, var)
+ var.registers([u'_key3', u'val', u'option', u'opts'])
+ var.put(u'opts', var.get(u"this").get(u'options'))
+ for PyJsTemp in var.get(u'_config3').get(u'default'):
+ var.put(u'_key3', PyJsTemp)
+ var.put(u'option', var.get(u'_config3').get(u'default').get(var.get(u'_key3')))
+ var.put(u'val', var.get(u'opts').get(var.get(u'_key3')))
+ if (var.get(u'val').neg() and var.get(u'option').get(u'optional')):
+ continue
+ if var.get(u'option').get(u'alias'):
+ var.get(u'opts').put(var.get(u'option').get(u'alias'), (var.get(u'opts').get(var.get(u'option').get(u'alias')) or var.get(u'val')))
+ else:
+ var.get(u'opts').put(var.get(u'_key3'), var.get(u'val'))
+ PyJs_normaliseOptions_261_._set_name(u'normaliseOptions')
+ var.get(u'OptionManager').get(u'prototype').put(u'normaliseOptions', PyJs_normaliseOptions_261_)
+ @Js
+ def PyJs_init_262_(this, arguments, var=var):
+ var = Scope({u'this':this, u'init':PyJs_init_262_, u'arguments':arguments}, var)
+ var.registers([u'_config', u'_isArray2', u'_ref3', u'_i2', u'opts', u'_iterator2'])
+ PyJs_Object_263_ = Js({})
+ var.put(u'opts', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else PyJs_Object_263_))
+ #for JS loop
+ var.put(u'_iterator2', PyJsComma(Js(0.0),var.get(u'_buildConfigChain2').get(u'default'))(var.get(u'opts'), var.get(u"this").get(u'log')))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i2').get(u'value'))
+ var.put(u'_config', var.get(u'_ref3'))
+ var.get(u"this").callprop(u'mergeOptions', var.get(u'_config'))
+
+ var.get(u"this").callprop(u'normaliseOptions', var.get(u'opts'))
+ return var.get(u"this").get(u'options')
+ PyJs_init_262_._set_name(u'init')
+ var.get(u'OptionManager').get(u'prototype').put(u'init', PyJs_init_262_)
+ return var.get(u'OptionManager')
+ PyJs_anonymous_244_._set_name(u'anonymous')
+ var.put(u'OptionManager', PyJs_anonymous_244_())
+ var.get(u'exports').put(u'default', var.get(u'OptionManager'))
+ var.get(u'OptionManager').put(u'memoisedPlugins', Js([]))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+ PyJs_anonymous_241_._set_name(u'anonymous')
+ PyJs_anonymous_241_.callprop(u'call', var.get(u"this"), var.get(u'require')(Js(u'_process')))
+PyJs_anonymous_240_._set_name(u'anonymous')
+PyJs_Object_264_ = Js({u'../../../api/node':Js(6.0),u'../../../helpers/merge':Js(7.0),u'../../../helpers/resolve':Js(9.0),u'../../plugin':Js(25.0),u'./build-config-chain':Js(15.0),u'./config':Js(16.0),u'./index':Js(17.0),u'./removed':Js(20.0),u'_process':Js(531.0),u'babel-messages':Js(57.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/core-js/json/stringify':Js(97.0),u'babel-runtime/core-js/object/assign':Js(100.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-runtime/helpers/objectWithoutProperties':Js(112.0),u'babel-runtime/helpers/typeof':Js(114.0),u'lodash/clone':Js(438.0),u'lodash/cloneDeepWith':Js(440.0),u'path':Js(530.0)})
+@Js
+def PyJs_anonymous_265_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'util', u'exports', u'_interopRequireWildcard', u'require', u'list', u'_util', u'filename', u'_slash', u'booleanString', u'boolean', u'module', u'_slash2', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_267_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_267_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_booleanString_(val, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'val'])
+ return var.get(u'util').callprop(u'booleanify', var.get(u'val'))
+ PyJsHoisted_booleanString_.func_name = u'booleanString'
+ var.put(u'booleanString', PyJsHoisted_booleanString_)
+ @Js
+ def PyJsHoisted_boolean_(val, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'val'])
+ return var.get(u'val').neg().neg()
+ PyJsHoisted_boolean_.func_name = u'boolean'
+ var.put(u'boolean', PyJsHoisted_boolean_)
+ @Js
+ def PyJsHoisted_list_(val, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'val'])
+ return var.get(u'util').callprop(u'list', var.get(u'val'))
+ PyJsHoisted_list_.func_name = u'list'
+ var.put(u'list', PyJsHoisted_list_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_266_ = Js({})
+ var.put(u'newObj', PyJs_Object_266_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'filename', var.get(u'undefined'))
+ var.get(u'exports').put(u'boolean', var.get(u'boolean'))
+ var.get(u'exports').put(u'booleanString', var.get(u'booleanString'))
+ var.get(u'exports').put(u'list', var.get(u'list'))
+ var.put(u'_slash', var.get(u'require')(Js(u'slash')))
+ var.put(u'_slash2', var.get(u'_interopRequireDefault')(var.get(u'_slash')))
+ var.put(u'_util', var.get(u'require')(Js(u'../../../util')))
+ var.put(u'util', var.get(u'_interopRequireWildcard')(var.get(u'_util')))
+ pass
+ pass
+ var.put(u'filename', var.get(u'exports').put(u'filename', var.get(u'_slash2').get(u'default')))
+ pass
+ pass
+ pass
+PyJs_anonymous_265_._set_name(u'anonymous')
+PyJs_Object_268_ = Js({u'../../../util':Js(26.0),u'slash':Js(508.0)})
+@Js
+def PyJs_anonymous_269_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ PyJs_Object_271_ = Js({u'message':Js(u'Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`')})
+ PyJs_Object_272_ = Js({u'message':Js(u'Put the specific transforms you want in the `plugins` option')})
+ PyJs_Object_273_ = Js({u'message':Js(u'This is not a necessary option in Babel 6')})
+ PyJs_Object_274_ = Js({u'message':Js(u'Put the specific transforms you want in the `plugins` option')})
+ PyJs_Object_275_ = Js({u'message':Js(u'Use the `external-helpers` plugin instead. Check out http://babeljs.io/docs/plugins/external-helpers/')})
+ PyJs_Object_276_ = Js({u'message':Js(u'')})
+ PyJs_Object_277_ = Js({u'message':Js(u'use the `pragma` option in the `react-jsx` plugin . Check out http://babeljs.io/docs/plugins/transform-react-jsx/')})
+ PyJs_Object_278_ = Js({u'message':Js(u'Specify the `loose` option for the relevant plugin you are using or use a preset that sets the option.')})
+ PyJs_Object_279_ = Js({u'message':Js(u'Not required anymore as this is enabled by default')})
+ PyJs_Object_280_ = Js({u'message':Js(u'Use the corresponding module transform plugin in the `plugins` option. Check out http://babeljs.io/docs/plugins/#modules')})
+ PyJs_Object_281_ = Js({u'message':Js(u'Use the `react-jsx` and `flow-strip-types` plugins to support JSX and Flow. Also check out the react preset http://babeljs.io/docs/plugins/preset-react/')})
+ PyJs_Object_282_ = Js({u'message':Js(u'Put the specific transforms you want in the `plugins` option')})
+ PyJs_Object_283_ = Js({u'message':Js(u'Use the `sourceMapTarget` option')})
+ PyJs_Object_284_ = Js({u'message':Js(u'Check out the corresponding stage-x presets http://babeljs.io/docs/plugins/#presets')})
+ PyJs_Object_285_ = Js({u'message':Js(u'Put the specific transforms you want in the `plugins` option')})
+ PyJs_Object_270_ = Js({u'auxiliaryComment':PyJs_Object_271_,u'blacklist':PyJs_Object_272_,u'breakConfig':PyJs_Object_273_,u'experimental':PyJs_Object_274_,u'externalHelpers':PyJs_Object_275_,u'extra':PyJs_Object_276_,u'jsxPragma':PyJs_Object_277_,u'loose':PyJs_Object_278_,u'metadataUsedHelpers':PyJs_Object_279_,u'modules':PyJs_Object_280_,u'nonStandard':PyJs_Object_281_,u'optional':PyJs_Object_282_,u'sourceMapName':PyJs_Object_283_,u'stage':PyJs_Object_284_,u'whitelist':PyJs_Object_285_})
+ var.get(u'module').put(u'exports', PyJs_Object_270_)
+PyJs_anonymous_269_._set_name(u'anonymous')
+PyJs_Object_286_ = Js({})
+@Js
+def PyJs_anonymous_287_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_plugin', u'exports', u'_plugin2', u'require', u'module', u'_sortBy2', u'_interopRequireDefault', u'_sortBy'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_288_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_288_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_plugin', var.get(u'require')(Js(u'../plugin')))
+ var.put(u'_plugin2', var.get(u'_interopRequireDefault')(var.get(u'_plugin')))
+ var.put(u'_sortBy', var.get(u'require')(Js(u'lodash/sortBy')))
+ var.put(u'_sortBy2', var.get(u'_interopRequireDefault')(var.get(u'_sortBy')))
+ pass
+ @Js
+ def PyJs_exit_292_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'exit':PyJs_exit_292_, u'arguments':arguments}, var)
+ var.registers([u'node', u'hasChange', u'_ref', u'bodyNode', u'i'])
+ var.put(u'node', var.get(u'_ref').get(u'node'))
+ var.put(u'hasChange', Js(False))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else PyJs_Object_316_))
+ var.get(u'opts').put(u'code', Js(False))
+ var.get(u'opts').put(u'mode', Js(u'lint'))
+ return var.get(u"this").callprop(u'transform', var.get(u'code'), var.get(u'opts'))
+ PyJs_lint_315_._set_name(u'lint')
+ var.get(u'Pipeline').get(u'prototype').put(u'lint', PyJs_lint_315_)
+ @Js
+ def PyJs_pretransform_317_(code, opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'pretransform':PyJs_pretransform_317_, u'code':code, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'code', u'opts', u'file'])
+ var.put(u'file', var.get(u'_file2').get(u'default').create(var.get(u'opts'), var.get(u"this")))
+ @Js
+ def PyJs_anonymous_318_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'file').callprop(u'addCode', var.get(u'code'))
+ var.get(u'file').callprop(u'parseCode', var.get(u'code'))
+ return var.get(u'file')
+ PyJs_anonymous_318_._set_name(u'anonymous')
+ return var.get(u'file').callprop(u'wrap', var.get(u'code'), PyJs_anonymous_318_)
+ PyJs_pretransform_317_._set_name(u'pretransform')
+ var.get(u'Pipeline').get(u'prototype').put(u'pretransform', PyJs_pretransform_317_)
+ @Js
+ def PyJs_transform_319_(code, opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments, u'opts':opts, u'transform':PyJs_transform_319_}, var)
+ var.registers([u'code', u'opts', u'file'])
+ var.put(u'file', var.get(u'_file2').get(u'default').create(var.get(u'opts'), var.get(u"this")))
+ @Js
+ def PyJs_anonymous_320_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'file').callprop(u'addCode', var.get(u'code'))
+ var.get(u'file').callprop(u'parseCode', var.get(u'code'))
+ return var.get(u'file').callprop(u'transform')
+ PyJs_anonymous_320_._set_name(u'anonymous')
+ return var.get(u'file').callprop(u'wrap', var.get(u'code'), PyJs_anonymous_320_)
+ PyJs_transform_319_._set_name(u'transform')
+ var.get(u'Pipeline').get(u'prototype').put(u'transform', PyJs_transform_319_)
+ @Js
+ def PyJs_analyse_321_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'analyse':PyJs_analyse_321_, u'arguments':arguments}, var)
+ var.registers([u'visitor', u'code', u'opts'])
+ PyJs_Object_322_ = Js({})
+ var.put(u'opts', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else PyJs_Object_322_))
+ var.put(u'visitor', var.get(u'arguments').get(u'2'))
+ var.get(u'opts').put(u'code', Js(False))
+ if var.get(u'visitor'):
+ var.get(u'opts').put(u'plugins', (var.get(u'opts').get(u'plugins') or Js([])))
+ PyJs_Object_323_ = Js({u'visitor':var.get(u'visitor')})
+ var.get(u'opts').get(u'plugins').callprop(u'push', var.get(u'_plugin2').get(u'default').create(PyJs_Object_323_))
+ return var.get(u"this").callprop(u'transform', var.get(u'code'), var.get(u'opts')).get(u'metadata')
+ PyJs_analyse_321_._set_name(u'analyse')
+ var.get(u'Pipeline').get(u'prototype').put(u'analyse', PyJs_analyse_321_)
+ @Js
+ def PyJs_transformFromAst_324_(ast, code, opts, this, arguments, var=var):
+ var = Scope({u'code':code, u'ast':ast, u'this':this, u'transformFromAst':PyJs_transformFromAst_324_, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'code', u'opts', u'file', u'ast'])
+ var.put(u'ast', PyJsComma(Js(0.0),var.get(u'_normalizeAst2').get(u'default'))(var.get(u'ast')))
+ var.put(u'file', var.get(u'_file2').get(u'default').create(var.get(u'opts'), var.get(u"this")))
+ @Js
+ def PyJs_anonymous_325_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'file').callprop(u'addCode', var.get(u'code'))
+ var.get(u'file').callprop(u'addAst', var.get(u'ast'))
+ return var.get(u'file').callprop(u'transform')
+ PyJs_anonymous_325_._set_name(u'anonymous')
+ return var.get(u'file').callprop(u'wrap', var.get(u'code'), PyJs_anonymous_325_)
+ PyJs_transformFromAst_324_._set_name(u'transformFromAst')
+ var.get(u'Pipeline').get(u'prototype').put(u'transformFromAst', PyJs_transformFromAst_324_)
+ return var.get(u'Pipeline')
+ PyJs_anonymous_314_._set_name(u'anonymous')
+ var.put(u'Pipeline', PyJs_anonymous_314_())
+ var.get(u'exports').put(u'default', var.get(u'Pipeline'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_312_._set_name(u'anonymous')
+PyJs_Object_326_ = Js({u'../helpers/normalize-ast':Js(8.0),u'./file':Js(12.0),u'./plugin':Js(25.0),u'babel-runtime/helpers/classCallCheck':Js(110.0)})
+@Js
+def PyJs_anonymous_327_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_store', u'_inherits3', u'_inherits2', u'require', u'_file6', u'_possibleConstructorReturn3', u'_possibleConstructorReturn2', u'module', u'_file5', u'_store2', u'PluginPass', u'_interopRequireDefault', u'_classCallCheck3', u'_classCallCheck2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_328_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_328_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_possibleConstructorReturn2', var.get(u'require')(Js(u'babel-runtime/helpers/possibleConstructorReturn')))
+ var.put(u'_possibleConstructorReturn3', var.get(u'_interopRequireDefault')(var.get(u'_possibleConstructorReturn2')))
+ var.put(u'_inherits2', var.get(u'require')(Js(u'babel-runtime/helpers/inherits')))
+ var.put(u'_inherits3', var.get(u'_interopRequireDefault')(var.get(u'_inherits2')))
+ var.put(u'_store', var.get(u'require')(Js(u'../store')))
+ var.put(u'_store2', var.get(u'_interopRequireDefault')(var.get(u'_store')))
+ var.put(u'_file5', var.get(u'require')(Js(u'./file')))
+ var.put(u'_file6', var.get(u'_interopRequireDefault')(var.get(u'_file5')))
+ pass
+ @Js
+ def PyJs_anonymous_329_(_Store, this, arguments, var=var):
+ var = Scope({u'this':this, u'_Store':_Store, u'arguments':arguments}, var)
+ var.registers([u'PluginPass', u'_Store'])
+ @Js
+ def PyJsHoisted_PluginPass_(file, plugin, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'file':file, u'plugin':plugin}, var)
+ var.registers([u'file', u'options', u'_this', u'plugin'])
+ PyJs_Object_330_ = Js({})
+ var.put(u'options', (var.get(u'arguments').get(u'2') if ((var.get(u'arguments').get(u'length')>Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else PyJs_Object_330_))
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'PluginPass'))
+ var.put(u'_this', PyJsComma(Js(0.0),var.get(u'_possibleConstructorReturn3').get(u'default'))(var.get(u"this"), var.get(u'_Store').callprop(u'call', var.get(u"this"))))
+ var.get(u'_this').put(u'plugin', var.get(u'plugin'))
+ var.get(u'_this').put(u'key', var.get(u'plugin').get(u'key'))
+ var.get(u'_this').put(u'file', var.get(u'file'))
+ var.get(u'_this').put(u'opts', var.get(u'options'))
+ return var.get(u'_this')
+ PyJsHoisted_PluginPass_.func_name = u'PluginPass'
+ var.put(u'PluginPass', PyJsHoisted_PluginPass_)
+ PyJsComma(Js(0.0),var.get(u'_inherits3').get(u'default'))(var.get(u'PluginPass'), var.get(u'_Store'))
+ pass
+ @Js
+ def PyJs_addHelper_331_(this, arguments, var=var):
+ var = Scope({u'this':this, u'addHelper':PyJs_addHelper_331_, u'arguments':arguments}, var)
+ var.registers([u'_file'])
+ pass
+ return var.put(u'_file', var.get(u"this").get(u'file')).get(u'addHelper').callprop(u'apply', var.get(u'_file'), var.get(u'arguments'))
+ PyJs_addHelper_331_._set_name(u'addHelper')
+ var.get(u'PluginPass').get(u'prototype').put(u'addHelper', PyJs_addHelper_331_)
+ @Js
+ def PyJs_addImport_332_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'addImport':PyJs_addImport_332_}, var)
+ var.registers([u'_file2'])
+ pass
+ return var.put(u'_file2', var.get(u"this").get(u'file')).get(u'addImport').callprop(u'apply', var.get(u'_file2'), var.get(u'arguments'))
+ PyJs_addImport_332_._set_name(u'addImport')
+ var.get(u'PluginPass').get(u'prototype').put(u'addImport', PyJs_addImport_332_)
+ @Js
+ def PyJs_getModuleName_333_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getModuleName':PyJs_getModuleName_333_, u'arguments':arguments}, var)
+ var.registers([u'_file3'])
+ pass
+ return var.put(u'_file3', var.get(u"this").get(u'file')).get(u'getModuleName').callprop(u'apply', var.get(u'_file3'), var.get(u'arguments'))
+ PyJs_getModuleName_333_._set_name(u'getModuleName')
+ var.get(u'PluginPass').get(u'prototype').put(u'getModuleName', PyJs_getModuleName_333_)
+ @Js
+ def PyJs_buildCodeFrameError_334_(this, arguments, var=var):
+ var = Scope({u'this':this, u'buildCodeFrameError':PyJs_buildCodeFrameError_334_, u'arguments':arguments}, var)
+ var.registers([u'_file4'])
+ pass
+ return var.put(u'_file4', var.get(u"this").get(u'file')).get(u'buildCodeFrameError').callprop(u'apply', var.get(u'_file4'), var.get(u'arguments'))
+ PyJs_buildCodeFrameError_334_._set_name(u'buildCodeFrameError')
+ var.get(u'PluginPass').get(u'prototype').put(u'buildCodeFrameError', PyJs_buildCodeFrameError_334_)
+ return var.get(u'PluginPass')
+ PyJs_anonymous_329_._set_name(u'anonymous')
+ var.put(u'PluginPass', PyJs_anonymous_329_(var.get(u'_store2').get(u'default')))
+ var.get(u'exports').put(u'default', var.get(u'PluginPass'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_327_._set_name(u'anonymous')
+PyJs_Object_335_ = Js({u'../store':Js(10.0),u'./file':Js(12.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-runtime/helpers/inherits':Js(111.0),u'babel-runtime/helpers/possibleConstructorReturn':Js(113.0)})
+@Js
+def PyJs_anonymous_336_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_store', u'module', u'_clone', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'_babelTraverse', u'_possibleConstructorReturn3', u'_possibleConstructorReturn2', u'_store2', u'_optionManager2', u'_classCallCheck3', u'_classCallCheck2', u'_optionManager', u'exports', u'_babelTraverse2', u'_interopRequireWildcard', u'Plugin', u'_inherits3', u'_inherits2', u'_assign', u'_assign2', u'require', u'messages', u'GLOBAL_VISITOR_PROPS', u'_clone2', u'_babelMessages'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_338_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_338_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_337_ = Js({})
+ var.put(u'newObj', PyJs_Object_337_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_possibleConstructorReturn2', var.get(u'require')(Js(u'babel-runtime/helpers/possibleConstructorReturn')))
+ var.put(u'_possibleConstructorReturn3', var.get(u'_interopRequireDefault')(var.get(u'_possibleConstructorReturn2')))
+ var.put(u'_inherits2', var.get(u'require')(Js(u'babel-runtime/helpers/inherits')))
+ var.put(u'_inherits3', var.get(u'_interopRequireDefault')(var.get(u'_inherits2')))
+ var.put(u'_optionManager', var.get(u'require')(Js(u'./file/options/option-manager')))
+ var.put(u'_optionManager2', var.get(u'_interopRequireDefault')(var.get(u'_optionManager')))
+ var.put(u'_babelMessages', var.get(u'require')(Js(u'babel-messages')))
+ var.put(u'messages', var.get(u'_interopRequireWildcard')(var.get(u'_babelMessages')))
+ var.put(u'_store', var.get(u'require')(Js(u'../store')))
+ var.put(u'_store2', var.get(u'_interopRequireDefault')(var.get(u'_store')))
+ var.put(u'_babelTraverse', var.get(u'require')(Js(u'babel-traverse')))
+ var.put(u'_babelTraverse2', var.get(u'_interopRequireDefault')(var.get(u'_babelTraverse')))
+ var.put(u'_assign', var.get(u'require')(Js(u'lodash/assign')))
+ var.put(u'_assign2', var.get(u'_interopRequireDefault')(var.get(u'_assign')))
+ var.put(u'_clone', var.get(u'require')(Js(u'lodash/clone')))
+ var.put(u'_clone2', var.get(u'_interopRequireDefault')(var.get(u'_clone')))
+ pass
+ pass
+ var.put(u'GLOBAL_VISITOR_PROPS', Js([Js(u'enter'), Js(u'exit')]))
+ @Js
+ def PyJs_anonymous_339_(_Store, this, arguments, var=var):
+ var = Scope({u'this':this, u'_Store':_Store, u'arguments':arguments}, var)
+ var.registers([u'_Store', u'Plugin'])
+ @Js
+ def PyJsHoisted_Plugin_(plugin, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key, u'plugin':plugin}, var)
+ var.registers([u'key', u'_this', u'plugin'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'Plugin'))
+ var.put(u'_this', PyJsComma(Js(0.0),var.get(u'_possibleConstructorReturn3').get(u'default'))(var.get(u"this"), var.get(u'_Store').callprop(u'call', var.get(u"this"))))
+ var.get(u'_this').put(u'initialized', Js(False))
+ PyJs_Object_340_ = Js({})
+ var.get(u'_this').put(u'raw', PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(PyJs_Object_340_, var.get(u'plugin')))
+ var.get(u'_this').put(u'key', (var.get(u'_this').callprop(u'take', Js(u'name')) or var.get(u'key')))
+ var.get(u'_this').put(u'manipulateOptions', var.get(u'_this').callprop(u'take', Js(u'manipulateOptions')))
+ var.get(u'_this').put(u'post', var.get(u'_this').callprop(u'take', Js(u'post')))
+ var.get(u'_this').put(u'pre', var.get(u'_this').callprop(u'take', Js(u'pre')))
+ PyJs_Object_341_ = Js({})
+ var.get(u'_this').put(u'visitor', var.get(u'_this').callprop(u'normaliseVisitor', (PyJsComma(Js(0.0),var.get(u'_clone2').get(u'default'))(var.get(u'_this').callprop(u'take', Js(u'visitor'))) or PyJs_Object_341_)))
+ return var.get(u'_this')
+ PyJsHoisted_Plugin_.func_name = u'Plugin'
+ var.put(u'Plugin', PyJsHoisted_Plugin_)
+ PyJsComma(Js(0.0),var.get(u'_inherits3').get(u'default'))(var.get(u'Plugin'), var.get(u'_Store'))
+ pass
+ @Js
+ def PyJs_take_342_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key, u'take':PyJs_take_342_}, var)
+ var.registers([u'key', u'val'])
+ var.put(u'val', var.get(u"this").get(u'raw').get(var.get(u'key')))
+ var.get(u"this").get(u'raw').delete(var.get(u'key'))
+ return var.get(u'val')
+ PyJs_take_342_._set_name(u'take')
+ var.get(u'Plugin').get(u'prototype').put(u'take', PyJs_take_342_)
+ @Js
+ def PyJs_chain_343_(target, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'chain':PyJs_chain_343_, u'target':target, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'fns', u'target', u'key'])
+ if var.get(u'target').get(var.get(u'key')).neg():
+ return var.get(u"this").get(var.get(u'key'))
+ if var.get(u"this").get(var.get(u'key')).neg():
+ return var.get(u'target').get(var.get(u'key'))
+ var.put(u'fns', Js([var.get(u'target').get(var.get(u'key')), var.get(u"this").get(var.get(u'key'))]))
+ @Js
+ def PyJs_anonymous_344_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'_isArray', u'_iterator', u'val', u'_len', u'args', u'ret', u'_key', u'_i', u'_ref', u'fn'])
+ var.put(u'val', PyJsComma(Js(0.0), Js(None)))
+ #for JS loop
+ var.put(u'_len', var.get(u'arguments').get(u'length'))
+ var.put(u'args', var.get(u'Array')(var.get(u'_len')))
+ var.put(u'_key', Js(0.0))
+ while (var.get(u'_key')=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'fn', var.get(u'_ref'))
+ if var.get(u'fn'):
+ var.put(u'ret', var.get(u'fn').callprop(u'apply', var.get(u"this"), var.get(u'args')))
+ if (var.get(u'ret')!=var.get(u"null")):
+ var.put(u'val', var.get(u'ret'))
+
+ return var.get(u'val')
+ PyJs_anonymous_344_._set_name(u'anonymous')
+ return PyJs_anonymous_344_
+ PyJs_chain_343_._set_name(u'chain')
+ var.get(u'Plugin').get(u'prototype').put(u'chain', PyJs_chain_343_)
+ @Js
+ def PyJs_maybeInherit_345_(loc, this, arguments, var=var):
+ var = Scope({u'this':this, u'loc':loc, u'arguments':arguments, u'maybeInherit':PyJs_maybeInherit_345_}, var)
+ var.registers([u'inherits', u'loc'])
+ var.put(u'inherits', var.get(u"this").callprop(u'take', Js(u'inherits')))
+ if var.get(u'inherits').neg():
+ return var.get('undefined')
+ var.put(u'inherits', var.get(u'_optionManager2').get(u'default').callprop(u'normalisePlugin', var.get(u'inherits'), var.get(u'loc'), Js(u'inherits')))
+ var.get(u"this").put(u'manipulateOptions', var.get(u"this").callprop(u'chain', var.get(u'inherits'), Js(u'manipulateOptions')))
+ var.get(u"this").put(u'post', var.get(u"this").callprop(u'chain', var.get(u'inherits'), Js(u'post')))
+ var.get(u"this").put(u'pre', var.get(u"this").callprop(u'chain', var.get(u'inherits'), Js(u'pre')))
+ var.get(u"this").put(u'visitor', var.get(u'_babelTraverse2').get(u'default').get(u'visitors').callprop(u'merge', Js([var.get(u'inherits').get(u'visitor'), var.get(u"this").get(u'visitor')])))
+ PyJs_maybeInherit_345_._set_name(u'maybeInherit')
+ var.get(u'Plugin').get(u'prototype').put(u'maybeInherit', PyJs_maybeInherit_345_)
+ @Js
+ def PyJs_init_346_(loc, i, this, arguments, var=var):
+ var = Scope({u'i':i, u'loc':loc, u'init':PyJs_init_346_, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'loc', u'key'])
+ if var.get(u"this").get(u'initialized'):
+ return var.get('undefined')
+ var.get(u"this").put(u'initialized', var.get(u'true'))
+ var.get(u"this").callprop(u'maybeInherit', var.get(u'loc'))
+ for PyJsTemp in var.get(u"this").get(u'raw'):
+ var.put(u'key', PyJsTemp)
+ PyJsTempException = JsToPyException(var.get(u'Error').create(var.get(u'messages').callprop(u'get', Js(u'pluginInvalidProperty'), var.get(u'loc'), var.get(u'i'), var.get(u'key'))))
+ raise PyJsTempException
+ PyJs_init_346_._set_name(u'init')
+ var.get(u'Plugin').get(u'prototype').put(u'init', PyJs_init_346_)
+ @Js
+ def PyJs_normaliseVisitor_347_(visitor, this, arguments, var=var):
+ var = Scope({u'this':this, u'visitor':visitor, u'normaliseVisitor':PyJs_normaliseVisitor_347_, u'arguments':arguments}, var)
+ var.registers([u'_isArray2', u'visitor', u'_i2', u'_ref2', u'key', u'_iterator2'])
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'GLOBAL_VISITOR_PROPS'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'key', var.get(u'_ref2'))
+ if var.get(u'visitor').get(var.get(u'key')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"Plugins aren't allowed to specify catch-all enter/exit handlers. Please target individual nodes.")))
+ raise PyJsTempException
+
+ var.get(u'_babelTraverse2').get(u'default').callprop(u'explode', var.get(u'visitor'))
+ return var.get(u'visitor')
+ PyJs_normaliseVisitor_347_._set_name(u'normaliseVisitor')
+ var.get(u'Plugin').get(u'prototype').put(u'normaliseVisitor', PyJs_normaliseVisitor_347_)
+ return var.get(u'Plugin')
+ PyJs_anonymous_339_._set_name(u'anonymous')
+ var.put(u'Plugin', PyJs_anonymous_339_(var.get(u'_store2').get(u'default')))
+ var.get(u'exports').put(u'default', var.get(u'Plugin'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_336_._set_name(u'anonymous')
+PyJs_Object_348_ = Js({u'../store':Js(10.0),u'./file/options/option-manager':Js(18.0),u'babel-messages':Js(57.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-runtime/helpers/inherits':Js(111.0),u'babel-runtime/helpers/possibleConstructorReturn':Js(113.0),u'babel-traverse':Js(225.0),u'lodash/assign':Js(435.0),u'lodash/clone':Js(438.0)})
+@Js
+def PyJs_anonymous_349_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_shouldIgnore', u'_startsWith', u'module', u'_isString2', u'_slash2', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'_isBoolean', u'_isRegExp2', u'shouldIgnore', u'_slash', u'booleanify', u'_isRegExp', u'_minimatch2', u'exports', u'_escapeRegExp2', u'_minimatch', u'_includes2', u'_util', u'canCompile', u'_path2', u'arrayify', u'_escapeRegExp', u'_isString', u'_startsWith2', u'list', u'regexify', u'_includes', u'require', u'_isBoolean2', u'_path'])
+ @Js
+ def PyJsHoisted__shouldIgnore_(pattern, filename, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'arguments':arguments, u'filename':filename}, var)
+ var.registers([u'pattern', u'filename'])
+ if PyJsStrictEq(var.get(u'pattern',throw=False).typeof(),Js(u'function')):
+ return var.get(u'pattern')(var.get(u'filename'))
+ else:
+ return var.get(u'pattern').callprop(u'test', var.get(u'filename'))
+ PyJsHoisted__shouldIgnore_.func_name = u'_shouldIgnore'
+ var.put(u'_shouldIgnore', PyJsHoisted__shouldIgnore_)
+ @Js
+ def PyJsHoisted_shouldIgnore_(filename, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'filename':filename}, var)
+ var.registers([u'_isArray', u'_pattern', u'_iterator', u'_isArray2', u'pattern', u'_i2', u'_ref2', u'ignore', u'only', u'_i', u'_ref', u'filename', u'_iterator2'])
+ var.put(u'ignore', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else Js([])))
+ var.put(u'only', var.get(u'arguments').get(u'2'))
+ var.put(u'filename', var.get(u'filename').callprop(u'replace', JsRegExp(u'/\\\\/g'), Js(u'/')))
+ if var.get(u'only'):
+ #for JS loop
+ var.put(u'_iterator', var.get(u'only'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'pattern', var.get(u'_ref'))
+ if var.get(u'_shouldIgnore')(var.get(u'pattern'), var.get(u'filename')):
+ return Js(False)
+
+ return var.get(u'true')
+ else:
+ if var.get(u'ignore').get(u'length'):
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'ignore'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'_pattern', var.get(u'_ref2'))
+ if var.get(u'_shouldIgnore')(var.get(u'_pattern'), var.get(u'filename')):
+ return var.get(u'true')
+
+ return Js(False)
+ PyJsHoisted_shouldIgnore_.func_name = u'shouldIgnore'
+ var.put(u'shouldIgnore', PyJsHoisted_shouldIgnore_)
+ @Js
+ def PyJsHoisted_list_(val, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'val'])
+ if var.get(u'val').neg():
+ return Js([])
+ else:
+ if var.get(u'Array').callprop(u'isArray', var.get(u'val')):
+ return var.get(u'val')
+ else:
+ if PyJsStrictEq(var.get(u'val',throw=False).typeof(),Js(u'string')):
+ return var.get(u'val').callprop(u'split', Js(u','))
+ else:
+ return Js([var.get(u'val')])
+ PyJsHoisted_list_.func_name = u'list'
+ var.put(u'list', PyJsHoisted_list_)
+ @Js
+ def PyJsHoisted_regexify_(val, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'regex', u'val'])
+ if var.get(u'val').neg():
+ return var.get(u'RegExp').create(JsRegExp(u'/.^/'))
+ if var.get(u'Array').callprop(u'isArray', var.get(u'val')):
+ var.put(u'val', var.get(u'RegExp').create(var.get(u'val').callprop(u'map', var.get(u'_escapeRegExp2').get(u'default')).callprop(u'join', Js(u'|')), Js(u'i')))
+ if PyJsStrictEq(var.get(u'val',throw=False).typeof(),Js(u'string')):
+ var.put(u'val', PyJsComma(Js(0.0),var.get(u'_slash2').get(u'default'))(var.get(u'val')))
+ if (PyJsComma(Js(0.0),var.get(u'_startsWith2').get(u'default'))(var.get(u'val'), Js(u'./')) or PyJsComma(Js(0.0),var.get(u'_startsWith2').get(u'default'))(var.get(u'val'), Js(u'*/'))):
+ var.put(u'val', var.get(u'val').callprop(u'slice', Js(2.0)))
+ if PyJsComma(Js(0.0),var.get(u'_startsWith2').get(u'default'))(var.get(u'val'), Js(u'**/')):
+ var.put(u'val', var.get(u'val').callprop(u'slice', Js(3.0)))
+ PyJs_Object_355_ = Js({u'nocase':var.get(u'true')})
+ var.put(u'regex', var.get(u'_minimatch2').get(u'default').callprop(u'makeRe', var.get(u'val'), PyJs_Object_355_))
+ return var.get(u'RegExp').create(var.get(u'regex').get(u'source').callprop(u'slice', Js(1.0), (-Js(1.0))), Js(u'i'))
+ if PyJsComma(Js(0.0),var.get(u'_isRegExp2').get(u'default'))(var.get(u'val')):
+ return var.get(u'val')
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'illegal type for regexify')))
+ raise PyJsTempException
+ PyJsHoisted_regexify_.func_name = u'regexify'
+ var.put(u'regexify', PyJsHoisted_regexify_)
+ @Js
+ def PyJsHoisted_booleanify_(val, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'val'])
+ if (PyJsStrictEq(var.get(u'val'),Js(u'true')) or (var.get(u'val')==Js(1.0))):
+ return var.get(u'true')
+ if ((PyJsStrictEq(var.get(u'val'),Js(u'false')) or (var.get(u'val')==Js(0.0))) or var.get(u'val').neg()):
+ return Js(False)
+ return var.get(u'val')
+ PyJsHoisted_booleanify_.func_name = u'booleanify'
+ var.put(u'booleanify', PyJsHoisted_booleanify_)
+ @Js
+ def PyJsHoisted_canCompile_(filename, altExts, this, arguments, var=var):
+ var = Scope({u'this':this, u'altExts':altExts, u'arguments':arguments, u'filename':filename}, var)
+ var.registers([u'ext', u'exts', u'altExts', u'filename'])
+ var.put(u'exts', (var.get(u'altExts') or var.get(u'canCompile').get(u'EXTENSIONS')))
+ var.put(u'ext', var.get(u'_path2').get(u'default').callprop(u'extname', var.get(u'filename')))
+ return PyJsComma(Js(0.0),var.get(u'_includes2').get(u'default'))(var.get(u'exts'), var.get(u'ext'))
+ PyJsHoisted_canCompile_.func_name = u'canCompile'
+ var.put(u'canCompile', PyJsHoisted_canCompile_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_354_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_354_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_arrayify_(val, mapFn, this, arguments, var=var):
+ var = Scope({u'this':this, u'mapFn':mapFn, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'mapFn', u'val'])
+ if var.get(u'val').neg():
+ return Js([])
+ if PyJsComma(Js(0.0),var.get(u'_isBoolean2').get(u'default'))(var.get(u'val')):
+ return var.get(u'arrayify')(Js([var.get(u'val')]), var.get(u'mapFn'))
+ if PyJsComma(Js(0.0),var.get(u'_isString2').get(u'default'))(var.get(u'val')):
+ return var.get(u'arrayify')(var.get(u'list')(var.get(u'val')), var.get(u'mapFn'))
+ if var.get(u'Array').callprop(u'isArray', var.get(u'val')):
+ if var.get(u'mapFn'):
+ var.put(u'val', var.get(u'val').callprop(u'map', var.get(u'mapFn')))
+ return var.get(u'val')
+ return Js([var.get(u'val')])
+ PyJsHoisted_arrayify_.func_name = u'arrayify'
+ var.put(u'arrayify', PyJsHoisted_arrayify_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'inspect', var.get(u'exports').put(u'inherits', var.get(u'undefined')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_util', var.get(u'require')(Js(u'util')))
+ @Js
+ def PyJs_get_351_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_351_}, var)
+ var.registers([])
+ return var.get(u'_util').get(u'inherits')
+ PyJs_get_351_._set_name(u'get')
+ PyJs_Object_350_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_351_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'inherits'), PyJs_Object_350_)
+ @Js
+ def PyJs_get_353_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_353_}, var)
+ var.registers([])
+ return var.get(u'_util').get(u'inspect')
+ PyJs_get_353_._set_name(u'get')
+ PyJs_Object_352_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_353_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'inspect'), PyJs_Object_352_)
+ var.get(u'exports').put(u'canCompile', var.get(u'canCompile'))
+ var.get(u'exports').put(u'list', var.get(u'list'))
+ var.get(u'exports').put(u'regexify', var.get(u'regexify'))
+ var.get(u'exports').put(u'arrayify', var.get(u'arrayify'))
+ var.get(u'exports').put(u'booleanify', var.get(u'booleanify'))
+ var.get(u'exports').put(u'shouldIgnore', var.get(u'shouldIgnore'))
+ var.put(u'_escapeRegExp', var.get(u'require')(Js(u'lodash/escapeRegExp')))
+ var.put(u'_escapeRegExp2', var.get(u'_interopRequireDefault')(var.get(u'_escapeRegExp')))
+ var.put(u'_startsWith', var.get(u'require')(Js(u'lodash/startsWith')))
+ var.put(u'_startsWith2', var.get(u'_interopRequireDefault')(var.get(u'_startsWith')))
+ var.put(u'_isBoolean', var.get(u'require')(Js(u'lodash/isBoolean')))
+ var.put(u'_isBoolean2', var.get(u'_interopRequireDefault')(var.get(u'_isBoolean')))
+ var.put(u'_minimatch', var.get(u'require')(Js(u'minimatch')))
+ var.put(u'_minimatch2', var.get(u'_interopRequireDefault')(var.get(u'_minimatch')))
+ var.put(u'_includes', var.get(u'require')(Js(u'lodash/includes')))
+ var.put(u'_includes2', var.get(u'_interopRequireDefault')(var.get(u'_includes')))
+ var.put(u'_isString', var.get(u'require')(Js(u'lodash/isString')))
+ var.put(u'_isString2', var.get(u'_interopRequireDefault')(var.get(u'_isString')))
+ var.put(u'_isRegExp', var.get(u'require')(Js(u'lodash/isRegExp')))
+ var.put(u'_isRegExp2', var.get(u'_interopRequireDefault')(var.get(u'_isRegExp')))
+ var.put(u'_path', var.get(u'require')(Js(u'path')))
+ var.put(u'_path2', var.get(u'_interopRequireDefault')(var.get(u'_path')))
+ var.put(u'_slash', var.get(u'require')(Js(u'slash')))
+ var.put(u'_slash2', var.get(u'_interopRequireDefault')(var.get(u'_slash')))
+ pass
+ pass
+ var.get(u'canCompile').put(u'EXTENSIONS', Js([Js(u'.js'), Js(u'.jsx'), Js(u'.es6'), Js(u'.es')]))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_349_._set_name(u'anonymous')
+PyJs_Object_356_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'lodash/escapeRegExp':Js(445.0),u'lodash/includes':Js(456.0),u'lodash/isBoolean':Js(461.0),u'lodash/isRegExp':Js(470.0),u'lodash/isString':Js(471.0),u'lodash/startsWith':Js(486.0),u'minimatch':Js(27.0),u'path':Js(530.0),u'slash':Js(508.0),u'util':Js(534.0)})
+@Js
+def PyJs_anonymous_357_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'Minimatch', u'qmark', u'module', u'parse', u'regExpEscape', u'path', u'minimatch', u'reSpecials', u'make', u'twoStarNoDot', u'match', u'exports', u'star', u'plTypes', u'charSet', u'parseNegate', u'twoStarDot', u'expand', u'SUBPARSE', u'globUnescape', u'braceExpand', u'makeRe', u'GLOBSTAR', u'slashSplit', u'filter', u'ext', u'require'])
+ @Js
+ def PyJsHoisted_minimatch_(p, pattern, options, this, arguments, var=var):
+ var = Scope({u'this':this, u'p':p, u'options':options, u'arguments':arguments, u'pattern':pattern}, var)
+ var.registers([u'p', u'options', u'pattern'])
+ if PyJsStrictNeq(var.get(u'pattern',throw=False).typeof(),Js(u'string')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'glob pattern string required')))
+ raise PyJsTempException
+ if var.get(u'options').neg():
+ PyJs_Object_379_ = Js({})
+ var.put(u'options', PyJs_Object_379_)
+ if (var.get(u'options').get(u'nocomment').neg() and PyJsStrictEq(var.get(u'pattern').callprop(u'charAt', Js(0.0)),Js(u'#'))):
+ return Js(False)
+ if PyJsStrictEq(var.get(u'pattern').callprop(u'trim'),Js(u'')):
+ return PyJsStrictEq(var.get(u'p'),Js(u''))
+ return var.get(u'Minimatch').create(var.get(u'pattern'), var.get(u'options')).callprop(u'match', var.get(u'p'))
+ PyJsHoisted_minimatch_.func_name = u'minimatch'
+ var.put(u'minimatch', PyJsHoisted_minimatch_)
+ @Js
+ def PyJsHoisted_globUnescape_(s, this, arguments, var=var):
+ var = Scope({u'this':this, u's':s, u'arguments':arguments}, var)
+ var.registers([u's'])
+ return var.get(u's').callprop(u'replace', JsRegExp(u'/\\\\(.)/g'), Js(u'$1'))
+ PyJsHoisted_globUnescape_.func_name = u'globUnescape'
+ var.put(u'globUnescape', PyJsHoisted_globUnescape_)
+ @Js
+ def PyJsHoisted_makeRe_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'twoStar', u'set', u'flags', u'options', u're'])
+ if (var.get(u"this").get(u'regexp') or PyJsStrictEq(var.get(u"this").get(u'regexp'),Js(False))):
+ return var.get(u"this").get(u'regexp')
+ var.put(u'set', var.get(u"this").get(u'set'))
+ if var.get(u'set').get(u'length').neg():
+ var.get(u"this").put(u'regexp', Js(False))
+ return var.get(u"this").get(u'regexp')
+ var.put(u'options', var.get(u"this").get(u'options'))
+ var.put(u'twoStar', (var.get(u'star') if var.get(u'options').get(u'noglobstar') else (var.get(u'twoStarDot') if var.get(u'options').get(u'dot') else var.get(u'twoStarNoDot'))))
+ var.put(u'flags', (Js(u'i') if var.get(u'options').get(u'nocase') else Js(u'')))
+ @Js
+ def PyJs_anonymous_392_(pattern, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'arguments':arguments}, var)
+ var.registers([u'pattern'])
+ @Js
+ def PyJs_anonymous_393_(p, this, arguments, var=var):
+ var = Scope({u'this':this, u'p':p, u'arguments':arguments}, var)
+ var.registers([u'p'])
+ return (var.get(u'twoStar') if PyJsStrictEq(var.get(u'p'),var.get(u'GLOBSTAR')) else (var.get(u'regExpEscape')(var.get(u'p')) if PyJsStrictEq(var.get(u'p',throw=False).typeof(),Js(u'string')) else var.get(u'p').get(u'_src')))
+ PyJs_anonymous_393_._set_name(u'anonymous')
+ return var.get(u'pattern').callprop(u'map', PyJs_anonymous_393_).callprop(u'join', Js(u'\\/'))
+ PyJs_anonymous_392_._set_name(u'anonymous')
+ var.put(u're', var.get(u'set').callprop(u'map', PyJs_anonymous_392_).callprop(u'join', Js(u'|')))
+ var.put(u're', ((Js(u'^(?:')+var.get(u're'))+Js(u')$')))
+ if var.get(u"this").get(u'negate'):
+ var.put(u're', ((Js(u'^(?!')+var.get(u're'))+Js(u').*$')))
+ try:
+ var.get(u"this").put(u'regexp', var.get(u'RegExp').create(var.get(u're'), var.get(u'flags')))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_6578_58961032 = var.own.get(u'ex')
+ var.force_own_put(u'ex', PyExceptionToJs(PyJsTempException))
+ try:
+ var.get(u"this").put(u'regexp', Js(False))
+ finally:
+ if PyJsHolder_6578_58961032 is not None:
+ var.own[u'ex'] = PyJsHolder_6578_58961032
+ else:
+ del var.own[u'ex']
+ del PyJsHolder_6578_58961032
+ return var.get(u"this").get(u'regexp')
+ PyJsHoisted_makeRe_.func_name = u'makeRe'
+ var.put(u'makeRe', PyJsHoisted_makeRe_)
+ @Js
+ def PyJsHoisted_regExpEscape_(s, this, arguments, var=var):
+ var = Scope({u'this':this, u's':s, u'arguments':arguments}, var)
+ var.registers([u's'])
+ return var.get(u's').callprop(u'replace', JsRegExp(u'/[-[\\]{}()*+?.,\\\\^$|#\\s]/g'), Js(u'\\$&'))
+ PyJsHoisted_regExpEscape_.func_name = u'regExpEscape'
+ var.put(u'regExpEscape', PyJsHoisted_regExpEscape_)
+ @Js
+ def PyJsHoisted_Minimatch_(pattern, options, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'options':options, u'arguments':arguments}, var)
+ var.registers([u'pattern', u'options'])
+ if var.get(u"this").instanceof(var.get(u'Minimatch')).neg():
+ return var.get(u'Minimatch').create(var.get(u'pattern'), var.get(u'options'))
+ if PyJsStrictNeq(var.get(u'pattern',throw=False).typeof(),Js(u'string')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'glob pattern string required')))
+ raise PyJsTempException
+ if var.get(u'options').neg():
+ PyJs_Object_380_ = Js({})
+ var.put(u'options', PyJs_Object_380_)
+ var.put(u'pattern', var.get(u'pattern').callprop(u'trim'))
+ if PyJsStrictNeq(var.get(u'path').get(u'sep'),Js(u'/')):
+ var.put(u'pattern', var.get(u'pattern').callprop(u'split', var.get(u'path').get(u'sep')).callprop(u'join', Js(u'/')))
+ var.get(u"this").put(u'options', var.get(u'options'))
+ var.get(u"this").put(u'set', Js([]))
+ var.get(u"this").put(u'pattern', var.get(u'pattern'))
+ var.get(u"this").put(u'regexp', var.get(u"null"))
+ var.get(u"this").put(u'negate', Js(False))
+ var.get(u"this").put(u'comment', Js(False))
+ var.get(u"this").put(u'empty', Js(False))
+ var.get(u"this").callprop(u'make')
+ PyJsHoisted_Minimatch_.func_name = u'Minimatch'
+ var.put(u'Minimatch', PyJsHoisted_Minimatch_)
+ @Js
+ def PyJsHoisted_make_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'pattern', u'set', u'options'])
+ if var.get(u"this").get(u'_made'):
+ return var.get('undefined')
+ var.put(u'pattern', var.get(u"this").get(u'pattern'))
+ var.put(u'options', var.get(u"this").get(u'options'))
+ if (var.get(u'options').get(u'nocomment').neg() and PyJsStrictEq(var.get(u'pattern').callprop(u'charAt', Js(0.0)),Js(u'#'))):
+ var.get(u"this").put(u'comment', var.get(u'true'))
+ return var.get('undefined')
+ if var.get(u'pattern').neg():
+ var.get(u"this").put(u'empty', var.get(u'true'))
+ return var.get('undefined')
+ var.get(u"this").callprop(u'parseNegate')
+ var.put(u'set', var.get(u"this").put(u'globSet', var.get(u"this").callprop(u'braceExpand')))
+ if var.get(u'options').get(u'debug'):
+ var.get(u"this").put(u'debug', var.get(u'console').get(u'error'))
+ var.get(u"this").callprop(u'debug', var.get(u"this").get(u'pattern'), var.get(u'set'))
+ @Js
+ def PyJs_anonymous_382_(s, this, arguments, var=var):
+ var = Scope({u'this':this, u's':s, u'arguments':arguments}, var)
+ var.registers([u's'])
+ return var.get(u's').callprop(u'split', var.get(u'slashSplit'))
+ PyJs_anonymous_382_._set_name(u'anonymous')
+ var.put(u'set', var.get(u"this").put(u'globParts', var.get(u'set').callprop(u'map', PyJs_anonymous_382_)))
+ var.get(u"this").callprop(u'debug', var.get(u"this").get(u'pattern'), var.get(u'set'))
+ @Js
+ def PyJs_anonymous_383_(s, si, set, this, arguments, var=var):
+ var = Scope({u'this':this, u's':s, u'set':set, u'si':si, u'arguments':arguments}, var)
+ var.registers([u's', u'set', u'si'])
+ return var.get(u's').callprop(u'map', var.get(u"this").get(u'parse'), var.get(u"this"))
+ PyJs_anonymous_383_._set_name(u'anonymous')
+ var.put(u'set', var.get(u'set').callprop(u'map', PyJs_anonymous_383_, var.get(u"this")))
+ var.get(u"this").callprop(u'debug', var.get(u"this").get(u'pattern'), var.get(u'set'))
+ @Js
+ def PyJs_anonymous_384_(s, this, arguments, var=var):
+ var = Scope({u'this':this, u's':s, u'arguments':arguments}, var)
+ var.registers([u's'])
+ return PyJsStrictEq(var.get(u's').callprop(u'indexOf', Js(False)),(-Js(1.0)))
+ PyJs_anonymous_384_._set_name(u'anonymous')
+ var.put(u'set', var.get(u'set').callprop(u'filter', PyJs_anonymous_384_))
+ var.get(u"this").callprop(u'debug', var.get(u"this").get(u'pattern'), var.get(u'set'))
+ var.get(u"this").put(u'set', var.get(u'set'))
+ PyJsHoisted_make_.func_name = u'make'
+ var.put(u'make', PyJsHoisted_make_)
+ @Js
+ def PyJsHoisted_charSet_(s, this, arguments, var=var):
+ var = Scope({u'this':this, u's':s, u'arguments':arguments}, var)
+ var.registers([u's'])
+ @Js
+ def PyJs_anonymous_366_(set, c, this, arguments, var=var):
+ var = Scope({u'this':this, u'c':c, u'set':set, u'arguments':arguments}, var)
+ var.registers([u'c', u'set'])
+ var.get(u'set').put(var.get(u'c'), var.get(u'true'))
+ return var.get(u'set')
+ PyJs_anonymous_366_._set_name(u'anonymous')
+ PyJs_Object_367_ = Js({})
+ return var.get(u's').callprop(u'split', Js(u'')).callprop(u'reduce', PyJs_anonymous_366_, PyJs_Object_367_)
+ PyJsHoisted_charSet_.func_name = u'charSet'
+ var.put(u'charSet', PyJsHoisted_charSet_)
+ @Js
+ def PyJsHoisted_filter_(pattern, options, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'options':options, u'arguments':arguments}, var)
+ var.registers([u'pattern', u'options'])
+ PyJs_Object_368_ = Js({})
+ var.put(u'options', (var.get(u'options') or PyJs_Object_368_))
+ @Js
+ def PyJs_anonymous_369_(p, i, list, this, arguments, var=var):
+ var = Scope({u'i':i, u'p':p, u'this':this, u'list':list, u'arguments':arguments}, var)
+ var.registers([u'i', u'p', u'list'])
+ return var.get(u'minimatch')(var.get(u'p'), var.get(u'pattern'), var.get(u'options'))
+ PyJs_anonymous_369_._set_name(u'anonymous')
+ return PyJs_anonymous_369_
+ PyJsHoisted_filter_.func_name = u'filter'
+ var.put(u'filter', PyJsHoisted_filter_)
+ @Js
+ def PyJsHoisted_ext_(a, b, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'b':b, u'arguments':arguments}, var)
+ var.registers([u'a', u'b', u't'])
+ PyJs_Object_370_ = Js({})
+ var.put(u'a', (var.get(u'a') or PyJs_Object_370_))
+ PyJs_Object_371_ = Js({})
+ var.put(u'b', (var.get(u'b') or PyJs_Object_371_))
+ PyJs_Object_372_ = Js({})
+ var.put(u't', PyJs_Object_372_)
+ @Js
+ def PyJs_anonymous_373_(k, this, arguments, var=var):
+ var = Scope({u'this':this, u'k':k, u'arguments':arguments}, var)
+ var.registers([u'k'])
+ var.get(u't').put(var.get(u'k'), var.get(u'b').get(var.get(u'k')))
+ PyJs_anonymous_373_._set_name(u'anonymous')
+ var.get(u'Object').callprop(u'keys', var.get(u'b')).callprop(u'forEach', PyJs_anonymous_373_)
+ @Js
+ def PyJs_anonymous_374_(k, this, arguments, var=var):
+ var = Scope({u'this':this, u'k':k, u'arguments':arguments}, var)
+ var.registers([u'k'])
+ var.get(u't').put(var.get(u'k'), var.get(u'a').get(var.get(u'k')))
+ PyJs_anonymous_374_._set_name(u'anonymous')
+ var.get(u'Object').callprop(u'keys', var.get(u'a')).callprop(u'forEach', PyJs_anonymous_374_)
+ return var.get(u't')
+ PyJsHoisted_ext_.func_name = u'ext'
+ var.put(u'ext', PyJsHoisted_ext_)
+ @Js
+ def PyJsHoisted_parseNegate_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'pattern', u'l', u'negateOffset', u'negate', u'options'])
+ var.put(u'pattern', var.get(u"this").get(u'pattern'))
+ var.put(u'negate', Js(False))
+ var.put(u'options', var.get(u"this").get(u'options'))
+ var.put(u'negateOffset', Js(0.0))
+ if var.get(u'options').get(u'nonegate'):
+ return var.get('undefined')
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'l', var.get(u'pattern').get(u'length'))
+ while ((var.get(u'i')(Js(1024.0)*Js(64.0))):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'pattern is too long')))
+ raise PyJsTempException
+ var.put(u'options', var.get(u"this").get(u'options'))
+ if (var.get(u'options').get(u'noglobstar').neg() and PyJsStrictEq(var.get(u'pattern'),Js(u'**'))):
+ return var.get(u'GLOBSTAR')
+ if PyJsStrictEq(var.get(u'pattern'),Js(u'')):
+ return Js(u'')
+ var.put(u're', Js(u''))
+ var.put(u'hasMagic', var.get(u'options').get(u'nocase').neg().neg())
+ var.put(u'escaping', Js(False))
+ var.put(u'patternListStack', Js([]))
+ var.put(u'negativeLists', Js([]))
+ pass
+ var.put(u'inClass', Js(False))
+ var.put(u'reClassStart', (-Js(1.0)))
+ var.put(u'classStart', (-Js(1.0)))
+ var.put(u'patternStart', (Js(u'') if PyJsStrictEq(var.get(u'pattern').callprop(u'charAt', Js(0.0)),Js(u'.')) else (Js(u'(?!(?:^|\\/)\\.{1,2}(?:$|\\/))') if var.get(u'options').get(u'dot') else Js(u'(?!\\.)'))))
+ var.put(u'self', var.get(u"this"))
+ pass
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'len', var.get(u'pattern').get(u'length'))
+ while ((var.get(u'i')(-Js(1.0))):
+ try:
+ var.put(u'nl', var.get(u'negativeLists').get(var.get(u'n')))
+ var.put(u'nlBefore', var.get(u're').callprop(u'slice', Js(0.0), var.get(u'nl').get(u'reStart')))
+ var.put(u'nlFirst', var.get(u're').callprop(u'slice', var.get(u'nl').get(u'reStart'), (var.get(u'nl').get(u'reEnd')-Js(8.0))))
+ var.put(u'nlLast', var.get(u're').callprop(u'slice', (var.get(u'nl').get(u'reEnd')-Js(8.0)), var.get(u'nl').get(u'reEnd')))
+ var.put(u'nlAfter', var.get(u're').callprop(u'slice', var.get(u'nl').get(u'reEnd')))
+ var.put(u'nlLast', var.get(u'nlAfter'), u'+')
+ var.put(u'openParensBefore', (var.get(u'nlBefore').callprop(u'split', Js(u'(')).get(u'length')-Js(1.0)))
+ var.put(u'cleanAfter', var.get(u'nlAfter'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=Js(0.0)):
+ try:
+ var.put(u'filename', var.get(u'f').get(var.get(u'i')))
+ if var.get(u'filename'):
+ break
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')>> no match, partial?'), var.get(u'file'), var.get(u'fr'), var.get(u'pattern'), var.get(u'pr'))
+ if PyJsStrictEq(var.get(u'fr'),var.get(u'fl')):
+ return var.get(u'true')
+ return Js(False)
+ pass
+ if PyJsStrictEq(var.get(u'p',throw=False).typeof(),Js(u'string')):
+ if var.get(u'options').get(u'nocase'):
+ var.put(u'hit', PyJsStrictEq(var.get(u'f').callprop(u'toLowerCase'),var.get(u'p').callprop(u'toLowerCase')))
+ else:
+ var.put(u'hit', PyJsStrictEq(var.get(u'f'),var.get(u'p')))
+ var.get(u"this").callprop(u'debug', Js(u'string match'), var.get(u'p'), var.get(u'f'), var.get(u'hit'))
+ else:
+ var.put(u'hit', var.get(u'f').callprop(u'match', var.get(u'p')))
+ var.get(u"this").callprop(u'debug', Js(u'pattern match'), var.get(u'p'), var.get(u'f'), var.get(u'hit'))
+ if var.get(u'hit').neg():
+ return Js(False)
+ finally:
+ PyJsComma((var.put(u'fi',Js(var.get(u'fi').to_number())+Js(1))-Js(1)),(var.put(u'pi',Js(var.get(u'pi').to_number())+Js(1))-Js(1)))
+ if (PyJsStrictEq(var.get(u'fi'),var.get(u'fl')) and PyJsStrictEq(var.get(u'pi'),var.get(u'pl'))):
+ return var.get(u'true')
+ else:
+ if PyJsStrictEq(var.get(u'fi'),var.get(u'fl')):
+ return var.get(u'partial')
+ else:
+ if PyJsStrictEq(var.get(u'pi'),var.get(u'pl')):
+ var.put(u'emptyFileEnd', (PyJsStrictEq(var.get(u'fi'),(var.get(u'fl')-Js(1.0))) and PyJsStrictEq(var.get(u'file').get(var.get(u'fi')),Js(u''))))
+ return var.get(u'emptyFileEnd')
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'wtf?')))
+ raise PyJsTempException
+ PyJs_anonymous_397_._set_name(u'anonymous')
+ var.get(u'Minimatch').get(u'prototype').put(u'matchOne', PyJs_anonymous_397_)
+ pass
+ pass
+PyJs_anonymous_357_._set_name(u'anonymous')
+PyJs_Object_399_ = Js({u'brace-expansion':Js(264.0),u'path':Js(530.0)})
+@Js
+def PyJs_anonymous_400_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_402_ = Js({u'raw':Js(u'babel-core'),u'scope':var.get(u"null"),u'escapedName':Js(u'babel-core'),u'name':Js(u'babel-core'),u'rawSpec':Js(u''),u'spec':Js(u'latest'),u'type':Js(u'tag')})
+ PyJs_Object_403_ = Js({u'host':Js(u'packages-18-east.internal.npmjs.com'),u'tmp':Js(u'tmp/babel-core-6.18.2.tgz_1478035855416_0.08754534856416285')})
+ PyJs_Object_404_ = Js({u'name':Js(u'hzoo'),u'email':Js(u'hi@henryzoo.com')})
+ PyJs_Object_405_ = Js({u'brace-expansion':Js(u'1.1.5')})
+ PyJs_Object_406_ = Js({u'raw':Js(u'babel-core'),u'scope':var.get(u"null"),u'escapedName':Js(u'babel-core'),u'name':Js(u'babel-core'),u'rawSpec':Js(u''),u'spec':Js(u'latest'),u'type':Js(u'tag')})
+ PyJs_Object_407_ = Js({u'name':Js(u'Sebastian McKenzie'),u'email':Js(u'sebmck@gmail.com')})
+ PyJs_Object_408_ = Js({u'babel-code-frame':Js(u'^6.16.0'),u'babel-generator':Js(u'^6.18.0'),u'babel-helpers':Js(u'^6.16.0'),u'babel-messages':Js(u'^6.8.0'),u'babel-register':Js(u'^6.18.0'),u'babel-runtime':Js(u'^6.9.1'),u'babel-template':Js(u'^6.16.0'),u'babel-traverse':Js(u'^6.18.0'),u'babel-types':Js(u'^6.18.0'),u'babylon':Js(u'^6.11.0'),u'convert-source-map':Js(u'^1.1.0'),u'debug':Js(u'^2.1.1'),u'json5':Js(u'^0.5.0'),u'lodash':Js(u'^4.2.0'),u'minimatch':Js(u'^3.0.2'),u'path-is-absolute':Js(u'^1.0.0'),u'private':Js(u'^0.1.6'),u'slash':Js(u'^1.0.0'),u'source-map':Js(u'^0.5.0')})
+ PyJs_Object_409_ = Js({u'babel-helper-fixtures':Js(u'^6.18.2'),u'babel-helper-transform-fixture-test-runner':Js(u'^6.18.2'),u'babel-polyfill':Js(u'^6.16.0')})
+ PyJs_Object_410_ = Js({})
+ PyJs_Object_411_ = Js({u'shasum':Js(u'd8bb14dd6986fa4f3566a26ceda3964fa0e04e5b'),u'tarball':Js(u'https://registry.npmjs.org/babel-core/-/babel-core-6.18.2.tgz')})
+ PyJs_Object_412_ = Js({u'name':Js(u'amasad'),u'email':Js(u'amjad.masad@gmail.com')})
+ PyJs_Object_413_ = Js({u'name':Js(u'hzoo'),u'email':Js(u'hi@henryzoo.com')})
+ PyJs_Object_414_ = Js({u'name':Js(u'jmm'),u'email':Js(u'npm-public@jessemccarthy.net')})
+ PyJs_Object_415_ = Js({u'name':Js(u'loganfsmyth'),u'email':Js(u'loganfsmyth@gmail.com')})
+ PyJs_Object_416_ = Js({u'name':Js(u'sebmck'),u'email':Js(u'sebmck@gmail.com')})
+ PyJs_Object_417_ = Js({u'name':Js(u'thejameskyle'),u'email':Js(u'me@thejameskyle.com')})
+ PyJs_Object_418_ = Js({})
+ PyJs_Object_419_ = Js({u'type':Js(u'git'),u'url':Js(u'https://github.com/babel/babel/tree/master/packages/babel-core')})
+ PyJs_Object_420_ = Js({u'bench':Js(u'make bench'),u'test':Js(u'make test')})
+ PyJs_Object_401_ = Js({u'_args':Js([Js([PyJs_Object_402_, Js(u'/Users/PiotrDabkowski/PycharmProjects/Js2Py/js2py/es6')])]),u'_from':Js(u'babel-core@latest'),u'_id':Js(u'babel-core@6.18.2'),u'_inCache':var.get(u'true'),u'_location':Js(u'/babel-core'),u'_nodeVersion':Js(u'6.8.1'),u'_npmOperationalInternal':PyJs_Object_403_,u'_npmUser':PyJs_Object_404_,u'_npmVersion':Js(u'3.10.9'),u'_phantomChildren':PyJs_Object_405_,u'_requested':PyJs_Object_406_,u'_requiredBy':Js([Js(u'#USER'), Js(u'/babel-cli'), Js(u'/babel-register'), Js(u'/babelify')]),u'_resolved':Js(u'https://registry.npmjs.org/babel-core/-/babel-core-6.18.2.tgz'),u'_shasum':Js(u'd8bb14dd6986fa4f3566a26ceda3964fa0e04e5b'),u'_shrinkwrap':var.get(u"null"),u'_spec':Js(u'babel-core'),u'_where':Js(u'/Users/PiotrDabkowski/PycharmProjects/Js2Py/js2py/es6'),u'author':PyJs_Object_407_,u'dependencies':PyJs_Object_408_,u'description':Js(u'Babel compiler core.'),u'devDependencies':PyJs_Object_409_,u'directories':PyJs_Object_410_,u'dist':PyJs_Object_411_,u'homepage':Js(u'https://babeljs.io/'),u'keywords':Js([Js(u'6to5'), Js(u'babel'), Js(u'classes'), Js(u'const'), Js(u'es6'), Js(u'harmony'), Js(u'let'), Js(u'modules'), Js(u'transpile'), Js(u'transpiler'), Js(u'var')]),u'license':Js(u'MIT'),u'maintainers':Js([PyJs_Object_412_, PyJs_Object_413_, PyJs_Object_414_, PyJs_Object_415_, PyJs_Object_416_, PyJs_Object_417_]),u'name':Js(u'babel-core'),u'optionalDependencies':PyJs_Object_418_,u'readme':Js(u'ERROR: No README data found!'),u'repository':PyJs_Object_419_,u'scripts':PyJs_Object_420_,u'version':Js(u'6.18.2')})
+ var.get(u'module').put(u'exports', PyJs_Object_401_)
+PyJs_anonymous_400_._set_name(u'anonymous')
+PyJs_Object_421_ = Js({})
+@Js
+def PyJs_anonymous_422_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'Buffer', u'require', u'_trimEnd2', u'module', u'_trimEnd', u'_interopRequireDefault', u'SPACES_RE', u'_classCallCheck2', u'_classCallCheck3'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_423_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_423_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_trimEnd', var.get(u'require')(Js(u'lodash/trimEnd')))
+ var.put(u'_trimEnd2', var.get(u'_interopRequireDefault')(var.get(u'_trimEnd')))
+ pass
+ var.put(u'SPACES_RE', JsRegExp(u'/^[ \\t]+$/'))
+ @Js
+ def PyJs_anonymous_424_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'Buffer'])
+ @Js
+ def PyJsHoisted_Buffer_(map, this, arguments, var=var):
+ var = Scope({u'this':this, u'map':map, u'arguments':arguments}, var)
+ var.registers([u'map'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'Buffer'))
+ var.get(u"this").put(u'_map', var.get(u"null"))
+ var.get(u"this").put(u'_buf', Js([]))
+ var.get(u"this").put(u'_last', Js(u''))
+ var.get(u"this").put(u'_queue', Js([]))
+ PyJs_Object_425_ = Js({u'line':Js(1.0),u'column':Js(0.0)})
+ var.get(u"this").put(u'_position', PyJs_Object_425_)
+ PyJs_Object_426_ = Js({u'identifierName':var.get(u"null"),u'line':var.get(u"null"),u'column':var.get(u"null"),u'filename':var.get(u"null")})
+ var.get(u"this").put(u'_sourcePosition', PyJs_Object_426_)
+ var.get(u"this").put(u'_map', var.get(u'map'))
+ PyJsHoisted_Buffer_.func_name = u'Buffer'
+ var.put(u'Buffer', PyJsHoisted_Buffer_)
+ pass
+ @Js
+ def PyJs_get_427_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_427_}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'_flush')
+ PyJs_Object_428_ = Js({u'code':PyJsComma(Js(0.0),var.get(u'_trimEnd2').get(u'default'))(var.get(u"this").get(u'_buf').callprop(u'join', Js(u''))),u'map':(var.get(u"this").get(u'_map').callprop(u'get') if var.get(u"this").get(u'_map') else var.get(u"null"))})
+ return PyJs_Object_428_
+ PyJs_get_427_._set_name(u'get')
+ var.get(u'Buffer').get(u'prototype').put(u'get', PyJs_get_427_)
+ @Js
+ def PyJs_append_429_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'append':PyJs_append_429_, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'identifierName', u'column', u'filename', u'str', u'line', u'_sourcePosition'])
+ var.get(u"this").callprop(u'_flush')
+ var.put(u'_sourcePosition', var.get(u"this").get(u'_sourcePosition'))
+ var.put(u'line', var.get(u'_sourcePosition').get(u'line'))
+ var.put(u'column', var.get(u'_sourcePosition').get(u'column'))
+ var.put(u'filename', var.get(u'_sourcePosition').get(u'filename'))
+ var.put(u'identifierName', var.get(u'_sourcePosition').get(u'identifierName'))
+ var.get(u"this").callprop(u'_append', var.get(u'str'), var.get(u'line'), var.get(u'column'), var.get(u'identifierName'), var.get(u'filename'))
+ PyJs_append_429_._set_name(u'append')
+ var.get(u'Buffer').get(u'prototype').put(u'append', PyJs_append_429_)
+ @Js
+ def PyJs_queue_430_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'queue':PyJs_queue_430_, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'identifierName', u'column', u'filename', u'_sourcePosition2', u'str', u'line'])
+ if PyJsStrictEq(var.get(u'str'),Js(u'\n')):
+ while ((var.get(u"this").get(u'_queue').get(u'length')>Js(0.0)) and var.get(u'SPACES_RE').callprop(u'test', var.get(u"this").get(u'_queue').get(u'0').get(u'0'))):
+ var.get(u"this").get(u'_queue').callprop(u'shift')
+ var.put(u'_sourcePosition2', var.get(u"this").get(u'_sourcePosition'))
+ var.put(u'line', var.get(u'_sourcePosition2').get(u'line'))
+ var.put(u'column', var.get(u'_sourcePosition2').get(u'column'))
+ var.put(u'filename', var.get(u'_sourcePosition2').get(u'filename'))
+ var.put(u'identifierName', var.get(u'_sourcePosition2').get(u'identifierName'))
+ var.get(u"this").get(u'_queue').callprop(u'unshift', Js([var.get(u'str'), var.get(u'line'), var.get(u'column'), var.get(u'identifierName'), var.get(u'filename')]))
+ PyJs_queue_430_._set_name(u'queue')
+ var.get(u'Buffer').get(u'prototype').put(u'queue', PyJs_queue_430_)
+ @Js
+ def PyJs__flush_431_(this, arguments, var=var):
+ var = Scope({u'this':this, u'_flush':PyJs__flush_431_, u'arguments':arguments}, var)
+ var.registers([u'item'])
+ var.put(u'item', PyJsComma(Js(0.0), Js(None)))
+ while var.put(u'item', var.get(u"this").get(u'_queue').callprop(u'pop')):
+ var.get(u"this").get(u'_append').callprop(u'apply', var.get(u"this"), var.get(u'item'))
+ PyJs__flush_431_._set_name(u'_flush')
+ var.get(u'Buffer').get(u'prototype').put(u'_flush', PyJs__flush_431_)
+ @Js
+ def PyJs__append_432_(str, line, column, identifierName, filename, this, arguments, var=var):
+ var = Scope({u'this':this, u'_append':PyJs__append_432_, u'str':str, u'identifierName':identifierName, u'column':column, u'arguments':arguments, u'line':line, u'filename':filename}, var)
+ var.registers([u'identifierName', u'i', u'filename', u'column', u'str', u'line'])
+ if (var.get(u"this").get(u'_map') and PyJsStrictNeq(var.get(u'str').get(u'0'),Js(u'\n'))):
+ var.get(u"this").get(u'_map').callprop(u'mark', var.get(u"this").get(u'_position').get(u'line'), var.get(u"this").get(u'_position').get(u'column'), var.get(u'line'), var.get(u'column'), var.get(u'identifierName'), var.get(u'filename'))
+ var.get(u"this").get(u'_buf').callprop(u'push', var.get(u'str'))
+ var.get(u"this").put(u'_last', var.get(u'str').get((var.get(u'str').get(u'length')-Js(1.0))))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(0.0)) and PyJsStrictEq(var.get(u"this").get(u'_queue').get(u'0').get(u'0'),Js(u'\n'))):
+ var.get(u"this").get(u'_queue').callprop(u'shift')
+ PyJs_removeTrailingNewline_433_._set_name(u'removeTrailingNewline')
+ var.get(u'Buffer').get(u'prototype').put(u'removeTrailingNewline', PyJs_removeTrailingNewline_433_)
+ @Js
+ def PyJs_removeLastSemicolon_434_(this, arguments, var=var):
+ var = Scope({u'this':this, u'removeLastSemicolon':PyJs_removeLastSemicolon_434_, u'arguments':arguments}, var)
+ var.registers([])
+ if ((var.get(u"this").get(u'_queue').get(u'length')>Js(0.0)) and PyJsStrictEq(var.get(u"this").get(u'_queue').get(u'0').get(u'0'),Js(u';'))):
+ var.get(u"this").get(u'_queue').callprop(u'shift')
+ PyJs_removeLastSemicolon_434_._set_name(u'removeLastSemicolon')
+ var.get(u'Buffer').get(u'prototype').put(u'removeLastSemicolon', PyJs_removeLastSemicolon_434_)
+ @Js
+ def PyJs_endsWith_435_(suffix, this, arguments, var=var):
+ var = Scope({u'this':this, u'endsWith':PyJs_endsWith_435_, u'suffix':suffix, u'arguments':arguments}, var)
+ var.registers([u'end', u'last', u'suffix', u'str'])
+ if PyJsStrictEq(var.get(u'suffix').get(u'length'),Js(1.0)):
+ var.put(u'last', PyJsComma(Js(0.0), Js(None)))
+ if (var.get(u"this").get(u'_queue').get(u'length')>Js(0.0)):
+ var.put(u'str', var.get(u"this").get(u'_queue').get(u'0').get(u'0'))
+ var.put(u'last', var.get(u'str').get((var.get(u'str').get(u'length')-Js(1.0))))
+ else:
+ var.put(u'last', var.get(u"this").get(u'_last'))
+ return PyJsStrictEq(var.get(u'last'),var.get(u'suffix'))
+ @Js
+ def PyJs_anonymous_436_(acc, item, this, arguments, var=var):
+ var = Scope({u'acc':acc, u'item':item, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'acc', u'item'])
+ return (var.get(u'item').get(u'0')+var.get(u'acc'))
+ PyJs_anonymous_436_._set_name(u'anonymous')
+ var.put(u'end', (var.get(u"this").get(u'_last')+var.get(u"this").get(u'_queue').callprop(u'reduce', PyJs_anonymous_436_, Js(u''))))
+ if (var.get(u'suffix').get(u'length')<=var.get(u'end').get(u'length')):
+ return PyJsStrictEq(var.get(u'end').callprop(u'slice', (-var.get(u'suffix').get(u'length'))),var.get(u'suffix'))
+ return Js(False)
+ PyJs_endsWith_435_._set_name(u'endsWith')
+ var.get(u'Buffer').get(u'prototype').put(u'endsWith', PyJs_endsWith_435_)
+ @Js
+ def PyJs_hasContent_437_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'hasContent':PyJs_hasContent_437_}, var)
+ var.registers([])
+ return ((var.get(u"this").get(u'_queue').get(u'length')>Js(0.0)) or var.get(u"this").get(u'_last').neg().neg())
+ PyJs_hasContent_437_._set_name(u'hasContent')
+ var.get(u'Buffer').get(u'prototype').put(u'hasContent', PyJs_hasContent_437_)
+ @Js
+ def PyJs_source_438_(prop, loc, this, arguments, var=var):
+ var = Scope({u'this':this, u'loc':loc, u'source':PyJs_source_438_, u'arguments':arguments, u'prop':prop}, var)
+ var.registers([u'loc', u'pos', u'prop'])
+ if (var.get(u'prop') and var.get(u'loc').neg()):
+ return var.get('undefined')
+ var.put(u'pos', (var.get(u'loc').get(var.get(u'prop')) if var.get(u'loc') else var.get(u"null")))
+ var.get(u"this").get(u'_sourcePosition').put(u'identifierName', ((var.get(u'loc') and var.get(u'loc').get(u'identifierName')) or var.get(u"null")))
+ var.get(u"this").get(u'_sourcePosition').put(u'line', (var.get(u'pos').get(u'line') if var.get(u'pos') else var.get(u"null")))
+ var.get(u"this").get(u'_sourcePosition').put(u'column', (var.get(u'pos').get(u'column') if var.get(u'pos') else var.get(u"null")))
+ var.get(u"this").get(u'_sourcePosition').put(u'filename', ((var.get(u'loc') and var.get(u'loc').get(u'filename')) or var.get(u"null")))
+ PyJs_source_438_._set_name(u'source')
+ var.get(u'Buffer').get(u'prototype').put(u'source', PyJs_source_438_)
+ @Js
+ def PyJs_withSource_439_(prop, loc, cb, this, arguments, var=var):
+ var = Scope({u'loc':loc, u'this':this, u'cb':cb, u'prop':prop, u'withSource':PyJs_withSource_439_, u'arguments':arguments}, var)
+ var.registers([u'originalColumn', u'originalIdentifierName', u'loc', u'cb', u'prop', u'originalLine', u'originalFilename'])
+ if var.get(u"this").get(u'_map').neg():
+ return var.get(u'cb')()
+ var.put(u'originalLine', var.get(u"this").get(u'_sourcePosition').get(u'line'))
+ var.put(u'originalColumn', var.get(u"this").get(u'_sourcePosition').get(u'column'))
+ var.put(u'originalFilename', var.get(u"this").get(u'_sourcePosition').get(u'filename'))
+ var.put(u'originalIdentifierName', var.get(u"this").get(u'_sourcePosition').get(u'identifierName'))
+ var.get(u"this").callprop(u'source', var.get(u'prop'), var.get(u'loc'))
+ var.get(u'cb')()
+ var.get(u"this").get(u'_sourcePosition').put(u'line', var.get(u'originalLine'))
+ var.get(u"this").get(u'_sourcePosition').put(u'column', var.get(u'originalColumn'))
+ var.get(u"this").get(u'_sourcePosition').put(u'filename', var.get(u'originalFilename'))
+ var.get(u"this").get(u'_sourcePosition').put(u'identifierName', var.get(u'originalIdentifierName'))
+ PyJs_withSource_439_._set_name(u'withSource')
+ var.get(u'Buffer').get(u'prototype').put(u'withSource', PyJs_withSource_439_)
+ @Js
+ def PyJs_getCurrentColumn_440_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getCurrentColumn':PyJs_getCurrentColumn_440_, u'arguments':arguments}, var)
+ var.registers([u'lastIndex', u'extra'])
+ @Js
+ def PyJs_anonymous_441_(acc, item, this, arguments, var=var):
+ var = Scope({u'acc':acc, u'item':item, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'acc', u'item'])
+ return (var.get(u'item').get(u'0')+var.get(u'acc'))
+ PyJs_anonymous_441_._set_name(u'anonymous')
+ var.put(u'extra', var.get(u"this").get(u'_queue').callprop(u'reduce', PyJs_anonymous_441_, Js(u'')))
+ var.put(u'lastIndex', var.get(u'extra').callprop(u'lastIndexOf', Js(u'\n')))
+ return ((var.get(u"this").get(u'_position').get(u'column')+var.get(u'extra').get(u'length')) if PyJsStrictEq(var.get(u'lastIndex'),(-Js(1.0))) else ((var.get(u'extra').get(u'length')-Js(1.0))-var.get(u'lastIndex')))
+ PyJs_getCurrentColumn_440_._set_name(u'getCurrentColumn')
+ var.get(u'Buffer').get(u'prototype').put(u'getCurrentColumn', PyJs_getCurrentColumn_440_)
+ @Js
+ def PyJs_getCurrentLine_442_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'getCurrentLine':PyJs_getCurrentLine_442_}, var)
+ var.registers([u'count', u'i', u'extra'])
+ @Js
+ def PyJs_anonymous_443_(acc, item, this, arguments, var=var):
+ var = Scope({u'acc':acc, u'item':item, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'acc', u'item'])
+ return (var.get(u'item').get(u'0')+var.get(u'acc'))
+ PyJs_anonymous_443_._set_name(u'anonymous')
+ var.put(u'extra', var.get(u"this").get(u'_queue').callprop(u'reduce', PyJs_anonymous_443_, Js(u'')))
+ var.put(u'count', Js(0.0))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')'))
+ PyJsHoisted_TypeParameterInstantiation_.func_name = u'TypeParameterInstantiation'
+ var.put(u'TypeParameterInstantiation', PyJsHoisted_TypeParameterInstantiation_)
+ @Js
+ def PyJsHoisted_TypeParameter_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'_variance', var.get(u'node'))
+ var.get(u"this").callprop(u'word', var.get(u'node').get(u'name'))
+ if var.get(u'node').get(u'bound'):
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'bound'), var.get(u'node'))
+ if var.get(u'node').get(u'default'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'='))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'default'), var.get(u'node'))
+ PyJsHoisted_TypeParameter_.func_name = u'TypeParameter'
+ var.put(u'TypeParameter', PyJsHoisted_TypeParameter_)
+ @Js
+ def PyJsHoisted_ExistentialTypeParam_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'token', Js(u'*'))
+ PyJsHoisted_ExistentialTypeParam_.func_name = u'ExistentialTypeParam'
+ var.put(u'ExistentialTypeParam', PyJsHoisted_ExistentialTypeParam_)
+ @Js
+ def PyJsHoisted_FunctionTypeParam_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'name'), var.get(u'node'))
+ if var.get(u'node').get(u'optional'):
+ var.get(u"this").callprop(u'token', Js(u'?'))
+ var.get(u"this").callprop(u'token', Js(u':'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'typeAnnotation'), var.get(u'node'))
+ PyJsHoisted_FunctionTypeParam_.func_name = u'FunctionTypeParam'
+ var.put(u'FunctionTypeParam', PyJsHoisted_FunctionTypeParam_)
+ @Js
+ def PyJsHoisted_orSeparator_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'|'))
+ var.get(u"this").callprop(u'space')
+ PyJsHoisted_orSeparator_.func_name = u'orSeparator'
+ var.put(u'orSeparator', PyJsHoisted_orSeparator_)
+ @Js
+ def PyJsHoisted_UnionTypeAnnotation_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ PyJs_Object_469_ = Js({u'separator':var.get(u'orSeparator')})
+ var.get(u"this").callprop(u'printJoin', var.get(u'node').get(u'types'), var.get(u'node'), PyJs_Object_469_)
+ PyJsHoisted_UnionTypeAnnotation_.func_name = u'UnionTypeAnnotation'
+ var.put(u'UnionTypeAnnotation', PyJsHoisted_UnionTypeAnnotation_)
+ @Js
+ def PyJsHoisted_DeclareModuleExports_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', Js(u'declare'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'module'))
+ var.get(u"this").callprop(u'token', Js(u'.'))
+ var.get(u"this").callprop(u'word', Js(u'exports'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'typeAnnotation'), var.get(u'node'))
+ PyJsHoisted_DeclareModuleExports_.func_name = u'DeclareModuleExports'
+ var.put(u'DeclareModuleExports', PyJsHoisted_DeclareModuleExports_)
+ @Js
+ def PyJsHoisted_TypeCastExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u'('))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'expression'), var.get(u'node'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'typeAnnotation'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u')'))
+ PyJsHoisted_TypeCastExpression_.func_name = u'TypeCastExpression'
+ var.put(u'TypeCastExpression', PyJsHoisted_TypeCastExpression_)
+ @Js
+ def PyJsHoisted_BooleanLiteralTypeAnnotation_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', (Js(u'true') if var.get(u'node').get(u'value') else Js(u'false')))
+ PyJsHoisted_BooleanLiteralTypeAnnotation_.func_name = u'BooleanLiteralTypeAnnotation'
+ var.put(u'BooleanLiteralTypeAnnotation', PyJsHoisted_BooleanLiteralTypeAnnotation_)
+ @Js
+ def PyJsHoisted_VoidTypeAnnotation_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'word', Js(u'void'))
+ PyJsHoisted_VoidTypeAnnotation_.func_name = u'VoidTypeAnnotation'
+ var.put(u'VoidTypeAnnotation', PyJsHoisted_VoidTypeAnnotation_)
+ @Js
+ def PyJsHoisted_ObjectTypeProperty_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u'node').get(u'static'):
+ var.get(u"this").callprop(u'word', Js(u'static'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'_variance', var.get(u'node'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'key'), var.get(u'node'))
+ if var.get(u'node').get(u'optional'):
+ var.get(u"this").callprop(u'token', Js(u'?'))
+ var.get(u"this").callprop(u'token', Js(u':'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'value'), var.get(u'node'))
+ PyJsHoisted_ObjectTypeProperty_.func_name = u'ObjectTypeProperty'
+ var.put(u'ObjectTypeProperty', PyJsHoisted_ObjectTypeProperty_)
+ @Js
+ def PyJsHoisted_IntersectionTypeAnnotation_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ PyJs_Object_465_ = Js({u'separator':var.get(u'andSeparator')})
+ var.get(u"this").callprop(u'printJoin', var.get(u'node').get(u'types'), var.get(u'node'), PyJs_Object_465_)
+ PyJsHoisted_IntersectionTypeAnnotation_.func_name = u'IntersectionTypeAnnotation'
+ var.put(u'IntersectionTypeAnnotation', PyJsHoisted_IntersectionTypeAnnotation_)
+ @Js
+ def PyJsHoisted_ObjectTypeCallProperty_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u'node').get(u'static'):
+ var.get(u"this").callprop(u'word', Js(u'static'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'value'), var.get(u'node'))
+ PyJsHoisted_ObjectTypeCallProperty_.func_name = u'ObjectTypeCallProperty'
+ var.put(u'ObjectTypeCallProperty', PyJsHoisted_ObjectTypeCallProperty_)
+ @Js
+ def PyJsHoisted_TupleTypeAnnotation_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u'['))
+ var.get(u"this").callprop(u'printList', var.get(u'node').get(u'types'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u']'))
+ PyJsHoisted_TupleTypeAnnotation_.func_name = u'TupleTypeAnnotation'
+ var.put(u'TupleTypeAnnotation', PyJsHoisted_TupleTypeAnnotation_)
+ @Js
+ def PyJsHoisted_TypeAnnotation_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u':'))
+ var.get(u"this").callprop(u'space')
+ if var.get(u'node').get(u'optional'):
+ var.get(u"this").callprop(u'token', Js(u'?'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'typeAnnotation'), var.get(u'node'))
+ PyJsHoisted_TypeAnnotation_.func_name = u'TypeAnnotation'
+ var.put(u'TypeAnnotation', PyJsHoisted_TypeAnnotation_)
+ @Js
+ def PyJsHoisted__variance_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if PyJsStrictEq(var.get(u'node').get(u'variance'),Js(u'plus')):
+ var.get(u"this").callprop(u'token', Js(u'+'))
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'variance'),Js(u'minus')):
+ var.get(u"this").callprop(u'token', Js(u'-'))
+ PyJsHoisted__variance_.func_name = u'_variance'
+ var.put(u'_variance', PyJsHoisted__variance_)
+ @Js
+ def PyJsHoisted_FunctionTypeAnnotation_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'typeParameters'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u'('))
+ var.get(u"this").callprop(u'printList', var.get(u'node').get(u'params'), var.get(u'node'))
+ if var.get(u'node').get(u'rest'):
+ if var.get(u'node').get(u'params').get(u'length'):
+ var.get(u"this").callprop(u'token', Js(u','))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'...'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'rest'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u')'))
+ if (PyJsStrictEq(var.get(u'parent').get(u'type'),Js(u'ObjectTypeCallProperty')) or PyJsStrictEq(var.get(u'parent').get(u'type'),Js(u'DeclareFunction'))):
+ var.get(u"this").callprop(u'token', Js(u':'))
+ else:
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'=>'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'returnType'), var.get(u'node'))
+ PyJsHoisted_FunctionTypeAnnotation_.func_name = u'FunctionTypeAnnotation'
+ var.put(u'FunctionTypeAnnotation', PyJsHoisted_FunctionTypeAnnotation_)
+ @Js
+ def PyJsHoisted_DeclareModule_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', Js(u'declare'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'module'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'id'), var.get(u'node'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'body'), var.get(u'node'))
+ PyJsHoisted_DeclareModule_.func_name = u'DeclareModule'
+ var.put(u'DeclareModule', PyJsHoisted_DeclareModule_)
+ @Js
+ def PyJsHoisted_NullableTypeAnnotation_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u'?'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'typeAnnotation'), var.get(u'node'))
+ PyJsHoisted_NullableTypeAnnotation_.func_name = u'NullableTypeAnnotation'
+ var.put(u'NullableTypeAnnotation', PyJsHoisted_NullableTypeAnnotation_)
+ @Js
+ def PyJsHoisted_andSeparator_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'&'))
+ var.get(u"this").callprop(u'space')
+ PyJsHoisted_andSeparator_.func_name = u'andSeparator'
+ var.put(u'andSeparator', PyJsHoisted_andSeparator_)
+ @Js
+ def PyJsHoisted_BooleanTypeAnnotation_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'word', Js(u'boolean'))
+ PyJsHoisted_BooleanTypeAnnotation_.func_name = u'BooleanTypeAnnotation'
+ var.put(u'BooleanTypeAnnotation', PyJsHoisted_BooleanTypeAnnotation_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'AnyTypeAnnotation', var.get(u'AnyTypeAnnotation'))
+ var.get(u'exports').put(u'ArrayTypeAnnotation', var.get(u'ArrayTypeAnnotation'))
+ var.get(u'exports').put(u'BooleanTypeAnnotation', var.get(u'BooleanTypeAnnotation'))
+ var.get(u'exports').put(u'BooleanLiteralTypeAnnotation', var.get(u'BooleanLiteralTypeAnnotation'))
+ var.get(u'exports').put(u'NullLiteralTypeAnnotation', var.get(u'NullLiteralTypeAnnotation'))
+ var.get(u'exports').put(u'DeclareClass', var.get(u'DeclareClass'))
+ var.get(u'exports').put(u'DeclareFunction', var.get(u'DeclareFunction'))
+ var.get(u'exports').put(u'DeclareInterface', var.get(u'DeclareInterface'))
+ var.get(u'exports').put(u'DeclareModule', var.get(u'DeclareModule'))
+ var.get(u'exports').put(u'DeclareModuleExports', var.get(u'DeclareModuleExports'))
+ var.get(u'exports').put(u'DeclareTypeAlias', var.get(u'DeclareTypeAlias'))
+ var.get(u'exports').put(u'DeclareVariable', var.get(u'DeclareVariable'))
+ var.get(u'exports').put(u'ExistentialTypeParam', var.get(u'ExistentialTypeParam'))
+ var.get(u'exports').put(u'FunctionTypeAnnotation', var.get(u'FunctionTypeAnnotation'))
+ var.get(u'exports').put(u'FunctionTypeParam', var.get(u'FunctionTypeParam'))
+ var.get(u'exports').put(u'InterfaceExtends', var.get(u'InterfaceExtends'))
+ var.get(u'exports').put(u'_interfaceish', var.get(u'_interfaceish'))
+ var.get(u'exports').put(u'_variance', var.get(u'_variance'))
+ var.get(u'exports').put(u'InterfaceDeclaration', var.get(u'InterfaceDeclaration'))
+ var.get(u'exports').put(u'IntersectionTypeAnnotation', var.get(u'IntersectionTypeAnnotation'))
+ var.get(u'exports').put(u'MixedTypeAnnotation', var.get(u'MixedTypeAnnotation'))
+ var.get(u'exports').put(u'EmptyTypeAnnotation', var.get(u'EmptyTypeAnnotation'))
+ var.get(u'exports').put(u'NullableTypeAnnotation', var.get(u'NullableTypeAnnotation'))
+ var.put(u'_types', var.get(u'require')(Js(u'./types')))
+ @Js
+ def PyJs_get_462_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_462_}, var)
+ var.registers([])
+ return var.get(u'_types').get(u'NumericLiteral')
+ PyJs_get_462_._set_name(u'get')
+ PyJs_Object_461_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_462_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'NumericLiteralTypeAnnotation'), PyJs_Object_461_)
+ @Js
+ def PyJs_get_464_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_464_}, var)
+ var.registers([])
+ return var.get(u'_types').get(u'StringLiteral')
+ PyJs_get_464_._set_name(u'get')
+ PyJs_Object_463_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_464_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'StringLiteralTypeAnnotation'), PyJs_Object_463_)
+ var.get(u'exports').put(u'NumberTypeAnnotation', var.get(u'NumberTypeAnnotation'))
+ var.get(u'exports').put(u'StringTypeAnnotation', var.get(u'StringTypeAnnotation'))
+ var.get(u'exports').put(u'ThisTypeAnnotation', var.get(u'ThisTypeAnnotation'))
+ var.get(u'exports').put(u'TupleTypeAnnotation', var.get(u'TupleTypeAnnotation'))
+ var.get(u'exports').put(u'TypeofTypeAnnotation', var.get(u'TypeofTypeAnnotation'))
+ var.get(u'exports').put(u'TypeAlias', var.get(u'TypeAlias'))
+ var.get(u'exports').put(u'TypeAnnotation', var.get(u'TypeAnnotation'))
+ var.get(u'exports').put(u'TypeParameter', var.get(u'TypeParameter'))
+ var.get(u'exports').put(u'TypeParameterInstantiation', var.get(u'TypeParameterInstantiation'))
+ var.get(u'exports').put(u'ObjectTypeAnnotation', var.get(u'ObjectTypeAnnotation'))
+ var.get(u'exports').put(u'ObjectTypeCallProperty', var.get(u'ObjectTypeCallProperty'))
+ var.get(u'exports').put(u'ObjectTypeIndexer', var.get(u'ObjectTypeIndexer'))
+ var.get(u'exports').put(u'ObjectTypeProperty', var.get(u'ObjectTypeProperty'))
+ var.get(u'exports').put(u'QualifiedTypeIdentifier', var.get(u'QualifiedTypeIdentifier'))
+ var.get(u'exports').put(u'UnionTypeAnnotation', var.get(u'UnionTypeAnnotation'))
+ var.get(u'exports').put(u'TypeCastExpression', var.get(u'TypeCastExpression'))
+ var.get(u'exports').put(u'VoidTypeAnnotation', var.get(u'VoidTypeAnnotation'))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ var.get(u'exports').put(u'ClassImplements', var.get(u'InterfaceExtends'))
+ var.get(u'exports').put(u'GenericTypeAnnotation', var.get(u'InterfaceExtends'))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ var.get(u'exports').put(u'TypeParameterDeclaration', var.get(u'TypeParameterInstantiation'))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_460_._set_name(u'anonymous')
+PyJs_Object_470_ = Js({u'./types':Js(39.0)})
+@Js
+def PyJs_anonymous_471_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'JSXSpreadAttribute', u'exports', u'JSXOpeningElement', u'JSXMemberExpression', u'JSXClosingElement', u'module', u'JSXElement', u'JSXAttribute', u'JSXNamespacedName', u'JSXText', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'JSXExpressionContainer', u'spaceSeparator', u'JSXEmptyExpression', u'JSXIdentifier'])
+ @Js
+ def PyJsHoisted_JSXSpreadAttribute_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u'{'))
+ var.get(u"this").callprop(u'token', Js(u'...'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'argument'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u'}'))
+ PyJsHoisted_JSXSpreadAttribute_.func_name = u'JSXSpreadAttribute'
+ var.put(u'JSXSpreadAttribute', PyJsHoisted_JSXSpreadAttribute_)
+ @Js
+ def PyJsHoisted_JSXOpeningElement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u'<'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'name'), var.get(u'node'))
+ if (var.get(u'node').get(u'attributes').get(u'length')>Js(0.0)):
+ var.get(u"this").callprop(u'space')
+ PyJs_Object_473_ = Js({u'separator':var.get(u'spaceSeparator')})
+ var.get(u"this").callprop(u'printJoin', var.get(u'node').get(u'attributes'), var.get(u'node'), PyJs_Object_473_)
+ if var.get(u'node').get(u'selfClosing'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'/>'))
+ else:
+ var.get(u"this").callprop(u'token', Js(u'>'))
+ PyJsHoisted_JSXOpeningElement_.func_name = u'JSXOpeningElement'
+ var.put(u'JSXOpeningElement', PyJsHoisted_JSXOpeningElement_)
+ @Js
+ def PyJsHoisted_JSXMemberExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'object'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u'.'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'property'), var.get(u'node'))
+ PyJsHoisted_JSXMemberExpression_.func_name = u'JSXMemberExpression'
+ var.put(u'JSXMemberExpression', PyJsHoisted_JSXMemberExpression_)
+ @Js
+ def PyJsHoisted_JSXClosingElement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u''))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'name'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u'>'))
+ PyJsHoisted_JSXClosingElement_.func_name = u'JSXClosingElement'
+ var.put(u'JSXClosingElement', PyJsHoisted_JSXClosingElement_)
+ @Js
+ def PyJsHoisted_JSXElement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'_i', u'child', u'_ref', u'open'])
+ var.put(u'open', var.get(u'node').get(u'openingElement'))
+ var.get(u"this").callprop(u'print', var.get(u'open'), var.get(u'node'))
+ if var.get(u'open').get(u'selfClosing'):
+ return var.get('undefined')
+ var.get(u"this").callprop(u'indent')
+ #for JS loop
+ var.put(u'_iterator', var.get(u'node').get(u'children'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'child', var.get(u'_ref'))
+ var.get(u"this").callprop(u'print', var.get(u'child'), var.get(u'node'))
+
+ var.get(u"this").callprop(u'dedent')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'closingElement'), var.get(u'node'))
+ PyJsHoisted_JSXElement_.func_name = u'JSXElement'
+ var.put(u'JSXElement', PyJsHoisted_JSXElement_)
+ @Js
+ def PyJsHoisted_JSXAttribute_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'name'), var.get(u'node'))
+ if var.get(u'node').get(u'value'):
+ var.get(u"this").callprop(u'token', Js(u'='))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'value'), var.get(u'node'))
+ PyJsHoisted_JSXAttribute_.func_name = u'JSXAttribute'
+ var.put(u'JSXAttribute', PyJsHoisted_JSXAttribute_)
+ @Js
+ def PyJsHoisted_JSXNamespacedName_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'namespace'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u':'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'name'), var.get(u'node'))
+ PyJsHoisted_JSXNamespacedName_.func_name = u'JSXNamespacedName'
+ var.put(u'JSXNamespacedName', PyJsHoisted_JSXNamespacedName_)
+ @Js
+ def PyJsHoisted_JSXText_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', var.get(u'node').get(u'value'))
+ PyJsHoisted_JSXText_.func_name = u'JSXText'
+ var.put(u'JSXText', PyJsHoisted_JSXText_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_472_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_472_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_JSXExpressionContainer_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u'{'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'expression'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u'}'))
+ PyJsHoisted_JSXExpressionContainer_.func_name = u'JSXExpressionContainer'
+ var.put(u'JSXExpressionContainer', PyJsHoisted_JSXExpressionContainer_)
+ @Js
+ def PyJsHoisted_spaceSeparator_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'space')
+ PyJsHoisted_spaceSeparator_.func_name = u'spaceSeparator'
+ var.put(u'spaceSeparator', PyJsHoisted_spaceSeparator_)
+ @Js
+ def PyJsHoisted_JSXEmptyExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ pass
+ PyJsHoisted_JSXEmptyExpression_.func_name = u'JSXEmptyExpression'
+ var.put(u'JSXEmptyExpression', PyJsHoisted_JSXEmptyExpression_)
+ @Js
+ def PyJsHoisted_JSXIdentifier_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', var.get(u'node').get(u'name'))
+ PyJsHoisted_JSXIdentifier_.func_name = u'JSXIdentifier'
+ var.put(u'JSXIdentifier', PyJsHoisted_JSXIdentifier_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'JSXAttribute', var.get(u'JSXAttribute'))
+ var.get(u'exports').put(u'JSXIdentifier', var.get(u'JSXIdentifier'))
+ var.get(u'exports').put(u'JSXNamespacedName', var.get(u'JSXNamespacedName'))
+ var.get(u'exports').put(u'JSXMemberExpression', var.get(u'JSXMemberExpression'))
+ var.get(u'exports').put(u'JSXSpreadAttribute', var.get(u'JSXSpreadAttribute'))
+ var.get(u'exports').put(u'JSXExpressionContainer', var.get(u'JSXExpressionContainer'))
+ var.get(u'exports').put(u'JSXText', var.get(u'JSXText'))
+ var.get(u'exports').put(u'JSXElement', var.get(u'JSXElement'))
+ var.get(u'exports').put(u'JSXOpeningElement', var.get(u'JSXOpeningElement'))
+ var.get(u'exports').put(u'JSXClosingElement', var.get(u'JSXClosingElement'))
+ var.get(u'exports').put(u'JSXEmptyExpression', var.get(u'JSXEmptyExpression'))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_471_._set_name(u'anonymous')
+PyJs_Object_474_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0)})
+@Js
+def PyJs_anonymous_475_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'ArrowFunctionExpression', u'_interopRequireWildcard', u'require', u'_babelTypes', u'FunctionExpression', u'module', u't', u'hasTypes', u'_params', u'_method'])
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_476_ = Js({})
+ var.put(u'newObj', PyJs_Object_476_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_ArrowFunctionExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'firstParam'])
+ if var.get(u'node').get(u'async'):
+ var.get(u"this").callprop(u'word', Js(u'async'))
+ var.get(u"this").callprop(u'space')
+ var.put(u'firstParam', var.get(u'node').get(u'params').get(u'0'))
+ if ((PyJsStrictEq(var.get(u'node').get(u'params').get(u'length'),Js(1.0)) and var.get(u't').callprop(u'isIdentifier', var.get(u'firstParam'))) and var.get(u'hasTypes')(var.get(u'node'), var.get(u'firstParam')).neg()):
+ var.get(u"this").callprop(u'print', var.get(u'firstParam'), var.get(u'node'))
+ else:
+ var.get(u"this").callprop(u'_params', var.get(u'node'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'=>'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'body'), var.get(u'node'))
+ PyJsHoisted_ArrowFunctionExpression_.func_name = u'ArrowFunctionExpression'
+ var.put(u'ArrowFunctionExpression', PyJsHoisted_ArrowFunctionExpression_)
+ @Js
+ def PyJsHoisted_FunctionExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u'node').get(u'async'):
+ var.get(u"this").callprop(u'word', Js(u'async'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'function'))
+ if var.get(u'node').get(u'generator'):
+ var.get(u"this").callprop(u'token', Js(u'*'))
+ if var.get(u'node').get(u'id'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'id'), var.get(u'node'))
+ else:
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'_params', var.get(u'node'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'body'), var.get(u'node'))
+ PyJsHoisted_FunctionExpression_.func_name = u'FunctionExpression'
+ var.put(u'FunctionExpression', PyJsHoisted_FunctionExpression_)
+ @Js
+ def PyJsHoisted_hasTypes_(node, param, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'param':param}, var)
+ var.registers([u'node', u'param'])
+ return ((((var.get(u'node').get(u'typeParameters') or var.get(u'node').get(u'returnType')) or var.get(u'param').get(u'typeAnnotation')) or var.get(u'param').get(u'optional')) or var.get(u'param').get(u'trailingComments'))
+ PyJsHoisted_hasTypes_.func_name = u'hasTypes'
+ var.put(u'hasTypes', PyJsHoisted_hasTypes_)
+ @Js
+ def PyJsHoisted__params_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'_this'])
+ var.put(u'_this', var.get(u"this"))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'typeParameters'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u'('))
+ @Js
+ def PyJs_iterator_478_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'iterator':PyJs_iterator_478_}, var)
+ var.registers([u'node'])
+ if var.get(u'node').get(u'optional'):
+ var.get(u'_this').callprop(u'token', Js(u'?'))
+ var.get(u'_this').callprop(u'print', var.get(u'node').get(u'typeAnnotation'), var.get(u'node'))
+ PyJs_iterator_478_._set_name(u'iterator')
+ PyJs_Object_477_ = Js({u'iterator':PyJs_iterator_478_})
+ var.get(u"this").callprop(u'printList', var.get(u'node').get(u'params'), var.get(u'node'), PyJs_Object_477_)
+ var.get(u"this").callprop(u'token', Js(u')'))
+ if var.get(u'node').get(u'returnType'):
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'returnType'), var.get(u'node'))
+ PyJsHoisted__params_.func_name = u'_params'
+ var.put(u'_params', PyJsHoisted__params_)
+ @Js
+ def PyJsHoisted__method_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'kind', u'key'])
+ var.put(u'kind', var.get(u'node').get(u'kind'))
+ var.put(u'key', var.get(u'node').get(u'key'))
+ if (PyJsStrictEq(var.get(u'kind'),Js(u'method')) or PyJsStrictEq(var.get(u'kind'),Js(u'init'))):
+ if var.get(u'node').get(u'generator'):
+ var.get(u"this").callprop(u'token', Js(u'*'))
+ if (PyJsStrictEq(var.get(u'kind'),Js(u'get')) or PyJsStrictEq(var.get(u'kind'),Js(u'set'))):
+ var.get(u"this").callprop(u'word', var.get(u'kind'))
+ var.get(u"this").callprop(u'space')
+ if var.get(u'node').get(u'async'):
+ var.get(u"this").callprop(u'word', Js(u'async'))
+ var.get(u"this").callprop(u'space')
+ if var.get(u'node').get(u'computed'):
+ var.get(u"this").callprop(u'token', Js(u'['))
+ var.get(u"this").callprop(u'print', var.get(u'key'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u']'))
+ else:
+ var.get(u"this").callprop(u'print', var.get(u'key'), var.get(u'node'))
+ var.get(u"this").callprop(u'_params', var.get(u'node'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'body'), var.get(u'node'))
+ PyJsHoisted__method_.func_name = u'_method'
+ var.put(u'_method', PyJsHoisted__method_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'FunctionDeclaration', var.get(u'undefined'))
+ var.get(u'exports').put(u'_params', var.get(u'_params'))
+ var.get(u'exports').put(u'_method', var.get(u'_method'))
+ var.get(u'exports').put(u'FunctionExpression', var.get(u'FunctionExpression'))
+ var.get(u'exports').put(u'ArrowFunctionExpression', var.get(u'ArrowFunctionExpression'))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ var.get(u'exports').put(u'FunctionDeclaration', var.get(u'FunctionExpression'))
+ pass
+ pass
+PyJs_anonymous_475_._set_name(u'anonymous')
+PyJs_Object_479_ = Js({u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_480_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'ExportDeclaration', u'ExportNamespaceSpecifier', u'_interopRequireWildcard', u'ExportDefaultDeclaration', u'ImportDeclaration', u'ExportSpecifier', u'ImportSpecifier', u'_babelTypes', u'require', u'module', u'ImportDefaultSpecifier', u'ExportNamedDeclaration', u't', u'ImportNamespaceSpecifier', u'ExportDefaultSpecifier', u'ExportAllDeclaration'])
+ @Js
+ def PyJsHoisted_ExportNamespaceSpecifier_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u'*'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'as'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'exported'), var.get(u'node'))
+ PyJsHoisted_ExportNamespaceSpecifier_.func_name = u'ExportNamespaceSpecifier'
+ var.put(u'ExportNamespaceSpecifier', PyJsHoisted_ExportNamespaceSpecifier_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_481_ = Js({})
+ var.put(u'newObj', PyJs_Object_481_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_ExportDefaultDeclaration_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'word', Js(u'export'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'default'))
+ var.get(u"this").callprop(u'space')
+ var.get(u'ExportDeclaration').callprop(u'apply', var.get(u"this"), var.get(u'arguments'))
+ PyJsHoisted_ExportDefaultDeclaration_.func_name = u'ExportDefaultDeclaration'
+ var.put(u'ExportDefaultDeclaration', PyJsHoisted_ExportDefaultDeclaration_)
+ @Js
+ def PyJsHoisted_ImportDeclaration_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'specifiers', u'first'])
+ var.get(u"this").callprop(u'word', Js(u'import'))
+ var.get(u"this").callprop(u'space')
+ if (PyJsStrictEq(var.get(u'node').get(u'importKind'),Js(u'type')) or PyJsStrictEq(var.get(u'node').get(u'importKind'),Js(u'typeof'))):
+ var.get(u"this").callprop(u'word', var.get(u'node').get(u'importKind'))
+ var.get(u"this").callprop(u'space')
+ var.put(u'specifiers', var.get(u'node').get(u'specifiers').callprop(u'slice', Js(0.0)))
+ if (var.get(u'specifiers') and var.get(u'specifiers').get(u'length')):
+ while var.get(u'true'):
+ var.put(u'first', var.get(u'specifiers').get(u'0'))
+ if (var.get(u't').callprop(u'isImportDefaultSpecifier', var.get(u'first')) or var.get(u't').callprop(u'isImportNamespaceSpecifier', var.get(u'first'))):
+ var.get(u"this").callprop(u'print', var.get(u'specifiers').callprop(u'shift'), var.get(u'node'))
+ if var.get(u'specifiers').get(u'length'):
+ var.get(u"this").callprop(u'token', Js(u','))
+ var.get(u"this").callprop(u'space')
+ else:
+ break
+ if var.get(u'specifiers').get(u'length'):
+ var.get(u"this").callprop(u'token', Js(u'{'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'printList', var.get(u'specifiers'), var.get(u'node'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'}'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'from'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'source'), var.get(u'node'))
+ var.get(u"this").callprop(u'semicolon')
+ PyJsHoisted_ImportDeclaration_.func_name = u'ImportDeclaration'
+ var.put(u'ImportDeclaration', PyJsHoisted_ImportDeclaration_)
+ @Js
+ def PyJsHoisted_ExportSpecifier_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'local'), var.get(u'node'))
+ if (var.get(u'node').get(u'exported') and PyJsStrictNeq(var.get(u'node').get(u'local').get(u'name'),var.get(u'node').get(u'exported').get(u'name'))):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'as'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'exported'), var.get(u'node'))
+ PyJsHoisted_ExportSpecifier_.func_name = u'ExportSpecifier'
+ var.put(u'ExportSpecifier', PyJsHoisted_ExportSpecifier_)
+ @Js
+ def PyJsHoisted_ImportSpecifier_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'imported'), var.get(u'node'))
+ if (var.get(u'node').get(u'local') and PyJsStrictNeq(var.get(u'node').get(u'local').get(u'name'),var.get(u'node').get(u'imported').get(u'name'))):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'as'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'local'), var.get(u'node'))
+ PyJsHoisted_ImportSpecifier_.func_name = u'ImportSpecifier'
+ var.put(u'ImportSpecifier', PyJsHoisted_ImportSpecifier_)
+ @Js
+ def PyJsHoisted_ExportDeclaration_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'specifiers', u'declar', u'first', u'hasSpecial'])
+ if var.get(u'node').get(u'declaration'):
+ var.put(u'declar', var.get(u'node').get(u'declaration'))
+ var.get(u"this").callprop(u'print', var.get(u'declar'), var.get(u'node'))
+ if var.get(u't').callprop(u'isStatement', var.get(u'declar')).neg():
+ var.get(u"this").callprop(u'semicolon')
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'exportKind'),Js(u'type')):
+ var.get(u"this").callprop(u'word', Js(u'type'))
+ var.get(u"this").callprop(u'space')
+ var.put(u'specifiers', var.get(u'node').get(u'specifiers').callprop(u'slice', Js(0.0)))
+ var.put(u'hasSpecial', Js(False))
+ while var.get(u'true'):
+ var.put(u'first', var.get(u'specifiers').get(u'0'))
+ if (var.get(u't').callprop(u'isExportDefaultSpecifier', var.get(u'first')) or var.get(u't').callprop(u'isExportNamespaceSpecifier', var.get(u'first'))):
+ var.put(u'hasSpecial', var.get(u'true'))
+ var.get(u"this").callprop(u'print', var.get(u'specifiers').callprop(u'shift'), var.get(u'node'))
+ if var.get(u'specifiers').get(u'length'):
+ var.get(u"this").callprop(u'token', Js(u','))
+ var.get(u"this").callprop(u'space')
+ else:
+ break
+ if (var.get(u'specifiers').get(u'length') or (var.get(u'specifiers').get(u'length').neg() and var.get(u'hasSpecial').neg())):
+ var.get(u"this").callprop(u'token', Js(u'{'))
+ if var.get(u'specifiers').get(u'length'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'printList', var.get(u'specifiers'), var.get(u'node'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'}'))
+ if var.get(u'node').get(u'source'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'from'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'source'), var.get(u'node'))
+ var.get(u"this").callprop(u'semicolon')
+ PyJsHoisted_ExportDeclaration_.func_name = u'ExportDeclaration'
+ var.put(u'ExportDeclaration', PyJsHoisted_ExportDeclaration_)
+ @Js
+ def PyJsHoisted_ImportDefaultSpecifier_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'local'), var.get(u'node'))
+ PyJsHoisted_ImportDefaultSpecifier_.func_name = u'ImportDefaultSpecifier'
+ var.put(u'ImportDefaultSpecifier', PyJsHoisted_ImportDefaultSpecifier_)
+ @Js
+ def PyJsHoisted_ExportNamedDeclaration_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'word', Js(u'export'))
+ var.get(u"this").callprop(u'space')
+ var.get(u'ExportDeclaration').callprop(u'apply', var.get(u"this"), var.get(u'arguments'))
+ PyJsHoisted_ExportNamedDeclaration_.func_name = u'ExportNamedDeclaration'
+ var.put(u'ExportNamedDeclaration', PyJsHoisted_ExportNamedDeclaration_)
+ @Js
+ def PyJsHoisted_ExportAllDeclaration_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', Js(u'export'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'*'))
+ if var.get(u'node').get(u'exported'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'as'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'exported'), var.get(u'node'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'from'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'source'), var.get(u'node'))
+ var.get(u"this").callprop(u'semicolon')
+ PyJsHoisted_ExportAllDeclaration_.func_name = u'ExportAllDeclaration'
+ var.put(u'ExportAllDeclaration', PyJsHoisted_ExportAllDeclaration_)
+ @Js
+ def PyJsHoisted_ImportNamespaceSpecifier_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'token', Js(u'*'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'as'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'local'), var.get(u'node'))
+ PyJsHoisted_ImportNamespaceSpecifier_.func_name = u'ImportNamespaceSpecifier'
+ var.put(u'ImportNamespaceSpecifier', PyJsHoisted_ImportNamespaceSpecifier_)
+ @Js
+ def PyJsHoisted_ExportDefaultSpecifier_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'exported'), var.get(u'node'))
+ PyJsHoisted_ExportDefaultSpecifier_.func_name = u'ExportDefaultSpecifier'
+ var.put(u'ExportDefaultSpecifier', PyJsHoisted_ExportDefaultSpecifier_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'ImportSpecifier', var.get(u'ImportSpecifier'))
+ var.get(u'exports').put(u'ImportDefaultSpecifier', var.get(u'ImportDefaultSpecifier'))
+ var.get(u'exports').put(u'ExportDefaultSpecifier', var.get(u'ExportDefaultSpecifier'))
+ var.get(u'exports').put(u'ExportSpecifier', var.get(u'ExportSpecifier'))
+ var.get(u'exports').put(u'ExportNamespaceSpecifier', var.get(u'ExportNamespaceSpecifier'))
+ var.get(u'exports').put(u'ExportAllDeclaration', var.get(u'ExportAllDeclaration'))
+ var.get(u'exports').put(u'ExportNamedDeclaration', var.get(u'ExportNamedDeclaration'))
+ var.get(u'exports').put(u'ExportDefaultDeclaration', var.get(u'ExportDefaultDeclaration'))
+ var.get(u'exports').put(u'ImportDeclaration', var.get(u'ImportDeclaration'))
+ var.get(u'exports').put(u'ImportNamespaceSpecifier', var.get(u'ImportNamespaceSpecifier'))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_480_._set_name(u'anonymous')
+PyJs_Object_482_ = Js({u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_483_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'ForOfStatement', u'LabeledStatement', u'ForAwaitStatement', u'module', u'DebuggerStatement', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'VariableDeclaration', u'ForStatement', u'getLastStatement', u'ContinueStatement', u'DoWhileStatement', u'SwitchStatement', u'CatchClause', u'buildLabelStatement', u'BreakStatement', u'buildForXStatement', u'exports', u'_interopRequireWildcard', u'_babelTypes', u'TryStatement', u'ForInStatement', u'SwitchCase', u'constDeclarationIdent', u'ThrowStatement', u'WithStatement', u'WhileStatement', u'variableDeclarationIdent', u't', u'ReturnStatement', u'VariableDeclarator', u'require', u'IfStatement'])
+ @Js
+ def PyJsHoisted_ForStatement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', Js(u'for'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'('))
+ (var.get(u"this").put(u'inForStatementInitCounter',Js(var.get(u"this").get(u'inForStatementInitCounter').to_number())+Js(1))-Js(1))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'init'), var.get(u'node'))
+ (var.get(u"this").put(u'inForStatementInitCounter',Js(var.get(u"this").get(u'inForStatementInitCounter').to_number())-Js(1))+Js(1))
+ var.get(u"this").callprop(u'token', Js(u';'))
+ if var.get(u'node').get(u'test'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'test'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u';'))
+ if var.get(u'node').get(u'update'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'update'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u')'))
+ var.get(u"this").callprop(u'printBlock', var.get(u'node'))
+ PyJsHoisted_ForStatement_.func_name = u'ForStatement'
+ var.put(u'ForStatement', PyJsHoisted_ForStatement_)
+ @Js
+ def PyJsHoisted_constDeclarationIdent_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i'])
+ var.get(u"this").callprop(u'token', Js(u','))
+ var.get(u"this").callprop(u'newline')
+ if var.get(u"this").callprop(u'endsWith', Js(u'\n')):
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else Js(u'label')))
+ @Js
+ def PyJs_anonymous_488_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'terminatorState', u'label'])
+ var.get(u"this").callprop(u'word', var.get(u'prefix'))
+ var.put(u'label', var.get(u'node').get(var.get(u'key')))
+ if var.get(u'label'):
+ var.get(u"this").callprop(u'space')
+ var.put(u'terminatorState', var.get(u"this").callprop(u'startTerminatorless'))
+ var.get(u"this").callprop(u'print', var.get(u'label'), var.get(u'node'))
+ var.get(u"this").callprop(u'endTerminatorless', var.get(u'terminatorState'))
+ var.get(u"this").callprop(u'semicolon')
+ PyJs_anonymous_488_._set_name(u'anonymous')
+ return PyJs_anonymous_488_
+ PyJsHoisted_buildLabelStatement_.func_name = u'buildLabelStatement'
+ var.put(u'buildLabelStatement', PyJsHoisted_buildLabelStatement_)
+ @Js
+ def PyJsHoisted_TryStatement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', Js(u'try'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'block'), var.get(u'node'))
+ var.get(u"this").callprop(u'space')
+ if var.get(u'node').get(u'handlers'):
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'handlers').get(u'0'), var.get(u'node'))
+ else:
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'handler'), var.get(u'node'))
+ if var.get(u'node').get(u'finalizer'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'finally'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'finalizer'), var.get(u'node'))
+ PyJsHoisted_TryStatement_.func_name = u'TryStatement'
+ var.put(u'TryStatement', PyJsHoisted_TryStatement_)
+ @Js
+ def PyJsHoisted_DebuggerStatement_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'word', Js(u'debugger'))
+ var.get(u"this").callprop(u'semicolon')
+ PyJsHoisted_DebuggerStatement_.func_name = u'DebuggerStatement'
+ var.put(u'DebuggerStatement', PyJsHoisted_DebuggerStatement_)
+ @Js
+ def PyJsHoisted_SwitchStatement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', Js(u'switch'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'('))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'discriminant'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u')'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'{'))
+ @Js
+ def PyJs_addNewlines_490_(leading, cas, this, arguments, var=var):
+ var = Scope({u'cas':cas, u'leading':leading, u'this':this, u'arguments':arguments, u'addNewlines':PyJs_addNewlines_490_}, var)
+ var.registers([u'cas', u'leading'])
+ if (var.get(u'leading').neg() and PyJsStrictEq(var.get(u'node').get(u'cases').get((var.get(u'node').get(u'cases').get(u'length')-Js(1.0))),var.get(u'cas'))):
+ return (-Js(1.0))
+ PyJs_addNewlines_490_._set_name(u'addNewlines')
+ PyJs_Object_489_ = Js({u'indent':var.get(u'true'),u'addNewlines':PyJs_addNewlines_490_})
+ var.get(u"this").callprop(u'printSequence', var.get(u'node').get(u'cases'), var.get(u'node'), PyJs_Object_489_)
+ var.get(u"this").callprop(u'token', Js(u'}'))
+ PyJsHoisted_SwitchStatement_.func_name = u'SwitchStatement'
+ var.put(u'SwitchStatement', PyJsHoisted_SwitchStatement_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_485_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_485_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_variableDeclarationIdent_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i'])
+ var.get(u"this").callprop(u'token', Js(u','))
+ var.get(u"this").callprop(u'newline')
+ if var.get(u"this").callprop(u'endsWith', Js(u'\n')):
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'declar', var.get(u'_ref'))
+ if var.get(u'declar').get(u'init'):
+ var.put(u'hasInits', var.get(u'true'))
+
+ var.put(u'separator', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'hasInits'):
+ var.put(u'separator', (var.get(u'constDeclarationIdent') if PyJsStrictEq(var.get(u'node').get(u'kind'),Js(u'const')) else var.get(u'variableDeclarationIdent')))
+ PyJs_Object_492_ = Js({u'separator':var.get(u'separator')})
+ var.get(u"this").callprop(u'printList', var.get(u'node').get(u'declarations'), var.get(u'node'), PyJs_Object_492_)
+ if var.get(u't').callprop(u'isFor', var.get(u'parent')):
+ if (PyJsStrictEq(var.get(u'parent').get(u'left'),var.get(u'node')) or PyJsStrictEq(var.get(u'parent').get(u'init'),var.get(u'node'))):
+ return var.get('undefined')
+ var.get(u"this").callprop(u'semicolon')
+ PyJsHoisted_VariableDeclaration_.func_name = u'VariableDeclaration'
+ var.put(u'VariableDeclaration', PyJsHoisted_VariableDeclaration_)
+ @Js
+ def PyJsHoisted_SwitchCase_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u'node').get(u'test'):
+ var.get(u"this").callprop(u'word', Js(u'case'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'test'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u':'))
+ else:
+ var.get(u"this").callprop(u'word', Js(u'default'))
+ var.get(u"this").callprop(u'token', Js(u':'))
+ if var.get(u'node').get(u'consequent').get(u'length'):
+ var.get(u"this").callprop(u'newline')
+ PyJs_Object_491_ = Js({u'indent':var.get(u'true')})
+ var.get(u"this").callprop(u'printSequence', var.get(u'node').get(u'consequent'), var.get(u'node'), PyJs_Object_491_)
+ PyJsHoisted_SwitchCase_.func_name = u'SwitchCase'
+ var.put(u'SwitchCase', PyJsHoisted_SwitchCase_)
+ @Js
+ def PyJsHoisted_VariableDeclarator_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'id'), var.get(u'node'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'id').get(u'typeAnnotation'), var.get(u'node'))
+ if var.get(u'node').get(u'init'):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'='))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'init'), var.get(u'node'))
+ PyJsHoisted_VariableDeclarator_.func_name = u'VariableDeclarator'
+ var.put(u'VariableDeclarator', PyJsHoisted_VariableDeclarator_)
+ @Js
+ def PyJsHoisted_IfStatement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'needsBlock'])
+ var.get(u"this").callprop(u'word', Js(u'if'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'('))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'test'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u')'))
+ var.get(u"this").callprop(u'space')
+ var.put(u'needsBlock', (var.get(u'node').get(u'alternate') and var.get(u't').callprop(u'isIfStatement', var.get(u'getLastStatement')(var.get(u'node').get(u'consequent')))))
+ if var.get(u'needsBlock'):
+ var.get(u"this").callprop(u'token', Js(u'{'))
+ var.get(u"this").callprop(u'newline')
+ var.get(u"this").callprop(u'indent')
+ var.get(u"this").callprop(u'printAndIndentOnComments', var.get(u'node').get(u'consequent'), var.get(u'node'))
+ if var.get(u'needsBlock'):
+ var.get(u"this").callprop(u'dedent')
+ var.get(u"this").callprop(u'newline')
+ var.get(u"this").callprop(u'token', Js(u'}'))
+ if var.get(u'node').get(u'alternate'):
+ if var.get(u"this").callprop(u'endsWith', Js(u'}')):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', Js(u'else'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'printAndIndentOnComments', var.get(u'node').get(u'alternate'), var.get(u'node'))
+ PyJsHoisted_IfStatement_.func_name = u'IfStatement'
+ var.put(u'IfStatement', PyJsHoisted_IfStatement_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'ThrowStatement', var.get(u'exports').put(u'BreakStatement', var.get(u'exports').put(u'ReturnStatement', var.get(u'exports').put(u'ContinueStatement', var.get(u'exports').put(u'ForAwaitStatement', var.get(u'exports').put(u'ForOfStatement', var.get(u'exports').put(u'ForInStatement', var.get(u'undefined'))))))))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'WithStatement', var.get(u'WithStatement'))
+ var.get(u'exports').put(u'IfStatement', var.get(u'IfStatement'))
+ var.get(u'exports').put(u'ForStatement', var.get(u'ForStatement'))
+ var.get(u'exports').put(u'WhileStatement', var.get(u'WhileStatement'))
+ var.get(u'exports').put(u'DoWhileStatement', var.get(u'DoWhileStatement'))
+ var.get(u'exports').put(u'LabeledStatement', var.get(u'LabeledStatement'))
+ var.get(u'exports').put(u'TryStatement', var.get(u'TryStatement'))
+ var.get(u'exports').put(u'CatchClause', var.get(u'CatchClause'))
+ var.get(u'exports').put(u'SwitchStatement', var.get(u'SwitchStatement'))
+ var.get(u'exports').put(u'SwitchCase', var.get(u'SwitchCase'))
+ var.get(u'exports').put(u'DebuggerStatement', var.get(u'DebuggerStatement'))
+ var.get(u'exports').put(u'VariableDeclaration', var.get(u'VariableDeclaration'))
+ var.get(u'exports').put(u'VariableDeclarator', var.get(u'VariableDeclarator'))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_buildForXStatement_486_(op, this, arguments, var=var):
+ var = Scope({u'this':this, u'buildForXStatement':PyJs_buildForXStatement_486_, u'arguments':arguments, u'op':op}, var)
+ var.registers([u'op'])
+ @Js
+ def PyJs_anonymous_487_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', Js(u'for'))
+ var.get(u"this").callprop(u'space')
+ if PyJsStrictEq(var.get(u'op'),Js(u'await')):
+ var.get(u"this").callprop(u'word', Js(u'await'))
+ var.get(u"this").callprop(u'space')
+ var.put(u'op', Js(u'of'))
+ var.get(u"this").callprop(u'token', Js(u'('))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'left'), var.get(u'node'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'word', var.get(u'op'))
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'right'), var.get(u'node'))
+ var.get(u"this").callprop(u'token', Js(u')'))
+ var.get(u"this").callprop(u'printBlock', var.get(u'node'))
+ PyJs_anonymous_487_._set_name(u'anonymous')
+ return PyJs_anonymous_487_
+ PyJs_buildForXStatement_486_._set_name(u'buildForXStatement')
+ var.put(u'buildForXStatement', PyJs_buildForXStatement_486_)
+ var.put(u'ForInStatement', var.get(u'exports').put(u'ForInStatement', var.get(u'buildForXStatement')(Js(u'in'))))
+ var.put(u'ForOfStatement', var.get(u'exports').put(u'ForOfStatement', var.get(u'buildForXStatement')(Js(u'of'))))
+ var.put(u'ForAwaitStatement', var.get(u'exports').put(u'ForAwaitStatement', var.get(u'buildForXStatement')(Js(u'await'))))
+ pass
+ pass
+ var.put(u'ContinueStatement', var.get(u'exports').put(u'ContinueStatement', var.get(u'buildLabelStatement')(Js(u'continue'))))
+ var.put(u'ReturnStatement', var.get(u'exports').put(u'ReturnStatement', var.get(u'buildLabelStatement')(Js(u'return'), Js(u'argument'))))
+ var.put(u'BreakStatement', var.get(u'exports').put(u'BreakStatement', var.get(u'buildLabelStatement')(Js(u'break'))))
+ var.put(u'ThrowStatement', var.get(u'exports').put(u'ThrowStatement', var.get(u'buildLabelStatement')(Js(u'throw'), Js(u'argument'))))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_483_._set_name(u'anonymous')
+PyJs_Object_493_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_494_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'TaggedTemplateExpression', u'TemplateElement', u'TemplateLiteral'])
+ @Js
+ def PyJsHoisted_TemplateElement_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'value', u'parent', u'isFirst', u'isLast'])
+ var.put(u'isFirst', PyJsStrictEq(var.get(u'parent').get(u'quasis').get(u'0'),var.get(u'node')))
+ var.put(u'isLast', PyJsStrictEq(var.get(u'parent').get(u'quasis').get((var.get(u'parent').get(u'quasis').get(u'length')-Js(1.0))),var.get(u'node')))
+ var.put(u'value', (((Js(u'`') if var.get(u'isFirst') else Js(u'}'))+var.get(u'node').get(u'value').get(u'raw'))+(Js(u'`') if var.get(u'isLast') else Js(u'${'))))
+ if var.get(u'isFirst').neg():
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', var.get(u'value'))
+ if var.get(u'isLast').neg():
+ var.get(u"this").callprop(u'space')
+ PyJsHoisted_TemplateElement_.func_name = u'TemplateElement'
+ var.put(u'TemplateElement', PyJsHoisted_TemplateElement_)
+ @Js
+ def PyJsHoisted_TaggedTemplateExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'tag'), var.get(u'node'))
+ var.get(u"this").callprop(u'print', var.get(u'node').get(u'quasi'), var.get(u'node'))
+ PyJsHoisted_TaggedTemplateExpression_.func_name = u'TaggedTemplateExpression'
+ var.put(u'TaggedTemplateExpression', PyJsHoisted_TaggedTemplateExpression_)
+ @Js
+ def PyJsHoisted_TemplateLiteral_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'quasis', u'i', u'node'])
+ var.put(u'quasis', var.get(u'node').get(u'quasis'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(0.0)):
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'print', var.get(u'elem'), var.get(u'node'))
+ if (var.get(u'i')<(var.get(u'len')-Js(1.0))):
+ var.get(u"this").callprop(u'token', Js(u','))
+ else:
+ var.get(u"this").callprop(u'token', Js(u','))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ var.get(u"this").callprop(u'token', Js(u']'))
+ PyJsHoisted_ArrayExpression_.func_name = u'ArrayExpression'
+ var.put(u'ArrayExpression', PyJsHoisted_ArrayExpression_)
+ @Js
+ def PyJsHoisted_BooleanLiteral_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', (Js(u'true') if var.get(u'node').get(u'value') else Js(u'false')))
+ PyJsHoisted_BooleanLiteral_.func_name = u'BooleanLiteral'
+ var.put(u'BooleanLiteral', PyJsHoisted_BooleanLiteral_)
+ @Js
+ def PyJsHoisted_NumericLiteral_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'raw'])
+ var.put(u'raw', var.get(u"this").callprop(u'getPossibleRaw', var.get(u'node')))
+ var.get(u"this").callprop(u'number', ((var.get(u'node').get(u'value')+Js(u'')) if (var.get(u'raw')==var.get(u"null")) else var.get(u'raw')))
+ PyJsHoisted_NumericLiteral_.func_name = u'NumericLiteral'
+ var.put(u'NumericLiteral', PyJsHoisted_NumericLiteral_)
+ @Js
+ def PyJsHoisted_ObjectExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'props'])
+ var.put(u'props', var.get(u'node').get(u'properties'))
+ var.get(u"this").callprop(u'token', Js(u'{'))
+ var.get(u"this").callprop(u'printInnerComments', var.get(u'node'))
+ if var.get(u'props').get(u'length'):
+ var.get(u"this").callprop(u'space')
+ PyJs_Object_499_ = Js({u'indent':var.get(u'true'),u'statement':var.get(u'true')})
+ var.get(u"this").callprop(u'printList', var.get(u'props'), var.get(u'node'), PyJs_Object_499_)
+ var.get(u"this").callprop(u'space')
+ var.get(u"this").callprop(u'token', Js(u'}'))
+ PyJsHoisted_ObjectExpression_.func_name = u'ObjectExpression'
+ var.put(u'ObjectExpression', PyJsHoisted_ObjectExpression_)
+ @Js
+ def PyJsHoisted_RegExpLiteral_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'word', (((Js(u'/')+var.get(u'node').get(u'pattern'))+Js(u'/'))+var.get(u'node').get(u'flags')))
+ PyJsHoisted_RegExpLiteral_.func_name = u'RegExpLiteral'
+ var.put(u'RegExpLiteral', PyJsHoisted_RegExpLiteral_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_497_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_497_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_Identifier_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u'node').get(u'variance'):
+ if PyJsStrictEq(var.get(u'node').get(u'variance'),Js(u'plus')):
+ var.get(u"this").callprop(u'token', Js(u'+'))
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'variance'),Js(u'minus')):
+ var.get(u"this").callprop(u'token', Js(u'-'))
+ var.get(u"this").callprop(u'word', var.get(u'node').get(u'name'))
+ PyJsHoisted_Identifier_.func_name = u'Identifier'
+ var.put(u'Identifier', PyJsHoisted_Identifier_)
+ @Js
+ def PyJsHoisted_NullLiteral_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'word', Js(u'null'))
+ PyJsHoisted_NullLiteral_.func_name = u'NullLiteral'
+ var.put(u'NullLiteral', PyJsHoisted_NullLiteral_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'ArrayPattern', var.get(u'exports').put(u'ObjectPattern', var.get(u'exports').put(u'RestProperty', var.get(u'exports').put(u'SpreadProperty', var.get(u'exports').put(u'SpreadElement', var.get(u'undefined'))))))
+ var.get(u'exports').put(u'Identifier', var.get(u'Identifier'))
+ var.get(u'exports').put(u'RestElement', var.get(u'RestElement'))
+ var.get(u'exports').put(u'ObjectExpression', var.get(u'ObjectExpression'))
+ var.get(u'exports').put(u'ObjectMethod', var.get(u'ObjectMethod'))
+ var.get(u'exports').put(u'ObjectProperty', var.get(u'ObjectProperty'))
+ var.get(u'exports').put(u'ArrayExpression', var.get(u'ArrayExpression'))
+ var.get(u'exports').put(u'RegExpLiteral', var.get(u'RegExpLiteral'))
+ var.get(u'exports').put(u'BooleanLiteral', var.get(u'BooleanLiteral'))
+ var.get(u'exports').put(u'NullLiteral', var.get(u'NullLiteral'))
+ var.get(u'exports').put(u'NumericLiteral', var.get(u'NumericLiteral'))
+ var.get(u'exports').put(u'StringLiteral', var.get(u'StringLiteral'))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ var.put(u'_jsesc', var.get(u'require')(Js(u'jsesc')))
+ var.put(u'_jsesc2', var.get(u'_interopRequireDefault')(var.get(u'_jsesc')))
+ pass
+ pass
+ pass
+ pass
+ var.get(u'exports').put(u'SpreadElement', var.get(u'RestElement'))
+ var.get(u'exports').put(u'SpreadProperty', var.get(u'RestElement'))
+ var.get(u'exports').put(u'RestProperty', var.get(u'RestElement'))
+ pass
+ var.get(u'exports').put(u'ObjectPattern', var.get(u'ObjectExpression'))
+ pass
+ pass
+ pass
+ var.get(u'exports').put(u'ArrayPattern', var.get(u'ArrayExpression'))
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_496_._set_name(u'anonymous')
+PyJs_Object_501_ = Js({u'babel-types':Js(258.0),u'jsesc':Js(283.0)})
+@Js
+def PyJs_anonymous_502_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'Generator', u'_sourceMap', u'_detectIndent2', u'module', u'_interopRequireDefault', u'_printer2', u'normalizeOptions', u'findCommonStringDelimiter', u'_possibleConstructorReturn3', u'_possibleConstructorReturn2', u'_classCallCheck3', u'_classCallCheck2', u'_detectIndent', u'_babelMessages', u'exports', u'_printer', u'_interopRequireWildcard', u'_inherits3', u'_inherits2', u'require', u'CodeGenerator', u'messages', u'_sourceMap2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_505_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_505_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_findCommonStringDelimiter_(code, tokens, this, arguments, var=var):
+ var = Scope({u'tokens':tokens, u'this':this, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code', u'checked', u'i', u'tokens', u'raw', u'token', u'DEFAULT_STRING_DELIMITER', u'occurences'])
+ var.put(u'DEFAULT_STRING_DELIMITER', Js(u'double'))
+ if var.get(u'code').neg():
+ return var.get(u'DEFAULT_STRING_DELIMITER')
+ PyJs_Object_513_ = Js({u'single':Js(0.0),u'double':Js(0.0)})
+ var.put(u'occurences', PyJs_Object_513_)
+ var.put(u'checked', Js(0.0))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=Js(3.0)):
+ break
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ if (var.get(u'occurences').get(u'single')>var.get(u'occurences').get(u'double')):
+ return Js(u'single')
+ else:
+ return Js(u'double')
+ PyJsHoisted_findCommonStringDelimiter_.func_name = u'findCommonStringDelimiter'
+ var.put(u'findCommonStringDelimiter', PyJsHoisted_findCommonStringDelimiter_)
+ @Js
+ def PyJsHoisted_normalizeOptions_(code, opts, tokens, this, arguments, var=var):
+ var = Scope({u'tokens':tokens, u'this':this, u'code':code, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'style', u'code', u'indent', u'format', u'tokens', u'opts'])
+ var.put(u'style', Js(u' '))
+ if (var.get(u'code') and PyJsStrictEq(var.get(u'code',throw=False).typeof(),Js(u'string'))):
+ var.put(u'indent', PyJsComma(Js(0.0),var.get(u'_detectIndent2').get(u'default'))(var.get(u'code')).get(u'indent'))
+ if (var.get(u'indent') and PyJsStrictNeq(var.get(u'indent'),Js(u' '))):
+ var.put(u'style', var.get(u'indent'))
+ PyJs_Object_510_ = Js({u'adjustMultilineComment':var.get(u'true'),u'style':var.get(u'style'),u'base':Js(0.0)})
+ PyJs_Object_509_ = Js({u'auxiliaryCommentBefore':var.get(u'opts').get(u'auxiliaryCommentBefore'),u'auxiliaryCommentAfter':var.get(u'opts').get(u'auxiliaryCommentAfter'),u'shouldPrintComment':var.get(u'opts').get(u'shouldPrintComment'),u'retainLines':var.get(u'opts').get(u'retainLines'),u'retainFunctionParens':var.get(u'opts').get(u'retainFunctionParens'),u'comments':((var.get(u'opts').get(u'comments')==var.get(u"null")) or var.get(u'opts').get(u'comments')),u'compact':var.get(u'opts').get(u'compact'),u'minified':var.get(u'opts').get(u'minified'),u'concise':var.get(u'opts').get(u'concise'),u'quotes':(var.get(u'opts').get(u'quotes') or var.get(u'findCommonStringDelimiter')(var.get(u'code'), var.get(u'tokens'))),u'indent':PyJs_Object_510_})
+ var.put(u'format', PyJs_Object_509_)
+ if var.get(u'format').get(u'minified'):
+ var.get(u'format').put(u'compact', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_511_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'format').get(u'comments')
+ PyJs_anonymous_511_._set_name(u'anonymous')
+ var.get(u'format').put(u'shouldPrintComment', (var.get(u'format').get(u'shouldPrintComment') or PyJs_anonymous_511_))
+ else:
+ @Js
+ def PyJs_anonymous_512_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((var.get(u'format').get(u'comments') or (var.get(u'value').callprop(u'indexOf', Js(u'@license'))>=Js(0.0))) or (var.get(u'value').callprop(u'indexOf', Js(u'@preserve'))>=Js(0.0)))
+ PyJs_anonymous_512_._set_name(u'anonymous')
+ var.get(u'format').put(u'shouldPrintComment', (var.get(u'format').get(u'shouldPrintComment') or PyJs_anonymous_512_))
+ if PyJsStrictEq(var.get(u'format').get(u'compact'),Js(u'auto')):
+ var.get(u'format').put(u'compact', (var.get(u'code').get(u'length')>Js(100000.0)))
+ if var.get(u'format').get(u'compact'):
+ var.get(u'console').callprop(u'error', (Js(u'[BABEL] ')+var.get(u'messages').callprop(u'get', Js(u'codeGeneratorDeopt'), var.get(u'opts').get(u'filename'), Js(u'100KB'))))
+ if var.get(u'format').get(u'compact'):
+ var.get(u'format').get(u'indent').put(u'adjustMultilineComment', Js(False))
+ return var.get(u'format')
+ PyJsHoisted_normalizeOptions_.func_name = u'normalizeOptions'
+ var.put(u'normalizeOptions', PyJsHoisted_normalizeOptions_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_504_ = Js({})
+ var.put(u'newObj', PyJs_Object_504_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'CodeGenerator', var.get(u'undefined'))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_possibleConstructorReturn2', var.get(u'require')(Js(u'babel-runtime/helpers/possibleConstructorReturn')))
+ var.put(u'_possibleConstructorReturn3', var.get(u'_interopRequireDefault')(var.get(u'_possibleConstructorReturn2')))
+ var.put(u'_inherits2', var.get(u'require')(Js(u'babel-runtime/helpers/inherits')))
+ var.put(u'_inherits3', var.get(u'_interopRequireDefault')(var.get(u'_inherits2')))
+ @Js
+ def PyJs_anonymous_503_(ast, opts, code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments, u'opts':opts, u'ast':ast}, var)
+ var.registers([u'code', u'gen', u'opts', u'ast'])
+ var.put(u'gen', var.get(u'Generator').create(var.get(u'ast'), var.get(u'opts'), var.get(u'code')))
+ return var.get(u'gen').callprop(u'generate')
+ PyJs_anonymous_503_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_503_)
+ var.put(u'_detectIndent', var.get(u'require')(Js(u'detect-indent')))
+ var.put(u'_detectIndent2', var.get(u'_interopRequireDefault')(var.get(u'_detectIndent')))
+ var.put(u'_sourceMap', var.get(u'require')(Js(u'./source-map')))
+ var.put(u'_sourceMap2', var.get(u'_interopRequireDefault')(var.get(u'_sourceMap')))
+ var.put(u'_babelMessages', var.get(u'require')(Js(u'babel-messages')))
+ var.put(u'messages', var.get(u'_interopRequireWildcard')(var.get(u'_babelMessages')))
+ var.put(u'_printer', var.get(u'require')(Js(u'./printer')))
+ var.put(u'_printer2', var.get(u'_interopRequireDefault')(var.get(u'_printer')))
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_506_(_Printer, this, arguments, var=var):
+ var = Scope({u'this':this, u'_Printer':_Printer, u'arguments':arguments}, var)
+ var.registers([u'_Printer', u'Generator'])
+ @Js
+ def PyJsHoisted_Generator_(ast, opts, code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments, u'opts':opts, u'ast':ast}, var)
+ var.registers([u'map', u'code', u'_this', u'ast', u'format', u'tokens', u'opts'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'Generator'))
+ PyJs_Object_507_ = Js({})
+ var.put(u'opts', (var.get(u'opts') or PyJs_Object_507_))
+ var.put(u'tokens', (var.get(u'ast').get(u'tokens') or Js([])))
+ var.put(u'format', var.get(u'normalizeOptions')(var.get(u'code'), var.get(u'opts'), var.get(u'tokens')))
+ var.put(u'map', (var.get(u'_sourceMap2').get(u'default').create(var.get(u'opts'), var.get(u'code')) if var.get(u'opts').get(u'sourceMaps') else var.get(u"null")))
+ var.put(u'_this', PyJsComma(Js(0.0),var.get(u'_possibleConstructorReturn3').get(u'default'))(var.get(u"this"), var.get(u'_Printer').callprop(u'call', var.get(u"this"), var.get(u'format'), var.get(u'map'), var.get(u'tokens'))))
+ var.get(u'_this').put(u'ast', var.get(u'ast'))
+ return var.get(u'_this')
+ PyJsHoisted_Generator_.func_name = u'Generator'
+ var.put(u'Generator', PyJsHoisted_Generator_)
+ PyJsComma(Js(0.0),var.get(u'_inherits3').get(u'default'))(var.get(u'Generator'), var.get(u'_Printer'))
+ pass
+ @Js
+ def PyJs_generate_508_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'generate':PyJs_generate_508_}, var)
+ var.registers([])
+ return var.get(u'_Printer').get(u'prototype').get(u'generate').callprop(u'call', var.get(u"this"), var.get(u"this").get(u'ast'))
+ PyJs_generate_508_._set_name(u'generate')
+ var.get(u'Generator').get(u'prototype').put(u'generate', PyJs_generate_508_)
+ return var.get(u'Generator')
+ PyJs_anonymous_506_._set_name(u'anonymous')
+ var.put(u'Generator', PyJs_anonymous_506_(var.get(u'_printer2').get(u'default')))
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_514_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'CodeGenerator'])
+ @Js
+ def PyJsHoisted_CodeGenerator_(ast, opts, code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments, u'opts':opts, u'ast':ast}, var)
+ var.registers([u'code', u'opts', u'ast'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'CodeGenerator'))
+ var.get(u"this").put(u'_generator', var.get(u'Generator').create(var.get(u'ast'), var.get(u'opts'), var.get(u'code')))
+ PyJsHoisted_CodeGenerator_.func_name = u'CodeGenerator'
+ var.put(u'CodeGenerator', PyJsHoisted_CodeGenerator_)
+ pass
+ @Js
+ def PyJs_generate_515_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'generate':PyJs_generate_515_}, var)
+ var.registers([])
+ return var.get(u"this").get(u'_generator').callprop(u'generate')
+ PyJs_generate_515_._set_name(u'generate')
+ var.get(u'CodeGenerator').get(u'prototype').put(u'generate', PyJs_generate_515_)
+ return var.get(u'CodeGenerator')
+ PyJs_anonymous_514_._set_name(u'anonymous')
+ var.put(u'CodeGenerator', var.get(u'exports').put(u'CodeGenerator', PyJs_anonymous_514_()))
+PyJs_anonymous_502_._set_name(u'anonymous')
+PyJs_Object_516_ = Js({u'./printer':Js(44.0),u'./source-map':Js(45.0),u'babel-messages':Js(57.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-runtime/helpers/inherits':Js(111.0),u'babel-runtime/helpers/possibleConstructorReturn':Js(113.0),u'detect-indent':Js(271.0)})
+@Js
+def PyJs_anonymous_517_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'needsParens', u'module', u'_parentheses', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'find', u'needsWhitespaceBefore', u'_keys', u'parens', u'exports', u'expandedWhitespaceNodes', u'_interopRequireWildcard', u'_babelTypes', u'expandAliases', u'needsWhitespace', u'_keys2', u'_whitespace2', u'expandedParens', u'expandedWhitespaceList', u'require', u'isOrHasCallExpression', u'_whitespace', u't', u'needsWhitespaceAfter'])
+ @Js
+ def PyJsHoisted_needsParens_(node, parent, printStack, this, arguments, var=var):
+ var = Scope({u'node':node, u'printStack':printStack, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'printStack', u'parent'])
+ if var.get(u'parent').neg():
+ return Js(False)
+ if (var.get(u't').callprop(u'isNewExpression', var.get(u'parent')) and PyJsStrictEq(var.get(u'parent').get(u'callee'),var.get(u'node'))):
+ if var.get(u'isOrHasCallExpression')(var.get(u'node')):
+ return var.get(u'true')
+ return var.get(u'find')(var.get(u'expandedParens'), var.get(u'node'), var.get(u'parent'), var.get(u'printStack'))
+ PyJsHoisted_needsParens_.func_name = u'needsParens'
+ var.put(u'needsParens', PyJsHoisted_needsParens_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_518_ = Js({})
+ var.put(u'newObj', PyJs_Object_518_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_needsWhitespaceBefore_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ return var.get(u'needsWhitespace')(var.get(u'node'), var.get(u'parent'), Js(u'before'))
+ PyJsHoisted_needsWhitespaceBefore_.func_name = u'needsWhitespaceBefore'
+ var.put(u'needsWhitespaceBefore', PyJsHoisted_needsWhitespaceBefore_)
+ @Js
+ def PyJsHoisted_expandAliases_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'_isArray', u'_iterator', u'_isArray2', u'_ref2', u'_i2', u'newObj', u'alias', u'add', u'_i', u'obj', u'_ref', u'_iterator2', u'type', u'aliases'])
+ @Js
+ def PyJsHoisted_add_(type, func, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments, u'func':func}, var)
+ var.registers([u'type', u'func', u'fn'])
+ var.put(u'fn', var.get(u'newObj').get(var.get(u'type')))
+ @Js
+ def PyJs_anonymous_521_(node, parent, stack, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'stack':stack, u'parent':parent, u'arguments':arguments}, var)
+ var.registers([u'node', u'result', u'parent', u'stack'])
+ var.put(u'result', var.get(u'fn')(var.get(u'node'), var.get(u'parent'), var.get(u'stack')))
+ return (var.get(u'func')(var.get(u'node'), var.get(u'parent'), var.get(u'stack')) if (var.get(u'result')==var.get(u"null")) else var.get(u'result'))
+ PyJs_anonymous_521_._set_name(u'anonymous')
+ var.get(u'newObj').put(var.get(u'type'), (PyJs_anonymous_521_ if var.get(u'fn') else var.get(u'func')))
+ PyJsHoisted_add_.func_name = u'add'
+ var.put(u'add', PyJsHoisted_add_)
+ PyJs_Object_520_ = Js({})
+ var.put(u'newObj', PyJs_Object_520_)
+ pass
+ #for JS loop
+ var.put(u'_iterator', PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u'obj')))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'type', var.get(u'_ref'))
+ var.put(u'aliases', var.get(u't').get(u'FLIPPED_ALIAS_KEYS').get(var.get(u'type')))
+ if var.get(u'aliases'):
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'aliases'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'alias', var.get(u'_ref2'))
+ var.get(u'add')(var.get(u'alias'), var.get(u'obj').get(var.get(u'type')))
+
+ else:
+ var.get(u'add')(var.get(u'type'), var.get(u'obj').get(var.get(u'type')))
+
+ return var.get(u'newObj')
+ PyJsHoisted_expandAliases_.func_name = u'expandAliases'
+ var.put(u'expandAliases', PyJsHoisted_expandAliases_)
+ @Js
+ def PyJsHoisted_needsWhitespace_(node, parent, type, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'type':type, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent', u'i', u'items', u'linesInfo', u'type'])
+ if var.get(u'node').neg():
+ return Js(0.0)
+ if var.get(u't').callprop(u'isExpressionStatement', var.get(u'node')):
+ var.put(u'node', var.get(u'node').get(u'expression'))
+ var.put(u'linesInfo', var.get(u'find')(var.get(u'expandedWhitespaceNodes'), var.get(u'node'), var.get(u'parent')))
+ if var.get(u'linesInfo').neg():
+ var.put(u'items', var.get(u'find')(var.get(u'expandedWhitespaceList'), var.get(u'node'), var.get(u'parent')))
+ if var.get(u'items'):
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')var.get(u'nodePos')):
+ return var.get(u'true')
+ if ((PyJsStrictEq(var.get(u'parentPos'),var.get(u'nodePos')) and PyJsStrictEq(var.get(u'parent').get(u'right'),var.get(u'node'))) and var.get(u't').callprop(u'isLogicalExpression', var.get(u'parent')).neg()):
+ return var.get(u'true')
+ return Js(False)
+ PyJsHoisted_Binary_.func_name = u'Binary'
+ var.put(u'Binary', PyJsHoisted_Binary_)
+ @Js
+ def PyJsHoisted_SequenceExpression_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ if var.get(u't').callprop(u'isForStatement', var.get(u'parent')):
+ return Js(False)
+ if (var.get(u't').callprop(u'isExpressionStatement', var.get(u'parent')) and PyJsStrictEq(var.get(u'parent').get(u'expression'),var.get(u'node'))):
+ return Js(False)
+ if var.get(u't').callprop(u'isReturnStatement', var.get(u'parent')):
+ return Js(False)
+ if var.get(u't').callprop(u'isThrowStatement', var.get(u'parent')):
+ return Js(False)
+ if (var.get(u't').callprop(u'isSwitchStatement', var.get(u'parent')) and PyJsStrictEq(var.get(u'parent').get(u'discriminant'),var.get(u'node'))):
+ return Js(False)
+ if (var.get(u't').callprop(u'isWhileStatement', var.get(u'parent')) and PyJsStrictEq(var.get(u'parent').get(u'test'),var.get(u'node'))):
+ return Js(False)
+ if (var.get(u't').callprop(u'isIfStatement', var.get(u'parent')) and PyJsStrictEq(var.get(u'parent').get(u'test'),var.get(u'node'))):
+ return Js(False)
+ if (var.get(u't').callprop(u'isForInStatement', var.get(u'parent')) and PyJsStrictEq(var.get(u'parent').get(u'right'),var.get(u'node'))):
+ return Js(False)
+ return var.get(u'true')
+ PyJsHoisted_SequenceExpression_.func_name = u'SequenceExpression'
+ var.put(u'SequenceExpression', PyJsHoisted_SequenceExpression_)
+ @Js
+ def PyJsHoisted_ArrowFunctionExpression_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ if var.get(u't').callprop(u'isExportDeclaration', var.get(u'parent')):
+ return var.get(u'true')
+ if (var.get(u't').callprop(u'isBinaryExpression', var.get(u'parent')) or var.get(u't').callprop(u'isLogicalExpression', var.get(u'parent'))):
+ return var.get(u'true')
+ if var.get(u't').callprop(u'isUnaryExpression', var.get(u'parent')):
+ return var.get(u'true')
+ return var.get(u'UnaryLike')(var.get(u'node'), var.get(u'parent'))
+ PyJsHoisted_ArrowFunctionExpression_.func_name = u'ArrowFunctionExpression'
+ var.put(u'ArrowFunctionExpression', PyJsHoisted_ArrowFunctionExpression_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_524_ = Js({})
+ var.put(u'newObj', PyJs_Object_524_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_ClassExpression_(node, parent, printStack, this, arguments, var=var):
+ var = Scope({u'node':node, u'printStack':printStack, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'printStack', u'parent'])
+ PyJs_Object_528_ = Js({u'considerDefaultExports':var.get(u'true')})
+ return var.get(u'isFirstInStatement')(var.get(u'printStack'), PyJs_Object_528_)
+ PyJsHoisted_ClassExpression_.func_name = u'ClassExpression'
+ var.put(u'ClassExpression', PyJsHoisted_ClassExpression_)
+ @Js
+ def PyJsHoisted_ConditionalExpression_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ if var.get(u't').callprop(u'isUnaryLike', var.get(u'parent')):
+ return var.get(u'true')
+ if var.get(u't').callprop(u'isBinary', var.get(u'parent')):
+ return var.get(u'true')
+ PyJs_Object_533_ = Js({u'test':var.get(u'node')})
+ if var.get(u't').callprop(u'isConditionalExpression', var.get(u'parent'), PyJs_Object_533_):
+ return var.get(u'true')
+ return var.get(u'UnaryLike')(var.get(u'node'), var.get(u'parent'))
+ PyJsHoisted_ConditionalExpression_.func_name = u'ConditionalExpression'
+ var.put(u'ConditionalExpression', PyJsHoisted_ConditionalExpression_)
+ @Js
+ def PyJsHoisted_FunctionExpression_(node, parent, printStack, this, arguments, var=var):
+ var = Scope({u'node':node, u'printStack':printStack, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'printStack', u'parent'])
+ PyJs_Object_532_ = Js({u'considerDefaultExports':var.get(u'true')})
+ return var.get(u'isFirstInStatement')(var.get(u'printStack'), PyJs_Object_532_)
+ PyJsHoisted_FunctionExpression_.func_name = u'FunctionExpression'
+ var.put(u'FunctionExpression', PyJsHoisted_FunctionExpression_)
+ @Js
+ def PyJsHoisted_UpdateExpression_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ if (var.get(u't').callprop(u'isMemberExpression', var.get(u'parent')) and PyJsStrictEq(var.get(u'parent').get(u'object'),var.get(u'node'))):
+ return var.get(u'true')
+ return Js(False)
+ PyJsHoisted_UpdateExpression_.func_name = u'UpdateExpression'
+ var.put(u'UpdateExpression', PyJsHoisted_UpdateExpression_)
+ @Js
+ def PyJsHoisted_YieldExpression_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ def PyJs_LONG_527_(var=var):
+ return (((((var.get(u't').callprop(u'isBinary', var.get(u'parent')) or var.get(u't').callprop(u'isUnaryLike', var.get(u'parent'))) or var.get(u't').callprop(u'isCallExpression', var.get(u'parent'))) or var.get(u't').callprop(u'isMemberExpression', var.get(u'parent'))) or var.get(u't').callprop(u'isNewExpression', var.get(u'parent'))) or (var.get(u't').callprop(u'isConditionalExpression', var.get(u'parent')) and PyJsStrictEq(var.get(u'node'),var.get(u'parent').get(u'test'))))
+ return PyJs_LONG_527_()
+ PyJsHoisted_YieldExpression_.func_name = u'YieldExpression'
+ var.put(u'YieldExpression', PyJsHoisted_YieldExpression_)
+ @Js
+ def PyJsHoisted_ObjectExpression_(node, parent, printStack, this, arguments, var=var):
+ var = Scope({u'node':node, u'printStack':printStack, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'printStack', u'parent'])
+ PyJs_Object_526_ = Js({u'considerArrow':var.get(u'true')})
+ return var.get(u'isFirstInStatement')(var.get(u'printStack'), PyJs_Object_526_)
+ PyJsHoisted_ObjectExpression_.func_name = u'ObjectExpression'
+ var.put(u'ObjectExpression', PyJsHoisted_ObjectExpression_)
+ @Js
+ def PyJsHoisted_BinaryExpression_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ if PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'in')):
+ if var.get(u't').callprop(u'isVariableDeclarator', var.get(u'parent')):
+ return var.get(u'true')
+ if var.get(u't').callprop(u'isFor', var.get(u'parent')):
+ return var.get(u'true')
+ return Js(False)
+ PyJsHoisted_BinaryExpression_.func_name = u'BinaryExpression'
+ var.put(u'BinaryExpression', PyJsHoisted_BinaryExpression_)
+ @Js
+ def PyJsHoisted_AssignmentExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u't').callprop(u'isObjectPattern', var.get(u'node').get(u'left')):
+ return var.get(u'true')
+ else:
+ return var.get(u'ConditionalExpression').callprop(u'apply', var.get(u'undefined'), var.get(u'arguments'))
+ PyJsHoisted_AssignmentExpression_.func_name = u'AssignmentExpression'
+ var.put(u'AssignmentExpression', PyJsHoisted_AssignmentExpression_)
+ @Js
+ def PyJsHoisted_isFirstInStatement_(printStack, this, arguments, var=var):
+ var = Scope({u'this':this, u'printStack':printStack, u'arguments':arguments}, var)
+ var.registers([u'_ref$considerArrow', u'node', u'considerDefaultExports', u'parent', u'i', u'printStack', u'_ref$considerDefaultE', u'considerArrow', u'_ref'])
+ PyJs_Object_534_ = Js({})
+ var.put(u'_ref', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else PyJs_Object_534_))
+ var.put(u'_ref$considerArrow', var.get(u'_ref').get(u'considerArrow'))
+ var.put(u'considerArrow', (Js(False) if PyJsStrictEq(var.get(u'_ref$considerArrow'),var.get(u'undefined')) else var.get(u'_ref$considerArrow')))
+ var.put(u'_ref$considerDefaultE', var.get(u'_ref').get(u'considerDefaultExports'))
+ var.put(u'considerDefaultExports', (Js(False) if PyJsStrictEq(var.get(u'_ref$considerDefaultE'),var.get(u'undefined')) else var.get(u'_ref$considerDefaultE')))
+ var.put(u'i', (var.get(u'printStack').get(u'length')-Js(1.0)))
+ var.put(u'node', var.get(u'printStack').get(var.get(u'i')))
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ var.put(u'parent', var.get(u'printStack').get(var.get(u'i')))
+ while (var.get(u'i')>Js(0.0)):
+ PyJs_Object_535_ = Js({u'expression':var.get(u'node')})
+ if var.get(u't').callprop(u'isExpressionStatement', var.get(u'parent'), PyJs_Object_535_):
+ return var.get(u'true')
+ PyJs_Object_536_ = Js({u'declaration':var.get(u'node')})
+ if (var.get(u'considerDefaultExports') and var.get(u't').callprop(u'isExportDefaultDeclaration', var.get(u'parent'), PyJs_Object_536_)):
+ return var.get(u'true')
+ PyJs_Object_537_ = Js({u'body':var.get(u'node')})
+ if (var.get(u'considerArrow') and var.get(u't').callprop(u'isArrowFunctionExpression', var.get(u'parent'), PyJs_Object_537_)):
+ return var.get(u'true')
+ def PyJs_LONG_541_(var=var):
+ PyJs_Object_538_ = Js({u'callee':var.get(u'node')})
+ PyJs_Object_539_ = Js({u'object':var.get(u'node')})
+ PyJs_Object_540_ = Js({u'test':var.get(u'node')})
+ return (((var.get(u't').callprop(u'isCallExpression', var.get(u'parent'), PyJs_Object_538_) or (var.get(u't').callprop(u'isSequenceExpression', var.get(u'parent')) and PyJsStrictEq(var.get(u'parent').get(u'expressions').get(u'0'),var.get(u'node')))) or var.get(u't').callprop(u'isMemberExpression', var.get(u'parent'), PyJs_Object_539_)) or var.get(u't').callprop(u'isConditional', var.get(u'parent'), PyJs_Object_540_))
+ PyJs_Object_542_ = Js({u'left':var.get(u'node')})
+ PyJs_Object_543_ = Js({u'left':var.get(u'node')})
+ if ((PyJs_LONG_541_() or var.get(u't').callprop(u'isBinary', var.get(u'parent'), PyJs_Object_542_)) or var.get(u't').callprop(u'isAssignmentExpression', var.get(u'parent'), PyJs_Object_543_)):
+ var.put(u'node', var.get(u'parent'))
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ var.put(u'parent', var.get(u'printStack').get(var.get(u'i')))
+ else:
+ return Js(False)
+ return Js(False)
+ PyJsHoisted_isFirstInStatement_.func_name = u'isFirstInStatement'
+ var.put(u'isFirstInStatement', PyJsHoisted_isFirstInStatement_)
+ @Js
+ def PyJsHoisted_UnaryLike_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ PyJs_Object_529_ = Js({u'object':var.get(u'node')})
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'parent'), PyJs_Object_529_):
+ return var.get(u'true')
+ PyJs_Object_530_ = Js({u'callee':var.get(u'node')})
+ PyJs_Object_531_ = Js({u'callee':var.get(u'node')})
+ if (var.get(u't').callprop(u'isCallExpression', var.get(u'parent'), PyJs_Object_530_) or var.get(u't').callprop(u'isNewExpression', var.get(u'parent'), PyJs_Object_531_)):
+ return var.get(u'true')
+ return Js(False)
+ PyJsHoisted_UnaryLike_.func_name = u'UnaryLike'
+ var.put(u'UnaryLike', PyJsHoisted_UnaryLike_)
+ @Js
+ def PyJsHoisted_NullableTypeAnnotation_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ return var.get(u't').callprop(u'isArrayTypeAnnotation', var.get(u'parent'))
+ PyJsHoisted_NullableTypeAnnotation_.func_name = u'NullableTypeAnnotation'
+ var.put(u'NullableTypeAnnotation', PyJsHoisted_NullableTypeAnnotation_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'AwaitExpression', var.get(u'exports').put(u'FunctionTypeAnnotation', var.get(u'undefined')))
+ var.get(u'exports').put(u'NullableTypeAnnotation', var.get(u'NullableTypeAnnotation'))
+ var.get(u'exports').put(u'UpdateExpression', var.get(u'UpdateExpression'))
+ var.get(u'exports').put(u'ObjectExpression', var.get(u'ObjectExpression'))
+ var.get(u'exports').put(u'Binary', var.get(u'Binary'))
+ var.get(u'exports').put(u'BinaryExpression', var.get(u'BinaryExpression'))
+ var.get(u'exports').put(u'SequenceExpression', var.get(u'SequenceExpression'))
+ var.get(u'exports').put(u'YieldExpression', var.get(u'YieldExpression'))
+ var.get(u'exports').put(u'ClassExpression', var.get(u'ClassExpression'))
+ var.get(u'exports').put(u'UnaryLike', var.get(u'UnaryLike'))
+ var.get(u'exports').put(u'FunctionExpression', var.get(u'FunctionExpression'))
+ var.get(u'exports').put(u'ArrowFunctionExpression', var.get(u'ArrowFunctionExpression'))
+ var.get(u'exports').put(u'ConditionalExpression', var.get(u'ConditionalExpression'))
+ var.get(u'exports').put(u'AssignmentExpression', var.get(u'AssignmentExpression'))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ PyJs_Object_525_ = Js({u'||':Js(0.0),u'&&':Js(1.0),u'|':Js(2.0),u'^':Js(3.0),u'&':Js(4.0),u'==':Js(5.0),u'===':Js(5.0),u'!=':Js(5.0),u'!==':Js(5.0),u'<':Js(6.0),u'>':Js(6.0),u'<=':Js(6.0),u'>=':Js(6.0),u'in':Js(6.0),u'instanceof':Js(6.0),u'>>':Js(7.0),u'<<':Js(7.0),u'>>>':Js(7.0),u'+':Js(8.0),u'-':Js(8.0),u'*':Js(9.0),u'/':Js(9.0),u'%':Js(9.0),u'**':Js(10.0)})
+ var.put(u'PRECEDENCE', PyJs_Object_525_)
+ pass
+ var.get(u'exports').put(u'FunctionTypeAnnotation', var.get(u'NullableTypeAnnotation'))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ var.get(u'exports').put(u'AwaitExpression', var.get(u'YieldExpression'))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_523_._set_name(u'anonymous')
+PyJs_Object_544_ = Js({u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_545_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'isHelper', u'exports', u'_babelTypes', u'_each', u'_interopRequireWildcard', u'_map', u'require', u'_isBoolean', u'module', u'_each2', u'_isBoolean2', u'isType', u'_interopRequireDefault', u'crawl', u'_map2', u't'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_547_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_547_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_isHelper_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'node')):
+ return (var.get(u'isHelper')(var.get(u'node').get(u'object')) or var.get(u'isHelper')(var.get(u'node').get(u'property')))
+ else:
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'node')):
+ return (PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'require')) or PyJsStrictEq(var.get(u'node').get(u'name').get(u'0'),Js(u'_')))
+ else:
+ if var.get(u't').callprop(u'isCallExpression', var.get(u'node')):
+ return var.get(u'isHelper')(var.get(u'node').get(u'callee'))
+ else:
+ if (var.get(u't').callprop(u'isBinary', var.get(u'node')) or var.get(u't').callprop(u'isAssignmentExpression', var.get(u'node'))):
+ return ((var.get(u't').callprop(u'isIdentifier', var.get(u'node').get(u'left')) and var.get(u'isHelper')(var.get(u'node').get(u'left'))) or var.get(u'isHelper')(var.get(u'node').get(u'right')))
+ else:
+ return Js(False)
+ PyJsHoisted_isHelper_.func_name = u'isHelper'
+ var.put(u'isHelper', PyJsHoisted_isHelper_)
+ @Js
+ def PyJsHoisted_crawl_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'state'])
+ PyJs_Object_548_ = Js({})
+ var.put(u'state', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else PyJs_Object_548_))
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'node')):
+ var.get(u'crawl')(var.get(u'node').get(u'object'), var.get(u'state'))
+ if var.get(u'node').get(u'computed'):
+ var.get(u'crawl')(var.get(u'node').get(u'property'), var.get(u'state'))
+ else:
+ if (var.get(u't').callprop(u'isBinary', var.get(u'node')) or var.get(u't').callprop(u'isAssignmentExpression', var.get(u'node'))):
+ var.get(u'crawl')(var.get(u'node').get(u'left'), var.get(u'state'))
+ var.get(u'crawl')(var.get(u'node').get(u'right'), var.get(u'state'))
+ else:
+ if var.get(u't').callprop(u'isCallExpression', var.get(u'node')):
+ var.get(u'state').put(u'hasCall', var.get(u'true'))
+ var.get(u'crawl')(var.get(u'node').get(u'callee'), var.get(u'state'))
+ else:
+ if var.get(u't').callprop(u'isFunction', var.get(u'node')):
+ var.get(u'state').put(u'hasFunction', var.get(u'true'))
+ else:
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'node')):
+ var.get(u'state').put(u'hasHelper', (var.get(u'state').get(u'hasHelper') or var.get(u'isHelper')(var.get(u'node').get(u'callee'))))
+ return var.get(u'state')
+ PyJsHoisted_crawl_.func_name = u'crawl'
+ var.put(u'crawl', PyJsHoisted_crawl_)
+ @Js
+ def PyJsHoisted_isType_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return ((((var.get(u't').callprop(u'isLiteral', var.get(u'node')) or var.get(u't').callprop(u'isObjectExpression', var.get(u'node'))) or var.get(u't').callprop(u'isArrayExpression', var.get(u'node'))) or var.get(u't').callprop(u'isIdentifier', var.get(u'node'))) or var.get(u't').callprop(u'isMemberExpression', var.get(u'node')))
+ PyJsHoisted_isType_.func_name = u'isType'
+ var.put(u'isType', PyJsHoisted_isType_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_546_ = Js({})
+ var.put(u'newObj', PyJs_Object_546_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.put(u'_isBoolean', var.get(u'require')(Js(u'lodash/isBoolean')))
+ var.put(u'_isBoolean2', var.get(u'_interopRequireDefault')(var.get(u'_isBoolean')))
+ var.put(u'_each', var.get(u'require')(Js(u'lodash/each')))
+ var.put(u'_each2', var.get(u'_interopRequireDefault')(var.get(u'_each')))
+ var.put(u'_map', var.get(u'require')(Js(u'lodash/map')))
+ var.put(u'_map2', var.get(u'_interopRequireDefault')(var.get(u'_map')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_AssignmentExpression_550_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'AssignmentExpression':PyJs_AssignmentExpression_550_}, var)
+ var.registers([u'node', u'state'])
+ var.put(u'state', var.get(u'crawl')(var.get(u'node').get(u'right')))
+ if ((var.get(u'state').get(u'hasCall') and var.get(u'state').get(u'hasHelper')) or var.get(u'state').get(u'hasFunction')):
+ PyJs_Object_551_ = Js({u'before':var.get(u'state').get(u'hasFunction'),u'after':var.get(u'true')})
+ return PyJs_Object_551_
+ PyJs_AssignmentExpression_550_._set_name(u'AssignmentExpression')
+ @Js
+ def PyJs_SwitchCase_552_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'SwitchCase':PyJs_SwitchCase_552_, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ PyJs_Object_553_ = Js({u'before':(var.get(u'node').get(u'consequent').get(u'length') or PyJsStrictEq(var.get(u'parent').get(u'cases').get(u'0'),var.get(u'node')))})
+ return PyJs_Object_553_
+ PyJs_SwitchCase_552_._set_name(u'SwitchCase')
+ @Js
+ def PyJs_LogicalExpression_554_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'LogicalExpression':PyJs_LogicalExpression_554_}, var)
+ var.registers([u'node'])
+ if (var.get(u't').callprop(u'isFunction', var.get(u'node').get(u'left')) or var.get(u't').callprop(u'isFunction', var.get(u'node').get(u'right'))):
+ PyJs_Object_555_ = Js({u'after':var.get(u'true')})
+ return PyJs_Object_555_
+ PyJs_LogicalExpression_554_._set_name(u'LogicalExpression')
+ @Js
+ def PyJs_Literal_556_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'Literal':PyJs_Literal_556_, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if PyJsStrictEq(var.get(u'node').get(u'value'),Js(u'use strict')):
+ PyJs_Object_557_ = Js({u'after':var.get(u'true')})
+ return PyJs_Object_557_
+ PyJs_Literal_556_._set_name(u'Literal')
+ @Js
+ def PyJs_CallExpression_558_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'CallExpression':PyJs_CallExpression_558_}, var)
+ var.registers([u'node'])
+ if (var.get(u't').callprop(u'isFunction', var.get(u'node').get(u'callee')) or var.get(u'isHelper')(var.get(u'node'))):
+ PyJs_Object_559_ = Js({u'before':var.get(u'true'),u'after':var.get(u'true')})
+ return PyJs_Object_559_
+ PyJs_CallExpression_558_._set_name(u'CallExpression')
+ @Js
+ def PyJs_VariableDeclaration_560_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'VariableDeclaration':PyJs_VariableDeclaration_560_}, var)
+ var.registers([u'i', u'node', u'state', u'declar', u'enabled'])
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(0.0)) else var.get(u"null")))
+ PyJsHoisted_Printer_.func_name = u'Printer'
+ var.put(u'Printer', PyJsHoisted_Printer_)
+ pass
+ @Js
+ def PyJs_generate_582_(ast, this, arguments, var=var):
+ var = Scope({u'this':this, u'generate':PyJs_generate_582_, u'arguments':arguments, u'ast':ast}, var)
+ var.registers([u'ast'])
+ var.get(u"this").callprop(u'print', var.get(u'ast'))
+ var.get(u"this").callprop(u'_maybeAddAuxComment')
+ return var.get(u"this").get(u'_buf').callprop(u'get')
+ PyJs_generate_582_._set_name(u'generate')
+ var.get(u'Printer').get(u'prototype').put(u'generate', PyJs_generate_582_)
+ @Js
+ def PyJs_indent_583_(this, arguments, var=var):
+ var = Scope({u'this':this, u'indent':PyJs_indent_583_, u'arguments':arguments}, var)
+ var.registers([])
+ if (var.get(u"this").get(u'format').get(u'compact') or var.get(u"this").get(u'format').get(u'concise')):
+ return var.get('undefined')
+ (var.get(u"this").put(u'_indent',Js(var.get(u"this").get(u'_indent').to_number())+Js(1))-Js(1))
+ PyJs_indent_583_._set_name(u'indent')
+ var.get(u'Printer').get(u'prototype').put(u'indent', PyJs_indent_583_)
+ @Js
+ def PyJs_dedent_584_(this, arguments, var=var):
+ var = Scope({u'this':this, u'dedent':PyJs_dedent_584_, u'arguments':arguments}, var)
+ var.registers([])
+ if (var.get(u"this").get(u'format').get(u'compact') or var.get(u"this").get(u'format').get(u'concise')):
+ return var.get('undefined')
+ (var.get(u"this").put(u'_indent',Js(var.get(u"this").get(u'_indent').to_number())-Js(1))+Js(1))
+ PyJs_dedent_584_._set_name(u'dedent')
+ var.get(u'Printer').get(u'prototype').put(u'dedent', PyJs_dedent_584_)
+ @Js
+ def PyJs_semicolon_585_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'semicolon':PyJs_semicolon_585_}, var)
+ var.registers([u'force'])
+ var.put(u'force', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else Js(False)))
+ var.get(u"this").callprop(u'_maybeAddAuxComment')
+ var.get(u"this").callprop(u'_append', Js(u';'), var.get(u'force').neg())
+ PyJs_semicolon_585_._set_name(u'semicolon')
+ var.get(u'Printer').get(u'prototype').put(u'semicolon', PyJs_semicolon_585_)
+ @Js
+ def PyJs_rightBrace_586_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'rightBrace':PyJs_rightBrace_586_}, var)
+ var.registers([])
+ if var.get(u"this").get(u'format').get(u'minified'):
+ var.get(u"this").get(u'_buf').callprop(u'removeLastSemicolon')
+ var.get(u"this").callprop(u'token', Js(u'}'))
+ PyJs_rightBrace_586_._set_name(u'rightBrace')
+ var.get(u'Printer').get(u'prototype').put(u'rightBrace', PyJs_rightBrace_586_)
+ @Js
+ def PyJs_space_587_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'space':PyJs_space_587_}, var)
+ var.registers([u'force'])
+ var.put(u'force', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else Js(False)))
+ if var.get(u"this").get(u'format').get(u'compact'):
+ return var.get('undefined')
+ if (((var.get(u"this").get(u'_buf').callprop(u'hasContent') and var.get(u"this").callprop(u'endsWith', Js(u' ')).neg()) and var.get(u"this").callprop(u'endsWith', Js(u'\n')).neg()) or var.get(u'force')):
+ var.get(u"this").callprop(u'_space')
+ PyJs_space_587_._set_name(u'space')
+ var.get(u'Printer').get(u'prototype').put(u'space', PyJs_space_587_)
+ @Js
+ def PyJs_word_588_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'word':PyJs_word_588_, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ if var.get(u"this").get(u'_endsWithWord'):
+ var.get(u"this").callprop(u'_space')
+ var.get(u"this").callprop(u'_maybeAddAuxComment')
+ var.get(u"this").callprop(u'_append', var.get(u'str'))
+ var.get(u"this").put(u'_endsWithWord', var.get(u'true'))
+ PyJs_word_588_._set_name(u'word')
+ var.get(u'Printer').get(u'prototype').put(u'word', PyJs_word_588_)
+ @Js
+ def PyJs_number_589_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str, u'number':PyJs_number_589_}, var)
+ var.registers([u'str'])
+ var.get(u"this").callprop(u'word', var.get(u'str'))
+ def PyJs_LONG_590_(var=var):
+ return ((((PyJsComma(Js(0.0),var.get(u'_isInteger2').get(u'default'))((+var.get(u'str'))) and var.get(u'NON_DECIMAL_LITERAL').callprop(u'test', var.get(u'str')).neg()) and var.get(u'SCIENTIFIC_NOTATION').callprop(u'test', var.get(u'str')).neg()) and var.get(u'ZERO_DECIMAL_INTEGER').callprop(u'test', var.get(u'str')).neg()) and PyJsStrictNeq(var.get(u'str').get((var.get(u'str').get(u'length')-Js(1.0))),Js(u'.')))
+ var.get(u"this").put(u'_endsWithInteger', PyJs_LONG_590_())
+ PyJs_number_589_._set_name(u'number')
+ var.get(u'Printer').get(u'prototype').put(u'number', PyJs_number_589_)
+ @Js
+ def PyJs_token_591_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'token':PyJs_token_591_, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ def PyJs_LONG_592_(var=var):
+ return ((((PyJsStrictEq(var.get(u'str'),Js(u'--')) and var.get(u"this").callprop(u'endsWith', Js(u'!'))) or (PyJsStrictEq(var.get(u'str').get(u'0'),Js(u'+')) and var.get(u"this").callprop(u'endsWith', Js(u'+')))) or (PyJsStrictEq(var.get(u'str').get(u'0'),Js(u'-')) and var.get(u"this").callprop(u'endsWith', Js(u'-')))) or (PyJsStrictEq(var.get(u'str').get(u'0'),Js(u'.')) and var.get(u"this").get(u'_endsWithInteger')))
+ if PyJs_LONG_592_():
+ var.get(u"this").callprop(u'_space')
+ var.get(u"this").callprop(u'_maybeAddAuxComment')
+ var.get(u"this").callprop(u'_append', var.get(u'str'))
+ PyJs_token_591_._set_name(u'token')
+ var.get(u'Printer').get(u'prototype').put(u'token', PyJs_token_591_)
+ @Js
+ def PyJs_newline_593_(i, this, arguments, var=var):
+ var = Scope({u'i':i, u'this':this, u'newline':PyJs_newline_593_, u'arguments':arguments}, var)
+ var.registers([u'i', u'j'])
+ if (var.get(u"this").get(u'format').get(u'retainLines') or var.get(u"this").get(u'format').get(u'compact')):
+ return var.get('undefined')
+ if var.get(u"this").get(u'format').get(u'concise'):
+ var.get(u"this").callprop(u'space')
+ return var.get('undefined')
+ if var.get(u"this").callprop(u'endsWith', Js(u'\n\n')):
+ return var.get('undefined')
+ if PyJsStrictNeq(var.get(u'i',throw=False).typeof(),Js(u'number')):
+ var.put(u'i', Js(1.0))
+ var.put(u'i', var.get(u'Math').callprop(u'min', Js(2.0), var.get(u'i')))
+ if (var.get(u"this").callprop(u'endsWith', Js(u'{\n')) or var.get(u"this").callprop(u'endsWith', Js(u':\n'))):
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ if (var.get(u'i')<=Js(0.0)):
+ return var.get('undefined')
+ #for JS loop
+ var.put(u'j', Js(0.0))
+ while (var.get(u'j')Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else Js(False)))
+ var.get(u"this").callprop(u'_maybeAddParen', var.get(u'str'))
+ var.get(u"this").callprop(u'_maybeIndent', var.get(u'str'))
+ if var.get(u'queue'):
+ var.get(u"this").get(u'_buf').callprop(u'queue', var.get(u'str'))
+ else:
+ var.get(u"this").get(u'_buf').callprop(u'append', var.get(u'str'))
+ var.get(u"this").put(u'_endsWithWord', Js(False))
+ var.get(u"this").put(u'_endsWithInteger', Js(False))
+ PyJs__append_600_._set_name(u'_append')
+ var.get(u'Printer').get(u'prototype').put(u'_append', PyJs__append_600_)
+ @Js
+ def PyJs__maybeIndent_601_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str, u'_maybeIndent':PyJs__maybeIndent_601_}, var)
+ var.registers([u'str'])
+ if ((var.get(u"this").get(u'_indent') and var.get(u"this").callprop(u'endsWith', Js(u'\n'))) and PyJsStrictNeq(var.get(u'str').get(u'0'),Js(u'\n'))):
+ var.get(u"this").get(u'_buf').callprop(u'queue', var.get(u"this").callprop(u'_getIndent'))
+ PyJs__maybeIndent_601_._set_name(u'_maybeIndent')
+ var.get(u'Printer').get(u'prototype').put(u'_maybeIndent', PyJs__maybeIndent_601_)
+ @Js
+ def PyJs__maybeAddParen_602_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'_maybeAddParen':PyJs__maybeAddParen_602_, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'i', u'cha', u'str', u'parenPushNewlineState'])
+ var.put(u'parenPushNewlineState', var.get(u"this").get(u'_parenPushNewlineState'))
+ if var.get(u'parenPushNewlineState').neg():
+ return var.get('undefined')
+ var.get(u"this").put(u'_parenPushNewlineState', var.get(u"null"))
+ var.put(u'i', PyJsComma(Js(0.0), Js(None)))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while ((var.get(u'i')Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else PyJs_Object_617_))
+ if (var.get(u'nodes').neg() or var.get(u'nodes').get(u'length').neg()):
+ return var.get('undefined')
+ if var.get(u'opts').get(u'indent'):
+ var.get(u"this").callprop(u'indent')
+ PyJs_Object_618_ = Js({u'addNewlines':var.get(u'opts').get(u'addNewlines')})
+ var.put(u'newlineOpts', PyJs_Object_618_)
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else var.get(u'true')))
+ if var.get(u'node').get(u'innerComments').neg():
+ return var.get('undefined')
+ if var.get(u'indent'):
+ var.get(u"this").callprop(u'indent')
+ var.get(u"this").callprop(u'_printComments', var.get(u'node').get(u'innerComments'))
+ if var.get(u'indent'):
+ var.get(u"this").callprop(u'dedent')
+ PyJs_printInnerComments_623_._set_name(u'printInnerComments')
+ var.get(u'Printer').get(u'prototype').put(u'printInnerComments', PyJs_printInnerComments_623_)
+ @Js
+ def PyJs_printSequence_624_(nodes, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments, u'parent':parent, u'printSequence':PyJs_printSequence_624_}, var)
+ var.registers([u'nodes', u'parent', u'opts'])
+ PyJs_Object_625_ = Js({})
+ var.put(u'opts', (var.get(u'arguments').get(u'2') if ((var.get(u'arguments').get(u'length')>Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else PyJs_Object_625_))
+ var.get(u'opts').put(u'statement', var.get(u'true'))
+ return var.get(u"this").callprop(u'printJoin', var.get(u'nodes'), var.get(u'parent'), var.get(u'opts'))
+ PyJs_printSequence_624_._set_name(u'printSequence')
+ var.get(u'Printer').get(u'prototype').put(u'printSequence', PyJs_printSequence_624_)
+ @Js
+ def PyJs_printList_626_(items, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'items':items, u'printList':PyJs_printList_626_, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'items', u'parent', u'opts'])
+ PyJs_Object_627_ = Js({})
+ var.put(u'opts', (var.get(u'arguments').get(u'2') if ((var.get(u'arguments').get(u'length')>Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else PyJs_Object_627_))
+ if (var.get(u'opts').get(u'separator')==var.get(u"null")):
+ var.get(u'opts').put(u'separator', var.get(u'commaSeparator'))
+ return var.get(u"this").callprop(u'printJoin', var.get(u'items'), var.get(u'parent'), var.get(u'opts'))
+ PyJs_printList_626_._set_name(u'printList')
+ var.get(u'Printer').get(u'prototype').put(u'printList', PyJs_printList_626_)
+ @Js
+ def PyJs__printNewline_628_(leading, node, parent, opts, this, arguments, var=var):
+ var = Scope({u'node':node, u'_printNewline':PyJs__printNewline_628_, u'arguments':arguments, u'parent':parent, u'this':this, u'leading':leading, u'opts':opts}, var)
+ var.registers([u'node', u'needs', u'parent', u'_comments2', u'leading', u'_comment', u'lines', u'_this2', u'_comments', u'_comment2', u'opts'])
+ var.put(u'_this2', var.get(u"this"))
+ if (var.get(u"this").get(u'format').get(u'retainLines') or var.get(u"this").get(u'format').get(u'compact')):
+ return var.get('undefined')
+ if var.get(u"this").get(u'format').get(u'concise'):
+ var.get(u"this").callprop(u'space')
+ return var.get('undefined')
+ var.put(u'lines', Js(0.0))
+ if (((var.get(u'node').get(u'start')!=var.get(u"null")) and var.get(u'node').get(u'_ignoreUserWhitespace').neg()) and var.get(u"this").get(u'_whitespace')):
+ if var.get(u'leading'):
+ var.put(u'_comments', var.get(u'node').get(u'leadingComments'))
+ @Js
+ def PyJs_anonymous_629_(comment, this, arguments, var=var):
+ var = Scope({u'comment':comment, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'comment'])
+ return (var.get(u'comment').get(u'loc').neg().neg() and var.get(u'_this2').get(u'format').callprop(u'shouldPrintComment', var.get(u'comment').get(u'value')))
+ PyJs_anonymous_629_._set_name(u'anonymous')
+ var.put(u'_comment', (var.get(u'_comments') and PyJsComma(Js(0.0),var.get(u'_find2').get(u'default'))(var.get(u'_comments'), PyJs_anonymous_629_)))
+ var.put(u'lines', var.get(u"this").get(u'_whitespace').callprop(u'getNewlinesBefore', (var.get(u'_comment') or var.get(u'node'))))
+ else:
+ var.put(u'_comments2', var.get(u'node').get(u'trailingComments'))
+ @Js
+ def PyJs_anonymous_630_(comment, this, arguments, var=var):
+ var = Scope({u'comment':comment, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'comment'])
+ return (var.get(u'comment').get(u'loc').neg().neg() and var.get(u'_this2').get(u'format').callprop(u'shouldPrintComment', var.get(u'comment').get(u'value')))
+ PyJs_anonymous_630_._set_name(u'anonymous')
+ var.put(u'_comment2', (var.get(u'_comments2') and PyJsComma(Js(0.0),var.get(u'_findLast2').get(u'default'))(var.get(u'_comments2'), PyJs_anonymous_630_)))
+ var.put(u'lines', var.get(u"this").get(u'_whitespace').callprop(u'getNewlinesAfter', (var.get(u'_comment2') or var.get(u'node'))))
+ else:
+ if var.get(u'leading').neg():
+ (var.put(u'lines',Js(var.get(u'lines').to_number())+Js(1))-Js(1))
+ if var.get(u'opts').get(u'addNewlines'):
+ var.put(u'lines', (var.get(u'opts').callprop(u'addNewlines', var.get(u'leading'), var.get(u'node')) or Js(0.0)), u'+')
+ var.put(u'needs', var.get(u'n').get(u'needsWhitespaceAfter'))
+ if var.get(u'leading'):
+ var.put(u'needs', var.get(u'n').get(u'needsWhitespaceBefore'))
+ if var.get(u'needs')(var.get(u'node'), var.get(u'parent')):
+ (var.put(u'lines',Js(var.get(u'lines').to_number())+Js(1))-Js(1))
+ if var.get(u"this").get(u'_buf').callprop(u'hasContent').neg():
+ var.put(u'lines', Js(0.0))
+ var.get(u"this").callprop(u'newline', var.get(u'lines'))
+ PyJs__printNewline_628_._set_name(u'_printNewline')
+ var.get(u'Printer').get(u'prototype').put(u'_printNewline', PyJs__printNewline_628_)
+ @Js
+ def PyJs__getComments_631_(leading, node, this, arguments, var=var):
+ var = Scope({u'node':node, u'leading':leading, u'this':this, u'arguments':arguments, u'_getComments':PyJs__getComments_631_}, var)
+ var.registers([u'node', u'leading'])
+ return ((var.get(u'node') and (var.get(u'node').get(u'leadingComments') if var.get(u'leading') else var.get(u'node').get(u'trailingComments'))) or Js([]))
+ PyJs__getComments_631_._set_name(u'_getComments')
+ var.get(u'Printer').get(u'prototype').put(u'_getComments', PyJs__getComments_631_)
+ @Js
+ def PyJs__printComment_632_(comment, this, arguments, var=var):
+ var = Scope({u'comment':comment, u'this':this, u'_printComment':PyJs__printComment_632_, u'arguments':arguments}, var)
+ var.registers([u'comment', u'val', u'indentSize', u'newlineRegex', u'offset', u'_this3'])
+ var.put(u'_this3', var.get(u"this"))
+ if var.get(u"this").get(u'format').callprop(u'shouldPrintComment', var.get(u'comment').get(u'value')).neg():
+ return var.get('undefined')
+ if var.get(u'comment').get(u'ignore'):
+ return var.get('undefined')
+ if var.get(u"this").get(u'_printedComments').callprop(u'has', var.get(u'comment')):
+ return var.get('undefined')
+ var.get(u"this").get(u'_printedComments').callprop(u'add', var.get(u'comment'))
+ if (var.get(u'comment').get(u'start')!=var.get(u"null")):
+ if var.get(u"this").get(u'_printedCommentStarts').get(var.get(u'comment').get(u'start')):
+ return var.get('undefined')
+ var.get(u"this").get(u'_printedCommentStarts').put(var.get(u'comment').get(u'start'), var.get(u'true'))
+ var.get(u"this").callprop(u'newline', (var.get(u"this").get(u'_whitespace').callprop(u'getNewlinesBefore', var.get(u'comment')) if var.get(u"this").get(u'_whitespace') else Js(0.0)))
+ if (var.get(u"this").callprop(u'endsWith', Js(u'[')).neg() and var.get(u"this").callprop(u'endsWith', Js(u'{')).neg()):
+ var.get(u"this").callprop(u'space')
+ var.put(u'val', (((Js(u'//')+var.get(u'comment').get(u'value'))+Js(u'\n')) if PyJsStrictEq(var.get(u'comment').get(u'type'),Js(u'CommentLine')) else ((Js(u'/*')+var.get(u'comment').get(u'value'))+Js(u'*/'))))
+ if (PyJsStrictEq(var.get(u'comment').get(u'type'),Js(u'CommentBlock')) and var.get(u"this").get(u'format').get(u'indent').get(u'adjustMultilineComment')):
+ var.put(u'offset', (var.get(u'comment').get(u'loc') and var.get(u'comment').get(u'loc').get(u'start').get(u'column')))
+ if var.get(u'offset'):
+ var.put(u'newlineRegex', var.get(u'RegExp').create(((Js(u'\\n\\s{1,')+var.get(u'offset'))+Js(u'}')), Js(u'g')))
+ var.put(u'val', var.get(u'val').callprop(u'replace', var.get(u'newlineRegex'), Js(u'\n')))
+ var.put(u'indentSize', var.get(u'Math').callprop(u'max', var.get(u"this").callprop(u'_getIndent').get(u'length'), var.get(u"this").get(u'_buf').callprop(u'getCurrentColumn')))
+ var.put(u'val', var.get(u'val').callprop(u'replace', JsRegExp(u'/\\n(?!$)/g'), (Js(u'\n')+PyJsComma(Js(0.0),var.get(u'_repeat2').get(u'default'))(Js(u' '), var.get(u'indentSize')))))
+ @Js
+ def PyJs_anonymous_633_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'_this3').callprop(u'_append', var.get(u'val'))
+ PyJs_anonymous_633_._set_name(u'anonymous')
+ var.get(u"this").callprop(u'withSource', Js(u'start'), var.get(u'comment').get(u'loc'), PyJs_anonymous_633_)
+ var.get(u"this").callprop(u'newline', ((var.get(u"this").get(u'_whitespace').callprop(u'getNewlinesAfter', var.get(u'comment')) if var.get(u"this").get(u'_whitespace') else Js(0.0))+((-Js(1.0)) if PyJsStrictEq(var.get(u'comment').get(u'type'),Js(u'CommentLine')) else Js(0.0))))
+ PyJs__printComment_632_._set_name(u'_printComment')
+ var.get(u'Printer').get(u'prototype').put(u'_printComment', PyJs__printComment_632_)
+ @Js
+ def PyJs__printComments_634_(comments, this, arguments, var=var):
+ var = Scope({u'this':this, u'_printComments':PyJs__printComments_634_, u'arguments':arguments, u'comments':comments}, var)
+ var.registers([u'_isArray', u'_iterator', u'comments', u'_i', u'_ref', u'_comment3'])
+ if (var.get(u'comments').neg() or var.get(u'comments').get(u'length').neg()):
+ return var.get('undefined')
+ #for JS loop
+ var.put(u'_iterator', var.get(u'comments'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'_comment3', var.get(u'_ref'))
+ var.get(u"this").callprop(u'_printComment', var.get(u'_comment3'))
+
+ PyJs__printComments_634_._set_name(u'_printComments')
+ var.get(u'Printer').get(u'prototype').put(u'_printComments', PyJs__printComments_634_)
+ return var.get(u'Printer')
+ PyJs_anonymous_579_._set_name(u'anonymous')
+ var.put(u'Printer', PyJs_anonymous_579_())
+ var.get(u'exports').put(u'default', var.get(u'Printer'))
+ pass
+ var.put(u'_arr', Js([var.get(u'require')(Js(u'./generators/template-literals')), var.get(u'require')(Js(u'./generators/expressions')), var.get(u'require')(Js(u'./generators/statements')), var.get(u'require')(Js(u'./generators/classes')), var.get(u'require')(Js(u'./generators/methods')), var.get(u'require')(Js(u'./generators/modules')), var.get(u'require')(Js(u'./generators/types')), var.get(u'require')(Js(u'./generators/flow')), var.get(u'require')(Js(u'./generators/base')), var.get(u'require')(Js(u'./generators/jsx'))]))
+ #for JS loop
+ var.put(u'_i2', Js(0.0))
+ while (var.get(u'_i2')=Js(0.0)):
+ while (var.get(u'index') and PyJsStrictEq(var.get(u'node').get(u'start'),var.get(u'tokens').get((var.get(u'index')-Js(1.0))).get(u'start'))):
+ var.put(u'index',Js(var.get(u'index').to_number())-Js(1))
+ var.put(u'startToken', var.get(u'tokens').get((var.get(u'index')-Js(1.0))))
+ var.put(u'endToken', var.get(u'tokens').get(var.get(u'index')))
+ return var.get(u"this").callprop(u'_getNewlinesBetween', var.get(u'startToken'), var.get(u'endToken'))
+ PyJs_getNewlinesBefore_651_._set_name(u'getNewlinesBefore')
+ var.get(u'Whitespace').get(u'prototype').put(u'getNewlinesBefore', PyJs_getNewlinesBefore_651_)
+ @Js
+ def PyJs_getNewlinesAfter_653_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'getNewlinesAfter':PyJs_getNewlinesAfter_653_}, var)
+ var.registers([u'tokens', u'startToken', u'node', u'endToken', u'index'])
+ var.put(u'startToken', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'endToken', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'tokens', var.get(u"this").get(u'tokens'))
+ @Js
+ def PyJs_anonymous_654_(token, this, arguments, var=var):
+ var = Scope({u'this':this, u'token':token, u'arguments':arguments}, var)
+ var.registers([u'token'])
+ return (var.get(u'token').get(u'end')-var.get(u'node').get(u'end'))
+ PyJs_anonymous_654_._set_name(u'anonymous')
+ var.put(u'index', var.get(u"this").callprop(u'_findToken', PyJs_anonymous_654_, Js(0.0), var.get(u'tokens').get(u'length')))
+ if (var.get(u'index')>=Js(0.0)):
+ while (var.get(u'index') and PyJsStrictEq(var.get(u'node').get(u'end'),var.get(u'tokens').get((var.get(u'index')-Js(1.0))).get(u'end'))):
+ var.put(u'index',Js(var.get(u'index').to_number())-Js(1))
+ var.put(u'startToken', var.get(u'tokens').get(var.get(u'index')))
+ var.put(u'endToken', var.get(u'tokens').get((var.get(u'index')+Js(1.0))))
+ if PyJsStrictEq(var.get(u'endToken').get(u'type').get(u'label'),Js(u',')):
+ var.put(u'endToken', var.get(u'tokens').get((var.get(u'index')+Js(2.0))))
+ if (var.get(u'endToken') and PyJsStrictEq(var.get(u'endToken').get(u'type').get(u'label'),Js(u'eof'))):
+ return Js(1.0)
+ else:
+ return var.get(u"this").callprop(u'_getNewlinesBetween', var.get(u'startToken'), var.get(u'endToken'))
+ PyJs_getNewlinesAfter_653_._set_name(u'getNewlinesAfter')
+ var.get(u'Whitespace').get(u'prototype').put(u'getNewlinesAfter', PyJs_getNewlinesAfter_653_)
+ @Js
+ def PyJs__getNewlinesBetween_655_(startToken, endToken, this, arguments, var=var):
+ var = Scope({u'this':this, u'startToken':startToken, u'arguments':arguments, u'endToken':endToken, u'_getNewlinesBetween':PyJs__getNewlinesBetween_655_}, var)
+ var.registers([u'end', u'startToken', u'lines', u'start', u'line', u'endToken'])
+ if (var.get(u'endToken').neg() or var.get(u'endToken').get(u'loc').neg()):
+ return Js(0.0)
+ var.put(u'start', (var.get(u'startToken').get(u'loc').get(u'end').get(u'line') if var.get(u'startToken') else Js(1.0)))
+ var.put(u'end', var.get(u'endToken').get(u'loc').get(u'start').get(u'line'))
+ var.put(u'lines', Js(0.0))
+ #for JS loop
+ var.put(u'line', var.get(u'start'))
+ while (var.get(u'line')=var.get(u'end')):
+ return (-Js(1.0))
+ var.put(u'middle', PyJsBshift((var.get(u'start')+var.get(u'end')),Js(1.0)))
+ var.put(u'match', var.get(u'test')(var.get(u"this").get(u'tokens').get(var.get(u'middle'))))
+ if (var.get(u'match')Js(0.0)):
+ return var.get(u"this").callprop(u'_findToken', var.get(u'test'), var.get(u'start'), var.get(u'middle'))
+ else:
+ if PyJsStrictEq(var.get(u'match'),Js(0.0)):
+ return var.get(u'middle')
+ return (-Js(1.0))
+ PyJs__findToken_656_._set_name(u'_findToken')
+ var.get(u'Whitespace').get(u'prototype').put(u'_findToken', PyJs__findToken_656_)
+ return var.get(u'Whitespace')
+ PyJs_anonymous_649_._set_name(u'anonymous')
+ var.put(u'Whitespace', PyJs_anonymous_649_())
+ var.get(u'exports').put(u'default', var.get(u'Whitespace'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_647_._set_name(u'anonymous')
+PyJs_Object_657_ = Js({u'babel-runtime/helpers/classCallCheck':Js(110.0)})
+@Js
+def PyJs_anonymous_658_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_interopRequireWildcard', u'visitor', u'require', u'_babelTypes', u'module', u'_babelHelperHoistVariables', u't', u'_babelHelperHoistVariables2', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_664_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_664_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_663_ = Js({})
+ var.put(u'newObj', PyJs_Object_663_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_659_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'node', u'container', u'args', u'state', u'call', u'path', u'scope', u'callee'])
+ var.put(u'scope', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else var.get(u'path').get(u'scope')))
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'container', var.get(u't').callprop(u'functionExpression', var.get(u"null"), Js([]), var.get(u'node').get(u'body'), var.get(u'node').get(u'generator'), var.get(u'node').get(u'async')))
+ var.put(u'callee', var.get(u'container'))
+ var.put(u'args', Js([]))
+ @Js
+ def PyJs_anonymous_660_(id, this, arguments, var=var):
+ var = Scope({u'this':this, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'id'])
+ PyJs_Object_661_ = Js({u'id':var.get(u'id')})
+ return var.get(u'scope').callprop(u'push', PyJs_Object_661_)
+ PyJs_anonymous_660_._set_name(u'anonymous')
+ PyJsComma(Js(0.0),var.get(u'_babelHelperHoistVariables2').get(u'default'))(var.get(u'path'), PyJs_anonymous_660_)
+ PyJs_Object_662_ = Js({u'foundThis':Js(False),u'foundArguments':Js(False)})
+ var.put(u'state', PyJs_Object_662_)
+ var.get(u'path').callprop(u'traverse', var.get(u'visitor'), var.get(u'state'))
+ if var.get(u'state').get(u'foundArguments'):
+ var.put(u'callee', var.get(u't').callprop(u'memberExpression', var.get(u'container'), var.get(u't').callprop(u'identifier', Js(u'apply'))))
+ var.put(u'args', Js([]))
+ if var.get(u'state').get(u'foundThis'):
+ var.get(u'args').callprop(u'push', var.get(u't').callprop(u'thisExpression'))
+ if var.get(u'state').get(u'foundArguments'):
+ if var.get(u'state').get(u'foundThis').neg():
+ var.get(u'args').callprop(u'push', var.get(u't').callprop(u'nullLiteral'))
+ var.get(u'args').callprop(u'push', var.get(u't').callprop(u'identifier', Js(u'arguments')))
+ var.put(u'call', var.get(u't').callprop(u'callExpression', var.get(u'callee'), var.get(u'args')))
+ if var.get(u'node').get(u'generator'):
+ var.put(u'call', var.get(u't').callprop(u'yieldExpression', var.get(u'call'), var.get(u'true')))
+ return var.get(u't').callprop(u'returnStatement', var.get(u'call'))
+ PyJs_anonymous_659_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_659_)
+ var.put(u'_babelHelperHoistVariables', var.get(u'require')(Js(u'babel-helper-hoist-variables')))
+ var.put(u'_babelHelperHoistVariables2', var.get(u'_interopRequireDefault')(var.get(u'_babelHelperHoistVariables')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ @Js
+ def PyJs_enter_666_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'enter':PyJs_enter_666_}, var)
+ var.registers([u'path', u'state'])
+ if var.get(u'path').callprop(u'isThisExpression'):
+ var.get(u'state').put(u'foundThis', var.get(u'true'))
+ PyJs_Object_667_ = Js({u'name':Js(u'arguments')})
+ if var.get(u'path').callprop(u'isReferencedIdentifier', PyJs_Object_667_):
+ var.get(u'state').put(u'foundArguments', var.get(u'true'))
+ PyJs_enter_666_._set_name(u'enter')
+ @Js
+ def PyJs_Function_668_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'Function':PyJs_Function_668_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'path').callprop(u'skip')
+ PyJs_Function_668_._set_name(u'Function')
+ PyJs_Object_665_ = Js({u'enter':PyJs_enter_666_,u'Function':PyJs_Function_668_})
+ var.put(u'visitor', PyJs_Object_665_)
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_658_._set_name(u'anonymous')
+PyJs_Object_669_ = Js({u'babel-helper-hoist-variables':Js(51.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_670_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'toDefineObject', u'exports', u'toComputedObjectFromClass', u'_each', u'_interopRequireWildcard', u'_babelHelperFunctionName', u'require', u'_babelTypes', u'_has2', u'_has', u'hasComputed', u'push', u'module', u'_each2', u't', u'_babelHelperFunctionName2', u'_interopRequireDefault', u'toKind', u'toClassObject'])
+ @Js
+ def PyJsHoisted_toDefineObject_(mutatorMap, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'mutatorMap':mutatorMap}, var)
+ var.registers([u'mutatorMap'])
+ @Js
+ def PyJs_anonymous_678_(map, this, arguments, var=var):
+ var = Scope({u'this':this, u'map':map, u'arguments':arguments}, var)
+ var.registers([u'map'])
+ if var.get(u'map').get(u'value'):
+ var.get(u'map').put(u'writable', var.get(u't').callprop(u'booleanLiteral', var.get(u'true')))
+ var.get(u'map').put(u'configurable', var.get(u't').callprop(u'booleanLiteral', var.get(u'true')))
+ var.get(u'map').put(u'enumerable', var.get(u't').callprop(u'booleanLiteral', var.get(u'true')))
+ PyJs_anonymous_678_._set_name(u'anonymous')
+ PyJsComma(Js(0.0),var.get(u'_each2').get(u'default'))(var.get(u'mutatorMap'), PyJs_anonymous_678_)
+ return var.get(u'toClassObject')(var.get(u'mutatorMap'))
+ PyJsHoisted_toDefineObject_.func_name = u'toDefineObject'
+ var.put(u'toDefineObject', PyJsHoisted_toDefineObject_)
+ @Js
+ def PyJsHoisted_toComputedObjectFromClass_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'i', u'obj', u'objExpr', u'val', u'prop'])
+ var.put(u'objExpr', var.get(u't').callprop(u'arrayExpression', Js([])))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else Js(u'var')))
+ PyJs_Object_696_ = Js({u'kind':var.get(u'kind'),u'emit':var.get(u'emit')})
+ var.get(u'path').callprop(u'traverse', var.get(u'visitor'), PyJs_Object_696_)
+ PyJs_anonymous_695_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_695_)
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ @Js
+ def PyJs_Scope_700_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'Scope':PyJs_Scope_700_}, var)
+ var.registers([u'path', u'state'])
+ if PyJsStrictEq(var.get(u'state').get(u'kind'),Js(u'let')):
+ var.get(u'path').callprop(u'skip')
+ PyJs_Scope_700_._set_name(u'Scope')
+ @Js
+ def PyJs_Function_701_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'Function':PyJs_Function_701_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'path').callprop(u'skip')
+ PyJs_Function_701_._set_name(u'Function')
+ @Js
+ def PyJs_VariableDeclaration_702_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'VariableDeclaration':PyJs_VariableDeclaration_702_}, var)
+ var.registers([u'_isArray', u'_iterator', u'firstId', u'declarations', u'state', u'declar', u'_i', u'path', u'nodes', u'_ref', u'name'])
+ if (var.get(u'state').get(u'kind') and PyJsStrictNeq(var.get(u'path').get(u'node').get(u'kind'),var.get(u'state').get(u'kind'))):
+ return var.get('undefined')
+ var.put(u'nodes', Js([]))
+ var.put(u'declarations', var.get(u'path').callprop(u'get', Js(u'declarations')))
+ var.put(u'firstId', PyJsComma(Js(0.0), Js(None)))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'declarations'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'declar', var.get(u'_ref'))
+ var.put(u'firstId', var.get(u'declar').get(u'node').get(u'id'))
+ if var.get(u'declar').get(u'node').get(u'init'):
+ var.get(u'nodes').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'declar').get(u'node').get(u'id'), var.get(u'declar').get(u'node').get(u'init'))))
+ for PyJsTemp in var.get(u'declar').callprop(u'getBindingIdentifiers'):
+ var.put(u'name', PyJsTemp)
+ var.get(u'state').callprop(u'emit', var.get(u't').callprop(u'identifier', var.get(u'name')), var.get(u'name'))
+
+ PyJs_Object_703_ = Js({u'left':var.get(u'path').get(u'node')})
+ if var.get(u'path').get(u'parentPath').callprop(u'isFor', PyJs_Object_703_):
+ var.get(u'path').callprop(u'replaceWith', var.get(u'firstId'))
+ else:
+ var.get(u'path').callprop(u'replaceWithMultiple', var.get(u'nodes'))
+ PyJs_VariableDeclaration_702_._set_name(u'VariableDeclaration')
+ PyJs_Object_699_ = Js({u'Scope':PyJs_Scope_700_,u'Function':PyJs_Function_701_,u'VariableDeclaration':PyJs_VariableDeclaration_702_})
+ var.put(u'visitor', PyJs_Object_699_)
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_694_._set_name(u'anonymous')
+PyJs_Object_704_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_705_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_interopRequireWildcard', u'require', u'_babelTypes', u'module', u't'])
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_708_ = Js({})
+ var.put(u'newObj', PyJs_Object_708_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_706_(callee, thisNode, args, this, arguments, var=var):
+ var = Scope({u'thisNode':thisNode, u'this':this, u'args':args, u'callee':callee, u'arguments':arguments}, var)
+ var.registers([u'thisNode', u'args', u'callee'])
+ PyJs_Object_707_ = Js({u'name':Js(u'arguments')})
+ if ((PyJsStrictEq(var.get(u'args').get(u'length'),Js(1.0)) and var.get(u't').callprop(u'isSpreadElement', var.get(u'args').get(u'0'))) and var.get(u't').callprop(u'isIdentifier', var.get(u'args').get(u'0').get(u'argument'), PyJs_Object_707_)):
+ return var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'memberExpression', var.get(u'callee'), var.get(u't').callprop(u'identifier', Js(u'apply'))), Js([var.get(u'thisNode'), var.get(u'args').get(u'0').get(u'argument')]))
+ else:
+ return var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'memberExpression', var.get(u'callee'), var.get(u't').callprop(u'identifier', Js(u'call'))), Js([var.get(u'thisNode')]).callprop(u'concat', var.get(u'args')))
+ PyJs_anonymous_706_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_706_)
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_705_._set_name(u'anonymous')
+PyJs_Object_709_ = Js({u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_710_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'pullFlag', u'_interopRequireWildcard', u'_pull', u'is', u'_babelTypes', u'module', u'_pull2', u't', u'_interopRequireDefault', u'require'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_712_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_712_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_is_(node, flag, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'flag':flag, u'arguments':arguments}, var)
+ var.registers([u'node', u'flag'])
+ return (var.get(u't').callprop(u'isRegExpLiteral', var.get(u'node')) and (var.get(u'node').get(u'flags').callprop(u'indexOf', var.get(u'flag'))>=Js(0.0)))
+ PyJsHoisted_is_.func_name = u'is'
+ var.put(u'is', PyJsHoisted_is_)
+ @Js
+ def PyJsHoisted_pullFlag_(node, flag, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'flag':flag, u'arguments':arguments}, var)
+ var.registers([u'node', u'flag', u'flags'])
+ var.put(u'flags', var.get(u'node').get(u'flags').callprop(u'split', Js(u'')))
+ if (var.get(u'node').get(u'flags').callprop(u'indexOf', var.get(u'flag'))Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else Js(False)))
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'ReplaceSupers'))
+ var.get(u"this").put(u'forceSuperMemoisation', var.get(u'opts').get(u'forceSuperMemoisation'))
+ var.get(u"this").put(u'methodPath', var.get(u'opts').get(u'methodPath'))
+ var.get(u"this").put(u'methodNode', var.get(u'opts').get(u'methodNode'))
+ var.get(u"this").put(u'superRef', var.get(u'opts').get(u'superRef'))
+ var.get(u"this").put(u'isStatic', var.get(u'opts').get(u'isStatic'))
+ var.get(u"this").put(u'hasSuper', Js(False))
+ var.get(u"this").put(u'inClass', var.get(u'inClass'))
+ var.get(u"this").put(u'isLoose', var.get(u'opts').get(u'isLoose'))
+ var.get(u"this").put(u'scope', var.get(u"this").get(u'methodPath').get(u'scope'))
+ var.get(u"this").put(u'file', var.get(u'opts').get(u'file'))
+ var.get(u"this").put(u'opts', var.get(u'opts'))
+ var.get(u"this").put(u'bareSupers', Js([]))
+ var.get(u"this").put(u'returns', Js([]))
+ var.get(u"this").put(u'thises', Js([]))
+ PyJsHoisted_ReplaceSupers_.func_name = u'ReplaceSupers'
+ var.put(u'ReplaceSupers', PyJsHoisted_ReplaceSupers_)
+ pass
+ @Js
+ def PyJs_getObjectRef_726_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getObjectRef':PyJs_getObjectRef_726_, u'arguments':arguments}, var)
+ var.registers([])
+ return (var.get(u"this").get(u'opts').get(u'objectRef') or var.get(u"this").get(u'opts').callprop(u'getObjectRef'))
+ PyJs_getObjectRef_726_._set_name(u'getObjectRef')
+ var.get(u'ReplaceSupers').get(u'prototype').put(u'getObjectRef', PyJs_getObjectRef_726_)
+ @Js
+ def PyJs_setSuperProperty_727_(property, value, isComputed, this, arguments, var=var):
+ var = Scope({u'setSuperProperty':PyJs_setSuperProperty_727_, u'this':this, u'value':value, u'arguments':arguments, u'property':property, u'isComputed':isComputed}, var)
+ var.registers([u'property', u'value', u'isComputed'])
+ def PyJs_LONG_728_(var=var):
+ return var.get(u't').callprop(u'callExpression', var.get(u"this").get(u'file').callprop(u'addHelper', Js(u'set')), Js([var.get(u'getPrototypeOfExpression')(var.get(u"this").callprop(u'getObjectRef'), var.get(u"this").get(u'isStatic')), (var.get(u'property') if var.get(u'isComputed') else var.get(u't').callprop(u'stringLiteral', var.get(u'property').get(u'name'))), var.get(u'value'), var.get(u't').callprop(u'thisExpression')]))
+ return PyJs_LONG_728_()
+ PyJs_setSuperProperty_727_._set_name(u'setSuperProperty')
+ var.get(u'ReplaceSupers').get(u'prototype').put(u'setSuperProperty', PyJs_setSuperProperty_727_)
+ @Js
+ def PyJs_getSuperProperty_729_(property, isComputed, this, arguments, var=var):
+ var = Scope({u'this':this, u'getSuperProperty':PyJs_getSuperProperty_729_, u'property':property, u'arguments':arguments, u'isComputed':isComputed}, var)
+ var.registers([u'property', u'isComputed'])
+ def PyJs_LONG_730_(var=var):
+ return var.get(u't').callprop(u'callExpression', var.get(u"this").get(u'file').callprop(u'addHelper', Js(u'get')), Js([var.get(u'getPrototypeOfExpression')(var.get(u"this").callprop(u'getObjectRef'), var.get(u"this").get(u'isStatic')), (var.get(u'property') if var.get(u'isComputed') else var.get(u't').callprop(u'stringLiteral', var.get(u'property').get(u'name'))), var.get(u't').callprop(u'thisExpression')]))
+ return PyJs_LONG_730_()
+ PyJs_getSuperProperty_729_._set_name(u'getSuperProperty')
+ var.get(u'ReplaceSupers').get(u'prototype').put(u'getSuperProperty', PyJs_getSuperProperty_729_)
+ @Js
+ def PyJs_replace_731_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'replace':PyJs_replace_731_}, var)
+ var.registers([])
+ var.get(u"this").get(u'methodPath').callprop(u'traverse', var.get(u'visitor'), var.get(u"this"))
+ PyJs_replace_731_._set_name(u'replace')
+ var.get(u'ReplaceSupers').get(u'prototype').put(u'replace', PyJs_replace_731_)
+ @Js
+ def PyJs_getLooseSuperProperty_732_(id, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'getLooseSuperProperty':PyJs_getLooseSuperProperty_732_, u'id':id, u'parent':parent, u'arguments':arguments}, var)
+ var.registers([u'methodNode', u'superRef', u'id', u'parent'])
+ var.put(u'methodNode', var.get(u"this").get(u'methodNode'))
+ var.put(u'superRef', (var.get(u"this").get(u'superRef') or var.get(u't').callprop(u'identifier', Js(u'Function'))))
+ if PyJsStrictEq(var.get(u'parent').get(u'property'),var.get(u'id')):
+ return var.get('undefined')
+ else:
+ PyJs_Object_733_ = Js({u'callee':var.get(u'id')})
+ if var.get(u't').callprop(u'isCallExpression', var.get(u'parent'), PyJs_Object_733_):
+ return var.get('undefined')
+ else:
+ if (var.get(u't').callprop(u'isMemberExpression', var.get(u'parent')) and var.get(u'methodNode').get(u'static').neg()):
+ return var.get(u't').callprop(u'memberExpression', var.get(u'superRef'), var.get(u't').callprop(u'identifier', Js(u'prototype')))
+ else:
+ return var.get(u'superRef')
+ PyJs_getLooseSuperProperty_732_._set_name(u'getLooseSuperProperty')
+ var.get(u'ReplaceSupers').get(u'prototype').put(u'getLooseSuperProperty', PyJs_getLooseSuperProperty_732_)
+ @Js
+ def PyJs_looseHandle_734_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'looseHandle':PyJs_looseHandle_734_}, var)
+ var.registers([u'node', u'path', u'callee'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u'path').callprop(u'isSuper'):
+ return var.get(u"this").callprop(u'getLooseSuperProperty', var.get(u'node'), var.get(u'path').get(u'parent'))
+ else:
+ if var.get(u'path').callprop(u'isCallExpression'):
+ var.put(u'callee', var.get(u'node').get(u'callee'))
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'callee')).neg():
+ return var.get('undefined')
+ if var.get(u't').callprop(u'isSuper', var.get(u'callee').get(u'object')).neg():
+ return var.get('undefined')
+ var.get(u't').callprop(u'appendToMemberExpression', var.get(u'callee'), var.get(u't').callprop(u'identifier', Js(u'call')))
+ var.get(u'node').get(u'arguments').callprop(u'unshift', var.get(u't').callprop(u'thisExpression'))
+ return var.get(u'true')
+ PyJs_looseHandle_734_._set_name(u'looseHandle')
+ var.get(u'ReplaceSupers').get(u'prototype').put(u'looseHandle', PyJs_looseHandle_734_)
+ @Js
+ def PyJs_specHandleAssignmentExpression_735_(ref, path, node, this, arguments, var=var):
+ var = Scope({u'node':node, u'specHandleAssignmentExpression':PyJs_specHandleAssignmentExpression_735_, u'this':this, u'arguments':arguments, u'path':path, u'ref':ref}, var)
+ var.registers([u'node', u'path', u'ref'])
+ if PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'=')):
+ return var.get(u"this").callprop(u'setSuperProperty', var.get(u'node').get(u'left').get(u'property'), var.get(u'node').get(u'right'), var.get(u'node').get(u'left').get(u'computed'))
+ else:
+ var.put(u'ref', (var.get(u'ref') or var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', Js(u'ref'))))
+ return Js([var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'ref'), var.get(u'node').get(u'left'))])), var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'node').get(u'left'), var.get(u't').callprop(u'binaryExpression', var.get(u'node').get(u'operator').get(u'0'), var.get(u'ref'), var.get(u'node').get(u'right'))))])
+ PyJs_specHandleAssignmentExpression_735_._set_name(u'specHandleAssignmentExpression')
+ var.get(u'ReplaceSupers').get(u'prototype').put(u'specHandleAssignmentExpression', PyJs_specHandleAssignmentExpression_735_)
+ @Js
+ def PyJs_specHandle_736_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'specHandle':PyJs_specHandle_736_}, var)
+ var.registers([u'node', u'binary', u'superProperty', u'computed', u'parent', u'ref', u'args', u'path', u'property', u'callee'])
+ var.put(u'property', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'computed', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'args', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'parent', var.get(u'path').get(u'parent'))
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u'isIllegalBareSuper')(var.get(u'node'), var.get(u'parent')):
+ PyJsTempException = JsToPyException(var.get(u'path').callprop(u'buildCodeFrameError', var.get(u'messages').callprop(u'get', Js(u'classesIllegalBareSuper'))))
+ raise PyJsTempException
+ if var.get(u't').callprop(u'isCallExpression', var.get(u'node')):
+ var.put(u'callee', var.get(u'node').get(u'callee'))
+ if var.get(u't').callprop(u'isSuper', var.get(u'callee')):
+ return var.get('undefined')
+ else:
+ if var.get(u'isMemberExpressionSuper')(var.get(u'callee')):
+ var.put(u'property', var.get(u'callee').get(u'property'))
+ var.put(u'computed', var.get(u'callee').get(u'computed'))
+ var.put(u'args', var.get(u'node').get(u'arguments'))
+ else:
+ if (var.get(u't').callprop(u'isMemberExpression', var.get(u'node')) and var.get(u't').callprop(u'isSuper', var.get(u'node').get(u'object'))):
+ var.put(u'property', var.get(u'node').get(u'property'))
+ var.put(u'computed', var.get(u'node').get(u'computed'))
+ else:
+ if (var.get(u't').callprop(u'isUpdateExpression', var.get(u'node')) and var.get(u'isMemberExpressionSuper')(var.get(u'node').get(u'argument'))):
+ var.put(u'binary', var.get(u't').callprop(u'binaryExpression', var.get(u'node').get(u'operator').get(u'0'), var.get(u'node').get(u'argument'), var.get(u't').callprop(u'numericLiteral', Js(1.0))))
+ if var.get(u'node').get(u'prefix'):
+ return var.get(u"this").callprop(u'specHandleAssignmentExpression', var.get(u"null"), var.get(u'path'), var.get(u'binary'))
+ else:
+ var.put(u'ref', var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', Js(u'ref')))
+ return var.get(u"this").callprop(u'specHandleAssignmentExpression', var.get(u'ref'), var.get(u'path'), var.get(u'binary')).callprop(u'concat', var.get(u't').callprop(u'expressionStatement', var.get(u'ref')))
+ else:
+ if (var.get(u't').callprop(u'isAssignmentExpression', var.get(u'node')) and var.get(u'isMemberExpressionSuper')(var.get(u'node').get(u'left'))):
+ return var.get(u"this").callprop(u'specHandleAssignmentExpression', var.get(u"null"), var.get(u'path'), var.get(u'node'))
+ if var.get(u'property').neg():
+ return var.get('undefined')
+ var.put(u'superProperty', var.get(u"this").callprop(u'getSuperProperty', var.get(u'property'), var.get(u'computed')))
+ if var.get(u'args'):
+ return var.get(u"this").callprop(u'optimiseCall', var.get(u'superProperty'), var.get(u'args'))
+ else:
+ return var.get(u'superProperty')
+ PyJs_specHandle_736_._set_name(u'specHandle')
+ var.get(u'ReplaceSupers').get(u'prototype').put(u'specHandle', PyJs_specHandle_736_)
+ @Js
+ def PyJs_optimiseCall_737_(callee, args, this, arguments, var=var):
+ var = Scope({u'this':this, u'args':args, u'callee':callee, u'arguments':arguments, u'optimiseCall':PyJs_optimiseCall_737_}, var)
+ var.registers([u'thisNode', u'args', u'callee'])
+ var.put(u'thisNode', var.get(u't').callprop(u'thisExpression'))
+ var.get(u'thisNode').put(var.get(u'HARDCORE_THIS_REF'), var.get(u'true'))
+ return PyJsComma(Js(0.0),var.get(u'_babelHelperOptimiseCallExpression2').get(u'default'))(var.get(u'callee'), var.get(u'thisNode'), var.get(u'args'))
+ PyJs_optimiseCall_737_._set_name(u'optimiseCall')
+ var.get(u'ReplaceSupers').get(u'prototype').put(u'optimiseCall', PyJs_optimiseCall_737_)
+ return var.get(u'ReplaceSupers')
+ PyJs_anonymous_725_._set_name(u'anonymous')
+ var.put(u'ReplaceSupers', PyJs_anonymous_725_())
+ var.get(u'exports').put(u'default', var.get(u'ReplaceSupers'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_714_._set_name(u'anonymous')
+PyJs_Object_738_ = Js({u'babel-helper-optimise-call-expression':Js(52.0),u'babel-messages':Js(57.0),u'babel-runtime/core-js/symbol':Js(105.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_739_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'_babelTemplate', u'module', u'helpers', u'_interopRequireDefault', u'_babelTemplate2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_740_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_740_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_babelTemplate', var.get(u'require')(Js(u'babel-template')))
+ var.put(u'_babelTemplate2', var.get(u'_interopRequireDefault')(var.get(u'_babelTemplate')))
+ pass
+ PyJs_Object_741_ = Js({})
+ var.put(u'helpers', PyJs_Object_741_)
+ var.get(u'exports').put(u'default', var.get(u'helpers'))
+ def PyJs_LONG_742_(var=var):
+ return var.get(u'helpers').put(u'typeof', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (typeof Symbol === "function" && typeof Symbol.iterator === "symbol")\n ? function (obj) { return typeof obj; }\n : function (obj) {\n return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype\n ? "symbol"\n : typeof obj;\n };\n')))
+ PyJs_LONG_742_()
+ def PyJs_LONG_743_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function () {\n var REACT_ELEMENT_TYPE = (typeof Symbol === "function" && Symbol.for && Symbol.for("react.element")) || 0xeac7;\n\n return function createRawReactElement (type, props, key, children) {\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n // If we\'re going to assign props.children, we create a new object now\n // to avoid mutating defaultProps.\n props = {};\n }\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : \'\' + key,\n ref: null,\n props: props,\n _owner: null,\n };\n };\n\n })()\n'))
+ var.get(u'helpers').put(u'jsx', PyJs_LONG_743_())
+ def PyJs_LONG_744_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (iterable) {\n if (typeof Symbol === "function") {\n if (Symbol.asyncIterator) {\n var method = iterable[Symbol.asyncIterator];\n if (method != null) return method.call(iterable);\n }\n if (Symbol.iterator) {\n return iterable[Symbol.iterator]();\n }\n }\n throw new TypeError("Object is not async iterable");\n })\n'))
+ var.get(u'helpers').put(u'asyncIterator', PyJs_LONG_744_())
+ def PyJs_LONG_745_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg)\n var value = result.value;\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(\n function (arg) { resume("next", arg); },\n function (arg) { resume("throw", arg); });\n } else {\n settle(result.done ? "return" : "normal", result.value);\n }\n } catch (err) {\n settle("throw", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case "return":\n front.resolve({ value: value, done: true });\n break;\n case "throw":\n front.reject(value);\n break;\n default:\n front.resolve({ value: value, done: false });\n break;\n }\n\n front = front.next;\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n // Hide "return" method if generator return is not supported\n if (typeof gen.return !== "function") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === "function" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () { return this; };\n }\n\n AsyncGenerator.prototype.next = function (arg) { return this._invoke("next", arg); };\n AsyncGenerator.prototype.throw = function (arg) { return this._invoke("throw", arg); };\n AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n\n })()\n'))
+ var.get(u'helpers').put(u'asyncGenerator', PyJs_LONG_745_())
+ def PyJs_LONG_746_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (inner, awaitWrap) {\n var iter = {}, waiting = false;\n\n function pump(key, value) {\n waiting = true;\n value = new Promise(function (resolve) { resolve(inner[key](value)); });\n return { done: false, value: awaitWrap(value) };\n };\n\n if (typeof Symbol === "function" && Symbol.iterator) {\n iter[Symbol.iterator] = function () { return this; };\n }\n\n iter.next = function (value) {\n if (waiting) {\n waiting = false;\n return value;\n }\n return pump("next", value);\n };\n\n if (typeof inner.throw === "function") {\n iter.throw = function (value) {\n if (waiting) {\n waiting = false;\n throw value;\n }\n return pump("throw", value);\n };\n }\n\n if (typeof inner.return === "function") {\n iter.return = function (value) {\n return pump("return", value);\n };\n }\n\n return iter;\n })\n'))
+ var.get(u'helpers').put(u'asyncGeneratorDelegate', PyJs_LONG_746_())
+ def PyJs_LONG_747_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new Promise(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return Promise.resolve(value).then(function (value) {\n step("next", value);\n }, function (err) {\n step("throw", err);\n });\n }\n }\n\n return step("next");\n });\n };\n })\n'))
+ var.get(u'helpers').put(u'asyncToGenerator', PyJs_LONG_747_())
+ var.get(u'helpers').put(u'classCallCheck', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n });\n')))
+ def PyJs_LONG_748_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function() {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i ++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n })()\n'))
+ var.get(u'helpers').put(u'createClass', PyJs_LONG_748_())
+ var.get(u'helpers').put(u'defineEnumerableProperties', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if ("value" in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n return obj;\n })\n')))
+ def PyJs_LONG_749_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n return obj;\n })\n'))
+ var.get(u'helpers').put(u'defaults', PyJs_LONG_749_())
+ def PyJs_LONG_750_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (obj, key, value) {\n // Shortcircuit the slow defineProperty path when possible.\n // We are trying to avoid issues where setters defined on the\n // prototype cause side effects under the fast path of simple\n // assignment. By checking for existence of the property with\n // the in operator, we can optimize most of this overhead away.\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n });\n'))
+ var.get(u'helpers').put(u'defineProperty', PyJs_LONG_750_())
+ def PyJs_LONG_751_(var=var):
+ return var.get(u'helpers').put(u'extends', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n Object.assign || (function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n })\n')))
+ PyJs_LONG_751_()
+ def PyJs_LONG_752_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if ("value" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n });\n'))
+ var.get(u'helpers').put(u'get', PyJs_LONG_752_())
+ def PyJs_LONG_753_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n })\n'))
+ var.get(u'helpers').put(u'inherits', PyJs_LONG_753_())
+ var.get(u'helpers').put(u'instanceof', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (left, right) {\n if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {\n return right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n });\n')))
+ var.get(u'helpers').put(u'interopRequireDefault', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n })\n')))
+ def PyJs_LONG_754_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n newObj.default = obj;\n return newObj;\n }\n })\n'))
+ var.get(u'helpers').put(u'interopRequireWildcard', PyJs_LONG_754_())
+ var.get(u'helpers').put(u'newArrowCheck', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError("Cannot instantiate an arrow function");\n }\n });\n')))
+ var.get(u'helpers').put(u'objectDestructuringEmpty', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (obj) {\n if (obj == null) throw new TypeError("Cannot destructure undefined");\n });\n')))
+ var.get(u'helpers').put(u'objectWithoutProperties', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (obj, keys) {\n var target = {};\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n return target;\n })\n')))
+ var.get(u'helpers').put(u'possibleConstructorReturn', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (self, call) {\n if (!self) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n return call && (typeof call === "object" || typeof call === "function") ? call : self;\n });\n')))
+ var.get(u'helpers').put(u'selfGlobal', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n typeof global === "undefined" ? self : global\n')))
+ def PyJs_LONG_755_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function set(object, property, value, receiver) {\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent !== null) {\n set(parent, property, value, receiver);\n }\n } else if ("value" in desc && desc.writable) {\n desc.value = value;\n } else {\n var setter = desc.set;\n\n if (setter !== undefined) {\n setter.call(receiver, value);\n }\n }\n\n return value;\n });\n'))
+ var.get(u'helpers').put(u'set', PyJs_LONG_755_())
+ def PyJs_LONG_756_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function () {\n // Broken out into a separate function to avoid deoptimizations due to the try/catch for the\n // array iterator case.\n function sliceIterator(arr, i) {\n // this is an expanded form of `for...of` that properly supports abrupt completions of\n // iterators etc. variable names have been minimised to reduce the size of this massive\n // helper. sometimes spec compliancy is annoying :(\n //\n // _n = _iteratorNormalCompletion\n // _d = _didIteratorError\n // _e = _iteratorError\n // _i = _iterator\n // _s = _step\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i["return"]) _i["return"]();\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError("Invalid attempt to destructure non-iterable instance");\n }\n };\n })();\n'))
+ var.get(u'helpers').put(u'slicedToArray', PyJs_LONG_756_())
+ def PyJs_LONG_757_(var=var):
+ return PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n var _arr = [];\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n _arr.push(_step.value);\n if (i && _arr.length === i) break;\n }\n return _arr;\n } else {\n throw new TypeError("Invalid attempt to destructure non-iterable instance");\n }\n });\n'))
+ var.get(u'helpers').put(u'slicedToArrayLoose', PyJs_LONG_757_())
+ var.get(u'helpers').put(u'taggedTemplateLiteral', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: { value: Object.freeze(raw) }\n }));\n });\n')))
+ var.get(u'helpers').put(u'taggedTemplateLiteralLoose', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (strings, raw) {\n strings.raw = raw;\n return strings;\n });\n')))
+ var.get(u'helpers').put(u'temporalRef', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (val, name, undef) {\n if (val === undef) {\n throw new ReferenceError(name + " is not defined - temporal dead zone");\n } else {\n return val;\n }\n })\n')))
+ var.get(u'helpers').put(u'temporalUndefined', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n ({})\n')))
+ var.get(u'helpers').put(u'toArray', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (arr) {\n return Array.isArray(arr) ? arr : Array.from(arr);\n });\n')))
+ var.get(u'helpers').put(u'toConsumableArray', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n return arr2;\n } else {\n return Array.from(arr);\n }\n });\n')))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_739_._set_name(u'anonymous')
+PyJs_Object_758_ = Js({u'babel-template':Js(221.0)})
+@Js
+def PyJs_anonymous_759_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'get', u'_helpers2', u'require', u'list', u'_helpers', u'_keys2', u'_keys', u'module', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_760_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_760_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_get_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name', u'fn'])
+ var.put(u'fn', var.get(u'_helpers2').get(u'default').get(var.get(u'name')))
+ if var.get(u'fn').neg():
+ PyJsTempException = JsToPyException(var.get(u'ReferenceError').create((Js(u'Unknown helper ')+var.get(u'name'))))
+ raise PyJsTempException
+ return var.get(u'fn')().get(u'expression')
+ PyJsHoisted_get_.func_name = u'get'
+ var.put(u'get', PyJsHoisted_get_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'list', var.get(u'undefined'))
+ var.put(u'_keys', var.get(u'require')(Js(u'babel-runtime/core-js/object/keys')))
+ var.put(u'_keys2', var.get(u'_interopRequireDefault')(var.get(u'_keys')))
+ var.get(u'exports').put(u'get', var.get(u'get'))
+ var.put(u'_helpers', var.get(u'require')(Js(u'./helpers')))
+ var.put(u'_helpers2', var.get(u'_interopRequireDefault')(var.get(u'_helpers')))
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_761_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return PyJsStrictNeq(var.get(u'name'),Js(u'__esModule'))
+ PyJs_anonymous_761_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_762_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return (var.get(u'name').callprop(u'slice', Js(1.0)) if PyJsStrictEq(var.get(u'name').get(u'0'),Js(u'_')) else var.get(u'name'))
+ PyJs_anonymous_762_._set_name(u'anonymous')
+ var.put(u'list', var.get(u'exports').put(u'list', PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u'_helpers2').get(u'default')).callprop(u'map', PyJs_anonymous_762_).callprop(u'filter', PyJs_anonymous_761_)))
+ var.get(u'exports').put(u'default', var.get(u'get'))
+PyJs_anonymous_759_._set_name(u'anonymous')
+PyJs_Object_763_ = Js({u'./helpers':Js(55.0),u'babel-runtime/core-js/object/keys':Js(103.0)})
+@Js
+def PyJs_anonymous_764_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_stringify2', u'_interopRequireWildcard', u'get', u'require', u'parseArgs', u'MESSAGES', u'_util', u'util', u'_stringify', u'module', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_766_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_766_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_parseArgs_(args, this, arguments, var=var):
+ var = Scope({u'this':this, u'args':args, u'arguments':arguments}, var)
+ var.registers([u'args'])
+ @Js
+ def PyJs_anonymous_769_(val, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'val'])
+ if ((var.get(u'val')!=var.get(u"null")) and var.get(u'val').get(u'inspect')):
+ return var.get(u'val').callprop(u'inspect')
+ else:
+ try:
+ return (PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'val')) or (var.get(u'val')+Js(u'')))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_98138155 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ return var.get(u'util').callprop(u'inspect', var.get(u'val'))
+ finally:
+ if PyJsHolder_65_98138155 is not None:
+ var.own[u'e'] = PyJsHolder_65_98138155
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_98138155
+ PyJs_anonymous_769_._set_name(u'anonymous')
+ return var.get(u'args').callprop(u'map', PyJs_anonymous_769_)
+ PyJsHoisted_parseArgs_.func_name = u'parseArgs'
+ var.put(u'parseArgs', PyJsHoisted_parseArgs_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_765_ = Js({})
+ var.put(u'newObj', PyJs_Object_765_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_get_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'_len', u'_key', u'args', u'key', u'msg'])
+ #for JS loop
+ var.put(u'_len', var.get(u'arguments').get(u'length'))
+ var.put(u'args', var.get(u'Array')(((var.get(u'_len')-Js(1.0)) if (var.get(u'_len')>Js(1.0)) else Js(0.0))))
+ var.put(u'_key', Js(1.0))
+ while (var.get(u'_key')=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i').get(u'value'))
+ var.put(u'violation', var.get(u'_ref3'))
+ PyJsTempException = JsToPyException(var.get(u'violation').callprop(u'buildCodeFrameError', var.get(u'messages').callprop(u'get', Js(u'readOnly'), var.get(u'name'))))
+ raise PyJsTempException
+
+ PyJs_Scope_775_._set_name(u'Scope')
+ PyJs_Object_774_ = Js({u'Scope':PyJs_Scope_775_})
+ PyJs_Object_773_ = Js({u'visitor':PyJs_Object_774_})
+ return PyJs_Object_773_
+ PyJs_anonymous_772_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_772_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_771_._set_name(u'anonymous')
+PyJs_Object_777_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0)})
+@Js
+def PyJs_anonymous_778_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_779_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'_ref', u't'])
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ @Js
+ def PyJs_ArrowFunctionExpression_782_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'ArrowFunctionExpression':PyJs_ArrowFunctionExpression_782_}, var)
+ var.registers([u'node', u'path', u'state', u'boundThis'])
+ if var.get(u'state').get(u'opts').get(u'spec'):
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u'node').get(u'shadow'):
+ return var.get('undefined')
+ PyJs_Object_783_ = Js({u'this':Js(False)})
+ var.get(u'node').put(u'shadow', PyJs_Object_783_)
+ var.get(u'node').put(u'type', Js(u'FunctionExpression'))
+ var.put(u'boundThis', var.get(u't').callprop(u'thisExpression'))
+ var.get(u'boundThis').put(u'_forceShadow', var.get(u'path'))
+ var.get(u'path').callprop(u'ensureBlock')
+ var.get(u'path').callprop(u'get', Js(u'body')).callprop(u'unshiftContainer', Js(u'body'), var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'callExpression', var.get(u'state').callprop(u'addHelper', Js(u'newArrowCheck')), Js([var.get(u't').callprop(u'thisExpression'), var.get(u'boundThis')]))))
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'memberExpression', var.get(u'node'), var.get(u't').callprop(u'identifier', Js(u'bind'))), Js([var.get(u't').callprop(u'thisExpression')])))
+ else:
+ var.get(u'path').callprop(u'arrowFunctionToShadowed')
+ PyJs_ArrowFunctionExpression_782_._set_name(u'ArrowFunctionExpression')
+ PyJs_Object_781_ = Js({u'ArrowFunctionExpression':PyJs_ArrowFunctionExpression_782_})
+ PyJs_Object_780_ = Js({u'visitor':PyJs_Object_781_})
+ return PyJs_Object_780_
+ PyJs_anonymous_779_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_779_)
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_778_._set_name(u'anonymous')
+PyJs_Object_784_ = Js({})
+@Js
+def PyJs_anonymous_785_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_792_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_792_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ @Js
+ def PyJs_anonymous_786_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'_ref', u't', u'statementList'])
+ @Js
+ def PyJsHoisted_statementList_(key, path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key', u'paths', u'_isArray', u'_iterator', u'func', u'_ref2', u'declar', u'_i', u'path', u'_path'])
+ var.put(u'paths', var.get(u'path').callprop(u'get', var.get(u'key')))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'paths'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i').get(u'value'))
+ var.put(u'_path', var.get(u'_ref2'))
+ var.put(u'func', var.get(u'_path').get(u'node'))
+ if var.get(u'_path').callprop(u'isFunctionDeclaration').neg():
+ continue
+ var.put(u'declar', var.get(u't').callprop(u'variableDeclaration', Js(u'let'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'func').get(u'id'), var.get(u't').callprop(u'toExpression', var.get(u'func')))])))
+ var.get(u'declar').put(u'_blockHoist', Js(2.0))
+ var.get(u'func').put(u'id', var.get(u"null"))
+ var.get(u'_path').callprop(u'replaceWith', var.get(u'declar'))
+
+ PyJsHoisted_statementList_.func_name = u'statementList'
+ var.put(u'statementList', PyJsHoisted_statementList_)
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ pass
+ @Js
+ def PyJs_BlockStatement_789_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'BlockStatement':PyJs_BlockStatement_789_}, var)
+ var.registers([u'node', u'path', u'parent'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'parent', var.get(u'path').get(u'parent'))
+ PyJs_Object_790_ = Js({u'body':var.get(u'node')})
+ if (var.get(u't').callprop(u'isFunction', var.get(u'parent'), PyJs_Object_790_) or var.get(u't').callprop(u'isExportDeclaration', var.get(u'parent'))):
+ return var.get('undefined')
+ var.get(u'statementList')(Js(u'body'), var.get(u'path'))
+ PyJs_BlockStatement_789_._set_name(u'BlockStatement')
+ @Js
+ def PyJs_SwitchCase_791_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'SwitchCase':PyJs_SwitchCase_791_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'statementList')(Js(u'consequent'), var.get(u'path'))
+ PyJs_SwitchCase_791_._set_name(u'SwitchCase')
+ PyJs_Object_788_ = Js({u'BlockStatement':PyJs_BlockStatement_789_,u'SwitchCase':PyJs_SwitchCase_791_})
+ PyJs_Object_787_ = Js({u'visitor':PyJs_Object_788_})
+ return PyJs_Object_787_
+ PyJs_anonymous_786_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_786_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_785_._set_name(u'anonymous')
+PyJs_Object_793_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0)})
+@Js
+def PyJs_anonymous_794_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_symbol2', u'continuationVisitor', u'loopLabelVisitor', u'_babelTemplate', u'module', u'letReferenceFunctionVisitor', u'isVar', u'_interopRequireDefault', u'loopNodeTo', u'_extend', u'_babelTraverse', u'convertBlockScopedToVar', u'_tdz', u'BlockScoping', u'ignoreBlock', u'hoistVarDeclarationsVisitor', u'_values2', u'_extend2', u'_create2', u'buildRetCheck', u'_classCallCheck3', u'_classCallCheck2', u'_create', u'exports', u'_babelTraverse2', u'_interopRequireWildcard', u'_babelTypes', u'_symbol', u'isBlockScoped', u'loopVisitor', u'require', u'_babelTemplate2', u't', u'_values', u'letReferenceBlockVisitor'])
+ @Js
+ def PyJsHoisted_convertBlockScopedToVar_(path, node, parent, scope, this, arguments, var=var):
+ var = Scope({u'node':node, u'arguments':arguments, u'parent':parent, u'scope':scope, u'this':this, u'path':path}, var)
+ var.registers([u'node', u'name', u'moveBindingsToParent', u'i', u'binding', u'ids', u'declar', u'parent', u'parentScope', u'path', u'scope'])
+ var.put(u'moveBindingsToParent', (var.get(u'arguments').get(u'4') if ((var.get(u'arguments').get(u'length')>Js(4.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'4'),var.get(u'undefined'))) else Js(False)))
+ if var.get(u'node').neg():
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u't').callprop(u'isFor', var.get(u'parent')).neg():
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=Js(0.0)):
+ return var.get('undefined')
+ var.put(u'loopText', ((var.get(u'loopText')+Js(u'|'))+var.get(u'node').get(u'label').get(u'name')))
+ else:
+ if var.get(u'state').get(u'ignoreLabeless'):
+ return var.get('undefined')
+ if var.get(u'state').get(u'inSwitchCase'):
+ return var.get('undefined')
+ if (var.get(u't').callprop(u'isBreakStatement', var.get(u'node')) and var.get(u't').callprop(u'isSwitchCase', var.get(u'parent'))):
+ return var.get('undefined')
+ var.get(u'state').put(u'hasBreakContinue', var.get(u'true'))
+ var.get(u'state').get(u'map').put(var.get(u'loopText'), var.get(u'node'))
+ var.put(u'replace', var.get(u't').callprop(u'stringLiteral', var.get(u'loopText')))
+ if var.get(u'path').callprop(u'isReturnStatement'):
+ var.get(u'state').put(u'hasReturn', var.get(u'true'))
+ var.put(u'replace', var.get(u't').callprop(u'objectExpression', Js([var.get(u't').callprop(u'objectProperty', var.get(u't').callprop(u'identifier', Js(u'v')), (var.get(u'node').get(u'argument') or var.get(u'scope').callprop(u'buildUndefinedNode')))])))
+ if var.get(u'replace'):
+ var.put(u'replace', var.get(u't').callprop(u'returnStatement', var.get(u'replace')))
+ var.get(u'replace').put(var.get(u"this").get(u'LOOP_IGNORE'), var.get(u'true'))
+ var.get(u'path').callprop(u'skip')
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'inherits', var.get(u'replace'), var.get(u'node')))
+ PyJs_BreakStatementContinueStatementReturnStatement_820_._set_name(u'BreakStatementContinueStatementReturnStatement')
+ PyJs_Object_816_ = Js({u'Loop':PyJs_Loop_817_,u'Function':PyJs_Function_818_,u'SwitchCase':PyJs_SwitchCase_819_,u'BreakStatement|ContinueStatement|ReturnStatement':PyJs_BreakStatementContinueStatementReturnStatement_820_})
+ var.put(u'loopVisitor', PyJs_Object_816_)
+ @Js
+ def PyJs_anonymous_821_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'BlockScoping'])
+ @Js
+ def PyJsHoisted_BlockScoping_(loopPath, blockPath, parent, scope, file, this, arguments, var=var):
+ var = Scope({u'arguments':arguments, u'parent':parent, u'file':file, u'blockPath':blockPath, u'this':this, u'scope':scope, u'loopPath':loopPath}, var)
+ var.registers([u'scope', u'blockPath', u'file', u'parent', u'loopPath'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'BlockScoping'))
+ var.get(u"this").put(u'parent', var.get(u'parent'))
+ var.get(u"this").put(u'scope', var.get(u'scope'))
+ var.get(u"this").put(u'file', var.get(u'file'))
+ var.get(u"this").put(u'blockPath', var.get(u'blockPath'))
+ var.get(u"this").put(u'block', var.get(u'blockPath').get(u'node'))
+ var.get(u"this").put(u'outsideLetReferences', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.get(u"this").put(u'hasLetReferences', Js(False))
+ var.get(u"this").put(u'letReferences', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.get(u"this").put(u'body', Js([]))
+ if var.get(u'loopPath'):
+ var.get(u"this").put(u'loopParent', var.get(u'loopPath').get(u'parent'))
+ var.get(u"this").put(u'loopLabel', (var.get(u't').callprop(u'isLabeledStatement', var.get(u"this").get(u'loopParent')) and var.get(u"this").get(u'loopParent').get(u'label')))
+ var.get(u"this").put(u'loopPath', var.get(u'loopPath'))
+ var.get(u"this").put(u'loop', var.get(u'loopPath').get(u'node'))
+ PyJsHoisted_BlockScoping_.func_name = u'BlockScoping'
+ var.put(u'BlockScoping', PyJsHoisted_BlockScoping_)
+ pass
+ @Js
+ def PyJs_run_822_(this, arguments, var=var):
+ var = Scope({u'this':this, u'run':PyJs_run_822_, u'arguments':arguments}, var)
+ var.registers([u'needsClosure', u'block'])
+ var.put(u'block', var.get(u"this").get(u'block'))
+ if var.get(u'block').get(u'_letDone'):
+ return var.get('undefined')
+ var.get(u'block').put(u'_letDone', var.get(u'true'))
+ var.put(u'needsClosure', var.get(u"this").callprop(u'getLetReferences'))
+ if (var.get(u't').callprop(u'isFunction', var.get(u"this").get(u'parent')) or var.get(u't').callprop(u'isProgram', var.get(u"this").get(u'block'))):
+ var.get(u"this").callprop(u'updateScopeInfo')
+ return var.get('undefined')
+ if var.get(u"this").get(u'hasLetReferences').neg():
+ return var.get('undefined')
+ if var.get(u'needsClosure'):
+ var.get(u"this").callprop(u'wrapClosure')
+ else:
+ var.get(u"this").callprop(u'remap')
+ var.get(u"this").callprop(u'updateScopeInfo')
+ if (var.get(u"this").get(u'loopLabel') and var.get(u't').callprop(u'isLabeledStatement', var.get(u"this").get(u'loopParent')).neg()):
+ return var.get(u't').callprop(u'labeledStatement', var.get(u"this").get(u'loopLabel'), var.get(u"this").get(u'loop'))
+ PyJs_run_822_._set_name(u'run')
+ var.get(u'BlockScoping').get(u'prototype').put(u'run', PyJs_run_822_)
+ @Js
+ def PyJs_updateScopeInfo_823_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'updateScopeInfo':PyJs_updateScopeInfo_823_}, var)
+ var.registers([u'letRefs', u'binding', u'key', u'parentScope', u'scope', u'ref'])
+ var.put(u'scope', var.get(u"this").get(u'scope'))
+ var.put(u'parentScope', var.get(u'scope').callprop(u'getFunctionParent'))
+ var.put(u'letRefs', var.get(u"this").get(u'letReferences'))
+ for PyJsTemp in var.get(u'letRefs'):
+ var.put(u'key', PyJsTemp)
+ var.put(u'ref', var.get(u'letRefs').get(var.get(u'key')))
+ var.put(u'binding', var.get(u'scope').callprop(u'getBinding', var.get(u'ref').get(u'name')))
+ if var.get(u'binding').neg():
+ continue
+ if (PyJsStrictEq(var.get(u'binding').get(u'kind'),Js(u'let')) or PyJsStrictEq(var.get(u'binding').get(u'kind'),Js(u'const'))):
+ var.get(u'binding').put(u'kind', Js(u'var'))
+ var.get(u'scope').callprop(u'moveBindingTo', var.get(u'ref').get(u'name'), var.get(u'parentScope'))
+ PyJs_updateScopeInfo_823_._set_name(u'updateScopeInfo')
+ var.get(u'BlockScoping').get(u'prototype').put(u'updateScopeInfo', PyJs_updateScopeInfo_823_)
+ @Js
+ def PyJs_remap_824_(this, arguments, var=var):
+ var = Scope({u'this':this, u'remap':PyJs_remap_824_, u'arguments':arguments}, var)
+ var.registers([u'scope', u'ref', u'key', u'letRefs'])
+ var.put(u'letRefs', var.get(u"this").get(u'letReferences'))
+ var.put(u'scope', var.get(u"this").get(u'scope'))
+ for PyJsTemp in var.get(u'letRefs'):
+ var.put(u'key', PyJsTemp)
+ var.put(u'ref', var.get(u'letRefs').get(var.get(u'key')))
+ if (var.get(u'scope').callprop(u'parentHasBinding', var.get(u'key')) or var.get(u'scope').callprop(u'hasGlobal', var.get(u'key'))):
+ if var.get(u'scope').callprop(u'hasOwnBinding', var.get(u'key')):
+ var.get(u'scope').callprop(u'rename', var.get(u'ref').get(u'name'))
+ if var.get(u"this").get(u'blockPath').get(u'scope').callprop(u'hasOwnBinding', var.get(u'key')):
+ var.get(u"this").get(u'blockPath').get(u'scope').callprop(u'rename', var.get(u'ref').get(u'name'))
+ PyJs_remap_824_._set_name(u'remap')
+ var.get(u'BlockScoping').get(u'prototype').put(u'remap', PyJs_remap_824_)
+ @Js
+ def PyJs_wrapClosure_825_(this, arguments, var=var):
+ var = Scope({u'this':this, u'wrapClosure':PyJs_wrapClosure_825_, u'arguments':arguments}, var)
+ var.registers([u'hasYield', u'name', u'call', u'args', u'hasAsync', u'ret', u'params', u'fn', u'outsideRefs', u'isSwitch', u'ref', u'id', u'block'])
+ var.put(u'block', var.get(u"this").get(u'block'))
+ var.put(u'outsideRefs', var.get(u"this").get(u'outsideLetReferences'))
+ if var.get(u"this").get(u'loop'):
+ for PyJsTemp in var.get(u'outsideRefs'):
+ var.put(u'name', PyJsTemp)
+ var.put(u'id', var.get(u'outsideRefs').get(var.get(u'name')))
+ if (var.get(u"this").get(u'scope').callprop(u'hasGlobal', var.get(u'id').get(u'name')) or var.get(u"this").get(u'scope').callprop(u'parentHasBinding', var.get(u'id').get(u'name'))):
+ var.get(u'outsideRefs').delete(var.get(u'id').get(u'name'))
+ var.get(u"this").get(u'letReferences').delete(var.get(u'id').get(u'name'))
+ var.get(u"this").get(u'scope').callprop(u'rename', var.get(u'id').get(u'name'))
+ var.get(u"this").get(u'letReferences').put(var.get(u'id').get(u'name'), var.get(u'id'))
+ var.get(u'outsideRefs').put(var.get(u'id').get(u'name'), var.get(u'id'))
+ var.get(u"this").put(u'has', var.get(u"this").callprop(u'checkLoop'))
+ var.get(u"this").callprop(u'hoistVarDeclarations')
+ var.put(u'params', PyJsComma(Js(0.0),var.get(u'_values2').get(u'default'))(var.get(u'outsideRefs')))
+ var.put(u'args', PyJsComma(Js(0.0),var.get(u'_values2').get(u'default'))(var.get(u'outsideRefs')))
+ var.put(u'isSwitch', var.get(u"this").get(u'blockPath').callprop(u'isSwitchStatement'))
+ var.put(u'fn', var.get(u't').callprop(u'functionExpression', var.get(u"null"), var.get(u'params'), var.get(u't').callprop(u'blockStatement', (Js([var.get(u'block')]) if var.get(u'isSwitch') else var.get(u'block').get(u'body')))))
+ var.get(u'fn').put(u'shadow', var.get(u'true'))
+ var.get(u"this").callprop(u'addContinuations', var.get(u'fn'))
+ var.put(u'ref', var.get(u'fn'))
+ if var.get(u"this").get(u'loop'):
+ var.put(u'ref', var.get(u"this").get(u'scope').callprop(u'generateUidIdentifier', Js(u'loop')))
+ var.get(u"this").get(u'loopPath').callprop(u'insertBefore', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'ref'), var.get(u'fn'))])))
+ var.put(u'call', var.get(u't').callprop(u'callExpression', var.get(u'ref'), var.get(u'args')))
+ var.put(u'ret', var.get(u"this").get(u'scope').callprop(u'generateUidIdentifier', Js(u'ret')))
+ var.put(u'hasYield', var.get(u'_babelTraverse2').get(u'default').callprop(u'hasType', var.get(u'fn').get(u'body'), var.get(u"this").get(u'scope'), Js(u'YieldExpression'), var.get(u't').get(u'FUNCTION_TYPES')))
+ if var.get(u'hasYield'):
+ var.get(u'fn').put(u'generator', var.get(u'true'))
+ var.put(u'call', var.get(u't').callprop(u'yieldExpression', var.get(u'call'), var.get(u'true')))
+ var.put(u'hasAsync', var.get(u'_babelTraverse2').get(u'default').callprop(u'hasType', var.get(u'fn').get(u'body'), var.get(u"this").get(u'scope'), Js(u'AwaitExpression'), var.get(u't').get(u'FUNCTION_TYPES')))
+ if var.get(u'hasAsync'):
+ var.get(u'fn').put(u'async', var.get(u'true'))
+ var.put(u'call', var.get(u't').callprop(u'awaitExpression', var.get(u'call')))
+ var.get(u"this").callprop(u'buildClosure', var.get(u'ret'), var.get(u'call'))
+ if var.get(u'isSwitch'):
+ var.get(u"this").get(u'blockPath').callprop(u'replaceWithMultiple', var.get(u"this").get(u'body'))
+ else:
+ var.get(u'block').put(u'body', var.get(u"this").get(u'body'))
+ PyJs_wrapClosure_825_._set_name(u'wrapClosure')
+ var.get(u'BlockScoping').get(u'prototype').put(u'wrapClosure', PyJs_wrapClosure_825_)
+ @Js
+ def PyJs_buildClosure_826_(ret, call, this, arguments, var=var):
+ var = Scope({u'this':this, u'buildClosure':PyJs_buildClosure_826_, u'call':call, u'arguments':arguments, u'ret':ret}, var)
+ var.registers([u'has', u'call', u'ret'])
+ var.put(u'has', var.get(u"this").get(u'has'))
+ if (var.get(u'has').get(u'hasReturn') or var.get(u'has').get(u'hasBreakContinue')):
+ var.get(u"this").callprop(u'buildHas', var.get(u'ret'), var.get(u'call'))
+ else:
+ var.get(u"this").get(u'body').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u'call')))
+ PyJs_buildClosure_826_._set_name(u'buildClosure')
+ var.get(u'BlockScoping').get(u'prototype').put(u'buildClosure', PyJs_buildClosure_826_)
+ @Js
+ def PyJs_addContinuations_827_(fn, this, arguments, var=var):
+ var = Scope({u'this':this, u'addContinuations':PyJs_addContinuations_827_, u'arguments':arguments, u'fn':fn}, var)
+ var.registers([u'i', u'state', u'newParam', u'param', u'fn'])
+ PyJs_Object_829_ = Js({})
+ PyJs_Object_828_ = Js({u'reassignments':PyJs_Object_829_,u'outsideReferences':var.get(u"this").get(u'outsideLetReferences')})
+ var.put(u'state', PyJs_Object_828_)
+ var.get(u"this").get(u'scope').callprop(u'traverse', var.get(u'fn'), var.get(u'continuationVisitor'), var.get(u'state'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else Js(u'value')))
+ var.put(u'scope', var.get(u'arguments').get(u'3'))
+ var.put(u'mutatorMap', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'node').get(u'static'):
+ var.get(u"this").put(u'hasStaticDescriptors', var.get(u'true'))
+ var.put(u'mutatorMap', var.get(u"this").get(u'staticMutatorMap'))
+ else:
+ var.get(u"this").put(u'hasInstanceDescriptors', var.get(u'true'))
+ var.put(u'mutatorMap', var.get(u"this").get(u'instanceMutatorMap'))
+ var.put(u'map', var.get(u'defineMap').callprop(u'push', var.get(u'mutatorMap'), var.get(u'node'), var.get(u'kind'), var.get(u"this").get(u'file'), var.get(u'scope')))
+ if var.get(u'enumerable'):
+ var.get(u'map').put(u'enumerable', var.get(u't').callprop(u'booleanLiteral', var.get(u'true')))
+ return var.get(u'map')
+ PyJs_pushToMap_884_._set_name(u'pushToMap')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'pushToMap', PyJs_pushToMap_884_)
+ @Js
+ def PyJs_constructorMeMaybe_885_(this, arguments, var=var):
+ var = Scope({u'this':this, u'constructorMeMaybe':PyJs_constructorMeMaybe_885_, u'arguments':arguments}, var)
+ var.registers([u'body', u'paths', u'_isArray', u'_iterator', u'_constructor', u'params', u'_i', u'path', u'hasConstructor', u'_ref'])
+ var.put(u'hasConstructor', Js(False))
+ var.put(u'paths', var.get(u"this").get(u'path').callprop(u'get', Js(u'body.body')))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'paths'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'path', var.get(u'_ref'))
+ var.put(u'hasConstructor', var.get(u'path').callprop(u'equals', Js(u'kind'), Js(u'constructor')))
+ if var.get(u'hasConstructor'):
+ break
+
+ if var.get(u'hasConstructor'):
+ return var.get('undefined')
+ var.put(u'params', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'body', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u"this").get(u'isDerived'):
+ var.put(u'_constructor', var.get(u'buildDerivedConstructor')().get(u'expression'))
+ var.put(u'params', var.get(u'_constructor').get(u'params'))
+ var.put(u'body', var.get(u'_constructor').get(u'body'))
+ else:
+ var.put(u'params', Js([]))
+ var.put(u'body', var.get(u't').callprop(u'blockStatement', Js([])))
+ var.get(u"this").get(u'path').callprop(u'get', Js(u'body')).callprop(u'unshiftContainer', Js(u'body'), var.get(u't').callprop(u'classMethod', Js(u'constructor'), var.get(u't').callprop(u'identifier', Js(u'constructor')), var.get(u'params'), var.get(u'body')))
+ PyJs_constructorMeMaybe_885_._set_name(u'constructorMeMaybe')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'constructorMeMaybe', PyJs_constructorMeMaybe_885_)
+ @Js
+ def PyJs_buildBody_886_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'buildBody':PyJs_buildBody_886_}, var)
+ var.registers([u'constructorBody'])
+ var.get(u"this").callprop(u'constructorMeMaybe')
+ var.get(u"this").callprop(u'pushBody')
+ var.get(u"this").callprop(u'verifyConstructor')
+ if var.get(u"this").get(u'userConstructor'):
+ var.put(u'constructorBody', var.get(u"this").get(u'constructorBody'))
+ var.get(u'constructorBody').put(u'body', var.get(u'constructorBody').get(u'body').callprop(u'concat', var.get(u"this").get(u'userConstructor').get(u'body').get(u'body')))
+ var.get(u't').callprop(u'inherits', var.get(u"this").get(u'constructor'), var.get(u"this").get(u'userConstructor'))
+ var.get(u't').callprop(u'inherits', var.get(u'constructorBody'), var.get(u"this").get(u'userConstructor').get(u'body'))
+ var.get(u"this").callprop(u'pushDescriptors')
+ PyJs_buildBody_886_._set_name(u'buildBody')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'buildBody', PyJs_buildBody_886_)
+ @Js
+ def PyJs_pushBody_887_(this, arguments, var=var):
+ var = Scope({u'this':this, u'pushBody':PyJs_pushBody_887_, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray2', u'isConstructor', u'_i2', u'classBodyPaths', u'_ref2', u'replaceSupers', u'path', u'_iterator2'])
+ var.put(u'classBodyPaths', var.get(u"this").get(u'path').callprop(u'get', Js(u'body.body')))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'classBodyPaths'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'path', var.get(u'_ref2'))
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u'path').callprop(u'isClassProperty'):
+ PyJsTempException = JsToPyException(var.get(u'path').callprop(u'buildCodeFrameError', Js(u'Missing class properties transform.')))
+ raise PyJsTempException
+ if var.get(u'node').get(u'decorators'):
+ PyJsTempException = JsToPyException(var.get(u'path').callprop(u'buildCodeFrameError', Js(u'Method has decorators, put the decorator plugin before the classes one.')))
+ raise PyJsTempException
+ if var.get(u't').callprop(u'isClassMethod', var.get(u'node')):
+ var.put(u'isConstructor', PyJsStrictEq(var.get(u'node').get(u'kind'),Js(u'constructor')))
+ if var.get(u'isConstructor'):
+ var.get(u'path').callprop(u'traverse', var.get(u'verifyConstructorVisitor'), var.get(u"this"))
+ if (var.get(u"this").get(u'hasBareSuper').neg() and var.get(u"this").get(u'isDerived')):
+ PyJsTempException = JsToPyException(var.get(u'path').callprop(u'buildCodeFrameError', Js(u'missing super() call in constructor')))
+ raise PyJsTempException
+ PyJs_Object_888_ = Js({u'forceSuperMemoisation':var.get(u'isConstructor'),u'methodPath':var.get(u'path'),u'methodNode':var.get(u'node'),u'objectRef':var.get(u"this").get(u'classRef'),u'superRef':var.get(u"this").get(u'superName'),u'isStatic':var.get(u'node').get(u'static'),u'isLoose':var.get(u"this").get(u'isLoose'),u'scope':var.get(u"this").get(u'scope'),u'file':var.get(u"this").get(u'file')})
+ var.put(u'replaceSupers', var.get(u'_babelHelperReplaceSupers2').get(u'default').create(PyJs_Object_888_, var.get(u'true')))
+ var.get(u'replaceSupers').callprop(u'replace')
+ if var.get(u'isConstructor'):
+ var.get(u"this").callprop(u'pushConstructor', var.get(u'replaceSupers'), var.get(u'node'), var.get(u'path'))
+ else:
+ var.get(u"this").callprop(u'pushMethod', var.get(u'node'), var.get(u'path'))
+
+ PyJs_pushBody_887_._set_name(u'pushBody')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'pushBody', PyJs_pushBody_887_)
+ @Js
+ def PyJs_clearDescriptors_889_(this, arguments, var=var):
+ var = Scope({u'this':this, u'clearDescriptors':PyJs_clearDescriptors_889_, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").put(u'hasInstanceDescriptors', Js(False))
+ var.get(u"this").put(u'hasStaticDescriptors', Js(False))
+ PyJs_Object_890_ = Js({})
+ var.get(u"this").put(u'instanceMutatorMap', PyJs_Object_890_)
+ PyJs_Object_891_ = Js({})
+ var.get(u"this").put(u'staticMutatorMap', PyJs_Object_891_)
+ PyJs_clearDescriptors_889_._set_name(u'clearDescriptors')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'clearDescriptors', PyJs_clearDescriptors_889_)
+ @Js
+ def PyJs_pushDescriptors_892_(this, arguments, var=var):
+ var = Scope({u'this':this, u'pushDescriptors':PyJs_pushDescriptors_892_, u'arguments':arguments}, var)
+ var.registers([u'body', u'i', u'args', u'lastNonNullIndex', u'staticProps', u'instanceProps', u'nullNode'])
+ var.get(u"this").callprop(u'pushInherits')
+ var.put(u'body', var.get(u"this").get(u'body'))
+ var.put(u'instanceProps', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'staticProps', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u"this").get(u'hasInstanceDescriptors'):
+ var.put(u'instanceProps', var.get(u'defineMap').callprop(u'toClassObject', var.get(u"this").get(u'instanceMutatorMap')))
+ if var.get(u"this").get(u'hasStaticDescriptors'):
+ var.put(u'staticProps', var.get(u'defineMap').callprop(u'toClassObject', var.get(u"this").get(u'staticMutatorMap')))
+ if (var.get(u'instanceProps') or var.get(u'staticProps')):
+ if var.get(u'instanceProps'):
+ var.put(u'instanceProps', var.get(u'defineMap').callprop(u'toComputedObjectFromClass', var.get(u'instanceProps')))
+ if var.get(u'staticProps'):
+ var.put(u'staticProps', var.get(u'defineMap').callprop(u'toComputedObjectFromClass', var.get(u'staticProps')))
+ var.put(u'nullNode', var.get(u't').callprop(u'nullLiteral'))
+ var.put(u'args', Js([var.get(u"this").get(u'classRef'), var.get(u'nullNode'), var.get(u'nullNode'), var.get(u'nullNode'), var.get(u'nullNode')]))
+ if var.get(u'instanceProps'):
+ var.get(u'args').put(u'1', var.get(u'instanceProps'))
+ if var.get(u'staticProps'):
+ var.get(u'args').put(u'2', var.get(u'staticProps'))
+ if var.get(u"this").get(u'instanceInitializersId'):
+ var.get(u'args').put(u'3', var.get(u"this").get(u'instanceInitializersId'))
+ var.get(u'body').callprop(u'unshift', var.get(u"this").callprop(u'buildObjectAssignment', var.get(u"this").get(u'instanceInitializersId')))
+ if var.get(u"this").get(u'staticInitializersId'):
+ var.get(u'args').put(u'4', var.get(u"this").get(u'staticInitializersId'))
+ var.get(u'body').callprop(u'unshift', var.get(u"this").callprop(u'buildObjectAssignment', var.get(u"this").get(u'staticInitializersId')))
+ var.put(u'lastNonNullIndex', Js(0.0))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'bareSuper', var.get(u'_ref3'))
+ var.get(u"this").callprop(u'wrapSuperCall', var.get(u'bareSuper'), var.get(u'superRef'), var.get(u'thisRef'), var.get(u'body'))
+ if var.get(u'guaranteedSuperBeforeFinish'):
+ @Js
+ def PyJs_anonymous_900_(parentPath, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'parentPath':parentPath}, var)
+ var.registers([u'parentPath'])
+ if PyJsStrictEq(var.get(u'parentPath'),var.get(u'path')):
+ return var.get(u'true')
+ if (var.get(u'parentPath').callprop(u'isLoop') or var.get(u'parentPath').callprop(u'isConditional')):
+ var.put(u'guaranteedSuperBeforeFinish', Js(False))
+ return var.get(u'true')
+ PyJs_anonymous_900_._set_name(u'anonymous')
+ var.get(u'bareSuper').callprop(u'find', PyJs_anonymous_900_)
+
+ #for JS loop
+ var.put(u'_iterator4', var.get(u"this").get(u'superThises'))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator4'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i4').get(u'value'))
+ var.put(u'thisPath', var.get(u'_ref4'))
+ var.get(u'thisPath').callprop(u'replaceWith', var.get(u'thisRef'))
+
+ @Js
+ def PyJs_wrapReturn_901_(returnArg, this, arguments, var=var):
+ var = Scope({u'this':this, u'returnArg':returnArg, u'wrapReturn':PyJs_wrapReturn_901_, u'arguments':arguments}, var)
+ var.registers([u'returnArg'])
+ return var.get(u't').callprop(u'callExpression', var.get(u'_this2').get(u'file').callprop(u'addHelper', Js(u'possibleConstructorReturn')), Js([var.get(u'thisRef')]).callprop(u'concat', (var.get(u'returnArg') or Js([]))))
+ PyJs_wrapReturn_901_._set_name(u'wrapReturn')
+ var.put(u'wrapReturn', PyJs_wrapReturn_901_)
+ var.put(u'bodyPaths', var.get(u'body').callprop(u'get', Js(u'body')))
+ if (var.get(u'bodyPaths').get(u'length') and var.get(u'bodyPaths').callprop(u'pop').callprop(u'isReturnStatement').neg()):
+ var.get(u'body').callprop(u'pushContainer', Js(u'body'), var.get(u't').callprop(u'returnStatement', (var.get(u'thisRef') if var.get(u'guaranteedSuperBeforeFinish') else var.get(u'wrapReturn')())))
+ #for JS loop
+ var.put(u'_iterator5', var.get(u"this").get(u'superReturns'))
+ var.put(u'_isArray5', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator5')))
+ var.put(u'_i5', Js(0.0))
+ var.put(u'_iterator5', (var.get(u'_iterator5') if var.get(u'_isArray5') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator5'))))
+ while 1:
+ pass
+ if var.get(u'_isArray5'):
+ if (var.get(u'_i5')>=var.get(u'_iterator5').get(u'length')):
+ break
+ var.put(u'_ref5', var.get(u'_iterator5').get((var.put(u'_i5',Js(var.get(u'_i5').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i5', var.get(u'_iterator5').callprop(u'next'))
+ if var.get(u'_i5').get(u'done'):
+ break
+ var.put(u'_ref5', var.get(u'_i5').get(u'value'))
+ var.put(u'returnPath', var.get(u'_ref5'))
+ if var.get(u'returnPath').get(u'node').get(u'argument'):
+ var.put(u'ref', var.get(u'returnPath').get(u'scope').callprop(u'generateDeclaredUidIdentifier', Js(u'ret')))
+ var.get(u'returnPath').callprop(u'get', Js(u'argument')).callprop(u'replaceWithMultiple', Js([var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'ref'), var.get(u'returnPath').get(u'node').get(u'argument')), var.get(u'wrapReturn')(var.get(u'ref'))]))
+ else:
+ var.get(u'returnPath').callprop(u'get', Js(u'argument')).callprop(u'replaceWith', var.get(u'wrapReturn')())
+
+ PyJs_verifyConstructor_899_._set_name(u'verifyConstructor')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'verifyConstructor', PyJs_verifyConstructor_899_)
+ @Js
+ def PyJs_pushMethod_902_(node, path, this, arguments, var=var):
+ var = Scope({u'node':node, u'path':path, u'this':this, u'arguments':arguments, u'pushMethod':PyJs_pushMethod_902_}, var)
+ var.registers([u'node', u'scope', u'path'])
+ var.put(u'scope', (var.get(u'path').get(u'scope') if var.get(u'path') else var.get(u"this").get(u'scope')))
+ if PyJsStrictEq(var.get(u'node').get(u'kind'),Js(u'method')):
+ if var.get(u"this").callprop(u'_processMethod', var.get(u'node'), var.get(u'scope')):
+ return var.get('undefined')
+ var.get(u"this").callprop(u'pushToMap', var.get(u'node'), Js(False), var.get(u"null"), var.get(u'scope'))
+ PyJs_pushMethod_902_._set_name(u'pushMethod')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'pushMethod', PyJs_pushMethod_902_)
+ @Js
+ def PyJs__processMethod_903_(this, arguments, var=var):
+ var = Scope({u'this':this, u'_processMethod':PyJs__processMethod_903_, u'arguments':arguments}, var)
+ var.registers([])
+ return Js(False)
+ PyJs__processMethod_903_._set_name(u'_processMethod')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'_processMethod', PyJs__processMethod_903_)
+ @Js
+ def PyJs_pushConstructor_904_(replaceSupers, method, path, this, arguments, var=var):
+ var = Scope({u'this':this, u'replaceSupers':replaceSupers, u'arguments':arguments, u'path':path, u'method':method, u'pushConstructor':PyJs_pushConstructor_904_}, var)
+ var.registers([u'path', u'replaceSupers', u'construct', u'method'])
+ var.get(u"this").put(u'bareSupers', var.get(u'replaceSupers').get(u'bareSupers'))
+ var.get(u"this").put(u'superReturns', var.get(u'replaceSupers').get(u'returns'))
+ if var.get(u'path').get(u'scope').callprop(u'hasOwnBinding', var.get(u"this").get(u'classRef').get(u'name')):
+ var.get(u'path').get(u'scope').callprop(u'rename', var.get(u"this").get(u'classRef').get(u'name'))
+ var.put(u'construct', var.get(u"this").get(u'constructor'))
+ var.get(u"this").put(u'userConstructorPath', var.get(u'path'))
+ var.get(u"this").put(u'userConstructor', var.get(u'method'))
+ var.get(u"this").put(u'hasConstructor', var.get(u'true'))
+ var.get(u't').callprop(u'inheritsComments', var.get(u'construct'), var.get(u'method'))
+ var.get(u'construct').put(u'_ignoreUserWhitespace', var.get(u'true'))
+ var.get(u'construct').put(u'params', var.get(u'method').get(u'params'))
+ var.get(u't').callprop(u'inherits', var.get(u'construct').get(u'body'), var.get(u'method').get(u'body'))
+ var.get(u'construct').get(u'body').put(u'directives', var.get(u'method').get(u'body').get(u'directives'))
+ var.get(u"this").callprop(u'_pushConstructor')
+ PyJs_pushConstructor_904_._set_name(u'pushConstructor')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'pushConstructor', PyJs_pushConstructor_904_)
+ @Js
+ def PyJs__pushConstructor_905_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'_pushConstructor':PyJs__pushConstructor_905_}, var)
+ var.registers([])
+ if var.get(u"this").get(u'pushedConstructor'):
+ return var.get('undefined')
+ var.get(u"this").put(u'pushedConstructor', var.get(u'true'))
+ if (var.get(u"this").get(u'hasInstanceDescriptors') or var.get(u"this").get(u'hasStaticDescriptors')):
+ var.get(u"this").callprop(u'pushDescriptors')
+ var.get(u"this").get(u'body').callprop(u'push', var.get(u"this").get(u'constructor'))
+ var.get(u"this").callprop(u'pushInherits')
+ PyJs__pushConstructor_905_._set_name(u'_pushConstructor')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'_pushConstructor', PyJs__pushConstructor_905_)
+ @Js
+ def PyJs_pushInherits_906_(this, arguments, var=var):
+ var = Scope({u'this':this, u'pushInherits':PyJs_pushInherits_906_, u'arguments':arguments}, var)
+ var.registers([])
+ if (var.get(u"this").get(u'isDerived').neg() or var.get(u"this").get(u'pushedInherits')):
+ return var.get('undefined')
+ var.get(u"this").put(u'pushedInherits', var.get(u'true'))
+ var.get(u"this").get(u'body').callprop(u'unshift', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'callExpression', var.get(u"this").get(u'file').callprop(u'addHelper', Js(u'inherits')), Js([var.get(u"this").get(u'classRef'), var.get(u"this").get(u'superName')]))))
+ PyJs_pushInherits_906_._set_name(u'pushInherits')
+ var.get(u'ClassTransformer').get(u'prototype').put(u'pushInherits', PyJs_pushInherits_906_)
+ return var.get(u'ClassTransformer')
+ PyJs_anonymous_879_._set_name(u'anonymous')
+ var.put(u'ClassTransformer', PyJs_anonymous_879_())
+ var.get(u'exports').put(u'default', var.get(u'ClassTransformer'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_865_._set_name(u'anonymous')
+PyJs_Object_907_ = Js({u'babel-helper-define-map':Js(48.0),u'babel-helper-optimise-call-expression':Js(52.0),u'babel-helper-replace-supers':Js(54.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-template':Js(221.0),u'babel-traverse':Js(225.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_908_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_918_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_918_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ @Js
+ def PyJs_anonymous_909_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'_ref', u'loose', u'pushAssign', u'getValue', u'pushMutatorDefine', u't', u'template', u'buildMutatorMapAssign', u'spec'])
+ @Js
+ def PyJsHoisted_spec_(info, this, arguments, var=var):
+ var = Scope({u'info':info, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'body', u'info', u'_isArray2', u'_ref4', u'_i2', u'prop', u'state', u'computedProps', u'objId', u'key', u'_iterator2'])
+ var.put(u'objId', var.get(u'info').get(u'objId'))
+ var.put(u'body', var.get(u'info').get(u'body'))
+ var.put(u'computedProps', var.get(u'info').get(u'computedProps'))
+ var.put(u'state', var.get(u'info').get(u'state'))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'computedProps'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i2').get(u'value'))
+ var.put(u'prop', var.get(u'_ref4'))
+ var.put(u'key', var.get(u't').callprop(u'toComputedKey', var.get(u'prop')))
+ if (PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'get')) or PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'set'))):
+ var.get(u'pushMutatorDefine')(var.get(u'info'), var.get(u'prop'))
+ else:
+ PyJs_Object_911_ = Js({u'value':Js(u'__proto__')})
+ if var.get(u't').callprop(u'isStringLiteral', var.get(u'key'), PyJs_Object_911_):
+ var.get(u'pushAssign')(var.get(u'objId'), var.get(u'prop'), var.get(u'body'))
+ else:
+ if PyJsStrictEq(var.get(u'computedProps').get(u'length'),Js(1.0)):
+ return var.get(u't').callprop(u'callExpression', var.get(u'state').callprop(u'addHelper', Js(u'defineProperty')), Js([var.get(u'info').get(u'initPropExpression'), var.get(u'key'), var.get(u'getValue')(var.get(u'prop'))]))
+ else:
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'callExpression', var.get(u'state').callprop(u'addHelper', Js(u'defineProperty')), Js([var.get(u'objId'), var.get(u'key'), var.get(u'getValue')(var.get(u'prop'))]))))
+
+ PyJsHoisted_spec_.func_name = u'spec'
+ var.put(u'spec', PyJsHoisted_spec_)
+ @Js
+ def PyJsHoisted_pushMutatorDefine_(_ref2, prop, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'_ref2':_ref2, u'prop':prop}, var)
+ var.registers([u'body', u'maybeMemoise', u'_ref2', u'prop', u'objId', u'key', u'scope', u'getMutatorId'])
+ var.put(u'objId', var.get(u'_ref2').get(u'objId'))
+ var.put(u'body', var.get(u'_ref2').get(u'body'))
+ var.put(u'getMutatorId', var.get(u'_ref2').get(u'getMutatorId'))
+ var.put(u'scope', var.get(u'_ref2').get(u'scope'))
+ var.put(u'key', (var.get(u't').callprop(u'stringLiteral', var.get(u'prop').get(u'key').get(u'name')) if (var.get(u'prop').get(u'computed').neg() and var.get(u't').callprop(u'isIdentifier', var.get(u'prop').get(u'key'))) else var.get(u'prop').get(u'key')))
+ var.put(u'maybeMemoise', var.get(u'scope').callprop(u'maybeGenerateMemoised', var.get(u'key')))
+ if var.get(u'maybeMemoise'):
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'maybeMemoise'), var.get(u'key'))))
+ var.put(u'key', var.get(u'maybeMemoise'))
+ PyJs_Object_910_ = Js({u'MUTATOR_MAP_REF':var.get(u'getMutatorId')(),u'KEY':var.get(u'key'),u'VALUE':var.get(u'getValue')(var.get(u'prop')),u'KIND':var.get(u't').callprop(u'identifier', var.get(u'prop').get(u'kind'))})
+ var.get(u'body').get(u'push').callprop(u'apply', var.get(u'body'), var.get(u'buildMutatorMapAssign')(PyJs_Object_910_))
+ PyJsHoisted_pushMutatorDefine_.func_name = u'pushMutatorDefine'
+ var.put(u'pushMutatorDefine', PyJsHoisted_pushMutatorDefine_)
+ @Js
+ def PyJsHoisted_loose_(info, this, arguments, var=var):
+ var = Scope({u'info':info, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'info', u'_isArray', u'_iterator', u'_ref3', u'prop', u'_i'])
+ #for JS loop
+ var.put(u'_iterator', var.get(u'info').get(u'computedProps'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i').get(u'value'))
+ var.put(u'prop', var.get(u'_ref3'))
+ if (PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'get')) or PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'set'))):
+ var.get(u'pushMutatorDefine')(var.get(u'info'), var.get(u'prop'))
+ else:
+ var.get(u'pushAssign')(var.get(u'info').get(u'objId'), var.get(u'prop'), var.get(u'info').get(u'body'))
+
+ PyJsHoisted_loose_.func_name = u'loose'
+ var.put(u'loose', PyJsHoisted_loose_)
+ @Js
+ def PyJsHoisted_pushAssign_(objId, prop, body, this, arguments, var=var):
+ var = Scope({u'body':body, u'this':this, u'objId':objId, u'arguments':arguments, u'prop':prop}, var)
+ var.registers([u'body', u'objId', u'prop'])
+ if (PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'get')) and PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'set'))):
+ var.get(u'pushMutatorDefine')(var.get(u'objId'), var.get(u'prop'), var.get(u'body'))
+ else:
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u't').callprop(u'memberExpression', var.get(u'objId'), var.get(u'prop').get(u'key'), (var.get(u'prop').get(u'computed') or var.get(u't').callprop(u'isLiteral', var.get(u'prop').get(u'key')))), var.get(u'getValue')(var.get(u'prop')))))
+ PyJsHoisted_pushAssign_.func_name = u'pushAssign'
+ var.put(u'pushAssign', PyJsHoisted_pushAssign_)
+ @Js
+ def PyJsHoisted_getValue_(prop, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'prop':prop}, var)
+ var.registers([u'prop'])
+ if var.get(u't').callprop(u'isObjectProperty', var.get(u'prop')):
+ return var.get(u'prop').get(u'value')
+ else:
+ if var.get(u't').callprop(u'isObjectMethod', var.get(u'prop')):
+ return var.get(u't').callprop(u'functionExpression', var.get(u"null"), var.get(u'prop').get(u'params'), var.get(u'prop').get(u'body'), var.get(u'prop').get(u'generator'), var.get(u'prop').get(u'async'))
+ PyJsHoisted_getValue_.func_name = u'getValue'
+ var.put(u'getValue', PyJsHoisted_getValue_)
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ var.put(u'template', var.get(u'_ref').get(u'template'))
+ var.put(u'buildMutatorMapAssign', var.get(u'template')(Js(u'\n MUTATOR_MAP_REF[KEY] = MUTATOR_MAP_REF[KEY] || {};\n MUTATOR_MAP_REF[KEY].KIND = VALUE;\n ')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_exit_915_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'exit':PyJs_exit_915_, u'arguments':arguments}, var)
+ var.registers([u'body', u'_isArray4', u'_isArray3', u'initProps', u'single', u'computedProps', u'_i4', u'_i3', u'hasComputed', u'prop', u'state', u'scope', u'getMutatorId', u'node', u'parent', u'initPropExpression', u'mutatorRef', u'foundComputed', u'objId', u'path', u'_prop', u'_ref6', u'_ref5', u'callback', u'_iterator4', u'_iterator3'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'parent', var.get(u'path').get(u'parent'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'hasComputed', Js(False))
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'node').get(u'properties'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref5', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref5', var.get(u'_i3').get(u'value'))
+ var.put(u'prop', var.get(u'_ref5'))
+ var.put(u'hasComputed', PyJsStrictEq(var.get(u'prop').get(u'computed'),var.get(u'true')))
+ if var.get(u'hasComputed'):
+ break
+
+ if var.get(u'hasComputed').neg():
+ return var.get('undefined')
+ var.put(u'initProps', Js([]))
+ var.put(u'computedProps', Js([]))
+ var.put(u'foundComputed', Js(False))
+ #for JS loop
+ var.put(u'_iterator4', var.get(u'node').get(u'properties'))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator4'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref6', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref6', var.get(u'_i4').get(u'value'))
+ var.put(u'_prop', var.get(u'_ref6'))
+ if var.get(u'_prop').get(u'computed'):
+ var.put(u'foundComputed', var.get(u'true'))
+ if var.get(u'foundComputed'):
+ var.get(u'computedProps').callprop(u'push', var.get(u'_prop'))
+ else:
+ var.get(u'initProps').callprop(u'push', var.get(u'_prop'))
+
+ var.put(u'objId', var.get(u'scope').callprop(u'generateUidIdentifierBasedOnNode', var.get(u'parent')))
+ var.put(u'initPropExpression', var.get(u't').callprop(u'objectExpression', var.get(u'initProps')))
+ var.put(u'body', Js([]))
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'objId'), var.get(u'initPropExpression'))])))
+ var.put(u'callback', var.get(u'spec'))
+ if var.get(u'state').get(u'opts').get(u'loose'):
+ var.put(u'callback', var.get(u'loose'))
+ var.put(u'mutatorRef', PyJsComma(Js(0.0), Js(None)))
+ @Js
+ def PyJs_getMutatorId_916_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'getMutatorId':PyJs_getMutatorId_916_}, var)
+ var.registers([])
+ if var.get(u'mutatorRef').neg():
+ var.put(u'mutatorRef', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'mutatorMap')))
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'mutatorRef'), var.get(u't').callprop(u'objectExpression', Js([])))])))
+ return var.get(u'mutatorRef')
+ PyJs_getMutatorId_916_._set_name(u'getMutatorId')
+ var.put(u'getMutatorId', PyJs_getMutatorId_916_)
+ PyJs_Object_917_ = Js({u'scope':var.get(u'scope'),u'objId':var.get(u'objId'),u'body':var.get(u'body'),u'computedProps':var.get(u'computedProps'),u'initPropExpression':var.get(u'initPropExpression'),u'getMutatorId':var.get(u'getMutatorId'),u'state':var.get(u'state')})
+ var.put(u'single', var.get(u'callback')(PyJs_Object_917_))
+ if var.get(u'mutatorRef'):
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'callExpression', var.get(u'state').callprop(u'addHelper', Js(u'defineEnumerableProperties')), Js([var.get(u'objId'), var.get(u'mutatorRef')]))))
+ if var.get(u'single'):
+ var.get(u'path').callprop(u'replaceWith', var.get(u'single'))
+ else:
+ var.get(u'body').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u'objId')))
+ var.get(u'path').callprop(u'replaceWithMultiple', var.get(u'body'))
+ PyJs_exit_915_._set_name(u'exit')
+ PyJs_Object_914_ = Js({u'exit':PyJs_exit_915_})
+ PyJs_Object_913_ = Js({u'ObjectExpression':PyJs_Object_914_})
+ PyJs_Object_912_ = Js({u'visitor':PyJs_Object_913_})
+ return PyJs_Object_912_
+ PyJs_anonymous_909_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_909_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_908_._set_name(u'anonymous')
+PyJs_Object_919_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0)})
+@Js
+def PyJs_anonymous_920_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_classCallCheck2', u'require', u'module', u'_interopRequireDefault', u'_classCallCheck3', u'_getIterator3', u'_getIterator2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_950_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_950_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ @Js
+ def PyJs_anonymous_921_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'DestructuringTransformer', u'hasRest', u'variableDeclarationHasPattern', u't', u'_ref', u'arrayUnpackVisitor'])
+ @Js
+ def PyJsHoisted_hasRest_(pattern, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'arguments':arguments}, var)
+ var.registers([u'_isArray2', u'pattern', u'_ref3', u'_i2', u'elem', u'_iterator2'])
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'pattern').get(u'elements'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i2').get(u'value'))
+ var.put(u'elem', var.get(u'_ref3'))
+ if var.get(u't').callprop(u'isRestElement', var.get(u'elem')):
+ return var.get(u'true')
+
+ return Js(False)
+ PyJsHoisted_hasRest_.func_name = u'hasRest'
+ var.put(u'hasRest', PyJsHoisted_hasRest_)
+ @Js
+ def PyJsHoisted_variableDeclarationHasPattern_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'_ref2', u'declar', u'_i'])
+ #for JS loop
+ var.put(u'_iterator', var.get(u'node').get(u'declarations'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i').get(u'value'))
+ var.put(u'declar', var.get(u'_ref2'))
+ if var.get(u't').callprop(u'isPattern', var.get(u'declar').get(u'id')):
+ return var.get(u'true')
+
+ return Js(False)
+ PyJsHoisted_variableDeclarationHasPattern_.func_name = u'variableDeclarationHasPattern'
+ var.put(u'variableDeclarationHasPattern', PyJsHoisted_variableDeclarationHasPattern_)
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ pass
+ pass
+ @Js
+ def PyJs_ReferencedIdentifier_923_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'ReferencedIdentifier':PyJs_ReferencedIdentifier_923_, u'arguments':arguments}, var)
+ var.registers([u'path', u'state'])
+ if var.get(u'state').get(u'bindings').get(var.get(u'path').get(u'node').get(u'name')):
+ var.get(u'state').put(u'deopt', var.get(u'true'))
+ var.get(u'path').callprop(u'stop')
+ PyJs_ReferencedIdentifier_923_._set_name(u'ReferencedIdentifier')
+ PyJs_Object_922_ = Js({u'ReferencedIdentifier':PyJs_ReferencedIdentifier_923_})
+ var.put(u'arrayUnpackVisitor', PyJs_Object_922_)
+ @Js
+ def PyJs_anonymous_924_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'DestructuringTransformer'])
+ @Js
+ def PyJsHoisted_DestructuringTransformer_(opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'opts'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'DestructuringTransformer'))
+ var.get(u"this").put(u'blockHoist', var.get(u'opts').get(u'blockHoist'))
+ var.get(u"this").put(u'operator', var.get(u'opts').get(u'operator'))
+ PyJs_Object_925_ = Js({})
+ var.get(u"this").put(u'arrays', PyJs_Object_925_)
+ var.get(u"this").put(u'nodes', (var.get(u'opts').get(u'nodes') or Js([])))
+ var.get(u"this").put(u'scope', var.get(u'opts').get(u'scope'))
+ var.get(u"this").put(u'file', var.get(u'opts').get(u'file'))
+ var.get(u"this").put(u'kind', var.get(u'opts').get(u'kind'))
+ PyJsHoisted_DestructuringTransformer_.func_name = u'DestructuringTransformer'
+ var.put(u'DestructuringTransformer', PyJsHoisted_DestructuringTransformer_)
+ pass
+ @Js
+ def PyJs_buildVariableAssignment_926_(id, init, this, arguments, var=var):
+ var = Scope({u'this':this, u'init':init, u'buildVariableAssignment':PyJs_buildVariableAssignment_926_, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'node', u'init', u'id', u'op'])
+ var.put(u'op', var.get(u"this").get(u'operator'))
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'id')):
+ var.put(u'op', Js(u'='))
+ var.put(u'node', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'op'):
+ var.put(u'node', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', var.get(u'op'), var.get(u'id'), var.get(u'init'))))
+ else:
+ var.put(u'node', var.get(u't').callprop(u'variableDeclaration', var.get(u"this").get(u'kind'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'id'), var.get(u'init'))])))
+ var.get(u'node').put(u'_blockHoist', var.get(u"this").get(u'blockHoist'))
+ return var.get(u'node')
+ PyJs_buildVariableAssignment_926_._set_name(u'buildVariableAssignment')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'buildVariableAssignment', PyJs_buildVariableAssignment_926_)
+ @Js
+ def PyJs_buildVariableDeclaration_927_(id, init, this, arguments, var=var):
+ var = Scope({u'this':this, u'init':init, u'buildVariableDeclaration':PyJs_buildVariableDeclaration_927_, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'init', u'declar', u'id'])
+ var.put(u'declar', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'id'), var.get(u'init'))])))
+ var.get(u'declar').put(u'_blockHoist', var.get(u"this").get(u'blockHoist'))
+ return var.get(u'declar')
+ PyJs_buildVariableDeclaration_927_._set_name(u'buildVariableDeclaration')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'buildVariableDeclaration', PyJs_buildVariableDeclaration_927_)
+ @Js
+ def PyJs_push_928_(id, init, this, arguments, var=var):
+ var = Scope({u'this':this, u'push':PyJs_push_928_, u'init':init, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'init', u'id'])
+ if var.get(u't').callprop(u'isObjectPattern', var.get(u'id')):
+ var.get(u"this").callprop(u'pushObjectPattern', var.get(u'id'), var.get(u'init'))
+ else:
+ if var.get(u't').callprop(u'isArrayPattern', var.get(u'id')):
+ var.get(u"this").callprop(u'pushArrayPattern', var.get(u'id'), var.get(u'init'))
+ else:
+ if var.get(u't').callprop(u'isAssignmentPattern', var.get(u'id')):
+ var.get(u"this").callprop(u'pushAssignmentPattern', var.get(u'id'), var.get(u'init'))
+ else:
+ var.get(u"this").get(u'nodes').callprop(u'push', var.get(u"this").callprop(u'buildVariableAssignment', var.get(u'id'), var.get(u'init')))
+ PyJs_push_928_._set_name(u'push')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'push', PyJs_push_928_)
+ @Js
+ def PyJs_toArray_929_(node, count, this, arguments, var=var):
+ var = Scope({u'node':node, u'count':count, u'this':this, u'arguments':arguments, u'toArray':PyJs_toArray_929_}, var)
+ var.registers([u'node', u'count'])
+ if (var.get(u"this").get(u'file').get(u'opts').get(u'loose') or (var.get(u't').callprop(u'isIdentifier', var.get(u'node')) and var.get(u"this").get(u'arrays').get(var.get(u'node').get(u'name')))):
+ return var.get(u'node')
+ else:
+ return var.get(u"this").get(u'scope').callprop(u'toArray', var.get(u'node'), var.get(u'count'))
+ PyJs_toArray_929_._set_name(u'toArray')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'toArray', PyJs_toArray_929_)
+ @Js
+ def PyJs_pushAssignmentPattern_930_(pattern, valueRef, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'valueRef':valueRef, u'arguments':arguments, u'pushAssignmentPattern':PyJs_pushAssignmentPattern_930_}, var)
+ var.registers([u'pattern', u'tempValueDefault', u'declar', u'tempValueRef', u'tempConditional', u'valueRef', u'left'])
+ var.put(u'tempValueRef', var.get(u"this").get(u'scope').callprop(u'generateUidIdentifierBasedOnNode', var.get(u'valueRef')))
+ var.put(u'declar', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'tempValueRef'), var.get(u'valueRef'))])))
+ var.get(u'declar').put(u'_blockHoist', var.get(u"this").get(u'blockHoist'))
+ var.get(u"this").get(u'nodes').callprop(u'push', var.get(u'declar'))
+ var.put(u'tempConditional', var.get(u't').callprop(u'conditionalExpression', var.get(u't').callprop(u'binaryExpression', Js(u'==='), var.get(u'tempValueRef'), var.get(u't').callprop(u'identifier', Js(u'undefined'))), var.get(u'pattern').get(u'right'), var.get(u'tempValueRef')))
+ var.put(u'left', var.get(u'pattern').get(u'left'))
+ if var.get(u't').callprop(u'isPattern', var.get(u'left')):
+ var.put(u'tempValueDefault', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'tempValueRef'), var.get(u'tempConditional'))))
+ var.get(u'tempValueDefault').put(u'_blockHoist', var.get(u"this").get(u'blockHoist'))
+ var.get(u"this").get(u'nodes').callprop(u'push', var.get(u'tempValueDefault'))
+ var.get(u"this").callprop(u'push', var.get(u'left'), var.get(u'tempValueRef'))
+ else:
+ var.get(u"this").get(u'nodes').callprop(u'push', var.get(u"this").callprop(u'buildVariableAssignment', var.get(u'left'), var.get(u'tempConditional')))
+ PyJs_pushAssignmentPattern_930_._set_name(u'pushAssignmentPattern')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'pushAssignmentPattern', PyJs_pushAssignmentPattern_930_)
+ @Js
+ def PyJs_pushObjectRest_931_(pattern, objRef, spreadProp, spreadPropIndex, this, arguments, var=var):
+ var = Scope({u'objRef':objRef, u'arguments':arguments, u'pushObjectRest':PyJs_pushObjectRest_931_, u'this':this, u'pattern':pattern, u'spreadProp':spreadProp, u'spreadPropIndex':spreadPropIndex}, var)
+ var.registers([u'keys', u'pattern', u'spreadProp', u'value', u'prop', u'objRef', u'i', u'key', u'spreadPropIndex'])
+ var.put(u'keys', Js([]))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'spreadPropIndex')):
+ break
+ if var.get(u't').callprop(u'isRestProperty', var.get(u'prop')):
+ continue
+ var.put(u'key', var.get(u'prop').get(u'key'))
+ if (var.get(u't').callprop(u'isIdentifier', var.get(u'key')) and var.get(u'prop').get(u'computed').neg()):
+ var.put(u'key', var.get(u't').callprop(u'stringLiteral', var.get(u'prop').get(u'key').get(u'name')))
+ var.get(u'keys').callprop(u'push', var.get(u'key'))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ var.put(u'keys', var.get(u't').callprop(u'arrayExpression', var.get(u'keys')))
+ var.put(u'value', var.get(u't').callprop(u'callExpression', var.get(u"this").get(u'file').callprop(u'addHelper', Js(u'objectWithoutProperties')), Js([var.get(u'objRef'), var.get(u'keys')])))
+ var.get(u"this").get(u'nodes').callprop(u'push', var.get(u"this").callprop(u'buildVariableAssignment', var.get(u'spreadProp').get(u'argument'), var.get(u'value')))
+ PyJs_pushObjectRest_931_._set_name(u'pushObjectRest')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'pushObjectRest', PyJs_pushObjectRest_931_)
+ @Js
+ def PyJs_pushObjectProperty_932_(prop, propRef, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'pushObjectProperty':PyJs_pushObjectProperty_932_, u'propRef':propRef, u'prop':prop}, var)
+ var.registers([u'objRef', u'pattern', u'propRef', u'prop'])
+ if var.get(u't').callprop(u'isLiteral', var.get(u'prop').get(u'key')):
+ var.get(u'prop').put(u'computed', var.get(u'true'))
+ var.put(u'pattern', var.get(u'prop').get(u'value'))
+ var.put(u'objRef', var.get(u't').callprop(u'memberExpression', var.get(u'propRef'), var.get(u'prop').get(u'key'), var.get(u'prop').get(u'computed')))
+ if var.get(u't').callprop(u'isPattern', var.get(u'pattern')):
+ var.get(u"this").callprop(u'push', var.get(u'pattern'), var.get(u'objRef'))
+ else:
+ var.get(u"this").get(u'nodes').callprop(u'push', var.get(u"this").callprop(u'buildVariableAssignment', var.get(u'pattern'), var.get(u'objRef')))
+ PyJs_pushObjectProperty_932_._set_name(u'pushObjectProperty')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'pushObjectProperty', PyJs_pushObjectProperty_932_)
+ @Js
+ def PyJs_pushObjectPattern_933_(pattern, objRef, this, arguments, var=var):
+ var = Scope({u'objRef':objRef, u'pattern':pattern, u'pushObjectPattern':PyJs_pushObjectPattern_933_, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'pattern', u'objRef', u'temp', u'prop'])
+ if var.get(u'pattern').get(u'properties').get(u'length').neg():
+ var.get(u"this").get(u'nodes').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'callExpression', var.get(u"this").get(u'file').callprop(u'addHelper', Js(u'objectDestructuringEmpty')), Js([var.get(u'objRef')]))))
+ if ((var.get(u'pattern').get(u'properties').get(u'length')>Js(1.0)) and var.get(u"this").get(u'scope').callprop(u'isStatic', var.get(u'objRef')).neg()):
+ var.put(u'temp', var.get(u"this").get(u'scope').callprop(u'generateUidIdentifierBasedOnNode', var.get(u'objRef')))
+ var.get(u"this").get(u'nodes').callprop(u'push', var.get(u"this").callprop(u'buildVariableDeclaration', var.get(u'temp'), var.get(u'objRef')))
+ var.put(u'objRef', var.get(u'temp'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')var.get(u'arr').get(u'elements').get(u'length')):
+ return var.get('undefined')
+ if ((var.get(u'pattern').get(u'elements').get(u'length')=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i3').get(u'value'))
+ var.put(u'elem', var.get(u'_ref4'))
+ if var.get(u'elem').neg():
+ return Js(False)
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'elem')):
+ return Js(False)
+
+ #for JS loop
+ var.put(u'_iterator4', var.get(u'arr').get(u'elements'))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator4'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref5', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref5', var.get(u'_i4').get(u'value'))
+ var.put(u'_elem', var.get(u'_ref5'))
+ if var.get(u't').callprop(u'isSpreadElement', var.get(u'_elem')):
+ return Js(False)
+ if var.get(u't').callprop(u'isCallExpression', var.get(u'_elem')):
+ return Js(False)
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'_elem')):
+ return Js(False)
+
+ var.put(u'bindings', var.get(u't').callprop(u'getBindingIdentifiers', var.get(u'pattern')))
+ PyJs_Object_935_ = Js({u'deopt':Js(False),u'bindings':var.get(u'bindings')})
+ var.put(u'state', PyJs_Object_935_)
+ var.get(u"this").get(u'scope').callprop(u'traverse', var.get(u'arr'), var.get(u'arrayUnpackVisitor'), var.get(u'state'))
+ return var.get(u'state').get(u'deopt').neg()
+ PyJs_canUnpackArrayPattern_934_._set_name(u'canUnpackArrayPattern')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'canUnpackArrayPattern', PyJs_canUnpackArrayPattern_934_)
+ @Js
+ def PyJs_pushUnpackedArrayPattern_936_(pattern, arr, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'arr':arr, u'arguments':arguments, u'pushUnpackedArrayPattern':PyJs_pushUnpackedArrayPattern_936_}, var)
+ var.registers([u'i', u'pattern', u'arr', u'elem'])
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(0.0)):
+ var.put(u'elemRef', var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'memberExpression', var.get(u'elemRef'), var.get(u't').callprop(u'identifier', Js(u'slice'))), Js([var.get(u't').callprop(u'numericLiteral', var.get(u'i'))])))
+ var.put(u'elem', var.get(u'elem').get(u'argument'))
+ else:
+ var.put(u'elemRef', var.get(u't').callprop(u'memberExpression', var.get(u'arrayRef'), var.get(u't').callprop(u'numericLiteral', var.get(u'i')), var.get(u'true')))
+ var.get(u"this").callprop(u'push', var.get(u'elem'), var.get(u'elemRef'))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ PyJs_pushArrayPattern_937_._set_name(u'pushArrayPattern')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'pushArrayPattern', PyJs_pushArrayPattern_937_)
+ @Js
+ def PyJs_init_938_(pattern, ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'init':PyJs_init_938_, u'ref':ref, u'arguments':arguments}, var)
+ var.registers([u'pattern', u'memo', u'ref'])
+ if (var.get(u't').callprop(u'isArrayExpression', var.get(u'ref')).neg() and var.get(u't').callprop(u'isMemberExpression', var.get(u'ref')).neg()):
+ var.put(u'memo', var.get(u"this").get(u'scope').callprop(u'maybeGenerateMemoised', var.get(u'ref'), var.get(u'true')))
+ if var.get(u'memo'):
+ var.get(u"this").get(u'nodes').callprop(u'push', var.get(u"this").callprop(u'buildVariableDeclaration', var.get(u'memo'), var.get(u'ref')))
+ var.put(u'ref', var.get(u'memo'))
+ var.get(u"this").callprop(u'push', var.get(u'pattern'), var.get(u'ref'))
+ return var.get(u"this").get(u'nodes')
+ PyJs_init_938_._set_name(u'init')
+ var.get(u'DestructuringTransformer').get(u'prototype').put(u'init', PyJs_init_938_)
+ return var.get(u'DestructuringTransformer')
+ PyJs_anonymous_924_._set_name(u'anonymous')
+ var.put(u'DestructuringTransformer', PyJs_anonymous_924_())
+ @Js
+ def PyJs_ExportNamedDeclaration_941_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'ExportNamedDeclaration':PyJs_ExportNamedDeclaration_941_}, var)
+ var.registers([u'id', u'specifiers', u'path', u'name', u'declaration'])
+ var.put(u'declaration', var.get(u'path').callprop(u'get', Js(u'declaration')))
+ if var.get(u'declaration').callprop(u'isVariableDeclaration').neg():
+ return var.get('undefined')
+ if var.get(u'variableDeclarationHasPattern')(var.get(u'declaration').get(u'node')).neg():
+ return var.get('undefined')
+ var.put(u'specifiers', Js([]))
+ for PyJsTemp in var.get(u'path').callprop(u'getOuterBindingIdentifiers', var.get(u'path')):
+ var.put(u'name', PyJsTemp)
+ var.put(u'id', var.get(u't').callprop(u'identifier', var.get(u'name')))
+ var.get(u'specifiers').callprop(u'push', var.get(u't').callprop(u'exportSpecifier', var.get(u'id'), var.get(u'id')))
+ var.get(u'path').callprop(u'replaceWith', var.get(u'declaration').get(u'node'))
+ var.get(u'path').callprop(u'insertAfter', var.get(u't').callprop(u'exportNamedDeclaration', var.get(u"null"), var.get(u'specifiers')))
+ PyJs_ExportNamedDeclaration_941_._set_name(u'ExportNamedDeclaration')
+ @Js
+ def PyJs_ForXStatement_942_(path, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'file':file, u'ForXStatement':PyJs_ForXStatement_942_}, var)
+ var.registers([u'node', u'destructuring', u'file', u'temp', u'pattern', u'key', u'path', u'scope', u'nodes', u'block', u'left'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'left', var.get(u'node').get(u'left'))
+ if var.get(u't').callprop(u'isPattern', var.get(u'left')):
+ var.put(u'temp', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'ref')))
+ var.get(u'node').put(u'left', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'temp'))])))
+ var.get(u'path').callprop(u'ensureBlock')
+ var.get(u'node').get(u'body').get(u'body').callprop(u'unshift', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'left'), var.get(u'temp'))])))
+ return var.get('undefined')
+ if var.get(u't').callprop(u'isVariableDeclaration', var.get(u'left')).neg():
+ return var.get('undefined')
+ var.put(u'pattern', var.get(u'left').get(u'declarations').get(u'0').get(u'id'))
+ if var.get(u't').callprop(u'isPattern', var.get(u'pattern')).neg():
+ return var.get('undefined')
+ var.put(u'key', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'ref')))
+ var.get(u'node').put(u'left', var.get(u't').callprop(u'variableDeclaration', var.get(u'left').get(u'kind'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'key'), var.get(u"null"))])))
+ var.put(u'nodes', Js([]))
+ PyJs_Object_943_ = Js({u'kind':var.get(u'left').get(u'kind'),u'file':var.get(u'file'),u'scope':var.get(u'scope'),u'nodes':var.get(u'nodes')})
+ var.put(u'destructuring', var.get(u'DestructuringTransformer').create(PyJs_Object_943_))
+ var.get(u'destructuring').callprop(u'init', var.get(u'pattern'), var.get(u'key'))
+ var.get(u'path').callprop(u'ensureBlock')
+ var.put(u'block', var.get(u'node').get(u'body'))
+ var.get(u'block').put(u'body', var.get(u'nodes').callprop(u'concat', var.get(u'block').get(u'body')))
+ PyJs_ForXStatement_942_._set_name(u'ForXStatement')
+ @Js
+ def PyJs_CatchClause_944_(_ref6, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref6':_ref6, u'arguments':arguments, u'file':file, u'CatchClause':PyJs_CatchClause_944_}, var)
+ var.registers([u'node', u'destructuring', u'pattern', u'file', u'_ref6', u'scope', u'nodes', u'ref'])
+ var.put(u'node', var.get(u'_ref6').get(u'node'))
+ var.put(u'scope', var.get(u'_ref6').get(u'scope'))
+ var.put(u'pattern', var.get(u'node').get(u'param'))
+ if var.get(u't').callprop(u'isPattern', var.get(u'pattern')).neg():
+ return var.get('undefined')
+ var.put(u'ref', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'ref')))
+ var.get(u'node').put(u'param', var.get(u'ref'))
+ var.put(u'nodes', Js([]))
+ PyJs_Object_945_ = Js({u'kind':Js(u'let'),u'file':var.get(u'file'),u'scope':var.get(u'scope'),u'nodes':var.get(u'nodes')})
+ var.put(u'destructuring', var.get(u'DestructuringTransformer').create(PyJs_Object_945_))
+ var.get(u'destructuring').callprop(u'init', var.get(u'pattern'), var.get(u'ref'))
+ var.get(u'node').get(u'body').put(u'body', var.get(u'nodes').callprop(u'concat', var.get(u'node').get(u'body').get(u'body')))
+ PyJs_CatchClause_944_._set_name(u'CatchClause')
+ @Js
+ def PyJs_AssignmentExpression_946_(path, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'file':file, u'AssignmentExpression':PyJs_AssignmentExpression_946_}, var)
+ var.registers([u'node', u'destructuring', u'file', u'path', u'scope', u'nodes', u'ref'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ if var.get(u't').callprop(u'isPattern', var.get(u'node').get(u'left')).neg():
+ return var.get('undefined')
+ var.put(u'nodes', Js([]))
+ PyJs_Object_947_ = Js({u'operator':var.get(u'node').get(u'operator'),u'file':var.get(u'file'),u'scope':var.get(u'scope'),u'nodes':var.get(u'nodes')})
+ var.put(u'destructuring', var.get(u'DestructuringTransformer').create(PyJs_Object_947_))
+ var.put(u'ref', PyJsComma(Js(0.0), Js(None)))
+ if (var.get(u'path').callprop(u'isCompletionRecord') or var.get(u'path').get(u'parentPath').callprop(u'isExpressionStatement').neg()):
+ var.put(u'ref', var.get(u'scope').callprop(u'generateUidIdentifierBasedOnNode', var.get(u'node').get(u'right'), Js(u'ref')))
+ var.get(u'nodes').callprop(u'push', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'ref'), var.get(u'node').get(u'right'))])))
+ if var.get(u't').callprop(u'isArrayExpression', var.get(u'node').get(u'right')):
+ var.get(u'destructuring').get(u'arrays').put(var.get(u'ref').get(u'name'), var.get(u'true'))
+ var.get(u'destructuring').callprop(u'init', var.get(u'node').get(u'left'), (var.get(u'ref') or var.get(u'node').get(u'right')))
+ if var.get(u'ref'):
+ var.get(u'nodes').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u'ref')))
+ var.get(u'path').callprop(u'replaceWithMultiple', var.get(u'nodes'))
+ PyJs_AssignmentExpression_946_._set_name(u'AssignmentExpression')
+ @Js
+ def PyJs_VariableDeclaration_948_(path, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'file':file, u'VariableDeclaration':PyJs_VariableDeclaration_948_}, var)
+ var.registers([u'node', u'_isArray5', u'patternId', u'_ref7', u'parent', u'i', u'pattern', u'_i5', u'tail', u'_iterator5', u'_node', u'declar', u'nodesOut', u'file', u'path', u'destructuring', u'scope', u'nodes', u'_tail$declarations'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'parent', var.get(u'path').get(u'parent'))
+ if var.get(u't').callprop(u'isForXStatement', var.get(u'parent')):
+ return var.get('undefined')
+ if (var.get(u'parent').neg() or var.get(u'path').get(u'container').neg()):
+ return var.get('undefined')
+ if var.get(u'variableDeclarationHasPattern')(var.get(u'node')).neg():
+ return var.get('undefined')
+ var.put(u'nodes', Js([]))
+ var.put(u'declar', PyJsComma(Js(0.0), Js(None)))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'_iterator5').get(u'length')):
+ break
+ var.put(u'_ref7', var.get(u'_iterator5').get((var.put(u'_i5',Js(var.get(u'_i5').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i5', var.get(u'_iterator5').callprop(u'next'))
+ if var.get(u'_i5').get(u'done'):
+ break
+ var.put(u'_ref7', var.get(u'_i5').get(u'value'))
+ var.put(u'_node', var.get(u'_ref7'))
+ var.put(u'tail', var.get(u'nodesOut').get((var.get(u'nodesOut').get(u'length')-Js(1.0))))
+ if (((var.get(u'tail') and var.get(u't').callprop(u'isVariableDeclaration', var.get(u'tail'))) and var.get(u't').callprop(u'isVariableDeclaration', var.get(u'_node'))) and PyJsStrictEq(var.get(u'tail').get(u'kind'),var.get(u'_node').get(u'kind'))):
+ pass
+ var.put(u'_tail$declarations', var.get(u'tail').get(u'declarations')).get(u'push').callprop(u'apply', var.get(u'_tail$declarations'), var.get(u'_node').get(u'declarations'))
+ else:
+ var.get(u'nodesOut').callprop(u'push', var.get(u'_node'))
+
+ if PyJsStrictEq(var.get(u'nodesOut').get(u'length'),Js(1.0)):
+ var.get(u'path').callprop(u'replaceWith', var.get(u'nodesOut').get(u'0'))
+ else:
+ var.get(u'path').callprop(u'replaceWithMultiple', var.get(u'nodesOut'))
+ PyJs_VariableDeclaration_948_._set_name(u'VariableDeclaration')
+ PyJs_Object_940_ = Js({u'ExportNamedDeclaration':PyJs_ExportNamedDeclaration_941_,u'ForXStatement':PyJs_ForXStatement_942_,u'CatchClause':PyJs_CatchClause_944_,u'AssignmentExpression':PyJs_AssignmentExpression_946_,u'VariableDeclaration':PyJs_VariableDeclaration_948_})
+ PyJs_Object_939_ = Js({u'visitor':PyJs_Object_940_})
+ return PyJs_Object_939_
+ PyJs_anonymous_921_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_921_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_920_._set_name(u'anonymous')
+PyJs_Object_951_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/helpers/classCallCheck':Js(110.0)})
+@Js
+def PyJs_anonymous_952_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_create', u'exports', u'_interopRequireWildcard', u'getName', u'_babelTypes', u'module', u'_create2', u't', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'require'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_959_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_959_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_getName_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'key')):
+ return var.get(u'key').get(u'name')
+ return var.get(u'key').get(u'value').callprop(u'toString')
+ PyJsHoisted_getName_.func_name = u'getName'
+ var.put(u'getName', PyJsHoisted_getName_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_958_ = Js({})
+ var.put(u'newObj', PyJs_Object_958_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_create', var.get(u'require')(Js(u'babel-runtime/core-js/object/create')))
+ var.put(u'_create2', var.get(u'_interopRequireDefault')(var.get(u'_create')))
+ @Js
+ def PyJs_anonymous_953_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_ObjectExpression_956_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'ObjectExpression':PyJs_ObjectExpression_956_, u'arguments':arguments}, var)
+ var.registers([u'node', u'alreadySeenGetters', u'_isArray', u'plainProps', u'name', u'alreadySeenSetters', u'alreadySeenData', u'prop', u'_i', u'path', u'isDuplicate', u'_iterator', u'_ref'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ @Js
+ def PyJs_anonymous_957_(prop, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'prop':prop}, var)
+ var.registers([u'prop'])
+ return (var.get(u't').callprop(u'isSpreadProperty', var.get(u'prop')).neg() and var.get(u'prop').get(u'computed').neg())
+ PyJs_anonymous_957_._set_name(u'anonymous')
+ var.put(u'plainProps', var.get(u'node').get(u'properties').callprop(u'filter', PyJs_anonymous_957_))
+ var.put(u'alreadySeenData', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.put(u'alreadySeenGetters', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.put(u'alreadySeenSetters', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'plainProps'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'prop', var.get(u'_ref'))
+ var.put(u'name', var.get(u'getName')(var.get(u'prop').get(u'key')))
+ var.put(u'isDuplicate', Js(False))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'prop').get(u'kind'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'get')):
+ SWITCHED = True
+ if (var.get(u'alreadySeenData').get(var.get(u'name')) or var.get(u'alreadySeenGetters').get(var.get(u'name'))):
+ var.put(u'isDuplicate', var.get(u'true'))
+ var.get(u'alreadySeenGetters').put(var.get(u'name'), var.get(u'true'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'set')):
+ SWITCHED = True
+ if (var.get(u'alreadySeenData').get(var.get(u'name')) or var.get(u'alreadySeenSetters').get(var.get(u'name'))):
+ var.put(u'isDuplicate', var.get(u'true'))
+ var.get(u'alreadySeenSetters').put(var.get(u'name'), var.get(u'true'))
+ break
+ if True:
+ SWITCHED = True
+ if ((var.get(u'alreadySeenData').get(var.get(u'name')) or var.get(u'alreadySeenGetters').get(var.get(u'name'))) or var.get(u'alreadySeenSetters').get(var.get(u'name'))):
+ var.put(u'isDuplicate', var.get(u'true'))
+ var.get(u'alreadySeenData').put(var.get(u'name'), var.get(u'true'))
+ SWITCHED = True
+ break
+ if var.get(u'isDuplicate'):
+ var.get(u'prop').put(u'computed', var.get(u'true'))
+ var.get(u'prop').put(u'key', var.get(u't').callprop(u'stringLiteral', var.get(u'name')))
+
+ PyJs_ObjectExpression_956_._set_name(u'ObjectExpression')
+ PyJs_Object_955_ = Js({u'ObjectExpression':PyJs_ObjectExpression_956_})
+ PyJs_Object_954_ = Js({u'visitor':PyJs_Object_955_})
+ return PyJs_Object_954_
+ PyJs_anonymous_953_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_953_)
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_952_._set_name(u'anonymous')
+PyJs_Object_960_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/core-js/object/create':Js(101.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_961_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_962_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'loose', u'messages', u'_ForOfStatementArray', u'buildForOfArray', u'buildForOfLoose', u't', u'template', u'_ref', u'buildForOf', u'spec'])
+ @Js
+ def PyJsHoisted_loose_(path, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'file':file}, var)
+ var.registers([u'node', u'iteratorKey', u'isArrayKey', u'declar', u'file', u'path', u'scope', u'id', u'loop', u'left'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'left', var.get(u'node').get(u'left'))
+ var.put(u'declar', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'id', PyJsComma(Js(0.0), Js(None)))
+ if ((var.get(u't').callprop(u'isIdentifier', var.get(u'left')) or var.get(u't').callprop(u'isPattern', var.get(u'left'))) or var.get(u't').callprop(u'isMemberExpression', var.get(u'left'))):
+ var.put(u'id', var.get(u'left'))
+ else:
+ if var.get(u't').callprop(u'isVariableDeclaration', var.get(u'left')):
+ var.put(u'id', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'ref')))
+ var.put(u'declar', var.get(u't').callprop(u'variableDeclaration', var.get(u'left').get(u'kind'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'left').get(u'declarations').get(u'0').get(u'id'), var.get(u'id'))])))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'file').callprop(u'buildCodeFrameError', var.get(u'left'), var.get(u'messages').callprop(u'get', Js(u'unknownForHead'), var.get(u'left').get(u'type'))))
+ raise PyJsTempException
+ var.put(u'iteratorKey', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'iterator')))
+ var.put(u'isArrayKey', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'isArray')))
+ PyJs_Object_969_ = Js({u'LOOP_OBJECT':var.get(u'iteratorKey'),u'IS_ARRAY':var.get(u'isArrayKey'),u'OBJECT':var.get(u'node').get(u'right'),u'INDEX':var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'i')),u'ID':var.get(u'id')})
+ var.put(u'loop', var.get(u'buildForOfLoose')(PyJs_Object_969_))
+ if var.get(u'declar').neg():
+ var.get(u'loop').get(u'body').get(u'body').callprop(u'shift')
+ PyJs_Object_970_ = Js({u'declar':var.get(u'declar'),u'node':var.get(u'loop'),u'loop':var.get(u'loop')})
+ return PyJs_Object_970_
+ PyJsHoisted_loose_.func_name = u'loose'
+ var.put(u'loose', PyJsHoisted_loose_)
+ @Js
+ def PyJsHoisted__ForOfStatementArray_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'node', u'iterationValue', u'right', u'uid', u'iterationKey', u'path', u'scope', u'nodes', u'loop', u'left'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'nodes', Js([]))
+ var.put(u'right', var.get(u'node').get(u'right'))
+ if (var.get(u't').callprop(u'isIdentifier', var.get(u'right')).neg() or var.get(u'scope').callprop(u'hasBinding', var.get(u'right').get(u'name')).neg()):
+ var.put(u'uid', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'arr')))
+ var.get(u'nodes').callprop(u'push', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'uid'), var.get(u'right'))])))
+ var.put(u'right', var.get(u'uid'))
+ var.put(u'iterationKey', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'i')))
+ PyJs_Object_965_ = Js({u'BODY':var.get(u'node').get(u'body'),u'KEY':var.get(u'iterationKey'),u'ARR':var.get(u'right')})
+ var.put(u'loop', var.get(u'buildForOfArray')(PyJs_Object_965_))
+ var.get(u't').callprop(u'inherits', var.get(u'loop'), var.get(u'node'))
+ var.get(u't').callprop(u'ensureBlock', var.get(u'loop'))
+ var.put(u'iterationValue', var.get(u't').callprop(u'memberExpression', var.get(u'right'), var.get(u'iterationKey'), var.get(u'true')))
+ var.put(u'left', var.get(u'node').get(u'left'))
+ if var.get(u't').callprop(u'isVariableDeclaration', var.get(u'left')):
+ var.get(u'left').get(u'declarations').get(u'0').put(u'init', var.get(u'iterationValue'))
+ var.get(u'loop').get(u'body').get(u'body').callprop(u'unshift', var.get(u'left'))
+ else:
+ var.get(u'loop').get(u'body').get(u'body').callprop(u'unshift', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'left'), var.get(u'iterationValue'))))
+ if var.get(u'path').get(u'parentPath').callprop(u'isLabeledStatement'):
+ var.put(u'loop', var.get(u't').callprop(u'labeledStatement', var.get(u'path').get(u'parentPath').get(u'node').get(u'label'), var.get(u'loop')))
+ var.get(u'nodes').callprop(u'push', var.get(u'loop'))
+ return var.get(u'nodes')
+ PyJsHoisted__ForOfStatementArray_.func_name = u'_ForOfStatementArray'
+ var.put(u'_ForOfStatementArray', PyJsHoisted__ForOfStatementArray_)
+ @Js
+ def PyJsHoisted_spec_(path, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'file':file}, var)
+ var.registers([u'node', u'stepValue', u'isLabeledParent', u'stepKey', u'file', u'parent', u'tryBody', u'declar', u'template', u'path', u'scope', u'iteratorKey', u'loop', u'left'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'parent', var.get(u'path').get(u'parent'))
+ var.put(u'left', var.get(u'node').get(u'left'))
+ var.put(u'declar', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'stepKey', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'step')))
+ var.put(u'stepValue', var.get(u't').callprop(u'memberExpression', var.get(u'stepKey'), var.get(u't').callprop(u'identifier', Js(u'value'))))
+ if ((var.get(u't').callprop(u'isIdentifier', var.get(u'left')) or var.get(u't').callprop(u'isPattern', var.get(u'left'))) or var.get(u't').callprop(u'isMemberExpression', var.get(u'left'))):
+ var.put(u'declar', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'left'), var.get(u'stepValue'))))
+ else:
+ if var.get(u't').callprop(u'isVariableDeclaration', var.get(u'left')):
+ var.put(u'declar', var.get(u't').callprop(u'variableDeclaration', var.get(u'left').get(u'kind'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'left').get(u'declarations').get(u'0').get(u'id'), var.get(u'stepValue'))])))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'file').callprop(u'buildCodeFrameError', var.get(u'left'), var.get(u'messages').callprop(u'get', Js(u'unknownForHead'), var.get(u'left').get(u'type'))))
+ raise PyJsTempException
+ var.put(u'iteratorKey', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'iterator')))
+ PyJs_Object_971_ = Js({u'ITERATOR_HAD_ERROR_KEY':var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'didIteratorError')),u'ITERATOR_COMPLETION':var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'iteratorNormalCompletion')),u'ITERATOR_ERROR_KEY':var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'iteratorError')),u'ITERATOR_KEY':var.get(u'iteratorKey'),u'STEP_KEY':var.get(u'stepKey'),u'OBJECT':var.get(u'node').get(u'right'),u'BODY':var.get(u"null")})
+ var.put(u'template', var.get(u'buildForOf')(PyJs_Object_971_))
+ var.put(u'isLabeledParent', var.get(u't').callprop(u'isLabeledStatement', var.get(u'parent')))
+ var.put(u'tryBody', var.get(u'template').get(u'3').get(u'block').get(u'body'))
+ var.put(u'loop', var.get(u'tryBody').get(u'0'))
+ if var.get(u'isLabeledParent'):
+ var.get(u'tryBody').put(u'0', var.get(u't').callprop(u'labeledStatement', var.get(u'parent').get(u'label'), var.get(u'loop')))
+ PyJs_Object_972_ = Js({u'replaceParent':var.get(u'isLabeledParent'),u'declar':var.get(u'declar'),u'loop':var.get(u'loop'),u'node':var.get(u'template')})
+ return PyJs_Object_972_
+ PyJsHoisted_spec_.func_name = u'spec'
+ var.put(u'spec', PyJsHoisted_spec_)
+ var.put(u'messages', var.get(u'_ref').get(u'messages'))
+ var.put(u'template', var.get(u'_ref').get(u'template'))
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ var.put(u'buildForOfArray', var.get(u'template')(Js(u'\n for (var KEY = 0; KEY < ARR.length; KEY++) BODY;\n ')))
+ def PyJs_LONG_963_(var=var):
+ return var.get(u'template')(Js(u'\n for (var LOOP_OBJECT = OBJECT,\n IS_ARRAY = Array.isArray(LOOP_OBJECT),\n INDEX = 0,\n LOOP_OBJECT = IS_ARRAY ? LOOP_OBJECT : LOOP_OBJECT[Symbol.iterator]();;) {\n var ID;\n if (IS_ARRAY) {\n if (INDEX >= LOOP_OBJECT.length) break;\n ID = LOOP_OBJECT[INDEX++];\n } else {\n INDEX = LOOP_OBJECT.next();\n if (INDEX.done) break;\n ID = INDEX.value;\n }\n }\n '))
+ var.put(u'buildForOfLoose', PyJs_LONG_963_())
+ def PyJs_LONG_964_(var=var):
+ return var.get(u'template')(Js(u'\n var ITERATOR_COMPLETION = true;\n var ITERATOR_HAD_ERROR_KEY = false;\n var ITERATOR_ERROR_KEY = undefined;\n try {\n for (var ITERATOR_KEY = OBJECT[Symbol.iterator](), STEP_KEY; !(ITERATOR_COMPLETION = (STEP_KEY = ITERATOR_KEY.next()).done); ITERATOR_COMPLETION = true) {\n }\n } catch (err) {\n ITERATOR_HAD_ERROR_KEY = true;\n ITERATOR_ERROR_KEY = err;\n } finally {\n try {\n if (!ITERATOR_COMPLETION && ITERATOR_KEY.return) {\n ITERATOR_KEY.return();\n }\n } finally {\n if (ITERATOR_HAD_ERROR_KEY) {\n throw ITERATOR_ERROR_KEY;\n }\n }\n }\n '))
+ var.put(u'buildForOf', PyJs_LONG_964_())
+ pass
+ @Js
+ def PyJs_ForOfStatement_968_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'ForOfStatement':PyJs_ForOfStatement_968_}, var)
+ var.registers([u'node', u'callback', u'state', u'declar', u'build', u'loop', u'path', u'block'])
+ if var.get(u'path').callprop(u'get', Js(u'right')).callprop(u'isArrayExpression'):
+ if var.get(u'path').get(u'parentPath').callprop(u'isLabeledStatement'):
+ return var.get(u'path').get(u'parentPath').callprop(u'replaceWithMultiple', var.get(u'_ForOfStatementArray')(var.get(u'path')))
+ else:
+ return var.get(u'path').callprop(u'replaceWithMultiple', var.get(u'_ForOfStatementArray')(var.get(u'path')))
+ var.put(u'callback', var.get(u'spec'))
+ if var.get(u'state').get(u'opts').get(u'loose'):
+ var.put(u'callback', var.get(u'loose'))
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'build', var.get(u'callback')(var.get(u'path'), var.get(u'state')))
+ var.put(u'declar', var.get(u'build').get(u'declar'))
+ var.put(u'loop', var.get(u'build').get(u'loop'))
+ var.put(u'block', var.get(u'loop').get(u'body'))
+ var.get(u'path').callprop(u'ensureBlock')
+ if var.get(u'declar'):
+ var.get(u'block').get(u'body').callprop(u'push', var.get(u'declar'))
+ var.get(u'block').put(u'body', var.get(u'block').get(u'body').callprop(u'concat', var.get(u'node').get(u'body').get(u'body')))
+ var.get(u't').callprop(u'inherits', var.get(u'loop'), var.get(u'node'))
+ var.get(u't').callprop(u'inherits', var.get(u'loop').get(u'body'), var.get(u'node').get(u'body'))
+ if var.get(u'build').get(u'replaceParent'):
+ var.get(u'path').get(u'parentPath').callprop(u'replaceWithMultiple', var.get(u'build').get(u'node'))
+ var.get(u'path').callprop(u'remove')
+ else:
+ var.get(u'path').callprop(u'replaceWithMultiple', var.get(u'build').get(u'node'))
+ PyJs_ForOfStatement_968_._set_name(u'ForOfStatement')
+ PyJs_Object_967_ = Js({u'ForOfStatement':PyJs_ForOfStatement_968_})
+ PyJs_Object_966_ = Js({u'visitor':PyJs_Object_967_})
+ return PyJs_Object_966_
+ pass
+ pass
+ PyJs_anonymous_962_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_962_)
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_961_._set_name(u'anonymous')
+PyJs_Object_973_ = Js({})
+@Js
+def PyJs_anonymous_974_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'_babelHelperFunctionName', u'module', u'_babelHelperFunctionName2', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_981_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_981_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_975_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_exit_979_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'exit':PyJs_exit_979_, u'arguments':arguments}, var)
+ var.registers([u'path', u'replacement'])
+ if (PyJsStrictNeq(var.get(u'path').get(u'key'),Js(u'value')) and var.get(u'path').get(u'parentPath').callprop(u'isObjectProperty').neg()):
+ var.put(u'replacement', PyJsComma(Js(0.0),var.get(u'_babelHelperFunctionName2').get(u'default'))(var.get(u'path')))
+ if var.get(u'replacement'):
+ var.get(u'path').callprop(u'replaceWith', var.get(u'replacement'))
+ PyJs_exit_979_._set_name(u'exit')
+ PyJs_Object_978_ = Js({u'exit':PyJs_exit_979_})
+ @Js
+ def PyJs_ObjectProperty_980_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'ObjectProperty':PyJs_ObjectProperty_980_, u'arguments':arguments}, var)
+ var.registers([u'newNode', u'value', u'path'])
+ var.put(u'value', var.get(u'path').callprop(u'get', Js(u'value')))
+ if var.get(u'value').callprop(u'isFunction'):
+ var.put(u'newNode', PyJsComma(Js(0.0),var.get(u'_babelHelperFunctionName2').get(u'default'))(var.get(u'value')))
+ if var.get(u'newNode'):
+ var.get(u'value').callprop(u'replaceWith', var.get(u'newNode'))
+ PyJs_ObjectProperty_980_._set_name(u'ObjectProperty')
+ PyJs_Object_977_ = Js({u'ArrowFunctionExpression|FunctionExpression':PyJs_Object_978_,u'ObjectProperty':PyJs_ObjectProperty_980_})
+ PyJs_Object_976_ = Js({u'visitor':PyJs_Object_977_})
+ return PyJs_Object_976_
+ PyJs_anonymous_975_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_975_)
+ var.put(u'_babelHelperFunctionName', var.get(u'require')(Js(u'babel-helper-function-name')))
+ var.put(u'_babelHelperFunctionName2', var.get(u'_interopRequireDefault')(var.get(u'_babelHelperFunctionName')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_974_._set_name(u'anonymous')
+PyJs_Object_982_ = Js({u'babel-helper-function-name':Js(49.0)})
+@Js
+def PyJs_anonymous_983_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_984_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_NumericLiteral_987_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'NumericLiteral':PyJs_NumericLiteral_987_, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref'])
+ var.put(u'node', var.get(u'_ref').get(u'node'))
+ if (var.get(u'node').get(u'extra') and JsRegExp(u'/^0[ob]/i').callprop(u'test', var.get(u'node').get(u'extra').get(u'raw'))):
+ var.get(u'node').put(u'extra', var.get(u'undefined'))
+ PyJs_NumericLiteral_987_._set_name(u'NumericLiteral')
+ @Js
+ def PyJs_StringLiteral_988_(_ref2, this, arguments, var=var):
+ var = Scope({u'this':this, u'StringLiteral':PyJs_StringLiteral_988_, u'_ref2':_ref2, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref2'])
+ var.put(u'node', var.get(u'_ref2').get(u'node'))
+ if (var.get(u'node').get(u'extra') and JsRegExp(u'/\\\\[u]/gi').callprop(u'test', var.get(u'node').get(u'extra').get(u'raw'))):
+ var.get(u'node').put(u'extra', var.get(u'undefined'))
+ PyJs_StringLiteral_988_._set_name(u'StringLiteral')
+ PyJs_Object_986_ = Js({u'NumericLiteral':PyJs_NumericLiteral_987_,u'StringLiteral':PyJs_StringLiteral_988_})
+ PyJs_Object_985_ = Js({u'visitor':PyJs_Object_986_})
+ return PyJs_Object_985_
+ PyJs_anonymous_984_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_984_)
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_983_._set_name(u'anonymous')
+PyJs_Object_989_ = Js({})
+@Js
+def PyJs_anonymous_990_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_create', u'buildDefine', u'exports', u'require', u'_babelTemplate', u'module', u'_create2', u'_babelTemplate2', u'buildFactory', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1007_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1007_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_create', var.get(u'require')(Js(u'babel-runtime/core-js/object/create')))
+ var.put(u'_create2', var.get(u'_interopRequireDefault')(var.get(u'_create')))
+ @Js
+ def PyJs_anonymous_991_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'isValidRequireCall', u'amdVisitor', u'_ref', u't'])
+ @Js
+ def PyJsHoisted_isValidRequireCall_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path', u'args', u'arg'])
+ if var.get(u'path').callprop(u'isCallExpression').neg():
+ return Js(False)
+ PyJs_Object_992_ = Js({u'name':Js(u'require')})
+ if var.get(u'path').callprop(u'get', Js(u'callee')).callprop(u'isIdentifier', PyJs_Object_992_).neg():
+ return Js(False)
+ if var.get(u'path').get(u'scope').callprop(u'getBinding', Js(u'require')):
+ return Js(False)
+ var.put(u'args', var.get(u'path').callprop(u'get', Js(u'arguments')))
+ if PyJsStrictNeq(var.get(u'args').get(u'length'),Js(1.0)):
+ return Js(False)
+ var.put(u'arg', var.get(u'args').get(u'0'))
+ if var.get(u'arg').callprop(u'isStringLiteral').neg():
+ return Js(False)
+ return var.get(u'true')
+ PyJsHoisted_isValidRequireCall_.func_name = u'isValidRequireCall'
+ var.put(u'isValidRequireCall', PyJsHoisted_isValidRequireCall_)
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ pass
+ @Js
+ def PyJs_ReferencedIdentifier_994_(_ref2, this, arguments, var=var):
+ var = Scope({u'this':this, u'ReferencedIdentifier':PyJs_ReferencedIdentifier_994_, u'_ref2':_ref2, u'arguments':arguments}, var)
+ var.registers([u'node', u'scope', u'_ref2'])
+ var.put(u'node', var.get(u'_ref2').get(u'node'))
+ var.put(u'scope', var.get(u'_ref2').get(u'scope'))
+ if (PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'exports')) and var.get(u'scope').callprop(u'getBinding', Js(u'exports')).neg()):
+ var.get(u"this").put(u'hasExports', var.get(u'true'))
+ if (PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'module')) and var.get(u'scope').callprop(u'getBinding', Js(u'module')).neg()):
+ var.get(u"this").put(u'hasModule', var.get(u'true'))
+ PyJs_ReferencedIdentifier_994_._set_name(u'ReferencedIdentifier')
+ @Js
+ def PyJs_CallExpression_995_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'CallExpression':PyJs_CallExpression_995_}, var)
+ var.registers([u'path'])
+ if var.get(u'isValidRequireCall')(var.get(u'path')).neg():
+ return var.get('undefined')
+ var.get(u"this").get(u'bareSources').callprop(u'push', var.get(u'path').get(u'node').get(u'arguments').get(u'0'))
+ var.get(u'path').callprop(u'remove')
+ PyJs_CallExpression_995_._set_name(u'CallExpression')
+ @Js
+ def PyJs_VariableDeclarator_996_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'VariableDeclarator':PyJs_VariableDeclarator_996_}, var)
+ var.registers([u'source', u'init', u'id', u'path'])
+ var.put(u'id', var.get(u'path').callprop(u'get', Js(u'id')))
+ if var.get(u'id').callprop(u'isIdentifier').neg():
+ return var.get('undefined')
+ var.put(u'init', var.get(u'path').callprop(u'get', Js(u'init')))
+ if var.get(u'isValidRequireCall')(var.get(u'init')).neg():
+ return var.get('undefined')
+ var.put(u'source', var.get(u'init').get(u'node').get(u'arguments').get(u'0'))
+ var.get(u"this").get(u'sourceNames').put(var.get(u'source').get(u'value'), var.get(u'true'))
+ var.get(u"this").get(u'sources').callprop(u'push', Js([var.get(u'id').get(u'node'), var.get(u'source')]))
+ var.get(u'path').callprop(u'remove')
+ PyJs_VariableDeclarator_996_._set_name(u'VariableDeclarator')
+ PyJs_Object_993_ = Js({u'ReferencedIdentifier':PyJs_ReferencedIdentifier_994_,u'CallExpression':PyJs_CallExpression_995_,u'VariableDeclarator':PyJs_VariableDeclarator_996_})
+ var.put(u'amdVisitor', PyJs_Object_993_)
+ @Js
+ def PyJs_pre_998_(this, arguments, var=var):
+ var = Scope({u'this':this, u'pre':PyJs_pre_998_, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").put(u'sources', Js([]))
+ var.get(u"this").put(u'sourceNames', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.get(u"this").put(u'bareSources', Js([]))
+ var.get(u"this").put(u'hasExports', Js(False))
+ var.get(u"this").put(u'hasModule', Js(False))
+ PyJs_pre_998_._set_name(u'pre')
+ @Js
+ def PyJs_exit_1001_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'exit':PyJs_exit_1001_, u'arguments':arguments}, var)
+ var.registers([u'node', u'moduleName', u'_this', u'factory', u'sources', u'params', u'path'])
+ var.put(u'_this', var.get(u"this"))
+ if var.get(u"this").get(u'ran'):
+ return var.get('undefined')
+ var.get(u"this").put(u'ran', var.get(u'true'))
+ var.get(u'path').callprop(u'traverse', var.get(u'amdVisitor'), var.get(u"this"))
+ @Js
+ def PyJs_anonymous_1002_(source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'arguments':arguments}, var)
+ var.registers([u'source'])
+ return var.get(u'source').get(u'0')
+ PyJs_anonymous_1002_._set_name(u'anonymous')
+ var.put(u'params', var.get(u"this").get(u'sources').callprop(u'map', PyJs_anonymous_1002_))
+ @Js
+ def PyJs_anonymous_1003_(source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'arguments':arguments}, var)
+ var.registers([u'source'])
+ return var.get(u'source').get(u'1')
+ PyJs_anonymous_1003_._set_name(u'anonymous')
+ var.put(u'sources', var.get(u"this").get(u'sources').callprop(u'map', PyJs_anonymous_1003_))
+ @Js
+ def PyJs_anonymous_1004_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ return var.get(u'_this').get(u'sourceNames').get(var.get(u'str').get(u'value')).neg()
+ PyJs_anonymous_1004_._set_name(u'anonymous')
+ var.put(u'sources', var.get(u'sources').callprop(u'concat', var.get(u"this").get(u'bareSources').callprop(u'filter', PyJs_anonymous_1004_)))
+ var.put(u'moduleName', var.get(u"this").callprop(u'getModuleName'))
+ if var.get(u'moduleName'):
+ var.put(u'moduleName', var.get(u't').callprop(u'stringLiteral', var.get(u'moduleName')))
+ if var.get(u"this").get(u'hasExports'):
+ var.get(u'sources').callprop(u'unshift', var.get(u't').callprop(u'stringLiteral', Js(u'exports')))
+ var.get(u'params').callprop(u'unshift', var.get(u't').callprop(u'identifier', Js(u'exports')))
+ if var.get(u"this").get(u'hasModule'):
+ var.get(u'sources').callprop(u'unshift', var.get(u't').callprop(u'stringLiteral', Js(u'module')))
+ var.get(u'params').callprop(u'unshift', var.get(u't').callprop(u'identifier', Js(u'module')))
+ var.put(u'node', var.get(u'path').get(u'node'))
+ PyJs_Object_1005_ = Js({u'PARAMS':var.get(u'params'),u'BODY':var.get(u'node').get(u'body')})
+ var.put(u'factory', var.get(u'buildFactory')(PyJs_Object_1005_))
+ var.get(u'factory').get(u'expression').get(u'body').put(u'directives', var.get(u'node').get(u'directives'))
+ var.get(u'node').put(u'directives', Js([]))
+ PyJs_Object_1006_ = Js({u'MODULE_NAME':var.get(u'moduleName'),u'SOURCES':var.get(u'sources'),u'FACTORY':var.get(u'factory')})
+ var.get(u'node').put(u'body', Js([var.get(u'buildDefine')(PyJs_Object_1006_)]))
+ PyJs_exit_1001_._set_name(u'exit')
+ PyJs_Object_1000_ = Js({u'exit':PyJs_exit_1001_})
+ PyJs_Object_999_ = Js({u'Program':PyJs_Object_1000_})
+ PyJs_Object_997_ = Js({u'inherits':var.get(u'require')(Js(u'babel-plugin-transform-es2015-modules-commonjs')),u'pre':PyJs_pre_998_,u'visitor':PyJs_Object_999_})
+ return PyJs_Object_997_
+ PyJs_anonymous_991_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_991_)
+ var.put(u'_babelTemplate', var.get(u'require')(Js(u'babel-template')))
+ var.put(u'_babelTemplate2', var.get(u'_interopRequireDefault')(var.get(u'_babelTemplate')))
+ pass
+ var.put(u'buildDefine', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n define(MODULE_NAME, [SOURCES], FACTORY);\n')))
+ var.put(u'buildFactory', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (PARAMS) {\n BODY;\n })\n')))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_990_._set_name(u'anonymous')
+PyJs_Object_1008_ = Js({u'babel-plugin-transform-es2015-modules-commonjs':Js(73.0),u'babel-runtime/core-js/object/create':Js(101.0),u'babel-template':Js(221.0)})
+@Js
+def PyJs_anonymous_1009_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_symbol2', u'_babelTemplate', u'module', u'buildLooseExportsModuleDeclaration', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'buildExportAll', u'_create2', u'_keys', u'buildExportsAssignment', u'THIS_BREAK_KEYS', u'_create', u'exports', u'_interopRequireWildcard', u'_babelTypes', u'buildRequire', u'buildExportsModuleDeclaration', u'_symbol', u'_path2', u'buildExportsFrom', u'_keys2', u'_babelTemplate2', u't', u'require'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1028_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1028_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1027_ = Js({})
+ var.put(u'newObj', PyJs_Object_1027_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_keys', var.get(u'require')(Js(u'babel-runtime/core-js/object/keys')))
+ var.put(u'_keys2', var.get(u'_interopRequireDefault')(var.get(u'_keys')))
+ var.put(u'_create', var.get(u'require')(Js(u'babel-runtime/core-js/object/create')))
+ var.put(u'_create2', var.get(u'_interopRequireDefault')(var.get(u'_create')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_symbol', var.get(u'require')(Js(u'babel-runtime/core-js/symbol')))
+ var.put(u'_symbol2', var.get(u'_interopRequireDefault')(var.get(u'_symbol')))
+ @Js
+ def PyJs_anonymous_1010_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'reassignmentVisitor', u'REASSIGN_REMAP_SKIP'])
+ var.put(u'REASSIGN_REMAP_SKIP', PyJsComma(Js(0.0),var.get(u'_symbol2').get(u'default'))())
+ @Js
+ def PyJs_ReferencedIdentifier_1012_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'ReferencedIdentifier':PyJs_ReferencedIdentifier_1012_, u'arguments':arguments}, var)
+ var.registers([u'property', u'remap', u'object', u'name', u'path'])
+ var.put(u'name', var.get(u'path').get(u'node').get(u'name'))
+ var.put(u'remap', var.get(u"this").get(u'remaps').get(var.get(u'name')))
+ if var.get(u'remap').neg():
+ return var.get('undefined')
+ if PyJsStrictNeq(var.get(u"this").get(u'scope').callprop(u'getBinding', var.get(u'name')),var.get(u'path').get(u'scope').callprop(u'getBinding', var.get(u'name'))):
+ return var.get('undefined')
+ PyJs_Object_1013_ = Js({u'callee':var.get(u'path').get(u'node')})
+ if var.get(u'path').get(u'parentPath').callprop(u'isCallExpression', PyJs_Object_1013_):
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'sequenceExpression', Js([var.get(u't').callprop(u'numericLiteral', Js(0.0)), var.get(u'remap')])))
+ else:
+ if (var.get(u'path').callprop(u'isJSXIdentifier') and var.get(u't').callprop(u'isMemberExpression', var.get(u'remap'))):
+ var.put(u'object', var.get(u'remap').get(u'object'))
+ var.put(u'property', var.get(u'remap').get(u'property'))
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'JSXMemberExpression', var.get(u't').callprop(u'JSXIdentifier', var.get(u'object').get(u'name')), var.get(u't').callprop(u'JSXIdentifier', var.get(u'property').get(u'name'))))
+ else:
+ var.get(u'path').callprop(u'replaceWith', var.get(u'remap'))
+ var.get(u"this").callprop(u'requeueInParent', var.get(u'path'))
+ PyJs_ReferencedIdentifier_1012_._set_name(u'ReferencedIdentifier')
+ @Js
+ def PyJs_AssignmentExpression_1014_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'AssignmentExpression':PyJs_AssignmentExpression_1014_}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'name', u'exports', u'reid', u'_i', u'path', u'_ref', u'left'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u'node').get(var.get(u'REASSIGN_REMAP_SKIP')):
+ return var.get('undefined')
+ var.put(u'left', var.get(u'path').callprop(u'get', Js(u'left')))
+ if var.get(u'left').callprop(u'isIdentifier').neg():
+ return var.get('undefined')
+ var.put(u'name', var.get(u'left').get(u'node').get(u'name'))
+ var.put(u'exports', var.get(u"this").get(u'exports').get(var.get(u'name')))
+ if var.get(u'exports').neg():
+ return var.get('undefined')
+ if PyJsStrictNeq(var.get(u"this").get(u'scope').callprop(u'getBinding', var.get(u'name')),var.get(u'path').get(u'scope').callprop(u'getBinding', var.get(u'name'))):
+ return var.get('undefined')
+ var.get(u'node').put(var.get(u'REASSIGN_REMAP_SKIP'), var.get(u'true'))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'exports'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'reid', var.get(u'_ref'))
+ var.put(u'node', var.get(u'buildExportsAssignment')(var.get(u'reid'), var.get(u'node')).get(u'expression'))
+
+ var.get(u'path').callprop(u'replaceWith', var.get(u'node'))
+ var.get(u"this").callprop(u'requeueInParent', var.get(u'path'))
+ PyJs_AssignmentExpression_1014_._set_name(u'AssignmentExpression')
+ @Js
+ def PyJs_UpdateExpression_1015_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'UpdateExpression':PyJs_UpdateExpression_1015_}, var)
+ var.registers([u'node', u'exports', u'name', u'arg', u'operator', u'path', u'nodes'])
+ var.put(u'arg', var.get(u'path').callprop(u'get', Js(u'argument')))
+ if var.get(u'arg').callprop(u'isIdentifier').neg():
+ return var.get('undefined')
+ var.put(u'name', var.get(u'arg').get(u'node').get(u'name'))
+ var.put(u'exports', var.get(u"this").get(u'exports').get(var.get(u'name')))
+ if var.get(u'exports').neg():
+ return var.get('undefined')
+ if PyJsStrictNeq(var.get(u"this").get(u'scope').callprop(u'getBinding', var.get(u'name')),var.get(u'path').get(u'scope').callprop(u'getBinding', var.get(u'name'))):
+ return var.get('undefined')
+ var.put(u'node', var.get(u't').callprop(u'assignmentExpression', (var.get(u'path').get(u'node').get(u'operator').get(u'0')+Js(u'=')), var.get(u'arg').get(u'node'), var.get(u't').callprop(u'numericLiteral', Js(1.0))))
+ if ((var.get(u'path').get(u'parentPath').callprop(u'isExpressionStatement') and var.get(u'path').callprop(u'isCompletionRecord').neg()) or var.get(u'path').get(u'node').get(u'prefix')):
+ var.get(u'path').callprop(u'replaceWith', var.get(u'node'))
+ var.get(u"this").callprop(u'requeueInParent', var.get(u'path'))
+ return var.get('undefined')
+ var.put(u'nodes', Js([]))
+ var.get(u'nodes').callprop(u'push', var.get(u'node'))
+ var.put(u'operator', PyJsComma(Js(0.0), Js(None)))
+ if PyJsStrictEq(var.get(u'path').get(u'node').get(u'operator'),Js(u'--')):
+ var.put(u'operator', Js(u'+'))
+ else:
+ var.put(u'operator', Js(u'-'))
+ var.get(u'nodes').callprop(u'push', var.get(u't').callprop(u'binaryExpression', var.get(u'operator'), var.get(u'arg').get(u'node'), var.get(u't').callprop(u'numericLiteral', Js(1.0))))
+ var.get(u'path').callprop(u'replaceWithMultiple', var.get(u't').callprop(u'sequenceExpression', var.get(u'nodes')))
+ PyJs_UpdateExpression_1015_._set_name(u'UpdateExpression')
+ PyJs_Object_1011_ = Js({u'ReferencedIdentifier':PyJs_ReferencedIdentifier_1012_,u'AssignmentExpression':PyJs_AssignmentExpression_1014_,u'UpdateExpression':PyJs_UpdateExpression_1015_})
+ var.put(u'reassignmentVisitor', PyJs_Object_1011_)
+ @Js
+ def PyJs_ThisExpression_1018_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'ThisExpression':PyJs_ThisExpression_1018_, u'arguments':arguments}, var)
+ var.registers([u'path', u'state'])
+ if var.get(u"this").get(u'ranCommonJS'):
+ return var.get('undefined')
+ @Js
+ def PyJs_anonymous_1019_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return (var.get(u'path').callprop(u'is', Js(u'shadow')).neg() and (var.get(u'THIS_BREAK_KEYS').callprop(u'indexOf', var.get(u'path').get(u'type'))>=Js(0.0)))
+ PyJs_anonymous_1019_._set_name(u'anonymous')
+ if (PyJsStrictNeq(var.get(u'state').get(u'opts').get(u'allowTopLevelThis'),var.get(u'true')) and var.get(u'path').callprop(u'findParent', PyJs_anonymous_1019_).neg()):
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'identifier', Js(u'undefined')))
+ PyJs_ThisExpression_1018_._set_name(u'ThisExpression')
+ @Js
+ def PyJs_exit_1021_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'exit':PyJs_exit_1021_, u'arguments':arguments}, var)
+ var.registers([u'decl', u'addRequire', u'_isArray5', u'_isArray4', u'_isArray3', u'_isArray2', u'_isArray6', u'imports', u'_specifiers', u'ids', u'_specifier4', u'_isArray7', u'hoistedExportsNode', u'_declaration', u'_specifier2', u'_specifier3', u'specifier', u'importsEntry', u'_specifier', u'_importsEntry$specifi', u'uid', u'_iterator6', u'i', u'_source', u'_i7', u'_i6', u'_i5', u'_i4', u'hasImports', u'_i2', u'id', u'strict', u'init', u'exportNode', u'scope', u'nodes', u'defNode', u'ref', u'addTo', u'body', u'exports', u'node', u'_i3', u'requireNode', u'nonHoistedExportNames', u'_varDecl', u'varDecl', u'declarators', u'topNodes', u'buildTemplate', u'key', u'declaration', u'_id4', u'path', u'name', u'_id2', u'_id3', u'remaps', u'specifiers', u'_id', u'_imports$source', u'hasExports', u'_defNode', u'_ref6', u'_ref5', u'_ref4', u'_ref3', u'_ref2', u'maxBlockHoist', u'_ref7', u'declar', u'source', u'wildcard', u'target', u'_iterator5', u'_iterator4', u'_iterator7', u'_iterator2', u'requires', u'_iterator3', u'_path'])
+ @Js
+ def PyJsHoisted_addRequire_(source, blockHoist, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'blockHoist':blockHoist, u'arguments':arguments}, var)
+ var.registers([u'cached', u'varDecl', u'blockHoist', u'ref', u'source'])
+ var.put(u'cached', var.get(u'requires').get(var.get(u'source')))
+ if var.get(u'cached'):
+ return var.get(u'cached')
+ var.put(u'ref', var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', PyJsComma(Js(0.0),var.get(u'_path2').get(u'basename'))(var.get(u'source'), PyJsComma(Js(0.0),var.get(u'_path2').get(u'extname'))(var.get(u'source')))))
+ var.put(u'varDecl', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'ref'), var.get(u'buildRequire')(var.get(u't').callprop(u'stringLiteral', var.get(u'source'))).get(u'expression'))])))
+ if var.get(u'imports').get(var.get(u'source')):
+ var.get(u'varDecl').put(u'loc', var.get(u'imports').get(var.get(u'source')).get(u'loc'))
+ if (PyJsStrictEq(var.get(u'blockHoist',throw=False).typeof(),Js(u'number')) and (var.get(u'blockHoist')>Js(0.0))):
+ var.get(u'varDecl').put(u'_blockHoist', var.get(u'blockHoist'))
+ var.get(u'topNodes').callprop(u'push', var.get(u'varDecl'))
+ return var.get(u'requires').put(var.get(u'source'), var.get(u'ref'))
+ PyJsHoisted_addRequire_.func_name = u'addRequire'
+ var.put(u'addRequire', PyJsHoisted_addRequire_)
+ @Js
+ def PyJsHoisted_addTo_(obj, key, arr, this, arguments, var=var):
+ var = Scope({u'this':this, u'arr':arr, u'obj':obj, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'arr', u'obj', u'key', u'existing'])
+ var.put(u'existing', (var.get(u'obj').get(var.get(u'key')) or Js([])))
+ var.get(u'obj').put(var.get(u'key'), var.get(u'existing').callprop(u'concat', var.get(u'arr')))
+ PyJsHoisted_addTo_.func_name = u'addTo'
+ var.put(u'addTo', PyJsHoisted_addTo_)
+ var.get(u"this").put(u'ranCommonJS', var.get(u'true'))
+ var.put(u'strict', var.get(u"this").get(u'opts').get(u'strict').neg().neg())
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.get(u'scope').callprop(u'rename', Js(u'module'))
+ var.get(u'scope').callprop(u'rename', Js(u'exports'))
+ var.get(u'scope').callprop(u'rename', Js(u'require'))
+ var.put(u'hasExports', Js(False))
+ var.put(u'hasImports', Js(False))
+ var.put(u'body', var.get(u'path').callprop(u'get', Js(u'body')))
+ var.put(u'imports', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.put(u'exports', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.put(u'nonHoistedExportNames', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.put(u'topNodes', Js([]))
+ var.put(u'remaps', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.put(u'requires', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ pass
+ pass
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'body'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'_path', var.get(u'_ref2'))
+ if var.get(u'_path').callprop(u'isExportDeclaration'):
+ var.put(u'hasExports', var.get(u'true'))
+ var.put(u'specifiers', Js([]).callprop(u'concat', var.get(u'_path').callprop(u'get', Js(u'declaration')), var.get(u'_path').callprop(u'get', Js(u'specifiers'))))
+ #for JS loop
+ var.put(u'_iterator4', var.get(u'specifiers'))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator4'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i4').get(u'value'))
+ var.put(u'_specifier2', var.get(u'_ref4'))
+ var.put(u'ids', var.get(u'_specifier2').callprop(u'getBindingIdentifiers'))
+ if var.get(u'ids').get(u'__esModule'):
+ PyJsTempException = JsToPyException(var.get(u'_specifier2').callprop(u'buildCodeFrameError', Js(u'Illegal export "__esModule"')))
+ raise PyJsTempException
+
+ if var.get(u'_path').callprop(u'isImportDeclaration'):
+ pass
+ var.put(u'hasImports', var.get(u'true'))
+ var.put(u'key', var.get(u'_path').get(u'node').get(u'source').get(u'value'))
+ PyJs_Object_1022_ = Js({u'specifiers':Js([]),u'maxBlockHoist':Js(0.0),u'loc':var.get(u'_path').get(u'node').get(u'loc')})
+ var.put(u'importsEntry', (var.get(u'imports').get(var.get(u'key')) or PyJs_Object_1022_))
+ var.put(u'_importsEntry$specifi', var.get(u'importsEntry').get(u'specifiers')).get(u'push').callprop(u'apply', var.get(u'_importsEntry$specifi'), var.get(u'_path').get(u'node').get(u'specifiers'))
+ if PyJsStrictEq(var.get(u'_path').get(u'node').get(u'_blockHoist').typeof(),Js(u'number')):
+ var.get(u'importsEntry').put(u'maxBlockHoist', var.get(u'Math').callprop(u'max', var.get(u'_path').get(u'node').get(u'_blockHoist'), var.get(u'importsEntry').get(u'maxBlockHoist')))
+ var.get(u'imports').put(var.get(u'key'), var.get(u'importsEntry'))
+ var.get(u'_path').callprop(u'remove')
+ else:
+ if var.get(u'_path').callprop(u'isExportDefaultDeclaration'):
+ var.put(u'declaration', var.get(u'_path').callprop(u'get', Js(u'declaration')))
+ if var.get(u'declaration').callprop(u'isFunctionDeclaration'):
+ var.put(u'id', var.get(u'declaration').get(u'node').get(u'id'))
+ var.put(u'defNode', var.get(u't').callprop(u'identifier', Js(u'default')))
+ if var.get(u'id'):
+ var.get(u'addTo')(var.get(u'exports'), var.get(u'id').get(u'name'), var.get(u'defNode'))
+ var.get(u'topNodes').callprop(u'push', var.get(u'buildExportsAssignment')(var.get(u'defNode'), var.get(u'id')))
+ var.get(u'_path').callprop(u'replaceWith', var.get(u'declaration').get(u'node'))
+ else:
+ var.get(u'topNodes').callprop(u'push', var.get(u'buildExportsAssignment')(var.get(u'defNode'), var.get(u't').callprop(u'toExpression', var.get(u'declaration').get(u'node'))))
+ var.get(u'_path').callprop(u'remove')
+ else:
+ if var.get(u'declaration').callprop(u'isClassDeclaration'):
+ var.put(u'_id', var.get(u'declaration').get(u'node').get(u'id'))
+ var.put(u'_defNode', var.get(u't').callprop(u'identifier', Js(u'default')))
+ if var.get(u'_id'):
+ var.get(u'addTo')(var.get(u'exports'), var.get(u'_id').get(u'name'), var.get(u'_defNode'))
+ var.get(u'_path').callprop(u'replaceWithMultiple', Js([var.get(u'declaration').get(u'node'), var.get(u'buildExportsAssignment')(var.get(u'_defNode'), var.get(u'_id'))]))
+ else:
+ var.get(u'_path').callprop(u'replaceWith', var.get(u'buildExportsAssignment')(var.get(u'_defNode'), var.get(u't').callprop(u'toExpression', var.get(u'declaration').get(u'node'))))
+ var.get(u'_path').get(u'parentPath').callprop(u'requeue', var.get(u'_path').callprop(u'get', Js(u'expression.left')))
+ else:
+ var.get(u'_path').callprop(u'replaceWith', var.get(u'buildExportsAssignment')(var.get(u't').callprop(u'identifier', Js(u'default')), var.get(u'declaration').get(u'node')))
+ var.get(u'_path').get(u'parentPath').callprop(u'requeue', var.get(u'_path').callprop(u'get', Js(u'expression.left')))
+ else:
+ if var.get(u'_path').callprop(u'isExportNamedDeclaration'):
+ var.put(u'_declaration', var.get(u'_path').callprop(u'get', Js(u'declaration')))
+ if var.get(u'_declaration').get(u'node'):
+ if var.get(u'_declaration').callprop(u'isFunctionDeclaration'):
+ var.put(u'_id2', var.get(u'_declaration').get(u'node').get(u'id'))
+ var.get(u'addTo')(var.get(u'exports'), var.get(u'_id2').get(u'name'), var.get(u'_id2'))
+ var.get(u'topNodes').callprop(u'push', var.get(u'buildExportsAssignment')(var.get(u'_id2'), var.get(u'_id2')))
+ var.get(u'_path').callprop(u'replaceWith', var.get(u'_declaration').get(u'node'))
+ else:
+ if var.get(u'_declaration').callprop(u'isClassDeclaration'):
+ var.put(u'_id3', var.get(u'_declaration').get(u'node').get(u'id'))
+ var.get(u'addTo')(var.get(u'exports'), var.get(u'_id3').get(u'name'), var.get(u'_id3'))
+ var.get(u'_path').callprop(u'replaceWithMultiple', Js([var.get(u'_declaration').get(u'node'), var.get(u'buildExportsAssignment')(var.get(u'_id3'), var.get(u'_id3'))]))
+ var.get(u'nonHoistedExportNames').put(var.get(u'_id3').get(u'name'), var.get(u'true'))
+ else:
+ if var.get(u'_declaration').callprop(u'isVariableDeclaration'):
+ var.put(u'declarators', var.get(u'_declaration').callprop(u'get', Js(u'declarations')))
+ #for JS loop
+ var.put(u'_iterator5', var.get(u'declarators'))
+ var.put(u'_isArray5', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator5')))
+ var.put(u'_i5', Js(0.0))
+ var.put(u'_iterator5', (var.get(u'_iterator5') if var.get(u'_isArray5') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator5'))))
+ while 1:
+ pass
+ if var.get(u'_isArray5'):
+ if (var.get(u'_i5')>=var.get(u'_iterator5').get(u'length')):
+ break
+ var.put(u'_ref5', var.get(u'_iterator5').get((var.put(u'_i5',Js(var.get(u'_i5').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i5', var.get(u'_iterator5').callprop(u'next'))
+ if var.get(u'_i5').get(u'done'):
+ break
+ var.put(u'_ref5', var.get(u'_i5').get(u'value'))
+ var.put(u'decl', var.get(u'_ref5'))
+ var.put(u'_id4', var.get(u'decl').callprop(u'get', Js(u'id')))
+ var.put(u'init', var.get(u'decl').callprop(u'get', Js(u'init')))
+ if var.get(u'init').get(u'node').neg():
+ var.get(u'init').callprop(u'replaceWith', var.get(u't').callprop(u'identifier', Js(u'undefined')))
+ if var.get(u'_id4').callprop(u'isIdentifier'):
+ var.get(u'addTo')(var.get(u'exports'), var.get(u'_id4').get(u'node').get(u'name'), var.get(u'_id4').get(u'node'))
+ var.get(u'init').callprop(u'replaceWith', var.get(u'buildExportsAssignment')(var.get(u'_id4').get(u'node'), var.get(u'init').get(u'node')).get(u'expression'))
+ var.get(u'nonHoistedExportNames').put(var.get(u'_id4').get(u'node').get(u'name'), var.get(u'true'))
+ else:
+ pass
+
+ var.get(u'_path').callprop(u'replaceWith', var.get(u'_declaration').get(u'node'))
+ continue
+ var.put(u'_specifiers', var.get(u'_path').callprop(u'get', Js(u'specifiers')))
+ var.put(u'nodes', Js([]))
+ var.put(u'_source', var.get(u'_path').get(u'node').get(u'source'))
+ if var.get(u'_source'):
+ var.put(u'ref', var.get(u'addRequire')(var.get(u'_source').get(u'value'), var.get(u'_path').get(u'node').get(u'_blockHoist')))
+ #for JS loop
+ var.put(u'_iterator6', var.get(u'_specifiers'))
+ var.put(u'_isArray6', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator6')))
+ var.put(u'_i6', Js(0.0))
+ var.put(u'_iterator6', (var.get(u'_iterator6') if var.get(u'_isArray6') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator6'))))
+ while 1:
+ pass
+ if var.get(u'_isArray6'):
+ if (var.get(u'_i6')>=var.get(u'_iterator6').get(u'length')):
+ break
+ var.put(u'_ref6', var.get(u'_iterator6').get((var.put(u'_i6',Js(var.get(u'_i6').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i6', var.get(u'_iterator6').callprop(u'next'))
+ if var.get(u'_i6').get(u'done'):
+ break
+ var.put(u'_ref6', var.get(u'_i6').get(u'value'))
+ var.put(u'_specifier3', var.get(u'_ref6'))
+ if var.get(u'_specifier3').callprop(u'isExportNamespaceSpecifier'):
+ pass
+ else:
+ if var.get(u'_specifier3').callprop(u'isExportDefaultSpecifier'):
+ pass
+ else:
+ if var.get(u'_specifier3').callprop(u'isExportSpecifier'):
+ if PyJsStrictEq(var.get(u'_specifier3').get(u'node').get(u'local').get(u'name'),Js(u'default')):
+ def PyJs_LONG_1023_(var=var):
+ return var.get(u'topNodes').callprop(u'push', var.get(u'buildExportsFrom')(var.get(u't').callprop(u'stringLiteral', var.get(u'_specifier3').get(u'node').get(u'exported').get(u'name')), var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'callExpression', var.get(u"this").callprop(u'addHelper', Js(u'interopRequireDefault')), Js([var.get(u'ref')])), var.get(u'_specifier3').get(u'node').get(u'local'))))
+ PyJs_LONG_1023_()
+ else:
+ var.get(u'topNodes').callprop(u'push', var.get(u'buildExportsFrom')(var.get(u't').callprop(u'stringLiteral', var.get(u'_specifier3').get(u'node').get(u'exported').get(u'name')), var.get(u't').callprop(u'memberExpression', var.get(u'ref'), var.get(u'_specifier3').get(u'node').get(u'local'))))
+ var.get(u'nonHoistedExportNames').put(var.get(u'_specifier3').get(u'node').get(u'exported').get(u'name'), var.get(u'true'))
+
+ else:
+ #for JS loop
+ var.put(u'_iterator7', var.get(u'_specifiers'))
+ var.put(u'_isArray7', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator7')))
+ var.put(u'_i7', Js(0.0))
+ var.put(u'_iterator7', (var.get(u'_iterator7') if var.get(u'_isArray7') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator7'))))
+ while 1:
+ pass
+ if var.get(u'_isArray7'):
+ if (var.get(u'_i7')>=var.get(u'_iterator7').get(u'length')):
+ break
+ var.put(u'_ref7', var.get(u'_iterator7').get((var.put(u'_i7',Js(var.get(u'_i7').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i7', var.get(u'_iterator7').callprop(u'next'))
+ if var.get(u'_i7').get(u'done'):
+ break
+ var.put(u'_ref7', var.get(u'_i7').get(u'value'))
+ var.put(u'_specifier4', var.get(u'_ref7'))
+ if var.get(u'_specifier4').callprop(u'isExportSpecifier'):
+ var.get(u'addTo')(var.get(u'exports'), var.get(u'_specifier4').get(u'node').get(u'local').get(u'name'), var.get(u'_specifier4').get(u'node').get(u'exported'))
+ var.get(u'nonHoistedExportNames').put(var.get(u'_specifier4').get(u'node').get(u'exported').get(u'name'), var.get(u'true'))
+ var.get(u'nodes').callprop(u'push', var.get(u'buildExportsAssignment')(var.get(u'_specifier4').get(u'node').get(u'exported'), var.get(u'_specifier4').get(u'node').get(u'local')))
+
+ var.get(u'_path').callprop(u'replaceWithMultiple', var.get(u'nodes'))
+ else:
+ if var.get(u'_path').callprop(u'isExportAllDeclaration'):
+ PyJs_Object_1024_ = Js({u'OBJECT':var.get(u'addRequire')(var.get(u'_path').get(u'node').get(u'source').get(u'value'), var.get(u'_path').get(u'node').get(u'_blockHoist'))})
+ var.put(u'exportNode', var.get(u'buildExportAll')(PyJs_Object_1024_))
+ var.get(u'exportNode').put(u'loc', var.get(u'_path').get(u'node').get(u'loc'))
+ var.get(u'topNodes').callprop(u'push', var.get(u'exportNode'))
+ var.get(u'_path').callprop(u'remove')
+
+ for PyJsTemp in var.get(u'imports'):
+ var.put(u'source', PyJsTemp)
+ var.put(u'_imports$source', var.get(u'imports').get(var.get(u'source')))
+ var.put(u'specifiers', var.get(u'_imports$source').get(u'specifiers'))
+ var.put(u'maxBlockHoist', var.get(u'_imports$source').get(u'maxBlockHoist'))
+ if var.get(u'specifiers').get(u'length'):
+ var.put(u'uid', var.get(u'addRequire')(var.get(u'source'), var.get(u'maxBlockHoist')))
+ var.put(u'wildcard', PyJsComma(Js(0.0), Js(None)))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(0.0)):
+ var.get(u'varDecl').put(u'_blockHoist', var.get(u'maxBlockHoist'))
+ var.get(u'topNodes').callprop(u'push', var.get(u'varDecl'))
+ var.put(u'wildcard', var.get(u'specifier').get(u'local'))
+ else:
+ if var.get(u't').callprop(u'isImportDefaultSpecifier', var.get(u'specifier')):
+ var.get(u'specifiers').put(var.get(u'i'), var.get(u't').callprop(u'importSpecifier', var.get(u'specifier').get(u'local'), var.get(u't').callprop(u'identifier', Js(u'default'))))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'specifiers'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'_specifier', var.get(u'_ref3'))
+ if var.get(u't').callprop(u'isImportSpecifier', var.get(u'_specifier')):
+ var.put(u'target', var.get(u'uid'))
+ if PyJsStrictEq(var.get(u'_specifier').get(u'imported').get(u'name'),Js(u'default')):
+ if var.get(u'wildcard'):
+ var.put(u'target', var.get(u'wildcard'))
+ else:
+ var.put(u'target', var.put(u'wildcard', var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', var.get(u'uid').get(u'name'))))
+ var.put(u'_varDecl', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'target'), var.get(u't').callprop(u'callExpression', var.get(u"this").callprop(u'addHelper', Js(u'interopRequireDefault')), Js([var.get(u'uid')])))])))
+ if (var.get(u'maxBlockHoist')>Js(0.0)):
+ var.get(u'_varDecl').put(u'_blockHoist', var.get(u'maxBlockHoist'))
+ var.get(u'topNodes').callprop(u'push', var.get(u'_varDecl'))
+ var.get(u'remaps').put(var.get(u'_specifier').get(u'local').get(u'name'), var.get(u't').callprop(u'memberExpression', var.get(u'target'), var.get(u't').callprop(u'cloneWithoutLoc', var.get(u'_specifier').get(u'imported'))))
+
+ else:
+ var.put(u'requireNode', var.get(u'buildRequire')(var.get(u't').callprop(u'stringLiteral', var.get(u'source'))))
+ var.get(u'requireNode').put(u'loc', var.get(u'imports').get(var.get(u'source')).get(u'loc'))
+ var.get(u'topNodes').callprop(u'push', var.get(u'requireNode'))
+ if (var.get(u'hasImports') and PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u'nonHoistedExportNames')).get(u'length')):
+ var.put(u'hoistedExportsNode', var.get(u't').callprop(u'identifier', Js(u'undefined')))
+ for PyJsTemp in var.get(u'nonHoistedExportNames'):
+ var.put(u'name', PyJsTemp)
+ var.put(u'hoistedExportsNode', var.get(u'buildExportsAssignment')(var.get(u't').callprop(u'identifier', var.get(u'name')), var.get(u'hoistedExportsNode')).get(u'expression'))
+ var.put(u'node', var.get(u't').callprop(u'expressionStatement', var.get(u'hoistedExportsNode')))
+ var.get(u'node').put(u'_blockHoist', Js(3.0))
+ var.get(u'topNodes').callprop(u'unshift', var.get(u'node'))
+ if (var.get(u'hasExports') and var.get(u'strict').neg()):
+ var.put(u'buildTemplate', var.get(u'buildExportsModuleDeclaration'))
+ if var.get(u"this").get(u'opts').get(u'loose'):
+ var.put(u'buildTemplate', var.get(u'buildLooseExportsModuleDeclaration'))
+ var.put(u'declar', var.get(u'buildTemplate')())
+ var.get(u'declar').put(u'_blockHoist', Js(3.0))
+ var.get(u'topNodes').callprop(u'unshift', var.get(u'declar'))
+ var.get(u'path').callprop(u'unshiftContainer', Js(u'body'), var.get(u'topNodes'))
+ @Js
+ def PyJs_requeueInParent_1026_(newPath, this, arguments, var=var):
+ var = Scope({u'newPath':newPath, u'this':this, u'arguments':arguments, u'requeueInParent':PyJs_requeueInParent_1026_}, var)
+ var.registers([u'newPath'])
+ return var.get(u'path').callprop(u'requeue', var.get(u'newPath'))
+ PyJs_requeueInParent_1026_._set_name(u'requeueInParent')
+ PyJs_Object_1025_ = Js({u'remaps':var.get(u'remaps'),u'scope':var.get(u'scope'),u'exports':var.get(u'exports'),u'requeueInParent':PyJs_requeueInParent_1026_})
+ var.get(u'path').callprop(u'traverse', var.get(u'reassignmentVisitor'), PyJs_Object_1025_)
+ PyJs_exit_1021_._set_name(u'exit')
+ PyJs_Object_1020_ = Js({u'exit':PyJs_exit_1021_})
+ PyJs_Object_1017_ = Js({u'ThisExpression':PyJs_ThisExpression_1018_,u'Program':PyJs_Object_1020_})
+ PyJs_Object_1016_ = Js({u'inherits':var.get(u'require')(Js(u'babel-plugin-transform-strict-mode')),u'visitor':PyJs_Object_1017_})
+ return PyJs_Object_1016_
+ PyJs_anonymous_1010_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1010_)
+ var.put(u'_path2', var.get(u'require')(Js(u'path')))
+ var.put(u'_babelTemplate', var.get(u'require')(Js(u'babel-template')))
+ var.put(u'_babelTemplate2', var.get(u'_interopRequireDefault')(var.get(u'_babelTemplate')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ var.put(u'buildRequire', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n require($0);\n')))
+ var.put(u'buildExportsModuleDeclaration', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n Object.defineProperty(exports, "__esModule", {\n value: true\n });\n')))
+ var.put(u'buildExportsFrom', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n Object.defineProperty(exports, $0, {\n enumerable: true,\n get: function () {\n return $1;\n }\n });\n')))
+ var.put(u'buildLooseExportsModuleDeclaration', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n exports.__esModule = true;\n')))
+ var.put(u'buildExportsAssignment', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n exports.$0 = $1;\n')))
+ var.put(u'buildExportAll', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n Object.keys(OBJECT).forEach(function (key) {\n if (key === "default" || key === "__esModule") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return OBJECT[key];\n }\n });\n });\n')))
+ var.put(u'THIS_BREAK_KEYS', Js([Js(u'FunctionExpression'), Js(u'FunctionDeclaration'), Js(u'ClassProperty'), Js(u'ClassMethod'), Js(u'ObjectMethod')]))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1009_._set_name(u'anonymous')
+PyJs_Object_1029_ = Js({u'babel-plugin-transform-strict-mode':Js(94.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/core-js/object/create':Js(101.0),u'babel-runtime/core-js/object/keys':Js(103.0),u'babel-runtime/core-js/symbol':Js(105.0),u'babel-template':Js(221.0),u'babel-types':Js(258.0),u'path':Js(530.0)})
+@Js
+def PyJs_anonymous_1030_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_create', u'exports', u'_symbol2', u'_babelHelperHoistVariables', u'buildExportAll', u'require', u'_babelTemplate', u'module', u'_create2', u'buildTemplate', u'_symbol', u'_babelHelperHoistVariables2', u'_interopRequireDefault', u'_babelTemplate2', u'_getIterator2', u'_getIterator3'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1047_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1047_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_create', var.get(u'require')(Js(u'babel-runtime/core-js/object/create')))
+ var.put(u'_create2', var.get(u'_interopRequireDefault')(var.get(u'_create')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_symbol', var.get(u'require')(Js(u'babel-runtime/core-js/symbol')))
+ var.put(u'_symbol2', var.get(u'_interopRequireDefault')(var.get(u'_symbol')))
+ @Js
+ def PyJs_anonymous_1031_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'reassignmentVisitor', u'IGNORE_REASSIGNMENT_SYMBOL', u'_ref', u't'])
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ var.put(u'IGNORE_REASSIGNMENT_SYMBOL', PyJsComma(Js(0.0),var.get(u'_symbol2').get(u'default'))())
+ @Js
+ def PyJs_AssignmentExpressionUpdateExpression_1033_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'AssignmentExpressionUpdateExpression':PyJs_AssignmentExpressionUpdateExpression_1033_}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'name', u'exportedNames', u'_ref2', u'exportedName', u'_i', u'arg', u'isPostUpdateExpression', u'path'])
+ if var.get(u'path').get(u'node').get(var.get(u'IGNORE_REASSIGNMENT_SYMBOL')):
+ return var.get('undefined')
+ var.get(u'path').get(u'node').put(var.get(u'IGNORE_REASSIGNMENT_SYMBOL'), var.get(u'true'))
+ var.put(u'arg', var.get(u'path').callprop(u'get', (Js(u'left') if var.get(u'path').callprop(u'isAssignmentExpression') else Js(u'argument'))))
+ if var.get(u'arg').callprop(u'isIdentifier').neg():
+ return var.get('undefined')
+ var.put(u'name', var.get(u'arg').get(u'node').get(u'name'))
+ if PyJsStrictNeq(var.get(u"this").get(u'scope').callprop(u'getBinding', var.get(u'name')),var.get(u'path').get(u'scope').callprop(u'getBinding', var.get(u'name'))):
+ return var.get('undefined')
+ var.put(u'exportedNames', var.get(u"this").get(u'exports').get(var.get(u'name')))
+ if var.get(u'exportedNames').neg():
+ return var.get('undefined')
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'isPostUpdateExpression', (var.get(u'path').callprop(u'isUpdateExpression') and var.get(u'node').get(u'prefix').neg()))
+ if var.get(u'isPostUpdateExpression'):
+ if PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'++')):
+ var.put(u'node', var.get(u't').callprop(u'binaryExpression', Js(u'+'), var.get(u'node').get(u'argument'), var.get(u't').callprop(u'numericLiteral', Js(1.0))))
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'--')):
+ var.put(u'node', var.get(u't').callprop(u'binaryExpression', Js(u'-'), var.get(u'node').get(u'argument'), var.get(u't').callprop(u'numericLiteral', Js(1.0))))
+ else:
+ var.put(u'isPostUpdateExpression', Js(False))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'exportedNames'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i').get(u'value'))
+ var.put(u'exportedName', var.get(u'_ref2'))
+ var.put(u'node', var.get(u"this").callprop(u'buildCall', var.get(u'exportedName'), var.get(u'node')).get(u'expression'))
+
+ if var.get(u'isPostUpdateExpression'):
+ var.put(u'node', var.get(u't').callprop(u'sequenceExpression', Js([var.get(u'node'), var.get(u'path').get(u'node')])))
+ var.get(u'path').callprop(u'replaceWith', var.get(u'node'))
+ PyJs_AssignmentExpressionUpdateExpression_1033_._set_name(u'AssignmentExpressionUpdateExpression')
+ PyJs_Object_1032_ = Js({u'AssignmentExpression|UpdateExpression':PyJs_AssignmentExpressionUpdateExpression_1033_})
+ var.put(u'reassignmentVisitor', PyJs_Object_1032_)
+ @Js
+ def PyJs_ReferencedIdentifier_1036_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'ReferencedIdentifier':PyJs_ReferencedIdentifier_1036_, u'arguments':arguments}, var)
+ var.registers([u'path', u'state'])
+ if ((var.get(u'path').get(u'node').get(u'name')==Js(u'__moduleName')) and var.get(u'path').get(u'scope').callprop(u'hasBinding', Js(u'__moduleName')).neg()):
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'memberExpression', var.get(u'state').get(u'contextIdent'), var.get(u't').callprop(u'identifier', Js(u'id'))))
+ PyJs_ReferencedIdentifier_1036_._set_name(u'ReferencedIdentifier')
+ @Js
+ def PyJs_enter_1038_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'enter':PyJs_enter_1038_}, var)
+ var.registers([u'path', u'state'])
+ var.get(u'state').put(u'contextIdent', var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', Js(u'context')))
+ PyJs_enter_1038_._set_name(u'enter')
+ @Js
+ def PyJs_exit_1039_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'exit':PyJs_exit_1039_, u'arguments':arguments}, var)
+ var.registers([u'_isArray7', u'specifier', u'_isArray5', u'_isArray4', u'_isArray3', u'contextIdent', u'_isArray6', u'_i3', u'_name2', u'canHoist', u'_nodes', u'sources', u'variableIds', u'path', u'id', u'_isArray2', u'setterBody', u'_source', u'_i7', u'_i6', u'_i5', u'addExportName', u'removedPaths', u'_i2', u'_specifier', u'source', u'_node', u'_declar', u'nodes', u'_ref3', u'body', u'node', u'state', u'bindingIdentifiers', u'pushModule', u'setters', u'_path3', u'exportIdent', u'_specifiers', u'exportObjRef', u'_bindingIdentifiers', u'_path2', u'beforeBody', u'target', u'specifiers', u'moduleName', u'_iterator6', u'name', u'_ref8', u'_ref7', u'_ref6', u'_ref5', u'_ref4', u'modules', u'exportNames', u'_name', u'buildExportCall', u'_i4', u'declar', u'_nodes2', u'_iterator5', u'_iterator4', u'_iterator7', u'_iterator2', u'_iterator3', u'_path'])
+ @Js
+ def PyJsHoisted_buildExportCall_(name, val, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'val':val, u'arguments':arguments}, var)
+ var.registers([u'name', u'val'])
+ return var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'callExpression', var.get(u'exportIdent'), Js([var.get(u't').callprop(u'stringLiteral', var.get(u'name')), var.get(u'val')])))
+ PyJsHoisted_buildExportCall_.func_name = u'buildExportCall'
+ var.put(u'buildExportCall', PyJsHoisted_buildExportCall_)
+ @Js
+ def PyJsHoisted_addExportName_(key, val, this, arguments, var=var):
+ var = Scope({u'this':this, u'val':val, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'val', u'key'])
+ var.get(u'exportNames').put(var.get(u'key'), (var.get(u'exportNames').get(var.get(u'key')) or Js([])))
+ var.get(u'exportNames').get(var.get(u'key')).callprop(u'push', var.get(u'val'))
+ PyJsHoisted_addExportName_.func_name = u'addExportName'
+ var.put(u'addExportName', PyJsHoisted_addExportName_)
+ @Js
+ def PyJsHoisted_pushModule_(source, key, specifiers, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'arguments':arguments, u'key':key, u'specifiers':specifiers}, var)
+ var.registers([u'source', u'key', u'_modules', u'specifiers'])
+ PyJs_Object_1040_ = Js({u'imports':Js([]),u'exports':Js([])})
+ var.put(u'_modules', var.get(u'modules').put(var.get(u'source'), (var.get(u'modules').get(var.get(u'source')) or PyJs_Object_1040_)))
+ var.get(u'_modules').put(var.get(u'key'), var.get(u'_modules').get(var.get(u'key')).callprop(u'concat', var.get(u'specifiers')))
+ PyJsHoisted_pushModule_.func_name = u'pushModule'
+ var.put(u'pushModule', PyJsHoisted_pushModule_)
+ var.put(u'exportIdent', var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', Js(u'export')))
+ var.put(u'contextIdent', var.get(u'state').get(u'contextIdent'))
+ var.put(u'exportNames', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.put(u'modules', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.put(u'beforeBody', Js([]))
+ var.put(u'setters', Js([]))
+ var.put(u'sources', Js([]))
+ var.put(u'variableIds', Js([]))
+ var.put(u'removedPaths', Js([]))
+ pass
+ pass
+ pass
+ var.put(u'body', var.get(u'path').callprop(u'get', Js(u'body')))
+ var.put(u'canHoist', var.get(u'true'))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'body'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i2').get(u'value'))
+ var.put(u'_path', var.get(u'_ref3'))
+ if var.get(u'_path').callprop(u'isExportDeclaration'):
+ var.put(u'_path', var.get(u'_path').callprop(u'get', Js(u'declaration')))
+ if (var.get(u'_path').callprop(u'isVariableDeclaration') and PyJsStrictNeq(var.get(u'_path').get(u'node').get(u'kind'),Js(u'var'))):
+ var.put(u'canHoist', Js(False))
+ break
+
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'body'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i3').get(u'value'))
+ var.put(u'_path2', var.get(u'_ref4'))
+ if (var.get(u'canHoist') and var.get(u'_path2').callprop(u'isFunctionDeclaration')):
+ var.get(u'beforeBody').callprop(u'push', var.get(u'_path2').get(u'node'))
+ var.get(u'removedPaths').callprop(u'push', var.get(u'_path2'))
+ else:
+ if var.get(u'_path2').callprop(u'isImportDeclaration'):
+ var.put(u'_source', var.get(u'_path2').get(u'node').get(u'source').get(u'value'))
+ var.get(u'pushModule')(var.get(u'_source'), Js(u'imports'), var.get(u'_path2').get(u'node').get(u'specifiers'))
+ for PyJsTemp in var.get(u'_path2').callprop(u'getBindingIdentifiers'):
+ var.put(u'name', PyJsTemp)
+ var.get(u'_path2').get(u'scope').callprop(u'removeBinding', var.get(u'name'))
+ var.get(u'variableIds').callprop(u'push', var.get(u't').callprop(u'identifier', var.get(u'name')))
+ var.get(u'_path2').callprop(u'remove')
+ else:
+ if var.get(u'_path2').callprop(u'isExportAllDeclaration'):
+ var.get(u'pushModule')(var.get(u'_path2').get(u'node').get(u'source').get(u'value'), Js(u'exports'), var.get(u'_path2').get(u'node'))
+ var.get(u'_path2').callprop(u'remove')
+ else:
+ if var.get(u'_path2').callprop(u'isExportDefaultDeclaration'):
+ var.put(u'declar', var.get(u'_path2').callprop(u'get', Js(u'declaration')))
+ if (var.get(u'declar').callprop(u'isClassDeclaration') or var.get(u'declar').callprop(u'isFunctionDeclaration')):
+ var.put(u'id', var.get(u'declar').get(u'node').get(u'id'))
+ var.put(u'nodes', Js([]))
+ if var.get(u'id'):
+ var.get(u'nodes').callprop(u'push', var.get(u'declar').get(u'node'))
+ var.get(u'nodes').callprop(u'push', var.get(u'buildExportCall')(Js(u'default'), var.get(u'id')))
+ var.get(u'addExportName')(var.get(u'id').get(u'name'), Js(u'default'))
+ else:
+ var.get(u'nodes').callprop(u'push', var.get(u'buildExportCall')(Js(u'default'), var.get(u't').callprop(u'toExpression', var.get(u'declar').get(u'node'))))
+ if (var.get(u'canHoist').neg() or var.get(u'declar').callprop(u'isClassDeclaration')):
+ var.get(u'_path2').callprop(u'replaceWithMultiple', var.get(u'nodes'))
+ else:
+ var.put(u'beforeBody', var.get(u'beforeBody').callprop(u'concat', var.get(u'nodes')))
+ var.get(u'removedPaths').callprop(u'push', var.get(u'_path2'))
+ else:
+ var.get(u'_path2').callprop(u'replaceWith', var.get(u'buildExportCall')(Js(u'default'), var.get(u'declar').get(u'node')))
+ else:
+ if var.get(u'_path2').callprop(u'isExportNamedDeclaration'):
+ var.put(u'_declar', var.get(u'_path2').callprop(u'get', Js(u'declaration')))
+ if var.get(u'_declar').get(u'node'):
+ var.get(u'_path2').callprop(u'replaceWith', var.get(u'_declar'))
+ var.put(u'_nodes', Js([]))
+ var.put(u'bindingIdentifiers', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'_path2').callprop(u'isFunction'):
+ var.put(u'_node', var.get(u'_declar').get(u'node'))
+ var.put(u'_name', var.get(u'_node').get(u'id').get(u'name'))
+ if var.get(u'canHoist'):
+ var.get(u'addExportName')(var.get(u'_name'), var.get(u'_name'))
+ var.get(u'beforeBody').callprop(u'push', var.get(u'_node'))
+ var.get(u'beforeBody').callprop(u'push', var.get(u'buildExportCall')(var.get(u'_name'), var.get(u'_node').get(u'id')))
+ var.get(u'removedPaths').callprop(u'push', var.get(u'_path2'))
+ else:
+ pass
+ PyJs_Object_1041_ = Js({})
+ var.put(u'bindingIdentifiers', PyJsComma(PyJsComma(var.put(u'_bindingIdentifiers', PyJs_Object_1041_),var.get(u'_bindingIdentifiers').put(var.get(u'_name'), var.get(u'_node').get(u'id'))),var.get(u'_bindingIdentifiers')))
+ else:
+ var.put(u'bindingIdentifiers', var.get(u'_declar').callprop(u'getBindingIdentifiers'))
+ for PyJsTemp in var.get(u'bindingIdentifiers'):
+ var.put(u'_name2', PyJsTemp)
+ var.get(u'addExportName')(var.get(u'_name2'), var.get(u'_name2'))
+ var.get(u'_nodes').callprop(u'push', var.get(u'buildExportCall')(var.get(u'_name2'), var.get(u't').callprop(u'identifier', var.get(u'_name2'))))
+ var.get(u'_path2').callprop(u'insertAfter', var.get(u'_nodes'))
+ else:
+ var.put(u'_specifiers', var.get(u'_path2').get(u'node').get(u'specifiers'))
+ if (var.get(u'_specifiers') and var.get(u'_specifiers').get(u'length')):
+ if var.get(u'_path2').get(u'node').get(u'source'):
+ var.get(u'pushModule')(var.get(u'_path2').get(u'node').get(u'source').get(u'value'), Js(u'exports'), var.get(u'_specifiers'))
+ var.get(u'_path2').callprop(u'remove')
+ else:
+ var.put(u'_nodes2', Js([]))
+ #for JS loop
+ var.put(u'_iterator7', var.get(u'_specifiers'))
+ var.put(u'_isArray7', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator7')))
+ var.put(u'_i7', Js(0.0))
+ var.put(u'_iterator7', (var.get(u'_iterator7') if var.get(u'_isArray7') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator7'))))
+ while 1:
+ pass
+ if var.get(u'_isArray7'):
+ if (var.get(u'_i7')>=var.get(u'_iterator7').get(u'length')):
+ break
+ var.put(u'_ref8', var.get(u'_iterator7').get((var.put(u'_i7',Js(var.get(u'_i7').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i7', var.get(u'_iterator7').callprop(u'next'))
+ if var.get(u'_i7').get(u'done'):
+ break
+ var.put(u'_ref8', var.get(u'_i7').get(u'value'))
+ var.put(u'_specifier', var.get(u'_ref8'))
+ var.get(u'_nodes2').callprop(u'push', var.get(u'buildExportCall')(var.get(u'_specifier').get(u'exported').get(u'name'), var.get(u'_specifier').get(u'local')))
+ var.get(u'addExportName')(var.get(u'_specifier').get(u'local').get(u'name'), var.get(u'_specifier').get(u'exported').get(u'name'))
+
+ var.get(u'_path2').callprop(u'replaceWithMultiple', var.get(u'_nodes2'))
+
+ for PyJsTemp in var.get(u'modules'):
+ var.put(u'source', PyJsTemp)
+ var.put(u'specifiers', var.get(u'modules').get(var.get(u'source')))
+ var.put(u'setterBody', Js([]))
+ var.put(u'target', var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', var.get(u'source')))
+ #for JS loop
+ var.put(u'_iterator4', var.get(u'specifiers').get(u'imports'))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator4'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref5', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref5', var.get(u'_i4').get(u'value'))
+ var.put(u'specifier', var.get(u'_ref5'))
+ if var.get(u't').callprop(u'isImportNamespaceSpecifier', var.get(u'specifier')):
+ var.get(u'setterBody').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'specifier').get(u'local'), var.get(u'target'))))
+ else:
+ if var.get(u't').callprop(u'isImportDefaultSpecifier', var.get(u'specifier')):
+ var.put(u'specifier', var.get(u't').callprop(u'importSpecifier', var.get(u'specifier').get(u'local'), var.get(u't').callprop(u'identifier', Js(u'default'))))
+ if var.get(u't').callprop(u'isImportSpecifier', var.get(u'specifier')):
+ var.get(u'setterBody').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'specifier').get(u'local'), var.get(u't').callprop(u'memberExpression', var.get(u'target'), var.get(u'specifier').get(u'imported')))))
+
+ if var.get(u'specifiers').get(u'exports').get(u'length'):
+ var.put(u'exportObjRef', var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', Js(u'exportObj')))
+ var.get(u'setterBody').callprop(u'push', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'exportObjRef'), var.get(u't').callprop(u'objectExpression', Js([])))])))
+ #for JS loop
+ var.put(u'_iterator5', var.get(u'specifiers').get(u'exports'))
+ var.put(u'_isArray5', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator5')))
+ var.put(u'_i5', Js(0.0))
+ var.put(u'_iterator5', (var.get(u'_iterator5') if var.get(u'_isArray5') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator5'))))
+ while 1:
+ pass
+ if var.get(u'_isArray5'):
+ if (var.get(u'_i5')>=var.get(u'_iterator5').get(u'length')):
+ break
+ var.put(u'_ref6', var.get(u'_iterator5').get((var.put(u'_i5',Js(var.get(u'_i5').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i5', var.get(u'_iterator5').callprop(u'next'))
+ if var.get(u'_i5').get(u'done'):
+ break
+ var.put(u'_ref6', var.get(u'_i5').get(u'value'))
+ var.put(u'node', var.get(u'_ref6'))
+ if var.get(u't').callprop(u'isExportAllDeclaration', var.get(u'node')):
+ PyJs_Object_1042_ = Js({u'KEY':var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', Js(u'key')),u'EXPORT_OBJ':var.get(u'exportObjRef'),u'TARGET':var.get(u'target')})
+ var.get(u'setterBody').callprop(u'push', var.get(u'buildExportAll')(PyJs_Object_1042_))
+ else:
+ if var.get(u't').callprop(u'isExportSpecifier', var.get(u'node')):
+ var.get(u'setterBody').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u't').callprop(u'memberExpression', var.get(u'exportObjRef'), var.get(u'node').get(u'exported')), var.get(u't').callprop(u'memberExpression', var.get(u'target'), var.get(u'node').get(u'local')))))
+ else:
+ pass
+
+ var.get(u'setterBody').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'callExpression', var.get(u'exportIdent'), Js([var.get(u'exportObjRef')]))))
+ var.get(u'sources').callprop(u'push', var.get(u't').callprop(u'stringLiteral', var.get(u'source')))
+ var.get(u'setters').callprop(u'push', var.get(u't').callprop(u'functionExpression', var.get(u"null"), Js([var.get(u'target')]), var.get(u't').callprop(u'blockStatement', var.get(u'setterBody'))))
+ var.put(u'moduleName', var.get(u"this").callprop(u'getModuleName'))
+ if var.get(u'moduleName'):
+ var.put(u'moduleName', var.get(u't').callprop(u'stringLiteral', var.get(u'moduleName')))
+ if var.get(u'canHoist'):
+ @Js
+ def PyJs_anonymous_1043_(id, this, arguments, var=var):
+ var = Scope({u'this':this, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'id'])
+ return var.get(u'variableIds').callprop(u'push', var.get(u'id'))
+ PyJs_anonymous_1043_._set_name(u'anonymous')
+ PyJsComma(Js(0.0),var.get(u'_babelHelperHoistVariables2').get(u'default'))(var.get(u'path'), PyJs_anonymous_1043_)
+ if var.get(u'variableIds').get(u'length'):
+ @Js
+ def PyJs_anonymous_1044_(id, this, arguments, var=var):
+ var = Scope({u'this':this, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'id'])
+ return var.get(u't').callprop(u'variableDeclarator', var.get(u'id'))
+ PyJs_anonymous_1044_._set_name(u'anonymous')
+ var.get(u'beforeBody').callprop(u'unshift', var.get(u't').callprop(u'variableDeclaration', Js(u'var'), var.get(u'variableIds').callprop(u'map', PyJs_anonymous_1044_)))
+ PyJs_Object_1045_ = Js({u'exports':var.get(u'exportNames'),u'buildCall':var.get(u'buildExportCall'),u'scope':var.get(u'path').get(u'scope')})
+ var.get(u'path').callprop(u'traverse', var.get(u'reassignmentVisitor'), PyJs_Object_1045_)
+ #for JS loop
+ var.put(u'_iterator6', var.get(u'removedPaths'))
+ var.put(u'_isArray6', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator6')))
+ var.put(u'_i6', Js(0.0))
+ var.put(u'_iterator6', (var.get(u'_iterator6') if var.get(u'_isArray6') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator6'))))
+ while 1:
+ pass
+ if var.get(u'_isArray6'):
+ if (var.get(u'_i6')>=var.get(u'_iterator6').get(u'length')):
+ break
+ var.put(u'_ref7', var.get(u'_iterator6').get((var.put(u'_i6',Js(var.get(u'_i6').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i6', var.get(u'_iterator6').callprop(u'next'))
+ if var.get(u'_i6').get(u'done'):
+ break
+ var.put(u'_ref7', var.get(u'_i6').get(u'value'))
+ var.put(u'_path3', var.get(u'_ref7'))
+ var.get(u'_path3').callprop(u'remove')
+
+ PyJs_Object_1046_ = Js({u'SYSTEM_REGISTER':var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'identifier', (var.get(u'state').get(u'opts').get(u'systemGlobal') or Js(u'System'))), var.get(u't').callprop(u'identifier', Js(u'register'))),u'BEFORE_BODY':var.get(u'beforeBody'),u'MODULE_NAME':var.get(u'moduleName'),u'SETTERS':var.get(u'setters'),u'SOURCES':var.get(u'sources'),u'BODY':var.get(u'path').get(u'node').get(u'body'),u'EXPORT_IDENTIFIER':var.get(u'exportIdent'),u'CONTEXT_IDENTIFIER':var.get(u'contextIdent')})
+ var.get(u'path').get(u'node').put(u'body', Js([var.get(u'buildTemplate')(PyJs_Object_1046_)]))
+ PyJs_exit_1039_._set_name(u'exit')
+ PyJs_Object_1037_ = Js({u'enter':PyJs_enter_1038_,u'exit':PyJs_exit_1039_})
+ PyJs_Object_1035_ = Js({u'ReferencedIdentifier':PyJs_ReferencedIdentifier_1036_,u'Program':PyJs_Object_1037_})
+ PyJs_Object_1034_ = Js({u'visitor':PyJs_Object_1035_})
+ return PyJs_Object_1034_
+ PyJs_anonymous_1031_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1031_)
+ var.put(u'_babelHelperHoistVariables', var.get(u'require')(Js(u'babel-helper-hoist-variables')))
+ var.put(u'_babelHelperHoistVariables2', var.get(u'_interopRequireDefault')(var.get(u'_babelHelperHoistVariables')))
+ var.put(u'_babelTemplate', var.get(u'require')(Js(u'babel-template')))
+ var.put(u'_babelTemplate2', var.get(u'_interopRequireDefault')(var.get(u'_babelTemplate')))
+ pass
+ var.put(u'buildTemplate', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n SYSTEM_REGISTER(MODULE_NAME, [SOURCES], function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) {\n "use strict";\n BEFORE_BODY;\n return {\n setters: [SETTERS],\n execute: function () {\n BODY;\n }\n };\n });\n')))
+ var.put(u'buildExportAll', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n for (var KEY in TARGET) {\n if (KEY !== "default" && KEY !== "__esModule") EXPORT_OBJ[KEY] = TARGET[KEY];\n }\n')))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1030_._set_name(u'anonymous')
+PyJs_Object_1048_ = Js({u'babel-helper-hoist-variables':Js(51.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/core-js/object/create':Js(101.0),u'babel-runtime/core-js/symbol':Js(105.0),u'babel-template':Js(221.0)})
+@Js
+def PyJs_anonymous_1049_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'_babelTemplate', u'module', u'_babelTemplate2', u'buildWrapper', u'buildGlobalExport', u'_interopRequireDefault', u'buildPrerequisiteAssignment', u'_path'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1064_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1064_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_1050_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'_ref', u'isValidDefine', u't'])
+ @Js
+ def PyJsHoisted_isValidDefine_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'expr', u'args', u'path'])
+ if var.get(u'path').callprop(u'isExpressionStatement').neg():
+ return var.get('undefined')
+ var.put(u'expr', var.get(u'path').callprop(u'get', Js(u'expression')))
+ if var.get(u'expr').callprop(u'isCallExpression').neg():
+ return Js(False)
+ PyJs_Object_1051_ = Js({u'name':Js(u'define')})
+ if var.get(u'expr').callprop(u'get', Js(u'callee')).callprop(u'isIdentifier', PyJs_Object_1051_).neg():
+ return Js(False)
+ var.put(u'args', var.get(u'expr').callprop(u'get', Js(u'arguments')))
+ if (PyJsStrictEq(var.get(u'args').get(u'length'),Js(3.0)) and var.get(u'args').callprop(u'shift').callprop(u'isStringLiteral').neg()):
+ return Js(False)
+ if PyJsStrictNeq(var.get(u'args').get(u'length'),Js(2.0)):
+ return Js(False)
+ if var.get(u'args').callprop(u'shift').callprop(u'isArrayExpression').neg():
+ return Js(False)
+ if var.get(u'args').callprop(u'shift').callprop(u'isFunctionExpression').neg():
+ return Js(False)
+ return var.get(u'true')
+ PyJsHoisted_isValidDefine_.func_name = u'isValidDefine'
+ var.put(u'isValidDefine', PyJsHoisted_isValidDefine_)
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ pass
+ @Js
+ def PyJs_exit_1055_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'exit':PyJs_exit_1055_, u'arguments':arguments}, var)
+ var.registers([u'browserGlobals', u'moduleName', u'last', u'members', u'globalName', u'args', u'browserArgs', u'commonArgs', u'amdArgs', u'state', u'call', u'func', u'globalToAssign', u'moduleNameOrBasename', u'path', u'globalExport', u'prerequisiteAssignments'])
+ var.put(u'last', var.get(u'path').callprop(u'get', Js(u'body')).callprop(u'pop'))
+ if var.get(u'isValidDefine')(var.get(u'last')).neg():
+ return var.get('undefined')
+ var.put(u'call', var.get(u'last').get(u'node').get(u'expression'))
+ var.put(u'args', var.get(u'call').get(u'arguments'))
+ var.put(u'moduleName', (var.get(u'args').callprop(u'shift') if PyJsStrictEq(var.get(u'args').get(u'length'),Js(3.0)) else var.get(u"null")))
+ var.put(u'amdArgs', var.get(u'call').get(u'arguments').get(u'0'))
+ var.put(u'func', var.get(u'call').get(u'arguments').get(u'1'))
+ PyJs_Object_1056_ = Js({})
+ var.put(u'browserGlobals', (var.get(u'state').get(u'opts').get(u'globals') or PyJs_Object_1056_))
+ @Js
+ def PyJs_anonymous_1057_(arg, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'arg':arg}, var)
+ var.registers([u'arg'])
+ if (PyJsStrictEq(var.get(u'arg').get(u'value'),Js(u'module')) or PyJsStrictEq(var.get(u'arg').get(u'value'),Js(u'exports'))):
+ return var.get(u't').callprop(u'identifier', var.get(u'arg').get(u'value'))
+ else:
+ return var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'identifier', Js(u'require')), Js([var.get(u'arg')]))
+ PyJs_anonymous_1057_._set_name(u'anonymous')
+ var.put(u'commonArgs', var.get(u'amdArgs').get(u'elements').callprop(u'map', PyJs_anonymous_1057_))
+ @Js
+ def PyJs_anonymous_1058_(arg, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'arg':arg}, var)
+ var.registers([u'memberExpression', u'globalRef', u'arg', u'globalName', u'requireName'])
+ if PyJsStrictEq(var.get(u'arg').get(u'value'),Js(u'module')):
+ return var.get(u't').callprop(u'identifier', Js(u'mod'))
+ else:
+ if PyJsStrictEq(var.get(u'arg').get(u'value'),Js(u'exports')):
+ return var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'identifier', Js(u'mod')), var.get(u't').callprop(u'identifier', Js(u'exports')))
+ else:
+ var.put(u'memberExpression', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'state').get(u'opts').get(u'exactGlobals'):
+ var.put(u'globalRef', var.get(u'browserGlobals').get(var.get(u'arg').get(u'value')))
+ if var.get(u'globalRef'):
+ @Js
+ def PyJs_anonymous_1059_(accum, curr, this, arguments, var=var):
+ var = Scope({u'this':this, u'curr':curr, u'accum':accum, u'arguments':arguments}, var)
+ var.registers([u'curr', u'accum'])
+ return var.get(u't').callprop(u'memberExpression', var.get(u'accum'), var.get(u't').callprop(u'identifier', var.get(u'curr')))
+ PyJs_anonymous_1059_._set_name(u'anonymous')
+ var.put(u'memberExpression', var.get(u'globalRef').callprop(u'split', Js(u'.')).callprop(u'reduce', PyJs_anonymous_1059_, var.get(u't').callprop(u'identifier', Js(u'global'))))
+ else:
+ var.put(u'memberExpression', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'identifier', Js(u'global')), var.get(u't').callprop(u'identifier', var.get(u't').callprop(u'toIdentifier', var.get(u'arg').get(u'value')))))
+ else:
+ var.put(u'requireName', PyJsComma(Js(0.0),var.get(u'_path').get(u'basename'))(var.get(u'arg').get(u'value'), PyJsComma(Js(0.0),var.get(u'_path').get(u'extname'))(var.get(u'arg').get(u'value'))))
+ var.put(u'globalName', (var.get(u'browserGlobals').get(var.get(u'requireName')) or var.get(u'requireName')))
+ var.put(u'memberExpression', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'identifier', Js(u'global')), var.get(u't').callprop(u'identifier', var.get(u't').callprop(u'toIdentifier', var.get(u'globalName')))))
+ return var.get(u'memberExpression')
+ PyJs_anonymous_1058_._set_name(u'anonymous')
+ var.put(u'browserArgs', var.get(u'amdArgs').get(u'elements').callprop(u'map', PyJs_anonymous_1058_))
+ var.put(u'moduleNameOrBasename', (var.get(u'moduleName').get(u'value') if var.get(u'moduleName') else var.get(u"this").get(u'file').get(u'opts').get(u'basename')))
+ var.put(u'globalToAssign', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'identifier', Js(u'global')), var.get(u't').callprop(u'identifier', var.get(u't').callprop(u'toIdentifier', var.get(u'moduleNameOrBasename')))))
+ var.put(u'prerequisiteAssignments', var.get(u"null"))
+ if var.get(u'state').get(u'opts').get(u'exactGlobals'):
+ var.put(u'globalName', var.get(u'browserGlobals').get(var.get(u'moduleNameOrBasename')))
+ if var.get(u'globalName'):
+ var.put(u'prerequisiteAssignments', Js([]))
+ var.put(u'members', var.get(u'globalName').callprop(u'split', Js(u'.')))
+ @Js
+ def PyJs_anonymous_1060_(accum, curr, this, arguments, var=var):
+ var = Scope({u'this':this, u'curr':curr, u'accum':accum, u'arguments':arguments}, var)
+ var.registers([u'curr', u'accum'])
+ PyJs_Object_1061_ = Js({u'GLOBAL_REFERENCE':var.get(u'accum')})
+ var.get(u'prerequisiteAssignments').callprop(u'push', var.get(u'buildPrerequisiteAssignment')(PyJs_Object_1061_))
+ return var.get(u't').callprop(u'memberExpression', var.get(u'accum'), var.get(u't').callprop(u'identifier', var.get(u'curr')))
+ PyJs_anonymous_1060_._set_name(u'anonymous')
+ var.put(u'globalToAssign', var.get(u'members').callprop(u'slice', Js(1.0)).callprop(u'reduce', PyJs_anonymous_1060_, var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'identifier', Js(u'global')), var.get(u't').callprop(u'identifier', var.get(u'members').get(u'0')))))
+ PyJs_Object_1062_ = Js({u'BROWSER_ARGUMENTS':var.get(u'browserArgs'),u'PREREQUISITE_ASSIGNMENTS':var.get(u'prerequisiteAssignments'),u'GLOBAL_TO_ASSIGN':var.get(u'globalToAssign')})
+ var.put(u'globalExport', var.get(u'buildGlobalExport')(PyJs_Object_1062_))
+ PyJs_Object_1063_ = Js({u'MODULE_NAME':var.get(u'moduleName'),u'AMD_ARGUMENTS':var.get(u'amdArgs'),u'COMMON_ARGUMENTS':var.get(u'commonArgs'),u'GLOBAL_EXPORT':var.get(u'globalExport'),u'FUNC':var.get(u'func')})
+ var.get(u'last').callprop(u'replaceWith', var.get(u'buildWrapper')(PyJs_Object_1063_))
+ PyJs_exit_1055_._set_name(u'exit')
+ PyJs_Object_1054_ = Js({u'exit':PyJs_exit_1055_})
+ PyJs_Object_1053_ = Js({u'Program':PyJs_Object_1054_})
+ PyJs_Object_1052_ = Js({u'inherits':var.get(u'require')(Js(u'babel-plugin-transform-es2015-modules-amd')),u'visitor':PyJs_Object_1053_})
+ return PyJs_Object_1052_
+ PyJs_anonymous_1050_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1050_)
+ var.put(u'_path', var.get(u'require')(Js(u'path')))
+ var.put(u'_babelTemplate', var.get(u'require')(Js(u'babel-template')))
+ var.put(u'_babelTemplate2', var.get(u'_interopRequireDefault')(var.get(u'_babelTemplate')))
+ pass
+ var.put(u'buildPrerequisiteAssignment', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n GLOBAL_REFERENCE = GLOBAL_REFERENCE || {}\n')))
+ var.put(u'buildGlobalExport', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n var mod = { exports: {} };\n factory(BROWSER_ARGUMENTS);\n PREREQUISITE_ASSIGNMENTS\n GLOBAL_TO_ASSIGN = mod.exports;\n')))
+ var.put(u'buildWrapper', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n (function (global, factory) {\n if (typeof define === "function" && define.amd) {\n define(MODULE_NAME, AMD_ARGUMENTS, factory);\n } else if (typeof exports !== "undefined") {\n factory(COMMON_ARGUMENTS);\n } else {\n GLOBAL_EXPORT\n }\n })(this, FUNC);\n')))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1049_._set_name(u'anonymous')
+PyJs_Object_1065_ = Js({u'babel-plugin-transform-es2015-modules-amd':Js(72.0),u'babel-template':Js(221.0),u'path':Js(530.0)})
+@Js
+def PyJs_anonymous_1066_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_babelHelperReplaceSupers2', u'exports', u'_symbol2', u'require', u'module', u'_symbol', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'_babelHelperReplaceSupers'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1077_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1077_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_symbol', var.get(u'require')(Js(u'babel-runtime/core-js/symbol')))
+ var.put(u'_symbol2', var.get(u'_interopRequireDefault')(var.get(u'_symbol')))
+ @Js
+ def PyJs_anonymous_1067_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'_ref', u'Property', u't', u'CONTAINS_SUPER'])
+ @Js
+ def PyJsHoisted_Property_(path, node, scope, getObjectRef, file, this, arguments, var=var):
+ var = Scope({u'node':node, u'getObjectRef':getObjectRef, u'arguments':arguments, u'file':file, u'scope':scope, u'this':this, u'path':path}, var)
+ var.registers([u'node', u'getObjectRef', u'replaceSupers', u'file', u'scope', u'path'])
+ PyJs_Object_1068_ = Js({u'getObjectRef':var.get(u'getObjectRef'),u'methodNode':var.get(u'node'),u'methodPath':var.get(u'path'),u'isStatic':var.get(u'true'),u'scope':var.get(u'scope'),u'file':var.get(u'file')})
+ var.put(u'replaceSupers', var.get(u'_babelHelperReplaceSupers2').get(u'default').create(PyJs_Object_1068_))
+ var.get(u'replaceSupers').callprop(u'replace')
+ PyJsHoisted_Property_.func_name = u'Property'
+ var.put(u'Property', PyJsHoisted_Property_)
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ pass
+ var.put(u'CONTAINS_SUPER', PyJsComma(Js(0.0),var.get(u'_symbol2').get(u'default'))())
+ @Js
+ def PyJs_Super_1071_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'Super':PyJs_Super_1071_, u'arguments':arguments}, var)
+ var.registers([u'path', u'parentObj'])
+ @Js
+ def PyJs_anonymous_1072_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return var.get(u'path').callprop(u'isObjectExpression')
+ PyJs_anonymous_1072_._set_name(u'anonymous')
+ var.put(u'parentObj', var.get(u'path').callprop(u'findParent', PyJs_anonymous_1072_))
+ if var.get(u'parentObj'):
+ var.get(u'parentObj').get(u'node').put(var.get(u'CONTAINS_SUPER'), var.get(u'true'))
+ PyJs_Super_1071_._set_name(u'Super')
+ @Js
+ def PyJs_exit_1074_(path, file, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'exit':PyJs_exit_1074_, u'arguments':arguments, u'file':file}, var)
+ var.registers([u'getObjectRef', u'objectRef', u'_isArray', u'_iterator', u'file', u'propPath', u'_ref2', u'propPaths', u'_i', u'path'])
+ if var.get(u'path').get(u'node').get(var.get(u'CONTAINS_SUPER')).neg():
+ return var.get('undefined')
+ var.put(u'objectRef', PyJsComma(Js(0.0), Js(None)))
+ @Js
+ def PyJs_getObjectRef_1075_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getObjectRef':PyJs_getObjectRef_1075_, u'arguments':arguments}, var)
+ var.registers([])
+ return var.put(u'objectRef', (var.get(u'objectRef') or var.get(u'path').get(u'scope').callprop(u'generateUidIdentifier', Js(u'obj'))))
+ PyJs_getObjectRef_1075_._set_name(u'getObjectRef')
+ var.put(u'getObjectRef', PyJs_getObjectRef_1075_)
+ var.put(u'propPaths', var.get(u'path').callprop(u'get', Js(u'properties')))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'propPaths'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i').get(u'value'))
+ var.put(u'propPath', var.get(u'_ref2'))
+ if var.get(u'propPath').callprop(u'isObjectProperty'):
+ var.put(u'propPath', var.get(u'propPath').callprop(u'get', Js(u'value')))
+ var.get(u'Property')(var.get(u'propPath'), var.get(u'propPath').get(u'node'), var.get(u'path').get(u'scope'), var.get(u'getObjectRef'), var.get(u'file'))
+
+ if var.get(u'objectRef'):
+ PyJs_Object_1076_ = Js({u'id':var.get(u'objectRef')})
+ var.get(u'path').get(u'scope').callprop(u'push', PyJs_Object_1076_)
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'objectRef'), var.get(u'path').get(u'node')))
+ PyJs_exit_1074_._set_name(u'exit')
+ PyJs_Object_1073_ = Js({u'exit':PyJs_exit_1074_})
+ PyJs_Object_1070_ = Js({u'Super':PyJs_Super_1071_,u'ObjectExpression':PyJs_Object_1073_})
+ PyJs_Object_1069_ = Js({u'visitor':PyJs_Object_1070_})
+ return PyJs_Object_1069_
+ PyJs_anonymous_1067_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1067_)
+ var.put(u'_babelHelperReplaceSupers', var.get(u'require')(Js(u'babel-helper-replace-supers')))
+ var.put(u'_babelHelperReplaceSupers2', var.get(u'_interopRequireDefault')(var.get(u'_babelHelperReplaceSupers')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1066_._set_name(u'anonymous')
+PyJs_Object_1078_ = Js({u'babel-helper-replace-supers':Js(54.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/core-js/symbol':Js(105.0)})
+@Js
+def PyJs_anonymous_1079_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_babelHelperCallDelegate', u'module', u'require', u'_babelHelperCallDelegate2', u'exports', u'_interopRequireWildcard', u'visitor', u'_babelHelperGetFunctionArity', u'_babelTypes', u'_babelHelperGetFunctionArity2', u'iifeVisitor', u'_babelTemplate', u'isSafeBinding', u'_babelTemplate2', u't', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'buildCutOff', u'hasDefaults', u'buildDefaultParam'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1081_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1081_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_isSafeBinding_(scope, node, this, arguments, var=var):
+ var = Scope({u'node':node, u'scope':scope, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'scope', u'kind', u'_scope$getOwnBinding'])
+ if var.get(u'scope').callprop(u'hasOwnBinding', var.get(u'node').get(u'name')).neg():
+ return var.get(u'true')
+ var.put(u'_scope$getOwnBinding', var.get(u'scope').callprop(u'getOwnBinding', var.get(u'node').get(u'name')))
+ var.put(u'kind', var.get(u'_scope$getOwnBinding').get(u'kind'))
+ return (PyJsStrictEq(var.get(u'kind'),Js(u'param')) or PyJsStrictEq(var.get(u'kind'),Js(u'local')))
+ PyJsHoisted_isSafeBinding_.func_name = u'isSafeBinding'
+ var.put(u'isSafeBinding', PyJsHoisted_isSafeBinding_)
+ @Js
+ def PyJsHoisted_hasDefaults_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'param', u'_i', u'_ref'])
+ #for JS loop
+ var.put(u'_iterator', var.get(u'node').get(u'params'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'param', var.get(u'_ref'))
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'param')).neg():
+ return var.get(u'true')
+
+ return Js(False)
+ PyJsHoisted_hasDefaults_.func_name = u'hasDefaults'
+ var.put(u'hasDefaults', PyJsHoisted_hasDefaults_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1080_ = Js({})
+ var.put(u'newObj', PyJs_Object_1080_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'visitor', var.get(u'undefined'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_babelHelperGetFunctionArity', var.get(u'require')(Js(u'babel-helper-get-function-arity')))
+ var.put(u'_babelHelperGetFunctionArity2', var.get(u'_interopRequireDefault')(var.get(u'_babelHelperGetFunctionArity')))
+ var.put(u'_babelHelperCallDelegate', var.get(u'require')(Js(u'babel-helper-call-delegate')))
+ var.put(u'_babelHelperCallDelegate2', var.get(u'_interopRequireDefault')(var.get(u'_babelHelperCallDelegate')))
+ var.put(u'_babelTemplate', var.get(u'require')(Js(u'babel-template')))
+ var.put(u'_babelTemplate2', var.get(u'_interopRequireDefault')(var.get(u'_babelTemplate')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ var.put(u'buildDefaultParam', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n let VARIABLE_NAME =\n ARGUMENTS.length > ARGUMENT_KEY && ARGUMENTS[ARGUMENT_KEY] !== undefined ?\n ARGUMENTS[ARGUMENT_KEY]\n :\n DEFAULT_VALUE;\n')))
+ var.put(u'buildCutOff', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n let $0 = $1[$2];\n')))
+ pass
+ pass
+ @Js
+ def PyJs_ReferencedIdentifier_1083_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'ReferencedIdentifier':PyJs_ReferencedIdentifier_1083_, u'arguments':arguments}, var)
+ var.registers([u'node', u'scope', u'state', u'path'])
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if (PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'eval')) or var.get(u'isSafeBinding')(var.get(u'scope'), var.get(u'node')).neg()):
+ var.get(u'state').put(u'iife', var.get(u'true'))
+ var.get(u'path').callprop(u'stop')
+ PyJs_ReferencedIdentifier_1083_._set_name(u'ReferencedIdentifier')
+ @Js
+ def PyJs_Scope_1084_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'Scope':PyJs_Scope_1084_}, var)
+ var.registers([u'path'])
+ var.get(u'path').callprop(u'skip')
+ PyJs_Scope_1084_._set_name(u'Scope')
+ PyJs_Object_1082_ = Js({u'ReferencedIdentifier':PyJs_ReferencedIdentifier_1083_,u'Scope':PyJs_Scope_1084_})
+ var.put(u'iifeVisitor', PyJs_Object_1082_)
+ @Js
+ def PyJs_Function_1086_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'Function':PyJs_Function_1086_, u'arguments':arguments}, var)
+ var.registers([u'node', u'body', u'pushDefNode', u'right', u'lastNonDefaultParam', u'i', u'argsIdentifier', u'_i2', u'param', u'_param', u'state', u'declar', u'params', u'path', u'scope', u'placeholder', u'left'])
+ @Js
+ def PyJsHoisted_pushDefNode_(left, right, i, this, arguments, var=var):
+ var = Scope({u'i':i, u'this':this, u'right':right, u'arguments':arguments, u'left':left}, var)
+ var.registers([u'i', u'defNode', u'right', u'left'])
+ PyJs_Object_1088_ = Js({u'VARIABLE_NAME':var.get(u'left'),u'DEFAULT_VALUE':var.get(u'right'),u'ARGUMENT_KEY':var.get(u't').callprop(u'numericLiteral', var.get(u'i')),u'ARGUMENTS':var.get(u'argsIdentifier')})
+ var.put(u'defNode', var.get(u'buildDefaultParam')(PyJs_Object_1088_))
+ var.get(u'defNode').put(u'_blockHoist', (var.get(u'node').get(u'params').get(u'length')-var.get(u'i')))
+ var.get(u'body').callprop(u'push', var.get(u'defNode'))
+ PyJsHoisted_pushDefNode_.func_name = u'pushDefNode'
+ var.put(u'pushDefNode', PyJsHoisted_pushDefNode_)
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ if var.get(u'hasDefaults')(var.get(u'node')).neg():
+ return var.get('undefined')
+ var.get(u'path').callprop(u'ensureBlock')
+ PyJs_Object_1087_ = Js({u'iife':Js(False),u'scope':var.get(u'scope')})
+ var.put(u'state', PyJs_Object_1087_)
+ var.put(u'body', Js([]))
+ var.put(u'argsIdentifier', var.get(u't').callprop(u'identifier', Js(u'arguments')))
+ var.get(u'argsIdentifier').put(u'_shadowedFunctionLiteral', var.get(u'path'))
+ pass
+ var.put(u'lastNonDefaultParam', PyJsComma(Js(0.0),var.get(u'_babelHelperGetFunctionArity2').get(u'default'))(var.get(u'node')))
+ var.put(u'params', var.get(u'path').callprop(u'get', Js(u'params')))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'lastNonDefaultParam')) or var.get(u'left').callprop(u'isPattern')):
+ var.put(u'placeholder', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'x')))
+ var.get(u'placeholder').put(u'_isDefaultPlaceholder', var.get(u'true'))
+ var.get(u'node').get(u'params').put(var.get(u'i'), var.get(u'placeholder'))
+ else:
+ var.get(u'node').get(u'params').put(var.get(u'i'), var.get(u'left').get(u'node'))
+ if var.get(u'state').get(u'iife').neg():
+ if (var.get(u'right').callprop(u'isIdentifier') and var.get(u'isSafeBinding')(var.get(u'scope'), var.get(u'right').get(u'node')).neg()):
+ var.get(u'state').put(u'iife', var.get(u'true'))
+ else:
+ var.get(u'right').callprop(u'traverse', var.get(u'iifeVisitor'), var.get(u'state'))
+ var.get(u'pushDefNode')(var.get(u'left').get(u'node'), var.get(u'right').get(u'node'), var.get(u'i'))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ #for JS loop
+ var.put(u'_i2', (var.get(u'lastNonDefaultParam')+Js(1.0)))
+ while (var.get(u'_i2')=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'param', var.get(u'_ref'))
+ if (var.get(u'param').callprop(u'isRestElement') or var.get(u'param').callprop(u'isAssignmentPattern')):
+ var.get(u'path').callprop(u'arrowFunctionToShadowed')
+ break
+
+ PyJs_ArrowFunctionExpression_1099_._set_name(u'ArrowFunctionExpression')
+ PyJs_Object_1098_ = Js({u'ArrowFunctionExpression':PyJs_ArrowFunctionExpression_1099_})
+ PyJs_Object_1097_ = Js({u'visitor':var.get(u'_babelTraverse').get(u'visitors').callprop(u'merge', Js([PyJs_Object_1098_, var.get(u'destructuring').get(u'visitor'), var.get(u'rest').get(u'visitor'), var.get(u'def').get(u'visitor')]))})
+ return PyJs_Object_1097_
+ PyJs_anonymous_1096_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1096_)
+ var.put(u'_babelTraverse', var.get(u'require')(Js(u'babel-traverse')))
+ var.put(u'_destructuring', var.get(u'require')(Js(u'./destructuring')))
+ var.put(u'destructuring', var.get(u'_interopRequireWildcard')(var.get(u'_destructuring')))
+ var.put(u'_default', var.get(u'require')(Js(u'./default')))
+ var.put(u'def', var.get(u'_interopRequireWildcard')(var.get(u'_default')))
+ var.put(u'_rest', var.get(u'require')(Js(u'./rest')))
+ var.put(u'rest', var.get(u'_interopRequireWildcard')(var.get(u'_rest')))
+ pass
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1095_._set_name(u'anonymous')
+PyJs_Object_1102_ = Js({u'./default':Js(77.0),u'./destructuring':Js(78.0),u'./rest':Js(80.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-traverse':Js(225.0)})
+@Js
+def PyJs_anonymous_1103_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'restIndexImpure', u'exports', u'optimiseLengthGetter', u'hasRest', u'_interopRequireWildcard', u'visitor', u'require', u'_babelTypes', u'_babelTemplate', u'module', u'restIndex', u'buildRest', u'_babelTemplate2', u't', u'_interopRequireDefault', u'restLength', u'_getIterator2', u'_getIterator3', u'optimiseIndexGetter', u'memberExpressionOptimisationVisitor'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1105_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1105_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_optimiseLengthGetter_(path, argsId, offset, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'argsId':argsId, u'offset':offset}, var)
+ var.registers([u'path', u'argsId', u'offset'])
+ if var.get(u'offset'):
+ PyJs_Object_1121_ = Js({u'ARGUMENTS':var.get(u'argsId'),u'OFFSET':var.get(u't').callprop(u'numericLiteral', var.get(u'offset'))})
+ var.get(u'path').get(u'parentPath').callprop(u'replaceWith', var.get(u'restLength')(PyJs_Object_1121_))
+ else:
+ var.get(u'path').callprop(u'replaceWith', var.get(u'argsId'))
+ PyJsHoisted_optimiseLengthGetter_.func_name = u'optimiseLengthGetter'
+ var.put(u'optimiseLengthGetter', PyJsHoisted_optimiseLengthGetter_)
+ @Js
+ def PyJsHoisted_optimiseIndexGetter_(path, argsId, offset, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'argsId':argsId, u'offset':offset}, var)
+ var.registers([u'index', u'temp', u'argsId', u'offset', u'path', u'scope'])
+ var.put(u'index', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u't').callprop(u'isNumericLiteral', var.get(u'path').get(u'parent').get(u'property')):
+ var.put(u'index', var.get(u't').callprop(u'numericLiteral', (var.get(u'path').get(u'parent').get(u'property').get(u'value')+var.get(u'offset'))))
+ else:
+ if PyJsStrictEq(var.get(u'offset'),Js(0.0)):
+ var.put(u'index', var.get(u'path').get(u'parent').get(u'property'))
+ else:
+ var.put(u'index', var.get(u't').callprop(u'binaryExpression', Js(u'+'), var.get(u'path').get(u'parent').get(u'property'), var.get(u't').callprop(u'numericLiteral', var.get(u'offset'))))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ if var.get(u'scope').callprop(u'isPure', var.get(u'index')).neg():
+ var.put(u'temp', var.get(u'scope').callprop(u'generateUidIdentifierBasedOnNode', var.get(u'index')))
+ PyJs_Object_1118_ = Js({u'id':var.get(u'temp'),u'kind':Js(u'var')})
+ var.get(u'scope').callprop(u'push', PyJs_Object_1118_)
+ PyJs_Object_1119_ = Js({u'ARGUMENTS':var.get(u'argsId'),u'INDEX':var.get(u'index'),u'REF':var.get(u'temp')})
+ var.get(u'path').get(u'parentPath').callprop(u'replaceWith', var.get(u'restIndexImpure')(PyJs_Object_1119_))
+ else:
+ PyJs_Object_1120_ = Js({u'ARGUMENTS':var.get(u'argsId'),u'INDEX':var.get(u'index')})
+ var.get(u'path').get(u'parentPath').callprop(u'replaceWith', var.get(u'restIndex')(PyJs_Object_1120_))
+ PyJsHoisted_optimiseIndexGetter_.func_name = u'optimiseIndexGetter'
+ var.put(u'optimiseIndexGetter', PyJsHoisted_optimiseIndexGetter_)
+ @Js
+ def PyJsHoisted_hasRest_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return var.get(u't').callprop(u'isRestElement', var.get(u'node').get(u'params').get((var.get(u'node').get(u'params').get(u'length')-Js(1.0))))
+ PyJsHoisted_hasRest_.func_name = u'hasRest'
+ var.put(u'hasRest', PyJsHoisted_hasRest_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1104_ = Js({})
+ var.put(u'newObj', PyJs_Object_1104_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'visitor', var.get(u'undefined'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_babelTemplate', var.get(u'require')(Js(u'babel-template')))
+ var.put(u'_babelTemplate2', var.get(u'_interopRequireDefault')(var.get(u'_babelTemplate')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ var.put(u'buildRest', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n for (var LEN = ARGUMENTS.length,\n ARRAY = Array(ARRAY_LEN),\n KEY = START;\n KEY < LEN;\n KEY++) {\n ARRAY[ARRAY_KEY] = ARGUMENTS[KEY];\n }\n')))
+ var.put(u'restIndex', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n ARGUMENTS.length <= INDEX ? undefined : ARGUMENTS[INDEX]\n')))
+ var.put(u'restIndexImpure', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n REF = INDEX, ARGUMENTS.length <= REF ? undefined : ARGUMENTS[REF]\n')))
+ var.put(u'restLength', PyJsComma(Js(0.0),var.get(u'_babelTemplate2').get(u'default'))(Js(u'\n ARGUMENTS.length <= OFFSET ? 0 : ARGUMENTS.length - OFFSET\n')))
+ @Js
+ def PyJs_Scope_1107_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'Scope':PyJs_Scope_1107_}, var)
+ var.registers([u'path', u'state'])
+ if var.get(u'path').get(u'scope').callprop(u'bindingIdentifierEquals', var.get(u'state').get(u'name'), var.get(u'state').get(u'outerBinding')).neg():
+ var.get(u'path').callprop(u'skip')
+ PyJs_Scope_1107_._set_name(u'Scope')
+ @Js
+ def PyJs_Flow_1108_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'Flow':PyJs_Flow_1108_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ if var.get(u'path').callprop(u'isTypeCastExpression'):
+ return var.get('undefined')
+ var.get(u'path').callprop(u'skip')
+ PyJs_Flow_1108_._set_name(u'Flow')
+ @Js
+ def PyJs_FunctionClassProperty_1109_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'FunctionClassProperty':PyJs_FunctionClassProperty_1109_}, var)
+ var.registers([u'oldNoOptimise', u'state', u'path'])
+ var.put(u'oldNoOptimise', var.get(u'state').get(u'noOptimise'))
+ var.get(u'state').put(u'noOptimise', var.get(u'true'))
+ var.get(u'path').callprop(u'traverse', var.get(u'memberExpressionOptimisationVisitor'), var.get(u'state'))
+ var.get(u'state').put(u'noOptimise', var.get(u'oldNoOptimise'))
+ var.get(u'path').callprop(u'skip')
+ PyJs_FunctionClassProperty_1109_._set_name(u'FunctionClassProperty')
+ @Js
+ def PyJs_ReferencedIdentifier_1110_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'ReferencedIdentifier':PyJs_ReferencedIdentifier_1110_, u'arguments':arguments}, var)
+ var.registers([u'node', u'grandparentPath', u'argsOptEligible', u'state', u'call', u'parentPath', u'path'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'arguments')):
+ var.get(u'state').put(u'deopted', var.get(u'true'))
+ if PyJsStrictNeq(var.get(u'node').get(u'name'),var.get(u'state').get(u'name')):
+ return var.get('undefined')
+ if var.get(u'state').get(u'noOptimise'):
+ var.get(u'state').put(u'deopted', var.get(u'true'))
+ else:
+ var.put(u'parentPath', var.get(u'path').get(u'parentPath'))
+ PyJs_Object_1111_ = Js({u'object':var.get(u'node')})
+ if var.get(u'parentPath').callprop(u'isMemberExpression', PyJs_Object_1111_):
+ var.put(u'grandparentPath', var.get(u'parentPath').get(u'parentPath'))
+ def PyJs_LONG_1113_(var=var):
+ PyJs_Object_1112_ = Js({u'operator':Js(u'delete')})
+ return (((((var.get(u'grandparentPath').callprop(u'isAssignmentExpression') and PyJsStrictEq(var.get(u'parentPath').get(u'node'),var.get(u'grandparentPath').get(u'node').get(u'left'))) or var.get(u'grandparentPath').callprop(u'isLVal')) or var.get(u'grandparentPath').callprop(u'isForXStatement')) or var.get(u'grandparentPath').callprop(u'isUpdateExpression')) or var.get(u'grandparentPath').callprop(u'isUnaryExpression', PyJs_Object_1112_))
+ var.put(u'argsOptEligible', (var.get(u'state').get(u'deopted').neg() and (PyJs_LONG_1113_() or ((var.get(u'grandparentPath').callprop(u'isCallExpression') or var.get(u'grandparentPath').callprop(u'isNewExpression')) and PyJsStrictEq(var.get(u'parentPath').get(u'node'),var.get(u'grandparentPath').get(u'node').get(u'callee')))).neg()))
+ if var.get(u'argsOptEligible'):
+ if var.get(u'parentPath').get(u'node').get(u'computed'):
+ if var.get(u'parentPath').callprop(u'get', Js(u'property')).callprop(u'isBaseType', Js(u'number')):
+ PyJs_Object_1114_ = Js({u'cause':Js(u'indexGetter'),u'path':var.get(u'path')})
+ var.get(u'state').get(u'candidates').callprop(u'push', PyJs_Object_1114_)
+ return var.get('undefined')
+ else:
+ if PyJsStrictEq(var.get(u'parentPath').get(u'node').get(u'property').get(u'name'),Js(u'length')):
+ PyJs_Object_1115_ = Js({u'cause':Js(u'lengthGetter'),u'path':var.get(u'path')})
+ var.get(u'state').get(u'candidates').callprop(u'push', PyJs_Object_1115_)
+ return var.get('undefined')
+ if (PyJsStrictEq(var.get(u'state').get(u'offset'),Js(0.0)) and var.get(u'parentPath').callprop(u'isSpreadElement')):
+ var.put(u'call', var.get(u'parentPath').get(u'parentPath'))
+ if (var.get(u'call').callprop(u'isCallExpression') and PyJsStrictEq(var.get(u'call').get(u'node').get(u'arguments').get(u'length'),Js(1.0))):
+ PyJs_Object_1116_ = Js({u'cause':Js(u'argSpread'),u'path':var.get(u'path')})
+ var.get(u'state').get(u'candidates').callprop(u'push', PyJs_Object_1116_)
+ return var.get('undefined')
+ var.get(u'state').get(u'references').callprop(u'push', var.get(u'path'))
+ PyJs_ReferencedIdentifier_1110_._set_name(u'ReferencedIdentifier')
+ @Js
+ def PyJs_BindingIdentifier_1117_(_ref, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'BindingIdentifier':PyJs_BindingIdentifier_1117_, u'state':state, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref', u'state'])
+ var.put(u'node', var.get(u'_ref').get(u'node'))
+ if PyJsStrictEq(var.get(u'node').get(u'name'),var.get(u'state').get(u'name')):
+ var.get(u'state').put(u'deopted', var.get(u'true'))
+ PyJs_BindingIdentifier_1117_._set_name(u'BindingIdentifier')
+ PyJs_Object_1106_ = Js({u'Scope':PyJs_Scope_1107_,u'Flow':PyJs_Flow_1108_,u'Function|ClassProperty':PyJs_FunctionClassProperty_1109_,u'ReferencedIdentifier':PyJs_ReferencedIdentifier_1110_,u'BindingIdentifier':PyJs_BindingIdentifier_1117_})
+ var.put(u'memberExpressionOptimisationVisitor', PyJs_Object_1106_)
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_Function_1123_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'Function':PyJs_Function_1123_, u'arguments':arguments}, var)
+ var.registers([u'node', u'arrLen', u'_isArray', u'_iterator', u'key', u'arrKey', u'_ref3', u'_ref2', u'argsId', u'len', u'start', u'state', u'rest', u'_i', u'target', u'scope', u'path', u'cause', u'loop', u'_path'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ if var.get(u'hasRest')(var.get(u'node')).neg():
+ return var.get('undefined')
+ var.put(u'rest', var.get(u'node').get(u'params').callprop(u'pop').get(u'argument'))
+ var.put(u'argsId', var.get(u't').callprop(u'identifier', Js(u'arguments')))
+ var.get(u'argsId').put(u'_shadowedFunctionLiteral', var.get(u'path'))
+ PyJs_Object_1124_ = Js({u'references':Js([]),u'offset':var.get(u'node').get(u'params').get(u'length'),u'argumentsNode':var.get(u'argsId'),u'outerBinding':var.get(u'scope').callprop(u'getBindingIdentifier', var.get(u'rest').get(u'name')),u'candidates':Js([]),u'name':var.get(u'rest').get(u'name'),u'deopted':Js(False)})
+ var.put(u'state', PyJs_Object_1124_)
+ var.get(u'path').callprop(u'traverse', var.get(u'memberExpressionOptimisationVisitor'), var.get(u'state'))
+ if (var.get(u'state').get(u'deopted').neg() and var.get(u'state').get(u'references').get(u'length').neg()):
+ #for JS loop
+ var.put(u'_iterator', var.get(u'state').get(u'candidates'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i').get(u'value'))
+ var.put(u'_ref3', var.get(u'_ref2'))
+ var.put(u'_path', var.get(u'_ref3').get(u'path'))
+ var.put(u'cause', var.get(u'_ref3').get(u'cause'))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'cause'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'indexGetter')):
+ SWITCHED = True
+ var.get(u'optimiseIndexGetter')(var.get(u'_path'), var.get(u'argsId'), var.get(u'state').get(u'offset'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'lengthGetter')):
+ SWITCHED = True
+ var.get(u'optimiseLengthGetter')(var.get(u'_path'), var.get(u'argsId'), var.get(u'state').get(u'offset'))
+ break
+ if True:
+ SWITCHED = True
+ var.get(u'_path').callprop(u'replaceWith', var.get(u'argsId'))
+ SWITCHED = True
+ break
+
+ return var.get('undefined')
+ @Js
+ def PyJs_anonymous_1125_(_ref4, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref4':_ref4, u'arguments':arguments}, var)
+ var.registers([u'path', u'_ref4'])
+ var.put(u'path', var.get(u'_ref4').get(u'path'))
+ return var.get(u'path')
+ PyJs_anonymous_1125_._set_name(u'anonymous')
+ var.get(u'state').put(u'references', var.get(u'state').get(u'references').callprop(u'concat', var.get(u'state').get(u'candidates').callprop(u'map', PyJs_anonymous_1125_)))
+ var.get(u'state').put(u'deopted', (var.get(u'state').get(u'deopted') or var.get(u'node').get(u'shadow').neg().neg()))
+ var.put(u'start', var.get(u't').callprop(u'numericLiteral', var.get(u'node').get(u'params').get(u'length')))
+ var.put(u'key', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'key')))
+ var.put(u'len', var.get(u'scope').callprop(u'generateUidIdentifier', Js(u'len')))
+ var.put(u'arrKey', var.get(u'key'))
+ var.put(u'arrLen', var.get(u'len'))
+ if var.get(u'node').get(u'params').get(u'length'):
+ var.put(u'arrKey', var.get(u't').callprop(u'binaryExpression', Js(u'-'), var.get(u'key'), var.get(u'start')))
+ var.put(u'arrLen', var.get(u't').callprop(u'conditionalExpression', var.get(u't').callprop(u'binaryExpression', Js(u'>'), var.get(u'len'), var.get(u'start')), var.get(u't').callprop(u'binaryExpression', Js(u'-'), var.get(u'len'), var.get(u'start')), var.get(u't').callprop(u'numericLiteral', Js(0.0))))
+ PyJs_Object_1126_ = Js({u'ARGUMENTS':var.get(u'argsId'),u'ARRAY_KEY':var.get(u'arrKey'),u'ARRAY_LEN':var.get(u'arrLen'),u'START':var.get(u'start'),u'ARRAY':var.get(u'rest'),u'KEY':var.get(u'key'),u'LEN':var.get(u'len')})
+ var.put(u'loop', var.get(u'buildRest')(PyJs_Object_1126_))
+ if var.get(u'state').get(u'deopted'):
+ var.get(u'loop').put(u'_blockHoist', (var.get(u'node').get(u'params').get(u'length')+Js(1.0)))
+ var.get(u'node').get(u'body').get(u'body').callprop(u'unshift', var.get(u'loop'))
+ else:
+ var.get(u'loop').put(u'_blockHoist', Js(1.0))
+ var.put(u'target', var.get(u'path').callprop(u'getEarliestCommonAncestorFrom', var.get(u'state').get(u'references')).callprop(u'getStatementParent'))
+ @Js
+ def PyJs_anonymous_1127_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ if var.get(u'path').callprop(u'isLoop'):
+ var.put(u'target', var.get(u'path'))
+ else:
+ return var.get(u'path').callprop(u'isFunction')
+ PyJs_anonymous_1127_._set_name(u'anonymous')
+ var.get(u'target').callprop(u'findParent', PyJs_anonymous_1127_)
+ var.get(u'target').callprop(u'insertBefore', var.get(u'loop'))
+ PyJs_Function_1123_._set_name(u'Function')
+ PyJs_Object_1122_ = Js({u'Function':PyJs_Function_1123_})
+ var.put(u'visitor', var.get(u'exports').put(u'visitor', PyJs_Object_1122_))
+PyJs_anonymous_1103_._set_name(u'anonymous')
+PyJs_Object_1128_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-template':Js(221.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1129_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_interopRequireWildcard', u'require', u'_babelTypes', u'module', u't'])
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1135_ = Js({})
+ var.put(u'newObj', PyJs_Object_1135_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_1130_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_ObjectMethod_1133_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'ObjectMethod':PyJs_ObjectMethod_1133_}, var)
+ var.registers([u'node', u'path', u'func'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if PyJsStrictEq(var.get(u'node').get(u'kind'),Js(u'method')):
+ var.put(u'func', var.get(u't').callprop(u'functionExpression', var.get(u"null"), var.get(u'node').get(u'params'), var.get(u'node').get(u'body'), var.get(u'node').get(u'generator'), var.get(u'node').get(u'async')))
+ var.get(u'func').put(u'returnType', var.get(u'node').get(u'returnType'))
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'objectProperty', var.get(u'node').get(u'key'), var.get(u'func'), var.get(u'node').get(u'computed')))
+ PyJs_ObjectMethod_1133_._set_name(u'ObjectMethod')
+ @Js
+ def PyJs_ObjectProperty_1134_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'ObjectProperty':PyJs_ObjectProperty_1134_, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref'])
+ var.put(u'node', var.get(u'_ref').get(u'node'))
+ if var.get(u'node').get(u'shorthand'):
+ var.get(u'node').put(u'shorthand', Js(False))
+ PyJs_ObjectProperty_1134_._set_name(u'ObjectProperty')
+ PyJs_Object_1132_ = Js({u'ObjectMethod':PyJs_ObjectMethod_1133_,u'ObjectProperty':PyJs_ObjectProperty_1134_})
+ PyJs_Object_1131_ = Js({u'visitor':PyJs_Object_1132_})
+ return PyJs_Object_1131_
+ PyJs_anonymous_1130_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1130_)
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1129_._set_name(u'anonymous')
+PyJs_Object_1136_ = Js({u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1137_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1146_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1146_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ @Js
+ def PyJs_anonymous_1138_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'_ref', u'hasSpread', u't', u'getSpreadLiteral', u'build'])
+ @Js
+ def PyJsHoisted_hasSpread_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'i', u'nodes'])
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i').get(u'value'))
+ var.put(u'prop', var.get(u'_ref2'))
+ if var.get(u't').callprop(u'isSpreadElement', var.get(u'prop')):
+ var.get(u'push')()
+ var.get(u'nodes').callprop(u'push', var.get(u'getSpreadLiteral')(var.get(u'prop'), var.get(u'scope'), var.get(u'state')))
+ else:
+ var.get(u'_props').callprop(u'push', var.get(u'prop'))
+
+ var.get(u'push')()
+ return var.get(u'nodes')
+ PyJsHoisted_build_.func_name = u'build'
+ var.put(u'build', PyJsHoisted_build_)
+ @Js
+ def PyJsHoisted_getSpreadLiteral_(spread, scope, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'scope':scope, u'state':state, u'spread':spread, u'arguments':arguments}, var)
+ var.registers([u'scope', u'state', u'spread'])
+ PyJs_Object_1139_ = Js({u'name':Js(u'arguments')})
+ if (var.get(u'state').get(u'opts').get(u'loose') and var.get(u't').callprop(u'isIdentifier', var.get(u'spread').get(u'argument'), PyJs_Object_1139_).neg()):
+ return var.get(u'spread').get(u'argument')
+ else:
+ return var.get(u'scope').callprop(u'toArray', var.get(u'spread').get(u'argument'), var.get(u'true'))
+ PyJsHoisted_getSpreadLiteral_.func_name = u'getSpreadLiteral'
+ var.put(u'getSpreadLiteral', PyJsHoisted_getSpreadLiteral_)
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_ArrayExpression_1142_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'ArrayExpression':PyJs_ArrayExpression_1142_}, var)
+ var.registers([u'node', u'elements', u'state', u'path', u'scope', u'nodes', u'first'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'elements', var.get(u'node').get(u'elements'))
+ if var.get(u'hasSpread')(var.get(u'elements')).neg():
+ return var.get('undefined')
+ var.put(u'nodes', var.get(u'build')(var.get(u'elements'), var.get(u'scope'), var.get(u'state')))
+ var.put(u'first', var.get(u'nodes').callprop(u'shift'))
+ if var.get(u't').callprop(u'isArrayExpression', var.get(u'first')).neg():
+ var.get(u'nodes').callprop(u'unshift', var.get(u'first'))
+ var.put(u'first', var.get(u't').callprop(u'arrayExpression', Js([])))
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'memberExpression', var.get(u'first'), var.get(u't').callprop(u'identifier', Js(u'concat'))), var.get(u'nodes')))
+ PyJs_ArrayExpression_1142_._set_name(u'ArrayExpression')
+ @Js
+ def PyJs_CallExpression_1143_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'CallExpression':PyJs_CallExpression_1143_}, var)
+ var.registers([u'node', u'temp', u'contextLiteral', u'args', u'calleePath', u'state', u'path', u'scope', u'nodes', u'callee', u'first'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'args', var.get(u'node').get(u'arguments'))
+ if var.get(u'hasSpread')(var.get(u'args')).neg():
+ return var.get('undefined')
+ var.put(u'calleePath', var.get(u'path').callprop(u'get', Js(u'callee')))
+ if var.get(u'calleePath').callprop(u'isSuper'):
+ return var.get('undefined')
+ var.put(u'contextLiteral', var.get(u't').callprop(u'identifier', Js(u'undefined')))
+ var.get(u'node').put(u'arguments', Js([]))
+ var.put(u'nodes', PyJsComma(Js(0.0), Js(None)))
+ if (PyJsStrictEq(var.get(u'args').get(u'length'),Js(1.0)) and PyJsStrictEq(var.get(u'args').get(u'0').get(u'argument').get(u'name'),Js(u'arguments'))):
+ var.put(u'nodes', Js([var.get(u'args').get(u'0').get(u'argument')]))
+ else:
+ var.put(u'nodes', var.get(u'build')(var.get(u'args'), var.get(u'scope'), var.get(u'state')))
+ var.put(u'first', var.get(u'nodes').callprop(u'shift'))
+ if var.get(u'nodes').get(u'length'):
+ var.get(u'node').get(u'arguments').callprop(u'push', var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'memberExpression', var.get(u'first'), var.get(u't').callprop(u'identifier', Js(u'concat'))), var.get(u'nodes')))
+ else:
+ var.get(u'node').get(u'arguments').callprop(u'push', var.get(u'first'))
+ var.put(u'callee', var.get(u'node').get(u'callee'))
+ if var.get(u'calleePath').callprop(u'isMemberExpression'):
+ var.put(u'temp', var.get(u'scope').callprop(u'maybeGenerateMemoised', var.get(u'callee').get(u'object')))
+ if var.get(u'temp'):
+ var.get(u'callee').put(u'object', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'temp'), var.get(u'callee').get(u'object')))
+ var.put(u'contextLiteral', var.get(u'temp'))
+ else:
+ var.put(u'contextLiteral', var.get(u'callee').get(u'object'))
+ var.get(u't').callprop(u'appendToMemberExpression', var.get(u'callee'), var.get(u't').callprop(u'identifier', Js(u'apply')))
+ else:
+ var.get(u'node').put(u'callee', var.get(u't').callprop(u'memberExpression', var.get(u'node').get(u'callee'), var.get(u't').callprop(u'identifier', Js(u'apply'))))
+ if var.get(u't').callprop(u'isSuper', var.get(u'contextLiteral')):
+ var.put(u'contextLiteral', var.get(u't').callprop(u'thisExpression'))
+ var.get(u'node').get(u'arguments').callprop(u'unshift', var.get(u'contextLiteral'))
+ PyJs_CallExpression_1143_._set_name(u'CallExpression')
+ @Js
+ def PyJs_NewExpression_1144_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'NewExpression':PyJs_NewExpression_1144_}, var)
+ var.registers([u'node', u'args', u'state', u'context', u'path', u'scope', u'nodes'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'args', var.get(u'node').get(u'arguments'))
+ if var.get(u'hasSpread')(var.get(u'args')).neg():
+ return var.get('undefined')
+ var.put(u'nodes', var.get(u'build')(var.get(u'args'), var.get(u'scope'), var.get(u'state')))
+ var.put(u'context', var.get(u't').callprop(u'arrayExpression', Js([var.get(u't').callprop(u'nullLiteral')])))
+ var.put(u'args', var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'memberExpression', var.get(u'context'), var.get(u't').callprop(u'identifier', Js(u'concat'))), var.get(u'nodes')))
+ def PyJs_LONG_1145_(var=var):
+ return var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'identifier', Js(u'Function')), var.get(u't').callprop(u'identifier', Js(u'prototype'))), var.get(u't').callprop(u'identifier', Js(u'bind'))), var.get(u't').callprop(u'identifier', Js(u'apply'))), Js([var.get(u'node').get(u'callee'), var.get(u'args')]))
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'newExpression', PyJs_LONG_1145_(), Js([])))
+ PyJs_NewExpression_1144_._set_name(u'NewExpression')
+ PyJs_Object_1141_ = Js({u'ArrayExpression':PyJs_ArrayExpression_1142_,u'CallExpression':PyJs_CallExpression_1143_,u'NewExpression':PyJs_NewExpression_1144_})
+ PyJs_Object_1140_ = Js({u'visitor':PyJs_Object_1141_})
+ return PyJs_Object_1140_
+ PyJs_anonymous_1138_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1138_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1137_._set_name(u'anonymous')
+PyJs_Object_1147_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0)})
+@Js
+def PyJs_anonymous_1148_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'regex', u'exports', u'_babelHelperRegex', u'_interopRequireWildcard', u'require', u'_babelTypes', u'module', u't'])
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1153_ = Js({})
+ var.put(u'newObj', PyJs_Object_1153_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_1149_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_RegExpLiteral_1152_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'RegExpLiteral':PyJs_RegExpLiteral_1152_}, var)
+ var.registers([u'node', u'path'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u'regex').callprop(u'is', var.get(u'node'), Js(u'y')).neg():
+ return var.get('undefined')
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'newExpression', var.get(u't').callprop(u'identifier', Js(u'RegExp')), Js([var.get(u't').callprop(u'stringLiteral', var.get(u'node').get(u'pattern')), var.get(u't').callprop(u'stringLiteral', var.get(u'node').get(u'flags'))])))
+ PyJs_RegExpLiteral_1152_._set_name(u'RegExpLiteral')
+ PyJs_Object_1151_ = Js({u'RegExpLiteral':PyJs_RegExpLiteral_1152_})
+ PyJs_Object_1150_ = Js({u'visitor':PyJs_Object_1151_})
+ return PyJs_Object_1150_
+ PyJs_anonymous_1149_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1149_)
+ var.put(u'_babelHelperRegex', var.get(u'require')(Js(u'babel-helper-regex')))
+ var.put(u'regex', var.get(u'_interopRequireWildcard')(var.get(u'_babelHelperRegex')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1148_._set_name(u'anonymous')
+PyJs_Object_1154_ = Js({u'babel-helper-regex':Js(53.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1155_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1163_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1163_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ @Js
+ def PyJs_anonymous_1156_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'_ref', u'isString', u'buildBinaryExpression', u't'])
+ @Js
+ def PyJsHoisted_isString_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return (var.get(u't').callprop(u'isLiteral', var.get(u'node')) and PyJsStrictEq(var.get(u'node').get(u'value').typeof(),Js(u'string')))
+ PyJsHoisted_isString_.func_name = u'isString'
+ var.put(u'isString', PyJsHoisted_isString_)
+ @Js
+ def PyJsHoisted_buildBinaryExpression_(left, right, this, arguments, var=var):
+ var = Scope({u'this':this, u'right':right, u'arguments':arguments, u'left':left}, var)
+ var.registers([u'right', u'left'])
+ return var.get(u't').callprop(u'binaryExpression', Js(u'+'), var.get(u'left'), var.get(u'right'))
+ PyJsHoisted_buildBinaryExpression_.func_name = u'buildBinaryExpression'
+ var.put(u'buildBinaryExpression', PyJsHoisted_buildBinaryExpression_)
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ pass
+ pass
+ @Js
+ def PyJs_TaggedTemplateExpression_1159_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'TaggedTemplateExpression':PyJs_TaggedTemplateExpression_1159_, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'templateObject', u'templateName', u'args', u'_ref2', u'elem', u'raw', u'quasi', u'state', u'_i', u'path', u'strings'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'quasi', var.get(u'node').get(u'quasi'))
+ var.put(u'args', Js([]))
+ var.put(u'strings', Js([]))
+ var.put(u'raw', Js([]))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'quasi').get(u'quasis'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i').get(u'value'))
+ var.put(u'elem', var.get(u'_ref2'))
+ var.get(u'strings').callprop(u'push', var.get(u't').callprop(u'stringLiteral', var.get(u'elem').get(u'value').get(u'cooked')))
+ var.get(u'raw').callprop(u'push', var.get(u't').callprop(u'stringLiteral', var.get(u'elem').get(u'value').get(u'raw')))
+
+ var.put(u'strings', var.get(u't').callprop(u'arrayExpression', var.get(u'strings')))
+ var.put(u'raw', var.get(u't').callprop(u'arrayExpression', var.get(u'raw')))
+ var.put(u'templateName', Js(u'taggedTemplateLiteral'))
+ if var.get(u'state').get(u'opts').get(u'loose'):
+ var.put(u'templateName', Js(u'Loose'), u'+')
+ var.put(u'templateObject', var.get(u'state').get(u'file').callprop(u'addTemplateObject', var.get(u'templateName'), var.get(u'strings'), var.get(u'raw')))
+ var.get(u'args').callprop(u'push', var.get(u'templateObject'))
+ var.put(u'args', var.get(u'args').callprop(u'concat', var.get(u'quasi').get(u'expressions')))
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'callExpression', var.get(u'node').get(u'tag'), var.get(u'args')))
+ PyJs_TaggedTemplateExpression_1159_._set_name(u'TaggedTemplateExpression')
+ @Js
+ def PyJs_TemplateLiteral_1160_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'TemplateLiteral':PyJs_TemplateLiteral_1160_, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref4', u'_isArray3', u'_isArray2', u'expr', u'_i3', u'_ref3', u'_i2', u'elem', u'state', u'path', u'nodes', u'root', u'expressions', u'_iterator3', u'_iterator2'])
+ var.put(u'nodes', Js([]))
+ var.put(u'expressions', var.get(u'path').callprop(u'get', Js(u'expressions')))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'path').get(u'node').get(u'quasis'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i2').get(u'value'))
+ var.put(u'elem', var.get(u'_ref3'))
+ var.get(u'nodes').callprop(u'push', var.get(u't').callprop(u'stringLiteral', var.get(u'elem').get(u'value').get(u'cooked')))
+ var.put(u'expr', var.get(u'expressions').callprop(u'shift'))
+ if var.get(u'expr'):
+ if ((var.get(u'state').get(u'opts').get(u'spec') and var.get(u'expr').callprop(u'isBaseType', Js(u'string')).neg()) and var.get(u'expr').callprop(u'isBaseType', Js(u'number')).neg()):
+ var.get(u'nodes').callprop(u'push', var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'identifier', Js(u'String')), Js([var.get(u'expr').get(u'node')])))
+ else:
+ var.get(u'nodes').callprop(u'push', var.get(u'expr').get(u'node'))
+
+ @Js
+ def PyJs_anonymous_1161_(n, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'n':n}, var)
+ var.registers([u'n'])
+ PyJs_Object_1162_ = Js({u'value':Js(u'')})
+ return var.get(u't').callprop(u'isLiteral', var.get(u'n'), PyJs_Object_1162_).neg()
+ PyJs_anonymous_1161_._set_name(u'anonymous')
+ var.put(u'nodes', var.get(u'nodes').callprop(u'filter', PyJs_anonymous_1161_))
+ if (var.get(u'isString')(var.get(u'nodes').get(u'0')).neg() and var.get(u'isString')(var.get(u'nodes').get(u'1')).neg()):
+ var.get(u'nodes').callprop(u'unshift', var.get(u't').callprop(u'stringLiteral', Js(u'')))
+ if (var.get(u'nodes').get(u'length')>Js(1.0)):
+ var.put(u'root', var.get(u'buildBinaryExpression')(var.get(u'nodes').callprop(u'shift'), var.get(u'nodes').callprop(u'shift')))
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'nodes'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i3').get(u'value'))
+ var.put(u'node', var.get(u'_ref4'))
+ var.put(u'root', var.get(u'buildBinaryExpression')(var.get(u'root'), var.get(u'node')))
+
+ var.get(u'path').callprop(u'replaceWith', var.get(u'root'))
+ else:
+ var.get(u'path').callprop(u'replaceWith', var.get(u'nodes').get(u'0'))
+ PyJs_TemplateLiteral_1160_._set_name(u'TemplateLiteral')
+ PyJs_Object_1158_ = Js({u'TaggedTemplateExpression':PyJs_TaggedTemplateExpression_1159_,u'TemplateLiteral':PyJs_TemplateLiteral_1160_})
+ PyJs_Object_1157_ = Js({u'visitor':PyJs_Object_1158_})
+ return PyJs_Object_1157_
+ PyJs_anonymous_1156_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1156_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1155_._set_name(u'anonymous')
+PyJs_Object_1164_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0)})
+@Js
+def PyJs_anonymous_1165_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_symbol2', u'require', u'module', u'_symbol', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1172_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1172_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_symbol', var.get(u'require')(Js(u'babel-runtime/core-js/symbol')))
+ var.put(u'_symbol2', var.get(u'_interopRequireDefault')(var.get(u'_symbol')))
+ @Js
+ def PyJs_anonymous_1166_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'IGNORE', u'_ref', u't'])
+ var.put(u't', var.get(u'_ref').get(u'types'))
+ var.put(u'IGNORE', PyJsComma(Js(0.0),var.get(u'_symbol2').get(u'default'))())
+ @Js
+ def PyJs_Scope_1169_(_ref2, this, arguments, var=var):
+ var = Scope({u'this':this, u'Scope':PyJs_Scope_1169_, u'_ref2':_ref2, u'arguments':arguments}, var)
+ var.registers([u'scope', u'_ref2'])
+ var.put(u'scope', var.get(u'_ref2').get(u'scope'))
+ if var.get(u'scope').callprop(u'getBinding', Js(u'Symbol')).neg():
+ return var.get('undefined')
+ var.get(u'scope').callprop(u'rename', Js(u'Symbol'))
+ PyJs_Scope_1169_._set_name(u'Scope')
+ @Js
+ def PyJs_UnaryExpression_1170_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'UnaryExpression':PyJs_UnaryExpression_1170_, u'arguments':arguments}, var)
+ var.registers([u'node', u'parent', u'opposite', u'unary', u'call', u'undefLiteral', u'path'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'parent', var.get(u'path').get(u'parent'))
+ if var.get(u'node').get(var.get(u'IGNORE')):
+ return var.get('undefined')
+ @Js
+ def PyJs_anonymous_1171_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return (var.get(u'path').get(u'node') and var.get(u'path').get(u'node').get(u'_generated').neg().neg())
+ PyJs_anonymous_1171_._set_name(u'anonymous')
+ if var.get(u'path').callprop(u'find', PyJs_anonymous_1171_):
+ return var.get('undefined')
+ if (var.get(u'path').get(u'parentPath').callprop(u'isBinaryExpression') and (var.get(u't').get(u'EQUALITY_BINARY_OPERATORS').callprop(u'indexOf', var.get(u'parent').get(u'operator'))>=Js(0.0))):
+ var.put(u'opposite', var.get(u'path').callprop(u'getOpposite'))
+ if ((var.get(u'opposite').callprop(u'isLiteral') and PyJsStrictNeq(var.get(u'opposite').get(u'node').get(u'value'),Js(u'symbol'))) and PyJsStrictNeq(var.get(u'opposite').get(u'node').get(u'value'),Js(u'object'))):
+ return var.get('undefined')
+ if PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'typeof')):
+ var.put(u'call', var.get(u't').callprop(u'callExpression', var.get(u"this").callprop(u'addHelper', Js(u'typeof')), Js([var.get(u'node').get(u'argument')])))
+ if var.get(u'path').callprop(u'get', Js(u'argument')).callprop(u'isIdentifier'):
+ var.put(u'undefLiteral', var.get(u't').callprop(u'stringLiteral', Js(u'undefined')))
+ var.put(u'unary', var.get(u't').callprop(u'unaryExpression', Js(u'typeof'), var.get(u'node').get(u'argument')))
+ var.get(u'unary').put(var.get(u'IGNORE'), var.get(u'true'))
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'conditionalExpression', var.get(u't').callprop(u'binaryExpression', Js(u'==='), var.get(u'unary'), var.get(u'undefLiteral')), var.get(u'undefLiteral'), var.get(u'call')))
+ else:
+ var.get(u'path').callprop(u'replaceWith', var.get(u'call'))
+ PyJs_UnaryExpression_1170_._set_name(u'UnaryExpression')
+ PyJs_Object_1168_ = Js({u'Scope':PyJs_Scope_1169_,u'UnaryExpression':PyJs_UnaryExpression_1170_})
+ PyJs_Object_1167_ = Js({u'visitor':PyJs_Object_1168_})
+ return PyJs_Object_1167_
+ PyJs_anonymous_1166_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1166_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1165_._set_name(u'anonymous')
+PyJs_Object_1173_ = Js({u'babel-runtime/core-js/symbol':Js(105.0)})
+@Js
+def PyJs_anonymous_1174_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_regexpuCore', u'regex', u'exports', u'_interopRequireWildcard', u'require', u'_babelHelperRegex', u'module', u'_interopRequireDefault', u'_regexpuCore2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1180_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1180_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1179_ = Js({})
+ var.put(u'newObj', PyJs_Object_1179_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_1175_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_RegExpLiteral_1178_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'RegExpLiteral':PyJs_RegExpLiteral_1178_, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref'])
+ var.put(u'node', var.get(u'_ref').get(u'node'))
+ if var.get(u'regex').callprop(u'is', var.get(u'node'), Js(u'u')).neg():
+ return var.get('undefined')
+ var.get(u'node').put(u'pattern', PyJsComma(Js(0.0),var.get(u'_regexpuCore2').get(u'default'))(var.get(u'node').get(u'pattern'), var.get(u'node').get(u'flags')))
+ var.get(u'regex').callprop(u'pullFlag', var.get(u'node'), Js(u'u'))
+ PyJs_RegExpLiteral_1178_._set_name(u'RegExpLiteral')
+ PyJs_Object_1177_ = Js({u'RegExpLiteral':PyJs_RegExpLiteral_1178_})
+ PyJs_Object_1176_ = Js({u'visitor':PyJs_Object_1177_})
+ return PyJs_Object_1176_
+ PyJs_anonymous_1175_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1175_)
+ var.put(u'_regexpuCore', var.get(u'require')(Js(u'regexpu-core')))
+ var.put(u'_regexpuCore2', var.get(u'_interopRequireDefault')(var.get(u'_regexpuCore')))
+ var.put(u'_babelHelperRegex', var.get(u'require')(Js(u'babel-helper-regex')))
+ var.put(u'regex', var.get(u'_interopRequireWildcard')(var.get(u'_babelHelperRegex')))
+ pass
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1174_._set_name(u'anonymous')
+PyJs_Object_1181_ = Js({u'babel-helper-regex':Js(53.0),u'regexpu-core':Js(504.0)})
+@Js
+def PyJs_anonymous_1182_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'module', u'meta', u'_assert', u'_interopRequireDefault', u'loc', u'_typeof2', u'_typeof3', u'_stringify2', u'getDeclError', u'leap', u'Emitter', u'isValidCompletion', u'exports', u'_babelTypes', u'_interopRequireWildcard', u'_assert2', u'catchParamVisitor', u'_util', u'util', u'_meta', u'require', u'hasOwn', u'_stringify', u't', u'_leap', u'Ep'])
+ @Js
+ def PyJsHoisted_loc_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'numericLiteral', (-Js(1.0)))
+ PyJsHoisted_loc_.func_name = u'loc'
+ var.put(u'loc', PyJsHoisted_loc_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1183_ = Js({})
+ var.put(u'newObj', PyJs_Object_1183_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_isValidCompletion_(record, this, arguments, var=var):
+ var = Scope({u'this':this, u'record':record, u'arguments':arguments}, var)
+ var.registers([u'record', u'type'])
+ var.put(u'type', var.get(u'record').get(u'type'))
+ if PyJsStrictEq(var.get(u'type'),Js(u'normal')):
+ return var.get(u'hasOwn').callprop(u'call', var.get(u'record'), Js(u'target')).neg()
+ if (PyJsStrictEq(var.get(u'type'),Js(u'break')) or PyJsStrictEq(var.get(u'type'),Js(u'continue'))):
+ return (var.get(u'hasOwn').callprop(u'call', var.get(u'record'), Js(u'value')).neg() and var.get(u't').callprop(u'isLiteral', var.get(u'record').get(u'target')))
+ if (PyJsStrictEq(var.get(u'type'),Js(u'return')) or PyJsStrictEq(var.get(u'type'),Js(u'throw'))):
+ return (var.get(u'hasOwn').callprop(u'call', var.get(u'record'), Js(u'value')) and var.get(u'hasOwn').callprop(u'call', var.get(u'record'), Js(u'target')).neg())
+ return Js(False)
+ PyJsHoisted_isValidCompletion_.func_name = u'isValidCompletion'
+ var.put(u'isValidCompletion', PyJsHoisted_isValidCompletion_)
+ @Js
+ def PyJsHoisted_getDeclError_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return var.get(u'Error').create(((Js(u'all declarations should have been transformed into ')+Js(u'assignments before the Exploder began its work: '))+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'node'))))
+ PyJsHoisted_getDeclError_.func_name = u'getDeclError'
+ var.put(u'getDeclError', PyJsHoisted_getDeclError_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1184_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1184_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_Emitter_(contextId, this, arguments, var=var):
+ var = Scope({u'this':this, u'contextId':contextId, u'arguments':arguments}, var)
+ var.registers([u'contextId'])
+ var.get(u'_assert2').get(u'default').callprop(u'ok', var.get(u"this").instanceof(var.get(u'Emitter')))
+ var.get(u't').callprop(u'assertIdentifier', var.get(u'contextId'))
+ var.get(u"this").put(u'nextTempId', Js(0.0))
+ var.get(u"this").put(u'contextId', var.get(u'contextId'))
+ var.get(u"this").put(u'listing', Js([]))
+ var.get(u"this").put(u'marked', Js([var.get(u'true')]))
+ var.get(u"this").put(u'finalLoc', var.get(u'loc')())
+ var.get(u"this").put(u'tryEntries', Js([]))
+ var.get(u"this").put(u'leapManager', var.get(u'leap').get(u'LeapManager').create(var.get(u"this")))
+ PyJsHoisted_Emitter_.func_name = u'Emitter'
+ var.put(u'Emitter', PyJsHoisted_Emitter_)
+ Js(u'use strict')
+ var.put(u'_typeof2', var.get(u'require')(Js(u'babel-runtime/helpers/typeof')))
+ var.put(u'_typeof3', var.get(u'_interopRequireDefault')(var.get(u'_typeof2')))
+ var.put(u'_stringify', var.get(u'require')(Js(u'babel-runtime/core-js/json/stringify')))
+ var.put(u'_stringify2', var.get(u'_interopRequireDefault')(var.get(u'_stringify')))
+ var.put(u'_assert', var.get(u'require')(Js(u'assert')))
+ var.put(u'_assert2', var.get(u'_interopRequireDefault')(var.get(u'_assert')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ var.put(u'_leap', var.get(u'require')(Js(u'./leap')))
+ var.put(u'leap', var.get(u'_interopRequireWildcard')(var.get(u'_leap')))
+ var.put(u'_meta', var.get(u'require')(Js(u'./meta')))
+ var.put(u'meta', var.get(u'_interopRequireWildcard')(var.get(u'_meta')))
+ var.put(u'_util', var.get(u'require')(Js(u'./util')))
+ var.put(u'util', var.get(u'_interopRequireWildcard')(var.get(u'_util')))
+ pass
+ pass
+ var.put(u'hasOwn', var.get(u'Object').get(u'prototype').get(u'hasOwnProperty'))
+ pass
+ var.put(u'Ep', var.get(u'Emitter').get(u'prototype'))
+ var.get(u'exports').put(u'Emitter', var.get(u'Emitter'))
+ pass
+ @Js
+ def PyJs_anonymous_1185_(loc, this, arguments, var=var):
+ var = Scope({u'this':this, u'loc':loc, u'arguments':arguments}, var)
+ var.registers([u'index', u'loc'])
+ var.get(u't').callprop(u'assertLiteral', var.get(u'loc'))
+ var.put(u'index', var.get(u"this").get(u'listing').get(u'length'))
+ if PyJsStrictEq(var.get(u'loc').get(u'value'),(-Js(1.0))):
+ var.get(u'loc').put(u'value', var.get(u'index'))
+ else:
+ var.get(u'_assert2').get(u'default').callprop(u'strictEqual', var.get(u'loc').get(u'value'), var.get(u'index'))
+ var.get(u"this").get(u'marked').put(var.get(u'index'), var.get(u'true'))
+ return var.get(u'loc')
+ PyJs_anonymous_1185_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'mark', PyJs_anonymous_1185_)
+ @Js
+ def PyJs_anonymous_1186_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u't').callprop(u'isExpression', var.get(u'node')):
+ var.put(u'node', var.get(u't').callprop(u'expressionStatement', var.get(u'node')))
+ var.get(u't').callprop(u'assertStatement', var.get(u'node'))
+ var.get(u"this").get(u'listing').callprop(u'push', var.get(u'node'))
+ PyJs_anonymous_1186_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'emit', PyJs_anonymous_1186_)
+ @Js
+ def PyJs_anonymous_1187_(lhs, rhs, this, arguments, var=var):
+ var = Scope({u'this':this, u'rhs':rhs, u'lhs':lhs, u'arguments':arguments}, var)
+ var.registers([u'rhs', u'lhs'])
+ var.get(u"this").callprop(u'emit', var.get(u"this").callprop(u'assign', var.get(u'lhs'), var.get(u'rhs')))
+ return var.get(u'lhs')
+ PyJs_anonymous_1187_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'emitAssign', PyJs_anonymous_1187_)
+ @Js
+ def PyJs_anonymous_1188_(lhs, rhs, this, arguments, var=var):
+ var = Scope({u'this':this, u'rhs':rhs, u'lhs':lhs, u'arguments':arguments}, var)
+ var.registers([u'rhs', u'lhs'])
+ return var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'lhs'), var.get(u'rhs')))
+ PyJs_anonymous_1188_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'assign', PyJs_anonymous_1188_)
+ @Js
+ def PyJs_anonymous_1189_(name, computed, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'name':name, u'computed':computed}, var)
+ var.registers([u'name', u'computed'])
+ return var.get(u't').callprop(u'memberExpression', var.get(u"this").get(u'contextId'), (var.get(u't').callprop(u'stringLiteral', var.get(u'name')) if var.get(u'computed') else var.get(u't').callprop(u'identifier', var.get(u'name'))), var.get(u'computed').neg().neg())
+ PyJs_anonymous_1189_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'contextProperty', PyJs_anonymous_1189_)
+ @Js
+ def PyJs_anonymous_1190_(rval, this, arguments, var=var):
+ var = Scope({u'this':this, u'rval':rval, u'arguments':arguments}, var)
+ var.registers([u'rval'])
+ if var.get(u'rval'):
+ var.get(u"this").callprop(u'setReturnValue', var.get(u'rval'))
+ var.get(u"this").callprop(u'jump', var.get(u"this").get(u'finalLoc'))
+ PyJs_anonymous_1190_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'stop', PyJs_anonymous_1190_)
+ @Js
+ def PyJs_anonymous_1191_(valuePath, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'valuePath':valuePath}, var)
+ var.registers([u'valuePath'])
+ var.get(u't').callprop(u'assertExpression', var.get(u'valuePath').get(u'value'))
+ var.get(u"this").callprop(u'emitAssign', var.get(u"this").callprop(u'contextProperty', Js(u'rval')), var.get(u"this").callprop(u'explodeExpression', var.get(u'valuePath')))
+ PyJs_anonymous_1191_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'setReturnValue', PyJs_anonymous_1191_)
+ @Js
+ def PyJs_anonymous_1192_(tryLoc, assignee, this, arguments, var=var):
+ var = Scope({u'this':this, u'assignee':assignee, u'tryLoc':tryLoc, u'arguments':arguments}, var)
+ var.registers([u'assignee', u'catchCall', u'tryLoc'])
+ var.get(u't').callprop(u'assertLiteral', var.get(u'tryLoc'))
+ var.put(u'catchCall', var.get(u't').callprop(u'callExpression', var.get(u"this").callprop(u'contextProperty', Js(u'catch'), var.get(u'true')), Js([var.get(u'tryLoc')])))
+ if var.get(u'assignee'):
+ var.get(u"this").callprop(u'emitAssign', var.get(u'assignee'), var.get(u'catchCall'))
+ else:
+ var.get(u"this").callprop(u'emit', var.get(u'catchCall'))
+ PyJs_anonymous_1192_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'clearPendingException', PyJs_anonymous_1192_)
+ @Js
+ def PyJs_anonymous_1193_(toLoc, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'toLoc':toLoc}, var)
+ var.registers([u'toLoc'])
+ var.get(u"this").callprop(u'emitAssign', var.get(u"this").callprop(u'contextProperty', Js(u'next')), var.get(u'toLoc'))
+ var.get(u"this").callprop(u'emit', var.get(u't').callprop(u'breakStatement'))
+ PyJs_anonymous_1193_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'jump', PyJs_anonymous_1193_)
+ @Js
+ def PyJs_anonymous_1194_(test, toLoc, this, arguments, var=var):
+ var = Scope({u'test':test, u'this':this, u'arguments':arguments, u'toLoc':toLoc}, var)
+ var.registers([u'test', u'toLoc'])
+ var.get(u't').callprop(u'assertExpression', var.get(u'test'))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'toLoc'))
+ var.get(u"this").callprop(u'emit', var.get(u't').callprop(u'ifStatement', var.get(u'test'), var.get(u't').callprop(u'blockStatement', Js([var.get(u"this").callprop(u'assign', var.get(u"this").callprop(u'contextProperty', Js(u'next')), var.get(u'toLoc')), var.get(u't').callprop(u'breakStatement')]))))
+ PyJs_anonymous_1194_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'jumpIf', PyJs_anonymous_1194_)
+ @Js
+ def PyJs_anonymous_1195_(test, toLoc, this, arguments, var=var):
+ var = Scope({u'test':test, u'this':this, u'arguments':arguments, u'toLoc':toLoc}, var)
+ var.registers([u'test', u'negatedTest', u'toLoc'])
+ var.get(u't').callprop(u'assertExpression', var.get(u'test'))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'toLoc'))
+ var.put(u'negatedTest', PyJsComma(Js(0.0), Js(None)))
+ if (var.get(u't').callprop(u'isUnaryExpression', var.get(u'test')) and PyJsStrictEq(var.get(u'test').get(u'operator'),Js(u'!'))):
+ var.put(u'negatedTest', var.get(u'test').get(u'argument'))
+ else:
+ var.put(u'negatedTest', var.get(u't').callprop(u'unaryExpression', Js(u'!'), var.get(u'test')))
+ var.get(u"this").callprop(u'emit', var.get(u't').callprop(u'ifStatement', var.get(u'negatedTest'), var.get(u't').callprop(u'blockStatement', Js([var.get(u"this").callprop(u'assign', var.get(u"this").callprop(u'contextProperty', Js(u'next')), var.get(u'toLoc')), var.get(u't').callprop(u'breakStatement')]))))
+ PyJs_anonymous_1195_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'jumpIfNot', PyJs_anonymous_1195_)
+ @Js
+ def PyJs_anonymous_1196_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").callprop(u'contextProperty', (Js(u't')+(var.get(u"this").put(u'nextTempId',Js(var.get(u"this").get(u'nextTempId').to_number())+Js(1))-Js(1))))
+ PyJs_anonymous_1196_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'makeTempVar', PyJs_anonymous_1196_)
+ @Js
+ def PyJs_anonymous_1197_(id, this, arguments, var=var):
+ var = Scope({u'this':this, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'id'])
+ return var.get(u't').callprop(u'functionExpression', (var.get(u'id') or var.get(u"null")), Js([var.get(u"this").get(u'contextId')]), var.get(u't').callprop(u'blockStatement', Js([var.get(u"this").callprop(u'getDispatchLoop')])), Js(False), Js(False))
+ PyJs_anonymous_1197_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'getContextFunction', PyJs_anonymous_1197_)
+ @Js
+ def PyJs_anonymous_1198_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'current', u'self', u'alreadyEnded', u'cases'])
+ var.put(u'self', var.get(u"this"))
+ var.put(u'cases', Js([]))
+ var.put(u'current', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'alreadyEnded', Js(False))
+ @Js
+ def PyJs_anonymous_1199_(stmt, i, this, arguments, var=var):
+ var = Scope({u'i':i, u'this':this, u'arguments':arguments, u'stmt':stmt}, var)
+ var.registers([u'i', u'stmt'])
+ if var.get(u'self').get(u'marked').callprop(u'hasOwnProperty', var.get(u'i')):
+ var.get(u'cases').callprop(u'push', var.get(u't').callprop(u'switchCase', var.get(u't').callprop(u'numericLiteral', var.get(u'i')), var.put(u'current', Js([]))))
+ var.put(u'alreadyEnded', Js(False))
+ if var.get(u'alreadyEnded').neg():
+ var.get(u'current').callprop(u'push', var.get(u'stmt'))
+ if var.get(u't').callprop(u'isCompletionStatement', var.get(u'stmt')):
+ var.put(u'alreadyEnded', var.get(u'true'))
+ PyJs_anonymous_1199_._set_name(u'anonymous')
+ var.get(u'self').get(u'listing').callprop(u'forEach', PyJs_anonymous_1199_)
+ var.get(u"this").get(u'finalLoc').put(u'value', var.get(u"this").get(u'listing').get(u'length'))
+ var.get(u'cases').callprop(u'push', var.get(u't').callprop(u'switchCase', var.get(u"this").get(u'finalLoc'), Js([])), var.get(u't').callprop(u'switchCase', var.get(u't').callprop(u'stringLiteral', Js(u'end')), Js([var.get(u't').callprop(u'returnStatement', var.get(u't').callprop(u'callExpression', var.get(u"this").callprop(u'contextProperty', Js(u'stop')), Js([])))])))
+ return var.get(u't').callprop(u'whileStatement', var.get(u't').callprop(u'numericLiteral', Js(1.0)), var.get(u't').callprop(u'switchStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u"this").callprop(u'contextProperty', Js(u'prev')), var.get(u"this").callprop(u'contextProperty', Js(u'next'))), var.get(u'cases')))
+ PyJs_anonymous_1198_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'getDispatchLoop', PyJs_anonymous_1198_)
+ @Js
+ def PyJs_anonymous_1200_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'lastLocValue'])
+ if PyJsStrictEq(var.get(u"this").get(u'tryEntries').get(u'length'),Js(0.0)):
+ return var.get(u"null")
+ var.put(u'lastLocValue', Js(0.0))
+ @Js
+ def PyJs_anonymous_1201_(tryEntry, this, arguments, var=var):
+ var = Scope({u'this':this, u'tryEntry':tryEntry, u'arguments':arguments}, var)
+ var.registers([u'locs', u'tryEntry', u'thisLocValue', u'ce', u'fe'])
+ var.put(u'thisLocValue', var.get(u'tryEntry').get(u'firstLoc').get(u'value'))
+ var.get(u'_assert2').get(u'default').callprop(u'ok', (var.get(u'thisLocValue')>=var.get(u'lastLocValue')), Js(u'try entries out of order'))
+ var.put(u'lastLocValue', var.get(u'thisLocValue'))
+ var.put(u'ce', var.get(u'tryEntry').get(u'catchEntry'))
+ var.put(u'fe', var.get(u'tryEntry').get(u'finallyEntry'))
+ var.put(u'locs', Js([var.get(u'tryEntry').get(u'firstLoc'), (var.get(u'ce').get(u'firstLoc') if var.get(u'ce') else var.get(u"null"))]))
+ if var.get(u'fe'):
+ var.get(u'locs').put(u'2', var.get(u'fe').get(u'firstLoc'))
+ var.get(u'locs').put(u'3', var.get(u'fe').get(u'afterLoc'))
+ return var.get(u't').callprop(u'arrayExpression', var.get(u'locs'))
+ PyJs_anonymous_1201_._set_name(u'anonymous')
+ return var.get(u't').callprop(u'arrayExpression', var.get(u"this").get(u'tryEntries').callprop(u'map', PyJs_anonymous_1201_))
+ PyJs_anonymous_1200_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'getTryLocsList', PyJs_anonymous_1200_)
+ @Js
+ def PyJs_anonymous_1202_(path, ignoreResult, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'ignoreResult':ignoreResult, u'arguments':arguments}, var)
+ var.registers([u'node', u'path', u'self', u'ignoreResult'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'self', var.get(u"this"))
+ var.get(u't').callprop(u'assertNode', var.get(u'node'))
+ if var.get(u't').callprop(u'isDeclaration', var.get(u'node')):
+ PyJsTempException = JsToPyException(var.get(u'getDeclError')(var.get(u'node')))
+ raise PyJsTempException
+ if var.get(u't').callprop(u'isStatement', var.get(u'node')):
+ return var.get(u'self').callprop(u'explodeStatement', var.get(u'path'))
+ if var.get(u't').callprop(u'isExpression', var.get(u'node')):
+ return var.get(u'self').callprop(u'explodeExpression', var.get(u'path'), var.get(u'ignoreResult'))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'node').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'Program')):
+ SWITCHED = True
+ return var.get(u'path').callprop(u'get', Js(u'body')).callprop(u'map', var.get(u'self').get(u'explodeStatement'), var.get(u'self'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'VariableDeclarator')):
+ SWITCHED = True
+ PyJsTempException = JsToPyException(var.get(u'getDeclError')(var.get(u'node')))
+ raise PyJsTempException
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'Property')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'SwitchCase')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'CatchClause')):
+ SWITCHED = True
+ PyJsTempException = JsToPyException(var.get(u'Error').create((var.get(u'node').get(u'type')+Js(u' nodes should be handled by their parents'))))
+ raise PyJsTempException
+ if True:
+ SWITCHED = True
+ PyJsTempException = JsToPyException(var.get(u'Error').create((Js(u'unknown Node of type ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'node').get(u'type')))))
+ raise PyJsTempException
+ SWITCHED = True
+ break
+ PyJs_anonymous_1202_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'explode', PyJs_anonymous_1202_)
+ pass
+ @Js
+ def PyJs_anonymous_1203_(path, labelId, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'labelId':labelId}, var)
+ var.registers([u'head', u'labelId', u'_ret', u'self', u'after', u'stmt', u'path', u'before'])
+ var.put(u'stmt', var.get(u'path').get(u'node'))
+ var.put(u'self', var.get(u"this"))
+ var.put(u'before', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'after', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'head', PyJsComma(Js(0.0), Js(None)))
+ var.get(u't').callprop(u'assertStatement', var.get(u'stmt'))
+ if var.get(u'labelId'):
+ var.get(u't').callprop(u'assertIdentifier', var.get(u'labelId'))
+ else:
+ var.put(u'labelId', var.get(u"null"))
+ if var.get(u't').callprop(u'isBlockStatement', var.get(u'stmt')):
+ @Js
+ def PyJs_anonymous_1204_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path'))
+ PyJs_anonymous_1204_._set_name(u'anonymous')
+ var.get(u'path').callprop(u'get', Js(u'body')).callprop(u'forEach', PyJs_anonymous_1204_)
+ return var.get('undefined')
+ if var.get(u'meta').callprop(u'containsLeap', var.get(u'stmt')).neg():
+ var.get(u'self').callprop(u'emit', var.get(u'stmt'))
+ return var.get('undefined')
+ @Js
+ def PyJs_anonymous_1205_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'catchLoc', u'catchEntry', u'c', u'tryEntry', u'keyInfoTmpVar', u'discriminant', u'i', u'keyIterNextFn', u'finallyLoc', u'update', u'defaultLoc', u'caseLocs', u'disc', u'test', u'cases', u'finallyEntry', u'elseLoc', u'handler', u'condition', u'first'])
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'stmt').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ExpressionStatement')):
+ SWITCHED = True
+ var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'expression')), var.get(u'true'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'LabeledStatement')):
+ SWITCHED = True
+ var.put(u'after', var.get(u'loc')())
+ @Js
+ def PyJs_anonymous_1206_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path').callprop(u'get', Js(u'body')), var.get(u'stmt').get(u'label'))
+ PyJs_anonymous_1206_._set_name(u'anonymous')
+ var.get(u'self').get(u'leapManager').callprop(u'withEntry', var.get(u'leap').get(u'LabeledEntry').create(var.get(u'after'), var.get(u'stmt').get(u'label')), PyJs_anonymous_1206_)
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'WhileStatement')):
+ SWITCHED = True
+ var.put(u'before', var.get(u'loc')())
+ var.put(u'after', var.get(u'loc')())
+ var.get(u'self').callprop(u'mark', var.get(u'before'))
+ var.get(u'self').callprop(u'jumpIfNot', var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'test'))), var.get(u'after'))
+ @Js
+ def PyJs_anonymous_1207_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path').callprop(u'get', Js(u'body')))
+ PyJs_anonymous_1207_._set_name(u'anonymous')
+ var.get(u'self').get(u'leapManager').callprop(u'withEntry', var.get(u'leap').get(u'LoopEntry').create(var.get(u'after'), var.get(u'before'), var.get(u'labelId')), PyJs_anonymous_1207_)
+ var.get(u'self').callprop(u'jump', var.get(u'before'))
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'DoWhileStatement')):
+ SWITCHED = True
+ var.put(u'first', var.get(u'loc')())
+ var.put(u'test', var.get(u'loc')())
+ var.put(u'after', var.get(u'loc')())
+ var.get(u'self').callprop(u'mark', var.get(u'first'))
+ @Js
+ def PyJs_anonymous_1208_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'self').callprop(u'explode', var.get(u'path').callprop(u'get', Js(u'body')))
+ PyJs_anonymous_1208_._set_name(u'anonymous')
+ var.get(u'self').get(u'leapManager').callprop(u'withEntry', var.get(u'leap').get(u'LoopEntry').create(var.get(u'after'), var.get(u'test'), var.get(u'labelId')), PyJs_anonymous_1208_)
+ var.get(u'self').callprop(u'mark', var.get(u'test'))
+ var.get(u'self').callprop(u'jumpIf', var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'test'))), var.get(u'first'))
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ForStatement')):
+ SWITCHED = True
+ var.put(u'head', var.get(u'loc')())
+ var.put(u'update', var.get(u'loc')())
+ var.put(u'after', var.get(u'loc')())
+ if var.get(u'stmt').get(u'init'):
+ var.get(u'self').callprop(u'explode', var.get(u'path').callprop(u'get', Js(u'init')), var.get(u'true'))
+ var.get(u'self').callprop(u'mark', var.get(u'head'))
+ if var.get(u'stmt').get(u'test'):
+ var.get(u'self').callprop(u'jumpIfNot', var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'test'))), var.get(u'after'))
+ else:
+ pass
+ @Js
+ def PyJs_anonymous_1209_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path').callprop(u'get', Js(u'body')))
+ PyJs_anonymous_1209_._set_name(u'anonymous')
+ var.get(u'self').get(u'leapManager').callprop(u'withEntry', var.get(u'leap').get(u'LoopEntry').create(var.get(u'after'), var.get(u'update'), var.get(u'labelId')), PyJs_anonymous_1209_)
+ var.get(u'self').callprop(u'mark', var.get(u'update'))
+ if var.get(u'stmt').get(u'update'):
+ var.get(u'self').callprop(u'explode', var.get(u'path').callprop(u'get', Js(u'update')), var.get(u'true'))
+ var.get(u'self').callprop(u'jump', var.get(u'head'))
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'TypeCastExpression')):
+ SWITCHED = True
+ PyJs_Object_1210_ = Js({u'v':var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'expression')))})
+ return PyJs_Object_1210_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ForInStatement')):
+ SWITCHED = True
+ var.put(u'head', var.get(u'loc')())
+ var.put(u'after', var.get(u'loc')())
+ var.put(u'keyIterNextFn', var.get(u'self').callprop(u'makeTempVar'))
+ var.get(u'self').callprop(u'emitAssign', var.get(u'keyIterNextFn'), var.get(u't').callprop(u'callExpression', var.get(u'util').callprop(u'runtimeProperty', Js(u'keys')), Js([var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'right')))])))
+ var.get(u'self').callprop(u'mark', var.get(u'head'))
+ var.put(u'keyInfoTmpVar', var.get(u'self').callprop(u'makeTempVar'))
+ var.get(u'self').callprop(u'jumpIf', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'keyInfoTmpVar'), var.get(u't').callprop(u'callExpression', var.get(u'keyIterNextFn'), Js([]))), var.get(u't').callprop(u'identifier', Js(u'done')), Js(False)), var.get(u'after'))
+ var.get(u'self').callprop(u'emitAssign', var.get(u'stmt').get(u'left'), var.get(u't').callprop(u'memberExpression', var.get(u'keyInfoTmpVar'), var.get(u't').callprop(u'identifier', Js(u'value')), Js(False)))
+ @Js
+ def PyJs_anonymous_1211_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path').callprop(u'get', Js(u'body')))
+ PyJs_anonymous_1211_._set_name(u'anonymous')
+ var.get(u'self').get(u'leapManager').callprop(u'withEntry', var.get(u'leap').get(u'LoopEntry').create(var.get(u'after'), var.get(u'head'), var.get(u'labelId')), PyJs_anonymous_1211_)
+ var.get(u'self').callprop(u'jump', var.get(u'head'))
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'BreakStatement')):
+ SWITCHED = True
+ PyJs_Object_1212_ = Js({u'type':Js(u'break'),u'target':var.get(u'self').get(u'leapManager').callprop(u'getBreakLoc', var.get(u'stmt').get(u'label'))})
+ var.get(u'self').callprop(u'emitAbruptCompletion', PyJs_Object_1212_)
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ContinueStatement')):
+ SWITCHED = True
+ PyJs_Object_1213_ = Js({u'type':Js(u'continue'),u'target':var.get(u'self').get(u'leapManager').callprop(u'getContinueLoc', var.get(u'stmt').get(u'label'))})
+ var.get(u'self').callprop(u'emitAbruptCompletion', PyJs_Object_1213_)
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'SwitchStatement')):
+ SWITCHED = True
+ var.put(u'disc', var.get(u'self').callprop(u'emitAssign', var.get(u'self').callprop(u'makeTempVar'), var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'discriminant')))))
+ var.put(u'after', var.get(u'loc')())
+ var.put(u'defaultLoc', var.get(u'loc')())
+ var.put(u'condition', var.get(u'defaultLoc'))
+ var.put(u'caseLocs', Js([]))
+ var.put(u'cases', (var.get(u'stmt').get(u'cases') or Js([])))
+ #for JS loop
+ var.put(u'i', (var.get(u'cases').get(u'length')-Js(1.0)))
+ while (var.get(u'i')>=Js(0.0)):
+ try:
+ var.put(u'c', var.get(u'cases').get(var.get(u'i')))
+ var.get(u't').callprop(u'assertSwitchCase', var.get(u'c'))
+ if var.get(u'c').get(u'test'):
+ var.put(u'condition', var.get(u't').callprop(u'conditionalExpression', var.get(u't').callprop(u'binaryExpression', Js(u'==='), var.get(u'disc'), var.get(u'c').get(u'test')), var.get(u'caseLocs').put(var.get(u'i'), var.get(u'loc')()), var.get(u'condition')))
+ else:
+ var.get(u'caseLocs').put(var.get(u'i'), var.get(u'defaultLoc'))
+ finally:
+ var.put(u'i',Js(var.get(u'i').to_number())-Js(1))
+ var.put(u'discriminant', var.get(u'path').callprop(u'get', Js(u'discriminant')))
+ var.get(u'discriminant').callprop(u'replaceWith', var.get(u'condition'))
+ var.get(u'self').callprop(u'jump', var.get(u'self').callprop(u'explodeExpression', var.get(u'discriminant')))
+ @Js
+ def PyJs_anonymous_1214_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_anonymous_1215_(casePath, this, arguments, var=var):
+ var = Scope({u'this':this, u'casePath':casePath, u'arguments':arguments}, var)
+ var.registers([u'i', u'casePath'])
+ var.put(u'i', var.get(u'casePath').get(u'key'))
+ var.get(u'self').callprop(u'mark', var.get(u'caseLocs').get(var.get(u'i')))
+ @Js
+ def PyJs_anonymous_1216_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path'))
+ PyJs_anonymous_1216_._set_name(u'anonymous')
+ var.get(u'casePath').callprop(u'get', Js(u'consequent')).callprop(u'forEach', PyJs_anonymous_1216_)
+ PyJs_anonymous_1215_._set_name(u'anonymous')
+ var.get(u'path').callprop(u'get', Js(u'cases')).callprop(u'forEach', PyJs_anonymous_1215_)
+ PyJs_anonymous_1214_._set_name(u'anonymous')
+ var.get(u'self').get(u'leapManager').callprop(u'withEntry', var.get(u'leap').get(u'SwitchEntry').create(var.get(u'after')), PyJs_anonymous_1214_)
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ if PyJsStrictEq(var.get(u'defaultLoc').get(u'value'),(-Js(1.0))):
+ var.get(u'self').callprop(u'mark', var.get(u'defaultLoc'))
+ var.get(u'_assert2').get(u'default').callprop(u'strictEqual', var.get(u'after').get(u'value'), var.get(u'defaultLoc').get(u'value'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'IfStatement')):
+ SWITCHED = True
+ var.put(u'elseLoc', (var.get(u'stmt').get(u'alternate') and var.get(u'loc')()))
+ var.put(u'after', var.get(u'loc')())
+ var.get(u'self').callprop(u'jumpIfNot', var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'test'))), (var.get(u'elseLoc') or var.get(u'after')))
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path').callprop(u'get', Js(u'consequent')))
+ if var.get(u'elseLoc'):
+ var.get(u'self').callprop(u'jump', var.get(u'after'))
+ var.get(u'self').callprop(u'mark', var.get(u'elseLoc'))
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path').callprop(u'get', Js(u'alternate')))
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ReturnStatement')):
+ SWITCHED = True
+ PyJs_Object_1217_ = Js({u'type':Js(u'return'),u'value':var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'argument')))})
+ var.get(u'self').callprop(u'emitAbruptCompletion', PyJs_Object_1217_)
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'WithStatement')):
+ SWITCHED = True
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'WithStatement not supported in generator functions.')))
+ raise PyJsTempException
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'TryStatement')):
+ SWITCHED = True
+ var.put(u'after', var.get(u'loc')())
+ var.put(u'handler', var.get(u'stmt').get(u'handler'))
+ var.put(u'catchLoc', (var.get(u'handler') and var.get(u'loc')()))
+ var.put(u'catchEntry', (var.get(u'catchLoc') and var.get(u'leap').get(u'CatchEntry').create(var.get(u'catchLoc'), var.get(u'handler').get(u'param'))))
+ var.put(u'finallyLoc', (var.get(u'stmt').get(u'finalizer') and var.get(u'loc')()))
+ var.put(u'finallyEntry', (var.get(u'finallyLoc') and var.get(u'leap').get(u'FinallyEntry').create(var.get(u'finallyLoc'), var.get(u'after'))))
+ var.put(u'tryEntry', var.get(u'leap').get(u'TryEntry').create(var.get(u'self').callprop(u'getUnmarkedCurrentLoc'), var.get(u'catchEntry'), var.get(u'finallyEntry')))
+ var.get(u'self').get(u'tryEntries').callprop(u'push', var.get(u'tryEntry'))
+ var.get(u'self').callprop(u'updateContextPrevLoc', var.get(u'tryEntry').get(u'firstLoc'))
+ @Js
+ def PyJs_anonymous_1218_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path').callprop(u'get', Js(u'block')))
+ if var.get(u'catchLoc'):
+ @Js
+ def PyJs_anonymous_1219_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'bodyPath', u'safeParam'])
+ if var.get(u'finallyLoc'):
+ var.get(u'self').callprop(u'jump', var.get(u'finallyLoc'))
+ else:
+ var.get(u'self').callprop(u'jump', var.get(u'after'))
+ var.get(u'self').callprop(u'updateContextPrevLoc', var.get(u'self').callprop(u'mark', var.get(u'catchLoc')))
+ var.put(u'bodyPath', var.get(u'path').callprop(u'get', Js(u'handler.body')))
+ var.put(u'safeParam', var.get(u'self').callprop(u'makeTempVar'))
+ var.get(u'self').callprop(u'clearPendingException', var.get(u'tryEntry').get(u'firstLoc'), var.get(u'safeParam'))
+ PyJs_Object_1220_ = Js({u'safeParam':var.get(u'safeParam'),u'catchParamName':var.get(u'handler').get(u'param').get(u'name')})
+ var.get(u'bodyPath').callprop(u'traverse', var.get(u'catchParamVisitor'), PyJs_Object_1220_)
+ @Js
+ def PyJs_anonymous_1221_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'bodyPath'))
+ PyJs_anonymous_1221_._set_name(u'anonymous')
+ var.get(u'self').get(u'leapManager').callprop(u'withEntry', var.get(u'catchEntry'), PyJs_anonymous_1221_)
+ PyJs_anonymous_1219_._set_name(u'anonymous')
+ PyJs_anonymous_1219_()
+ if var.get(u'finallyLoc'):
+ var.get(u'self').callprop(u'updateContextPrevLoc', var.get(u'self').callprop(u'mark', var.get(u'finallyLoc')))
+ @Js
+ def PyJs_anonymous_1222_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'self').callprop(u'explodeStatement', var.get(u'path').callprop(u'get', Js(u'finalizer')))
+ PyJs_anonymous_1222_._set_name(u'anonymous')
+ var.get(u'self').get(u'leapManager').callprop(u'withEntry', var.get(u'finallyEntry'), PyJs_anonymous_1222_)
+ var.get(u'self').callprop(u'emit', var.get(u't').callprop(u'returnStatement', var.get(u't').callprop(u'callExpression', var.get(u'self').callprop(u'contextProperty', Js(u'finish')), Js([var.get(u'finallyEntry').get(u'firstLoc')]))))
+ PyJs_anonymous_1218_._set_name(u'anonymous')
+ var.get(u'self').get(u'leapManager').callprop(u'withEntry', var.get(u'tryEntry'), PyJs_anonymous_1218_)
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ThrowStatement')):
+ SWITCHED = True
+ var.get(u'self').callprop(u'emit', var.get(u't').callprop(u'throwStatement', var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'argument')))))
+ break
+ if True:
+ SWITCHED = True
+ PyJsTempException = JsToPyException(var.get(u'Error').create((Js(u'unknown Statement of type ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'stmt').get(u'type')))))
+ raise PyJsTempException
+ SWITCHED = True
+ break
+ PyJs_anonymous_1205_._set_name(u'anonymous')
+ var.put(u'_ret', PyJs_anonymous_1205_())
+ if PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'_ret',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'_ret'))),Js(u'object')):
+ return var.get(u'_ret').get(u'v')
+ PyJs_anonymous_1203_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'explodeStatement', PyJs_anonymous_1203_)
+ @Js
+ def PyJs_Identifier_1224_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'Identifier':PyJs_Identifier_1224_, u'arguments':arguments}, var)
+ var.registers([u'path', u'state'])
+ if (PyJsStrictEq(var.get(u'path').get(u'node').get(u'name'),var.get(u'state').get(u'catchParamName')) and var.get(u'util').callprop(u'isReference', var.get(u'path'))):
+ var.get(u'path').callprop(u'replaceWith', var.get(u'state').get(u'safeParam'))
+ PyJs_Identifier_1224_._set_name(u'Identifier')
+ @Js
+ def PyJs_Scope_1225_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'Scope':PyJs_Scope_1225_}, var)
+ var.registers([u'path', u'state'])
+ if var.get(u'path').get(u'scope').callprop(u'hasOwnBinding', var.get(u'state').get(u'catchParamName')):
+ var.get(u'path').callprop(u'skip')
+ PyJs_Scope_1225_._set_name(u'Scope')
+ PyJs_Object_1223_ = Js({u'Identifier':PyJs_Identifier_1224_,u'Scope':PyJs_Scope_1225_})
+ var.put(u'catchParamVisitor', PyJs_Object_1223_)
+ @Js
+ def PyJs_anonymous_1226_(record, this, arguments, var=var):
+ var = Scope({u'this':this, u'record':record, u'arguments':arguments}, var)
+ var.registers([u'record', u'abruptArgs'])
+ if var.get(u'isValidCompletion')(var.get(u'record')).neg():
+ var.get(u'_assert2').get(u'default').callprop(u'ok', Js(False), (Js(u'invalid completion record: ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'record'))))
+ var.get(u'_assert2').get(u'default').callprop(u'notStrictEqual', var.get(u'record').get(u'type'), Js(u'normal'), Js(u'normal completions are not abrupt'))
+ var.put(u'abruptArgs', Js([var.get(u't').callprop(u'stringLiteral', var.get(u'record').get(u'type'))]))
+ if (PyJsStrictEq(var.get(u'record').get(u'type'),Js(u'break')) or PyJsStrictEq(var.get(u'record').get(u'type'),Js(u'continue'))):
+ var.get(u't').callprop(u'assertLiteral', var.get(u'record').get(u'target'))
+ var.get(u'abruptArgs').put(u'1', var.get(u'record').get(u'target'))
+ else:
+ if (PyJsStrictEq(var.get(u'record').get(u'type'),Js(u'return')) or PyJsStrictEq(var.get(u'record').get(u'type'),Js(u'throw'))):
+ if var.get(u'record').get(u'value'):
+ var.get(u't').callprop(u'assertExpression', var.get(u'record').get(u'value'))
+ var.get(u'abruptArgs').put(u'1', var.get(u'record').get(u'value'))
+ var.get(u"this").callprop(u'emit', var.get(u't').callprop(u'returnStatement', var.get(u't').callprop(u'callExpression', var.get(u"this").callprop(u'contextProperty', Js(u'abrupt')), var.get(u'abruptArgs'))))
+ PyJs_anonymous_1226_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'emitAbruptCompletion', PyJs_anonymous_1226_)
+ pass
+ @Js
+ def PyJs_anonymous_1227_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'numericLiteral', var.get(u"this").get(u'listing').get(u'length'))
+ PyJs_anonymous_1227_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'getUnmarkedCurrentLoc', PyJs_anonymous_1227_)
+ @Js
+ def PyJs_anonymous_1228_(loc, this, arguments, var=var):
+ var = Scope({u'this':this, u'loc':loc, u'arguments':arguments}, var)
+ var.registers([u'loc'])
+ if var.get(u'loc'):
+ var.get(u't').callprop(u'assertLiteral', var.get(u'loc'))
+ if PyJsStrictEq(var.get(u'loc').get(u'value'),(-Js(1.0))):
+ var.get(u'loc').put(u'value', var.get(u"this").get(u'listing').get(u'length'))
+ else:
+ var.get(u'_assert2').get(u'default').callprop(u'strictEqual', var.get(u'loc').get(u'value'), var.get(u"this").get(u'listing').get(u'length'))
+ else:
+ var.put(u'loc', var.get(u"this").callprop(u'getUnmarkedCurrentLoc'))
+ var.get(u"this").callprop(u'emitAssign', var.get(u"this").callprop(u'contextProperty', Js(u'prev')), var.get(u'loc'))
+ PyJs_anonymous_1228_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'updateContextPrevLoc', PyJs_anonymous_1228_)
+ @Js
+ def PyJs_anonymous_1229_(path, ignoreResult, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'ignoreResult':ignoreResult, u'arguments':arguments}, var)
+ var.registers([u'finish', u'ignoreResult', u'expr', u'self', u'after', u'_ret3', u'result', u'hasLeapingChildren', u'path', u'explodeViaTempVar'])
+ @Js
+ def PyJsHoisted_explodeViaTempVar_(tempVar, childPath, ignoreChildResult, this, arguments, var=var):
+ var = Scope({u'this':this, u'ignoreChildResult':ignoreChildResult, u'childPath':childPath, u'tempVar':tempVar, u'arguments':arguments}, var)
+ var.registers([u'childPath', u'ignoreChildResult', u'result', u'tempVar'])
+ var.get(u'_assert2').get(u'default').callprop(u'ok', (var.get(u'ignoreChildResult').neg() or var.get(u'tempVar').neg()), (Js(u'Ignoring the result of a child expression but forcing it to ')+Js(u'be assigned to a temporary variable?')))
+ var.put(u'result', var.get(u'self').callprop(u'explodeExpression', var.get(u'childPath'), var.get(u'ignoreChildResult')))
+ if var.get(u'ignoreChildResult'):
+ pass
+ else:
+ if (var.get(u'tempVar') or (var.get(u'hasLeapingChildren') and var.get(u't').callprop(u'isLiteral', var.get(u'result')).neg())):
+ var.put(u'result', var.get(u'self').callprop(u'emitAssign', (var.get(u'tempVar') or var.get(u'self').callprop(u'makeTempVar')), var.get(u'result')))
+ return var.get(u'result')
+ PyJsHoisted_explodeViaTempVar_.func_name = u'explodeViaTempVar'
+ var.put(u'explodeViaTempVar', PyJsHoisted_explodeViaTempVar_)
+ @Js
+ def PyJsHoisted_finish_(expr, this, arguments, var=var):
+ var = Scope({u'this':this, u'expr':expr, u'arguments':arguments}, var)
+ var.registers([u'expr'])
+ var.get(u't').callprop(u'assertExpression', var.get(u'expr'))
+ if var.get(u'ignoreResult'):
+ var.get(u'self').callprop(u'emit', var.get(u'expr'))
+ else:
+ return var.get(u'expr')
+ PyJsHoisted_finish_.func_name = u'finish'
+ var.put(u'finish', PyJsHoisted_finish_)
+ var.put(u'expr', var.get(u'path').get(u'node'))
+ if var.get(u'expr'):
+ var.get(u't').callprop(u'assertExpression', var.get(u'expr'))
+ else:
+ return var.get(u'expr')
+ var.put(u'self', var.get(u"this"))
+ var.put(u'result', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'after', PyJsComma(Js(0.0), Js(None)))
+ pass
+ if var.get(u'meta').callprop(u'containsLeap', var.get(u'expr')).neg():
+ return var.get(u'finish')(var.get(u'expr'))
+ var.put(u'hasLeapingChildren', var.get(u'meta').get(u'containsLeap').callprop(u'onlyChildren', var.get(u'expr')))
+ pass
+ @Js
+ def PyJs_anonymous_1230_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'argsPath', u'_result', u'hasLeapingArgs', u'calleePath', u'lastIndex', u'newProperty', u'newObject', u'arg', u'test', u'newCallee', u'newArgs', u'elseLoc', u'left'])
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'expr').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'MemberExpression')):
+ SWITCHED = True
+ PyJs_Object_1231_ = Js({u'v':var.get(u'finish')(var.get(u't').callprop(u'memberExpression', var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'object'))), (var.get(u'explodeViaTempVar')(var.get(u"null"), var.get(u'path').callprop(u'get', Js(u'property'))) if var.get(u'expr').get(u'computed') else var.get(u'expr').get(u'property')), var.get(u'expr').get(u'computed')))})
+ return PyJs_Object_1231_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'CallExpression')):
+ SWITCHED = True
+ var.put(u'calleePath', var.get(u'path').callprop(u'get', Js(u'callee')))
+ var.put(u'argsPath', var.get(u'path').callprop(u'get', Js(u'arguments')))
+ var.put(u'newCallee', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'newArgs', Js([]))
+ var.put(u'hasLeapingArgs', Js(False))
+ @Js
+ def PyJs_anonymous_1232_(argPath, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'argPath':argPath}, var)
+ var.registers([u'argPath'])
+ var.put(u'hasLeapingArgs', (var.get(u'hasLeapingArgs') or var.get(u'meta').callprop(u'containsLeap', var.get(u'argPath').get(u'node'))))
+ PyJs_anonymous_1232_._set_name(u'anonymous')
+ var.get(u'argsPath').callprop(u'forEach', PyJs_anonymous_1232_)
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'calleePath').get(u'node')):
+ if var.get(u'hasLeapingArgs'):
+ var.put(u'newObject', var.get(u'explodeViaTempVar')(var.get(u'self').callprop(u'makeTempVar'), var.get(u'calleePath').callprop(u'get', Js(u'object'))))
+ var.put(u'newProperty', (var.get(u'explodeViaTempVar')(var.get(u"null"), var.get(u'calleePath').callprop(u'get', Js(u'property'))) if var.get(u'calleePath').get(u'node').get(u'computed') else var.get(u'calleePath').get(u'node').get(u'property')))
+ var.get(u'newArgs').callprop(u'unshift', var.get(u'newObject'))
+ var.put(u'newCallee', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'memberExpression', var.get(u'newObject'), var.get(u'newProperty'), var.get(u'calleePath').get(u'node').get(u'computed')), var.get(u't').callprop(u'identifier', Js(u'call')), Js(False)))
+ else:
+ var.put(u'newCallee', var.get(u'self').callprop(u'explodeExpression', var.get(u'calleePath')))
+ else:
+ var.put(u'newCallee', var.get(u'self').callprop(u'explodeExpression', var.get(u'calleePath')))
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'newCallee')):
+ var.put(u'newCallee', var.get(u't').callprop(u'sequenceExpression', Js([var.get(u't').callprop(u'numericLiteral', Js(0.0)), var.get(u'newCallee')])))
+ @Js
+ def PyJs_anonymous_1233_(argPath, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'argPath':argPath}, var)
+ var.registers([u'argPath'])
+ var.get(u'newArgs').callprop(u'push', var.get(u'explodeViaTempVar')(var.get(u"null"), var.get(u'argPath')))
+ PyJs_anonymous_1233_._set_name(u'anonymous')
+ var.get(u'argsPath').callprop(u'forEach', PyJs_anonymous_1233_)
+ PyJs_Object_1234_ = Js({u'v':var.get(u'finish')(var.get(u't').callprop(u'callExpression', var.get(u'newCallee'), var.get(u'newArgs')))})
+ return PyJs_Object_1234_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'NewExpression')):
+ SWITCHED = True
+ @Js
+ def PyJs_anonymous_1236_(argPath, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'argPath':argPath}, var)
+ var.registers([u'argPath'])
+ return var.get(u'explodeViaTempVar')(var.get(u"null"), var.get(u'argPath'))
+ PyJs_anonymous_1236_._set_name(u'anonymous')
+ PyJs_Object_1235_ = Js({u'v':var.get(u'finish')(var.get(u't').callprop(u'newExpression', var.get(u'explodeViaTempVar')(var.get(u"null"), var.get(u'path').callprop(u'get', Js(u'callee'))), var.get(u'path').callprop(u'get', Js(u'arguments')).callprop(u'map', PyJs_anonymous_1236_)))})
+ return PyJs_Object_1235_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ObjectExpression')):
+ SWITCHED = True
+ @Js
+ def PyJs_anonymous_1238_(propPath, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'propPath':propPath}, var)
+ var.registers([u'propPath'])
+ if var.get(u'propPath').callprop(u'isObjectProperty'):
+ return var.get(u't').callprop(u'objectProperty', var.get(u'propPath').get(u'node').get(u'key'), var.get(u'explodeViaTempVar')(var.get(u"null"), var.get(u'propPath').callprop(u'get', Js(u'value'))), var.get(u'propPath').get(u'node').get(u'computed'))
+ else:
+ return var.get(u'propPath').get(u'node')
+ PyJs_anonymous_1238_._set_name(u'anonymous')
+ PyJs_Object_1237_ = Js({u'v':var.get(u'finish')(var.get(u't').callprop(u'objectExpression', var.get(u'path').callprop(u'get', Js(u'properties')).callprop(u'map', PyJs_anonymous_1238_)))})
+ return PyJs_Object_1237_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ArrayExpression')):
+ SWITCHED = True
+ @Js
+ def PyJs_anonymous_1240_(elemPath, this, arguments, var=var):
+ var = Scope({u'this':this, u'elemPath':elemPath, u'arguments':arguments}, var)
+ var.registers([u'elemPath'])
+ return var.get(u'explodeViaTempVar')(var.get(u"null"), var.get(u'elemPath'))
+ PyJs_anonymous_1240_._set_name(u'anonymous')
+ PyJs_Object_1239_ = Js({u'v':var.get(u'finish')(var.get(u't').callprop(u'arrayExpression', var.get(u'path').callprop(u'get', Js(u'elements')).callprop(u'map', PyJs_anonymous_1240_)))})
+ return PyJs_Object_1239_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'SequenceExpression')):
+ SWITCHED = True
+ var.put(u'lastIndex', (var.get(u'expr').get(u'expressions').get(u'length')-Js(1.0)))
+ @Js
+ def PyJs_anonymous_1241_(exprPath, this, arguments, var=var):
+ var = Scope({u'exprPath':exprPath, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'exprPath'])
+ if PyJsStrictEq(var.get(u'exprPath').get(u'key'),var.get(u'lastIndex')):
+ var.put(u'result', var.get(u'self').callprop(u'explodeExpression', var.get(u'exprPath'), var.get(u'ignoreResult')))
+ else:
+ var.get(u'self').callprop(u'explodeExpression', var.get(u'exprPath'), var.get(u'true'))
+ PyJs_anonymous_1241_._set_name(u'anonymous')
+ var.get(u'path').callprop(u'get', Js(u'expressions')).callprop(u'forEach', PyJs_anonymous_1241_)
+ PyJs_Object_1242_ = Js({u'v':var.get(u'result')})
+ return PyJs_Object_1242_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'LogicalExpression')):
+ SWITCHED = True
+ var.put(u'after', var.get(u'loc')())
+ if var.get(u'ignoreResult').neg():
+ var.put(u'result', var.get(u'self').callprop(u'makeTempVar'))
+ var.put(u'left', var.get(u'explodeViaTempVar')(var.get(u'result'), var.get(u'path').callprop(u'get', Js(u'left'))))
+ if PyJsStrictEq(var.get(u'expr').get(u'operator'),Js(u'&&')):
+ var.get(u'self').callprop(u'jumpIfNot', var.get(u'left'), var.get(u'after'))
+ else:
+ var.get(u'_assert2').get(u'default').callprop(u'strictEqual', var.get(u'expr').get(u'operator'), Js(u'||'))
+ var.get(u'self').callprop(u'jumpIf', var.get(u'left'), var.get(u'after'))
+ var.get(u'explodeViaTempVar')(var.get(u'result'), var.get(u'path').callprop(u'get', Js(u'right')), var.get(u'ignoreResult'))
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ PyJs_Object_1243_ = Js({u'v':var.get(u'result')})
+ return PyJs_Object_1243_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ConditionalExpression')):
+ SWITCHED = True
+ var.put(u'elseLoc', var.get(u'loc')())
+ var.put(u'after', var.get(u'loc')())
+ var.put(u'test', var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'test'))))
+ var.get(u'self').callprop(u'jumpIfNot', var.get(u'test'), var.get(u'elseLoc'))
+ if var.get(u'ignoreResult').neg():
+ var.put(u'result', var.get(u'self').callprop(u'makeTempVar'))
+ var.get(u'explodeViaTempVar')(var.get(u'result'), var.get(u'path').callprop(u'get', Js(u'consequent')), var.get(u'ignoreResult'))
+ var.get(u'self').callprop(u'jump', var.get(u'after'))
+ var.get(u'self').callprop(u'mark', var.get(u'elseLoc'))
+ var.get(u'explodeViaTempVar')(var.get(u'result'), var.get(u'path').callprop(u'get', Js(u'alternate')), var.get(u'ignoreResult'))
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ PyJs_Object_1244_ = Js({u'v':var.get(u'result')})
+ return PyJs_Object_1244_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'UnaryExpression')):
+ SWITCHED = True
+ PyJs_Object_1245_ = Js({u'v':var.get(u'finish')(var.get(u't').callprop(u'unaryExpression', var.get(u'expr').get(u'operator'), var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'argument'))), var.get(u'expr').get(u'prefix').neg().neg()))})
+ return PyJs_Object_1245_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'BinaryExpression')):
+ SWITCHED = True
+ PyJs_Object_1246_ = Js({u'v':var.get(u'finish')(var.get(u't').callprop(u'binaryExpression', var.get(u'expr').get(u'operator'), var.get(u'explodeViaTempVar')(var.get(u"null"), var.get(u'path').callprop(u'get', Js(u'left'))), var.get(u'explodeViaTempVar')(var.get(u"null"), var.get(u'path').callprop(u'get', Js(u'right')))))})
+ return PyJs_Object_1246_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'AssignmentExpression')):
+ SWITCHED = True
+ PyJs_Object_1247_ = Js({u'v':var.get(u'finish')(var.get(u't').callprop(u'assignmentExpression', var.get(u'expr').get(u'operator'), var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'left'))), var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'right')))))})
+ return PyJs_Object_1247_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'UpdateExpression')):
+ SWITCHED = True
+ PyJs_Object_1248_ = Js({u'v':var.get(u'finish')(var.get(u't').callprop(u'updateExpression', var.get(u'expr').get(u'operator'), var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'argument'))), var.get(u'expr').get(u'prefix')))})
+ return PyJs_Object_1248_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'YieldExpression')):
+ SWITCHED = True
+ var.put(u'after', var.get(u'loc')())
+ var.put(u'arg', (var.get(u'expr').get(u'argument') and var.get(u'self').callprop(u'explodeExpression', var.get(u'path').callprop(u'get', Js(u'argument')))))
+ if (var.get(u'arg') and var.get(u'expr').get(u'delegate')):
+ var.put(u'_result', var.get(u'self').callprop(u'makeTempVar'))
+ var.get(u'self').callprop(u'emit', var.get(u't').callprop(u'returnStatement', var.get(u't').callprop(u'callExpression', var.get(u'self').callprop(u'contextProperty', Js(u'delegateYield')), Js([var.get(u'arg'), var.get(u't').callprop(u'stringLiteral', var.get(u'_result').get(u'property').get(u'name')), var.get(u'after')]))))
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ PyJs_Object_1249_ = Js({u'v':var.get(u'_result')})
+ return PyJs_Object_1249_
+ var.get(u'self').callprop(u'emitAssign', var.get(u'self').callprop(u'contextProperty', Js(u'next')), var.get(u'after'))
+ var.get(u'self').callprop(u'emit', var.get(u't').callprop(u'returnStatement', (var.get(u'arg') or var.get(u"null"))))
+ var.get(u'self').callprop(u'mark', var.get(u'after'))
+ PyJs_Object_1250_ = Js({u'v':var.get(u'self').callprop(u'contextProperty', Js(u'sent'))})
+ return PyJs_Object_1250_
+ if True:
+ SWITCHED = True
+ PyJsTempException = JsToPyException(var.get(u'Error').create((Js(u'unknown Expression of type ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'expr').get(u'type')))))
+ raise PyJsTempException
+ SWITCHED = True
+ break
+ PyJs_anonymous_1230_._set_name(u'anonymous')
+ var.put(u'_ret3', PyJs_anonymous_1230_())
+ if PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'_ret3',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'_ret3'))),Js(u'object')):
+ return var.get(u'_ret3').get(u'v')
+ PyJs_anonymous_1229_._set_name(u'anonymous')
+ var.get(u'Ep').put(u'explodeExpression', PyJs_anonymous_1229_)
+PyJs_anonymous_1182_._set_name(u'anonymous')
+PyJs_Object_1251_ = Js({u'./leap':Js(90.0),u'./meta':Js(91.0),u'./util':Js(92.0),u'assert':Js(524.0),u'babel-runtime/core-js/json/stringify':Js(97.0),u'babel-runtime/helpers/typeof':Js(114.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1252_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'module', u'exports', u'_interopRequireWildcard', u'require', u'_babelTypes', u'hasOwn', u'_keys2', u'_keys', u't', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1254_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1254_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1253_ = Js({})
+ var.put(u'newObj', PyJs_Object_1253_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.put(u'_keys', var.get(u'require')(Js(u'babel-runtime/core-js/object/keys')))
+ var.put(u'_keys2', var.get(u'_interopRequireDefault')(var.get(u'_keys')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ var.put(u'hasOwn', var.get(u'Object').get(u'prototype').get(u'hasOwnProperty'))
+ @Js
+ def PyJs_anonymous_1255_(funPath, this, arguments, var=var):
+ var = Scope({u'this':this, u'funPath':funPath, u'arguments':arguments}, var)
+ var.registers([u'varDeclToExpr', u'funPath', u'paramNames', u'declarations', u'vars'])
+ @Js
+ def PyJsHoisted_varDeclToExpr_(vdec, includeIdentifiers, this, arguments, var=var):
+ var = Scope({u'this':this, u'vdec':vdec, u'arguments':arguments, u'includeIdentifiers':includeIdentifiers}, var)
+ var.registers([u'exprs', u'vdec', u'includeIdentifiers'])
+ var.get(u't').callprop(u'assertVariableDeclaration', var.get(u'vdec'))
+ var.put(u'exprs', Js([]))
+ @Js
+ def PyJs_anonymous_1257_(dec, this, arguments, var=var):
+ var = Scope({u'this':this, u'dec':dec, u'arguments':arguments}, var)
+ var.registers([u'dec'])
+ var.get(u'vars').put(var.get(u'dec').get(u'id').get(u'name'), var.get(u't').callprop(u'identifier', var.get(u'dec').get(u'id').get(u'name')))
+ if var.get(u'dec').get(u'init'):
+ var.get(u'exprs').callprop(u'push', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'dec').get(u'id'), var.get(u'dec').get(u'init')))
+ else:
+ if var.get(u'includeIdentifiers'):
+ var.get(u'exprs').callprop(u'push', var.get(u'dec').get(u'id'))
+ PyJs_anonymous_1257_._set_name(u'anonymous')
+ var.get(u'vdec').get(u'declarations').callprop(u'forEach', PyJs_anonymous_1257_)
+ if PyJsStrictEq(var.get(u'exprs').get(u'length'),Js(0.0)):
+ return var.get(u"null")
+ if PyJsStrictEq(var.get(u'exprs').get(u'length'),Js(1.0)):
+ return var.get(u'exprs').get(u'0')
+ return var.get(u't').callprop(u'sequenceExpression', var.get(u'exprs'))
+ PyJsHoisted_varDeclToExpr_.func_name = u'varDeclToExpr'
+ var.put(u'varDeclToExpr', PyJsHoisted_varDeclToExpr_)
+ var.get(u't').callprop(u'assertFunction', var.get(u'funPath').get(u'node'))
+ PyJs_Object_1256_ = Js({})
+ var.put(u'vars', PyJs_Object_1256_)
+ pass
+ @Js
+ def PyJs_exit_1260_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'exit':PyJs_exit_1260_, u'arguments':arguments}, var)
+ var.registers([u'expr', u'path'])
+ var.put(u'expr', var.get(u'varDeclToExpr')(var.get(u'path').get(u'node'), Js(False)))
+ if PyJsStrictEq(var.get(u'expr'),var.get(u"null")):
+ var.get(u'path').callprop(u'remove')
+ else:
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'expressionStatement', var.get(u'expr')))
+ var.get(u'path').callprop(u'skip')
+ PyJs_exit_1260_._set_name(u'exit')
+ PyJs_Object_1259_ = Js({u'exit':PyJs_exit_1260_})
+ @Js
+ def PyJs_ForStatement_1261_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'ForStatement':PyJs_ForStatement_1261_}, var)
+ var.registers([u'path', u'init'])
+ var.put(u'init', var.get(u'path').get(u'node').get(u'init'))
+ if var.get(u't').callprop(u'isVariableDeclaration', var.get(u'init')):
+ var.get(u'path').callprop(u'get', Js(u'init')).callprop(u'replaceWith', var.get(u'varDeclToExpr')(var.get(u'init'), Js(False)))
+ PyJs_ForStatement_1261_._set_name(u'ForStatement')
+ @Js
+ def PyJs_ForXStatement_1262_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'ForXStatement':PyJs_ForXStatement_1262_}, var)
+ var.registers([u'path', u'left'])
+ var.put(u'left', var.get(u'path').callprop(u'get', Js(u'left')))
+ if var.get(u'left').callprop(u'isVariableDeclaration'):
+ var.get(u'left').callprop(u'replaceWith', var.get(u'varDeclToExpr')(var.get(u'left').get(u'node'), var.get(u'true')))
+ PyJs_ForXStatement_1262_._set_name(u'ForXStatement')
+ @Js
+ def PyJs_FunctionDeclaration_1263_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'FunctionDeclaration':PyJs_FunctionDeclaration_1263_}, var)
+ var.registers([u'node', u'assignment', u'path'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.get(u'vars').put(var.get(u'node').get(u'id').get(u'name'), var.get(u'node').get(u'id'))
+ var.put(u'assignment', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'node').get(u'id'), var.get(u't').callprop(u'functionExpression', var.get(u'node').get(u'id'), var.get(u'node').get(u'params'), var.get(u'node').get(u'body'), var.get(u'node').get(u'generator'), var.get(u'node').get(u'expression')))))
+ if var.get(u'path').get(u'parentPath').callprop(u'isBlockStatement'):
+ var.get(u'path').get(u'parentPath').callprop(u'unshiftContainer', Js(u'body'), var.get(u'assignment'))
+ var.get(u'path').callprop(u'remove')
+ else:
+ var.get(u'path').callprop(u'replaceWith', var.get(u'assignment'))
+ var.get(u'path').callprop(u'skip')
+ PyJs_FunctionDeclaration_1263_._set_name(u'FunctionDeclaration')
+ @Js
+ def PyJs_FunctionExpression_1264_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'FunctionExpression':PyJs_FunctionExpression_1264_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'path').callprop(u'skip')
+ PyJs_FunctionExpression_1264_._set_name(u'FunctionExpression')
+ PyJs_Object_1258_ = Js({u'VariableDeclaration':PyJs_Object_1259_,u'ForStatement':PyJs_ForStatement_1261_,u'ForXStatement':PyJs_ForXStatement_1262_,u'FunctionDeclaration':PyJs_FunctionDeclaration_1263_,u'FunctionExpression':PyJs_FunctionExpression_1264_})
+ var.get(u'funPath').callprop(u'get', Js(u'body')).callprop(u'traverse', PyJs_Object_1258_)
+ PyJs_Object_1265_ = Js({})
+ var.put(u'paramNames', PyJs_Object_1265_)
+ @Js
+ def PyJs_anonymous_1266_(paramPath, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'paramPath':paramPath}, var)
+ var.registers([u'param', u'paramPath'])
+ var.put(u'param', var.get(u'paramPath').get(u'node'))
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'param')):
+ var.get(u'paramNames').put(var.get(u'param').get(u'name'), var.get(u'param'))
+ else:
+ pass
+ PyJs_anonymous_1266_._set_name(u'anonymous')
+ var.get(u'funPath').callprop(u'get', Js(u'params')).callprop(u'forEach', PyJs_anonymous_1266_)
+ var.put(u'declarations', Js([]))
+ @Js
+ def PyJs_anonymous_1267_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ if var.get(u'hasOwn').callprop(u'call', var.get(u'paramNames'), var.get(u'name')).neg():
+ var.get(u'declarations').callprop(u'push', var.get(u't').callprop(u'variableDeclarator', var.get(u'vars').get(var.get(u'name')), var.get(u"null")))
+ PyJs_anonymous_1267_._set_name(u'anonymous')
+ PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u'vars')).callprop(u'forEach', PyJs_anonymous_1267_)
+ if PyJsStrictEq(var.get(u'declarations').get(u'length'),Js(0.0)):
+ return var.get(u"null")
+ return var.get(u't').callprop(u'variableDeclaration', Js(u'var'), var.get(u'declarations'))
+ PyJs_anonymous_1255_._set_name(u'anonymous')
+ var.get(u'exports').put(u'hoist', PyJs_anonymous_1255_)
+PyJs_anonymous_1252_._set_name(u'anonymous')
+PyJs_Object_1268_ = Js({u'babel-runtime/core-js/object/keys':Js(103.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1269_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_1270_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'require')(Js(u'./visit'))
+ PyJs_anonymous_1270_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1270_)
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1269_._set_name(u'anonymous')
+PyJs_Object_1271_ = Js({u'./visit':Js(93.0)})
+@Js
+def PyJs_anonymous_1272_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'CatchEntry', u'LabeledEntry', u'SwitchEntry', u'module', u'TryEntry', u'_interopRequireWildcard', u'LMp', u'_assert2', u'require', u'_babelTypes', u'exports', u'_util', u'LeapManager', u't', u'_assert', u'FunctionEntry', u'_interopRequireDefault', u'Entry', u'LoopEntry', u'FinallyEntry'])
+ @Js
+ def PyJsHoisted_CatchEntry_(firstLoc, paramId, this, arguments, var=var):
+ var = Scope({u'firstLoc':firstLoc, u'this':this, u'paramId':paramId, u'arguments':arguments}, var)
+ var.registers([u'firstLoc', u'paramId'])
+ var.get(u'Entry').callprop(u'call', var.get(u"this"))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'firstLoc'))
+ var.get(u't').callprop(u'assertIdentifier', var.get(u'paramId'))
+ var.get(u"this").put(u'firstLoc', var.get(u'firstLoc'))
+ var.get(u"this").put(u'paramId', var.get(u'paramId'))
+ PyJsHoisted_CatchEntry_.func_name = u'CatchEntry'
+ var.put(u'CatchEntry', PyJsHoisted_CatchEntry_)
+ @Js
+ def PyJsHoisted_LabeledEntry_(breakLoc, label, this, arguments, var=var):
+ var = Scope({u'this':this, u'breakLoc':breakLoc, u'arguments':arguments, u'label':label}, var)
+ var.registers([u'breakLoc', u'label'])
+ var.get(u'Entry').callprop(u'call', var.get(u"this"))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'breakLoc'))
+ var.get(u't').callprop(u'assertIdentifier', var.get(u'label'))
+ var.get(u"this").put(u'breakLoc', var.get(u'breakLoc'))
+ var.get(u"this").put(u'label', var.get(u'label'))
+ PyJsHoisted_LabeledEntry_.func_name = u'LabeledEntry'
+ var.put(u'LabeledEntry', PyJsHoisted_LabeledEntry_)
+ @Js
+ def PyJsHoisted_SwitchEntry_(breakLoc, this, arguments, var=var):
+ var = Scope({u'this':this, u'breakLoc':breakLoc, u'arguments':arguments}, var)
+ var.registers([u'breakLoc'])
+ var.get(u'Entry').callprop(u'call', var.get(u"this"))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'breakLoc'))
+ var.get(u"this").put(u'breakLoc', var.get(u'breakLoc'))
+ PyJsHoisted_SwitchEntry_.func_name = u'SwitchEntry'
+ var.put(u'SwitchEntry', PyJsHoisted_SwitchEntry_)
+ @Js
+ def PyJsHoisted_TryEntry_(firstLoc, catchEntry, finallyEntry, this, arguments, var=var):
+ var = Scope({u'firstLoc':firstLoc, u'catchEntry':catchEntry, u'this':this, u'arguments':arguments, u'finallyEntry':finallyEntry}, var)
+ var.registers([u'firstLoc', u'catchEntry', u'finallyEntry'])
+ var.get(u'Entry').callprop(u'call', var.get(u"this"))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'firstLoc'))
+ if var.get(u'catchEntry'):
+ var.get(u'_assert2').get(u'default').callprop(u'ok', var.get(u'catchEntry').instanceof(var.get(u'CatchEntry')))
+ else:
+ var.put(u'catchEntry', var.get(u"null"))
+ if var.get(u'finallyEntry'):
+ var.get(u'_assert2').get(u'default').callprop(u'ok', var.get(u'finallyEntry').instanceof(var.get(u'FinallyEntry')))
+ else:
+ var.put(u'finallyEntry', var.get(u"null"))
+ var.get(u'_assert2').get(u'default').callprop(u'ok', (var.get(u'catchEntry') or var.get(u'finallyEntry')))
+ var.get(u"this").put(u'firstLoc', var.get(u'firstLoc'))
+ var.get(u"this").put(u'catchEntry', var.get(u'catchEntry'))
+ var.get(u"this").put(u'finallyEntry', var.get(u'finallyEntry'))
+ PyJsHoisted_TryEntry_.func_name = u'TryEntry'
+ var.put(u'TryEntry', PyJsHoisted_TryEntry_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1273_ = Js({})
+ var.put(u'newObj', PyJs_Object_1273_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_LeapManager_(emitter, this, arguments, var=var):
+ var = Scope({u'this':this, u'emitter':emitter, u'arguments':arguments}, var)
+ var.registers([u'Emitter', u'emitter'])
+ var.get(u'_assert2').get(u'default').callprop(u'ok', var.get(u"this").instanceof(var.get(u'LeapManager')))
+ var.put(u'Emitter', var.get(u'require')(Js(u'./emit')).get(u'Emitter'))
+ var.get(u'_assert2').get(u'default').callprop(u'ok', var.get(u'emitter').instanceof(var.get(u'Emitter')))
+ var.get(u"this").put(u'emitter', var.get(u'emitter'))
+ var.get(u"this").put(u'entryStack', Js([var.get(u'FunctionEntry').create(var.get(u'emitter').get(u'finalLoc'))]))
+ PyJsHoisted_LeapManager_.func_name = u'LeapManager'
+ var.put(u'LeapManager', PyJsHoisted_LeapManager_)
+ @Js
+ def PyJsHoisted_FunctionEntry_(returnLoc, this, arguments, var=var):
+ var = Scope({u'this':this, u'returnLoc':returnLoc, u'arguments':arguments}, var)
+ var.registers([u'returnLoc'])
+ var.get(u'Entry').callprop(u'call', var.get(u"this"))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'returnLoc'))
+ var.get(u"this").put(u'returnLoc', var.get(u'returnLoc'))
+ PyJsHoisted_FunctionEntry_.func_name = u'FunctionEntry'
+ var.put(u'FunctionEntry', PyJsHoisted_FunctionEntry_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1274_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1274_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_Entry_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'_assert2').get(u'default').callprop(u'ok', var.get(u"this").instanceof(var.get(u'Entry')))
+ PyJsHoisted_Entry_.func_name = u'Entry'
+ var.put(u'Entry', PyJsHoisted_Entry_)
+ @Js
+ def PyJsHoisted_LoopEntry_(breakLoc, continueLoc, label, this, arguments, var=var):
+ var = Scope({u'continueLoc':continueLoc, u'breakLoc':breakLoc, u'this':this, u'arguments':arguments, u'label':label}, var)
+ var.registers([u'continueLoc', u'breakLoc', u'label'])
+ var.get(u'Entry').callprop(u'call', var.get(u"this"))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'breakLoc'))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'continueLoc'))
+ if var.get(u'label'):
+ var.get(u't').callprop(u'assertIdentifier', var.get(u'label'))
+ else:
+ var.put(u'label', var.get(u"null"))
+ var.get(u"this").put(u'breakLoc', var.get(u'breakLoc'))
+ var.get(u"this").put(u'continueLoc', var.get(u'continueLoc'))
+ var.get(u"this").put(u'label', var.get(u'label'))
+ PyJsHoisted_LoopEntry_.func_name = u'LoopEntry'
+ var.put(u'LoopEntry', PyJsHoisted_LoopEntry_)
+ @Js
+ def PyJsHoisted_FinallyEntry_(firstLoc, afterLoc, this, arguments, var=var):
+ var = Scope({u'firstLoc':firstLoc, u'this':this, u'afterLoc':afterLoc, u'arguments':arguments}, var)
+ var.registers([u'firstLoc', u'afterLoc'])
+ var.get(u'Entry').callprop(u'call', var.get(u"this"))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'firstLoc'))
+ var.get(u't').callprop(u'assertLiteral', var.get(u'afterLoc'))
+ var.get(u"this").put(u'firstLoc', var.get(u'firstLoc'))
+ var.get(u"this").put(u'afterLoc', var.get(u'afterLoc'))
+ PyJsHoisted_FinallyEntry_.func_name = u'FinallyEntry'
+ var.put(u'FinallyEntry', PyJsHoisted_FinallyEntry_)
+ Js(u'use strict')
+ var.put(u'_assert', var.get(u'require')(Js(u'assert')))
+ var.put(u'_assert2', var.get(u'_interopRequireDefault')(var.get(u'_assert')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ var.put(u'_util', var.get(u'require')(Js(u'util')))
+ pass
+ pass
+ pass
+ pass
+ PyJsComma(Js(0.0),var.get(u'_util').get(u'inherits'))(var.get(u'FunctionEntry'), var.get(u'Entry'))
+ var.get(u'exports').put(u'FunctionEntry', var.get(u'FunctionEntry'))
+ pass
+ PyJsComma(Js(0.0),var.get(u'_util').get(u'inherits'))(var.get(u'LoopEntry'), var.get(u'Entry'))
+ var.get(u'exports').put(u'LoopEntry', var.get(u'LoopEntry'))
+ pass
+ PyJsComma(Js(0.0),var.get(u'_util').get(u'inherits'))(var.get(u'SwitchEntry'), var.get(u'Entry'))
+ var.get(u'exports').put(u'SwitchEntry', var.get(u'SwitchEntry'))
+ pass
+ PyJsComma(Js(0.0),var.get(u'_util').get(u'inherits'))(var.get(u'TryEntry'), var.get(u'Entry'))
+ var.get(u'exports').put(u'TryEntry', var.get(u'TryEntry'))
+ pass
+ PyJsComma(Js(0.0),var.get(u'_util').get(u'inherits'))(var.get(u'CatchEntry'), var.get(u'Entry'))
+ var.get(u'exports').put(u'CatchEntry', var.get(u'CatchEntry'))
+ pass
+ PyJsComma(Js(0.0),var.get(u'_util').get(u'inherits'))(var.get(u'FinallyEntry'), var.get(u'Entry'))
+ var.get(u'exports').put(u'FinallyEntry', var.get(u'FinallyEntry'))
+ pass
+ PyJsComma(Js(0.0),var.get(u'_util').get(u'inherits'))(var.get(u'LabeledEntry'), var.get(u'Entry'))
+ var.get(u'exports').put(u'LabeledEntry', var.get(u'LabeledEntry'))
+ pass
+ var.put(u'LMp', var.get(u'LeapManager').get(u'prototype'))
+ var.get(u'exports').put(u'LeapManager', var.get(u'LeapManager'))
+ @Js
+ def PyJs_anonymous_1275_(entry, callback, this, arguments, var=var):
+ var = Scope({u'this':this, u'entry':entry, u'arguments':arguments, u'callback':callback}, var)
+ var.registers([u'entry', u'popped', u'callback'])
+ var.get(u'_assert2').get(u'default').callprop(u'ok', var.get(u'entry').instanceof(var.get(u'Entry')))
+ var.get(u"this").get(u'entryStack').callprop(u'push', var.get(u'entry'))
+ try:
+ var.get(u'callback').callprop(u'call', var.get(u"this").get(u'emitter'))
+ finally:
+ var.put(u'popped', var.get(u"this").get(u'entryStack').callprop(u'pop'))
+ var.get(u'_assert2').get(u'default').callprop(u'strictEqual', var.get(u'popped'), var.get(u'entry'))
+ PyJs_anonymous_1275_._set_name(u'anonymous')
+ var.get(u'LMp').put(u'withEntry', PyJs_anonymous_1275_)
+ @Js
+ def PyJs_anonymous_1276_(property, label, this, arguments, var=var):
+ var = Scope({u'this':this, u'property':property, u'arguments':arguments, u'label':label}, var)
+ var.registers([u'i', u'entry', u'property', u'label', u'loc'])
+ #for JS loop
+ var.put(u'i', (var.get(u"this").get(u'entryStack').get(u'length')-Js(1.0)))
+ while (var.get(u'i')>=Js(0.0)):
+ try:
+ var.put(u'entry', var.get(u"this").get(u'entryStack').get(var.get(u'i')))
+ var.put(u'loc', var.get(u'entry').get(var.get(u'property')))
+ if var.get(u'loc'):
+ if var.get(u'label'):
+ if (var.get(u'entry').get(u'label') and PyJsStrictEq(var.get(u'entry').get(u'label').get(u'name'),var.get(u'label').get(u'name'))):
+ return var.get(u'loc')
+ else:
+ if var.get(u'entry').instanceof(var.get(u'LabeledEntry')):
+ pass
+ else:
+ return var.get(u'loc')
+ finally:
+ var.put(u'i',Js(var.get(u'i').to_number())-Js(1))
+ return var.get(u"null")
+ PyJs_anonymous_1276_._set_name(u'anonymous')
+ var.get(u'LMp').put(u'_findLeapLocation', PyJs_anonymous_1276_)
+ @Js
+ def PyJs_anonymous_1277_(label, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'label':label}, var)
+ var.registers([u'label'])
+ return var.get(u"this").callprop(u'_findLeapLocation', Js(u'breakLoc'), var.get(u'label'))
+ PyJs_anonymous_1277_._set_name(u'anonymous')
+ var.get(u'LMp').put(u'getBreakLoc', PyJs_anonymous_1277_)
+ @Js
+ def PyJs_anonymous_1278_(label, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'label':label}, var)
+ var.registers([u'label'])
+ return var.get(u"this").callprop(u'_findLeapLocation', Js(u'continueLoc'), var.get(u'label'))
+ PyJs_anonymous_1278_._set_name(u'anonymous')
+ var.get(u'LMp').put(u'getContinueLoc', PyJs_anonymous_1278_)
+PyJs_anonymous_1272_._set_name(u'anonymous')
+PyJs_Object_1279_ = Js({u'./emit':Js(87.0),u'assert':Js(524.0),u'babel-types':Js(258.0),u'util':Js(534.0)})
+@Js
+def PyJs_anonymous_1280_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'module', u'sideEffectTypes', u'opaqueTypes', u'_interopRequireWildcard', u'leapTypes', u'_assert2', u'require', u'_babelTypes', u'm', u'exports', u'hasOwn', u'makePredicate', u't', u'_assert', u'_interopRequireDefault', u'type'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1282_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1282_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_makePredicate_(propertyName, knownTypes, this, arguments, var=var):
+ var = Scope({u'this':this, u'propertyName':propertyName, u'arguments':arguments, u'knownTypes':knownTypes}, var)
+ var.registers([u'predicate', u'onlyChildren', u'propertyName', u'knownTypes'])
+ @Js
+ def PyJsHoisted_predicate_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'meta'])
+ var.get(u't').callprop(u'assertNode', var.get(u'node'))
+ var.put(u'meta', var.get(u'm')(var.get(u'node')))
+ if var.get(u'hasOwn').callprop(u'call', var.get(u'meta'), var.get(u'propertyName')):
+ return var.get(u'meta').get(var.get(u'propertyName'))
+ if var.get(u'hasOwn').callprop(u'call', var.get(u'opaqueTypes'), var.get(u'node').get(u'type')):
+ return var.get(u'meta').put(var.get(u'propertyName'), Js(False))
+ if var.get(u'hasOwn').callprop(u'call', var.get(u'knownTypes'), var.get(u'node').get(u'type')):
+ return var.get(u'meta').put(var.get(u'propertyName'), var.get(u'true'))
+ return var.get(u'meta').put(var.get(u'propertyName'), var.get(u'onlyChildren')(var.get(u'node')))
+ PyJsHoisted_predicate_.func_name = u'predicate'
+ var.put(u'predicate', PyJsHoisted_predicate_)
+ @Js
+ def PyJsHoisted_onlyChildren_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'keys', u'i', u'result', u'key', u'child', u'check'])
+ @Js
+ def PyJsHoisted_check_(child, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'child':child}, var)
+ var.registers([u'child'])
+ if var.get(u'result'):
+ pass
+ else:
+ if var.get(u'Array').callprop(u'isArray', var.get(u'child')):
+ var.get(u'child').callprop(u'some', var.get(u'check'))
+ else:
+ if var.get(u't').callprop(u'isNode', var.get(u'child')):
+ var.get(u'_assert2').get(u'default').callprop(u'strictEqual', var.get(u'result'), Js(False))
+ var.put(u'result', var.get(u'predicate')(var.get(u'child')))
+ return var.get(u'result')
+ PyJsHoisted_check_.func_name = u'check'
+ var.put(u'check', PyJsHoisted_check_)
+ var.get(u't').callprop(u'assertNode', var.get(u'node'))
+ var.put(u'result', Js(False))
+ pass
+ var.put(u'keys', var.get(u't').get(u'VISITOR_KEYS').get(var.get(u'node').get(u'type')))
+ if var.get(u'keys'):
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(0.0)):
+ var.get(u'bodyBlockPath').get(u'node').put(u'body', var.get(u'innerBody'))
+ var.put(u'outerFnExpr', var.get(u'getOuterFnExpr')(var.get(u'path')))
+ var.get(u't').callprop(u'assertIdentifier', var.get(u'node').get(u'id'))
+ var.put(u'innerFnId', var.get(u't').callprop(u'identifier', (var.get(u'node').get(u'id').get(u'name')+Js(u'$'))))
+ var.put(u'vars', PyJsComma(Js(0.0),var.get(u'_hoist').get(u'hoist'))(var.get(u'path')))
+ var.put(u'didRenameArguments', var.get(u'renameArguments')(var.get(u'path'), var.get(u'argsId')))
+ if var.get(u'didRenameArguments'):
+ var.put(u'vars', (var.get(u'vars') or var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([]))))
+ var.get(u'vars').get(u'declarations').callprop(u'push', var.get(u't').callprop(u'variableDeclarator', var.get(u'argsId'), var.get(u't').callprop(u'identifier', Js(u'arguments'))))
+ var.put(u'emitter', var.get(u'_emit').get(u'Emitter').create(var.get(u'contextId')))
+ var.get(u'emitter').callprop(u'explode', var.get(u'path').callprop(u'get', Js(u'body')))
+ if (var.get(u'vars') and (var.get(u'vars').get(u'declarations').get(u'length')>Js(0.0))):
+ var.get(u'outerBody').callprop(u'push', var.get(u'vars'))
+ var.put(u'wrapArgs', Js([var.get(u'emitter').callprop(u'getContextFunction', var.get(u'innerFnId')), (var.get(u'outerFnExpr') if var.get(u'node').get(u'generator') else var.get(u't').callprop(u'nullLiteral')), var.get(u't').callprop(u'thisExpression')]))
+ var.put(u'tryLocsList', var.get(u'emitter').callprop(u'getTryLocsList'))
+ if var.get(u'tryLocsList'):
+ var.get(u'wrapArgs').callprop(u'push', var.get(u'tryLocsList'))
+ var.put(u'wrapCall', var.get(u't').callprop(u'callExpression', var.get(u'util').callprop(u'runtimeProperty', (Js(u'async') if var.get(u'node').get(u'async') else Js(u'wrap'))), var.get(u'wrapArgs')))
+ var.get(u'outerBody').callprop(u'push', var.get(u't').callprop(u'returnStatement', var.get(u'wrapCall')))
+ var.get(u'node').put(u'body', var.get(u't').callprop(u'blockStatement', var.get(u'outerBody')))
+ var.put(u'wasGeneratorFunction', var.get(u'node').get(u'generator'))
+ if var.get(u'wasGeneratorFunction'):
+ var.get(u'node').put(u'generator', Js(False))
+ if var.get(u'node').get(u'async'):
+ var.get(u'node').put(u'async', Js(False))
+ if (var.get(u'wasGeneratorFunction') and var.get(u't').callprop(u'isExpression', var.get(u'node'))):
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'callExpression', var.get(u'util').callprop(u'runtimeProperty', Js(u'mark')), Js([var.get(u'node')])))
+ var.get(u'path').callprop(u'requeue')
+ PyJs_exit_1296_._set_name(u'exit')
+ PyJs_Object_1295_ = Js({u'exit':PyJs_exit_1296_})
+ PyJs_Object_1294_ = Js({u'Function':PyJs_Object_1295_})
+ var.get(u'exports').put(u'visitor', PyJs_Object_1294_)
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_FunctionExpressionFunctionDeclaration_1303_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'FunctionExpressionFunctionDeclaration':PyJs_FunctionExpressionFunctionDeclaration_1303_}, var)
+ var.registers([u'path'])
+ var.get(u'path').callprop(u'skip')
+ PyJs_FunctionExpressionFunctionDeclaration_1303_._set_name(u'FunctionExpressionFunctionDeclaration')
+ @Js
+ def PyJs_Identifier_1304_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'Identifier':PyJs_Identifier_1304_, u'arguments':arguments}, var)
+ var.registers([u'path', u'state'])
+ if (PyJsStrictEq(var.get(u'path').get(u'node').get(u'name'),Js(u'arguments')) and var.get(u'util').callprop(u'isReference', var.get(u'path'))):
+ var.get(u'path').callprop(u'replaceWith', var.get(u'state').get(u'argsId'))
+ var.get(u'state').put(u'didRenameArguments', var.get(u'true'))
+ PyJs_Identifier_1304_._set_name(u'Identifier')
+ PyJs_Object_1302_ = Js({u'FunctionExpression|FunctionDeclaration':PyJs_FunctionExpressionFunctionDeclaration_1303_,u'Identifier':PyJs_Identifier_1304_})
+ var.put(u'argumentsVisitor', PyJs_Object_1302_)
+ @Js
+ def PyJs_MetaProperty_1306_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'MetaProperty':PyJs_MetaProperty_1306_, u'arguments':arguments}, var)
+ var.registers([u'node', u'path'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if (PyJsStrictEq(var.get(u'node').get(u'meta').get(u'name'),Js(u'function')) and PyJsStrictEq(var.get(u'node').get(u'property').get(u'name'),Js(u'sent'))):
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'memberExpression', var.get(u"this").get(u'context'), var.get(u't').callprop(u'identifier', Js(u'_sent'))))
+ PyJs_MetaProperty_1306_._set_name(u'MetaProperty')
+ PyJs_Object_1305_ = Js({u'MetaProperty':PyJs_MetaProperty_1306_})
+ var.put(u'functionSentVisitor', PyJs_Object_1305_)
+ @Js
+ def PyJs_Function_1308_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'Function':PyJs_Function_1308_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'path').callprop(u'skip')
+ PyJs_Function_1308_._set_name(u'Function')
+ @Js
+ def PyJs_AwaitExpression_1309_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'AwaitExpression':PyJs_AwaitExpression_1309_}, var)
+ var.registers([u'path', u'argument'])
+ var.put(u'argument', var.get(u'path').get(u'node').get(u'argument'))
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'yieldExpression', var.get(u't').callprop(u'callExpression', var.get(u'util').callprop(u'runtimeProperty', Js(u'awrap')), Js([var.get(u'argument')])), Js(False)))
+ PyJs_AwaitExpression_1309_._set_name(u'AwaitExpression')
+ PyJs_Object_1307_ = Js({u'Function':PyJs_Function_1308_,u'AwaitExpression':PyJs_AwaitExpression_1309_})
+ var.put(u'awaitVisitor', PyJs_Object_1307_)
+PyJs_anonymous_1291_._set_name(u'anonymous')
+PyJs_Object_1310_ = Js({u'./emit':Js(87.0),u'./hoist':Js(88.0),u'./util':Js(92.0),u'assert':Js(524.0),u'babel-types':Js(258.0),u'private':Js(500.0)})
+@Js
+def PyJs_anonymous_1311_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_interopRequireWildcard', u'require', u'_babelTypes', u'module', u't', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1317_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1317_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1316_ = Js({})
+ var.put(u'newObj', PyJs_Object_1316_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ @Js
+ def PyJs_anonymous_1312_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_Program_1315_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'Program':PyJs_Program_1315_, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'directive', u'state', u'_i', u'path', u'_ref'])
+ if (PyJsStrictEq(var.get(u'state').get(u'opts').get(u'strict'),Js(False)) or PyJsStrictEq(var.get(u'state').get(u'opts').get(u'strictMode'),Js(False))):
+ return var.get('undefined')
+ var.put(u'node', var.get(u'path').get(u'node'))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'node').get(u'directives'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'directive', var.get(u'_ref'))
+ if PyJsStrictEq(var.get(u'directive').get(u'value').get(u'value'),Js(u'use strict')):
+ return var.get('undefined')
+
+ var.get(u'path').callprop(u'unshiftContainer', Js(u'directives'), var.get(u't').callprop(u'directive', var.get(u't').callprop(u'directiveLiteral', Js(u'use strict'))))
+ PyJs_Program_1315_._set_name(u'Program')
+ PyJs_Object_1314_ = Js({u'Program':PyJs_Program_1315_})
+ PyJs_Object_1313_ = Js({u'visitor':PyJs_Object_1314_})
+ return PyJs_Object_1313_
+ PyJs_anonymous_1312_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1312_)
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1311_._set_name(u'anonymous')
+PyJs_Object_1318_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1319_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_babelPluginTransformEs2015ModulesCommonjs', u'_babelPluginTransformEs2015ComputedProperties', u'_babelPluginTransformEs2015BlockScopedFunctions2', u'_babelPluginTransformEs2015ForOf2', u'_babelPluginTransformEs2015ModulesUmd', u'_babelPluginTransformEs2015ArrowFunctions', u'_babelPluginTransformEs2015TypeofSymbol', u'exports', u'module', u'_interopRequireDefault', u'_babelPluginTransformEs2015ForOf', u'_babelPluginTransformEs2015BlockScoping', u'_babelPluginTransformEs2015Parameters2', u'_babelPluginTransformEs2015TemplateLiterals', u'_babelPluginTransformEs2015ComputedProperties2', u'_babelPluginTransformEs2015Spread', u'_babelPluginCheckEs2015Constants', u'_babelPluginTransformEs2015Destructuring', u'_babelPluginTransformEs2015DuplicateKeys2', u'_babelPluginTransformEs2015ModulesCommonjs2', u'_babelPluginTransformEs2015TemplateLiterals2', u'_babelPluginTransformEs2015Parameters', u'_babelPluginCheckEs2015Constants2', u'_babelPluginTransformEs2015StickyRegex2', u'_babelPluginTransformEs2015BlockScopedFunctions', u'_babelPluginTransformEs2015ShorthandProperties2', u'_babelPluginTransformRegenerator', u'_babelPluginTransformEs2015ModulesSystemjs', u'_babelPluginTransformEs2015DuplicateKeys', u'_babelPluginTransformEs2015ModulesAmd2', u'_babelPluginTransformEs2015FunctionName', u'_babelPluginTransformEs2015ObjectSuper2', u'_babelPluginTransformEs2015Destructuring2', u'_babelPluginTransformEs2015ShorthandProperties', u'_babelPluginTransformEs2015StickyRegex', u'_babelPluginTransformEs2015ModulesAmd', u'_babelPluginTransformEs2015ModulesUmd2', u'_babelPluginTransformEs2015Classes2', u'preset', u'_babelPluginTransformEs2015ObjectSuper', u'_babelPluginTransformEs2015TypeofSymbol2', u'_babelPluginTransformEs2015UnicodeRegex', u'_babelPluginTransformEs2015Classes', u'_babelPluginTransformEs2015Literals2', u'_babelPluginTransformEs2015ModulesSystemjs2', u'_babelPluginTransformEs2015Literals', u'_babelPluginTransformEs2015UnicodeRegex2', u'_babelPluginTransformEs2015FunctionName2', u'_babelPluginTransformEs2015BlockScoping2', u'_babelPluginTransformRegenerator2', u'oldConfig', u'_babelPluginTransformEs2015Spread2', u'require', u'_babelPluginTransformEs2015ArrowFunctions2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1320_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1320_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_preset_(context, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'context':context}, var)
+ var.registers([u'optsLoose', u'moduleTypes', u'loose', u'modules', u'context', u'spec', u'opts'])
+ PyJs_Object_1321_ = Js({})
+ var.put(u'opts', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else PyJs_Object_1321_))
+ var.put(u'moduleTypes', Js([Js(u'commonjs'), Js(u'amd'), Js(u'umd'), Js(u'systemjs')]))
+ var.put(u'loose', Js(False))
+ var.put(u'modules', Js(u'commonjs'))
+ var.put(u'spec', Js(False))
+ if PyJsStrictNeq(var.get(u'opts'),var.get(u'undefined')):
+ if PyJsStrictNeq(var.get(u'opts').get(u'loose'),var.get(u'undefined')):
+ var.put(u'loose', var.get(u'opts').get(u'loose'))
+ if PyJsStrictNeq(var.get(u'opts').get(u'modules'),var.get(u'undefined')):
+ var.put(u'modules', var.get(u'opts').get(u'modules'))
+ if PyJsStrictNeq(var.get(u'opts').get(u'spec'),var.get(u'undefined')):
+ var.put(u'spec', var.get(u'opts').get(u'spec'))
+ if PyJsStrictNeq(var.get(u'loose',throw=False).typeof(),Js(u'boolean')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"Preset es2015 'loose' option must be a boolean.")))
+ raise PyJsTempException
+ if PyJsStrictNeq(var.get(u'spec',throw=False).typeof(),Js(u'boolean')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"Preset es2015 'spec' option must be a boolean.")))
+ raise PyJsTempException
+ if (PyJsStrictNeq(var.get(u'modules'),Js(False)) and PyJsStrictEq(var.get(u'moduleTypes').callprop(u'indexOf', var.get(u'modules')),(-Js(1.0)))):
+ PyJsTempException = JsToPyException(var.get(u'Error').create((Js(u"Preset es2015 'modules' option must be 'false' to indicate no modules\n")+Js(u"or a module type which be be one of: 'commonjs' (default), 'amd', 'umd', 'systemjs'"))))
+ raise PyJsTempException
+ PyJs_Object_1322_ = Js({u'loose':var.get(u'loose')})
+ var.put(u'optsLoose', PyJs_Object_1322_)
+ def PyJs_LONG_1327_(var=var):
+ PyJs_Object_1324_ = Js({u'loose':var.get(u'loose'),u'spec':var.get(u'spec')})
+ PyJs_Object_1325_ = Js({u'spec':var.get(u'spec')})
+ PyJs_Object_1326_ = Js({u'async':Js(False),u'asyncGenerators':Js(False)})
+ return Js([Js([var.get(u'_babelPluginTransformEs2015TemplateLiterals2').get(u'default'), PyJs_Object_1324_]), var.get(u'_babelPluginTransformEs2015Literals2').get(u'default'), var.get(u'_babelPluginTransformEs2015FunctionName2').get(u'default'), Js([var.get(u'_babelPluginTransformEs2015ArrowFunctions2').get(u'default'), PyJs_Object_1325_]), var.get(u'_babelPluginTransformEs2015BlockScopedFunctions2').get(u'default'), Js([var.get(u'_babelPluginTransformEs2015Classes2').get(u'default'), var.get(u'optsLoose')]), var.get(u'_babelPluginTransformEs2015ObjectSuper2').get(u'default'), var.get(u'_babelPluginTransformEs2015ShorthandProperties2').get(u'default'), var.get(u'_babelPluginTransformEs2015DuplicateKeys2').get(u'default'), Js([var.get(u'_babelPluginTransformEs2015ComputedProperties2').get(u'default'), var.get(u'optsLoose')]), Js([var.get(u'_babelPluginTransformEs2015ForOf2').get(u'default'), var.get(u'optsLoose')]), var.get(u'_babelPluginTransformEs2015StickyRegex2').get(u'default'), var.get(u'_babelPluginTransformEs2015UnicodeRegex2').get(u'default'), var.get(u'_babelPluginCheckEs2015Constants2').get(u'default'), Js([var.get(u'_babelPluginTransformEs2015Spread2').get(u'default'), var.get(u'optsLoose')]), var.get(u'_babelPluginTransformEs2015Parameters2').get(u'default'), Js([var.get(u'_babelPluginTransformEs2015Destructuring2').get(u'default'), var.get(u'optsLoose')]), var.get(u'_babelPluginTransformEs2015BlockScoping2').get(u'default'), var.get(u'_babelPluginTransformEs2015TypeofSymbol2').get(u'default'), (PyJsStrictEq(var.get(u'modules'),Js(u'commonjs')) and Js([var.get(u'_babelPluginTransformEs2015ModulesCommonjs2').get(u'default'), var.get(u'optsLoose')])), (PyJsStrictEq(var.get(u'modules'),Js(u'systemjs')) and Js([var.get(u'_babelPluginTransformEs2015ModulesSystemjs2').get(u'default'), var.get(u'optsLoose')])), (PyJsStrictEq(var.get(u'modules'),Js(u'amd')) and Js([var.get(u'_babelPluginTransformEs2015ModulesAmd2').get(u'default'), var.get(u'optsLoose')])), (PyJsStrictEq(var.get(u'modules'),Js(u'umd')) and Js([var.get(u'_babelPluginTransformEs2015ModulesUmd2').get(u'default'), var.get(u'optsLoose')])), Js([var.get(u'_babelPluginTransformRegenerator2').get(u'default'), PyJs_Object_1326_])]).callprop(u'filter', var.get(u'Boolean'))
+ PyJs_Object_1323_ = Js({u'plugins':PyJs_LONG_1327_()})
+ return PyJs_Object_1323_
+ PyJsHoisted_preset_.func_name = u'preset'
+ var.put(u'preset', PyJsHoisted_preset_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_babelPluginTransformEs2015TemplateLiterals', var.get(u'require')(Js(u'babel-plugin-transform-es2015-template-literals')))
+ var.put(u'_babelPluginTransformEs2015TemplateLiterals2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015TemplateLiterals')))
+ var.put(u'_babelPluginTransformEs2015Literals', var.get(u'require')(Js(u'babel-plugin-transform-es2015-literals')))
+ var.put(u'_babelPluginTransformEs2015Literals2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015Literals')))
+ var.put(u'_babelPluginTransformEs2015FunctionName', var.get(u'require')(Js(u'babel-plugin-transform-es2015-function-name')))
+ var.put(u'_babelPluginTransformEs2015FunctionName2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015FunctionName')))
+ var.put(u'_babelPluginTransformEs2015ArrowFunctions', var.get(u'require')(Js(u'babel-plugin-transform-es2015-arrow-functions')))
+ var.put(u'_babelPluginTransformEs2015ArrowFunctions2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015ArrowFunctions')))
+ var.put(u'_babelPluginTransformEs2015BlockScopedFunctions', var.get(u'require')(Js(u'babel-plugin-transform-es2015-block-scoped-functions')))
+ var.put(u'_babelPluginTransformEs2015BlockScopedFunctions2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015BlockScopedFunctions')))
+ var.put(u'_babelPluginTransformEs2015Classes', var.get(u'require')(Js(u'babel-plugin-transform-es2015-classes')))
+ var.put(u'_babelPluginTransformEs2015Classes2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015Classes')))
+ var.put(u'_babelPluginTransformEs2015ObjectSuper', var.get(u'require')(Js(u'babel-plugin-transform-es2015-object-super')))
+ var.put(u'_babelPluginTransformEs2015ObjectSuper2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015ObjectSuper')))
+ var.put(u'_babelPluginTransformEs2015ShorthandProperties', var.get(u'require')(Js(u'babel-plugin-transform-es2015-shorthand-properties')))
+ var.put(u'_babelPluginTransformEs2015ShorthandProperties2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015ShorthandProperties')))
+ var.put(u'_babelPluginTransformEs2015DuplicateKeys', var.get(u'require')(Js(u'babel-plugin-transform-es2015-duplicate-keys')))
+ var.put(u'_babelPluginTransformEs2015DuplicateKeys2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015DuplicateKeys')))
+ var.put(u'_babelPluginTransformEs2015ComputedProperties', var.get(u'require')(Js(u'babel-plugin-transform-es2015-computed-properties')))
+ var.put(u'_babelPluginTransformEs2015ComputedProperties2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015ComputedProperties')))
+ var.put(u'_babelPluginTransformEs2015ForOf', var.get(u'require')(Js(u'babel-plugin-transform-es2015-for-of')))
+ var.put(u'_babelPluginTransformEs2015ForOf2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015ForOf')))
+ var.put(u'_babelPluginTransformEs2015StickyRegex', var.get(u'require')(Js(u'babel-plugin-transform-es2015-sticky-regex')))
+ var.put(u'_babelPluginTransformEs2015StickyRegex2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015StickyRegex')))
+ var.put(u'_babelPluginTransformEs2015UnicodeRegex', var.get(u'require')(Js(u'babel-plugin-transform-es2015-unicode-regex')))
+ var.put(u'_babelPluginTransformEs2015UnicodeRegex2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015UnicodeRegex')))
+ var.put(u'_babelPluginCheckEs2015Constants', var.get(u'require')(Js(u'babel-plugin-check-es2015-constants')))
+ var.put(u'_babelPluginCheckEs2015Constants2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginCheckEs2015Constants')))
+ var.put(u'_babelPluginTransformEs2015Spread', var.get(u'require')(Js(u'babel-plugin-transform-es2015-spread')))
+ var.put(u'_babelPluginTransformEs2015Spread2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015Spread')))
+ var.put(u'_babelPluginTransformEs2015Parameters', var.get(u'require')(Js(u'babel-plugin-transform-es2015-parameters')))
+ var.put(u'_babelPluginTransformEs2015Parameters2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015Parameters')))
+ var.put(u'_babelPluginTransformEs2015Destructuring', var.get(u'require')(Js(u'babel-plugin-transform-es2015-destructuring')))
+ var.put(u'_babelPluginTransformEs2015Destructuring2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015Destructuring')))
+ var.put(u'_babelPluginTransformEs2015BlockScoping', var.get(u'require')(Js(u'babel-plugin-transform-es2015-block-scoping')))
+ var.put(u'_babelPluginTransformEs2015BlockScoping2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015BlockScoping')))
+ var.put(u'_babelPluginTransformEs2015TypeofSymbol', var.get(u'require')(Js(u'babel-plugin-transform-es2015-typeof-symbol')))
+ var.put(u'_babelPluginTransformEs2015TypeofSymbol2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015TypeofSymbol')))
+ var.put(u'_babelPluginTransformEs2015ModulesCommonjs', var.get(u'require')(Js(u'babel-plugin-transform-es2015-modules-commonjs')))
+ var.put(u'_babelPluginTransformEs2015ModulesCommonjs2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015ModulesCommonjs')))
+ var.put(u'_babelPluginTransformEs2015ModulesSystemjs', var.get(u'require')(Js(u'babel-plugin-transform-es2015-modules-systemjs')))
+ var.put(u'_babelPluginTransformEs2015ModulesSystemjs2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015ModulesSystemjs')))
+ var.put(u'_babelPluginTransformEs2015ModulesAmd', var.get(u'require')(Js(u'babel-plugin-transform-es2015-modules-amd')))
+ var.put(u'_babelPluginTransformEs2015ModulesAmd2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015ModulesAmd')))
+ var.put(u'_babelPluginTransformEs2015ModulesUmd', var.get(u'require')(Js(u'babel-plugin-transform-es2015-modules-umd')))
+ var.put(u'_babelPluginTransformEs2015ModulesUmd2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformEs2015ModulesUmd')))
+ var.put(u'_babelPluginTransformRegenerator', var.get(u'require')(Js(u'babel-plugin-transform-regenerator')))
+ var.put(u'_babelPluginTransformRegenerator2', var.get(u'_interopRequireDefault')(var.get(u'_babelPluginTransformRegenerator')))
+ pass
+ pass
+ PyJs_Object_1328_ = Js({})
+ var.put(u'oldConfig', var.get(u'preset')(PyJs_Object_1328_))
+ var.get(u'exports').put(u'default', var.get(u'oldConfig'))
+ PyJs_Object_1329_ = Js({u'configurable':var.get(u'true'),u'writable':var.get(u'true'),u'enumerable':Js(False),u'value':var.get(u'preset')})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'oldConfig'), Js(u'buildPreset'), PyJs_Object_1329_)
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1319_._set_name(u'anonymous')
+PyJs_Object_1330_ = Js({u'babel-plugin-check-es2015-constants':Js(58.0),u'babel-plugin-transform-es2015-arrow-functions':Js(59.0),u'babel-plugin-transform-es2015-block-scoped-functions':Js(60.0),u'babel-plugin-transform-es2015-block-scoping':Js(61.0),u'babel-plugin-transform-es2015-classes':Js(63.0),u'babel-plugin-transform-es2015-computed-properties':Js(66.0),u'babel-plugin-transform-es2015-destructuring':Js(67.0),u'babel-plugin-transform-es2015-duplicate-keys':Js(68.0),u'babel-plugin-transform-es2015-for-of':Js(69.0),u'babel-plugin-transform-es2015-function-name':Js(70.0),u'babel-plugin-transform-es2015-literals':Js(71.0),u'babel-plugin-transform-es2015-modules-amd':Js(72.0),u'babel-plugin-transform-es2015-modules-commonjs':Js(73.0),u'babel-plugin-transform-es2015-modules-systemjs':Js(74.0),u'babel-plugin-transform-es2015-modules-umd':Js(75.0),u'babel-plugin-transform-es2015-object-super':Js(76.0),u'babel-plugin-transform-es2015-parameters':Js(79.0),u'babel-plugin-transform-es2015-shorthand-properties':Js(81.0),u'babel-plugin-transform-es2015-spread':Js(82.0),u'babel-plugin-transform-es2015-sticky-regex':Js(83.0),u'babel-plugin-transform-es2015-template-literals':Js(84.0),u'babel-plugin-transform-es2015-typeof-symbol':Js(85.0),u'babel-plugin-transform-es2015-unicode-regex':Js(86.0),u'babel-plugin-transform-regenerator':Js(89.0)})
+@Js
+def PyJs_anonymous_1331_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1332_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/get-iterator')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1332_)
+PyJs_anonymous_1331_._set_name(u'anonymous')
+PyJs_Object_1333_ = Js({u'core-js/library/fn/get-iterator':Js(115.0)})
+@Js
+def PyJs_anonymous_1334_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1335_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/json/stringify')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1335_)
+PyJs_anonymous_1334_._set_name(u'anonymous')
+PyJs_Object_1336_ = Js({u'core-js/library/fn/json/stringify':Js(116.0)})
+@Js
+def PyJs_anonymous_1337_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1338_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/map')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1338_)
+PyJs_anonymous_1337_._set_name(u'anonymous')
+PyJs_Object_1339_ = Js({u'core-js/library/fn/map':Js(117.0)})
+@Js
+def PyJs_anonymous_1340_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1341_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/number/max-safe-integer')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1341_)
+PyJs_anonymous_1340_._set_name(u'anonymous')
+PyJs_Object_1342_ = Js({u'core-js/library/fn/number/max-safe-integer':Js(118.0)})
+@Js
+def PyJs_anonymous_1343_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1344_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/object/assign')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1344_)
+PyJs_anonymous_1343_._set_name(u'anonymous')
+PyJs_Object_1345_ = Js({u'core-js/library/fn/object/assign':Js(119.0)})
+@Js
+def PyJs_anonymous_1346_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1347_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/object/create')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1347_)
+PyJs_anonymous_1346_._set_name(u'anonymous')
+PyJs_Object_1348_ = Js({u'core-js/library/fn/object/create':Js(120.0)})
+@Js
+def PyJs_anonymous_1349_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1350_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/object/get-own-property-symbols')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1350_)
+PyJs_anonymous_1349_._set_name(u'anonymous')
+PyJs_Object_1351_ = Js({u'core-js/library/fn/object/get-own-property-symbols':Js(121.0)})
+@Js
+def PyJs_anonymous_1352_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1353_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/object/keys')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1353_)
+PyJs_anonymous_1352_._set_name(u'anonymous')
+PyJs_Object_1354_ = Js({u'core-js/library/fn/object/keys':Js(122.0)})
+@Js
+def PyJs_anonymous_1355_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1356_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/object/set-prototype-of')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1356_)
+PyJs_anonymous_1355_._set_name(u'anonymous')
+PyJs_Object_1357_ = Js({u'core-js/library/fn/object/set-prototype-of':Js(123.0)})
+@Js
+def PyJs_anonymous_1358_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1359_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/symbol')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1359_)
+PyJs_anonymous_1358_._set_name(u'anonymous')
+PyJs_Object_1360_ = Js({u'core-js/library/fn/symbol':Js(125.0)})
+@Js
+def PyJs_anonymous_1361_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1362_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/symbol/for')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1362_)
+PyJs_anonymous_1361_._set_name(u'anonymous')
+PyJs_Object_1363_ = Js({u'core-js/library/fn/symbol/for':Js(124.0)})
+@Js
+def PyJs_anonymous_1364_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1365_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/symbol/iterator')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1365_)
+PyJs_anonymous_1364_._set_name(u'anonymous')
+PyJs_Object_1366_ = Js({u'core-js/library/fn/symbol/iterator':Js(126.0)})
+@Js
+def PyJs_anonymous_1367_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1368_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/weak-map')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1368_)
+PyJs_anonymous_1367_._set_name(u'anonymous')
+PyJs_Object_1369_ = Js({u'core-js/library/fn/weak-map':Js(127.0)})
+@Js
+def PyJs_anonymous_1370_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1371_ = Js({u'default':var.get(u'require')(Js(u'core-js/library/fn/weak-set')),u'__esModule':var.get(u'true')})
+ var.get(u'module').put(u'exports', PyJs_Object_1371_)
+PyJs_anonymous_1370_._set_name(u'anonymous')
+PyJs_Object_1372_ = Js({u'core-js/library/fn/weak-set':Js(128.0)})
+@Js
+def PyJs_anonymous_1373_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_1374_(instance, Constructor, this, arguments, var=var):
+ var = Scope({u'this':this, u'instance':instance, u'arguments':arguments, u'Constructor':Constructor}, var)
+ var.registers([u'instance', u'Constructor'])
+ if var.get(u'instance').instanceof(var.get(u'Constructor')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Cannot call a class as a function')))
+ raise PyJsTempException
+ PyJs_anonymous_1374_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1374_)
+PyJs_anonymous_1373_._set_name(u'anonymous')
+PyJs_Object_1375_ = Js({})
+@Js
+def PyJs_anonymous_1376_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_create', u'_typeof2', u'_typeof3', u'_setPrototypeOf', u'require', u'exports', u'module', u'_create2', u'_setPrototypeOf2', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1377_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1377_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_setPrototypeOf', var.get(u'require')(Js(u'../core-js/object/set-prototype-of')))
+ var.put(u'_setPrototypeOf2', var.get(u'_interopRequireDefault')(var.get(u'_setPrototypeOf')))
+ var.put(u'_create', var.get(u'require')(Js(u'../core-js/object/create')))
+ var.put(u'_create2', var.get(u'_interopRequireDefault')(var.get(u'_create')))
+ var.put(u'_typeof2', var.get(u'require')(Js(u'../helpers/typeof')))
+ var.put(u'_typeof3', var.get(u'_interopRequireDefault')(var.get(u'_typeof2')))
+ pass
+ @Js
+ def PyJs_anonymous_1378_(subClass, superClass, this, arguments, var=var):
+ var = Scope({u'this':this, u'superClass':superClass, u'subClass':subClass, u'arguments':arguments}, var)
+ var.registers([u'superClass', u'subClass'])
+ if (PyJsStrictNeq(var.get(u'superClass',throw=False).typeof(),Js(u'function')) and PyJsStrictNeq(var.get(u'superClass'),var.get(u"null"))):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((Js(u'Super expression must either be null or a function, not ')+(Js(u'undefined') if PyJsStrictEq(var.get(u'superClass',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'superClass'))))))
+ raise PyJsTempException
+ PyJs_Object_1380_ = Js({u'value':var.get(u'subClass'),u'enumerable':Js(False),u'writable':var.get(u'true'),u'configurable':var.get(u'true')})
+ PyJs_Object_1379_ = Js({u'constructor':PyJs_Object_1380_})
+ var.get(u'subClass').put(u'prototype', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))((var.get(u'superClass') and var.get(u'superClass').get(u'prototype')), PyJs_Object_1379_))
+ if var.get(u'superClass'):
+ (PyJsComma(Js(0.0),var.get(u'_setPrototypeOf2').get(u'default'))(var.get(u'subClass'), var.get(u'superClass')) if var.get(u'_setPrototypeOf2').get(u'default') else var.get(u'subClass').put(u'__proto__', var.get(u'superClass')))
+ PyJs_anonymous_1378_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1378_)
+PyJs_anonymous_1376_._set_name(u'anonymous')
+PyJs_Object_1381_ = Js({u'../core-js/object/create':Js(101.0),u'../core-js/object/set-prototype-of':Js(104.0),u'../helpers/typeof':Js(114.0)})
+@Js
+def PyJs_anonymous_1382_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_1383_(obj, keys, this, arguments, var=var):
+ var = Scope({u'keys':keys, u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'i', u'keys', u'obj', u'target'])
+ PyJs_Object_1384_ = Js({})
+ var.put(u'target', PyJs_Object_1384_)
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'i', PyJsTemp)
+ if (var.get(u'keys').callprop(u'indexOf', var.get(u'i'))>=Js(0.0)):
+ continue
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'i')).neg():
+ continue
+ var.get(u'target').put(var.get(u'i'), var.get(u'obj').get(var.get(u'i')))
+ return var.get(u'target')
+ PyJs_anonymous_1383_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1383_)
+PyJs_anonymous_1382_._set_name(u'anonymous')
+PyJs_Object_1385_ = Js({})
+@Js
+def PyJs_anonymous_1386_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_typeof2', u'_typeof3', u'require', u'exports', u'module', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1387_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1387_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_typeof2', var.get(u'require')(Js(u'../helpers/typeof')))
+ var.put(u'_typeof3', var.get(u'_interopRequireDefault')(var.get(u'_typeof2')))
+ pass
+ @Js
+ def PyJs_anonymous_1388_(self, call, this, arguments, var=var):
+ var = Scope({u'this':this, u'self':self, u'call':call, u'arguments':arguments}, var)
+ var.registers([u'self', u'call'])
+ if var.get(u'self').neg():
+ PyJsTempException = JsToPyException(var.get(u'ReferenceError').create(Js(u"this hasn't been initialised - super() hasn't been called")))
+ raise PyJsTempException
+ return (var.get(u'call') if (var.get(u'call') and (PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'call',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'call'))),Js(u'object')) or PyJsStrictEq(var.get(u'call',throw=False).typeof(),Js(u'function')))) else var.get(u'self'))
+ PyJs_anonymous_1388_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1388_)
+PyJs_anonymous_1386_._set_name(u'anonymous')
+PyJs_Object_1389_ = Js({u'../helpers/typeof':Js(114.0)})
+@Js
+def PyJs_anonymous_1390_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_symbol2', u'_iterator', u'require', u'module', u'_typeof', u'_symbol', u'_interopRequireDefault', u'_iterator2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1393_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1393_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_iterator', var.get(u'require')(Js(u'../core-js/symbol/iterator')))
+ var.put(u'_iterator2', var.get(u'_interopRequireDefault')(var.get(u'_iterator')))
+ var.put(u'_symbol', var.get(u'require')(Js(u'../core-js/symbol')))
+ var.put(u'_symbol2', var.get(u'_interopRequireDefault')(var.get(u'_symbol')))
+ @Js
+ def PyJs_anonymous_1391_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ return var.get(u'obj',throw=False).typeof()
+ PyJs_anonymous_1391_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1392_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ return (Js(u'symbol') if (((var.get(u'obj') and PyJsStrictEq(var.get(u'_symbol2').get(u'default').typeof(),Js(u'function'))) and PyJsStrictEq(var.get(u'obj').get(u'constructor'),var.get(u'_symbol2').get(u'default'))) and PyJsStrictNeq(var.get(u'obj'),var.get(u'_symbol2').get(u'default').get(u'prototype'))) else var.get(u'obj',throw=False).typeof())
+ PyJs_anonymous_1392_._set_name(u'anonymous')
+ var.put(u'_typeof', (PyJs_anonymous_1391_ if (PyJsStrictEq(var.get(u'_symbol2').get(u'default').typeof(),Js(u'function')) and PyJsStrictEq(var.get(u'_iterator2').get(u'default').typeof(),Js(u'symbol'))) else PyJs_anonymous_1392_))
+ pass
+ @Js
+ def PyJs_anonymous_1394_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ return (Js(u'undefined') if PyJsStrictEq(var.get(u'obj',throw=False).typeof(),Js(u'undefined')) else var.get(u'_typeof')(var.get(u'obj')))
+ PyJs_anonymous_1394_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1395_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ def PyJs_LONG_1396_(var=var):
+ return (Js(u'symbol') if (((var.get(u'obj') and PyJsStrictEq(var.get(u'_symbol2').get(u'default').typeof(),Js(u'function'))) and PyJsStrictEq(var.get(u'obj').get(u'constructor'),var.get(u'_symbol2').get(u'default'))) and PyJsStrictNeq(var.get(u'obj'),var.get(u'_symbol2').get(u'default').get(u'prototype'))) else (Js(u'undefined') if PyJsStrictEq(var.get(u'obj',throw=False).typeof(),Js(u'undefined')) else var.get(u'_typeof')(var.get(u'obj'))))
+ return PyJs_LONG_1396_()
+ PyJs_anonymous_1395_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', (PyJs_anonymous_1394_ if (PyJsStrictEq(var.get(u'_symbol2').get(u'default').typeof(),Js(u'function')) and PyJsStrictEq(var.get(u'_typeof')(var.get(u'_iterator2').get(u'default')),Js(u'symbol'))) else PyJs_anonymous_1395_))
+PyJs_anonymous_1390_._set_name(u'anonymous')
+PyJs_Object_1397_ = Js({u'../core-js/symbol':Js(105.0),u'../core-js/symbol/iterator':Js(107.0)})
+@Js
+def PyJs_anonymous_1398_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../modules/web.dom.iterable'))
+ var.get(u'require')(Js(u'../modules/es6.string.iterator'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../modules/core.get-iterator')))
+PyJs_anonymous_1398_._set_name(u'anonymous')
+PyJs_Object_1399_ = Js({u'../modules/core.get-iterator':Js(204.0),u'../modules/es6.string.iterator':Js(213.0),u'../modules/web.dom.iterable':Js(220.0)})
+@Js
+def PyJs_anonymous_1400_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'core', u'require', u'exports', u'module', u'$JSON'])
+ var.put(u'core', var.get(u'require')(Js(u'../../modules/_core')))
+ PyJs_Object_1401_ = Js({u'stringify':var.get(u'JSON').get(u'stringify')})
+ var.put(u'$JSON', (var.get(u'core').get(u'JSON') or var.get(u'core').put(u'JSON', PyJs_Object_1401_)))
+ @Js
+ def PyJs_stringify_1402_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'stringify':PyJs_stringify_1402_, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return var.get(u'$JSON').get(u'stringify').callprop(u'apply', var.get(u'$JSON'), var.get(u'arguments'))
+ PyJs_stringify_1402_._set_name(u'stringify')
+ var.get(u'module').put(u'exports', PyJs_stringify_1402_)
+PyJs_anonymous_1400_._set_name(u'anonymous')
+PyJs_Object_1403_ = Js({u'../../modules/_core':Js(144.0)})
+@Js
+def PyJs_anonymous_1404_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../modules/es6.object.to-string'))
+ var.get(u'require')(Js(u'../modules/es6.string.iterator'))
+ var.get(u'require')(Js(u'../modules/web.dom.iterable'))
+ var.get(u'require')(Js(u'../modules/es6.map'))
+ var.get(u'require')(Js(u'../modules/es7.map.to-json'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../modules/_core')).get(u'Map'))
+PyJs_anonymous_1404_._set_name(u'anonymous')
+PyJs_Object_1405_ = Js({u'../modules/_core':Js(144.0),u'../modules/es6.map':Js(206.0),u'../modules/es6.object.to-string':Js(212.0),u'../modules/es6.string.iterator':Js(213.0),u'../modules/es7.map.to-json':Js(217.0),u'../modules/web.dom.iterable':Js(220.0)})
+@Js
+def PyJs_anonymous_1406_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../../modules/es6.number.max-safe-integer'))
+ var.get(u'module').put(u'exports', Js(9007199254740991))
+PyJs_anonymous_1406_._set_name(u'anonymous')
+PyJs_Object_1407_ = Js({u'../../modules/es6.number.max-safe-integer':Js(207.0)})
+@Js
+def PyJs_anonymous_1408_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../../modules/es6.object.assign'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../../modules/_core')).get(u'Object').get(u'assign'))
+PyJs_anonymous_1408_._set_name(u'anonymous')
+PyJs_Object_1409_ = Js({u'../../modules/_core':Js(144.0),u'../../modules/es6.object.assign':Js(208.0)})
+@Js
+def PyJs_anonymous_1410_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module', u'$Object'])
+ var.get(u'require')(Js(u'../../modules/es6.object.create'))
+ var.put(u'$Object', var.get(u'require')(Js(u'../../modules/_core')).get(u'Object'))
+ @Js
+ def PyJs_create_1411_(P, D, this, arguments, var=var):
+ var = Scope({u'this':this, u'P':P, u'create':PyJs_create_1411_, u'D':D, u'arguments':arguments}, var)
+ var.registers([u'P', u'D'])
+ return var.get(u'$Object').callprop(u'create', var.get(u'P'), var.get(u'D'))
+ PyJs_create_1411_._set_name(u'create')
+ var.get(u'module').put(u'exports', PyJs_create_1411_)
+PyJs_anonymous_1410_._set_name(u'anonymous')
+PyJs_Object_1412_ = Js({u'../../modules/_core':Js(144.0),u'../../modules/es6.object.create':Js(209.0)})
+@Js
+def PyJs_anonymous_1413_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../../modules/es6.symbol'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../../modules/_core')).get(u'Object').get(u'getOwnPropertySymbols'))
+PyJs_anonymous_1413_._set_name(u'anonymous')
+PyJs_Object_1414_ = Js({u'../../modules/_core':Js(144.0),u'../../modules/es6.symbol':Js(214.0)})
+@Js
+def PyJs_anonymous_1415_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../../modules/es6.object.keys'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../../modules/_core')).get(u'Object').get(u'keys'))
+PyJs_anonymous_1415_._set_name(u'anonymous')
+PyJs_Object_1416_ = Js({u'../../modules/_core':Js(144.0),u'../../modules/es6.object.keys':Js(210.0)})
+@Js
+def PyJs_anonymous_1417_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../../modules/es6.object.set-prototype-of'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../../modules/_core')).get(u'Object').get(u'setPrototypeOf'))
+PyJs_anonymous_1417_._set_name(u'anonymous')
+PyJs_Object_1418_ = Js({u'../../modules/_core':Js(144.0),u'../../modules/es6.object.set-prototype-of':Js(211.0)})
+@Js
+def PyJs_anonymous_1419_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../../modules/es6.symbol'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../../modules/_core')).get(u'Symbol').get(u'for'))
+PyJs_anonymous_1419_._set_name(u'anonymous')
+PyJs_Object_1420_ = Js({u'../../modules/_core':Js(144.0),u'../../modules/es6.symbol':Js(214.0)})
+@Js
+def PyJs_anonymous_1421_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../../modules/es6.symbol'))
+ var.get(u'require')(Js(u'../../modules/es6.object.to-string'))
+ var.get(u'require')(Js(u'../../modules/es7.symbol.async-iterator'))
+ var.get(u'require')(Js(u'../../modules/es7.symbol.observable'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../../modules/_core')).get(u'Symbol'))
+PyJs_anonymous_1421_._set_name(u'anonymous')
+PyJs_Object_1422_ = Js({u'../../modules/_core':Js(144.0),u'../../modules/es6.object.to-string':Js(212.0),u'../../modules/es6.symbol':Js(214.0),u'../../modules/es7.symbol.async-iterator':Js(218.0),u'../../modules/es7.symbol.observable':Js(219.0)})
+@Js
+def PyJs_anonymous_1423_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../../modules/es6.string.iterator'))
+ var.get(u'require')(Js(u'../../modules/web.dom.iterable'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../../modules/_wks-ext')).callprop(u'f', Js(u'iterator')))
+PyJs_anonymous_1423_._set_name(u'anonymous')
+PyJs_Object_1424_ = Js({u'../../modules/_wks-ext':Js(201.0),u'../../modules/es6.string.iterator':Js(213.0),u'../../modules/web.dom.iterable':Js(220.0)})
+@Js
+def PyJs_anonymous_1425_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../modules/es6.object.to-string'))
+ var.get(u'require')(Js(u'../modules/web.dom.iterable'))
+ var.get(u'require')(Js(u'../modules/es6.weak-map'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../modules/_core')).get(u'WeakMap'))
+PyJs_anonymous_1425_._set_name(u'anonymous')
+PyJs_Object_1426_ = Js({u'../modules/_core':Js(144.0),u'../modules/es6.object.to-string':Js(212.0),u'../modules/es6.weak-map':Js(215.0),u'../modules/web.dom.iterable':Js(220.0)})
+@Js
+def PyJs_anonymous_1427_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'../modules/es6.object.to-string'))
+ var.get(u'require')(Js(u'../modules/web.dom.iterable'))
+ var.get(u'require')(Js(u'../modules/es6.weak-set'))
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'../modules/_core')).get(u'WeakSet'))
+PyJs_anonymous_1427_._set_name(u'anonymous')
+PyJs_Object_1428_ = Js({u'../modules/_core':Js(144.0),u'../modules/es6.object.to-string':Js(212.0),u'../modules/es6.weak-set':Js(216.0),u'../modules/web.dom.iterable':Js(220.0)})
+@Js
+def PyJs_anonymous_1429_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1430_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ if (var.get(u'it',throw=False).typeof()!=Js(u'function')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError')((var.get(u'it')+Js(u' is not a function!'))))
+ raise PyJsTempException
+ return var.get(u'it')
+ PyJs_anonymous_1430_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1430_)
+PyJs_anonymous_1429_._set_name(u'anonymous')
+PyJs_Object_1431_ = Js({})
+@Js
+def PyJs_anonymous_1432_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1433_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ pass
+ PyJs_anonymous_1433_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1433_)
+PyJs_anonymous_1432_._set_name(u'anonymous')
+PyJs_Object_1434_ = Js({})
+@Js
+def PyJs_anonymous_1435_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1436_(it, Constructor, name, forbiddenField, this, arguments, var=var):
+ var = Scope({u'name':name, u'Constructor':Constructor, u'this':this, u'arguments':arguments, u'it':it, u'forbiddenField':forbiddenField}, var)
+ var.registers([u'forbiddenField', u'it', u'name', u'Constructor'])
+ if (var.get(u'it').instanceof(var.get(u'Constructor')).neg() or (PyJsStrictNeq(var.get(u'forbiddenField'),var.get(u'undefined')) and var.get(u'it').contains(var.get(u'forbiddenField')))):
+ PyJsTempException = JsToPyException(var.get(u'TypeError')((var.get(u'name')+Js(u': incorrect invocation!'))))
+ raise PyJsTempException
+ return var.get(u'it')
+ PyJs_anonymous_1436_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1436_)
+PyJs_anonymous_1435_._set_name(u'anonymous')
+PyJs_Object_1437_ = Js({})
+@Js
+def PyJs_anonymous_1438_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'isObject', u'module'])
+ var.put(u'isObject', var.get(u'require')(Js(u'./_is-object')))
+ @Js
+ def PyJs_anonymous_1439_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ if var.get(u'isObject')(var.get(u'it')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError')((var.get(u'it')+Js(u' is not an object!'))))
+ raise PyJsTempException
+ return var.get(u'it')
+ PyJs_anonymous_1439_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1439_)
+PyJs_anonymous_1438_._set_name(u'anonymous')
+PyJs_Object_1440_ = Js({u'./_is-object':Js(162.0)})
+@Js
+def PyJs_anonymous_1441_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'forOf', u'exports', u'module'])
+ var.put(u'forOf', var.get(u'require')(Js(u'./_for-of')))
+ @Js
+ def PyJs_anonymous_1442_(iter, ITERATOR, this, arguments, var=var):
+ var = Scope({u'this':this, u'ITERATOR':ITERATOR, u'iter':iter, u'arguments':arguments}, var)
+ var.registers([u'ITERATOR', u'result', u'iter'])
+ var.put(u'result', Js([]))
+ var.get(u'forOf')(var.get(u'iter'), Js(False), var.get(u'result').get(u'push'), var.get(u'result'), var.get(u'ITERATOR'))
+ return var.get(u'result')
+ PyJs_anonymous_1442_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1442_)
+PyJs_anonymous_1441_._set_name(u'anonymous')
+PyJs_Object_1443_ = Js({u'./_for-of':Js(153.0)})
+@Js
+def PyJs_anonymous_1444_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'toLength', u'require', u'toIndex', u'module', u'toIObject'])
+ var.put(u'toIObject', var.get(u'require')(Js(u'./_to-iobject')))
+ var.put(u'toLength', var.get(u'require')(Js(u'./_to-length')))
+ var.put(u'toIndex', var.get(u'require')(Js(u'./_to-index')))
+ @Js
+ def PyJs_anonymous_1445_(IS_INCLUDES, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'IS_INCLUDES':IS_INCLUDES}, var)
+ var.registers([u'IS_INCLUDES'])
+ @Js
+ def PyJs_anonymous_1446_(PyJsArg_2474686973_, el, fromIndex, this, arguments, var=var):
+ var = Scope({u'this':this, u'el':el, u'$this':PyJsArg_2474686973_, u'arguments':arguments, u'fromIndex':fromIndex}, var)
+ var.registers([u'el', u'index', u'$this', u'value', u'fromIndex', u'length', u'O'])
+ var.put(u'O', var.get(u'toIObject')(var.get(u'$this')))
+ var.put(u'length', var.get(u'toLength')(var.get(u'O').get(u'length')))
+ var.put(u'index', var.get(u'toIndex')(var.get(u'fromIndex'), var.get(u'length')))
+ if (var.get(u'IS_INCLUDES') and (var.get(u'el')!=var.get(u'el'))):
+ while (var.get(u'length')>var.get(u'index')):
+ var.put(u'value', var.get(u'O').get((var.put(u'index',Js(var.get(u'index').to_number())+Js(1))-Js(1))))
+ if (var.get(u'value')!=var.get(u'value')):
+ return var.get(u'true')
+ else:
+ #for JS loop
+
+ while (var.get(u'length')>var.get(u'index')):
+ try:
+ if (var.get(u'IS_INCLUDES') or var.get(u'O').contains(var.get(u'index'))):
+ if PyJsStrictEq(var.get(u'O').get(var.get(u'index')),var.get(u'el')):
+ return ((var.get(u'IS_INCLUDES') or var.get(u'index')) or Js(0.0))
+ finally:
+ (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))-Js(1))
+ return (var.get(u'IS_INCLUDES').neg() and (-Js(1.0)))
+ PyJs_anonymous_1446_._set_name(u'anonymous')
+ return PyJs_anonymous_1446_
+ PyJs_anonymous_1445_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1445_)
+PyJs_anonymous_1444_._set_name(u'anonymous')
+PyJs_Object_1447_ = Js({u'./_to-index':Js(193.0),u'./_to-iobject':Js(195.0),u'./_to-length':Js(196.0)})
+@Js
+def PyJs_anonymous_1448_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'toLength', u'IObject', u'toObject', u'ctx', u'module', u'asc', u'require'])
+ var.put(u'ctx', var.get(u'require')(Js(u'./_ctx')))
+ var.put(u'IObject', var.get(u'require')(Js(u'./_iobject')))
+ var.put(u'toObject', var.get(u'require')(Js(u'./_to-object')))
+ var.put(u'toLength', var.get(u'require')(Js(u'./_to-length')))
+ var.put(u'asc', var.get(u'require')(Js(u'./_array-species-create')))
+ @Js
+ def PyJs_anonymous_1449_(TYPE, PyJsArg_24637265617465_, this, arguments, var=var):
+ var = Scope({u'this':this, u'TYPE':TYPE, u'arguments':arguments, u'$create':PyJsArg_24637265617465_}, var)
+ var.registers([u'IS_FIND_INDEX', u'IS_SOME', u'IS_MAP', u'$create', u'NO_HOLES', u'IS_EVERY', u'IS_FILTER', u'TYPE', u'create'])
+ var.put(u'IS_MAP', (var.get(u'TYPE')==Js(1.0)))
+ var.put(u'IS_FILTER', (var.get(u'TYPE')==Js(2.0)))
+ var.put(u'IS_SOME', (var.get(u'TYPE')==Js(3.0)))
+ var.put(u'IS_EVERY', (var.get(u'TYPE')==Js(4.0)))
+ var.put(u'IS_FIND_INDEX', (var.get(u'TYPE')==Js(6.0)))
+ var.put(u'NO_HOLES', ((var.get(u'TYPE')==Js(5.0)) or var.get(u'IS_FIND_INDEX')))
+ var.put(u'create', (var.get(u'$create') or var.get(u'asc')))
+ @Js
+ def PyJs_anonymous_1450_(PyJsArg_2474686973_, callbackfn, that, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'callbackfn':callbackfn, u'$this':PyJsArg_2474686973_, u'that':that}, var)
+ var.registers([u'index', u'callbackfn', u'val', u'f', u'res', u'self', u'that', u'$this', u'O', u'length', u'result'])
+ var.put(u'O', var.get(u'toObject')(var.get(u'$this')))
+ var.put(u'self', var.get(u'IObject')(var.get(u'O')))
+ var.put(u'f', var.get(u'ctx')(var.get(u'callbackfn'), var.get(u'that'), Js(3.0)))
+ var.put(u'length', var.get(u'toLength')(var.get(u'self').get(u'length')))
+ var.put(u'index', Js(0.0))
+ var.put(u'result', (var.get(u'create')(var.get(u'$this'), var.get(u'length')) if var.get(u'IS_MAP') else (var.get(u'create')(var.get(u'$this'), Js(0.0)) if var.get(u'IS_FILTER') else var.get(u'undefined'))))
+ #for JS loop
+
+ while (var.get(u'length')>var.get(u'index')):
+ try:
+ if (var.get(u'NO_HOLES') or var.get(u'self').contains(var.get(u'index'))):
+ var.put(u'val', var.get(u'self').get(var.get(u'index')))
+ var.put(u'res', var.get(u'f')(var.get(u'val'), var.get(u'index'), var.get(u'O')))
+ if var.get(u'TYPE'):
+ if var.get(u'IS_MAP'):
+ var.get(u'result').put(var.get(u'index'), var.get(u'res'))
+ else:
+ if var.get(u'res'):
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'TYPE'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(3.0)):
+ SWITCHED = True
+ return var.get(u'true')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(5.0)):
+ SWITCHED = True
+ return var.get(u'val')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(6.0)):
+ SWITCHED = True
+ return var.get(u'index')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(2.0)):
+ SWITCHED = True
+ var.get(u'result').callprop(u'push', var.get(u'val'))
+ SWITCHED = True
+ break
+ else:
+ if var.get(u'IS_EVERY'):
+ return Js(False)
+ finally:
+ (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))-Js(1))
+ return ((-Js(1.0)) if var.get(u'IS_FIND_INDEX') else (var.get(u'IS_EVERY') if (var.get(u'IS_SOME') or var.get(u'IS_EVERY')) else var.get(u'result')))
+ PyJs_anonymous_1450_._set_name(u'anonymous')
+ return PyJs_anonymous_1450_
+ PyJs_anonymous_1449_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1449_)
+PyJs_anonymous_1448_._set_name(u'anonymous')
+PyJs_Object_1451_ = Js({u'./_array-species-create':Js(137.0),u'./_ctx':Js(145.0),u'./_iobject':Js(159.0),u'./_to-length':Js(196.0),u'./_to-object':Js(197.0)})
+@Js
+def PyJs_anonymous_1452_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'isArray', u'exports', u'require', u'module', u'SPECIES', u'isObject'])
+ var.put(u'isObject', var.get(u'require')(Js(u'./_is-object')))
+ var.put(u'isArray', var.get(u'require')(Js(u'./_is-array')))
+ var.put(u'SPECIES', var.get(u'require')(Js(u'./_wks'))(Js(u'species')))
+ @Js
+ def PyJs_anonymous_1453_(original, this, arguments, var=var):
+ var = Scope({u'this':this, u'original':original, u'arguments':arguments}, var)
+ var.registers([u'C', u'original'])
+ pass
+ if var.get(u'isArray')(var.get(u'original')):
+ var.put(u'C', var.get(u'original').get(u'constructor'))
+ if ((var.get(u'C',throw=False).typeof()==Js(u'function')) and (PyJsStrictEq(var.get(u'C'),var.get(u'Array')) or var.get(u'isArray')(var.get(u'C').get(u'prototype')))):
+ var.put(u'C', var.get(u'undefined'))
+ if var.get(u'isObject')(var.get(u'C')):
+ var.put(u'C', var.get(u'C').get(var.get(u'SPECIES')))
+ if PyJsStrictEq(var.get(u'C'),var.get(u"null")):
+ var.put(u'C', var.get(u'undefined'))
+ return (var.get(u'Array') if PyJsStrictEq(var.get(u'C'),var.get(u'undefined')) else var.get(u'C'))
+ PyJs_anonymous_1453_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1453_)
+PyJs_anonymous_1452_._set_name(u'anonymous')
+PyJs_Object_1454_ = Js({u'./_is-array':Js(161.0),u'./_is-object':Js(162.0),u'./_wks':Js(202.0)})
+@Js
+def PyJs_anonymous_1455_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'speciesConstructor', u'require', u'exports', u'module'])
+ var.put(u'speciesConstructor', var.get(u'require')(Js(u'./_array-species-constructor')))
+ @Js
+ def PyJs_anonymous_1456_(original, length, this, arguments, var=var):
+ var = Scope({u'this':this, u'length':length, u'original':original, u'arguments':arguments}, var)
+ var.registers([u'length', u'original'])
+ return var.get(u'speciesConstructor')(var.get(u'original')).create(var.get(u'length'))
+ PyJs_anonymous_1456_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1456_)
+PyJs_anonymous_1455_._set_name(u'anonymous')
+PyJs_Object_1457_ = Js({u'./_array-species-constructor':Js(136.0)})
+@Js
+def PyJs_anonymous_1458_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'cof', u'module', u'tryGet', u'TAG', u'ARG'])
+ var.put(u'cof', var.get(u'require')(Js(u'./_cof')))
+ var.put(u'TAG', var.get(u'require')(Js(u'./_wks'))(Js(u'toStringTag')))
+ @Js
+ def PyJs_anonymous_1459_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'arguments')
+ PyJs_anonymous_1459_._set_name(u'anonymous')
+ var.put(u'ARG', (var.get(u'cof')(PyJs_anonymous_1459_())==Js(u'Arguments')))
+ @Js
+ def PyJs_anonymous_1460_(it, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'it', u'key'])
+ try:
+ return var.get(u'it').get(var.get(u'key'))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_48759406 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ pass
+ finally:
+ if PyJsHolder_65_48759406 is not None:
+ var.own[u'e'] = PyJsHolder_65_48759406
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_48759406
+ PyJs_anonymous_1460_._set_name(u'anonymous')
+ var.put(u'tryGet', PyJs_anonymous_1460_)
+ @Js
+ def PyJs_anonymous_1461_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'B', u'T', u'O', u'it'])
+ pass
+ def PyJs_LONG_1462_(var=var):
+ return (Js(u'Null') if PyJsStrictEq(var.get(u'it'),var.get(u"null")) else (var.get(u'T') if (var.put(u'T', var.get(u'tryGet')(var.put(u'O', var.get(u'Object')(var.get(u'it'))), var.get(u'TAG'))).typeof()==Js(u'string')) else (var.get(u'cof')(var.get(u'O')) if var.get(u'ARG') else (Js(u'Arguments') if ((var.put(u'B', var.get(u'cof')(var.get(u'O')))==Js(u'Object')) and (var.get(u'O').get(u'callee').typeof()==Js(u'function'))) else var.get(u'B')))))
+ return (Js(u'Undefined') if PyJsStrictEq(var.get(u'it'),var.get(u'undefined')) else PyJs_LONG_1462_())
+ PyJs_anonymous_1461_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1461_)
+PyJs_anonymous_1458_._set_name(u'anonymous')
+PyJs_Object_1463_ = Js({u'./_cof':Js(139.0),u'./_wks':Js(202.0)})
+@Js
+def PyJs_anonymous_1464_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'toString', u'exports', u'module'])
+ PyJs_Object_1465_ = Js({})
+ var.put(u'toString', PyJs_Object_1465_.get(u'toString'))
+ @Js
+ def PyJs_anonymous_1466_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return var.get(u'toString').callprop(u'call', var.get(u'it')).callprop(u'slice', Js(8.0), (-Js(1.0)))
+ PyJs_anonymous_1466_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1466_)
+PyJs_anonymous_1464_._set_name(u'anonymous')
+PyJs_Object_1467_ = Js({})
+@Js
+def PyJs_anonymous_1468_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'fastKey', u'exports', u'forOf', u'anInstance', u'defined', u'$iterDefine', u'create', u'ctx', u'module', u'setSpecies', u'getEntry', u'step', u'redefineAll', u'DESCRIPTORS', u'require', u'dP', u'SIZE'])
+ Js(u'use strict')
+ var.put(u'dP', var.get(u'require')(Js(u'./_object-dp')).get(u'f'))
+ var.put(u'create', var.get(u'require')(Js(u'./_object-create')))
+ var.put(u'redefineAll', var.get(u'require')(Js(u'./_redefine-all')))
+ var.put(u'ctx', var.get(u'require')(Js(u'./_ctx')))
+ var.put(u'anInstance', var.get(u'require')(Js(u'./_an-instance')))
+ var.put(u'defined', var.get(u'require')(Js(u'./_defined')))
+ var.put(u'forOf', var.get(u'require')(Js(u'./_for-of')))
+ var.put(u'$iterDefine', var.get(u'require')(Js(u'./_iter-define')))
+ var.put(u'step', var.get(u'require')(Js(u'./_iter-step')))
+ var.put(u'setSpecies', var.get(u'require')(Js(u'./_set-species')))
+ var.put(u'DESCRIPTORS', var.get(u'require')(Js(u'./_descriptors')))
+ var.put(u'fastKey', var.get(u'require')(Js(u'./_meta')).get(u'fastKey'))
+ var.put(u'SIZE', (Js(u'_s') if var.get(u'DESCRIPTORS') else Js(u'size')))
+ @Js
+ def PyJs_anonymous_1469_(that, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key, u'that':that}, var)
+ var.registers([u'index', u'that', u'key', u'entry'])
+ var.put(u'index', var.get(u'fastKey')(var.get(u'key')))
+ if PyJsStrictNeq(var.get(u'index'),Js(u'F')):
+ return var.get(u'that').get(u'_i').get(var.get(u'index'))
+ #for JS loop
+ var.put(u'entry', var.get(u'that').get(u'_f'))
+ while var.get(u'entry'):
+ try:
+ if (var.get(u'entry').get(u'k')==var.get(u'key')):
+ return var.get(u'entry')
+ finally:
+ var.put(u'entry', var.get(u'entry').get(u'n'))
+ PyJs_anonymous_1469_._set_name(u'anonymous')
+ var.put(u'getEntry', PyJs_anonymous_1469_)
+ @Js
+ def PyJs_anonymous_1471_(wrapper, NAME, IS_MAP, ADDER, this, arguments, var=var):
+ var = Scope({u'ADDER':ADDER, u'this':this, u'arguments':arguments, u'IS_MAP':IS_MAP, u'wrapper':wrapper, u'NAME':NAME}, var)
+ var.registers([u'ADDER', u'C', u'NAME', u'wrapper', u'IS_MAP'])
+ @Js
+ def PyJs_anonymous_1472_(that, iterable, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'iterable':iterable, u'that':that}, var)
+ var.registers([u'iterable', u'that'])
+ var.get(u'anInstance')(var.get(u'that'), var.get(u'C'), var.get(u'NAME'), Js(u'_i'))
+ var.get(u'that').put(u'_i', var.get(u'create')(var.get(u"null")))
+ var.get(u'that').put(u'_f', var.get(u'undefined'))
+ var.get(u'that').put(u'_l', var.get(u'undefined'))
+ var.get(u'that').put(var.get(u'SIZE'), Js(0.0))
+ if (var.get(u'iterable')!=var.get(u'undefined')):
+ var.get(u'forOf')(var.get(u'iterable'), var.get(u'IS_MAP'), var.get(u'that').get(var.get(u'ADDER')), var.get(u'that'))
+ PyJs_anonymous_1472_._set_name(u'anonymous')
+ var.put(u'C', var.get(u'wrapper')(PyJs_anonymous_1472_))
+ @Js
+ def PyJs_clear_1474_(this, arguments, var=var):
+ var = Scope({u'this':this, u'clear':PyJs_clear_1474_, u'arguments':arguments}, var)
+ var.registers([u'entry', u'data', u'that'])
+ #for JS loop
+ var.put(u'that', var.get(u"this"))
+ var.put(u'data', var.get(u'that').get(u'_i'))
+ var.put(u'entry', var.get(u'that').get(u'_f'))
+ while var.get(u'entry'):
+ try:
+ var.get(u'entry').put(u'r', var.get(u'true'))
+ if var.get(u'entry').get(u'p'):
+ var.get(u'entry').put(u'p', var.get(u'entry').get(u'p').put(u'n', var.get(u'undefined')))
+ var.get(u'data').delete(var.get(u'entry').get(u'i'))
+ finally:
+ var.put(u'entry', var.get(u'entry').get(u'n'))
+ var.get(u'that').put(u'_f', var.get(u'that').put(u'_l', var.get(u'undefined')))
+ var.get(u'that').put(var.get(u'SIZE'), Js(0.0))
+ PyJs_clear_1474_._set_name(u'clear')
+ @Js
+ def PyJs_anonymous_1475_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'prev', u'entry', u'next', u'key', u'that'])
+ var.put(u'that', var.get(u"this"))
+ var.put(u'entry', var.get(u'getEntry')(var.get(u'that'), var.get(u'key')))
+ if var.get(u'entry'):
+ var.put(u'next', var.get(u'entry').get(u'n'))
+ var.put(u'prev', var.get(u'entry').get(u'p'))
+ var.get(u'that').get(u'_i').delete(var.get(u'entry').get(u'i'))
+ var.get(u'entry').put(u'r', var.get(u'true'))
+ if var.get(u'prev'):
+ var.get(u'prev').put(u'n', var.get(u'next'))
+ if var.get(u'next'):
+ var.get(u'next').put(u'p', var.get(u'prev'))
+ if (var.get(u'that').get(u'_f')==var.get(u'entry')):
+ var.get(u'that').put(u'_f', var.get(u'next'))
+ if (var.get(u'that').get(u'_l')==var.get(u'entry')):
+ var.get(u'that').put(u'_l', var.get(u'prev'))
+ (var.get(u'that').put(var.get(u'SIZE'),Js(var.get(u'that').get(var.get(u'SIZE')).to_number())-Js(1))+Js(1))
+ return var.get(u'entry').neg().neg()
+ PyJs_anonymous_1475_._set_name(u'anonymous')
+ @Js
+ def PyJs_forEach_1476_(callbackfn, this, arguments, var=var):
+ var = Scope({u'this':this, u'callbackfn':callbackfn, u'arguments':arguments, u'forEach':PyJs_forEach_1476_}, var)
+ var.registers([u'entry', u'callbackfn', u'f'])
+ var.get(u'anInstance')(var.get(u"this"), var.get(u'C'), Js(u'forEach'))
+ var.put(u'f', var.get(u'ctx')(var.get(u'callbackfn'), (var.get(u'arguments').get(u'1') if (var.get(u'arguments').get(u'length')>Js(1.0)) else var.get(u'undefined')), Js(3.0)))
+ while var.put(u'entry', (var.get(u'entry').get(u'n') if var.get(u'entry') else var.get(u"this").get(u'_f'))):
+ var.get(u'f')(var.get(u'entry').get(u'v'), var.get(u'entry').get(u'k'), var.get(u"this"))
+ while (var.get(u'entry') and var.get(u'entry').get(u'r')):
+ var.put(u'entry', var.get(u'entry').get(u'p'))
+ PyJs_forEach_1476_._set_name(u'forEach')
+ @Js
+ def PyJs_has_1477_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'has':PyJs_has_1477_, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ return var.get(u'getEntry')(var.get(u"this"), var.get(u'key')).neg().neg()
+ PyJs_has_1477_._set_name(u'has')
+ PyJs_Object_1473_ = Js({u'clear':PyJs_clear_1474_,u'delete':PyJs_anonymous_1475_,u'forEach':PyJs_forEach_1476_,u'has':PyJs_has_1477_})
+ var.get(u'redefineAll')(var.get(u'C').get(u'prototype'), PyJs_Object_1473_)
+ if var.get(u'DESCRIPTORS'):
+ @Js
+ def PyJs_anonymous_1479_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'defined')(var.get(u"this").get(var.get(u'SIZE')))
+ PyJs_anonymous_1479_._set_name(u'anonymous')
+ PyJs_Object_1478_ = Js({u'get':PyJs_anonymous_1479_})
+ var.get(u'dP')(var.get(u'C').get(u'prototype'), Js(u'size'), PyJs_Object_1478_)
+ return var.get(u'C')
+ PyJs_anonymous_1471_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1480_(that, key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value, u'key':key, u'that':that}, var)
+ var.registers([u'index', u'that', u'value', u'key', u'entry', u'prev'])
+ var.put(u'entry', var.get(u'getEntry')(var.get(u'that'), var.get(u'key')))
+ if var.get(u'entry'):
+ var.get(u'entry').put(u'v', var.get(u'value'))
+ else:
+ PyJs_Object_1481_ = Js({u'i':var.put(u'index', var.get(u'fastKey')(var.get(u'key'), var.get(u'true'))),u'k':var.get(u'key'),u'v':var.get(u'value'),u'p':var.put(u'prev', var.get(u'that').get(u'_l')),u'n':var.get(u'undefined'),u'r':Js(False)})
+ var.get(u'that').put(u'_l', var.put(u'entry', PyJs_Object_1481_))
+ if var.get(u'that').get(u'_f').neg():
+ var.get(u'that').put(u'_f', var.get(u'entry'))
+ if var.get(u'prev'):
+ var.get(u'prev').put(u'n', var.get(u'entry'))
+ (var.get(u'that').put(var.get(u'SIZE'),Js(var.get(u'that').get(var.get(u'SIZE')).to_number())+Js(1))-Js(1))
+ if PyJsStrictNeq(var.get(u'index'),Js(u'F')):
+ var.get(u'that').get(u'_i').put(var.get(u'index'), var.get(u'entry'))
+ return var.get(u'that')
+ PyJs_anonymous_1480_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1482_(C, NAME, IS_MAP, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'C':C, u'NAME':NAME, u'IS_MAP':IS_MAP}, var)
+ var.registers([u'C', u'NAME', u'IS_MAP'])
+ @Js
+ def PyJs_anonymous_1483_(iterated, kind, this, arguments, var=var):
+ var = Scope({u'this':this, u'kind':kind, u'arguments':arguments, u'iterated':iterated}, var)
+ var.registers([u'kind', u'iterated'])
+ var.get(u"this").put(u'_t', var.get(u'iterated'))
+ var.get(u"this").put(u'_k', var.get(u'kind'))
+ var.get(u"this").put(u'_l', var.get(u'undefined'))
+ PyJs_anonymous_1483_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1484_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'entry', u'kind', u'that'])
+ var.put(u'that', var.get(u"this"))
+ var.put(u'kind', var.get(u'that').get(u'_k'))
+ var.put(u'entry', var.get(u'that').get(u'_l'))
+ while (var.get(u'entry') and var.get(u'entry').get(u'r')):
+ var.put(u'entry', var.get(u'entry').get(u'p'))
+ if (var.get(u'that').get(u'_t').neg() or var.get(u'that').put(u'_l', var.put(u'entry', (var.get(u'entry').get(u'n') if var.get(u'entry') else var.get(u'that').get(u'_t').get(u'_f')))).neg()):
+ var.get(u'that').put(u'_t', var.get(u'undefined'))
+ return var.get(u'step')(Js(1.0))
+ if (var.get(u'kind')==Js(u'keys')):
+ return var.get(u'step')(Js(0.0), var.get(u'entry').get(u'k'))
+ if (var.get(u'kind')==Js(u'values')):
+ return var.get(u'step')(Js(0.0), var.get(u'entry').get(u'v'))
+ return var.get(u'step')(Js(0.0), Js([var.get(u'entry').get(u'k'), var.get(u'entry').get(u'v')]))
+ PyJs_anonymous_1484_._set_name(u'anonymous')
+ var.get(u'$iterDefine')(var.get(u'C'), var.get(u'NAME'), PyJs_anonymous_1483_, PyJs_anonymous_1484_, (Js(u'entries') if var.get(u'IS_MAP') else Js(u'values')), var.get(u'IS_MAP').neg(), var.get(u'true'))
+ var.get(u'setSpecies')(var.get(u'NAME'))
+ PyJs_anonymous_1482_._set_name(u'anonymous')
+ PyJs_Object_1470_ = Js({u'getConstructor':PyJs_anonymous_1471_,u'def':PyJs_anonymous_1480_,u'getEntry':var.get(u'getEntry'),u'setStrong':PyJs_anonymous_1482_})
+ var.get(u'module').put(u'exports', PyJs_Object_1470_)
+PyJs_anonymous_1468_._set_name(u'anonymous')
+PyJs_Object_1485_ = Js({u'./_an-instance':Js(131.0),u'./_ctx':Js(145.0),u'./_defined':Js(146.0),u'./_descriptors':Js(147.0),u'./_for-of':Js(153.0),u'./_iter-define':Js(165.0),u'./_iter-step':Js(166.0),u'./_meta':Js(170.0),u'./_object-create':Js(172.0),u'./_object-dp':Js(173.0),u'./_redefine-all':Js(185.0),u'./_set-species':Js(188.0)})
+@Js
+def PyJs_anonymous_1486_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'from', u'require', u'classof', u'exports', u'module'])
+ var.put(u'classof', var.get(u'require')(Js(u'./_classof')))
+ var.put(u'from', var.get(u'require')(Js(u'./_array-from-iterable')))
+ @Js
+ def PyJs_anonymous_1487_(NAME, this, arguments, var=var):
+ var = Scope({u'this':this, u'NAME':NAME, u'arguments':arguments}, var)
+ var.registers([u'NAME'])
+ @Js
+ def PyJs_toJSON_1488_(this, arguments, var=var):
+ var = Scope({u'this':this, u'toJSON':PyJs_toJSON_1488_, u'arguments':arguments}, var)
+ var.registers([])
+ if (var.get(u'classof')(var.get(u"this"))!=var.get(u'NAME')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError')((var.get(u'NAME')+Js(u"#toJSON isn't generic"))))
+ raise PyJsTempException
+ return var.get(u'from')(var.get(u"this"))
+ PyJs_toJSON_1488_._set_name(u'toJSON')
+ return PyJs_toJSON_1488_
+ PyJs_anonymous_1487_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1487_)
+PyJs_anonymous_1486_._set_name(u'anonymous')
+PyJs_Object_1489_ = Js({u'./_array-from-iterable':Js(133.0),u'./_classof':Js(138.0)})
+@Js
+def PyJs_anonymous_1490_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'forOf', u'findUncaughtFrozen', u'createArrayMethod', u'anInstance', u'require', u'arrayFindIndex', u'module', u'id', u'$has', u'anObject', u'uncaughtFrozenStore', u'UncaughtFrozenStore', u'redefineAll', u'getWeak', u'isObject', u'arrayFind'])
+ Js(u'use strict')
+ var.put(u'redefineAll', var.get(u'require')(Js(u'./_redefine-all')))
+ var.put(u'getWeak', var.get(u'require')(Js(u'./_meta')).get(u'getWeak'))
+ var.put(u'anObject', var.get(u'require')(Js(u'./_an-object')))
+ var.put(u'isObject', var.get(u'require')(Js(u'./_is-object')))
+ var.put(u'anInstance', var.get(u'require')(Js(u'./_an-instance')))
+ var.put(u'forOf', var.get(u'require')(Js(u'./_for-of')))
+ var.put(u'createArrayMethod', var.get(u'require')(Js(u'./_array-methods')))
+ var.put(u'$has', var.get(u'require')(Js(u'./_has')))
+ var.put(u'arrayFind', var.get(u'createArrayMethod')(Js(5.0)))
+ var.put(u'arrayFindIndex', var.get(u'createArrayMethod')(Js(6.0)))
+ var.put(u'id', Js(0.0))
+ @Js
+ def PyJs_anonymous_1491_(that, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'that':that}, var)
+ var.registers([u'that'])
+ return (var.get(u'that').get(u'_l') or var.get(u'that').put(u'_l', var.get(u'UncaughtFrozenStore').create()))
+ PyJs_anonymous_1491_._set_name(u'anonymous')
+ var.put(u'uncaughtFrozenStore', PyJs_anonymous_1491_)
+ @Js
+ def PyJs_anonymous_1492_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").put(u'a', Js([]))
+ PyJs_anonymous_1492_._set_name(u'anonymous')
+ var.put(u'UncaughtFrozenStore', PyJs_anonymous_1492_)
+ @Js
+ def PyJs_anonymous_1493_(store, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'key':key, u'store':store, u'arguments':arguments}, var)
+ var.registers([u'key', u'store'])
+ @Js
+ def PyJs_anonymous_1494_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return PyJsStrictEq(var.get(u'it').get(u'0'),var.get(u'key'))
+ PyJs_anonymous_1494_._set_name(u'anonymous')
+ return var.get(u'arrayFind')(var.get(u'store').get(u'a'), PyJs_anonymous_1494_)
+ PyJs_anonymous_1493_._set_name(u'anonymous')
+ var.put(u'findUncaughtFrozen', PyJs_anonymous_1493_)
+ @Js
+ def PyJs_anonymous_1496_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'entry', u'key'])
+ var.put(u'entry', var.get(u'findUncaughtFrozen')(var.get(u"this"), var.get(u'key')))
+ if var.get(u'entry'):
+ return var.get(u'entry').get(u'1')
+ PyJs_anonymous_1496_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1497_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ return var.get(u'findUncaughtFrozen')(var.get(u"this"), var.get(u'key')).neg().neg()
+ PyJs_anonymous_1497_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1498_(key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'entry', u'value', u'key'])
+ var.put(u'entry', var.get(u'findUncaughtFrozen')(var.get(u"this"), var.get(u'key')))
+ if var.get(u'entry'):
+ var.get(u'entry').put(u'1', var.get(u'value'))
+ else:
+ var.get(u"this").get(u'a').callprop(u'push', Js([var.get(u'key'), var.get(u'value')]))
+ PyJs_anonymous_1498_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1499_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'index', u'key'])
+ @Js
+ def PyJs_anonymous_1500_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return PyJsStrictEq(var.get(u'it').get(u'0'),var.get(u'key'))
+ PyJs_anonymous_1500_._set_name(u'anonymous')
+ var.put(u'index', var.get(u'arrayFindIndex')(var.get(u"this").get(u'a'), PyJs_anonymous_1500_))
+ if (~var.get(u'index')):
+ var.get(u"this").get(u'a').callprop(u'splice', var.get(u'index'), Js(1.0))
+ return (~var.get(u'index')).neg().neg()
+ PyJs_anonymous_1499_._set_name(u'anonymous')
+ PyJs_Object_1495_ = Js({u'get':PyJs_anonymous_1496_,u'has':PyJs_anonymous_1497_,u'set':PyJs_anonymous_1498_,u'delete':PyJs_anonymous_1499_})
+ var.get(u'UncaughtFrozenStore').put(u'prototype', PyJs_Object_1495_)
+ @Js
+ def PyJs_anonymous_1502_(wrapper, NAME, IS_MAP, ADDER, this, arguments, var=var):
+ var = Scope({u'ADDER':ADDER, u'this':this, u'arguments':arguments, u'IS_MAP':IS_MAP, u'wrapper':wrapper, u'NAME':NAME}, var)
+ var.registers([u'ADDER', u'C', u'NAME', u'wrapper', u'IS_MAP'])
+ @Js
+ def PyJs_anonymous_1503_(that, iterable, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'iterable':iterable, u'that':that}, var)
+ var.registers([u'iterable', u'that'])
+ var.get(u'anInstance')(var.get(u'that'), var.get(u'C'), var.get(u'NAME'), Js(u'_i'))
+ var.get(u'that').put(u'_i', (var.put(u'id',Js(var.get(u'id').to_number())+Js(1))-Js(1)))
+ var.get(u'that').put(u'_l', var.get(u'undefined'))
+ if (var.get(u'iterable')!=var.get(u'undefined')):
+ var.get(u'forOf')(var.get(u'iterable'), var.get(u'IS_MAP'), var.get(u'that').get(var.get(u'ADDER')), var.get(u'that'))
+ PyJs_anonymous_1503_._set_name(u'anonymous')
+ var.put(u'C', var.get(u'wrapper')(PyJs_anonymous_1503_))
+ @Js
+ def PyJs_anonymous_1505_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'data', u'key'])
+ if var.get(u'isObject')(var.get(u'key')).neg():
+ return Js(False)
+ var.put(u'data', var.get(u'getWeak')(var.get(u'key')))
+ if PyJsStrictEq(var.get(u'data'),var.get(u'true')):
+ return var.get(u'uncaughtFrozenStore')(var.get(u"this")).callprop(u'delete', var.get(u'key'))
+ return ((var.get(u'data') and var.get(u'$has')(var.get(u'data'), var.get(u"this").get(u'_i'))) and var.get(u'data').delete(var.get(u"this").get(u'_i')))
+ PyJs_anonymous_1505_._set_name(u'anonymous')
+ @Js
+ def PyJs_has_1506_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'has':PyJs_has_1506_, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'data', u'key'])
+ if var.get(u'isObject')(var.get(u'key')).neg():
+ return Js(False)
+ var.put(u'data', var.get(u'getWeak')(var.get(u'key')))
+ if PyJsStrictEq(var.get(u'data'),var.get(u'true')):
+ return var.get(u'uncaughtFrozenStore')(var.get(u"this")).callprop(u'has', var.get(u'key'))
+ return (var.get(u'data') and var.get(u'$has')(var.get(u'data'), var.get(u"this").get(u'_i')))
+ PyJs_has_1506_._set_name(u'has')
+ PyJs_Object_1504_ = Js({u'delete':PyJs_anonymous_1505_,u'has':PyJs_has_1506_})
+ var.get(u'redefineAll')(var.get(u'C').get(u'prototype'), PyJs_Object_1504_)
+ return var.get(u'C')
+ PyJs_anonymous_1502_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1507_(that, key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value, u'key':key, u'that':that}, var)
+ var.registers([u'data', u'value', u'key', u'that'])
+ var.put(u'data', var.get(u'getWeak')(var.get(u'anObject')(var.get(u'key')), var.get(u'true')))
+ if PyJsStrictEq(var.get(u'data'),var.get(u'true')):
+ var.get(u'uncaughtFrozenStore')(var.get(u'that')).callprop(u'set', var.get(u'key'), var.get(u'value'))
+ else:
+ var.get(u'data').put(var.get(u'that').get(u'_i'), var.get(u'value'))
+ return var.get(u'that')
+ PyJs_anonymous_1507_._set_name(u'anonymous')
+ PyJs_Object_1501_ = Js({u'getConstructor':PyJs_anonymous_1502_,u'def':PyJs_anonymous_1507_,u'ufstore':var.get(u'uncaughtFrozenStore')})
+ var.get(u'module').put(u'exports', PyJs_Object_1501_)
+PyJs_anonymous_1490_._set_name(u'anonymous')
+PyJs_Object_1508_ = Js({u'./_an-instance':Js(131.0),u'./_an-object':Js(132.0),u'./_array-methods':Js(135.0),u'./_for-of':Js(153.0),u'./_has':Js(155.0),u'./_is-object':Js(162.0),u'./_meta':Js(170.0),u'./_redefine-all':Js(185.0)})
+@Js
+def PyJs_anonymous_1509_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'fails', u'forOf', u'hide', u'anInstance', u'$export', u'setToStringTag', u'global', u'require', u'module', u'DESCRIPTORS', u'meta', u'redefineAll', u'each', u'isObject', u'dP'])
+ Js(u'use strict')
+ var.put(u'global', var.get(u'require')(Js(u'./_global')))
+ var.put(u'$export', var.get(u'require')(Js(u'./_export')))
+ var.put(u'meta', var.get(u'require')(Js(u'./_meta')))
+ var.put(u'fails', var.get(u'require')(Js(u'./_fails')))
+ var.put(u'hide', var.get(u'require')(Js(u'./_hide')))
+ var.put(u'redefineAll', var.get(u'require')(Js(u'./_redefine-all')))
+ var.put(u'forOf', var.get(u'require')(Js(u'./_for-of')))
+ var.put(u'anInstance', var.get(u'require')(Js(u'./_an-instance')))
+ var.put(u'isObject', var.get(u'require')(Js(u'./_is-object')))
+ var.put(u'setToStringTag', var.get(u'require')(Js(u'./_set-to-string-tag')))
+ var.put(u'dP', var.get(u'require')(Js(u'./_object-dp')).get(u'f'))
+ var.put(u'each', var.get(u'require')(Js(u'./_array-methods'))(Js(0.0)))
+ var.put(u'DESCRIPTORS', var.get(u'require')(Js(u'./_descriptors')))
+ @Js
+ def PyJs_anonymous_1510_(NAME, wrapper, methods, common, IS_MAP, IS_WEAK, this, arguments, var=var):
+ var = Scope({u'NAME':NAME, u'this':this, u'arguments':arguments, u'IS_MAP':IS_MAP, u'wrapper':wrapper, u'IS_WEAK':IS_WEAK, u'common':common, u'methods':methods}, var)
+ var.registers([u'C', u'wrapper', u'NAME', u'proto', u'IS_MAP', u'O', u'common', u'Base', u'IS_WEAK', u'ADDER', u'methods'])
+ var.put(u'Base', var.get(u'global').get(var.get(u'NAME')))
+ var.put(u'C', var.get(u'Base'))
+ var.put(u'ADDER', (Js(u'set') if var.get(u'IS_MAP') else Js(u'add')))
+ var.put(u'proto', (var.get(u'C') and var.get(u'C').get(u'prototype')))
+ PyJs_Object_1511_ = Js({})
+ var.put(u'O', PyJs_Object_1511_)
+ @Js
+ def PyJs_anonymous_1512_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'C').create().callprop(u'entries').callprop(u'next')
+ PyJs_anonymous_1512_._set_name(u'anonymous')
+ if ((var.get(u'DESCRIPTORS').neg() or (var.get(u'C',throw=False).typeof()!=Js(u'function'))) or (var.get(u'IS_WEAK') or (var.get(u'proto').get(u'forEach') and var.get(u'fails')(PyJs_anonymous_1512_).neg())).neg()):
+ var.put(u'C', var.get(u'common').callprop(u'getConstructor', var.get(u'wrapper'), var.get(u'NAME'), var.get(u'IS_MAP'), var.get(u'ADDER')))
+ var.get(u'redefineAll')(var.get(u'C').get(u'prototype'), var.get(u'methods'))
+ var.get(u'meta').put(u'NEED', var.get(u'true'))
+ else:
+ @Js
+ def PyJs_anonymous_1513_(target, iterable, this, arguments, var=var):
+ var = Scope({u'this':this, u'target':target, u'iterable':iterable, u'arguments':arguments}, var)
+ var.registers([u'target', u'iterable'])
+ var.get(u'anInstance')(var.get(u'target'), var.get(u'C'), var.get(u'NAME'), Js(u'_c'))
+ var.get(u'target').put(u'_c', var.get(u'Base').create())
+ if (var.get(u'iterable')!=var.get(u'undefined')):
+ var.get(u'forOf')(var.get(u'iterable'), var.get(u'IS_MAP'), var.get(u'target').get(var.get(u'ADDER')), var.get(u'target'))
+ PyJs_anonymous_1513_._set_name(u'anonymous')
+ var.put(u'C', var.get(u'wrapper')(PyJs_anonymous_1513_))
+ @Js
+ def PyJs_anonymous_1514_(KEY, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'KEY':KEY}, var)
+ var.registers([u'IS_ADDER', u'KEY'])
+ var.put(u'IS_ADDER', ((var.get(u'KEY')==Js(u'add')) or (var.get(u'KEY')==Js(u'set'))))
+ if (var.get(u'proto').contains(var.get(u'KEY')) and (var.get(u'IS_WEAK') and (var.get(u'KEY')==Js(u'clear'))).neg()):
+ @Js
+ def PyJs_anonymous_1515_(a, b, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'b':b, u'arguments':arguments}, var)
+ var.registers([u'a', u'b', u'result'])
+ var.get(u'anInstance')(var.get(u"this"), var.get(u'C'), var.get(u'KEY'))
+ if ((var.get(u'IS_ADDER').neg() and var.get(u'IS_WEAK')) and var.get(u'isObject')(var.get(u'a')).neg()):
+ return (var.get(u'undefined') if (var.get(u'KEY')==Js(u'get')) else Js(False))
+ var.put(u'result', var.get(u"this").get(u'_c').callprop(var.get(u'KEY'), (Js(0.0) if PyJsStrictEq(var.get(u'a'),Js(0.0)) else var.get(u'a')), var.get(u'b')))
+ return (var.get(u"this") if var.get(u'IS_ADDER') else var.get(u'result'))
+ PyJs_anonymous_1515_._set_name(u'anonymous')
+ var.get(u'hide')(var.get(u'C').get(u'prototype'), var.get(u'KEY'), PyJs_anonymous_1515_)
+ PyJs_anonymous_1514_._set_name(u'anonymous')
+ var.get(u'each')(Js(u'add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON').callprop(u'split', Js(u',')), PyJs_anonymous_1514_)
+ if var.get(u'proto').contains(Js(u'size')):
+ @Js
+ def PyJs_anonymous_1517_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").get(u'_c').get(u'size')
+ PyJs_anonymous_1517_._set_name(u'anonymous')
+ PyJs_Object_1516_ = Js({u'get':PyJs_anonymous_1517_})
+ var.get(u'dP')(var.get(u'C').get(u'prototype'), Js(u'size'), PyJs_Object_1516_)
+ var.get(u'setToStringTag')(var.get(u'C'), var.get(u'NAME'))
+ var.get(u'O').put(var.get(u'NAME'), var.get(u'C'))
+ var.get(u'$export')(((var.get(u'$export').get(u'G')+var.get(u'$export').get(u'W'))+var.get(u'$export').get(u'F')), var.get(u'O'))
+ if var.get(u'IS_WEAK').neg():
+ var.get(u'common').callprop(u'setStrong', var.get(u'C'), var.get(u'NAME'), var.get(u'IS_MAP'))
+ return var.get(u'C')
+ PyJs_anonymous_1510_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1510_)
+PyJs_anonymous_1509_._set_name(u'anonymous')
+PyJs_Object_1518_ = Js({u'./_an-instance':Js(131.0),u'./_array-methods':Js(135.0),u'./_descriptors':Js(147.0),u'./_export':Js(151.0),u'./_fails':Js(152.0),u'./_for-of':Js(153.0),u'./_global':Js(154.0),u'./_hide':Js(156.0),u'./_is-object':Js(162.0),u'./_meta':Js(170.0),u'./_object-dp':Js(173.0),u'./_redefine-all':Js(185.0),u'./_set-to-string-tag':Js(189.0)})
+@Js
+def PyJs_anonymous_1519_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'core', u'require', u'exports', u'module'])
+ PyJs_Object_1520_ = Js({u'version':Js(u'2.4.0')})
+ var.put(u'core', var.get(u'module').put(u'exports', PyJs_Object_1520_))
+ if (var.get(u'__e',throw=False).typeof()==Js(u'number')):
+ var.put(u'__e', var.get(u'core'))
+PyJs_anonymous_1519_._set_name(u'anonymous')
+PyJs_Object_1521_ = Js({})
+@Js
+def PyJs_anonymous_1522_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'aFunction', u'require', u'exports', u'module'])
+ var.put(u'aFunction', var.get(u'require')(Js(u'./_a-function')))
+ @Js
+ def PyJs_anonymous_1523_(fn, that, length, this, arguments, var=var):
+ var = Scope({u'this':this, u'length':length, u'arguments':arguments, u'fn':fn, u'that':that}, var)
+ var.registers([u'length', u'fn', u'that'])
+ var.get(u'aFunction')(var.get(u'fn'))
+ if PyJsStrictEq(var.get(u'that'),var.get(u'undefined')):
+ return var.get(u'fn')
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'length'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(1.0)):
+ SWITCHED = True
+ @Js
+ def PyJs_anonymous_1524_(a, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'a'])
+ return var.get(u'fn').callprop(u'call', var.get(u'that'), var.get(u'a'))
+ PyJs_anonymous_1524_._set_name(u'anonymous')
+ return PyJs_anonymous_1524_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(2.0)):
+ SWITCHED = True
+ @Js
+ def PyJs_anonymous_1525_(a, b, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'b':b, u'arguments':arguments}, var)
+ var.registers([u'a', u'b'])
+ return var.get(u'fn').callprop(u'call', var.get(u'that'), var.get(u'a'), var.get(u'b'))
+ PyJs_anonymous_1525_._set_name(u'anonymous')
+ return PyJs_anonymous_1525_
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(3.0)):
+ SWITCHED = True
+ @Js
+ def PyJs_anonymous_1526_(a, b, c, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'c':c, u'b':b, u'arguments':arguments}, var)
+ var.registers([u'a', u'c', u'b'])
+ return var.get(u'fn').callprop(u'call', var.get(u'that'), var.get(u'a'), var.get(u'b'), var.get(u'c'))
+ PyJs_anonymous_1526_._set_name(u'anonymous')
+ return PyJs_anonymous_1526_
+ SWITCHED = True
+ break
+ @Js
+ def PyJs_anonymous_1527_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'fn').callprop(u'apply', var.get(u'that'), var.get(u'arguments'))
+ PyJs_anonymous_1527_._set_name(u'anonymous')
+ return PyJs_anonymous_1527_
+ PyJs_anonymous_1523_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1523_)
+PyJs_anonymous_1522_._set_name(u'anonymous')
+PyJs_Object_1528_ = Js({u'./_a-function':Js(129.0)})
+@Js
+def PyJs_anonymous_1529_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1530_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ if (var.get(u'it')==var.get(u'undefined')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError')((Js(u"Can't call method on ")+var.get(u'it'))))
+ raise PyJsTempException
+ return var.get(u'it')
+ PyJs_anonymous_1530_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1530_)
+PyJs_anonymous_1529_._set_name(u'anonymous')
+PyJs_Object_1531_ = Js({})
+@Js
+def PyJs_anonymous_1532_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1533_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ PyJs_Object_1534_ = Js({})
+ @Js
+ def PyJs_anonymous_1536_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return Js(7.0)
+ PyJs_anonymous_1536_._set_name(u'anonymous')
+ PyJs_Object_1535_ = Js({u'get':PyJs_anonymous_1536_})
+ return (var.get(u'Object').callprop(u'defineProperty', PyJs_Object_1534_, Js(u'a'), PyJs_Object_1535_).get(u'a')!=Js(7.0))
+ PyJs_anonymous_1533_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'./_fails'))(PyJs_anonymous_1533_).neg())
+PyJs_anonymous_1532_._set_name(u'anonymous')
+PyJs_Object_1537_ = Js({u'./_fails':Js(152.0)})
+@Js
+def PyJs_anonymous_1538_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'is', u'module', u'isObject', u'document', u'require'])
+ var.put(u'isObject', var.get(u'require')(Js(u'./_is-object')))
+ var.put(u'document', var.get(u'require')(Js(u'./_global')).get(u'document'))
+ var.put(u'is', (var.get(u'isObject')(var.get(u'document')) and var.get(u'isObject')(var.get(u'document').get(u'createElement'))))
+ @Js
+ def PyJs_anonymous_1539_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ PyJs_Object_1540_ = Js({})
+ return (var.get(u'document').callprop(u'createElement', var.get(u'it')) if var.get(u'is') else PyJs_Object_1540_)
+ PyJs_anonymous_1539_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1539_)
+PyJs_anonymous_1538_._set_name(u'anonymous')
+PyJs_Object_1541_ = Js({u'./_global':Js(154.0),u'./_is-object':Js(162.0)})
+@Js
+def PyJs_anonymous_1542_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'module').put(u'exports', Js(u'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf').callprop(u'split', Js(u',')))
+PyJs_anonymous_1542_._set_name(u'anonymous')
+PyJs_Object_1543_ = Js({})
+@Js
+def PyJs_anonymous_1544_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'pIE', u'module', u'gOPS', u'getKeys'])
+ var.put(u'getKeys', var.get(u'require')(Js(u'./_object-keys')))
+ var.put(u'gOPS', var.get(u'require')(Js(u'./_object-gops')))
+ var.put(u'pIE', var.get(u'require')(Js(u'./_object-pie')))
+ @Js
+ def PyJs_anonymous_1545_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'getSymbols', u'i', u'it', u'symbols', u'isEnum', u'result', u'key'])
+ var.put(u'result', var.get(u'getKeys')(var.get(u'it')))
+ var.put(u'getSymbols', var.get(u'gOPS').get(u'f'))
+ if var.get(u'getSymbols'):
+ var.put(u'symbols', var.get(u'getSymbols')(var.get(u'it')))
+ var.put(u'isEnum', var.get(u'pIE').get(u'f'))
+ var.put(u'i', Js(0.0))
+ while (var.get(u'symbols').get(u'length')>var.get(u'i')):
+ if var.get(u'isEnum').callprop(u'call', var.get(u'it'), var.put(u'key', var.get(u'symbols').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))):
+ var.get(u'result').callprop(u'push', var.get(u'key'))
+ return var.get(u'result')
+ PyJs_anonymous_1545_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1545_)
+PyJs_anonymous_1544_._set_name(u'anonymous')
+PyJs_Object_1546_ = Js({u'./_object-gops':Js(178.0),u'./_object-keys':Js(181.0),u'./_object-pie':Js(182.0)})
+@Js
+def PyJs_anonymous_1547_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'core', u'exports', u'hide', u'$export', u'require', u'global', u'ctx', u'module', u'PROTOTYPE'])
+ var.put(u'global', var.get(u'require')(Js(u'./_global')))
+ var.put(u'core', var.get(u'require')(Js(u'./_core')))
+ var.put(u'ctx', var.get(u'require')(Js(u'./_ctx')))
+ var.put(u'hide', var.get(u'require')(Js(u'./_hide')))
+ var.put(u'PROTOTYPE', Js(u'prototype'))
+ @Js
+ def PyJs_anonymous_1548_(type, name, source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'type':type, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'IS_STATIC', u'IS_WRAP', u'exports', u'IS_GLOBAL', u'target', u'expProto', u'name', u'source', u'IS_PROTO', u'key', u'own', u'IS_FORCED', u'type', u'IS_BIND', u'out'])
+ var.put(u'IS_FORCED', (var.get(u'type')&var.get(u'$export').get(u'F')))
+ var.put(u'IS_GLOBAL', (var.get(u'type')&var.get(u'$export').get(u'G')))
+ var.put(u'IS_STATIC', (var.get(u'type')&var.get(u'$export').get(u'S')))
+ var.put(u'IS_PROTO', (var.get(u'type')&var.get(u'$export').get(u'P')))
+ var.put(u'IS_BIND', (var.get(u'type')&var.get(u'$export').get(u'B')))
+ var.put(u'IS_WRAP', (var.get(u'type')&var.get(u'$export').get(u'W')))
+ PyJs_Object_1549_ = Js({})
+ var.put(u'exports', (var.get(u'core') if var.get(u'IS_GLOBAL') else (var.get(u'core').get(var.get(u'name')) or var.get(u'core').put(var.get(u'name'), PyJs_Object_1549_))))
+ var.put(u'expProto', var.get(u'exports').get(var.get(u'PROTOTYPE')))
+ PyJs_Object_1550_ = Js({})
+ var.put(u'target', (var.get(u'global') if var.get(u'IS_GLOBAL') else (var.get(u'global').get(var.get(u'name')) if var.get(u'IS_STATIC') else (var.get(u'global').get(var.get(u'name')) or PyJs_Object_1550_).get(var.get(u'PROTOTYPE')))))
+ if var.get(u'IS_GLOBAL'):
+ var.put(u'source', var.get(u'name'))
+ for PyJsTemp in var.get(u'source'):
+ var.put(u'key', PyJsTemp)
+ var.put(u'own', ((var.get(u'IS_FORCED').neg() and var.get(u'target')) and PyJsStrictNeq(var.get(u'target').get(var.get(u'key')),var.get(u'undefined'))))
+ if (var.get(u'own') and var.get(u'exports').contains(var.get(u'key'))):
+ continue
+ var.put(u'out', (var.get(u'target').get(var.get(u'key')) if var.get(u'own') else var.get(u'source').get(var.get(u'key'))))
+ def PyJs_LONG_1553_(var=var):
+ @Js
+ def PyJs_anonymous_1551_(C, this, arguments, var=var):
+ var = Scope({u'this':this, u'C':C, u'arguments':arguments}, var)
+ var.registers([u'C', u'F'])
+ @Js
+ def PyJs_anonymous_1552_(a, b, c, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'c':c, u'b':b, u'arguments':arguments}, var)
+ var.registers([u'a', u'c', u'b'])
+ if var.get(u"this").instanceof(var.get(u'C')):
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'arguments').get(u'length'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(0.0)):
+ SWITCHED = True
+ return var.get(u'C').create()
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(1.0)):
+ SWITCHED = True
+ return var.get(u'C').create(var.get(u'a'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(2.0)):
+ SWITCHED = True
+ return var.get(u'C').create(var.get(u'a'), var.get(u'b'))
+ SWITCHED = True
+ break
+ return var.get(u'C').create(var.get(u'a'), var.get(u'b'), var.get(u'c'))
+ return var.get(u'C').callprop(u'apply', var.get(u"this"), var.get(u'arguments'))
+ PyJs_anonymous_1552_._set_name(u'anonymous')
+ var.put(u'F', PyJs_anonymous_1552_)
+ var.get(u'F').put(var.get(u'PROTOTYPE'), var.get(u'C').get(var.get(u'PROTOTYPE')))
+ return var.get(u'F')
+ PyJs_anonymous_1551_._set_name(u'anonymous')
+ return (var.get(u'ctx')(var.get(u'out'), var.get(u'global')) if (var.get(u'IS_BIND') and var.get(u'own')) else (PyJs_anonymous_1551_(var.get(u'out')) if (var.get(u'IS_WRAP') and (var.get(u'target').get(var.get(u'key'))==var.get(u'out'))) else (var.get(u'ctx')(var.get(u'Function').get(u'call'), var.get(u'out')) if (var.get(u'IS_PROTO') and (var.get(u'out',throw=False).typeof()==Js(u'function'))) else var.get(u'out'))))
+ var.get(u'exports').put(var.get(u'key'), (var.get(u'source').get(var.get(u'key')) if (var.get(u'IS_GLOBAL') and (var.get(u'target').get(var.get(u'key')).typeof()!=Js(u'function'))) else PyJs_LONG_1553_()))
+ if var.get(u'IS_PROTO'):
+ PyJs_Object_1554_ = Js({})
+ (var.get(u'exports').get(u'virtual') or var.get(u'exports').put(u'virtual', PyJs_Object_1554_)).put(var.get(u'key'), var.get(u'out'))
+ if (((var.get(u'type')&var.get(u'$export').get(u'R')) and var.get(u'expProto')) and var.get(u'expProto').get(var.get(u'key')).neg()):
+ var.get(u'hide')(var.get(u'expProto'), var.get(u'key'), var.get(u'out'))
+ PyJs_anonymous_1548_._set_name(u'anonymous')
+ var.put(u'$export', PyJs_anonymous_1548_)
+ var.get(u'$export').put(u'F', Js(1.0))
+ var.get(u'$export').put(u'G', Js(2.0))
+ var.get(u'$export').put(u'S', Js(4.0))
+ var.get(u'$export').put(u'P', Js(8.0))
+ var.get(u'$export').put(u'B', Js(16.0))
+ var.get(u'$export').put(u'W', Js(32.0))
+ var.get(u'$export').put(u'U', Js(64.0))
+ var.get(u'$export').put(u'R', Js(128.0))
+ var.get(u'module').put(u'exports', var.get(u'$export'))
+PyJs_anonymous_1547_._set_name(u'anonymous')
+PyJs_Object_1555_ = Js({u'./_core':Js(144.0),u'./_ctx':Js(145.0),u'./_global':Js(154.0),u'./_hide':Js(156.0)})
+@Js
+def PyJs_anonymous_1556_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1557_(PyJsArg_65786563_, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'exec':PyJsArg_65786563_}, var)
+ var.registers([u'exec'])
+ try:
+ return var.get(u'exec')().neg().neg()
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_66067223 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ return var.get(u'true')
+ finally:
+ if PyJsHolder_65_66067223 is not None:
+ var.own[u'e'] = PyJsHolder_65_66067223
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_66067223
+ PyJs_anonymous_1557_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1557_)
+PyJs_anonymous_1556_._set_name(u'anonymous')
+PyJs_Object_1558_ = Js({})
+@Js
+def PyJs_anonymous_1559_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'getIterFn', u'RETURN', u'require', u'ctx', u'module', u'BREAK', u'toLength', u'call', u'isArrayIter', u'anObject'])
+ var.put(u'ctx', var.get(u'require')(Js(u'./_ctx')))
+ var.put(u'call', var.get(u'require')(Js(u'./_iter-call')))
+ var.put(u'isArrayIter', var.get(u'require')(Js(u'./_is-array-iter')))
+ var.put(u'anObject', var.get(u'require')(Js(u'./_an-object')))
+ var.put(u'toLength', var.get(u'require')(Js(u'./_to-length')))
+ var.put(u'getIterFn', var.get(u'require')(Js(u'./core.get-iterator-method')))
+ PyJs_Object_1560_ = Js({})
+ var.put(u'BREAK', PyJs_Object_1560_)
+ PyJs_Object_1561_ = Js({})
+ var.put(u'RETURN', PyJs_Object_1561_)
+ @Js
+ def PyJs_anonymous_1562_(iterable, entries, fn, that, ITERATOR, this, arguments, var=var):
+ var = Scope({u'iterable':iterable, u'ITERATOR':ITERATOR, u'that':that, u'this':this, u'entries':entries, u'fn':fn, u'arguments':arguments}, var)
+ var.registers([u'iterFn', u'index', u'ITERATOR', u'iterator', u'f', u'that', u'step', u'length', u'result', u'entries', u'fn', u'iterable'])
+ @Js
+ def PyJs_anonymous_1563_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'iterable')
+ PyJs_anonymous_1563_._set_name(u'anonymous')
+ var.put(u'iterFn', (PyJs_anonymous_1563_ if var.get(u'ITERATOR') else var.get(u'getIterFn')(var.get(u'iterable'))))
+ var.put(u'f', var.get(u'ctx')(var.get(u'fn'), var.get(u'that'), (Js(2.0) if var.get(u'entries') else Js(1.0))))
+ var.put(u'index', Js(0.0))
+ if (var.get(u'iterFn',throw=False).typeof()!=Js(u'function')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError')((var.get(u'iterable')+Js(u' is not iterable!'))))
+ raise PyJsTempException
+ if var.get(u'isArrayIter')(var.get(u'iterFn')):
+ #for JS loop
+ var.put(u'length', var.get(u'toLength')(var.get(u'iterable').get(u'length')))
+ while (var.get(u'length')>var.get(u'index')):
+ try:
+ var.put(u'result', (var.get(u'f')(var.get(u'anObject')(var.put(u'step', var.get(u'iterable').get(var.get(u'index')))).get(u'0'), var.get(u'step').get(u'1')) if var.get(u'entries') else var.get(u'f')(var.get(u'iterable').get(var.get(u'index')))))
+ if (PyJsStrictEq(var.get(u'result'),var.get(u'BREAK')) or PyJsStrictEq(var.get(u'result'),var.get(u'RETURN'))):
+ return var.get(u'result')
+ finally:
+ (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))-Js(1))
+ else:
+ #for JS loop
+ var.put(u'iterator', var.get(u'iterFn').callprop(u'call', var.get(u'iterable')))
+ while var.put(u'step', var.get(u'iterator').callprop(u'next')).get(u'done').neg():
+ var.put(u'result', var.get(u'call')(var.get(u'iterator'), var.get(u'f'), var.get(u'step').get(u'value'), var.get(u'entries')))
+ if (PyJsStrictEq(var.get(u'result'),var.get(u'BREAK')) or PyJsStrictEq(var.get(u'result'),var.get(u'RETURN'))):
+ return var.get(u'result')
+
+ PyJs_anonymous_1562_._set_name(u'anonymous')
+ var.put(u'exports', var.get(u'module').put(u'exports', PyJs_anonymous_1562_))
+ var.get(u'exports').put(u'BREAK', var.get(u'BREAK'))
+ var.get(u'exports').put(u'RETURN', var.get(u'RETURN'))
+PyJs_anonymous_1559_._set_name(u'anonymous')
+PyJs_Object_1564_ = Js({u'./_an-object':Js(132.0),u'./_ctx':Js(145.0),u'./_is-array-iter':Js(160.0),u'./_iter-call':Js(163.0),u'./_to-length':Js(196.0),u'./core.get-iterator-method':Js(203.0)})
+@Js
+def PyJs_anonymous_1565_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'global', u'exports', u'module'])
+ var.put(u'global', var.get(u'module').put(u'exports', (var.get(u'window') if ((var.get(u'window',throw=False).typeof()!=Js(u'undefined')) and (var.get(u'window').get(u'Math')==var.get(u'Math'))) else (var.get(u'self') if ((var.get(u'self',throw=False).typeof()!=Js(u'undefined')) and (var.get(u'self').get(u'Math')==var.get(u'Math'))) else var.get(u'Function')(Js(u'return this'))()))))
+ if (var.get(u'__g',throw=False).typeof()==Js(u'number')):
+ var.put(u'__g', var.get(u'global'))
+PyJs_anonymous_1565_._set_name(u'anonymous')
+PyJs_Object_1566_ = Js({})
+@Js
+def PyJs_anonymous_1567_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'hasOwnProperty', u'module'])
+ PyJs_Object_1568_ = Js({})
+ var.put(u'hasOwnProperty', PyJs_Object_1568_.get(u'hasOwnProperty'))
+ @Js
+ def PyJs_anonymous_1569_(it, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'it', u'key'])
+ return var.get(u'hasOwnProperty').callprop(u'call', var.get(u'it'), var.get(u'key'))
+ PyJs_anonymous_1569_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1569_)
+PyJs_anonymous_1567_._set_name(u'anonymous')
+PyJs_Object_1570_ = Js({})
+@Js
+def PyJs_anonymous_1571_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'module', u'require', u'exports', u'createDesc', u'dP'])
+ var.put(u'dP', var.get(u'require')(Js(u'./_object-dp')))
+ var.put(u'createDesc', var.get(u'require')(Js(u'./_property-desc')))
+ @Js
+ def PyJs_anonymous_1572_(object, key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'object':object, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'object', u'value', u'key'])
+ return var.get(u'dP').callprop(u'f', var.get(u'object'), var.get(u'key'), var.get(u'createDesc')(Js(1.0), var.get(u'value')))
+ PyJs_anonymous_1572_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1573_(object, key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'object':object, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'object', u'value', u'key'])
+ var.get(u'object').put(var.get(u'key'), var.get(u'value'))
+ return var.get(u'object')
+ PyJs_anonymous_1573_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', (PyJs_anonymous_1572_ if var.get(u'require')(Js(u'./_descriptors')) else PyJs_anonymous_1573_))
+PyJs_anonymous_1571_._set_name(u'anonymous')
+PyJs_Object_1574_ = Js({u'./_descriptors':Js(147.0),u'./_object-dp':Js(173.0),u'./_property-desc':Js(184.0)})
+@Js
+def PyJs_anonymous_1575_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'module').put(u'exports', (var.get(u'require')(Js(u'./_global')).get(u'document') and var.get(u'document').get(u'documentElement')))
+PyJs_anonymous_1575_._set_name(u'anonymous')
+PyJs_Object_1576_ = Js({u'./_global':Js(154.0)})
+@Js
+def PyJs_anonymous_1577_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1578_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_anonymous_1580_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return Js(7.0)
+ PyJs_anonymous_1580_._set_name(u'anonymous')
+ PyJs_Object_1579_ = Js({u'get':PyJs_anonymous_1580_})
+ return (var.get(u'Object').callprop(u'defineProperty', var.get(u'require')(Js(u'./_dom-create'))(Js(u'div')), Js(u'a'), PyJs_Object_1579_).get(u'a')!=Js(7.0))
+ PyJs_anonymous_1578_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', (var.get(u'require')(Js(u'./_descriptors')).neg() and var.get(u'require')(Js(u'./_fails'))(PyJs_anonymous_1578_).neg()))
+PyJs_anonymous_1577_._set_name(u'anonymous')
+PyJs_Object_1581_ = Js({u'./_descriptors':Js(147.0),u'./_dom-create':Js(148.0),u'./_fails':Js(152.0)})
+@Js
+def PyJs_anonymous_1582_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module', u'cof'])
+ var.put(u'cof', var.get(u'require')(Js(u'./_cof')))
+ @Js
+ def PyJs_anonymous_1583_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return (var.get(u'it').callprop(u'split', Js(u'')) if (var.get(u'cof')(var.get(u'it'))==Js(u'String')) else var.get(u'Object')(var.get(u'it')))
+ PyJs_anonymous_1583_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', (var.get(u'Object') if var.get(u'Object')(Js(u'z')).callprop(u'propertyIsEnumerable', Js(0.0)) else PyJs_anonymous_1583_))
+PyJs_anonymous_1582_._set_name(u'anonymous')
+PyJs_Object_1584_ = Js({u'./_cof':Js(139.0)})
+@Js
+def PyJs_anonymous_1585_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'ITERATOR', u'ArrayProto', u'require', u'module', u'Iterators'])
+ var.put(u'Iterators', var.get(u'require')(Js(u'./_iterators')))
+ var.put(u'ITERATOR', var.get(u'require')(Js(u'./_wks'))(Js(u'iterator')))
+ var.put(u'ArrayProto', var.get(u'Array').get(u'prototype'))
+ @Js
+ def PyJs_anonymous_1586_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return (PyJsStrictNeq(var.get(u'it'),var.get(u'undefined')) and (PyJsStrictEq(var.get(u'Iterators').get(u'Array'),var.get(u'it')) or PyJsStrictEq(var.get(u'ArrayProto').get(var.get(u'ITERATOR')),var.get(u'it'))))
+ PyJs_anonymous_1586_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1586_)
+PyJs_anonymous_1585_._set_name(u'anonymous')
+PyJs_Object_1587_ = Js({u'./_iterators':Js(167.0),u'./_wks':Js(202.0)})
+@Js
+def PyJs_anonymous_1588_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module', u'cof'])
+ var.put(u'cof', var.get(u'require')(Js(u'./_cof')))
+ @Js
+ def PyJs_isArray_1589_(arg, this, arguments, var=var):
+ var = Scope({u'this':this, u'isArray':PyJs_isArray_1589_, u'arguments':arguments, u'arg':arg}, var)
+ var.registers([u'arg'])
+ return (var.get(u'cof')(var.get(u'arg'))==Js(u'Array'))
+ PyJs_isArray_1589_._set_name(u'isArray')
+ var.get(u'module').put(u'exports', (var.get(u'Array').get(u'isArray') or PyJs_isArray_1589_))
+PyJs_anonymous_1588_._set_name(u'anonymous')
+PyJs_Object_1590_ = Js({u'./_cof':Js(139.0)})
+@Js
+def PyJs_anonymous_1591_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1592_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return (PyJsStrictNeq(var.get(u'it'),var.get(u"null")) if PyJsStrictEq(var.get(u'it',throw=False).typeof(),Js(u'object')) else PyJsStrictEq(var.get(u'it',throw=False).typeof(),Js(u'function')))
+ PyJs_anonymous_1592_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1592_)
+PyJs_anonymous_1591_._set_name(u'anonymous')
+PyJs_Object_1593_ = Js({})
+@Js
+def PyJs_anonymous_1594_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'anObject', u'exports', u'module'])
+ var.put(u'anObject', var.get(u'require')(Js(u'./_an-object')))
+ @Js
+ def PyJs_anonymous_1595_(iterator, fn, value, entries, this, arguments, var=var):
+ var = Scope({u'fn':fn, u'iterator':iterator, u'entries':entries, u'this':this, u'value':value, u'arguments':arguments}, var)
+ var.registers([u'fn', u'value', u'iterator', u'ret', u'entries'])
+ try:
+ return (var.get(u'fn')(var.get(u'anObject')(var.get(u'value')).get(u'0'), var.get(u'value').get(u'1')) if var.get(u'entries') else var.get(u'fn')(var.get(u'value')))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_64523188 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ var.put(u'ret', var.get(u'iterator').get(u'return'))
+ if PyJsStrictNeq(var.get(u'ret'),var.get(u'undefined')):
+ var.get(u'anObject')(var.get(u'ret').callprop(u'call', var.get(u'iterator')))
+ PyJsTempException = JsToPyException(var.get(u'e'))
+ raise PyJsTempException
+ finally:
+ if PyJsHolder_65_64523188 is not None:
+ var.own[u'e'] = PyJsHolder_65_64523188
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_64523188
+ PyJs_anonymous_1595_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1595_)
+PyJs_anonymous_1594_._set_name(u'anonymous')
+PyJs_Object_1596_ = Js({u'./_an-object':Js(132.0)})
+@Js
+def PyJs_anonymous_1597_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'setToStringTag', u'exports', u'IteratorPrototype', u'create', u'module', u'descriptor', u'require'])
+ Js(u'use strict')
+ var.put(u'create', var.get(u'require')(Js(u'./_object-create')))
+ var.put(u'descriptor', var.get(u'require')(Js(u'./_property-desc')))
+ var.put(u'setToStringTag', var.get(u'require')(Js(u'./_set-to-string-tag')))
+ PyJs_Object_1598_ = Js({})
+ var.put(u'IteratorPrototype', PyJs_Object_1598_)
+ @Js
+ def PyJs_anonymous_1599_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this")
+ PyJs_anonymous_1599_._set_name(u'anonymous')
+ var.get(u'require')(Js(u'./_hide'))(var.get(u'IteratorPrototype'), var.get(u'require')(Js(u'./_wks'))(Js(u'iterator')), PyJs_anonymous_1599_)
+ @Js
+ def PyJs_anonymous_1600_(Constructor, NAME, next, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'next':next, u'NAME':NAME, u'Constructor':Constructor}, var)
+ var.registers([u'next', u'NAME', u'Constructor'])
+ PyJs_Object_1601_ = Js({u'next':var.get(u'descriptor')(Js(1.0), var.get(u'next'))})
+ var.get(u'Constructor').put(u'prototype', var.get(u'create')(var.get(u'IteratorPrototype'), PyJs_Object_1601_))
+ var.get(u'setToStringTag')(var.get(u'Constructor'), (var.get(u'NAME')+Js(u' Iterator')))
+ PyJs_anonymous_1600_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1600_)
+PyJs_anonymous_1597_._set_name(u'anonymous')
+PyJs_Object_1602_ = Js({u'./_hide':Js(156.0),u'./_object-create':Js(172.0),u'./_property-desc':Js(184.0),u'./_set-to-string-tag':Js(189.0),u'./_wks':Js(202.0)})
+@Js
+def PyJs_anonymous_1603_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'returnThis', u'$iterCreate', u'redefine', u'hide', u'ITERATOR', u'KEYS', u'$export', u'setToStringTag', u'BUGGY', u'require', u'LIBRARY', u'getPrototypeOf', u'Iterators', u'VALUES', u'module', u'has', u'FF_ITERATOR', u'exports'])
+ Js(u'use strict')
+ var.put(u'LIBRARY', var.get(u'require')(Js(u'./_library')))
+ var.put(u'$export', var.get(u'require')(Js(u'./_export')))
+ var.put(u'redefine', var.get(u'require')(Js(u'./_redefine')))
+ var.put(u'hide', var.get(u'require')(Js(u'./_hide')))
+ var.put(u'has', var.get(u'require')(Js(u'./_has')))
+ var.put(u'Iterators', var.get(u'require')(Js(u'./_iterators')))
+ var.put(u'$iterCreate', var.get(u'require')(Js(u'./_iter-create')))
+ var.put(u'setToStringTag', var.get(u'require')(Js(u'./_set-to-string-tag')))
+ var.put(u'getPrototypeOf', var.get(u'require')(Js(u'./_object-gpo')))
+ var.put(u'ITERATOR', var.get(u'require')(Js(u'./_wks'))(Js(u'iterator')))
+ var.put(u'BUGGY', (Js([]).get(u'keys') and Js([]).callprop(u'keys').contains(Js(u'next'))).neg())
+ var.put(u'FF_ITERATOR', Js(u'@@iterator'))
+ var.put(u'KEYS', Js(u'keys'))
+ var.put(u'VALUES', Js(u'values'))
+ @Js
+ def PyJs_anonymous_1604_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this")
+ PyJs_anonymous_1604_._set_name(u'anonymous')
+ var.put(u'returnThis', PyJs_anonymous_1604_)
+ @Js
+ def PyJs_anonymous_1605_(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED, this, arguments, var=var):
+ var = Scope({u'FORCED':FORCED, u'NAME':NAME, u'DEFAULT':DEFAULT, u'Constructor':Constructor, u'next':next, u'this':this, u'Base':Base, u'arguments':arguments, u'IS_SET':IS_SET}, var)
+ var.registers([u'DEF_VALUES', u'Base', u'$entries', u'methods', u'$default', u'proto', u'DEFAULT', u'IteratorPrototype', u'Constructor', u'getMethod', u'next', u'IS_SET', u'$anyNative', u'TAG', u'key', u'VALUES_BUG', u'$native', u'FORCED', u'NAME'])
+ var.get(u'$iterCreate')(var.get(u'Constructor'), var.get(u'NAME'), var.get(u'next'))
+ @Js
+ def PyJs_anonymous_1606_(kind, this, arguments, var=var):
+ var = Scope({u'this':this, u'kind':kind, u'arguments':arguments}, var)
+ var.registers([u'kind'])
+ if (var.get(u'BUGGY').neg() and var.get(u'proto').contains(var.get(u'kind'))):
+ return var.get(u'proto').get(var.get(u'kind'))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'kind'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'KEYS')):
+ SWITCHED = True
+ @Js
+ def PyJs_keys_1607_(this, arguments, var=var):
+ var = Scope({u'this':this, u'keys':PyJs_keys_1607_, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'Constructor').create(var.get(u"this"), var.get(u'kind'))
+ PyJs_keys_1607_._set_name(u'keys')
+ return PyJs_keys_1607_
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'VALUES')):
+ SWITCHED = True
+ @Js
+ def PyJs_values_1608_(this, arguments, var=var):
+ var = Scope({u'this':this, u'values':PyJs_values_1608_, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'Constructor').create(var.get(u"this"), var.get(u'kind'))
+ PyJs_values_1608_._set_name(u'values')
+ return PyJs_values_1608_
+ SWITCHED = True
+ break
+ @Js
+ def PyJs_entries_1609_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'entries':PyJs_entries_1609_}, var)
+ var.registers([])
+ return var.get(u'Constructor').create(var.get(u"this"), var.get(u'kind'))
+ PyJs_entries_1609_._set_name(u'entries')
+ return PyJs_entries_1609_
+ PyJs_anonymous_1606_._set_name(u'anonymous')
+ var.put(u'getMethod', PyJs_anonymous_1606_)
+ var.put(u'TAG', (var.get(u'NAME')+Js(u' Iterator')))
+ var.put(u'DEF_VALUES', (var.get(u'DEFAULT')==var.get(u'VALUES')))
+ var.put(u'VALUES_BUG', Js(False))
+ var.put(u'proto', var.get(u'Base').get(u'prototype'))
+ var.put(u'$native', ((var.get(u'proto').get(var.get(u'ITERATOR')) or var.get(u'proto').get(var.get(u'FF_ITERATOR'))) or (var.get(u'DEFAULT') and var.get(u'proto').get(var.get(u'DEFAULT')))))
+ var.put(u'$default', (var.get(u'$native') or var.get(u'getMethod')(var.get(u'DEFAULT'))))
+ var.put(u'$entries', ((var.get(u'$default') if var.get(u'DEF_VALUES').neg() else var.get(u'getMethod')(Js(u'entries'))) if var.get(u'DEFAULT') else var.get(u'undefined')))
+ var.put(u'$anyNative', ((var.get(u'proto').get(u'entries') or var.get(u'$native')) if (var.get(u'NAME')==Js(u'Array')) else var.get(u'$native')))
+ if var.get(u'$anyNative'):
+ var.put(u'IteratorPrototype', var.get(u'getPrototypeOf')(var.get(u'$anyNative').callprop(u'call', var.get(u'Base').create())))
+ if PyJsStrictNeq(var.get(u'IteratorPrototype'),var.get(u'Object').get(u'prototype')):
+ var.get(u'setToStringTag')(var.get(u'IteratorPrototype'), var.get(u'TAG'), var.get(u'true'))
+ if (var.get(u'LIBRARY').neg() and var.get(u'has')(var.get(u'IteratorPrototype'), var.get(u'ITERATOR')).neg()):
+ var.get(u'hide')(var.get(u'IteratorPrototype'), var.get(u'ITERATOR'), var.get(u'returnThis'))
+ if ((var.get(u'DEF_VALUES') and var.get(u'$native')) and PyJsStrictNeq(var.get(u'$native').get(u'name'),var.get(u'VALUES'))):
+ var.put(u'VALUES_BUG', var.get(u'true'))
+ @Js
+ def PyJs_values_1610_(this, arguments, var=var):
+ var = Scope({u'this':this, u'values':PyJs_values_1610_, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'$native').callprop(u'call', var.get(u"this"))
+ PyJs_values_1610_._set_name(u'values')
+ var.put(u'$default', PyJs_values_1610_)
+ if ((var.get(u'LIBRARY').neg() or var.get(u'FORCED')) and ((var.get(u'BUGGY') or var.get(u'VALUES_BUG')) or var.get(u'proto').get(var.get(u'ITERATOR')).neg())):
+ var.get(u'hide')(var.get(u'proto'), var.get(u'ITERATOR'), var.get(u'$default'))
+ var.get(u'Iterators').put(var.get(u'NAME'), var.get(u'$default'))
+ var.get(u'Iterators').put(var.get(u'TAG'), var.get(u'returnThis'))
+ if var.get(u'DEFAULT'):
+ PyJs_Object_1611_ = Js({u'values':(var.get(u'$default') if var.get(u'DEF_VALUES') else var.get(u'getMethod')(var.get(u'VALUES'))),u'keys':(var.get(u'$default') if var.get(u'IS_SET') else var.get(u'getMethod')(var.get(u'KEYS'))),u'entries':var.get(u'$entries')})
+ var.put(u'methods', PyJs_Object_1611_)
+ if var.get(u'FORCED'):
+ for PyJsTemp in var.get(u'methods'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'proto').contains(var.get(u'key')).neg():
+ var.get(u'redefine')(var.get(u'proto'), var.get(u'key'), var.get(u'methods').get(var.get(u'key')))
+ else:
+ var.get(u'$export')((var.get(u'$export').get(u'P')+(var.get(u'$export').get(u'F')*(var.get(u'BUGGY') or var.get(u'VALUES_BUG')))), var.get(u'NAME'), var.get(u'methods'))
+ return var.get(u'methods')
+ PyJs_anonymous_1605_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1605_)
+PyJs_anonymous_1603_._set_name(u'anonymous')
+PyJs_Object_1612_ = Js({u'./_export':Js(151.0),u'./_has':Js(155.0),u'./_hide':Js(156.0),u'./_iter-create':Js(164.0),u'./_iterators':Js(167.0),u'./_library':Js(169.0),u'./_object-gpo':Js(179.0),u'./_redefine':Js(186.0),u'./_set-to-string-tag':Js(189.0),u'./_wks':Js(202.0)})
+@Js
+def PyJs_anonymous_1613_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1614_(done, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'done':done, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'done', u'value'])
+ PyJs_Object_1615_ = Js({u'value':var.get(u'value'),u'done':var.get(u'done').neg().neg()})
+ return PyJs_Object_1615_
+ PyJs_anonymous_1614_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1614_)
+PyJs_anonymous_1613_._set_name(u'anonymous')
+PyJs_Object_1616_ = Js({})
+@Js
+def PyJs_anonymous_1617_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1618_ = Js({})
+ var.get(u'module').put(u'exports', PyJs_Object_1618_)
+PyJs_anonymous_1617_._set_name(u'anonymous')
+PyJs_Object_1619_ = Js({})
+@Js
+def PyJs_anonymous_1620_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'toIObject', u'exports', u'module', u'getKeys'])
+ var.put(u'getKeys', var.get(u'require')(Js(u'./_object-keys')))
+ var.put(u'toIObject', var.get(u'require')(Js(u'./_to-iobject')))
+ @Js
+ def PyJs_anonymous_1621_(object, el, this, arguments, var=var):
+ var = Scope({u'this':this, u'el':el, u'object':object, u'arguments':arguments}, var)
+ var.registers([u'index', u'el', u'keys', u'object', u'O', u'length', u'key'])
+ var.put(u'O', var.get(u'toIObject')(var.get(u'object')))
+ var.put(u'keys', var.get(u'getKeys')(var.get(u'O')))
+ var.put(u'length', var.get(u'keys').get(u'length'))
+ var.put(u'index', Js(0.0))
+ while (var.get(u'length')>var.get(u'index')):
+ if PyJsStrictEq(var.get(u'O').get(var.put(u'key', var.get(u'keys').get((var.put(u'index',Js(var.get(u'index').to_number())+Js(1))-Js(1))))),var.get(u'el')):
+ return var.get(u'key')
+ PyJs_anonymous_1621_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1621_)
+PyJs_anonymous_1620_._set_name(u'anonymous')
+PyJs_Object_1622_ = Js({u'./_object-keys':Js(181.0),u'./_to-iobject':Js(195.0)})
+@Js
+def PyJs_anonymous_1623_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'module').put(u'exports', var.get(u'true'))
+PyJs_anonymous_1623_._set_name(u'anonymous')
+PyJs_Object_1624_ = Js({})
+@Js
+def PyJs_anonymous_1625_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'fastKey', u'FREEZE', u'getWeak', u'require', u'isExtensible', u'exports', u'module', u'id', u'setMeta', u'META', u'meta', u'onFreeze', u'has', u'setDesc', u'isObject'])
+ var.put(u'META', var.get(u'require')(Js(u'./_uid'))(Js(u'meta')))
+ var.put(u'isObject', var.get(u'require')(Js(u'./_is-object')))
+ var.put(u'has', var.get(u'require')(Js(u'./_has')))
+ var.put(u'setDesc', var.get(u'require')(Js(u'./_object-dp')).get(u'f'))
+ var.put(u'id', Js(0.0))
+ @Js
+ def PyJs_anonymous_1626_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'true')
+ PyJs_anonymous_1626_._set_name(u'anonymous')
+ var.put(u'isExtensible', (var.get(u'Object').get(u'isExtensible') or PyJs_anonymous_1626_))
+ @Js
+ def PyJs_anonymous_1627_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ PyJs_Object_1628_ = Js({})
+ return var.get(u'isExtensible')(var.get(u'Object').callprop(u'preventExtensions', PyJs_Object_1628_))
+ PyJs_anonymous_1627_._set_name(u'anonymous')
+ var.put(u'FREEZE', var.get(u'require')(Js(u'./_fails'))(PyJs_anonymous_1627_).neg())
+ @Js
+ def PyJs_anonymous_1629_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ PyJs_Object_1632_ = Js({})
+ PyJs_Object_1631_ = Js({u'i':(Js(u'O')+var.put(u'id',Js(var.get(u'id').to_number())+Js(1))),u'w':PyJs_Object_1632_})
+ PyJs_Object_1630_ = Js({u'value':PyJs_Object_1631_})
+ var.get(u'setDesc')(var.get(u'it'), var.get(u'META'), PyJs_Object_1630_)
+ PyJs_anonymous_1629_._set_name(u'anonymous')
+ var.put(u'setMeta', PyJs_anonymous_1629_)
+ @Js
+ def PyJs_anonymous_1633_(it, create, this, arguments, var=var):
+ var = Scope({u'this':this, u'create':create, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'create', u'it'])
+ if var.get(u'isObject')(var.get(u'it')).neg():
+ return (var.get(u'it') if (var.get(u'it',throw=False).typeof()==Js(u'symbol')) else ((Js(u'S') if (var.get(u'it',throw=False).typeof()==Js(u'string')) else Js(u'P'))+var.get(u'it')))
+ if var.get(u'has')(var.get(u'it'), var.get(u'META')).neg():
+ if var.get(u'isExtensible')(var.get(u'it')).neg():
+ return Js(u'F')
+ if var.get(u'create').neg():
+ return Js(u'E')
+ var.get(u'setMeta')(var.get(u'it'))
+ return var.get(u'it').get(var.get(u'META')).get(u'i')
+ PyJs_anonymous_1633_._set_name(u'anonymous')
+ var.put(u'fastKey', PyJs_anonymous_1633_)
+ @Js
+ def PyJs_anonymous_1634_(it, create, this, arguments, var=var):
+ var = Scope({u'this':this, u'create':create, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'create', u'it'])
+ if var.get(u'has')(var.get(u'it'), var.get(u'META')).neg():
+ if var.get(u'isExtensible')(var.get(u'it')).neg():
+ return var.get(u'true')
+ if var.get(u'create').neg():
+ return Js(False)
+ var.get(u'setMeta')(var.get(u'it'))
+ return var.get(u'it').get(var.get(u'META')).get(u'w')
+ PyJs_anonymous_1634_._set_name(u'anonymous')
+ var.put(u'getWeak', PyJs_anonymous_1634_)
+ @Js
+ def PyJs_anonymous_1635_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ if (((var.get(u'FREEZE') and var.get(u'meta').get(u'NEED')) and var.get(u'isExtensible')(var.get(u'it'))) and var.get(u'has')(var.get(u'it'), var.get(u'META')).neg()):
+ var.get(u'setMeta')(var.get(u'it'))
+ return var.get(u'it')
+ PyJs_anonymous_1635_._set_name(u'anonymous')
+ var.put(u'onFreeze', PyJs_anonymous_1635_)
+ PyJs_Object_1636_ = Js({u'KEY':var.get(u'META'),u'NEED':Js(False),u'fastKey':var.get(u'fastKey'),u'getWeak':var.get(u'getWeak'),u'onFreeze':var.get(u'onFreeze')})
+ var.put(u'meta', var.get(u'module').put(u'exports', PyJs_Object_1636_))
+PyJs_anonymous_1625_._set_name(u'anonymous')
+PyJs_Object_1637_ = Js({u'./_fails':Js(152.0),u'./_has':Js(155.0),u'./_is-object':Js(162.0),u'./_object-dp':Js(173.0),u'./_uid':Js(199.0)})
+@Js
+def PyJs_anonymous_1638_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'IObject', u'$assign', u'toObject', u'pIE', u'module', u'gOPS', u'getKeys', u'require'])
+ Js(u'use strict')
+ var.put(u'getKeys', var.get(u'require')(Js(u'./_object-keys')))
+ var.put(u'gOPS', var.get(u'require')(Js(u'./_object-gops')))
+ var.put(u'pIE', var.get(u'require')(Js(u'./_object-pie')))
+ var.put(u'toObject', var.get(u'require')(Js(u'./_to-object')))
+ var.put(u'IObject', var.get(u'require')(Js(u'./_iobject')))
+ var.put(u'$assign', var.get(u'Object').get(u'assign'))
+ @Js
+ def PyJs_assign_1639_(target, source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'assign':PyJs_assign_1639_, u'target':target, u'arguments':arguments}, var)
+ var.registers([u'index', u'target', u'getSymbols', u'keys', u'j', u'S', u'isEnum', u'aLen', u'T', u'key', u'length', u'source'])
+ var.put(u'T', var.get(u'toObject')(var.get(u'target')))
+ var.put(u'aLen', var.get(u'arguments').get(u'length'))
+ var.put(u'index', Js(1.0))
+ var.put(u'getSymbols', var.get(u'gOPS').get(u'f'))
+ var.put(u'isEnum', var.get(u'pIE').get(u'f'))
+ while (var.get(u'aLen')>var.get(u'index')):
+ var.put(u'S', var.get(u'IObject')(var.get(u'arguments').get((var.put(u'index',Js(var.get(u'index').to_number())+Js(1))-Js(1)))))
+ var.put(u'keys', (var.get(u'getKeys')(var.get(u'S')).callprop(u'concat', var.get(u'getSymbols')(var.get(u'S'))) if var.get(u'getSymbols') else var.get(u'getKeys')(var.get(u'S'))))
+ var.put(u'length', var.get(u'keys').get(u'length'))
+ var.put(u'j', Js(0.0))
+ while (var.get(u'length')>var.get(u'j')):
+ if var.get(u'isEnum').callprop(u'call', var.get(u'S'), var.put(u'key', var.get(u'keys').get((var.put(u'j',Js(var.get(u'j').to_number())+Js(1))-Js(1))))):
+ var.get(u'T').put(var.get(u'key'), var.get(u'S').get(var.get(u'key')))
+ return var.get(u'T')
+ PyJs_assign_1639_._set_name(u'assign')
+ @Js
+ def PyJs_anonymous_1640_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'A', u'S', u'B', u'K'])
+ PyJs_Object_1641_ = Js({})
+ var.put(u'A', PyJs_Object_1641_)
+ PyJs_Object_1642_ = Js({})
+ var.put(u'B', PyJs_Object_1642_)
+ var.put(u'S', var.get(u'Symbol')())
+ var.put(u'K', Js(u'abcdefghijklmnopqrst'))
+ var.get(u'A').put(var.get(u'S'), Js(7.0))
+ @Js
+ def PyJs_anonymous_1643_(k, this, arguments, var=var):
+ var = Scope({u'this':this, u'k':k, u'arguments':arguments}, var)
+ var.registers([u'k'])
+ var.get(u'B').put(var.get(u'k'), var.get(u'k'))
+ PyJs_anonymous_1643_._set_name(u'anonymous')
+ var.get(u'K').callprop(u'split', Js(u'')).callprop(u'forEach', PyJs_anonymous_1643_)
+ PyJs_Object_1644_ = Js({})
+ PyJs_Object_1645_ = Js({})
+ return ((var.get(u'$assign')(PyJs_Object_1644_, var.get(u'A')).get(var.get(u'S'))!=Js(7.0)) or (var.get(u'Object').callprop(u'keys', var.get(u'$assign')(PyJs_Object_1645_, var.get(u'B'))).callprop(u'join', Js(u''))!=var.get(u'K')))
+ PyJs_anonymous_1640_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', (PyJs_assign_1639_ if (var.get(u'$assign').neg() or var.get(u'require')(Js(u'./_fails'))(PyJs_anonymous_1640_)) else var.get(u'$assign')))
+PyJs_anonymous_1638_._set_name(u'anonymous')
+PyJs_Object_1646_ = Js({u'./_fails':Js(152.0),u'./_iobject':Js(159.0),u'./_object-gops':Js(178.0),u'./_object-keys':Js(181.0),u'./_object-pie':Js(182.0),u'./_to-object':Js(197.0)})
+@Js
+def PyJs_anonymous_1647_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'dPs', u'require', u'enumBugKeys', u'module', u'IE_PROTO', u'anObject', u'createDict', u'PROTOTYPE', u'Empty'])
+ var.put(u'anObject', var.get(u'require')(Js(u'./_an-object')))
+ var.put(u'dPs', var.get(u'require')(Js(u'./_object-dps')))
+ var.put(u'enumBugKeys', var.get(u'require')(Js(u'./_enum-bug-keys')))
+ var.put(u'IE_PROTO', var.get(u'require')(Js(u'./_shared-key'))(Js(u'IE_PROTO')))
+ @Js
+ def PyJs_anonymous_1648_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ pass
+ PyJs_anonymous_1648_._set_name(u'anonymous')
+ var.put(u'Empty', PyJs_anonymous_1648_)
+ var.put(u'PROTOTYPE', Js(u'prototype'))
+ @Js
+ def PyJs_anonymous_1649_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'lt', u'gt', u'iframeDocument', u'iframe'])
+ var.put(u'iframe', var.get(u'require')(Js(u'./_dom-create'))(Js(u'iframe')))
+ var.put(u'i', var.get(u'enumBugKeys').get(u'length'))
+ var.put(u'lt', Js(u'<'))
+ var.put(u'gt', Js(u'>'))
+ var.get(u'iframe').get(u'style').put(u'display', Js(u'none'))
+ var.get(u'require')(Js(u'./_html')).callprop(u'appendChild', var.get(u'iframe'))
+ var.get(u'iframe').put(u'src', Js(u'javascript:'))
+ var.put(u'iframeDocument', var.get(u'iframe').get(u'contentWindow').get(u'document'))
+ var.get(u'iframeDocument').callprop(u'open')
+ var.get(u'iframeDocument').callprop(u'write', ((((((var.get(u'lt')+Js(u'script'))+var.get(u'gt'))+Js(u'document.F=Object'))+var.get(u'lt'))+Js(u'/script'))+var.get(u'gt')))
+ var.get(u'iframeDocument').callprop(u'close')
+ var.put(u'createDict', var.get(u'iframeDocument').get(u'F'))
+ while (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1)):
+ var.get(u'createDict').get(var.get(u'PROTOTYPE')).delete(var.get(u'enumBugKeys').get(var.get(u'i')))
+ return var.get(u'createDict')()
+ PyJs_anonymous_1649_._set_name(u'anonymous')
+ var.put(u'createDict', PyJs_anonymous_1649_)
+ @Js
+ def PyJs_create_1650_(O, Properties, this, arguments, var=var):
+ var = Scope({u'this':this, u'create':PyJs_create_1650_, u'Properties':Properties, u'O':O, u'arguments':arguments}, var)
+ var.registers([u'result', u'O', u'Properties'])
+ pass
+ if PyJsStrictNeq(var.get(u'O'),var.get(u"null")):
+ var.get(u'Empty').put(var.get(u'PROTOTYPE'), var.get(u'anObject')(var.get(u'O')))
+ var.put(u'result', var.get(u'Empty').create())
+ var.get(u'Empty').put(var.get(u'PROTOTYPE'), var.get(u"null"))
+ var.get(u'result').put(var.get(u'IE_PROTO'), var.get(u'O'))
+ else:
+ var.put(u'result', var.get(u'createDict')())
+ return (var.get(u'result') if PyJsStrictEq(var.get(u'Properties'),var.get(u'undefined')) else var.get(u'dPs')(var.get(u'result'), var.get(u'Properties')))
+ PyJs_create_1650_._set_name(u'create')
+ var.get(u'module').put(u'exports', (var.get(u'Object').get(u'create') or PyJs_create_1650_))
+PyJs_anonymous_1647_._set_name(u'anonymous')
+PyJs_Object_1651_ = Js({u'./_an-object':Js(132.0),u'./_dom-create':Js(148.0),u'./_enum-bug-keys':Js(149.0),u'./_html':Js(157.0),u'./_object-dps':Js(174.0),u'./_shared-key':Js(190.0)})
+@Js
+def PyJs_anonymous_1652_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'toPrimitive', u'module', u'anObject', u'IE8_DOM_DEFINE', u'dP'])
+ var.put(u'anObject', var.get(u'require')(Js(u'./_an-object')))
+ var.put(u'IE8_DOM_DEFINE', var.get(u'require')(Js(u'./_ie8-dom-define')))
+ var.put(u'toPrimitive', var.get(u'require')(Js(u'./_to-primitive')))
+ var.put(u'dP', var.get(u'Object').get(u'defineProperty'))
+ @Js
+ def PyJs_defineProperty_1653_(O, P, Attributes, this, arguments, var=var):
+ var = Scope({u'this':this, u'O':O, u'P':P, u'arguments':arguments, u'defineProperty':PyJs_defineProperty_1653_, u'Attributes':Attributes}, var)
+ var.registers([u'P', u'O', u'Attributes'])
+ var.get(u'anObject')(var.get(u'O'))
+ var.put(u'P', var.get(u'toPrimitive')(var.get(u'P'), var.get(u'true')))
+ var.get(u'anObject')(var.get(u'Attributes'))
+ if var.get(u'IE8_DOM_DEFINE'):
+ try:
+ return var.get(u'dP')(var.get(u'O'), var.get(u'P'), var.get(u'Attributes'))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_75205354 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ pass
+ finally:
+ if PyJsHolder_65_75205354 is not None:
+ var.own[u'e'] = PyJsHolder_65_75205354
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_75205354
+ if (var.get(u'Attributes').contains(Js(u'get')) or var.get(u'Attributes').contains(Js(u'set'))):
+ PyJsTempException = JsToPyException(var.get(u'TypeError')(Js(u'Accessors not supported!')))
+ raise PyJsTempException
+ if var.get(u'Attributes').contains(Js(u'value')):
+ var.get(u'O').put(var.get(u'P'), var.get(u'Attributes').get(u'value'))
+ return var.get(u'O')
+ PyJs_defineProperty_1653_._set_name(u'defineProperty')
+ var.get(u'exports').put(u'f', (var.get(u'Object').get(u'defineProperty') if var.get(u'require')(Js(u'./_descriptors')) else PyJs_defineProperty_1653_))
+PyJs_anonymous_1652_._set_name(u'anonymous')
+PyJs_Object_1654_ = Js({u'./_an-object':Js(132.0),u'./_descriptors':Js(147.0),u'./_ie8-dom-define':Js(158.0),u'./_to-primitive':Js(198.0)})
+@Js
+def PyJs_anonymous_1655_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'getKeys', u'anObject', u'dP'])
+ var.put(u'dP', var.get(u'require')(Js(u'./_object-dp')))
+ var.put(u'anObject', var.get(u'require')(Js(u'./_an-object')))
+ var.put(u'getKeys', var.get(u'require')(Js(u'./_object-keys')))
+ @Js
+ def PyJs_defineProperties_1656_(O, Properties, this, arguments, var=var):
+ var = Scope({u'this':this, u'defineProperties':PyJs_defineProperties_1656_, u'Properties':Properties, u'O':O, u'arguments':arguments}, var)
+ var.registers([u'P', u'keys', u'O', u'i', u'length', u'Properties'])
+ var.get(u'anObject')(var.get(u'O'))
+ var.put(u'keys', var.get(u'getKeys')(var.get(u'Properties')))
+ var.put(u'length', var.get(u'keys').get(u'length'))
+ var.put(u'i', Js(0.0))
+ while (var.get(u'length')>var.get(u'i')):
+ var.get(u'dP').callprop(u'f', var.get(u'O'), var.put(u'P', var.get(u'keys').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1)))), var.get(u'Properties').get(var.get(u'P')))
+ return var.get(u'O')
+ PyJs_defineProperties_1656_._set_name(u'defineProperties')
+ var.get(u'module').put(u'exports', (var.get(u'Object').get(u'defineProperties') if var.get(u'require')(Js(u'./_descriptors')) else PyJs_defineProperties_1656_))
+PyJs_anonymous_1655_._set_name(u'anonymous')
+PyJs_Object_1657_ = Js({u'./_an-object':Js(132.0),u'./_descriptors':Js(147.0),u'./_object-dp':Js(173.0),u'./_object-keys':Js(181.0)})
+@Js
+def PyJs_anonymous_1658_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'toPrimitive', u'module', u'pIE', u'toIObject', u'IE8_DOM_DEFINE', u'gOPD', u'has', u'createDesc'])
+ var.put(u'pIE', var.get(u'require')(Js(u'./_object-pie')))
+ var.put(u'createDesc', var.get(u'require')(Js(u'./_property-desc')))
+ var.put(u'toIObject', var.get(u'require')(Js(u'./_to-iobject')))
+ var.put(u'toPrimitive', var.get(u'require')(Js(u'./_to-primitive')))
+ var.put(u'has', var.get(u'require')(Js(u'./_has')))
+ var.put(u'IE8_DOM_DEFINE', var.get(u'require')(Js(u'./_ie8-dom-define')))
+ var.put(u'gOPD', var.get(u'Object').get(u'getOwnPropertyDescriptor'))
+ @Js
+ def PyJs_getOwnPropertyDescriptor_1659_(O, P, this, arguments, var=var):
+ var = Scope({u'this':this, u'P':P, u'getOwnPropertyDescriptor':PyJs_getOwnPropertyDescriptor_1659_, u'arguments':arguments, u'O':O}, var)
+ var.registers([u'P', u'O'])
+ var.put(u'O', var.get(u'toIObject')(var.get(u'O')))
+ var.put(u'P', var.get(u'toPrimitive')(var.get(u'P'), var.get(u'true')))
+ if var.get(u'IE8_DOM_DEFINE'):
+ try:
+ return var.get(u'gOPD')(var.get(u'O'), var.get(u'P'))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_6934147 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ pass
+ finally:
+ if PyJsHolder_65_6934147 is not None:
+ var.own[u'e'] = PyJsHolder_65_6934147
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_6934147
+ if var.get(u'has')(var.get(u'O'), var.get(u'P')):
+ return var.get(u'createDesc')(var.get(u'pIE').get(u'f').callprop(u'call', var.get(u'O'), var.get(u'P')).neg(), var.get(u'O').get(var.get(u'P')))
+ PyJs_getOwnPropertyDescriptor_1659_._set_name(u'getOwnPropertyDescriptor')
+ var.get(u'exports').put(u'f', (var.get(u'gOPD') if var.get(u'require')(Js(u'./_descriptors')) else PyJs_getOwnPropertyDescriptor_1659_))
+PyJs_anonymous_1658_._set_name(u'anonymous')
+PyJs_Object_1660_ = Js({u'./_descriptors':Js(147.0),u'./_has':Js(155.0),u'./_ie8-dom-define':Js(158.0),u'./_object-pie':Js(182.0),u'./_property-desc':Js(184.0),u'./_to-iobject':Js(195.0),u'./_to-primitive':Js(198.0)})
+@Js
+def PyJs_anonymous_1661_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'getWindowNames', u'windowNames', u'gOPN', u'toString', u'module', u'toIObject'])
+ var.put(u'toIObject', var.get(u'require')(Js(u'./_to-iobject')))
+ var.put(u'gOPN', var.get(u'require')(Js(u'./_object-gopn')).get(u'f'))
+ PyJs_Object_1662_ = Js({})
+ var.put(u'toString', PyJs_Object_1662_.get(u'toString'))
+ var.put(u'windowNames', (var.get(u'Object').callprop(u'getOwnPropertyNames', var.get(u'window')) if (((var.get(u'window',throw=False).typeof()==Js(u'object')) and var.get(u'window')) and var.get(u'Object').get(u'getOwnPropertyNames')) else Js([])))
+ @Js
+ def PyJs_anonymous_1663_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ try:
+ return var.get(u'gOPN')(var.get(u'it'))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_72290655 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ return var.get(u'windowNames').callprop(u'slice')
+ finally:
+ if PyJsHolder_65_72290655 is not None:
+ var.own[u'e'] = PyJsHolder_65_72290655
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_72290655
+ PyJs_anonymous_1663_._set_name(u'anonymous')
+ var.put(u'getWindowNames', PyJs_anonymous_1663_)
+ @Js
+ def PyJs_getOwnPropertyNames_1664_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'getOwnPropertyNames':PyJs_getOwnPropertyNames_1664_, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return (var.get(u'getWindowNames')(var.get(u'it')) if (var.get(u'windowNames') and (var.get(u'toString').callprop(u'call', var.get(u'it'))==Js(u'[object Window]'))) else var.get(u'gOPN')(var.get(u'toIObject')(var.get(u'it'))))
+ PyJs_getOwnPropertyNames_1664_._set_name(u'getOwnPropertyNames')
+ var.get(u'module').get(u'exports').put(u'f', PyJs_getOwnPropertyNames_1664_)
+PyJs_anonymous_1661_._set_name(u'anonymous')
+PyJs_Object_1665_ = Js({u'./_object-gopn':Js(177.0),u'./_to-iobject':Js(195.0)})
+@Js
+def PyJs_anonymous_1666_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'hiddenKeys', u'require', u'$keys', u'module'])
+ var.put(u'$keys', var.get(u'require')(Js(u'./_object-keys-internal')))
+ var.put(u'hiddenKeys', var.get(u'require')(Js(u'./_enum-bug-keys')).callprop(u'concat', Js(u'length'), Js(u'prototype')))
+ @Js
+ def PyJs_getOwnPropertyNames_1667_(O, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'O':O, u'getOwnPropertyNames':PyJs_getOwnPropertyNames_1667_}, var)
+ var.registers([u'O'])
+ return var.get(u'$keys')(var.get(u'O'), var.get(u'hiddenKeys'))
+ PyJs_getOwnPropertyNames_1667_._set_name(u'getOwnPropertyNames')
+ var.get(u'exports').put(u'f', (var.get(u'Object').get(u'getOwnPropertyNames') or PyJs_getOwnPropertyNames_1667_))
+PyJs_anonymous_1666_._set_name(u'anonymous')
+PyJs_Object_1668_ = Js({u'./_enum-bug-keys':Js(149.0),u'./_object-keys-internal':Js(180.0)})
+@Js
+def PyJs_anonymous_1669_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'exports').put(u'f', var.get(u'Object').get(u'getOwnPropertySymbols'))
+PyJs_anonymous_1669_._set_name(u'anonymous')
+PyJs_Object_1670_ = Js({})
+@Js
+def PyJs_anonymous_1671_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'toObject', u'module', u'IE_PROTO', u'ObjectProto', u'has', u'require'])
+ var.put(u'has', var.get(u'require')(Js(u'./_has')))
+ var.put(u'toObject', var.get(u'require')(Js(u'./_to-object')))
+ var.put(u'IE_PROTO', var.get(u'require')(Js(u'./_shared-key'))(Js(u'IE_PROTO')))
+ var.put(u'ObjectProto', var.get(u'Object').get(u'prototype'))
+ @Js
+ def PyJs_anonymous_1672_(O, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'O':O}, var)
+ var.registers([u'O'])
+ var.put(u'O', var.get(u'toObject')(var.get(u'O')))
+ if var.get(u'has')(var.get(u'O'), var.get(u'IE_PROTO')):
+ return var.get(u'O').get(var.get(u'IE_PROTO'))
+ if ((var.get(u'O').get(u'constructor').typeof()==Js(u'function')) and var.get(u'O').instanceof(var.get(u'O').get(u'constructor'))):
+ return var.get(u'O').get(u'constructor').get(u'prototype')
+ return (var.get(u'ObjectProto') if var.get(u'O').instanceof(var.get(u'Object')) else var.get(u"null"))
+ PyJs_anonymous_1672_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', (var.get(u'Object').get(u'getPrototypeOf') or PyJs_anonymous_1672_))
+PyJs_anonymous_1671_._set_name(u'anonymous')
+PyJs_Object_1673_ = Js({u'./_has':Js(155.0),u'./_shared-key':Js(190.0),u'./_to-object':Js(197.0)})
+@Js
+def PyJs_anonymous_1674_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'IE_PROTO', u'toIObject', u'arrayIndexOf', u'has'])
+ var.put(u'has', var.get(u'require')(Js(u'./_has')))
+ var.put(u'toIObject', var.get(u'require')(Js(u'./_to-iobject')))
+ var.put(u'arrayIndexOf', var.get(u'require')(Js(u'./_array-includes'))(Js(False)))
+ var.put(u'IE_PROTO', var.get(u'require')(Js(u'./_shared-key'))(Js(u'IE_PROTO')))
+ @Js
+ def PyJs_anonymous_1675_(object, names, this, arguments, var=var):
+ var = Scope({u'this':this, u'object':object, u'names':names, u'arguments':arguments}, var)
+ var.registers([u'i', u'object', u'O', u'result', u'key', u'names'])
+ var.put(u'O', var.get(u'toIObject')(var.get(u'object')))
+ var.put(u'i', Js(0.0))
+ var.put(u'result', Js([]))
+ for PyJsTemp in var.get(u'O'):
+ var.put(u'key', PyJsTemp)
+ if (var.get(u'key')!=var.get(u'IE_PROTO')):
+ (var.get(u'has')(var.get(u'O'), var.get(u'key')) and var.get(u'result').callprop(u'push', var.get(u'key')))
+ while (var.get(u'names').get(u'length')>var.get(u'i')):
+ if var.get(u'has')(var.get(u'O'), var.put(u'key', var.get(u'names').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))):
+ ((~var.get(u'arrayIndexOf')(var.get(u'result'), var.get(u'key'))) or var.get(u'result').callprop(u'push', var.get(u'key')))
+ return var.get(u'result')
+ PyJs_anonymous_1675_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1675_)
+PyJs_anonymous_1674_._set_name(u'anonymous')
+PyJs_Object_1676_ = Js({u'./_array-includes':Js(134.0),u'./_has':Js(155.0),u'./_shared-key':Js(190.0),u'./_to-iobject':Js(195.0)})
+@Js
+def PyJs_anonymous_1677_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'enumBugKeys', u'$keys', u'module'])
+ var.put(u'$keys', var.get(u'require')(Js(u'./_object-keys-internal')))
+ var.put(u'enumBugKeys', var.get(u'require')(Js(u'./_enum-bug-keys')))
+ @Js
+ def PyJs_keys_1678_(O, this, arguments, var=var):
+ var = Scope({u'this':this, u'keys':PyJs_keys_1678_, u'arguments':arguments, u'O':O}, var)
+ var.registers([u'O'])
+ return var.get(u'$keys')(var.get(u'O'), var.get(u'enumBugKeys'))
+ PyJs_keys_1678_._set_name(u'keys')
+ var.get(u'module').put(u'exports', (var.get(u'Object').get(u'keys') or PyJs_keys_1678_))
+PyJs_anonymous_1677_._set_name(u'anonymous')
+PyJs_Object_1679_ = Js({u'./_enum-bug-keys':Js(149.0),u'./_object-keys-internal':Js(180.0)})
+@Js
+def PyJs_anonymous_1680_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1681_ = Js({})
+ var.get(u'exports').put(u'f', PyJs_Object_1681_.get(u'propertyIsEnumerable'))
+PyJs_anonymous_1680_._set_name(u'anonymous')
+PyJs_Object_1682_ = Js({})
+@Js
+def PyJs_anonymous_1683_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'core', u'fails', u'$export', u'require', u'exports', u'module'])
+ var.put(u'$export', var.get(u'require')(Js(u'./_export')))
+ var.put(u'core', var.get(u'require')(Js(u'./_core')))
+ var.put(u'fails', var.get(u'require')(Js(u'./_fails')))
+ @Js
+ def PyJs_anonymous_1684_(KEY, PyJsArg_65786563_, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'KEY':KEY, u'exec':PyJsArg_65786563_}, var)
+ var.registers([u'KEY', u'exp', u'fn', u'exec'])
+ PyJs_Object_1685_ = Js({})
+ var.put(u'fn', ((var.get(u'core').get(u'Object') or PyJs_Object_1685_).get(var.get(u'KEY')) or var.get(u'Object').get(var.get(u'KEY'))))
+ PyJs_Object_1686_ = Js({})
+ var.put(u'exp', PyJs_Object_1686_)
+ var.get(u'exp').put(var.get(u'KEY'), var.get(u'exec')(var.get(u'fn')))
+ @Js
+ def PyJs_anonymous_1687_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'fn')(Js(1.0))
+ PyJs_anonymous_1687_._set_name(u'anonymous')
+ var.get(u'$export')((var.get(u'$export').get(u'S')+(var.get(u'$export').get(u'F')*var.get(u'fails')(PyJs_anonymous_1687_))), Js(u'Object'), var.get(u'exp'))
+ PyJs_anonymous_1684_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1684_)
+PyJs_anonymous_1683_._set_name(u'anonymous')
+PyJs_Object_1688_ = Js({u'./_core':Js(144.0),u'./_export':Js(151.0),u'./_fails':Js(152.0)})
+@Js
+def PyJs_anonymous_1689_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_1690_(bitmap, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value, u'bitmap':bitmap}, var)
+ var.registers([u'value', u'bitmap'])
+ PyJs_Object_1691_ = Js({u'enumerable':(var.get(u'bitmap')&Js(1.0)).neg(),u'configurable':(var.get(u'bitmap')&Js(2.0)).neg(),u'writable':(var.get(u'bitmap')&Js(4.0)).neg(),u'value':var.get(u'value')})
+ return PyJs_Object_1691_
+ PyJs_anonymous_1690_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1690_)
+PyJs_anonymous_1689_._set_name(u'anonymous')
+PyJs_Object_1692_ = Js({})
+@Js
+def PyJs_anonymous_1693_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'hide', u'exports', u'module'])
+ var.put(u'hide', var.get(u'require')(Js(u'./_hide')))
+ @Js
+ def PyJs_anonymous_1694_(target, src, safe, this, arguments, var=var):
+ var = Scope({u'this':this, u'src':src, u'safe':safe, u'target':target, u'arguments':arguments}, var)
+ var.registers([u'src', u'safe', u'target', u'key'])
+ for PyJsTemp in var.get(u'src'):
+ var.put(u'key', PyJsTemp)
+ if (var.get(u'safe') and var.get(u'target').get(var.get(u'key'))):
+ var.get(u'target').put(var.get(u'key'), var.get(u'src').get(var.get(u'key')))
+ else:
+ var.get(u'hide')(var.get(u'target'), var.get(u'key'), var.get(u'src').get(var.get(u'key')))
+ return var.get(u'target')
+ PyJs_anonymous_1694_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1694_)
+PyJs_anonymous_1693_._set_name(u'anonymous')
+PyJs_Object_1695_ = Js({u'./_hide':Js(156.0)})
+@Js
+def PyJs_anonymous_1696_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'./_hide')))
+PyJs_anonymous_1696_._set_name(u'anonymous')
+PyJs_Object_1697_ = Js({u'./_hide':Js(156.0)})
+@Js
+def PyJs_anonymous_1698_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'check', u'anObject', u'isObject'])
+ var.put(u'isObject', var.get(u'require')(Js(u'./_is-object')))
+ var.put(u'anObject', var.get(u'require')(Js(u'./_an-object')))
+ @Js
+ def PyJs_anonymous_1699_(O, proto, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'O':O, u'proto':proto}, var)
+ var.registers([u'O', u'proto'])
+ var.get(u'anObject')(var.get(u'O'))
+ if (var.get(u'isObject')(var.get(u'proto')).neg() and PyJsStrictNeq(var.get(u'proto'),var.get(u"null"))):
+ PyJsTempException = JsToPyException(var.get(u'TypeError')((var.get(u'proto')+Js(u": can't set as prototype!"))))
+ raise PyJsTempException
+ PyJs_anonymous_1699_._set_name(u'anonymous')
+ var.put(u'check', PyJs_anonymous_1699_)
+ PyJs_Object_1701_ = Js({})
+ @Js
+ def PyJs_anonymous_1702_(test, buggy, set, this, arguments, var=var):
+ var = Scope({u'test':test, u'this':this, u'buggy':buggy, u'set':set, u'arguments':arguments}, var)
+ var.registers([u'test', u'buggy', u'set'])
+ try:
+ var.put(u'set', var.get(u'require')(Js(u'./_ctx'))(var.get(u'Function').get(u'call'), var.get(u'require')(Js(u'./_object-gopd')).callprop(u'f', var.get(u'Object').get(u'prototype'), Js(u'__proto__')).get(u'set'), Js(2.0)))
+ var.get(u'set')(var.get(u'test'), Js([]))
+ var.put(u'buggy', var.get(u'test').instanceof(var.get(u'Array')).neg())
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_30361003 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ var.put(u'buggy', var.get(u'true'))
+ finally:
+ if PyJsHolder_65_30361003 is not None:
+ var.own[u'e'] = PyJsHolder_65_30361003
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_30361003
+ @Js
+ def PyJs_setPrototypeOf_1703_(O, proto, this, arguments, var=var):
+ var = Scope({u'this':this, u'setPrototypeOf':PyJs_setPrototypeOf_1703_, u'arguments':arguments, u'O':O, u'proto':proto}, var)
+ var.registers([u'O', u'proto'])
+ var.get(u'check')(var.get(u'O'), var.get(u'proto'))
+ if var.get(u'buggy'):
+ var.get(u'O').put(u'__proto__', var.get(u'proto'))
+ else:
+ var.get(u'set')(var.get(u'O'), var.get(u'proto'))
+ return var.get(u'O')
+ PyJs_setPrototypeOf_1703_._set_name(u'setPrototypeOf')
+ return PyJs_setPrototypeOf_1703_
+ PyJs_anonymous_1702_._set_name(u'anonymous')
+ PyJs_Object_1704_ = Js({})
+ PyJs_Object_1700_ = Js({u'set':(var.get(u'Object').get(u'setPrototypeOf') or (PyJs_anonymous_1702_(PyJs_Object_1701_, Js(False)) if PyJs_Object_1704_.contains(Js(u'__proto__')) else var.get(u'undefined'))),u'check':var.get(u'check')})
+ var.get(u'module').put(u'exports', PyJs_Object_1700_)
+PyJs_anonymous_1698_._set_name(u'anonymous')
+PyJs_Object_1705_ = Js({u'./_an-object':Js(132.0),u'./_ctx':Js(145.0),u'./_is-object':Js(162.0),u'./_object-gopd':Js(175.0)})
+@Js
+def PyJs_anonymous_1706_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'core', u'exports', u'DESCRIPTORS', u'require', u'global', u'module', u'SPECIES', u'dP'])
+ Js(u'use strict')
+ var.put(u'global', var.get(u'require')(Js(u'./_global')))
+ var.put(u'core', var.get(u'require')(Js(u'./_core')))
+ var.put(u'dP', var.get(u'require')(Js(u'./_object-dp')))
+ var.put(u'DESCRIPTORS', var.get(u'require')(Js(u'./_descriptors')))
+ var.put(u'SPECIES', var.get(u'require')(Js(u'./_wks'))(Js(u'species')))
+ @Js
+ def PyJs_anonymous_1707_(KEY, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'KEY':KEY}, var)
+ var.registers([u'C', u'KEY'])
+ var.put(u'C', (var.get(u'core').get(var.get(u'KEY')) if (var.get(u'core').get(var.get(u'KEY')).typeof()==Js(u'function')) else var.get(u'global').get(var.get(u'KEY'))))
+ if ((var.get(u'DESCRIPTORS') and var.get(u'C')) and var.get(u'C').get(var.get(u'SPECIES')).neg()):
+ @Js
+ def PyJs_anonymous_1709_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this")
+ PyJs_anonymous_1709_._set_name(u'anonymous')
+ PyJs_Object_1708_ = Js({u'configurable':var.get(u'true'),u'get':PyJs_anonymous_1709_})
+ var.get(u'dP').callprop(u'f', var.get(u'C'), var.get(u'SPECIES'), PyJs_Object_1708_)
+ PyJs_anonymous_1707_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1707_)
+PyJs_anonymous_1706_._set_name(u'anonymous')
+PyJs_Object_1710_ = Js({u'./_core':Js(144.0),u'./_descriptors':Js(147.0),u'./_global':Js(154.0),u'./_object-dp':Js(173.0),u'./_wks':Js(202.0)})
+@Js
+def PyJs_anonymous_1711_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'TAG', u'has', u'def'])
+ var.put(u'def', var.get(u'require')(Js(u'./_object-dp')).get(u'f'))
+ var.put(u'has', var.get(u'require')(Js(u'./_has')))
+ var.put(u'TAG', var.get(u'require')(Js(u'./_wks'))(Js(u'toStringTag')))
+ @Js
+ def PyJs_anonymous_1712_(it, tag, stat, this, arguments, var=var):
+ var = Scope({u'this':this, u'stat':stat, u'tag':tag, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'stat', u'tag', u'it'])
+ if (var.get(u'it') and var.get(u'has')(var.put(u'it', (var.get(u'it') if var.get(u'stat') else var.get(u'it').get(u'prototype'))), var.get(u'TAG')).neg()):
+ PyJs_Object_1713_ = Js({u'configurable':var.get(u'true'),u'value':var.get(u'tag')})
+ var.get(u'def')(var.get(u'it'), var.get(u'TAG'), PyJs_Object_1713_)
+ PyJs_anonymous_1712_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1712_)
+PyJs_anonymous_1711_._set_name(u'anonymous')
+PyJs_Object_1714_ = Js({u'./_has':Js(155.0),u'./_object-dp':Js(173.0),u'./_wks':Js(202.0)})
+@Js
+def PyJs_anonymous_1715_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'shared', u'require', u'exports', u'uid', u'module'])
+ var.put(u'shared', var.get(u'require')(Js(u'./_shared'))(Js(u'keys')))
+ var.put(u'uid', var.get(u'require')(Js(u'./_uid')))
+ @Js
+ def PyJs_anonymous_1716_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ return (var.get(u'shared').get(var.get(u'key')) or var.get(u'shared').put(var.get(u'key'), var.get(u'uid')(var.get(u'key'))))
+ PyJs_anonymous_1716_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1716_)
+PyJs_anonymous_1715_._set_name(u'anonymous')
+PyJs_Object_1717_ = Js({u'./_shared':Js(191.0),u'./_uid':Js(199.0)})
+@Js
+def PyJs_anonymous_1718_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'global', u'module', u'SHARED', u'store'])
+ var.put(u'global', var.get(u'require')(Js(u'./_global')))
+ var.put(u'SHARED', Js(u'__core-js_shared__'))
+ PyJs_Object_1719_ = Js({})
+ var.put(u'store', (var.get(u'global').get(var.get(u'SHARED')) or var.get(u'global').put(var.get(u'SHARED'), PyJs_Object_1719_)))
+ @Js
+ def PyJs_anonymous_1720_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ PyJs_Object_1721_ = Js({})
+ return (var.get(u'store').get(var.get(u'key')) or var.get(u'store').put(var.get(u'key'), PyJs_Object_1721_))
+ PyJs_anonymous_1720_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1720_)
+PyJs_anonymous_1718_._set_name(u'anonymous')
+PyJs_Object_1722_ = Js({u'./_global':Js(154.0)})
+@Js
+def PyJs_anonymous_1723_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'defined', u'toInteger', u'exports', u'require', u'module'])
+ var.put(u'toInteger', var.get(u'require')(Js(u'./_to-integer')))
+ var.put(u'defined', var.get(u'require')(Js(u'./_defined')))
+ @Js
+ def PyJs_anonymous_1724_(TO_STRING, this, arguments, var=var):
+ var = Scope({u'TO_STRING':TO_STRING, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'TO_STRING'])
+ @Js
+ def PyJs_anonymous_1725_(that, pos, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'pos':pos, u'that':that}, var)
+ var.registers([u'a', u'b', u'that', u'i', u'l', u'pos', u's'])
+ var.put(u's', var.get(u'String')(var.get(u'defined')(var.get(u'that'))))
+ var.put(u'i', var.get(u'toInteger')(var.get(u'pos')))
+ var.put(u'l', var.get(u's').get(u'length'))
+ if ((var.get(u'i')=var.get(u'l'))):
+ return (Js(u'') if var.get(u'TO_STRING') else var.get(u'undefined'))
+ var.put(u'a', var.get(u's').callprop(u'charCodeAt', var.get(u'i')))
+ def PyJs_LONG_1726_(var=var):
+ return ((var.get(u's').callprop(u'charAt', var.get(u'i')) if var.get(u'TO_STRING') else var.get(u'a')) if (((((var.get(u'a')Js(56319))) or PyJsStrictEq((var.get(u'i')+Js(1.0)),var.get(u'l'))) or (var.put(u'b', var.get(u's').callprop(u'charCodeAt', (var.get(u'i')+Js(1.0))))Js(57343))) else (var.get(u's').callprop(u'slice', var.get(u'i'), (var.get(u'i')+Js(2.0))) if var.get(u'TO_STRING') else ((((var.get(u'a')-Js(55296))<Js(0.0)) else var.get(u'ceil'))(var.get(u'it')))
+ PyJs_anonymous_1732_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1732_)
+PyJs_anonymous_1731_._set_name(u'anonymous')
+PyJs_Object_1733_ = Js({})
+@Js
+def PyJs_anonymous_1734_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'defined', u'require', u'exports', u'module', u'IObject'])
+ var.put(u'IObject', var.get(u'require')(Js(u'./_iobject')))
+ var.put(u'defined', var.get(u'require')(Js(u'./_defined')))
+ @Js
+ def PyJs_anonymous_1735_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return var.get(u'IObject')(var.get(u'defined')(var.get(u'it')))
+ PyJs_anonymous_1735_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1735_)
+PyJs_anonymous_1734_._set_name(u'anonymous')
+PyJs_Object_1736_ = Js({u'./_defined':Js(146.0),u'./_iobject':Js(159.0)})
+@Js
+def PyJs_anonymous_1737_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'toInteger', u'exports', u'require', u'module', u'min'])
+ var.put(u'toInteger', var.get(u'require')(Js(u'./_to-integer')))
+ var.put(u'min', var.get(u'Math').get(u'min'))
+ @Js
+ def PyJs_anonymous_1738_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return (var.get(u'min')(var.get(u'toInteger')(var.get(u'it')), Js(9007199254740991)) if (var.get(u'it')>Js(0.0)) else Js(0.0))
+ PyJs_anonymous_1738_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1738_)
+PyJs_anonymous_1737_._set_name(u'anonymous')
+PyJs_Object_1739_ = Js({u'./_to-integer':Js(194.0)})
+@Js
+def PyJs_anonymous_1740_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'defined', u'require', u'exports', u'module'])
+ var.put(u'defined', var.get(u'require')(Js(u'./_defined')))
+ @Js
+ def PyJs_anonymous_1741_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return var.get(u'Object')(var.get(u'defined')(var.get(u'it')))
+ PyJs_anonymous_1741_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1741_)
+PyJs_anonymous_1740_._set_name(u'anonymous')
+PyJs_Object_1742_ = Js({u'./_defined':Js(146.0)})
+@Js
+def PyJs_anonymous_1743_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'isObject', u'module'])
+ var.put(u'isObject', var.get(u'require')(Js(u'./_is-object')))
+ @Js
+ def PyJs_anonymous_1744_(it, S, this, arguments, var=var):
+ var = Scope({u'this':this, u'S':S, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'S', u'val', u'fn', u'it'])
+ if var.get(u'isObject')(var.get(u'it')).neg():
+ return var.get(u'it')
+ pass
+ if ((var.get(u'S') and (var.put(u'fn', var.get(u'it').get(u'toString')).typeof()==Js(u'function'))) and var.get(u'isObject')(var.put(u'val', var.get(u'fn').callprop(u'call', var.get(u'it')))).neg()):
+ return var.get(u'val')
+ if ((var.put(u'fn', var.get(u'it').get(u'valueOf')).typeof()==Js(u'function')) and var.get(u'isObject')(var.put(u'val', var.get(u'fn').callprop(u'call', var.get(u'it')))).neg()):
+ return var.get(u'val')
+ if ((var.get(u'S').neg() and (var.put(u'fn', var.get(u'it').get(u'toString')).typeof()==Js(u'function'))) and var.get(u'isObject')(var.put(u'val', var.get(u'fn').callprop(u'call', var.get(u'it')))).neg()):
+ return var.get(u'val')
+ PyJsTempException = JsToPyException(var.get(u'TypeError')(Js(u"Can't convert object to primitive value")))
+ raise PyJsTempException
+ PyJs_anonymous_1744_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1744_)
+PyJs_anonymous_1743_._set_name(u'anonymous')
+PyJs_Object_1745_ = Js({u'./_is-object':Js(162.0)})
+@Js
+def PyJs_anonymous_1746_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'px', u'require', u'id', u'module'])
+ var.put(u'id', Js(0.0))
+ var.put(u'px', var.get(u'Math').callprop(u'random'))
+ @Js
+ def PyJs_anonymous_1747_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ return Js(u'Symbol(').callprop(u'concat', (Js(u'') if PyJsStrictEq(var.get(u'key'),var.get(u'undefined')) else var.get(u'key')), Js(u')_'), (var.put(u'id',Js(var.get(u'id').to_number())+Js(1))+var.get(u'px')).callprop(u'toString', Js(36.0)))
+ PyJs_anonymous_1747_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1747_)
+PyJs_anonymous_1746_._set_name(u'anonymous')
+PyJs_Object_1748_ = Js({})
+@Js
+def PyJs_anonymous_1749_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'core', u'exports', u'wksExt', u'require', u'global', u'LIBRARY', u'module', u'defineProperty'])
+ var.put(u'global', var.get(u'require')(Js(u'./_global')))
+ var.put(u'core', var.get(u'require')(Js(u'./_core')))
+ var.put(u'LIBRARY', var.get(u'require')(Js(u'./_library')))
+ var.put(u'wksExt', var.get(u'require')(Js(u'./_wks-ext')))
+ var.put(u'defineProperty', var.get(u'require')(Js(u'./_object-dp')).get(u'f'))
+ @Js
+ def PyJs_anonymous_1750_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name', u'$Symbol'])
+ PyJs_Object_1751_ = Js({})
+ PyJs_Object_1752_ = Js({})
+ var.put(u'$Symbol', (var.get(u'core').get(u'Symbol') or var.get(u'core').put(u'Symbol', (PyJs_Object_1751_ if var.get(u'LIBRARY') else (var.get(u'global').get(u'Symbol') or PyJs_Object_1752_)))))
+ if ((var.get(u'name').callprop(u'charAt', Js(0.0))!=Js(u'_')) and var.get(u'$Symbol').contains(var.get(u'name')).neg()):
+ PyJs_Object_1753_ = Js({u'value':var.get(u'wksExt').callprop(u'f', var.get(u'name'))})
+ var.get(u'defineProperty')(var.get(u'$Symbol'), var.get(u'name'), PyJs_Object_1753_)
+ PyJs_anonymous_1750_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_1750_)
+PyJs_anonymous_1749_._set_name(u'anonymous')
+PyJs_Object_1754_ = Js({u'./_core':Js(144.0),u'./_global':Js(154.0),u'./_library':Js(169.0),u'./_object-dp':Js(173.0),u'./_wks-ext':Js(201.0)})
+@Js
+def PyJs_anonymous_1755_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'exports').put(u'f', var.get(u'require')(Js(u'./_wks')))
+PyJs_anonymous_1755_._set_name(u'anonymous')
+PyJs_Object_1756_ = Js({u'./_wks':Js(202.0)})
+@Js
+def PyJs_anonymous_1757_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'uid', u'Symbol', u'module', u'$exports', u'require', u'store', u'USE_SYMBOL'])
+ var.put(u'store', var.get(u'require')(Js(u'./_shared'))(Js(u'wks')))
+ var.put(u'uid', var.get(u'require')(Js(u'./_uid')))
+ var.put(u'Symbol', var.get(u'require')(Js(u'./_global')).get(u'Symbol'))
+ var.put(u'USE_SYMBOL', (var.get(u'Symbol',throw=False).typeof()==Js(u'function')))
+ @Js
+ def PyJs_anonymous_1758_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return (var.get(u'store').get(var.get(u'name')) or var.get(u'store').put(var.get(u'name'), ((var.get(u'USE_SYMBOL') and var.get(u'Symbol').get(var.get(u'name'))) or (var.get(u'Symbol') if var.get(u'USE_SYMBOL') else var.get(u'uid'))((Js(u'Symbol.')+var.get(u'name'))))))
+ PyJs_anonymous_1758_._set_name(u'anonymous')
+ var.put(u'$exports', var.get(u'module').put(u'exports', PyJs_anonymous_1758_))
+ var.get(u'$exports').put(u'store', var.get(u'store'))
+PyJs_anonymous_1757_._set_name(u'anonymous')
+PyJs_Object_1759_ = Js({u'./_global':Js(154.0),u'./_shared':Js(191.0),u'./_uid':Js(199.0)})
+@Js
+def PyJs_anonymous_1760_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'ITERATOR', u'require', u'module', u'Iterators', u'classof'])
+ var.put(u'classof', var.get(u'require')(Js(u'./_classof')))
+ var.put(u'ITERATOR', var.get(u'require')(Js(u'./_wks'))(Js(u'iterator')))
+ var.put(u'Iterators', var.get(u'require')(Js(u'./_iterators')))
+ @Js
+ def PyJs_anonymous_1761_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ if (var.get(u'it')!=var.get(u'undefined')):
+ return ((var.get(u'it').get(var.get(u'ITERATOR')) or var.get(u'it').get(u'@@iterator')) or var.get(u'Iterators').get(var.get(u'classof')(var.get(u'it'))))
+ PyJs_anonymous_1761_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'./_core')).put(u'getIteratorMethod', PyJs_anonymous_1761_))
+PyJs_anonymous_1760_._set_name(u'anonymous')
+PyJs_Object_1762_ = Js({u'./_classof':Js(138.0),u'./_core':Js(144.0),u'./_iterators':Js(167.0),u'./_wks':Js(202.0)})
+@Js
+def PyJs_anonymous_1763_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'anObject', u'exports', u'module', u'get'])
+ var.put(u'anObject', var.get(u'require')(Js(u'./_an-object')))
+ var.put(u'get', var.get(u'require')(Js(u'./core.get-iterator-method')))
+ @Js
+ def PyJs_anonymous_1764_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'iterFn', u'it'])
+ var.put(u'iterFn', var.get(u'get')(var.get(u'it')))
+ if (var.get(u'iterFn',throw=False).typeof()!=Js(u'function')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError')((var.get(u'it')+Js(u' is not iterable!'))))
+ raise PyJsTempException
+ return var.get(u'anObject')(var.get(u'iterFn').callprop(u'call', var.get(u'it')))
+ PyJs_anonymous_1764_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'./_core')).put(u'getIterator', PyJs_anonymous_1764_))
+PyJs_anonymous_1763_._set_name(u'anonymous')
+PyJs_Object_1765_ = Js({u'./_an-object':Js(132.0),u'./_core':Js(144.0),u'./core.get-iterator-method':Js(203.0)})
+@Js
+def PyJs_anonymous_1766_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'addToUnscopables', u'Iterators', u'step', u'toIObject'])
+ Js(u'use strict')
+ var.put(u'addToUnscopables', var.get(u'require')(Js(u'./_add-to-unscopables')))
+ var.put(u'step', var.get(u'require')(Js(u'./_iter-step')))
+ var.put(u'Iterators', var.get(u'require')(Js(u'./_iterators')))
+ var.put(u'toIObject', var.get(u'require')(Js(u'./_to-iobject')))
+ @Js
+ def PyJs_anonymous_1767_(iterated, kind, this, arguments, var=var):
+ var = Scope({u'this':this, u'kind':kind, u'arguments':arguments, u'iterated':iterated}, var)
+ var.registers([u'kind', u'iterated'])
+ var.get(u"this").put(u'_t', var.get(u'toIObject')(var.get(u'iterated')))
+ var.get(u"this").put(u'_i', Js(0.0))
+ var.get(u"this").put(u'_k', var.get(u'kind'))
+ PyJs_anonymous_1767_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1768_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'index', u'kind', u'O'])
+ var.put(u'O', var.get(u"this").get(u'_t'))
+ var.put(u'kind', var.get(u"this").get(u'_k'))
+ var.put(u'index', (var.get(u"this").put(u'_i',Js(var.get(u"this").get(u'_i').to_number())+Js(1))-Js(1)))
+ if (var.get(u'O').neg() or (var.get(u'index')>=var.get(u'O').get(u'length'))):
+ var.get(u"this").put(u'_t', var.get(u'undefined'))
+ return var.get(u'step')(Js(1.0))
+ if (var.get(u'kind')==Js(u'keys')):
+ return var.get(u'step')(Js(0.0), var.get(u'index'))
+ if (var.get(u'kind')==Js(u'values')):
+ return var.get(u'step')(Js(0.0), var.get(u'O').get(var.get(u'index')))
+ return var.get(u'step')(Js(0.0), Js([var.get(u'index'), var.get(u'O').get(var.get(u'index'))]))
+ PyJs_anonymous_1768_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'./_iter-define'))(var.get(u'Array'), Js(u'Array'), PyJs_anonymous_1767_, PyJs_anonymous_1768_, Js(u'values')))
+ var.get(u'Iterators').put(u'Arguments', var.get(u'Iterators').get(u'Array'))
+ var.get(u'addToUnscopables')(Js(u'keys'))
+ var.get(u'addToUnscopables')(Js(u'values'))
+ var.get(u'addToUnscopables')(Js(u'entries'))
+PyJs_anonymous_1766_._set_name(u'anonymous')
+PyJs_Object_1769_ = Js({u'./_add-to-unscopables':Js(130.0),u'./_iter-define':Js(165.0),u'./_iter-step':Js(166.0),u'./_iterators':Js(167.0),u'./_to-iobject':Js(195.0)})
+@Js
+def PyJs_anonymous_1770_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'strong', u'exports', u'module'])
+ Js(u'use strict')
+ var.put(u'strong', var.get(u'require')(Js(u'./_collection-strong')))
+ @Js
+ def PyJs_anonymous_1771_(get, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':get}, var)
+ var.registers([u'get'])
+ @Js
+ def PyJs_Map_1772_(this, arguments, var=var):
+ var = Scope({u'this':this, u'Map':PyJs_Map_1772_, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'get')(var.get(u"this"), (var.get(u'arguments').get(u'0') if (var.get(u'arguments').get(u'length')>Js(0.0)) else var.get(u'undefined')))
+ PyJs_Map_1772_._set_name(u'Map')
+ return PyJs_Map_1772_
+ PyJs_anonymous_1771_._set_name(u'anonymous')
+ @Js
+ def PyJs_get_1774_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key, u'get':PyJs_get_1774_}, var)
+ var.registers([u'entry', u'key'])
+ var.put(u'entry', var.get(u'strong').callprop(u'getEntry', var.get(u"this"), var.get(u'key')))
+ return (var.get(u'entry') and var.get(u'entry').get(u'v'))
+ PyJs_get_1774_._set_name(u'get')
+ @Js
+ def PyJs_set_1775_(key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'set':PyJs_set_1775_, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'value', u'key'])
+ return var.get(u'strong').callprop(u'def', var.get(u"this"), (Js(0.0) if PyJsStrictEq(var.get(u'key'),Js(0.0)) else var.get(u'key')), var.get(u'value'))
+ PyJs_set_1775_._set_name(u'set')
+ PyJs_Object_1773_ = Js({u'get':PyJs_get_1774_,u'set':PyJs_set_1775_})
+ var.get(u'module').put(u'exports', var.get(u'require')(Js(u'./_collection'))(Js(u'Map'), PyJs_anonymous_1771_, PyJs_Object_1773_, var.get(u'strong'), var.get(u'true')))
+PyJs_anonymous_1770_._set_name(u'anonymous')
+PyJs_Object_1776_ = Js({u'./_collection':Js(143.0),u'./_collection-strong':Js(140.0)})
+@Js
+def PyJs_anonymous_1777_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'$export', u'require', u'exports', u'module'])
+ var.put(u'$export', var.get(u'require')(Js(u'./_export')))
+ PyJs_Object_1778_ = Js({u'MAX_SAFE_INTEGER':Js(9007199254740991)})
+ var.get(u'$export')(var.get(u'$export').get(u'S'), Js(u'Number'), PyJs_Object_1778_)
+PyJs_anonymous_1777_._set_name(u'anonymous')
+PyJs_Object_1779_ = Js({u'./_export':Js(151.0)})
+@Js
+def PyJs_anonymous_1780_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'$export', u'require', u'exports', u'module'])
+ var.put(u'$export', var.get(u'require')(Js(u'./_export')))
+ PyJs_Object_1781_ = Js({u'assign':var.get(u'require')(Js(u'./_object-assign'))})
+ var.get(u'$export')((var.get(u'$export').get(u'S')+var.get(u'$export').get(u'F')), Js(u'Object'), PyJs_Object_1781_)
+PyJs_anonymous_1780_._set_name(u'anonymous')
+PyJs_Object_1782_ = Js({u'./_export':Js(151.0),u'./_object-assign':Js(171.0)})
+@Js
+def PyJs_anonymous_1783_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'$export', u'require', u'exports', u'module'])
+ var.put(u'$export', var.get(u'require')(Js(u'./_export')))
+ PyJs_Object_1784_ = Js({u'create':var.get(u'require')(Js(u'./_object-create'))})
+ var.get(u'$export')(var.get(u'$export').get(u'S'), Js(u'Object'), PyJs_Object_1784_)
+PyJs_anonymous_1783_._set_name(u'anonymous')
+PyJs_Object_1785_ = Js({u'./_export':Js(151.0),u'./_object-create':Js(172.0)})
+@Js
+def PyJs_anonymous_1786_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'toObject', u'require', u'$keys', u'module'])
+ var.put(u'toObject', var.get(u'require')(Js(u'./_to-object')))
+ var.put(u'$keys', var.get(u'require')(Js(u'./_object-keys')))
+ @Js
+ def PyJs_anonymous_1787_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_keys_1788_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'keys':PyJs_keys_1788_, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return var.get(u'$keys')(var.get(u'toObject')(var.get(u'it')))
+ PyJs_keys_1788_._set_name(u'keys')
+ return PyJs_keys_1788_
+ PyJs_anonymous_1787_._set_name(u'anonymous')
+ var.get(u'require')(Js(u'./_object-sap'))(Js(u'keys'), PyJs_anonymous_1787_)
+PyJs_anonymous_1786_._set_name(u'anonymous')
+PyJs_Object_1789_ = Js({u'./_object-keys':Js(181.0),u'./_object-sap':Js(183.0),u'./_to-object':Js(197.0)})
+@Js
+def PyJs_anonymous_1790_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'$export', u'require', u'exports', u'module'])
+ var.put(u'$export', var.get(u'require')(Js(u'./_export')))
+ PyJs_Object_1791_ = Js({u'setPrototypeOf':var.get(u'require')(Js(u'./_set-proto')).get(u'set')})
+ var.get(u'$export')(var.get(u'$export').get(u'S'), Js(u'Object'), PyJs_Object_1791_)
+PyJs_anonymous_1790_._set_name(u'anonymous')
+PyJs_Object_1792_ = Js({u'./_export':Js(151.0),u'./_set-proto':Js(187.0)})
+@Js
+def PyJs_anonymous_1793_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ pass
+PyJs_anonymous_1793_._set_name(u'anonymous')
+PyJs_Object_1794_ = Js({})
+@Js
+def PyJs_anonymous_1795_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'$at', u'require', u'exports', u'module'])
+ Js(u'use strict')
+ var.put(u'$at', var.get(u'require')(Js(u'./_string-at'))(var.get(u'true')))
+ @Js
+ def PyJs_anonymous_1796_(iterated, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'iterated':iterated}, var)
+ var.registers([u'iterated'])
+ var.get(u"this").put(u'_t', var.get(u'String')(var.get(u'iterated')))
+ var.get(u"this").put(u'_i', Js(0.0))
+ PyJs_anonymous_1796_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1797_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'index', u'O', u'point'])
+ var.put(u'O', var.get(u"this").get(u'_t'))
+ var.put(u'index', var.get(u"this").get(u'_i'))
+ if (var.get(u'index')>=var.get(u'O').get(u'length')):
+ PyJs_Object_1798_ = Js({u'value':var.get(u'undefined'),u'done':var.get(u'true')})
+ return PyJs_Object_1798_
+ var.put(u'point', var.get(u'$at')(var.get(u'O'), var.get(u'index')))
+ var.get(u"this").put(u'_i', var.get(u'point').get(u'length'), u'+')
+ PyJs_Object_1799_ = Js({u'value':var.get(u'point'),u'done':Js(False)})
+ return PyJs_Object_1799_
+ PyJs_anonymous_1797_._set_name(u'anonymous')
+ var.get(u'require')(Js(u'./_iter-define'))(var.get(u'String'), Js(u'String'), PyJs_anonymous_1796_, PyJs_anonymous_1797_)
+PyJs_anonymous_1795_._set_name(u'anonymous')
+PyJs_Object_1800_ = Js({u'./_iter-define':Js(165.0),u'./_string-at':Js(192.0)})
+@Js
+def PyJs_anonymous_1801_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_create', u'redefine', u'uid', u'setter', u'global', u'$keys', u'$create', u'$JSON', u'$getOwnPropertySymbols', u'META', u'toIObject', u'$defineProperty', u'wrap', u'wks', u'PROTOTYPE', u'$propertyIsEnumerable', u'ObjectProto', u'OPSymbols', u'$export', u'gOPNExt', u'$DP', u'toPrimitive', u'$GOPD', u'gOPN', u'isEnum', u'keyOf', u'shared', u'gOPD', u'has', u'isArray', u'exports', u'wksExt', u'$fails', u'TO_PRIMITIVE', u'setToStringTag', u'enumKeys', u'SymbolRegistry', u'$defineProperties', u'anObject', u'module', u'$getOwnPropertyDescriptor', u'AllSymbols', u'USE_NATIVE', u'symbols', u'setSymbolDesc', u'i', u'DESCRIPTORS', u'require', u'$getOwnPropertyNames', u'$Symbol', u'_stringify', u'wksDefine', u'HIDDEN', u'isSymbol', u'createDesc', u'dP', u'QObject'])
+ Js(u'use strict')
+ var.put(u'global', var.get(u'require')(Js(u'./_global')))
+ var.put(u'has', var.get(u'require')(Js(u'./_has')))
+ var.put(u'DESCRIPTORS', var.get(u'require')(Js(u'./_descriptors')))
+ var.put(u'$export', var.get(u'require')(Js(u'./_export')))
+ var.put(u'redefine', var.get(u'require')(Js(u'./_redefine')))
+ var.put(u'META', var.get(u'require')(Js(u'./_meta')).get(u'KEY'))
+ var.put(u'$fails', var.get(u'require')(Js(u'./_fails')))
+ var.put(u'shared', var.get(u'require')(Js(u'./_shared')))
+ var.put(u'setToStringTag', var.get(u'require')(Js(u'./_set-to-string-tag')))
+ var.put(u'uid', var.get(u'require')(Js(u'./_uid')))
+ var.put(u'wks', var.get(u'require')(Js(u'./_wks')))
+ var.put(u'wksExt', var.get(u'require')(Js(u'./_wks-ext')))
+ var.put(u'wksDefine', var.get(u'require')(Js(u'./_wks-define')))
+ var.put(u'keyOf', var.get(u'require')(Js(u'./_keyof')))
+ var.put(u'enumKeys', var.get(u'require')(Js(u'./_enum-keys')))
+ var.put(u'isArray', var.get(u'require')(Js(u'./_is-array')))
+ var.put(u'anObject', var.get(u'require')(Js(u'./_an-object')))
+ var.put(u'toIObject', var.get(u'require')(Js(u'./_to-iobject')))
+ var.put(u'toPrimitive', var.get(u'require')(Js(u'./_to-primitive')))
+ var.put(u'createDesc', var.get(u'require')(Js(u'./_property-desc')))
+ var.put(u'_create', var.get(u'require')(Js(u'./_object-create')))
+ var.put(u'gOPNExt', var.get(u'require')(Js(u'./_object-gopn-ext')))
+ var.put(u'$GOPD', var.get(u'require')(Js(u'./_object-gopd')))
+ var.put(u'$DP', var.get(u'require')(Js(u'./_object-dp')))
+ var.put(u'$keys', var.get(u'require')(Js(u'./_object-keys')))
+ var.put(u'gOPD', var.get(u'$GOPD').get(u'f'))
+ var.put(u'dP', var.get(u'$DP').get(u'f'))
+ var.put(u'gOPN', var.get(u'gOPNExt').get(u'f'))
+ var.put(u'$Symbol', var.get(u'global').get(u'Symbol'))
+ var.put(u'$JSON', var.get(u'global').get(u'JSON'))
+ var.put(u'_stringify', (var.get(u'$JSON') and var.get(u'$JSON').get(u'stringify')))
+ var.put(u'PROTOTYPE', Js(u'prototype'))
+ var.put(u'HIDDEN', var.get(u'wks')(Js(u'_hidden')))
+ var.put(u'TO_PRIMITIVE', var.get(u'wks')(Js(u'toPrimitive')))
+ PyJs_Object_1802_ = Js({})
+ var.put(u'isEnum', PyJs_Object_1802_.get(u'propertyIsEnumerable'))
+ var.put(u'SymbolRegistry', var.get(u'shared')(Js(u'symbol-registry')))
+ var.put(u'AllSymbols', var.get(u'shared')(Js(u'symbols')))
+ var.put(u'OPSymbols', var.get(u'shared')(Js(u'op-symbols')))
+ var.put(u'ObjectProto', var.get(u'Object').get(var.get(u'PROTOTYPE')))
+ var.put(u'USE_NATIVE', (var.get(u'$Symbol',throw=False).typeof()==Js(u'function')))
+ var.put(u'QObject', var.get(u'global').get(u'QObject'))
+ var.put(u'setter', ((var.get(u'QObject').neg() or var.get(u'QObject').get(var.get(u'PROTOTYPE')).neg()) or var.get(u'QObject').get(var.get(u'PROTOTYPE')).get(u'findChild').neg()))
+ @Js
+ def PyJs_anonymous_1803_(it, key, D, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'it':it, u'key':key, u'D':D}, var)
+ var.registers([u'protoDesc', u'it', u'key', u'D'])
+ var.put(u'protoDesc', var.get(u'gOPD')(var.get(u'ObjectProto'), var.get(u'key')))
+ if var.get(u'protoDesc'):
+ var.get(u'ObjectProto').delete(var.get(u'key'))
+ var.get(u'dP')(var.get(u'it'), var.get(u'key'), var.get(u'D'))
+ if (var.get(u'protoDesc') and PyJsStrictNeq(var.get(u'it'),var.get(u'ObjectProto'))):
+ var.get(u'dP')(var.get(u'ObjectProto'), var.get(u'key'), var.get(u'protoDesc'))
+ PyJs_anonymous_1803_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1804_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ PyJs_Object_1805_ = Js({})
+ @Js
+ def PyJs_anonymous_1807_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ PyJs_Object_1808_ = Js({u'value':Js(7.0)})
+ return var.get(u'dP')(var.get(u"this"), Js(u'a'), PyJs_Object_1808_).get(u'a')
+ PyJs_anonymous_1807_._set_name(u'anonymous')
+ PyJs_Object_1806_ = Js({u'get':PyJs_anonymous_1807_})
+ return (var.get(u'_create')(var.get(u'dP')(PyJs_Object_1805_, Js(u'a'), PyJs_Object_1806_)).get(u'a')!=Js(7.0))
+ PyJs_anonymous_1804_._set_name(u'anonymous')
+ var.put(u'setSymbolDesc', (PyJs_anonymous_1803_ if (var.get(u'DESCRIPTORS') and var.get(u'$fails')(PyJs_anonymous_1804_)) else var.get(u'dP')))
+ @Js
+ def PyJs_anonymous_1809_(tag, this, arguments, var=var):
+ var = Scope({u'this':this, u'tag':tag, u'arguments':arguments}, var)
+ var.registers([u'tag', u'sym'])
+ var.put(u'sym', var.get(u'AllSymbols').put(var.get(u'tag'), var.get(u'_create')(var.get(u'$Symbol').get(var.get(u'PROTOTYPE')))))
+ var.get(u'sym').put(u'_k', var.get(u'tag'))
+ return var.get(u'sym')
+ PyJs_anonymous_1809_._set_name(u'anonymous')
+ var.put(u'wrap', PyJs_anonymous_1809_)
+ @Js
+ def PyJs_anonymous_1810_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return (var.get(u'it',throw=False).typeof()==Js(u'symbol'))
+ PyJs_anonymous_1810_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1811_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'it'])
+ return var.get(u'it').instanceof(var.get(u'$Symbol'))
+ PyJs_anonymous_1811_._set_name(u'anonymous')
+ var.put(u'isSymbol', (PyJs_anonymous_1810_ if (var.get(u'USE_NATIVE') and (var.get(u'$Symbol').get(u'iterator').typeof()==Js(u'symbol'))) else PyJs_anonymous_1811_))
+ @Js
+ def PyJs_defineProperty_1812_(it, key, D, this, arguments, var=var):
+ var = Scope({u'D':D, u'this':this, u'it':it, u'arguments':arguments, u'key':key, u'defineProperty':PyJs_defineProperty_1812_}, var)
+ var.registers([u'it', u'key', u'D'])
+ if PyJsStrictEq(var.get(u'it'),var.get(u'ObjectProto')):
+ var.get(u'$defineProperty')(var.get(u'OPSymbols'), var.get(u'key'), var.get(u'D'))
+ var.get(u'anObject')(var.get(u'it'))
+ var.put(u'key', var.get(u'toPrimitive')(var.get(u'key'), var.get(u'true')))
+ var.get(u'anObject')(var.get(u'D'))
+ if var.get(u'has')(var.get(u'AllSymbols'), var.get(u'key')):
+ if var.get(u'D').get(u'enumerable').neg():
+ if var.get(u'has')(var.get(u'it'), var.get(u'HIDDEN')).neg():
+ PyJs_Object_1813_ = Js({})
+ var.get(u'dP')(var.get(u'it'), var.get(u'HIDDEN'), var.get(u'createDesc')(Js(1.0), PyJs_Object_1813_))
+ var.get(u'it').get(var.get(u'HIDDEN')).put(var.get(u'key'), var.get(u'true'))
+ else:
+ if (var.get(u'has')(var.get(u'it'), var.get(u'HIDDEN')) and var.get(u'it').get(var.get(u'HIDDEN')).get(var.get(u'key'))):
+ var.get(u'it').get(var.get(u'HIDDEN')).put(var.get(u'key'), Js(False))
+ PyJs_Object_1814_ = Js({u'enumerable':var.get(u'createDesc')(Js(0.0), Js(False))})
+ var.put(u'D', var.get(u'_create')(var.get(u'D'), PyJs_Object_1814_))
+ return var.get(u'setSymbolDesc')(var.get(u'it'), var.get(u'key'), var.get(u'D'))
+ return var.get(u'dP')(var.get(u'it'), var.get(u'key'), var.get(u'D'))
+ PyJs_defineProperty_1812_._set_name(u'defineProperty')
+ var.put(u'$defineProperty', PyJs_defineProperty_1812_)
+ @Js
+ def PyJs_defineProperties_1815_(it, P, this, arguments, var=var):
+ var = Scope({u'this':this, u'P':P, u'it':it, u'defineProperties':PyJs_defineProperties_1815_, u'arguments':arguments}, var)
+ var.registers([u'P', u'keys', u'l', u'it', u'i', u'key'])
+ var.get(u'anObject')(var.get(u'it'))
+ var.put(u'keys', var.get(u'enumKeys')(var.put(u'P', var.get(u'toIObject')(var.get(u'P')))))
+ var.put(u'i', Js(0.0))
+ var.put(u'l', var.get(u'keys').get(u'length'))
+ while (var.get(u'l')>var.get(u'i')):
+ var.get(u'$defineProperty')(var.get(u'it'), var.put(u'key', var.get(u'keys').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1)))), var.get(u'P').get(var.get(u'key')))
+ return var.get(u'it')
+ PyJs_defineProperties_1815_._set_name(u'defineProperties')
+ var.put(u'$defineProperties', PyJs_defineProperties_1815_)
+ @Js
+ def PyJs_create_1816_(it, P, this, arguments, var=var):
+ var = Scope({u'this':this, u'P':P, u'create':PyJs_create_1816_, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'P', u'it'])
+ return (var.get(u'_create')(var.get(u'it')) if PyJsStrictEq(var.get(u'P'),var.get(u'undefined')) else var.get(u'$defineProperties')(var.get(u'_create')(var.get(u'it')), var.get(u'P')))
+ PyJs_create_1816_._set_name(u'create')
+ var.put(u'$create', PyJs_create_1816_)
+ @Js
+ def PyJs_propertyIsEnumerable_1817_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'propertyIsEnumerable':PyJs_propertyIsEnumerable_1817_, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'E', u'key'])
+ var.put(u'E', var.get(u'isEnum').callprop(u'call', var.get(u"this"), var.put(u'key', var.get(u'toPrimitive')(var.get(u'key'), var.get(u'true')))))
+ if ((PyJsStrictEq(var.get(u"this"),var.get(u'ObjectProto')) and var.get(u'has')(var.get(u'AllSymbols'), var.get(u'key'))) and var.get(u'has')(var.get(u'OPSymbols'), var.get(u'key')).neg()):
+ return Js(False)
+ return (var.get(u'E') if (((var.get(u'E') or var.get(u'has')(var.get(u"this"), var.get(u'key')).neg()) or var.get(u'has')(var.get(u'AllSymbols'), var.get(u'key')).neg()) or (var.get(u'has')(var.get(u"this"), var.get(u'HIDDEN')) and var.get(u"this").get(var.get(u'HIDDEN')).get(var.get(u'key')))) else var.get(u'true'))
+ PyJs_propertyIsEnumerable_1817_._set_name(u'propertyIsEnumerable')
+ var.put(u'$propertyIsEnumerable', PyJs_propertyIsEnumerable_1817_)
+ @Js
+ def PyJs_getOwnPropertyDescriptor_1818_(it, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'getOwnPropertyDescriptor':PyJs_getOwnPropertyDescriptor_1818_, u'it':it, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'D', u'key', u'it'])
+ var.put(u'it', var.get(u'toIObject')(var.get(u'it')))
+ var.put(u'key', var.get(u'toPrimitive')(var.get(u'key'), var.get(u'true')))
+ if ((PyJsStrictEq(var.get(u'it'),var.get(u'ObjectProto')) and var.get(u'has')(var.get(u'AllSymbols'), var.get(u'key'))) and var.get(u'has')(var.get(u'OPSymbols'), var.get(u'key')).neg()):
+ return var.get('undefined')
+ var.put(u'D', var.get(u'gOPD')(var.get(u'it'), var.get(u'key')))
+ if ((var.get(u'D') and var.get(u'has')(var.get(u'AllSymbols'), var.get(u'key'))) and (var.get(u'has')(var.get(u'it'), var.get(u'HIDDEN')) and var.get(u'it').get(var.get(u'HIDDEN')).get(var.get(u'key'))).neg()):
+ var.get(u'D').put(u'enumerable', var.get(u'true'))
+ return var.get(u'D')
+ PyJs_getOwnPropertyDescriptor_1818_._set_name(u'getOwnPropertyDescriptor')
+ var.put(u'$getOwnPropertyDescriptor', PyJs_getOwnPropertyDescriptor_1818_)
+ @Js
+ def PyJs_getOwnPropertyNames_1819_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'it':it, u'getOwnPropertyNames':PyJs_getOwnPropertyNames_1819_, u'arguments':arguments}, var)
+ var.registers([u'i', u'it', u'names', u'key', u'result'])
+ var.put(u'names', var.get(u'gOPN')(var.get(u'toIObject')(var.get(u'it'))))
+ var.put(u'result', Js([]))
+ var.put(u'i', Js(0.0))
+ while (var.get(u'names').get(u'length')>var.get(u'i')):
+ if ((var.get(u'has')(var.get(u'AllSymbols'), var.put(u'key', var.get(u'names').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))).neg() and (var.get(u'key')!=var.get(u'HIDDEN'))) and (var.get(u'key')!=var.get(u'META'))):
+ var.get(u'result').callprop(u'push', var.get(u'key'))
+ return var.get(u'result')
+ PyJs_getOwnPropertyNames_1819_._set_name(u'getOwnPropertyNames')
+ var.put(u'$getOwnPropertyNames', PyJs_getOwnPropertyNames_1819_)
+ @Js
+ def PyJs_getOwnPropertySymbols_1820_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'getOwnPropertySymbols':PyJs_getOwnPropertySymbols_1820_, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'i', u'it', u'names', u'key', u'IS_OP', u'result'])
+ var.put(u'IS_OP', PyJsStrictEq(var.get(u'it'),var.get(u'ObjectProto')))
+ var.put(u'names', var.get(u'gOPN')((var.get(u'OPSymbols') if var.get(u'IS_OP') else var.get(u'toIObject')(var.get(u'it')))))
+ var.put(u'result', Js([]))
+ var.put(u'i', Js(0.0))
+ while (var.get(u'names').get(u'length')>var.get(u'i')):
+ if (var.get(u'has')(var.get(u'AllSymbols'), var.put(u'key', var.get(u'names').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))) and (var.get(u'has')(var.get(u'ObjectProto'), var.get(u'key')) if var.get(u'IS_OP') else var.get(u'true'))):
+ var.get(u'result').callprop(u'push', var.get(u'AllSymbols').get(var.get(u'key')))
+ return var.get(u'result')
+ PyJs_getOwnPropertySymbols_1820_._set_name(u'getOwnPropertySymbols')
+ var.put(u'$getOwnPropertySymbols', PyJs_getOwnPropertySymbols_1820_)
+ if var.get(u'USE_NATIVE').neg():
+ @Js
+ def PyJs_Symbol_1821_(this, arguments, var=var):
+ var = Scope({u'this':this, u'Symbol':PyJs_Symbol_1821_, u'arguments':arguments}, var)
+ var.registers([u'$set', u'tag'])
+ if var.get(u"this").instanceof(var.get(u'$Symbol')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError')(Js(u'Symbol is not a constructor!')))
+ raise PyJsTempException
+ var.put(u'tag', var.get(u'uid')((var.get(u'arguments').get(u'0') if (var.get(u'arguments').get(u'length')>Js(0.0)) else var.get(u'undefined'))))
+ @Js
+ def PyJs_anonymous_1822_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ if PyJsStrictEq(var.get(u"this"),var.get(u'ObjectProto')):
+ var.get(u'$set').callprop(u'call', var.get(u'OPSymbols'), var.get(u'value'))
+ if (var.get(u'has')(var.get(u"this"), var.get(u'HIDDEN')) and var.get(u'has')(var.get(u"this").get(var.get(u'HIDDEN')), var.get(u'tag'))):
+ var.get(u"this").get(var.get(u'HIDDEN')).put(var.get(u'tag'), Js(False))
+ var.get(u'setSymbolDesc')(var.get(u"this"), var.get(u'tag'), var.get(u'createDesc')(Js(1.0), var.get(u'value')))
+ PyJs_anonymous_1822_._set_name(u'anonymous')
+ var.put(u'$set', PyJs_anonymous_1822_)
+ if (var.get(u'DESCRIPTORS') and var.get(u'setter')):
+ PyJs_Object_1823_ = Js({u'configurable':var.get(u'true'),u'set':var.get(u'$set')})
+ var.get(u'setSymbolDesc')(var.get(u'ObjectProto'), var.get(u'tag'), PyJs_Object_1823_)
+ return var.get(u'wrap')(var.get(u'tag'))
+ PyJs_Symbol_1821_._set_name(u'Symbol')
+ var.put(u'$Symbol', PyJs_Symbol_1821_)
+ @Js
+ def PyJs_toString_1824_(this, arguments, var=var):
+ var = Scope({u'this':this, u'toString':PyJs_toString_1824_, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").get(u'_k')
+ PyJs_toString_1824_._set_name(u'toString')
+ var.get(u'redefine')(var.get(u'$Symbol').get(var.get(u'PROTOTYPE')), Js(u'toString'), PyJs_toString_1824_)
+ var.get(u'$GOPD').put(u'f', var.get(u'$getOwnPropertyDescriptor'))
+ var.get(u'$DP').put(u'f', var.get(u'$defineProperty'))
+ var.get(u'require')(Js(u'./_object-gopn')).put(u'f', var.get(u'gOPNExt').put(u'f', var.get(u'$getOwnPropertyNames')))
+ var.get(u'require')(Js(u'./_object-pie')).put(u'f', var.get(u'$propertyIsEnumerable'))
+ var.get(u'require')(Js(u'./_object-gops')).put(u'f', var.get(u'$getOwnPropertySymbols'))
+ if (var.get(u'DESCRIPTORS') and var.get(u'require')(Js(u'./_library')).neg()):
+ var.get(u'redefine')(var.get(u'ObjectProto'), Js(u'propertyIsEnumerable'), var.get(u'$propertyIsEnumerable'), var.get(u'true'))
+ @Js
+ def PyJs_anonymous_1825_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return var.get(u'wrap')(var.get(u'wks')(var.get(u'name')))
+ PyJs_anonymous_1825_._set_name(u'anonymous')
+ var.get(u'wksExt').put(u'f', PyJs_anonymous_1825_)
+ PyJs_Object_1826_ = Js({u'Symbol':var.get(u'$Symbol')})
+ var.get(u'$export')(((var.get(u'$export').get(u'G')+var.get(u'$export').get(u'W'))+(var.get(u'$export').get(u'F')*var.get(u'USE_NATIVE').neg())), PyJs_Object_1826_)
+ #for JS loop
+ var.put(u'symbols', Js(u'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables').callprop(u'split', Js(u',')))
+ var.put(u'i', Js(0.0))
+ while (var.get(u'symbols').get(u'length')>var.get(u'i')):
+ var.get(u'wks')(var.get(u'symbols').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))
+
+ #for JS loop
+ var.put(u'symbols', var.get(u'$keys')(var.get(u'wks').get(u'store')))
+ var.put(u'i', Js(0.0))
+ while (var.get(u'symbols').get(u'length')>var.get(u'i')):
+ var.get(u'wksDefine')(var.get(u'symbols').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))
+
+ @Js
+ def PyJs_anonymous_1828_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ return (var.get(u'SymbolRegistry').get(var.get(u'key')) if var.get(u'has')(var.get(u'SymbolRegistry'), var.put(u'key', Js(u''), u'+')) else var.get(u'SymbolRegistry').put(var.get(u'key'), var.get(u'$Symbol')(var.get(u'key'))))
+ PyJs_anonymous_1828_._set_name(u'anonymous')
+ @Js
+ def PyJs_keyFor_1829_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'keyFor':PyJs_keyFor_1829_, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ if var.get(u'isSymbol')(var.get(u'key')):
+ return var.get(u'keyOf')(var.get(u'SymbolRegistry'), var.get(u'key'))
+ PyJsTempException = JsToPyException(var.get(u'TypeError')((var.get(u'key')+Js(u' is not a symbol!'))))
+ raise PyJsTempException
+ PyJs_keyFor_1829_._set_name(u'keyFor')
+ @Js
+ def PyJs_anonymous_1830_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.put(u'setter', var.get(u'true'))
+ PyJs_anonymous_1830_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_1831_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.put(u'setter', Js(False))
+ PyJs_anonymous_1831_._set_name(u'anonymous')
+ PyJs_Object_1827_ = Js({u'for':PyJs_anonymous_1828_,u'keyFor':PyJs_keyFor_1829_,u'useSetter':PyJs_anonymous_1830_,u'useSimple':PyJs_anonymous_1831_})
+ var.get(u'$export')((var.get(u'$export').get(u'S')+(var.get(u'$export').get(u'F')*var.get(u'USE_NATIVE').neg())), Js(u'Symbol'), PyJs_Object_1827_)
+ PyJs_Object_1832_ = Js({u'create':var.get(u'$create'),u'defineProperty':var.get(u'$defineProperty'),u'defineProperties':var.get(u'$defineProperties'),u'getOwnPropertyDescriptor':var.get(u'$getOwnPropertyDescriptor'),u'getOwnPropertyNames':var.get(u'$getOwnPropertyNames'),u'getOwnPropertySymbols':var.get(u'$getOwnPropertySymbols')})
+ var.get(u'$export')((var.get(u'$export').get(u'S')+(var.get(u'$export').get(u'F')*var.get(u'USE_NATIVE').neg())), Js(u'Object'), PyJs_Object_1832_)
+ @Js
+ def PyJs_anonymous_1833_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'S'])
+ var.put(u'S', var.get(u'$Symbol')())
+ PyJs_Object_1834_ = Js({u'a':var.get(u'S')})
+ return (((var.get(u'_stringify')(Js([var.get(u'S')]))!=Js(u'[null]')) or (var.get(u'_stringify')(PyJs_Object_1834_)!=Js(u'{}'))) or (var.get(u'_stringify')(var.get(u'Object')(var.get(u'S')))!=Js(u'{}')))
+ PyJs_anonymous_1833_._set_name(u'anonymous')
+ @Js
+ def PyJs_stringify_1836_(it, this, arguments, var=var):
+ var = Scope({u'this':this, u'stringify':PyJs_stringify_1836_, u'it':it, u'arguments':arguments}, var)
+ var.registers([u'i', u'replacer', u'args', u'it', u'$replacer'])
+ if (PyJsStrictEq(var.get(u'it'),var.get(u'undefined')) or var.get(u'isSymbol')(var.get(u'it'))):
+ return var.get('undefined')
+ var.put(u'args', Js([var.get(u'it')]))
+ var.put(u'i', Js(1.0))
+ while (var.get(u'arguments').get(u'length')>var.get(u'i')):
+ var.get(u'args').callprop(u'push', var.get(u'arguments').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))
+ var.put(u'replacer', var.get(u'args').get(u'1'))
+ if (var.get(u'replacer',throw=False).typeof()==Js(u'function')):
+ var.put(u'$replacer', var.get(u'replacer'))
+ if (var.get(u'$replacer') or var.get(u'isArray')(var.get(u'replacer')).neg()):
+ @Js
+ def PyJs_anonymous_1837_(key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'value', u'key'])
+ if var.get(u'$replacer'):
+ var.put(u'value', var.get(u'$replacer').callprop(u'call', var.get(u"this"), var.get(u'key'), var.get(u'value')))
+ if var.get(u'isSymbol')(var.get(u'value')).neg():
+ return var.get(u'value')
+ PyJs_anonymous_1837_._set_name(u'anonymous')
+ var.put(u'replacer', PyJs_anonymous_1837_)
+ var.get(u'args').put(u'1', var.get(u'replacer'))
+ return var.get(u'_stringify').callprop(u'apply', var.get(u'$JSON'), var.get(u'args'))
+ PyJs_stringify_1836_._set_name(u'stringify')
+ PyJs_Object_1835_ = Js({u'stringify':PyJs_stringify_1836_})
+ (var.get(u'$JSON') and var.get(u'$export')((var.get(u'$export').get(u'S')+(var.get(u'$export').get(u'F')*(var.get(u'USE_NATIVE').neg() or var.get(u'$fails')(PyJs_anonymous_1833_)))), Js(u'JSON'), PyJs_Object_1835_))
+ (var.get(u'$Symbol').get(var.get(u'PROTOTYPE')).get(var.get(u'TO_PRIMITIVE')) or var.get(u'require')(Js(u'./_hide'))(var.get(u'$Symbol').get(var.get(u'PROTOTYPE')), var.get(u'TO_PRIMITIVE'), var.get(u'$Symbol').get(var.get(u'PROTOTYPE')).get(u'valueOf')))
+ var.get(u'setToStringTag')(var.get(u'$Symbol'), Js(u'Symbol'))
+ var.get(u'setToStringTag')(var.get(u'Math'), Js(u'Math'), var.get(u'true'))
+ var.get(u'setToStringTag')(var.get(u'global').get(u'JSON'), Js(u'JSON'), var.get(u'true'))
+PyJs_anonymous_1801_._set_name(u'anonymous')
+PyJs_Object_1838_ = Js({u'./_an-object':Js(132.0),u'./_descriptors':Js(147.0),u'./_enum-keys':Js(150.0),u'./_export':Js(151.0),u'./_fails':Js(152.0),u'./_global':Js(154.0),u'./_has':Js(155.0),u'./_hide':Js(156.0),u'./_is-array':Js(161.0),u'./_keyof':Js(168.0),u'./_library':Js(169.0),u'./_meta':Js(170.0),u'./_object-create':Js(172.0),u'./_object-dp':Js(173.0),u'./_object-gopd':Js(175.0),u'./_object-gopn':Js(177.0),u'./_object-gopn-ext':Js(176.0),u'./_object-gops':Js(178.0),u'./_object-keys':Js(181.0),u'./_object-pie':Js(182.0),u'./_property-desc':Js(184.0),u'./_redefine':Js(186.0),u'./_set-to-string-tag':Js(189.0),u'./_shared':Js(191.0),u'./_to-iobject':Js(195.0),u'./_to-primitive':Js(198.0),u'./_uid':Js(199.0),u'./_wks':Js(202.0),u'./_wks-define':Js(200.0),u'./_wks-ext':Js(201.0)})
+@Js
+def PyJs_anonymous_1839_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'tmp', u'redefine', u'InternalMap', u'methods', u'$WeakMap', u'require', u'isExtensible', u'weak', u'exports', u'wrapper', u'isObject', u'meta', u'module', u'each', u'uncaughtFrozenStore', u'getWeak', u'assign'])
+ Js(u'use strict')
+ var.put(u'each', var.get(u'require')(Js(u'./_array-methods'))(Js(0.0)))
+ var.put(u'redefine', var.get(u'require')(Js(u'./_redefine')))
+ var.put(u'meta', var.get(u'require')(Js(u'./_meta')))
+ var.put(u'assign', var.get(u'require')(Js(u'./_object-assign')))
+ var.put(u'weak', var.get(u'require')(Js(u'./_collection-weak')))
+ var.put(u'isObject', var.get(u'require')(Js(u'./_is-object')))
+ var.put(u'getWeak', var.get(u'meta').get(u'getWeak'))
+ var.put(u'isExtensible', var.get(u'Object').get(u'isExtensible'))
+ var.put(u'uncaughtFrozenStore', var.get(u'weak').get(u'ufstore'))
+ PyJs_Object_1840_ = Js({})
+ var.put(u'tmp', PyJs_Object_1840_)
+ @Js
+ def PyJs_anonymous_1841_(get, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':get}, var)
+ var.registers([u'get'])
+ @Js
+ def PyJs_WeakMap_1842_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'WeakMap':PyJs_WeakMap_1842_}, var)
+ var.registers([])
+ return var.get(u'get')(var.get(u"this"), (var.get(u'arguments').get(u'0') if (var.get(u'arguments').get(u'length')>Js(0.0)) else var.get(u'undefined')))
+ PyJs_WeakMap_1842_._set_name(u'WeakMap')
+ return PyJs_WeakMap_1842_
+ PyJs_anonymous_1841_._set_name(u'anonymous')
+ var.put(u'wrapper', PyJs_anonymous_1841_)
+ @Js
+ def PyJs_get_1844_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key, u'get':PyJs_get_1844_}, var)
+ var.registers([u'data', u'key'])
+ if var.get(u'isObject')(var.get(u'key')):
+ var.put(u'data', var.get(u'getWeak')(var.get(u'key')))
+ if PyJsStrictEq(var.get(u'data'),var.get(u'true')):
+ return var.get(u'uncaughtFrozenStore')(var.get(u"this")).callprop(u'get', var.get(u'key'))
+ return (var.get(u'data').get(var.get(u"this").get(u'_i')) if var.get(u'data') else var.get(u'undefined'))
+ PyJs_get_1844_._set_name(u'get')
+ @Js
+ def PyJs_set_1845_(key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'set':PyJs_set_1845_, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'value', u'key'])
+ return var.get(u'weak').callprop(u'def', var.get(u"this"), var.get(u'key'), var.get(u'value'))
+ PyJs_set_1845_._set_name(u'set')
+ PyJs_Object_1843_ = Js({u'get':PyJs_get_1844_,u'set':PyJs_set_1845_})
+ var.put(u'methods', PyJs_Object_1843_)
+ var.put(u'$WeakMap', var.get(u'module').put(u'exports', var.get(u'require')(Js(u'./_collection'))(Js(u'WeakMap'), var.get(u'wrapper'), var.get(u'methods'), var.get(u'weak'), var.get(u'true'), var.get(u'true'))))
+ if (var.get(u'$WeakMap').create().callprop(u'set', (var.get(u'Object').get(u'freeze') or var.get(u'Object'))(var.get(u'tmp')), Js(7.0)).callprop(u'get', var.get(u'tmp'))!=Js(7.0)):
+ var.put(u'InternalMap', var.get(u'weak').callprop(u'getConstructor', var.get(u'wrapper')))
+ var.get(u'assign')(var.get(u'InternalMap').get(u'prototype'), var.get(u'methods'))
+ var.get(u'meta').put(u'NEED', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_1846_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'method', u'key', u'proto'])
+ var.put(u'proto', var.get(u'$WeakMap').get(u'prototype'))
+ var.put(u'method', var.get(u'proto').get(var.get(u'key')))
+ @Js
+ def PyJs_anonymous_1847_(a, b, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'b':b, u'arguments':arguments}, var)
+ var.registers([u'a', u'b', u'result'])
+ if (var.get(u'isObject')(var.get(u'a')) and var.get(u'isExtensible')(var.get(u'a')).neg()):
+ if var.get(u"this").get(u'_f').neg():
+ var.get(u"this").put(u'_f', var.get(u'InternalMap').create())
+ var.put(u'result', var.get(u"this").get(u'_f').callprop(var.get(u'key'), var.get(u'a'), var.get(u'b')))
+ return (var.get(u"this") if (var.get(u'key')==Js(u'set')) else var.get(u'result'))
+ return var.get(u'method').callprop(u'call', var.get(u"this"), var.get(u'a'), var.get(u'b'))
+ PyJs_anonymous_1847_._set_name(u'anonymous')
+ var.get(u'redefine')(var.get(u'proto'), var.get(u'key'), PyJs_anonymous_1847_)
+ PyJs_anonymous_1846_._set_name(u'anonymous')
+ var.get(u'each')(Js([Js(u'delete'), Js(u'has'), Js(u'get'), Js(u'set')]), PyJs_anonymous_1846_)
+PyJs_anonymous_1839_._set_name(u'anonymous')
+PyJs_Object_1848_ = Js({u'./_array-methods':Js(135.0),u'./_collection':Js(143.0),u'./_collection-weak':Js(142.0),u'./_is-object':Js(162.0),u'./_meta':Js(170.0),u'./_object-assign':Js(171.0),u'./_redefine':Js(186.0)})
+@Js
+def PyJs_anonymous_1849_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'weak', u'exports', u'module'])
+ Js(u'use strict')
+ var.put(u'weak', var.get(u'require')(Js(u'./_collection-weak')))
+ @Js
+ def PyJs_anonymous_1850_(get, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':get}, var)
+ var.registers([u'get'])
+ @Js
+ def PyJs_WeakSet_1851_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'WeakSet':PyJs_WeakSet_1851_}, var)
+ var.registers([])
+ return var.get(u'get')(var.get(u"this"), (var.get(u'arguments').get(u'0') if (var.get(u'arguments').get(u'length')>Js(0.0)) else var.get(u'undefined')))
+ PyJs_WeakSet_1851_._set_name(u'WeakSet')
+ return PyJs_WeakSet_1851_
+ PyJs_anonymous_1850_._set_name(u'anonymous')
+ @Js
+ def PyJs_add_1853_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'add':PyJs_add_1853_, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return var.get(u'weak').callprop(u'def', var.get(u"this"), var.get(u'value'), var.get(u'true'))
+ PyJs_add_1853_._set_name(u'add')
+ PyJs_Object_1852_ = Js({u'add':PyJs_add_1853_})
+ var.get(u'require')(Js(u'./_collection'))(Js(u'WeakSet'), PyJs_anonymous_1850_, PyJs_Object_1852_, var.get(u'weak'), Js(False), var.get(u'true'))
+PyJs_anonymous_1849_._set_name(u'anonymous')
+PyJs_Object_1854_ = Js({u'./_collection':Js(143.0),u'./_collection-weak':Js(142.0)})
+@Js
+def PyJs_anonymous_1855_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'$export', u'require', u'exports', u'module'])
+ var.put(u'$export', var.get(u'require')(Js(u'./_export')))
+ PyJs_Object_1856_ = Js({u'toJSON':var.get(u'require')(Js(u'./_collection-to-json'))(Js(u'Map'))})
+ var.get(u'$export')((var.get(u'$export').get(u'P')+var.get(u'$export').get(u'R')), Js(u'Map'), PyJs_Object_1856_)
+PyJs_anonymous_1855_._set_name(u'anonymous')
+PyJs_Object_1857_ = Js({u'./_collection-to-json':Js(141.0),u'./_export':Js(151.0)})
+@Js
+def PyJs_anonymous_1858_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'./_wks-define'))(Js(u'asyncIterator'))
+PyJs_anonymous_1858_._set_name(u'anonymous')
+PyJs_Object_1859_ = Js({u'./_wks-define':Js(200.0)})
+@Js
+def PyJs_anonymous_1860_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'require')(Js(u'./_wks-define'))(Js(u'observable'))
+PyJs_anonymous_1860_._set_name(u'anonymous')
+PyJs_Object_1861_ = Js({u'./_wks-define':Js(200.0)})
+@Js
+def PyJs_anonymous_1862_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'TO_STRING_TAG', u'exports', u'hide', u'NAME', u'proto', u'i', u'require', u'global', u'Collection', u'Iterators', u'collections', u'module'])
+ var.get(u'require')(Js(u'./es6.array.iterator'))
+ var.put(u'global', var.get(u'require')(Js(u'./_global')))
+ var.put(u'hide', var.get(u'require')(Js(u'./_hide')))
+ var.put(u'Iterators', var.get(u'require')(Js(u'./_iterators')))
+ var.put(u'TO_STRING_TAG', var.get(u'require')(Js(u'./_wks'))(Js(u'toStringTag')))
+ #for JS loop
+ var.put(u'collections', Js([Js(u'NodeList'), Js(u'DOMTokenList'), Js(u'MediaList'), Js(u'StyleSheetList'), Js(u'CSSRuleList')]))
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(1.0)):
+ return var.get(u'program').get(u'body')
+ else:
+ return var.get(u'program').get(u'body').get(u'0')
+ PyJsHoisted_useTemplate_.func_name = u'useTemplate'
+ var.put(u'useTemplate', PyJsHoisted_useTemplate_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1872_ = Js({})
+ var.put(u'newObj', PyJs_Object_1872_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_symbol', var.get(u'require')(Js(u'babel-runtime/core-js/symbol')))
+ var.put(u'_symbol2', var.get(u'_interopRequireDefault')(var.get(u'_symbol')))
+ @Js
+ def PyJs_anonymous_1865_(code, opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'_getAst', u'code', u'stack', u'opts'])
+ var.put(u'stack', PyJsComma(Js(0.0), Js(None)))
+ try:
+ PyJsTempException = JsToPyException(var.get(u'Error').create())
+ raise PyJsTempException
+ except PyJsException as PyJsTempException:
+ PyJsHolder_6572726f72_58122749 = var.own.get(u'error')
+ var.force_own_put(u'error', PyExceptionToJs(PyJsTempException))
+ try:
+ if var.get(u'error').get(u'stack'):
+ var.put(u'stack', var.get(u'error').get(u'stack').callprop(u'split', Js(u'\n')).callprop(u'slice', Js(1.0)).callprop(u'join', Js(u'\n')))
+ finally:
+ if PyJsHolder_6572726f72_58122749 is not None:
+ var.own[u'error'] = PyJsHolder_6572726f72_58122749
+ else:
+ del var.own[u'error']
+ del PyJsHolder_6572726f72_58122749
+ PyJs_Object_1866_ = Js({u'allowReturnOutsideFunction':var.get(u'true'),u'allowSuperOutsideMethod':var.get(u'true'),u'preserveComments':Js(False)})
+ var.put(u'opts', PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(PyJs_Object_1866_, var.get(u'opts')))
+ @Js
+ def PyJs_getAst_1867_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'getAst':PyJs_getAst_1867_}, var)
+ var.registers([u'ast'])
+ var.put(u'ast', PyJsComma(Js(0.0), Js(None)))
+ try:
+ var.put(u'ast', var.get(u'babylon').callprop(u'parse', var.get(u'code'), var.get(u'opts')))
+ PyJs_Object_1868_ = Js({u'preserveComments':var.get(u'opts').get(u'preserveComments')})
+ var.put(u'ast', var.get(u'_babelTraverse2').get(u'default').callprop(u'removeProperties', var.get(u'ast'), PyJs_Object_1868_))
+ @Js
+ def PyJs_anonymous_1869_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u'node').put(var.get(u'FROM_TEMPLATE'), var.get(u'true'))
+ PyJs_anonymous_1869_._set_name(u'anonymous')
+ var.get(u'_babelTraverse2').get(u'default').callprop(u'cheap', var.get(u'ast'), PyJs_anonymous_1869_)
+ except PyJsException as PyJsTempException:
+ PyJsHolder_657272_43794349 = var.own.get(u'err')
+ var.force_own_put(u'err', PyExceptionToJs(PyJsTempException))
+ try:
+ var.get(u'err').put(u'stack', ((var.get(u'err').get(u'stack')+Js(u'from\n'))+var.get(u'stack')))
+ PyJsTempException = JsToPyException(var.get(u'err'))
+ raise PyJsTempException
+ finally:
+ if PyJsHolder_657272_43794349 is not None:
+ var.own[u'err'] = PyJsHolder_657272_43794349
+ else:
+ del var.own[u'err']
+ del PyJsHolder_657272_43794349
+ @Js
+ def PyJs_getAst_1870_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'getAst':PyJs_getAst_1870_}, var)
+ var.registers([])
+ return var.get(u'ast')
+ PyJs_getAst_1870_._set_name(u'getAst')
+ var.put(u'_getAst', PyJs_getAst_1870_)
+ return var.get(u'ast')
+ PyJs_getAst_1867_._set_name(u'getAst')
+ var.put(u'_getAst', PyJs_getAst_1867_)
+ @Js
+ def PyJs_anonymous_1871_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'_len', u'_key', u'args'])
+ #for JS loop
+ var.put(u'_len', var.get(u'arguments').get(u'length'))
+ var.put(u'args', var.get(u'Array')(var.get(u'_len')))
+ var.put(u'_key', Js(0.0))
+ while (var.get(u'_key')=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'key', var.get(u'_ref'))
+ if var.get(u'node').get(var.get(u'key')):
+ return var.get(u'true')
+
+ return Js(False)
+ PyJs_shouldVisit_1886_._set_name(u'shouldVisit')
+ var.get(u'TraversalContext').get(u'prototype').put(u'shouldVisit', PyJs_shouldVisit_1886_)
+ @Js
+ def PyJs_create_1887_(node, obj, key, listKey, this, arguments, var=var):
+ var = Scope({u'node':node, u'obj':obj, u'arguments':arguments, u'key':key, u'this':this, u'listKey':listKey, u'create':PyJs_create_1887_}, var)
+ var.registers([u'node', u'listKey', u'obj', u'key'])
+ PyJs_Object_1888_ = Js({u'parentPath':var.get(u"this").get(u'parentPath'),u'parent':var.get(u'node'),u'container':var.get(u'obj'),u'key':var.get(u'key'),u'listKey':var.get(u'listKey')})
+ return var.get(u'_path3').get(u'default').callprop(u'get', PyJs_Object_1888_)
+ PyJs_create_1887_._set_name(u'create')
+ var.get(u'TraversalContext').get(u'prototype').put(u'create', PyJs_create_1887_)
+ @Js
+ def PyJs_maybeQueue_1889_(path, notPriority, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'maybeQueue':PyJs_maybeQueue_1889_, u'notPriority':notPriority, u'arguments':arguments}, var)
+ var.registers([u'path', u'notPriority'])
+ if var.get(u"this").get(u'trap'):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'Infinite cycle detected')))
+ raise PyJsTempException
+ if var.get(u"this").get(u'queue'):
+ if var.get(u'notPriority'):
+ var.get(u"this").get(u'queue').callprop(u'push', var.get(u'path'))
+ else:
+ var.get(u"this").get(u'priorityQueue').callprop(u'push', var.get(u'path'))
+ PyJs_maybeQueue_1889_._set_name(u'maybeQueue')
+ var.get(u'TraversalContext').get(u'prototype').put(u'maybeQueue', PyJs_maybeQueue_1889_)
+ @Js
+ def PyJs_visitMultiple_1890_(container, parent, listKey, this, arguments, var=var):
+ var = Scope({u'visitMultiple':PyJs_visitMultiple_1890_, u'container':container, u'parent':parent, u'this':this, u'listKey':listKey, u'arguments':arguments}, var)
+ var.registers([u'node', u'container', u'parent', u'listKey', u'queue', u'key'])
+ if PyJsStrictEq(var.get(u'container').get(u'length'),Js(0.0)):
+ return Js(False)
+ var.put(u'queue', Js([]))
+ #for JS loop
+ var.put(u'key', Js(0.0))
+ while (var.get(u'key')=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'path', var.get(u'_ref2'))
+ var.get(u'path').callprop(u'resync')
+ if (PyJsStrictEq(var.get(u'path').get(u'contexts').get(u'length'),Js(0.0)) or PyJsStrictNeq(var.get(u'path').get(u'contexts').get((var.get(u'path').get(u'contexts').get(u'length')-Js(1.0))),var.get(u"this"))):
+ var.get(u'path').callprop(u'pushContext', var.get(u"this"))
+ if PyJsStrictEq(var.get(u'path').get(u'key'),var.get(u"null")):
+ continue
+ if (var.get(u'testing') and (var.get(u'queue').get(u'length')>=Js(10000.0))):
+ var.get(u"this").put(u'trap', var.get(u'true'))
+ if (var.get(u'visited').callprop(u'indexOf', var.get(u'path').get(u'node'))>=Js(0.0)):
+ continue
+ var.get(u'visited').callprop(u'push', var.get(u'path').get(u'node'))
+ if var.get(u'path').callprop(u'visit'):
+ var.put(u'stop', var.get(u'true'))
+ break
+ if var.get(u"this").get(u'priorityQueue').get(u'length'):
+ var.put(u'stop', var.get(u"this").callprop(u'visitQueue', var.get(u"this").get(u'priorityQueue')))
+ var.get(u"this").put(u'priorityQueue', Js([]))
+ var.get(u"this").put(u'queue', var.get(u'queue'))
+ if var.get(u'stop'):
+ break
+
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'queue'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'_path', var.get(u'_ref3'))
+ var.get(u'_path').callprop(u'popContext')
+
+ var.get(u"this").put(u'queue', var.get(u"null"))
+ return var.get(u'stop')
+ PyJs_visitQueue_1892_._set_name(u'visitQueue')
+ var.get(u'TraversalContext').get(u'prototype').put(u'visitQueue', PyJs_visitQueue_1892_)
+ @Js
+ def PyJs_visit_1893_(node, key, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'visit':PyJs_visit_1893_, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'node', u'nodes', u'key'])
+ var.put(u'nodes', var.get(u'node').get(var.get(u'key')))
+ if var.get(u'nodes').neg():
+ return Js(False)
+ if var.get(u'Array').callprop(u'isArray', var.get(u'nodes')):
+ return var.get(u"this").callprop(u'visitMultiple', var.get(u'nodes'), var.get(u'node'), var.get(u'key'))
+ else:
+ return var.get(u"this").callprop(u'visitSingle', var.get(u'node'), var.get(u'key'))
+ PyJs_visit_1893_._set_name(u'visit')
+ var.get(u'TraversalContext').get(u'prototype').put(u'visit', PyJs_visit_1893_)
+ return var.get(u'TraversalContext')
+ PyJs_anonymous_1885_._set_name(u'anonymous')
+ var.put(u'TraversalContext', PyJs_anonymous_1885_())
+ var.get(u'exports').put(u'default', var.get(u'TraversalContext'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+ PyJs_anonymous_1882_._set_name(u'anonymous')
+ PyJs_anonymous_1882_.callprop(u'call', var.get(u"this"), var.get(u'require')(Js(u'_process')))
+PyJs_anonymous_1881_._set_name(u'anonymous')
+PyJs_Object_1894_ = Js({u'./path':Js(232.0),u'_process':Js(531.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1895_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'Hub', u'require', u'module', u'_interopRequireDefault', u'_classCallCheck3', u'_classCallCheck2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1896_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1896_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ pass
+ @Js
+ def PyJs_Hub_1897_(file, options, this, arguments, var=var):
+ var = Scope({u'this':this, u'Hub':PyJs_Hub_1897_, u'options':options, u'file':file, u'arguments':arguments}, var)
+ var.registers([u'options', u'file'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'Hub'))
+ var.get(u"this").put(u'file', var.get(u'file'))
+ var.get(u"this").put(u'options', var.get(u'options'))
+ PyJs_Hub_1897_._set_name(u'Hub')
+ var.put(u'Hub', PyJs_Hub_1897_)
+ var.get(u'exports').put(u'default', var.get(u'Hub'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1895_._set_name(u'anonymous')
+PyJs_Object_1898_ = Js({u'babel-runtime/helpers/classCallCheck':Js(110.0)})
+@Js
+def PyJs_anonymous_1899_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'traverse', u'_context', u'_scope', u'module', u'_hub', u'_interopRequireDefault', u'_cache', u'_getIterator2', u'_getIterator3', u'_context2', u'_visitors', u'cache', u'hasBlacklistedType', u'_babelMessages', u'exports', u'_interopRequireWildcard', u'_babelTypes', u'_includes2', u'visitors', u'_includes', u'require', u'messages', u't', u'_path'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1907_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1907_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_traverse_(parent, opts, scope, state, parentPath, this, arguments, var=var):
+ var = Scope({u'state':state, u'arguments':arguments, u'parent':parent, u'parentPath':parentPath, u'this':this, u'scope':scope, u'opts':opts}, var)
+ var.registers([u'scope', u'state', u'opts', u'parent', u'parentPath'])
+ if var.get(u'parent').neg():
+ return var.get('undefined')
+ if var.get(u'opts').neg():
+ PyJs_Object_1908_ = Js({})
+ var.put(u'opts', PyJs_Object_1908_)
+ if (var.get(u'opts').get(u'noScope').neg() and var.get(u'scope').neg()):
+ if (PyJsStrictNeq(var.get(u'parent').get(u'type'),Js(u'Program')) and PyJsStrictNeq(var.get(u'parent').get(u'type'),Js(u'File'))):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(var.get(u'messages').callprop(u'get', Js(u'traverseNeedsParent'), var.get(u'parent').get(u'type'))))
+ raise PyJsTempException
+ var.get(u'visitors').callprop(u'explode', var.get(u'opts'))
+ var.get(u'traverse').callprop(u'node', var.get(u'parent'), var.get(u'opts'), var.get(u'scope'), var.get(u'state'), var.get(u'parentPath'))
+ PyJsHoisted_traverse_.func_name = u'traverse'
+ var.put(u'traverse', PyJsHoisted_traverse_)
+ @Js
+ def PyJsHoisted_hasBlacklistedType_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments}, var)
+ var.registers([u'path', u'state'])
+ if PyJsStrictEq(var.get(u'path').get(u'node').get(u'type'),var.get(u'state').get(u'type')):
+ var.get(u'state').put(u'has', var.get(u'true'))
+ var.get(u'path').callprop(u'stop')
+ PyJsHoisted_hasBlacklistedType_.func_name = u'hasBlacklistedType'
+ var.put(u'hasBlacklistedType', PyJsHoisted_hasBlacklistedType_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1906_ = Js({})
+ var.put(u'newObj', PyJs_Object_1906_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'visitors', var.get(u'exports').put(u'Hub', var.get(u'exports').put(u'Scope', var.get(u'exports').put(u'NodePath', var.get(u'undefined')))))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_path', var.get(u'require')(Js(u'./path')))
+ @Js
+ def PyJs_get_1901_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_1901_}, var)
+ var.registers([])
+ return var.get(u'_interopRequireDefault')(var.get(u'_path')).get(u'default')
+ PyJs_get_1901_._set_name(u'get')
+ PyJs_Object_1900_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_1901_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'NodePath'), PyJs_Object_1900_)
+ var.put(u'_scope', var.get(u'require')(Js(u'./scope')))
+ @Js
+ def PyJs_get_1903_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_1903_}, var)
+ var.registers([])
+ return var.get(u'_interopRequireDefault')(var.get(u'_scope')).get(u'default')
+ PyJs_get_1903_._set_name(u'get')
+ PyJs_Object_1902_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_1903_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'Scope'), PyJs_Object_1902_)
+ var.put(u'_hub', var.get(u'require')(Js(u'./hub')))
+ @Js
+ def PyJs_get_1905_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_1905_}, var)
+ var.registers([])
+ return var.get(u'_interopRequireDefault')(var.get(u'_hub')).get(u'default')
+ PyJs_get_1905_._set_name(u'get')
+ PyJs_Object_1904_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_1905_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'Hub'), PyJs_Object_1904_)
+ var.get(u'exports').put(u'default', var.get(u'traverse'))
+ var.put(u'_context', var.get(u'require')(Js(u'./context')))
+ var.put(u'_context2', var.get(u'_interopRequireDefault')(var.get(u'_context')))
+ var.put(u'_visitors', var.get(u'require')(Js(u'./visitors')))
+ var.put(u'visitors', var.get(u'_interopRequireWildcard')(var.get(u'_visitors')))
+ var.put(u'_babelMessages', var.get(u'require')(Js(u'babel-messages')))
+ var.put(u'messages', var.get(u'_interopRequireWildcard')(var.get(u'_babelMessages')))
+ var.put(u'_includes', var.get(u'require')(Js(u'lodash/includes')))
+ var.put(u'_includes2', var.get(u'_interopRequireDefault')(var.get(u'_includes')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ var.put(u'_cache', var.get(u'require')(Js(u'./cache')))
+ var.put(u'cache', var.get(u'_interopRequireWildcard')(var.get(u'_cache')))
+ pass
+ pass
+ var.get(u'exports').put(u'visitors', var.get(u'visitors'))
+ pass
+ var.get(u'traverse').put(u'visitors', var.get(u'visitors'))
+ var.get(u'traverse').put(u'verify', var.get(u'visitors').get(u'verify'))
+ var.get(u'traverse').put(u'explode', var.get(u'visitors').get(u'explode'))
+ var.get(u'traverse').put(u'NodePath', var.get(u'require')(Js(u'./path')))
+ var.get(u'traverse').put(u'Scope', var.get(u'require')(Js(u'./scope')))
+ var.get(u'traverse').put(u'Hub', var.get(u'require')(Js(u'./hub')))
+ @Js
+ def PyJs_anonymous_1909_(node, enter, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'enter':enter}, var)
+ var.registers([u'node', u'enter'])
+ return var.get(u't').callprop(u'traverseFast', var.get(u'node'), var.get(u'enter'))
+ PyJs_anonymous_1909_._set_name(u'anonymous')
+ var.get(u'traverse').put(u'cheap', PyJs_anonymous_1909_)
+ @Js
+ def PyJs_anonymous_1910_(node, opts, scope, state, parentPath, skipKeys, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'state':state, u'skipKeys':skipKeys, u'parentPath':parentPath, u'scope':scope, u'opts':opts, u'arguments':arguments}, var)
+ var.registers([u'key', u'node', u'_isArray', u'_iterator', u'context', u'keys', u'state', u'skipKeys', u'_i', u'parentPath', u'scope', u'_ref', u'opts'])
+ var.put(u'keys', var.get(u't').get(u'VISITOR_KEYS').get(var.get(u'node').get(u'type')))
+ if var.get(u'keys').neg():
+ return var.get('undefined')
+ var.put(u'context', var.get(u'_context2').get(u'default').create(var.get(u'scope'), var.get(u'opts'), var.get(u'state'), var.get(u'parentPath')))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'keys'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'key', var.get(u'_ref'))
+ if (var.get(u'skipKeys') and var.get(u'skipKeys').get(var.get(u'key'))):
+ continue
+ if var.get(u'context').callprop(u'visit', var.get(u'node'), var.get(u'key')):
+ return var.get('undefined')
+
+ PyJs_anonymous_1910_._set_name(u'anonymous')
+ var.get(u'traverse').put(u'node', PyJs_anonymous_1910_)
+ @Js
+ def PyJs_anonymous_1911_(node, opts, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'node', u'opts'])
+ var.get(u't').callprop(u'removeProperties', var.get(u'node'), var.get(u'opts'))
+ var.get(u'cache').get(u'path').callprop(u'delete', var.get(u'node'))
+ PyJs_anonymous_1911_._set_name(u'anonymous')
+ var.get(u'traverse').put(u'clearNode', PyJs_anonymous_1911_)
+ @Js
+ def PyJs_anonymous_1912_(tree, opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'tree':tree, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'tree', u'opts'])
+ var.get(u't').callprop(u'traverseFast', var.get(u'tree'), var.get(u'traverse').get(u'clearNode'), var.get(u'opts'))
+ return var.get(u'tree')
+ PyJs_anonymous_1912_._set_name(u'anonymous')
+ var.get(u'traverse').put(u'removeProperties', PyJs_anonymous_1912_)
+ pass
+ @Js
+ def PyJs_anonymous_1913_(tree, scope, type, blacklistTypes, this, arguments, var=var):
+ var = Scope({u'arguments':arguments, u'type':type, u'this':this, u'scope':scope, u'tree':tree, u'blacklistTypes':blacklistTypes}, var)
+ var.registers([u'scope', u'state', u'tree', u'blacklistTypes', u'type'])
+ if PyJsComma(Js(0.0),var.get(u'_includes2').get(u'default'))(var.get(u'blacklistTypes'), var.get(u'tree').get(u'type')):
+ return Js(False)
+ if PyJsStrictEq(var.get(u'tree').get(u'type'),var.get(u'type')):
+ return var.get(u'true')
+ PyJs_Object_1914_ = Js({u'has':Js(False),u'type':var.get(u'type')})
+ var.put(u'state', PyJs_Object_1914_)
+ PyJs_Object_1915_ = Js({u'blacklist':var.get(u'blacklistTypes'),u'enter':var.get(u'hasBlacklistedType')})
+ var.get(u'traverse')(var.get(u'tree'), PyJs_Object_1915_, var.get(u'scope'), var.get(u'state'))
+ return var.get(u'state').get(u'has')
+ PyJs_anonymous_1913_._set_name(u'anonymous')
+ var.get(u'traverse').put(u'hasType', PyJs_anonymous_1913_)
+ @Js
+ def PyJs_anonymous_1916_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'cache').callprop(u'clear')
+ PyJs_anonymous_1916_._set_name(u'anonymous')
+ var.get(u'traverse').put(u'clearCache', PyJs_anonymous_1916_)
+ @Js
+ def PyJs_anonymous_1917_(source, destination, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'destination':destination, u'arguments':arguments}, var)
+ var.registers([u'source', u'destination'])
+ if var.get(u'cache').get(u'path').callprop(u'has', var.get(u'source')):
+ var.get(u'cache').get(u'path').callprop(u'set', var.get(u'destination'), var.get(u'cache').get(u'path').callprop(u'get', var.get(u'source')))
+ PyJs_anonymous_1917_._set_name(u'anonymous')
+ var.get(u'traverse').put(u'copyCache', PyJs_anonymous_1917_)
+PyJs_anonymous_1899_._set_name(u'anonymous')
+PyJs_Object_1918_ = Js({u'./cache':Js(222.0),u'./context':Js(223.0),u'./hub':Js(224.0),u'./path':Js(232.0),u'./scope':Js(244.0),u'./visitors':Js(246.0),u'babel-messages':Js(57.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0),u'lodash/includes':Js(456.0)})
+@Js
+def PyJs_anonymous_1919_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'findParent', u'_interopRequireWildcard', u'_index', u'require', u'_babelTypes', u'getAncestry', u'inShadow', u'module', u'inType', u'getStatementParent', u'getEarliestCommonAncestorFrom', u't', u'_index2', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'find', u'getDeepestCommonAncestorFrom', u'getFunctionParent'])
+ @Js
+ def PyJsHoisted_inType_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'_isArray3', u'_ref3', u'_i3', u'path', u'type', u'_iterator3'])
+ var.put(u'path', var.get(u"this"))
+ while var.get(u'path'):
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'arguments'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'type', var.get(u'_ref3'))
+ if PyJsStrictEq(var.get(u'path').get(u'node').get(u'type'),var.get(u'type')):
+ return var.get(u'true')
+
+ var.put(u'path', var.get(u'path').get(u'parentPath'))
+ return Js(False)
+ PyJsHoisted_inType_.func_name = u'inType'
+ var.put(u'inType', PyJsHoisted_inType_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1920_ = Js({})
+ var.put(u'newObj', PyJs_Object_1920_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_findParent_(callback, this, arguments, var=var):
+ var = Scope({u'this':this, u'callback':callback, u'arguments':arguments}, var)
+ var.registers([u'path', u'callback'])
+ var.put(u'path', var.get(u"this"))
+ while var.put(u'path', var.get(u'path').get(u'parentPath')):
+ if var.get(u'callback')(var.get(u'path')):
+ return var.get(u'path')
+ return var.get(u"null")
+ PyJsHoisted_findParent_.func_name = u'findParent'
+ var.put(u'findParent', PyJsHoisted_findParent_)
+ @Js
+ def PyJsHoisted_getAncestry_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'path', u'paths'])
+ var.put(u'path', var.get(u"this"))
+ var.put(u'paths', Js([]))
+ while 1:
+ var.get(u'paths').callprop(u'push', var.get(u'path'))
+ if not var.put(u'path', var.get(u'path').get(u'parentPath')):
+ break
+ return var.get(u'paths')
+ PyJsHoisted_getAncestry_.func_name = u'getAncestry'
+ var.put(u'getAncestry', PyJsHoisted_getAncestry_)
+ @Js
+ def PyJsHoisted_getStatementParent_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.put(u'path', var.get(u"this"))
+ while 1:
+ if var.get(u'Array').callprop(u'isArray', var.get(u'path').get(u'container')):
+ return var.get(u'path')
+ if not var.put(u'path', var.get(u'path').get(u'parentPath')):
+ break
+ PyJsHoisted_getStatementParent_.func_name = u'getStatementParent'
+ var.put(u'getStatementParent', PyJsHoisted_getStatementParent_)
+ @Js
+ def PyJsHoisted_getEarliestCommonAncestorFrom_(paths, this, arguments, var=var):
+ var = Scope({u'this':this, u'paths':paths, u'arguments':arguments}, var)
+ var.registers([u'paths'])
+ @Js
+ def PyJs_anonymous_1923_(deepest, i, ancestries, this, arguments, var=var):
+ var = Scope({u'i':i, u'this':this, u'deepest':deepest, u'arguments':arguments, u'ancestries':ancestries}, var)
+ var.registers([u'_isArray', u'_iterator', u'keys', u'i', u'ancestry', u'earliestKeyIndex', u'deepest', u'_i', u'currentKeyIndex', u'path', u'_ref', u'earliest', u'ancestries'])
+ var.put(u'earliest', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'keys', var.get(u't').get(u'VISITOR_KEYS').get(var.get(u'deepest').get(u'type')))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'ancestries'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'ancestry', var.get(u'_ref'))
+ var.put(u'path', var.get(u'ancestry').get((var.get(u'i')+Js(1.0))))
+ if var.get(u'earliest').neg():
+ var.put(u'earliest', var.get(u'path'))
+ continue
+ if (var.get(u'path').get(u'listKey') and PyJsStrictEq(var.get(u'earliest').get(u'listKey'),var.get(u'path').get(u'listKey'))):
+ if (var.get(u'path').get(u'key')var.get(u'currentKeyIndex')):
+ var.put(u'earliest', var.get(u'path'))
+
+ return var.get(u'earliest')
+ PyJs_anonymous_1923_._set_name(u'anonymous')
+ return var.get(u"this").callprop(u'getDeepestCommonAncestorFrom', var.get(u'paths'), PyJs_anonymous_1923_)
+ PyJsHoisted_getEarliestCommonAncestorFrom_.func_name = u'getEarliestCommonAncestorFrom'
+ var.put(u'getEarliestCommonAncestorFrom', PyJsHoisted_getEarliestCommonAncestorFrom_)
+ @Js
+ def PyJsHoisted_getFunctionParent_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ @Js
+ def PyJs_anonymous_1922_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return (var.get(u'path').callprop(u'isFunction') or var.get(u'path').callprop(u'isProgram'))
+ PyJs_anonymous_1922_._set_name(u'anonymous')
+ return var.get(u"this").callprop(u'findParent', PyJs_anonymous_1922_)
+ PyJsHoisted_getFunctionParent_.func_name = u'getFunctionParent'
+ var.put(u'getFunctionParent', PyJsHoisted_getFunctionParent_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1921_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1921_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_find_(callback, this, arguments, var=var):
+ var = Scope({u'this':this, u'callback':callback, u'arguments':arguments}, var)
+ var.registers([u'path', u'callback'])
+ var.put(u'path', var.get(u"this"))
+ while 1:
+ if var.get(u'callback')(var.get(u'path')):
+ return var.get(u'path')
+ if not var.put(u'path', var.get(u'path').get(u'parentPath')):
+ break
+ return var.get(u"null")
+ PyJsHoisted_find_.func_name = u'find'
+ var.put(u'find', PyJsHoisted_find_)
+ @Js
+ def PyJsHoisted_getDeepestCommonAncestorFrom_(paths, filter, this, arguments, var=var):
+ var = Scope({u'filter':filter, u'paths':paths, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'paths', u'minDepth', u'_isArray2', u'_this', u'i', u'lastCommonIndex', u'_i2', u'_ref2', u'filter', u'ancestry', u'ancestries', u'lastCommon', u'shouldMatch', u'_iterator2', u'first'])
+ var.put(u'_this', var.get(u"this"))
+ if var.get(u'paths').get(u'length').neg():
+ return var.get(u"this")
+ if PyJsStrictEq(var.get(u'paths').get(u'length'),Js(1.0)):
+ return var.get(u'paths').get(u'0')
+ var.put(u'minDepth', var.get(u'Infinity'))
+ var.put(u'lastCommonIndex', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'lastCommon', PyJsComma(Js(0.0), Js(None)))
+ @Js
+ def PyJs_anonymous_1924_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path', u'ancestry'])
+ var.put(u'ancestry', Js([]))
+ while 1:
+ var.get(u'ancestry').callprop(u'unshift', var.get(u'path'))
+ if not (var.put(u'path', var.get(u'path').get(u'parentPath')) and PyJsStrictNeq(var.get(u'path'),var.get(u'_this'))):
+ break
+ if (var.get(u'ancestry').get(u'length')=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'ancestry', var.get(u'_ref2'))
+ if PyJsStrictNeq(var.get(u'ancestry').get(var.get(u'i')),var.get(u'shouldMatch')):
+ raise JS_BREAK_LABEL_64657074684c6f6f70("Breaked")
+
+ var.put(u'lastCommonIndex', var.get(u'i'))
+ var.put(u'lastCommon', var.get(u'shouldMatch'))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ except JS_CONTINUE_LABEL_64657074684c6f6f70:
+ pass
+ except JS_BREAK_LABEL_64657074684c6f6f70:
+ pass
+ if var.get(u'lastCommon'):
+ if var.get(u'filter'):
+ return var.get(u'filter')(var.get(u'lastCommon'), var.get(u'lastCommonIndex'), var.get(u'ancestries'))
+ else:
+ return var.get(u'lastCommon')
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"Couldn't find intersection")))
+ raise PyJsTempException
+ PyJsHoisted_getDeepestCommonAncestorFrom_.func_name = u'getDeepestCommonAncestorFrom'
+ var.put(u'getDeepestCommonAncestorFrom', PyJsHoisted_getDeepestCommonAncestorFrom_)
+ @Js
+ def PyJsHoisted_inShadow_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'shadow', u'parentFn', u'key'])
+ @Js
+ def PyJs_anonymous_1925_(p, this, arguments, var=var):
+ var = Scope({u'this':this, u'p':p, u'arguments':arguments}, var)
+ var.registers([u'p'])
+ return var.get(u'p').callprop(u'isFunction')
+ PyJs_anonymous_1925_._set_name(u'anonymous')
+ var.put(u'parentFn', (var.get(u"this") if var.get(u"this").callprop(u'isFunction') else var.get(u"this").callprop(u'findParent', PyJs_anonymous_1925_)))
+ if var.get(u'parentFn').neg():
+ return var.get('undefined')
+ if (var.get(u'parentFn').callprop(u'isFunctionExpression') or var.get(u'parentFn').callprop(u'isFunctionDeclaration')):
+ var.put(u'shadow', var.get(u'parentFn').get(u'node').get(u'shadow'))
+ if (var.get(u'shadow') and (var.get(u'key').neg() or PyJsStrictNeq(var.get(u'shadow').get(var.get(u'key')),Js(False)))):
+ return var.get(u'parentFn')
+ else:
+ if var.get(u'parentFn').callprop(u'isArrowFunctionExpression'):
+ return var.get(u'parentFn')
+ return var.get(u"null")
+ PyJsHoisted_inShadow_.func_name = u'inShadow'
+ var.put(u'inShadow', PyJsHoisted_inShadow_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'findParent', var.get(u'findParent'))
+ var.get(u'exports').put(u'find', var.get(u'find'))
+ var.get(u'exports').put(u'getFunctionParent', var.get(u'getFunctionParent'))
+ var.get(u'exports').put(u'getStatementParent', var.get(u'getStatementParent'))
+ var.get(u'exports').put(u'getEarliestCommonAncestorFrom', var.get(u'getEarliestCommonAncestorFrom'))
+ var.get(u'exports').put(u'getDeepestCommonAncestorFrom', var.get(u'getDeepestCommonAncestorFrom'))
+ var.get(u'exports').put(u'getAncestry', var.get(u'getAncestry'))
+ var.get(u'exports').put(u'inType', var.get(u'inType'))
+ var.get(u'exports').put(u'inShadow', var.get(u'inShadow'))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ var.put(u'_index', var.get(u'require')(Js(u'./index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_1919_._set_name(u'anonymous')
+PyJs_Object_1926_ = Js({u'./index':Js(232.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1927_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'addComments', u'module', u'shareCommentsWithSiblings', u'addComment'])
+ @Js
+ def PyJsHoisted_addComments_(type, comments, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments, u'comments':comments}, var)
+ var.registers([u'node', u'type', u'comments', u'key'])
+ if var.get(u'comments').neg():
+ return var.get('undefined')
+ var.put(u'node', var.get(u"this").get(u'node'))
+ if var.get(u'node').neg():
+ return var.get('undefined')
+ var.put(u'key', (var.get(u'type')+Js(u'Comments')))
+ if var.get(u'node').get(var.get(u'key')):
+ var.get(u'node').put(var.get(u'key'), var.get(u'node').get(var.get(u'key')).callprop(u'concat', var.get(u'comments')))
+ else:
+ var.get(u'node').put(var.get(u'key'), var.get(u'comments'))
+ PyJsHoisted_addComments_.func_name = u'addComments'
+ var.put(u'addComments', PyJsHoisted_addComments_)
+ @Js
+ def PyJsHoisted_addComment_(type, content, line, this, arguments, var=var):
+ var = Scope({u'content':content, u'this':this, u'line':line, u'type':type, u'arguments':arguments}, var)
+ var.registers([u'content', u'line', u'type'])
+ PyJs_Object_1928_ = Js({u'type':(Js(u'CommentLine') if var.get(u'line') else Js(u'CommentBlock')),u'value':var.get(u'content')})
+ var.get(u"this").callprop(u'addComments', var.get(u'type'), Js([PyJs_Object_1928_]))
+ PyJsHoisted_addComment_.func_name = u'addComment'
+ var.put(u'addComment', PyJsHoisted_addComment_)
+ @Js
+ def PyJsHoisted_shareCommentsWithSiblings_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'leading', u'prev', u'trailing', u'next'])
+ var.put(u'node', var.get(u"this").get(u'node'))
+ if var.get(u'node').neg():
+ return var.get('undefined')
+ var.put(u'trailing', var.get(u'node').get(u'trailingComments'))
+ var.put(u'leading', var.get(u'node').get(u'leadingComments'))
+ if (var.get(u'trailing').neg() and var.get(u'leading').neg()):
+ return var.get('undefined')
+ var.put(u'prev', var.get(u"this").callprop(u'getSibling', (var.get(u"this").get(u'key')-Js(1.0))))
+ var.put(u'next', var.get(u"this").callprop(u'getSibling', (var.get(u"this").get(u'key')+Js(1.0))))
+ if var.get(u'prev').get(u'node').neg():
+ var.put(u'prev', var.get(u'next'))
+ if var.get(u'next').get(u'node').neg():
+ var.put(u'next', var.get(u'prev'))
+ var.get(u'prev').callprop(u'addComments', Js(u'trailing'), var.get(u'leading'))
+ var.get(u'next').callprop(u'addComments', Js(u'leading'), var.get(u'trailing'))
+ PyJsHoisted_shareCommentsWithSiblings_.func_name = u'shareCommentsWithSiblings'
+ var.put(u'shareCommentsWithSiblings', PyJsHoisted_shareCommentsWithSiblings_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'shareCommentsWithSiblings', var.get(u'shareCommentsWithSiblings'))
+ var.get(u'exports').put(u'addComment', var.get(u'addComment'))
+ var.get(u'exports').put(u'addComments', var.get(u'addComments'))
+ pass
+ pass
+ pass
+PyJs_anonymous_1927_._set_name(u'anonymous')
+PyJs_Object_1929_ = Js({})
+@Js
+def PyJs_anonymous_1930_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_getQueueContexts', u'pushContext', u'skip', u'module', u'resync', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'skipKey', u'_call', u'popContext', u'visit', u'setKey', u'call', u'exports', u'_resyncParent', u'_resyncRemoved', u'isBlacklisted', u'stop', u'_resyncList', u'_resyncKey', u'_index2', u'setContext', u'_index', u'setup', u'setScope', u'requeue', u'require'])
+ @Js
+ def PyJsHoisted_popContext_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").get(u'contexts').callprop(u'pop')
+ var.get(u"this").callprop(u'setContext', var.get(u"this").get(u'contexts').get((var.get(u"this").get(u'contexts').get(u'length')-Js(1.0))))
+ PyJsHoisted_popContext_.func_name = u'popContext'
+ var.put(u'popContext', PyJsHoisted_popContext_)
+ @Js
+ def PyJsHoisted_setup_(parentPath, container, listKey, key, this, arguments, var=var):
+ var = Scope({u'container':container, u'arguments':arguments, u'key':key, u'parentPath':parentPath, u'this':this, u'listKey':listKey}, var)
+ var.registers([u'listKey', u'container', u'key', u'parentPath'])
+ var.get(u"this").put(u'inList', var.get(u'listKey').neg().neg())
+ var.get(u"this").put(u'listKey', var.get(u'listKey'))
+ var.get(u"this").put(u'parentKey', (var.get(u'listKey') or var.get(u'key')))
+ var.get(u"this").put(u'container', var.get(u'container'))
+ var.get(u"this").put(u'parentPath', (var.get(u'parentPath') or var.get(u"this").get(u'parentPath')))
+ var.get(u"this").callprop(u'setKey', var.get(u'key'))
+ PyJsHoisted_setup_.func_name = u'setup'
+ var.put(u'setup', PyJsHoisted_setup_)
+ @Js
+ def PyJsHoisted_requeue_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'_isArray2', u'contexts', u'_i2', u'_ref2', u'context', u'pathToQueue', u'_iterator2'])
+ var.put(u'pathToQueue', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else var.get(u"this")))
+ if var.get(u'pathToQueue').get(u'removed'):
+ return var.get('undefined')
+ var.put(u'contexts', var.get(u"this").get(u'contexts'))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'contexts'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'context', var.get(u'_ref2'))
+ var.get(u'context').callprop(u'maybeQueue', var.get(u'pathToQueue'))
+
+ PyJsHoisted_requeue_.func_name = u'requeue'
+ var.put(u'requeue', PyJsHoisted_requeue_)
+ @Js
+ def PyJsHoisted__resyncParent_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u"this").get(u'parentPath'):
+ var.get(u"this").put(u'parent', var.get(u"this").get(u'parentPath').get(u'node'))
+ PyJsHoisted__resyncParent_.func_name = u'_resyncParent'
+ var.put(u'_resyncParent', PyJsHoisted__resyncParent_)
+ @Js
+ def PyJsHoisted__resyncRemoved_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if (((var.get(u"this").get(u'key')==var.get(u"null")) or var.get(u"this").get(u'container').neg()) or PyJsStrictNeq(var.get(u"this").get(u'container').get(var.get(u"this").get(u'key')),var.get(u"this").get(u'node'))):
+ var.get(u"this").callprop(u'_markRemoved')
+ PyJsHoisted__resyncRemoved_.func_name = u'_resyncRemoved'
+ var.put(u'_resyncRemoved', PyJsHoisted__resyncRemoved_)
+ @Js
+ def PyJsHoisted_skip_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").put(u'shouldSkip', var.get(u'true'))
+ PyJsHoisted_skip_.func_name = u'skip'
+ var.put(u'skip', PyJsHoisted_skip_)
+ @Js
+ def PyJsHoisted_resync_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u"this").get(u'removed'):
+ return var.get('undefined')
+ var.get(u"this").callprop(u'_resyncParent')
+ var.get(u"this").callprop(u'_resyncList')
+ var.get(u"this").callprop(u'_resyncKey')
+ PyJsHoisted_resync_.func_name = u'resync'
+ var.put(u'resync', PyJsHoisted_resync_)
+ @Js
+ def PyJsHoisted_isBlacklisted_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'blacklist'])
+ var.put(u'blacklist', var.get(u"this").get(u'opts').get(u'blacklist'))
+ return (var.get(u'blacklist') and (var.get(u'blacklist').callprop(u'indexOf', var.get(u"this").get(u'node').get(u'type'))>(-Js(1.0))))
+ PyJsHoisted_isBlacklisted_.func_name = u'isBlacklisted'
+ var.put(u'isBlacklisted', PyJsHoisted_isBlacklisted_)
+ @Js
+ def PyJsHoisted_visit_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u"this").get(u'node').neg():
+ return Js(False)
+ if var.get(u"this").callprop(u'isBlacklisted'):
+ return Js(False)
+ if (var.get(u"this").get(u'opts').get(u'shouldSkip') and var.get(u"this").get(u'opts').callprop(u'shouldSkip', var.get(u"this"))):
+ return Js(False)
+ if (var.get(u"this").callprop(u'call', Js(u'enter')) or var.get(u"this").get(u'shouldSkip')):
+ @Js
+ def PyJs_anonymous_1933_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return Js(u'Skip...')
+ PyJs_anonymous_1933_._set_name(u'anonymous')
+ var.get(u"this").callprop(u'debug', PyJs_anonymous_1933_)
+ return var.get(u"this").get(u'shouldStop')
+ @Js
+ def PyJs_anonymous_1934_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return Js(u'Recursing into...')
+ PyJs_anonymous_1934_._set_name(u'anonymous')
+ var.get(u"this").callprop(u'debug', PyJs_anonymous_1934_)
+ var.get(u'_index2').get(u'default').callprop(u'node', var.get(u"this").get(u'node'), var.get(u"this").get(u'opts'), var.get(u"this").get(u'scope'), var.get(u"this").get(u'state'), var.get(u"this"), var.get(u"this").get(u'skipKeys'))
+ var.get(u"this").callprop(u'call', Js(u'exit'))
+ return var.get(u"this").get(u'shouldStop')
+ PyJsHoisted_visit_.func_name = u'visit'
+ var.put(u'visit', PyJsHoisted_visit_)
+ @Js
+ def PyJsHoisted__resyncList_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'newContainer'])
+ if (var.get(u"this").get(u'parent').neg() or var.get(u"this").get(u'inList').neg()):
+ return var.get('undefined')
+ var.put(u'newContainer', var.get(u"this").get(u'parent').get(var.get(u"this").get(u'listKey')))
+ if PyJsStrictEq(var.get(u"this").get(u'container'),var.get(u'newContainer')):
+ return var.get('undefined')
+ var.get(u"this").put(u'container', (var.get(u'newContainer') or var.get(u"null")))
+ PyJsHoisted__resyncList_.func_name = u'_resyncList'
+ var.put(u'_resyncList', PyJsHoisted__resyncList_)
+ @Js
+ def PyJsHoisted_stop_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").put(u'shouldStop', var.get(u'true'))
+ var.get(u"this").put(u'shouldSkip', var.get(u'true'))
+ PyJsHoisted_stop_.func_name = u'stop'
+ var.put(u'stop', PyJsHoisted_stop_)
+ @Js
+ def PyJsHoisted__resyncKey_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'key'])
+ if var.get(u"this").get(u'container').neg():
+ return var.get('undefined')
+ if PyJsStrictEq(var.get(u"this").get(u'node'),var.get(u"this").get(u'container').get(var.get(u"this").get(u'key'))):
+ return var.get('undefined')
+ if var.get(u'Array').callprop(u'isArray', var.get(u"this").get(u'container')):
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'fn', var.get(u'_ref'))
+ if var.get(u'fn').neg():
+ continue
+ var.put(u'node', var.get(u"this").get(u'node'))
+ if var.get(u'node').neg():
+ return var.get(u'true')
+ var.put(u'ret', var.get(u'fn').callprop(u'call', var.get(u"this").get(u'state'), var.get(u"this"), var.get(u"this").get(u'state')))
+ if var.get(u'ret'):
+ PyJsTempException = JsToPyException(var.get(u'Error').create((Js(u'Unexpected return value from visitor method ')+var.get(u'fn'))))
+ raise PyJsTempException
+ if PyJsStrictNeq(var.get(u"this").get(u'node'),var.get(u'node')):
+ return var.get(u'true')
+ if ((var.get(u"this").get(u'shouldStop') or var.get(u"this").get(u'shouldSkip')) or var.get(u"this").get(u'removed')):
+ return var.get(u'true')
+
+ return Js(False)
+ PyJsHoisted__call_.func_name = u'_call'
+ var.put(u'_call', PyJsHoisted__call_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'call', var.get(u'call'))
+ var.get(u'exports').put(u'_call', var.get(u'_call'))
+ var.get(u'exports').put(u'isBlacklisted', var.get(u'isBlacklisted'))
+ var.get(u'exports').put(u'visit', var.get(u'visit'))
+ var.get(u'exports').put(u'skip', var.get(u'skip'))
+ var.get(u'exports').put(u'skipKey', var.get(u'skipKey'))
+ var.get(u'exports').put(u'stop', var.get(u'stop'))
+ var.get(u'exports').put(u'setScope', var.get(u'setScope'))
+ var.get(u'exports').put(u'setContext', var.get(u'setContext'))
+ var.get(u'exports').put(u'resync', var.get(u'resync'))
+ var.get(u'exports').put(u'_resyncParent', var.get(u'_resyncParent'))
+ var.get(u'exports').put(u'_resyncKey', var.get(u'_resyncKey'))
+ var.get(u'exports').put(u'_resyncList', var.get(u'_resyncList'))
+ var.get(u'exports').put(u'_resyncRemoved', var.get(u'_resyncRemoved'))
+ var.get(u'exports').put(u'popContext', var.get(u'popContext'))
+ var.get(u'exports').put(u'pushContext', var.get(u'pushContext'))
+ var.get(u'exports').put(u'setup', var.get(u'setup'))
+ var.get(u'exports').put(u'setKey', var.get(u'setKey'))
+ var.get(u'exports').put(u'requeue', var.get(u'requeue'))
+ var.get(u'exports').put(u'_getQueueContexts', var.get(u'_getQueueContexts'))
+ var.put(u'_index', var.get(u'require')(Js(u'../index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_1930_._set_name(u'anonymous')
+PyJs_Object_1936_ = Js({u'../index':Js(225.0),u'babel-runtime/core-js/get-iterator':Js(96.0)})
+@Js
+def PyJs_anonymous_1937_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'arrowFunctionToShadowed', u'_interopRequireWildcard', u'toComputedKey', u'_babelTypes', u'module', u't', u'ensureBlock', u'require'])
+ @Js
+ def PyJsHoisted_toComputedKey_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'key'])
+ var.put(u'node', var.get(u"this").get(u'node'))
+ var.put(u'key', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u"this").callprop(u'isMemberExpression'):
+ var.put(u'key', var.get(u'node').get(u'property'))
+ else:
+ if (var.get(u"this").callprop(u'isProperty') or var.get(u"this").callprop(u'isMethod')):
+ var.put(u'key', var.get(u'node').get(u'key'))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'ReferenceError').create(Js(u'todo')))
+ raise PyJsTempException
+ if var.get(u'node').get(u'computed').neg():
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'key')):
+ var.put(u'key', var.get(u't').callprop(u'stringLiteral', var.get(u'key').get(u'name')))
+ return var.get(u'key')
+ PyJsHoisted_toComputedKey_.func_name = u'toComputedKey'
+ var.put(u'toComputedKey', PyJsHoisted_toComputedKey_)
+ @Js
+ def PyJsHoisted_arrowFunctionToShadowed_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").callprop(u'isArrowFunctionExpression').neg():
+ return var.get('undefined')
+ var.get(u"this").callprop(u'ensureBlock')
+ var.put(u'node', var.get(u"this").get(u'node'))
+ var.get(u'node').put(u'expression', Js(False))
+ var.get(u'node').put(u'type', Js(u'FunctionExpression'))
+ var.get(u'node').put(u'shadow', (var.get(u'node').get(u'shadow') or var.get(u'true')))
+ PyJsHoisted_arrowFunctionToShadowed_.func_name = u'arrowFunctionToShadowed'
+ var.put(u'arrowFunctionToShadowed', PyJsHoisted_arrowFunctionToShadowed_)
+ @Js
+ def PyJsHoisted_ensureBlock_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'ensureBlock', var.get(u"this").get(u'node'))
+ PyJsHoisted_ensureBlock_.func_name = u'ensureBlock'
+ var.put(u'ensureBlock', PyJsHoisted_ensureBlock_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1938_ = Js({})
+ var.put(u'newObj', PyJs_Object_1938_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'toComputedKey', var.get(u'toComputedKey'))
+ var.get(u'exports').put(u'ensureBlock', var.get(u'ensureBlock'))
+ var.get(u'exports').put(u'arrowFunctionToShadowed', var.get(u'arrowFunctionToShadowed'))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_1937_._set_name(u'anonymous')
+PyJs_Object_1939_ = Js({u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1940_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_1941_ = Js({})
+ @Js
+ def PyJs_anonymous_1942_(PyJsArg_676c6f62616c_, this, arguments, var=var):
+ var = Scope({u'this':this, u'global':PyJsArg_676c6f62616c_, u'arguments':arguments}, var)
+ var.registers([u'_typeof2', u'_typeof3', u'_map', u'INVALID_METHODS', u'VALID_CALLEES', u'evaluateTruthy', u'global', u'evaluate', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'_map2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1943_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1943_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_evaluate_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'deoptPath', u'evaluate', u'value', u'_evaluate', u'confident', u'deopt', u'seen'])
+ @Js
+ def PyJsHoisted_evaluate_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'node', u'item', u'path', u'val', u'existing'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u'seen').callprop(u'has', var.get(u'node')):
+ var.put(u'existing', var.get(u'seen').callprop(u'get', var.get(u'node')))
+ if var.get(u'existing').get(u'resolved'):
+ return var.get(u'existing').get(u'value')
+ else:
+ var.get(u'deopt')(var.get(u'path'))
+ return var.get('undefined')
+ else:
+ PyJs_Object_1945_ = Js({u'resolved':Js(False)})
+ var.put(u'item', PyJs_Object_1945_)
+ var.get(u'seen').callprop(u'set', var.get(u'node'), var.get(u'item'))
+ var.put(u'val', var.get(u'_evaluate')(var.get(u'path')))
+ if var.get(u'confident'):
+ var.get(u'item').put(u'resolved', var.get(u'true'))
+ var.get(u'item').put(u'value', var.get(u'val'))
+ return var.get(u'val')
+ PyJsHoisted_evaluate_.func_name = u'evaluate'
+ var.put(u'evaluate', PyJsHoisted_evaluate_)
+ @Js
+ def PyJsHoisted_deopt_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ if var.get(u'confident').neg():
+ return var.get('undefined')
+ var.put(u'deoptPath', var.get(u'path'))
+ var.put(u'confident', Js(False))
+ PyJsHoisted_deopt_.func_name = u'deopt'
+ var.put(u'deopt', PyJsHoisted_deopt_)
+ @Js
+ def PyJsHoisted__evaluate_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'resolved', u'arr', u'right', u'_isArray3', u'_isArray2', u'leftConfident', u'binding', u'argument', u'_ref2', u'_object', u'_value2', u'arg', u'_ref', u'_exprs', u'_iterator', u'_right', u'_i3', u'_i2', u'prop', u'_i', u'props', u'wasConfident', u'type', u'_left', u'node', u'_type', u'args', u'func', u'testResult', u'object', u'elems', u'_value', u'_elem', u'key', u'path', u'_isArray', u'context', u'obj', u'left', u'valuePath', u'i', u'expr', u'keyPath', u'_ref3', u'elem', u'rightConfident', u'exprs', u'str', u'_property', u'property', u'callee', u'_iterator3', u'_iterator2'])
+ if var.get(u'confident').neg():
+ return var.get('undefined')
+ var.put(u'node', var.get(u'path').get(u'node'))
+ if var.get(u'path').callprop(u'isSequenceExpression'):
+ var.put(u'exprs', var.get(u'path').callprop(u'get', Js(u'expressions')))
+ return var.get(u'evaluate')(var.get(u'exprs').get((var.get(u'exprs').get(u'length')-Js(1.0))))
+ if ((var.get(u'path').callprop(u'isStringLiteral') or var.get(u'path').callprop(u'isNumericLiteral')) or var.get(u'path').callprop(u'isBooleanLiteral')):
+ return var.get(u'node').get(u'value')
+ if var.get(u'path').callprop(u'isNullLiteral'):
+ return var.get(u"null")
+ if var.get(u'path').callprop(u'isTemplateLiteral'):
+ var.put(u'str', Js(u''))
+ var.put(u'i', Js(0.0))
+ var.put(u'_exprs', var.get(u'path').callprop(u'get', Js(u'expressions')))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'node').get(u'quasis'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'elem', var.get(u'_ref'))
+ if var.get(u'confident').neg():
+ break
+ var.put(u'str', var.get(u'elem').get(u'value').get(u'cooked'), u'+')
+ var.put(u'expr', var.get(u'_exprs').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))
+ if var.get(u'expr'):
+ var.put(u'str', var.get(u'String')(var.get(u'evaluate')(var.get(u'expr'))), u'+')
+
+ if var.get(u'confident').neg():
+ return var.get('undefined')
+ return var.get(u'str')
+ if var.get(u'path').callprop(u'isConditionalExpression'):
+ var.put(u'testResult', var.get(u'evaluate')(var.get(u'path').callprop(u'get', Js(u'test'))))
+ if var.get(u'confident').neg():
+ return var.get('undefined')
+ if var.get(u'testResult'):
+ return var.get(u'evaluate')(var.get(u'path').callprop(u'get', Js(u'consequent')))
+ else:
+ return var.get(u'evaluate')(var.get(u'path').callprop(u'get', Js(u'alternate')))
+ if var.get(u'path').callprop(u'isExpressionWrapper'):
+ return var.get(u'evaluate')(var.get(u'path').callprop(u'get', Js(u'expression')))
+ PyJs_Object_1946_ = Js({u'callee':var.get(u'node')})
+ if (var.get(u'path').callprop(u'isMemberExpression') and var.get(u'path').get(u'parentPath').callprop(u'isCallExpression', PyJs_Object_1946_).neg()):
+ var.put(u'property', var.get(u'path').callprop(u'get', Js(u'property')))
+ var.put(u'object', var.get(u'path').callprop(u'get', Js(u'object')))
+ if (var.get(u'object').callprop(u'isLiteral') and var.get(u'property').callprop(u'isIdentifier')):
+ var.put(u'_value', var.get(u'object').get(u'node').get(u'value'))
+ var.put(u'type', (Js(u'undefined') if PyJsStrictEq(var.get(u'_value',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'_value'))))
+ if (PyJsStrictEq(var.get(u'type'),Js(u'number')) or PyJsStrictEq(var.get(u'type'),Js(u'string'))):
+ return var.get(u'_value').get(var.get(u'property').get(u'node').get(u'name'))
+ if var.get(u'path').callprop(u'isReferencedIdentifier'):
+ var.put(u'binding', var.get(u'path').get(u'scope').callprop(u'getBinding', var.get(u'node').get(u'name')))
+ if (var.get(u'binding') and (var.get(u'binding').get(u'constantViolations').get(u'length')>Js(0.0))):
+ return var.get(u'deopt')(var.get(u'binding').get(u'path'))
+ if (var.get(u'binding') and var.get(u'binding').get(u'hasValue')):
+ return var.get(u'binding').get(u'value')
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'undefined')):
+ return var.get(u'undefined')
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'Infinity')):
+ return var.get(u'Infinity')
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'NaN')):
+ return var.get(u'NaN')
+ var.put(u'resolved', var.get(u'path').callprop(u'resolve'))
+ if PyJsStrictEq(var.get(u'resolved'),var.get(u'path')):
+ return var.get(u'deopt')(var.get(u'path'))
+ else:
+ return var.get(u'evaluate')(var.get(u'resolved'))
+ PyJs_Object_1947_ = Js({u'prefix':var.get(u'true')})
+ if var.get(u'path').callprop(u'isUnaryExpression', PyJs_Object_1947_):
+ if PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'void')):
+ return var.get(u'undefined')
+ var.put(u'argument', var.get(u'path').callprop(u'get', Js(u'argument')))
+ if (PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'typeof')) and (var.get(u'argument').callprop(u'isFunction') or var.get(u'argument').callprop(u'isClass'))):
+ return Js(u'function')
+ var.put(u'arg', var.get(u'evaluate')(var.get(u'argument')))
+ if var.get(u'confident').neg():
+ return var.get('undefined')
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'node').get(u'operator'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'!')):
+ SWITCHED = True
+ return var.get(u'arg').neg()
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'+')):
+ SWITCHED = True
+ return (+var.get(u'arg'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'-')):
+ SWITCHED = True
+ return (-var.get(u'arg'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'~')):
+ SWITCHED = True
+ return (~var.get(u'arg'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'typeof')):
+ SWITCHED = True
+ return (Js(u'undefined') if PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'arg')))
+ SWITCHED = True
+ break
+ if var.get(u'path').callprop(u'isArrayExpression'):
+ var.put(u'arr', Js([]))
+ var.put(u'elems', var.get(u'path').callprop(u'get', Js(u'elements')))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'elems'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'_elem', var.get(u'_ref2'))
+ var.put(u'_elem', var.get(u'_elem').callprop(u'evaluate'))
+ if var.get(u'_elem').get(u'confident'):
+ var.get(u'arr').callprop(u'push', var.get(u'_elem').get(u'value'))
+ else:
+ return var.get(u'deopt')(var.get(u'_elem'))
+
+ return var.get(u'arr')
+ if var.get(u'path').callprop(u'isObjectExpression'):
+ PyJs_Object_1948_ = Js({})
+ var.put(u'obj', PyJs_Object_1948_)
+ var.put(u'props', var.get(u'path').callprop(u'get', Js(u'properties')))
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'props'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'prop', var.get(u'_ref3'))
+ if (var.get(u'prop').callprop(u'isObjectMethod') or var.get(u'prop').callprop(u'isSpreadProperty')):
+ return var.get(u'deopt')(var.get(u'prop'))
+ var.put(u'keyPath', var.get(u'prop').callprop(u'get', Js(u'key')))
+ var.put(u'key', var.get(u'keyPath'))
+ if var.get(u'prop').get(u'node').get(u'computed'):
+ var.put(u'key', var.get(u'key').callprop(u'evaluate'))
+ if var.get(u'key').get(u'confident').neg():
+ return var.get(u'deopt')(var.get(u'keyPath'))
+ var.put(u'key', var.get(u'key').get(u'value'))
+ else:
+ if var.get(u'key').callprop(u'isIdentifier'):
+ var.put(u'key', var.get(u'key').get(u'node').get(u'name'))
+ else:
+ var.put(u'key', var.get(u'key').get(u'node').get(u'value'))
+ var.put(u'valuePath', var.get(u'prop').callprop(u'get', Js(u'value')))
+ var.put(u'_value2', var.get(u'valuePath').callprop(u'evaluate'))
+ if var.get(u'_value2').get(u'confident').neg():
+ return var.get(u'deopt')(var.get(u'valuePath'))
+ var.put(u'_value2', var.get(u'_value2').get(u'value'))
+ var.get(u'obj').put(var.get(u'key'), var.get(u'_value2'))
+
+ return var.get(u'obj')
+ if var.get(u'path').callprop(u'isLogicalExpression'):
+ var.put(u'wasConfident', var.get(u'confident'))
+ var.put(u'left', var.get(u'evaluate')(var.get(u'path').callprop(u'get', Js(u'left'))))
+ var.put(u'leftConfident', var.get(u'confident'))
+ var.put(u'confident', var.get(u'wasConfident'))
+ var.put(u'right', var.get(u'evaluate')(var.get(u'path').callprop(u'get', Js(u'right'))))
+ var.put(u'rightConfident', var.get(u'confident'))
+ var.put(u'confident', (var.get(u'leftConfident') and var.get(u'rightConfident')))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'node').get(u'operator'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'||')):
+ SWITCHED = True
+ if (var.get(u'left') and var.get(u'leftConfident')):
+ var.put(u'confident', var.get(u'true'))
+ return var.get(u'left')
+ if var.get(u'confident').neg():
+ return var.get('undefined')
+ return (var.get(u'left') or var.get(u'right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'&&')):
+ SWITCHED = True
+ if ((var.get(u'left').neg() and var.get(u'leftConfident')) or (var.get(u'right').neg() and var.get(u'rightConfident'))):
+ var.put(u'confident', var.get(u'true'))
+ if var.get(u'confident').neg():
+ return var.get('undefined')
+ return (var.get(u'left') and var.get(u'right'))
+ SWITCHED = True
+ break
+ if var.get(u'path').callprop(u'isBinaryExpression'):
+ var.put(u'_left', var.get(u'evaluate')(var.get(u'path').callprop(u'get', Js(u'left'))))
+ if var.get(u'confident').neg():
+ return var.get('undefined')
+ var.put(u'_right', var.get(u'evaluate')(var.get(u'path').callprop(u'get', Js(u'right'))))
+ if var.get(u'confident').neg():
+ return var.get('undefined')
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'node').get(u'operator'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'-')):
+ SWITCHED = True
+ return (var.get(u'_left')-var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'+')):
+ SWITCHED = True
+ return (var.get(u'_left')+var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'/')):
+ SWITCHED = True
+ return (var.get(u'_left')/var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'*')):
+ SWITCHED = True
+ return (var.get(u'_left')*var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'%')):
+ SWITCHED = True
+ return (var.get(u'_left')%var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'**')):
+ SWITCHED = True
+ return var.get(u'Math').callprop(u'pow', var.get(u'_left'), var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'<')):
+ SWITCHED = True
+ return (var.get(u'_left')')):
+ SWITCHED = True
+ return (var.get(u'_left')>var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'<=')):
+ SWITCHED = True
+ return (var.get(u'_left')<=var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'>=')):
+ SWITCHED = True
+ return (var.get(u'_left')>=var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'==')):
+ SWITCHED = True
+ return (var.get(u'_left')==var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'!=')):
+ SWITCHED = True
+ return (var.get(u'_left')!=var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'===')):
+ SWITCHED = True
+ return PyJsStrictEq(var.get(u'_left'),var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'!==')):
+ SWITCHED = True
+ return PyJsStrictNeq(var.get(u'_left'),var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'|')):
+ SWITCHED = True
+ return (var.get(u'_left')|var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'&')):
+ SWITCHED = True
+ return (var.get(u'_left')&var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'^')):
+ SWITCHED = True
+ return (var.get(u'_left')^var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'<<')):
+ SWITCHED = True
+ return (var.get(u'_left')<>')):
+ SWITCHED = True
+ return (var.get(u'_left')>>var.get(u'_right'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'>>>')):
+ SWITCHED = True
+ return PyJsBshift(var.get(u'_left'),var.get(u'_right'))
+ SWITCHED = True
+ break
+ if var.get(u'path').callprop(u'isCallExpression'):
+ var.put(u'callee', var.get(u'path').callprop(u'get', Js(u'callee')))
+ var.put(u'context', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'func', PyJsComma(Js(0.0), Js(None)))
+ if ((var.get(u'callee').callprop(u'isIdentifier') and var.get(u'path').get(u'scope').callprop(u'getBinding', var.get(u'callee').get(u'node').get(u'name'), var.get(u'true')).neg()) and (var.get(u'VALID_CALLEES').callprop(u'indexOf', var.get(u'callee').get(u'node').get(u'name'))>=Js(0.0))):
+ var.put(u'func', var.get(u'global').get(var.get(u'node').get(u'callee').get(u'name')))
+ if var.get(u'callee').callprop(u'isMemberExpression'):
+ var.put(u'_object', var.get(u'callee').callprop(u'get', Js(u'object')))
+ var.put(u'_property', var.get(u'callee').callprop(u'get', Js(u'property')))
+ if (((var.get(u'_object').callprop(u'isIdentifier') and var.get(u'_property').callprop(u'isIdentifier')) and (var.get(u'VALID_CALLEES').callprop(u'indexOf', var.get(u'_object').get(u'node').get(u'name'))>=Js(0.0))) and (var.get(u'INVALID_METHODS').callprop(u'indexOf', var.get(u'_property').get(u'node').get(u'name'))=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'part', var.get(u'_ref'))
+ if PyJsStrictEq(var.get(u'part'),Js(u'.')):
+ var.put(u'path', var.get(u'path').get(u'parentPath'))
+ else:
+ if var.get(u'Array').callprop(u'isArray', var.get(u'path')):
+ var.put(u'path', var.get(u'path').get(var.get(u'part')))
+ else:
+ var.put(u'path', var.get(u'path').callprop(u'get', var.get(u'part'), var.get(u'context')))
+
+ return var.get(u'path')
+ PyJsHoisted__getPattern_.func_name = u'_getPattern'
+ var.put(u'_getPattern', PyJsHoisted__getPattern_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'getStatementParent', var.get(u'getStatementParent'))
+ var.get(u'exports').put(u'getOpposite', var.get(u'getOpposite'))
+ var.get(u'exports').put(u'getCompletionRecords', var.get(u'getCompletionRecords'))
+ var.get(u'exports').put(u'getSibling', var.get(u'getSibling'))
+ var.get(u'exports').put(u'get', var.get(u'get'))
+ var.get(u'exports').put(u'_getKey', var.get(u'_getKey'))
+ var.get(u'exports').put(u'_getPattern', var.get(u'_getPattern'))
+ var.get(u'exports').put(u'getBindingIdentifiers', var.get(u'getBindingIdentifiers'))
+ var.get(u'exports').put(u'getOuterBindingIdentifiers', var.get(u'getOuterBindingIdentifiers'))
+ var.put(u'_index', var.get(u'require')(Js(u'./index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_1950_._set_name(u'anonymous')
+PyJs_Object_1958_ = Js({u'./index':Js(232.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1959_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'module', u'_scope', u'_ret', u'_invariant2', u'_virtualTypes', u'_ret2', u'_loop2', u'_interopRequireDefault', u'_cache', u'_getIterator2', u'_getIterator3', u'virtualTypes', u'_iterator', u'_debug', u'_i', u'_classCallCheck3', u'_classCallCheck2', u'type', u'NodePath', u'exports', u'_assign', u'_interopRequireWildcard', u'_babelTypes', u'_debug3', u'_debug2', u'_index2', u'_loop', u'_assign2', u'_isArray', u'_index', u'require', u'_ref2', u't', u'_scope2', u'_invariant'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1961_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1961_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1960_ = Js({})
+ var.put(u'newObj', PyJs_Object_1960_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_virtualTypes', var.get(u'require')(Js(u'./lib/virtual-types')))
+ var.put(u'virtualTypes', var.get(u'_interopRequireWildcard')(var.get(u'_virtualTypes')))
+ var.put(u'_debug2', var.get(u'require')(Js(u'debug')))
+ var.put(u'_debug3', var.get(u'_interopRequireDefault')(var.get(u'_debug2')))
+ var.put(u'_invariant', var.get(u'require')(Js(u'invariant')))
+ var.put(u'_invariant2', var.get(u'_interopRequireDefault')(var.get(u'_invariant')))
+ var.put(u'_index', var.get(u'require')(Js(u'../index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ var.put(u'_assign', var.get(u'require')(Js(u'lodash/assign')))
+ var.put(u'_assign2', var.get(u'_interopRequireDefault')(var.get(u'_assign')))
+ var.put(u'_scope', var.get(u'require')(Js(u'../scope')))
+ var.put(u'_scope2', var.get(u'_interopRequireDefault')(var.get(u'_scope')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ var.put(u'_cache', var.get(u'require')(Js(u'../cache')))
+ pass
+ pass
+ var.put(u'_debug', PyJsComma(Js(0.0),var.get(u'_debug3').get(u'default'))(Js(u'babel')))
+ @Js
+ def PyJs_anonymous_1962_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'NodePath'])
+ @Js
+ def PyJsHoisted_NodePath_(hub, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'parent':parent, u'hub':hub, u'arguments':arguments}, var)
+ var.registers([u'parent', u'hub'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'NodePath'))
+ var.get(u"this").put(u'parent', var.get(u'parent'))
+ var.get(u"this").put(u'hub', var.get(u'hub'))
+ var.get(u"this").put(u'contexts', Js([]))
+ PyJs_Object_1963_ = Js({})
+ var.get(u"this").put(u'data', PyJs_Object_1963_)
+ var.get(u"this").put(u'shouldSkip', Js(False))
+ var.get(u"this").put(u'shouldStop', Js(False))
+ var.get(u"this").put(u'removed', Js(False))
+ var.get(u"this").put(u'state', var.get(u"null"))
+ var.get(u"this").put(u'opts', var.get(u"null"))
+ var.get(u"this").put(u'skipKeys', var.get(u"null"))
+ var.get(u"this").put(u'parentPath', var.get(u"null"))
+ var.get(u"this").put(u'context', var.get(u"null"))
+ var.get(u"this").put(u'container', var.get(u"null"))
+ var.get(u"this").put(u'listKey', var.get(u"null"))
+ var.get(u"this").put(u'inList', Js(False))
+ var.get(u"this").put(u'parentKey', var.get(u"null"))
+ var.get(u"this").put(u'key', var.get(u"null"))
+ var.get(u"this").put(u'node', var.get(u"null"))
+ var.get(u"this").put(u'scope', var.get(u"null"))
+ var.get(u"this").put(u'type', var.get(u"null"))
+ var.get(u"this").put(u'typeAnnotation', var.get(u"null"))
+ PyJsHoisted_NodePath_.func_name = u'NodePath'
+ var.put(u'NodePath', PyJsHoisted_NodePath_)
+ pass
+ @Js
+ def PyJs_get_1964_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments, u'get':PyJs_get_1964_}, var)
+ var.registers([u'paths', u'container', u'hub', u'parent', u'i', u'listKey', u'targetNode', u'key', u'parentPath', u'path', u'pathCheck', u'_ref'])
+ var.put(u'hub', var.get(u'_ref').get(u'hub'))
+ var.put(u'parentPath', var.get(u'_ref').get(u'parentPath'))
+ var.put(u'parent', var.get(u'_ref').get(u'parent'))
+ var.put(u'container', var.get(u'_ref').get(u'container'))
+ var.put(u'listKey', var.get(u'_ref').get(u'listKey'))
+ var.put(u'key', var.get(u'_ref').get(u'key'))
+ if (var.get(u'hub').neg() and var.get(u'parentPath')):
+ var.put(u'hub', var.get(u'parentPath').get(u'hub'))
+ PyJsComma(Js(0.0),var.get(u'_invariant2').get(u'default'))(var.get(u'parent'), Js(u'To get a node path the parent needs to exist'))
+ var.put(u'targetNode', var.get(u'container').get(var.get(u'key')))
+ var.put(u'paths', (var.get(u'_cache').get(u'path').callprop(u'get', var.get(u'parent')) or Js([])))
+ if var.get(u'_cache').get(u'path').callprop(u'has', var.get(u'parent')).neg():
+ var.get(u'_cache').get(u'path').callprop(u'set', var.get(u'parent'), var.get(u'paths'))
+ var.put(u'path', PyJsComma(Js(0.0), Js(None)))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else var.get(u'SyntaxError')))
+ return var.get(u"this").get(u'hub').get(u'file').callprop(u'buildCodeFrameError', var.get(u"this").get(u'node'), var.get(u'msg'), var.get(u'Error'))
+ PyJs_buildCodeFrameError_1968_._set_name(u'buildCodeFrameError')
+ var.get(u'NodePath').get(u'prototype').put(u'buildCodeFrameError', PyJs_buildCodeFrameError_1968_)
+ @Js
+ def PyJs_traverse_1969_(visitor, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'visitor':visitor, u'state':state, u'arguments':arguments, u'traverse':PyJs_traverse_1969_}, var)
+ var.registers([u'visitor', u'state'])
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(var.get(u"this").get(u'node'), var.get(u'visitor'), var.get(u"this").get(u'scope'), var.get(u'state'), var.get(u"this"))
+ PyJs_traverse_1969_._set_name(u'traverse')
+ var.get(u'NodePath').get(u'prototype').put(u'traverse', PyJs_traverse_1969_)
+ @Js
+ def PyJs_mark_1970_(type, message, this, arguments, var=var):
+ var = Scope({u'this':this, u'message':message, u'type':type, u'arguments':arguments, u'mark':PyJs_mark_1970_}, var)
+ var.registers([u'message', u'type'])
+ PyJs_Object_1971_ = Js({u'type':var.get(u'type'),u'message':var.get(u'message'),u'loc':var.get(u"this").get(u'node').get(u'loc')})
+ var.get(u"this").get(u'hub').get(u'file').get(u'metadata').get(u'marked').callprop(u'push', PyJs_Object_1971_)
+ PyJs_mark_1970_._set_name(u'mark')
+ var.get(u'NodePath').get(u'prototype').put(u'mark', PyJs_mark_1970_)
+ @Js
+ def PyJs_set_1972_(key, node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'set':PyJs_set_1972_, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'node', u'key'])
+ var.get(u't').callprop(u'validate', var.get(u"this").get(u'node'), var.get(u'key'), var.get(u'node'))
+ var.get(u"this").get(u'node').put(var.get(u'key'), var.get(u'node'))
+ PyJs_set_1972_._set_name(u'set')
+ var.get(u'NodePath').get(u'prototype').put(u'set', PyJs_set_1972_)
+ @Js
+ def PyJs_getPathLocation_1973_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getPathLocation':PyJs_getPathLocation_1973_, u'arguments':arguments}, var)
+ var.registers([u'path', u'parts', u'key'])
+ var.put(u'parts', Js([]))
+ var.put(u'path', var.get(u"this"))
+ while 1:
+ var.put(u'key', var.get(u'path').get(u'key'))
+ if var.get(u'path').get(u'inList'):
+ var.put(u'key', (((var.get(u'path').get(u'listKey')+Js(u'['))+var.get(u'key'))+Js(u']')))
+ var.get(u'parts').callprop(u'unshift', var.get(u'key'))
+ if not var.put(u'path', var.get(u'path').get(u'parentPath')):
+ break
+ return var.get(u'parts').callprop(u'join', Js(u'.'))
+ PyJs_getPathLocation_1973_._set_name(u'getPathLocation')
+ var.get(u'NodePath').get(u'prototype').put(u'getPathLocation', PyJs_getPathLocation_1973_)
+ @Js
+ def PyJs_debug_1974_(buildMessage, this, arguments, var=var):
+ var = Scope({u'this':this, u'buildMessage':buildMessage, u'arguments':arguments, u'debug':PyJs_debug_1974_}, var)
+ var.registers([u'buildMessage'])
+ if var.get(u'_debug').get(u'enabled').neg():
+ return var.get('undefined')
+ var.get(u'_debug')(((((var.get(u"this").callprop(u'getPathLocation')+Js(u' '))+var.get(u"this").get(u'type'))+Js(u': '))+var.get(u'buildMessage')()))
+ PyJs_debug_1974_._set_name(u'debug')
+ var.get(u'NodePath').get(u'prototype').put(u'debug', PyJs_debug_1974_)
+ return var.get(u'NodePath')
+ PyJs_anonymous_1962_._set_name(u'anonymous')
+ var.put(u'NodePath', PyJs_anonymous_1962_())
+ var.get(u'exports').put(u'default', var.get(u'NodePath'))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./ancestry')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./inference')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./replacement')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./evaluation')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./conversion')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./introspection')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./context')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./removal')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./modification')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./family')))
+ PyJsComma(Js(0.0),var.get(u'_assign2').get(u'default'))(var.get(u'NodePath').get(u'prototype'), var.get(u'require')(Js(u'./comments')))
+ @Js
+ def PyJs__loop2_1975_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'_loop2':PyJs__loop2_1975_}, var)
+ var.registers([u'typeKey', u'type'])
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ return Js(u'break')
+ var.put(u'_ref2', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ return Js(u'break')
+ var.put(u'_ref2', var.get(u'_i').get(u'value'))
+ var.put(u'type', var.get(u'_ref2'))
+ var.put(u'typeKey', (Js(u'is')+var.get(u'type')))
+ @Js
+ def PyJs_anonymous_1976_(opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'opts'])
+ return var.get(u't').callprop(var.get(u'typeKey'), var.get(u"this").get(u'node'), var.get(u'opts'))
+ PyJs_anonymous_1976_._set_name(u'anonymous')
+ var.get(u'NodePath').get(u'prototype').put(var.get(u'typeKey'), PyJs_anonymous_1976_)
+ @Js
+ def PyJs_anonymous_1977_(opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'opts'])
+ if var.get(u"this").callprop(var.get(u'typeKey'), var.get(u'opts')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((Js(u'Expected node path of type ')+var.get(u'type'))))
+ raise PyJsTempException
+ PyJs_anonymous_1977_._set_name(u'anonymous')
+ var.get(u'NodePath').get(u'prototype').put((Js(u'assert')+var.get(u'type')), PyJs_anonymous_1977_)
+ PyJs__loop2_1975_._set_name(u'_loop2')
+ var.put(u'_loop2', PyJs__loop2_1975_)
+ #for JS loop
+ var.put(u'_iterator', var.get(u't').get(u'TYPES'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ var.put(u'_ret2', var.get(u'_loop2')())
+ if PyJsStrictEq(var.get(u'_ret2'),Js(u'break')):
+ break
+
+ @Js
+ def PyJs__loop_1978_(type, this, arguments, var=var):
+ var = Scope({u'this':this, u'_loop':PyJs__loop_1978_, u'type':type, u'arguments':arguments}, var)
+ var.registers([u'virtualType', u'type'])
+ if PyJsStrictEq(var.get(u'type').get(u'0'),Js(u'_')):
+ return Js(u'continue')
+ if (var.get(u't').get(u'TYPES').callprop(u'indexOf', var.get(u'type'))=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'type2', var.get(u'_ref'))
+ if (var.get(u't').callprop(u'isAnyTypeAnnotation', var.get(u'type2')) or var.get(u'_isBaseType')(var.get(u'name'), var.get(u'type2'), var.get(u'true'))):
+ return var.get(u'true')
+
+ return Js(False)
+ else:
+ return var.get(u'_isBaseType')(var.get(u'name'), var.get(u'type'), var.get(u'true'))
+ PyJsHoisted_couldBeBaseType_.func_name = u'couldBeBaseType'
+ var.put(u'couldBeBaseType', PyJsHoisted_couldBeBaseType_)
+ @Js
+ def PyJsHoisted_getTypeAnnotation_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'type'])
+ if var.get(u"this").get(u'typeAnnotation'):
+ return var.get(u"this").get(u'typeAnnotation')
+ var.put(u'type', (var.get(u"this").callprop(u'_getTypeAnnotation') or var.get(u't').callprop(u'anyTypeAnnotation')))
+ if var.get(u't').callprop(u'isTypeAnnotation', var.get(u'type')):
+ var.put(u'type', var.get(u'type').get(u'typeAnnotation'))
+ return var.get(u"this").put(u'typeAnnotation', var.get(u'type'))
+ PyJsHoisted_getTypeAnnotation_.func_name = u'getTypeAnnotation'
+ var.put(u'getTypeAnnotation', PyJsHoisted_getTypeAnnotation_)
+ @Js
+ def PyJsHoisted_isBaseType_(baseName, soft, this, arguments, var=var):
+ var = Scope({u'this':this, u'baseName':baseName, u'soft':soft, u'arguments':arguments}, var)
+ var.registers([u'baseName', u'soft'])
+ return var.get(u'_isBaseType')(var.get(u'baseName'), var.get(u"this").callprop(u'getTypeAnnotation'), var.get(u'soft'))
+ PyJsHoisted_isBaseType_.func_name = u'isBaseType'
+ var.put(u'isBaseType', PyJsHoisted_isBaseType_)
+ @Js
+ def PyJsHoisted_baseTypeStrictlyMatches_(right, this, arguments, var=var):
+ var = Scope({u'this':this, u'right':right, u'arguments':arguments}, var)
+ var.registers([u'right', u'left'])
+ var.put(u'left', var.get(u"this").callprop(u'getTypeAnnotation'))
+ var.put(u'right', var.get(u'right').callprop(u'getTypeAnnotation'))
+ if (var.get(u't').callprop(u'isAnyTypeAnnotation', var.get(u'left')).neg() and var.get(u't').callprop(u'isFlowBaseAnnotation', var.get(u'left'))):
+ return PyJsStrictEq(var.get(u'right').get(u'type'),var.get(u'left').get(u'type'))
+ PyJsHoisted_baseTypeStrictlyMatches_.func_name = u'baseTypeStrictlyMatches'
+ var.put(u'baseTypeStrictlyMatches', PyJsHoisted_baseTypeStrictlyMatches_)
+ @Js
+ def PyJsHoisted__getTypeAnnotation_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'declarParent', u'inferer', u'declar'])
+ var.put(u'node', var.get(u"this").get(u'node'))
+ if var.get(u'node').neg():
+ if (PyJsStrictEq(var.get(u"this").get(u'key'),Js(u'init')) and var.get(u"this").get(u'parentPath').callprop(u'isVariableDeclarator')):
+ var.put(u'declar', var.get(u"this").get(u'parentPath').get(u'parentPath'))
+ var.put(u'declarParent', var.get(u'declar').get(u'parentPath'))
+ if (PyJsStrictEq(var.get(u'declar').get(u'key'),Js(u'left')) and var.get(u'declarParent').callprop(u'isForInStatement')):
+ return var.get(u't').callprop(u'stringTypeAnnotation')
+ if (PyJsStrictEq(var.get(u'declar').get(u'key'),Js(u'left')) and var.get(u'declarParent').callprop(u'isForOfStatement')):
+ return var.get(u't').callprop(u'anyTypeAnnotation')
+ return var.get(u't').callprop(u'voidTypeAnnotation')
+ else:
+ return var.get('undefined')
+ if var.get(u'node').get(u'typeAnnotation'):
+ return var.get(u'node').get(u'typeAnnotation')
+ var.put(u'inferer', var.get(u'inferers').get(var.get(u'node').get(u'type')))
+ if var.get(u'inferer'):
+ return var.get(u'inferer').callprop(u'call', var.get(u"this"), var.get(u'node'))
+ var.put(u'inferer', var.get(u'inferers').get(var.get(u"this").get(u'parentPath').get(u'type')))
+ if (var.get(u'inferer') and var.get(u'inferer').get(u'validParent')):
+ return var.get(u"this").get(u'parentPath').callprop(u'getTypeAnnotation')
+ PyJsHoisted__getTypeAnnotation_.func_name = u'_getTypeAnnotation'
+ var.put(u'_getTypeAnnotation', PyJsHoisted__getTypeAnnotation_)
+ @Js
+ def PyJsHoisted_isGenericType_(genericName, this, arguments, var=var):
+ var = Scope({u'this':this, u'genericName':genericName, u'arguments':arguments}, var)
+ var.registers([u'genericName', u'type'])
+ var.put(u'type', var.get(u"this").callprop(u'getTypeAnnotation'))
+ PyJs_Object_1984_ = Js({u'name':var.get(u'genericName')})
+ return (var.get(u't').callprop(u'isGenericTypeAnnotation', var.get(u'type')) and var.get(u't').callprop(u'isIdentifier', var.get(u'type').get(u'id'), PyJs_Object_1984_))
+ PyJsHoisted_isGenericType_.func_name = u'isGenericType'
+ var.put(u'isGenericType', PyJsHoisted_isGenericType_)
+ @Js
+ def PyJsHoisted__isBaseType_(baseName, type, soft, this, arguments, var=var):
+ var = Scope({u'this':this, u'soft':soft, u'baseName':baseName, u'type':type, u'arguments':arguments}, var)
+ var.registers([u'soft', u'baseName', u'type'])
+ if PyJsStrictEq(var.get(u'baseName'),Js(u'string')):
+ return var.get(u't').callprop(u'isStringTypeAnnotation', var.get(u'type'))
+ else:
+ if PyJsStrictEq(var.get(u'baseName'),Js(u'number')):
+ return var.get(u't').callprop(u'isNumberTypeAnnotation', var.get(u'type'))
+ else:
+ if PyJsStrictEq(var.get(u'baseName'),Js(u'boolean')):
+ return var.get(u't').callprop(u'isBooleanTypeAnnotation', var.get(u'type'))
+ else:
+ if PyJsStrictEq(var.get(u'baseName'),Js(u'any')):
+ return var.get(u't').callprop(u'isAnyTypeAnnotation', var.get(u'type'))
+ else:
+ if PyJsStrictEq(var.get(u'baseName'),Js(u'mixed')):
+ return var.get(u't').callprop(u'isMixedTypeAnnotation', var.get(u'type'))
+ else:
+ if PyJsStrictEq(var.get(u'baseName'),Js(u'empty')):
+ return var.get(u't').callprop(u'isEmptyTypeAnnotation', var.get(u'type'))
+ else:
+ if PyJsStrictEq(var.get(u'baseName'),Js(u'void')):
+ return var.get(u't').callprop(u'isVoidTypeAnnotation', var.get(u'type'))
+ else:
+ if var.get(u'soft'):
+ return Js(False)
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create((Js(u'Unknown base type ')+var.get(u'baseName'))))
+ raise PyJsTempException
+ PyJsHoisted__isBaseType_.func_name = u'_isBaseType'
+ var.put(u'_isBaseType', PyJsHoisted__isBaseType_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1983_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1983_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'getTypeAnnotation', var.get(u'getTypeAnnotation'))
+ var.get(u'exports').put(u'_getTypeAnnotation', var.get(u'_getTypeAnnotation'))
+ var.get(u'exports').put(u'isBaseType', var.get(u'isBaseType'))
+ var.get(u'exports').put(u'couldBeBaseType', var.get(u'couldBeBaseType'))
+ var.get(u'exports').put(u'baseTypeStrictlyMatches', var.get(u'baseTypeStrictlyMatches'))
+ var.get(u'exports').put(u'isGenericType', var.get(u'isGenericType'))
+ var.put(u'_inferers', var.get(u'require')(Js(u'./inferers')))
+ var.put(u'inferers', var.get(u'_interopRequireWildcard')(var.get(u'_inferers')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_1981_._set_name(u'anonymous')
+PyJs_Object_1985_ = Js({u'./inferers':Js(235.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_1986_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'getConditionalAnnotation', u'_interopRequireWildcard', u'getParentConditionalPath', u'require', u'_babelTypes', u'module', u'inferAnnotationFromBinaryExpression', u't', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'getTypeAnnotationBindingConstantViolations', u'getConstantViolationsBefore'])
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_1988_ = Js({})
+ var.put(u'newObj', PyJs_Object_1988_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_getParentConditionalPath_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path', u'parentPath'])
+ var.put(u'parentPath', PyJsComma(Js(0.0), Js(None)))
+ while var.put(u'parentPath', var.get(u'path').get(u'parentPath')):
+ if (var.get(u'parentPath').callprop(u'isIfStatement') or var.get(u'parentPath').callprop(u'isConditionalExpression')):
+ if PyJsStrictEq(var.get(u'path').get(u'key'),Js(u'test')):
+ return var.get('undefined')
+ else:
+ return var.get(u'parentPath')
+ else:
+ var.put(u'path', var.get(u'parentPath'))
+ PyJsHoisted_getParentConditionalPath_.func_name = u'getParentConditionalPath'
+ var.put(u'getParentConditionalPath', PyJsHoisted_getParentConditionalPath_)
+ @Js
+ def PyJsHoisted_inferAnnotationFromBinaryExpression_(name, path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'right', u'target', u'typeValue', u'typeofPath', u'typePath', u'name', u'operator', u'path', u'left'])
+ var.put(u'operator', var.get(u'path').get(u'node').get(u'operator'))
+ var.put(u'right', var.get(u'path').callprop(u'get', Js(u'right')).callprop(u'resolve'))
+ var.put(u'left', var.get(u'path').callprop(u'get', Js(u'left')).callprop(u'resolve'))
+ var.put(u'target', PyJsComma(Js(0.0), Js(None)))
+ PyJs_Object_1993_ = Js({u'name':var.get(u'name')})
+ if var.get(u'left').callprop(u'isIdentifier', PyJs_Object_1993_):
+ var.put(u'target', var.get(u'right'))
+ else:
+ PyJs_Object_1994_ = Js({u'name':var.get(u'name')})
+ if var.get(u'right').callprop(u'isIdentifier', PyJs_Object_1994_):
+ var.put(u'target', var.get(u'left'))
+ if var.get(u'target'):
+ if PyJsStrictEq(var.get(u'operator'),Js(u'===')):
+ return var.get(u'target').callprop(u'getTypeAnnotation')
+ else:
+ if (var.get(u't').get(u'BOOLEAN_NUMBER_BINARY_OPERATORS').callprop(u'indexOf', var.get(u'operator'))>=Js(0.0)):
+ return var.get(u't').callprop(u'numberTypeAnnotation')
+ else:
+ return var.get('undefined')
+ else:
+ if PyJsStrictNeq(var.get(u'operator'),Js(u'===')):
+ return var.get('undefined')
+ var.put(u'typeofPath', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'typePath', PyJsComma(Js(0.0), Js(None)))
+ PyJs_Object_1995_ = Js({u'operator':Js(u'typeof')})
+ if var.get(u'left').callprop(u'isUnaryExpression', PyJs_Object_1995_):
+ var.put(u'typeofPath', var.get(u'left'))
+ var.put(u'typePath', var.get(u'right'))
+ else:
+ PyJs_Object_1996_ = Js({u'operator':Js(u'typeof')})
+ if var.get(u'right').callprop(u'isUnaryExpression', PyJs_Object_1996_):
+ var.put(u'typeofPath', var.get(u'right'))
+ var.put(u'typePath', var.get(u'left'))
+ if (var.get(u'typePath').neg() and var.get(u'typeofPath').neg()):
+ return var.get('undefined')
+ var.put(u'typePath', var.get(u'typePath').callprop(u'resolve'))
+ if var.get(u'typePath').callprop(u'isLiteral').neg():
+ return var.get('undefined')
+ var.put(u'typeValue', var.get(u'typePath').get(u'node').get(u'value'))
+ if PyJsStrictNeq(var.get(u'typeValue',throw=False).typeof(),Js(u'string')):
+ return var.get('undefined')
+ PyJs_Object_1997_ = Js({u'name':var.get(u'name')})
+ if var.get(u'typeofPath').callprop(u'get', Js(u'argument')).callprop(u'isIdentifier', PyJs_Object_1997_).neg():
+ return var.get('undefined')
+ return var.get(u't').callprop(u'createTypeAnnotationBasedOnTypeof', var.get(u'typePath').get(u'node').get(u'value'))
+ PyJsHoisted_inferAnnotationFromBinaryExpression_.func_name = u'inferAnnotationFromBinaryExpression'
+ var.put(u'inferAnnotationFromBinaryExpression', PyJsHoisted_inferAnnotationFromBinaryExpression_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_1989_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_1989_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_getConstantViolationsBefore_(binding, path, functions, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'functions':functions, u'binding':binding, u'arguments':arguments}, var)
+ var.registers([u'path', u'violations', u'binding', u'functions'])
+ var.put(u'violations', var.get(u'binding').get(u'constantViolations').callprop(u'slice'))
+ var.get(u'violations').callprop(u'unshift', var.get(u'binding').get(u'path'))
+ @Js
+ def PyJs_anonymous_1992_(violation, this, arguments, var=var):
+ var = Scope({u'violation':violation, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'status', u'violation'])
+ var.put(u'violation', var.get(u'violation').callprop(u'resolve'))
+ var.put(u'status', var.get(u'violation').callprop(u'_guessExecutionStatusRelativeTo', var.get(u'path')))
+ if (var.get(u'functions') and PyJsStrictEq(var.get(u'status'),Js(u'function'))):
+ var.get(u'functions').callprop(u'push', var.get(u'violation'))
+ return PyJsStrictEq(var.get(u'status'),Js(u'before'))
+ PyJs_anonymous_1992_._set_name(u'anonymous')
+ return var.get(u'violations').callprop(u'filter', PyJs_anonymous_1992_)
+ PyJsHoisted_getConstantViolationsBefore_.func_name = u'getConstantViolationsBefore'
+ var.put(u'getConstantViolationsBefore', PyJsHoisted_getConstantViolationsBefore_)
+ @Js
+ def PyJsHoisted_getConditionalAnnotation_(path, name, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'paths', u'name', u'test', u'path', u'ifStatement', u'type', u'types', u'_path'])
+ var.put(u'ifStatement', var.get(u'getParentConditionalPath')(var.get(u'path')))
+ if var.get(u'ifStatement').neg():
+ return var.get('undefined')
+ var.put(u'test', var.get(u'ifStatement').callprop(u'get', Js(u'test')))
+ var.put(u'paths', Js([var.get(u'test')]))
+ var.put(u'types', Js([]))
+ while 1:
+ var.put(u'_path', var.get(u'paths').callprop(u'shift').callprop(u'resolve'))
+ if var.get(u'_path').callprop(u'isLogicalExpression'):
+ var.get(u'paths').callprop(u'push', var.get(u'_path').callprop(u'get', Js(u'left')))
+ var.get(u'paths').callprop(u'push', var.get(u'_path').callprop(u'get', Js(u'right')))
+ if var.get(u'_path').callprop(u'isBinaryExpression'):
+ var.put(u'type', var.get(u'inferAnnotationFromBinaryExpression')(var.get(u'name'), var.get(u'_path')))
+ if var.get(u'type'):
+ var.get(u'types').callprop(u'push', var.get(u'type'))
+ if not var.get(u'paths').get(u'length'):
+ break
+ if var.get(u'types').get(u'length'):
+ PyJs_Object_1998_ = Js({u'typeAnnotation':var.get(u't').callprop(u'createUnionTypeAnnotation', var.get(u'types')),u'ifStatement':var.get(u'ifStatement')})
+ return PyJs_Object_1998_
+ else:
+ return var.get(u'getConditionalAnnotation')(var.get(u'ifStatement'), var.get(u'name'))
+ PyJsHoisted_getConditionalAnnotation_.func_name = u'getConditionalAnnotation'
+ var.put(u'getConditionalAnnotation', PyJsHoisted_getConditionalAnnotation_)
+ @Js
+ def PyJsHoisted_getTypeAnnotationBindingConstantViolations_(path, name, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'_isArray', u'_iterator', u'name', u'violation', u'binding', u'functionConstantViolations', u'_i', u'types', u'path', u'_ref', u'testType', u'constantViolations'])
+ var.put(u'binding', var.get(u'path').get(u'scope').callprop(u'getBinding', var.get(u'name')))
+ var.put(u'types', Js([]))
+ var.get(u'path').put(u'typeAnnotation', var.get(u't').callprop(u'unionTypeAnnotation', var.get(u'types')))
+ var.put(u'functionConstantViolations', Js([]))
+ var.put(u'constantViolations', var.get(u'getConstantViolationsBefore')(var.get(u'binding'), var.get(u'path'), var.get(u'functionConstantViolations')))
+ var.put(u'testType', var.get(u'getConditionalAnnotation')(var.get(u'path'), var.get(u'name')))
+ if var.get(u'testType'):
+ @Js
+ def PyJs_anonymous_1990_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'testConstantViolations'])
+ var.put(u'testConstantViolations', var.get(u'getConstantViolationsBefore')(var.get(u'binding'), var.get(u'testType').get(u'ifStatement')))
+ @Js
+ def PyJs_anonymous_1991_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return (var.get(u'testConstantViolations').callprop(u'indexOf', var.get(u'path'))=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'violation', var.get(u'_ref'))
+ var.get(u'types').callprop(u'push', var.get(u'violation').callprop(u'getTypeAnnotation'))
+
+ if var.get(u'types').get(u'length'):
+ return var.get(u't').callprop(u'createUnionTypeAnnotation', var.get(u'types'))
+ PyJsHoisted_getTypeAnnotationBindingConstantViolations_.func_name = u'getTypeAnnotationBindingConstantViolations'
+ var.put(u'getTypeAnnotationBindingConstantViolations', PyJsHoisted_getTypeAnnotationBindingConstantViolations_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ @Js
+ def PyJs_anonymous_1987_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'binding'])
+ if var.get(u"this").callprop(u'isReferenced').neg():
+ return var.get('undefined')
+ var.put(u'binding', var.get(u"this").get(u'scope').callprop(u'getBinding', var.get(u'node').get(u'name')))
+ if var.get(u'binding'):
+ if var.get(u'binding').get(u'identifier').get(u'typeAnnotation'):
+ return var.get(u'binding').get(u'identifier').get(u'typeAnnotation')
+ else:
+ return var.get(u'getTypeAnnotationBindingConstantViolations')(var.get(u"this"), var.get(u'node').get(u'name'))
+ if PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'undefined')):
+ return var.get(u't').callprop(u'voidTypeAnnotation')
+ else:
+ if (PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'NaN')) or PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'Infinity'))):
+ return var.get(u't').callprop(u'numberTypeAnnotation')
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'arguments')):
+ pass
+ PyJs_anonymous_1987_._set_name(u'anonymous')
+ var.get(u'exports').put(u'default', PyJs_anonymous_1987_)
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_1986_._set_name(u'anonymous')
+PyJs_Object_1999_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_2000_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'CallExpression', u'UpdateExpression', u'module', u'ObjectExpression', u'_interopRequireDefault', u'resolveCall', u'RegExpLiteral', u'ArrayExpression', u'Func', u'AssignmentExpression', u'exports', u'_interopRequireWildcard', u'RestElement', u'_babelTypes', u'NullLiteral', u'TypeCastExpression', u'SequenceExpression', u'BinaryExpression', u'BooleanLiteral', u'ConditionalExpression', u'UnaryExpression', u'NewExpression', u'require', u'StringLiteral', u'NumericLiteral', u'TaggedTemplateExpression', u't', u'_infererReference', u'TemplateLiteral', u'LogicalExpression', u'VariableDeclarator'])
+ @Js
+ def PyJsHoisted_CallExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'resolveCall')(var.get(u"this").callprop(u'get', Js(u'callee')))
+ PyJsHoisted_CallExpression_.func_name = u'CallExpression'
+ var.put(u'CallExpression', PyJsHoisted_CallExpression_)
+ @Js
+ def PyJsHoisted_UpdateExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'operator', u'node'])
+ var.put(u'operator', var.get(u'node').get(u'operator'))
+ if (PyJsStrictEq(var.get(u'operator'),Js(u'++')) or PyJsStrictEq(var.get(u'operator'),Js(u'--'))):
+ return var.get(u't').callprop(u'numberTypeAnnotation')
+ PyJsHoisted_UpdateExpression_.func_name = u'UpdateExpression'
+ var.put(u'UpdateExpression', PyJsHoisted_UpdateExpression_)
+ @Js
+ def PyJsHoisted_ObjectExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'genericTypeAnnotation', var.get(u't').callprop(u'identifier', Js(u'Object')))
+ PyJsHoisted_ObjectExpression_.func_name = u'ObjectExpression'
+ var.put(u'ObjectExpression', PyJsHoisted_ObjectExpression_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2004_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2004_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_resolveCall_(callee, this, arguments, var=var):
+ var = Scope({u'this':this, u'callee':callee, u'arguments':arguments}, var)
+ var.registers([u'callee'])
+ var.put(u'callee', var.get(u'callee').callprop(u'resolve'))
+ if var.get(u'callee').callprop(u'isFunction'):
+ if var.get(u'callee').callprop(u'is', Js(u'async')):
+ if var.get(u'callee').callprop(u'is', Js(u'generator')):
+ return var.get(u't').callprop(u'genericTypeAnnotation', var.get(u't').callprop(u'identifier', Js(u'AsyncIterator')))
+ else:
+ return var.get(u't').callprop(u'genericTypeAnnotation', var.get(u't').callprop(u'identifier', Js(u'Promise')))
+ else:
+ if var.get(u'callee').get(u'node').get(u'returnType'):
+ return var.get(u'callee').get(u'node').get(u'returnType')
+ else:
+ pass
+ PyJsHoisted_resolveCall_.func_name = u'resolveCall'
+ var.put(u'resolveCall', PyJsHoisted_resolveCall_)
+ @Js
+ def PyJsHoisted_RegExpLiteral_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'genericTypeAnnotation', var.get(u't').callprop(u'identifier', Js(u'RegExp')))
+ PyJsHoisted_RegExpLiteral_.func_name = u'RegExpLiteral'
+ var.put(u'RegExpLiteral', PyJsHoisted_RegExpLiteral_)
+ @Js
+ def PyJsHoisted_ArrayExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'genericTypeAnnotation', var.get(u't').callprop(u'identifier', Js(u'Array')))
+ PyJsHoisted_ArrayExpression_.func_name = u'ArrayExpression'
+ var.put(u'ArrayExpression', PyJsHoisted_ArrayExpression_)
+ @Js
+ def PyJsHoisted_Func_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'genericTypeAnnotation', var.get(u't').callprop(u'identifier', Js(u'Function')))
+ PyJsHoisted_Func_.func_name = u'Func'
+ var.put(u'Func', PyJsHoisted_Func_)
+ @Js
+ def PyJsHoisted_AssignmentExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").callprop(u'get', Js(u'right')).callprop(u'getTypeAnnotation')
+ PyJsHoisted_AssignmentExpression_.func_name = u'AssignmentExpression'
+ var.put(u'AssignmentExpression', PyJsHoisted_AssignmentExpression_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2003_ = Js({})
+ var.put(u'newObj', PyJs_Object_2003_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_RestElement_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'ArrayExpression')()
+ PyJsHoisted_RestElement_.func_name = u'RestElement'
+ var.put(u'RestElement', PyJsHoisted_RestElement_)
+ @Js
+ def PyJsHoisted_NullLiteral_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'nullLiteralTypeAnnotation')
+ PyJsHoisted_NullLiteral_.func_name = u'NullLiteral'
+ var.put(u'NullLiteral', PyJsHoisted_NullLiteral_)
+ @Js
+ def PyJsHoisted_TypeCastExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return var.get(u'node').get(u'typeAnnotation')
+ PyJsHoisted_TypeCastExpression_.func_name = u'TypeCastExpression'
+ var.put(u'TypeCastExpression', PyJsHoisted_TypeCastExpression_)
+ @Js
+ def PyJsHoisted_SequenceExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").callprop(u'get', Js(u'expressions')).callprop(u'pop').callprop(u'getTypeAnnotation')
+ PyJsHoisted_SequenceExpression_.func_name = u'SequenceExpression'
+ var.put(u'SequenceExpression', PyJsHoisted_SequenceExpression_)
+ @Js
+ def PyJsHoisted_BinaryExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'operator', u'node', u'right', u'left'])
+ var.put(u'operator', var.get(u'node').get(u'operator'))
+ if (var.get(u't').get(u'NUMBER_BINARY_OPERATORS').callprop(u'indexOf', var.get(u'operator'))>=Js(0.0)):
+ return var.get(u't').callprop(u'numberTypeAnnotation')
+ else:
+ if (var.get(u't').get(u'BOOLEAN_BINARY_OPERATORS').callprop(u'indexOf', var.get(u'operator'))>=Js(0.0)):
+ return var.get(u't').callprop(u'booleanTypeAnnotation')
+ else:
+ if PyJsStrictEq(var.get(u'operator'),Js(u'+')):
+ var.put(u'right', var.get(u"this").callprop(u'get', Js(u'right')))
+ var.put(u'left', var.get(u"this").callprop(u'get', Js(u'left')))
+ if (var.get(u'left').callprop(u'isBaseType', Js(u'number')) and var.get(u'right').callprop(u'isBaseType', Js(u'number'))):
+ return var.get(u't').callprop(u'numberTypeAnnotation')
+ else:
+ if (var.get(u'left').callprop(u'isBaseType', Js(u'string')) or var.get(u'right').callprop(u'isBaseType', Js(u'string'))):
+ return var.get(u't').callprop(u'stringTypeAnnotation')
+ return var.get(u't').callprop(u'unionTypeAnnotation', Js([var.get(u't').callprop(u'stringTypeAnnotation'), var.get(u't').callprop(u'numberTypeAnnotation')]))
+ PyJsHoisted_BinaryExpression_.func_name = u'BinaryExpression'
+ var.put(u'BinaryExpression', PyJsHoisted_BinaryExpression_)
+ @Js
+ def PyJsHoisted_BooleanLiteral_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'booleanTypeAnnotation')
+ PyJsHoisted_BooleanLiteral_.func_name = u'BooleanLiteral'
+ var.put(u'BooleanLiteral', PyJsHoisted_BooleanLiteral_)
+ @Js
+ def PyJsHoisted_ConditionalExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'createUnionTypeAnnotation', Js([var.get(u"this").callprop(u'get', Js(u'consequent')).callprop(u'getTypeAnnotation'), var.get(u"this").callprop(u'get', Js(u'alternate')).callprop(u'getTypeAnnotation')]))
+ PyJsHoisted_ConditionalExpression_.func_name = u'ConditionalExpression'
+ var.put(u'ConditionalExpression', PyJsHoisted_ConditionalExpression_)
+ @Js
+ def PyJsHoisted_UnaryExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'operator', u'node'])
+ var.put(u'operator', var.get(u'node').get(u'operator'))
+ if PyJsStrictEq(var.get(u'operator'),Js(u'void')):
+ return var.get(u't').callprop(u'voidTypeAnnotation')
+ else:
+ if (var.get(u't').get(u'NUMBER_UNARY_OPERATORS').callprop(u'indexOf', var.get(u'operator'))>=Js(0.0)):
+ return var.get(u't').callprop(u'numberTypeAnnotation')
+ else:
+ if (var.get(u't').get(u'STRING_UNARY_OPERATORS').callprop(u'indexOf', var.get(u'operator'))>=Js(0.0)):
+ return var.get(u't').callprop(u'stringTypeAnnotation')
+ else:
+ if (var.get(u't').get(u'BOOLEAN_UNARY_OPERATORS').callprop(u'indexOf', var.get(u'operator'))>=Js(0.0)):
+ return var.get(u't').callprop(u'booleanTypeAnnotation')
+ PyJsHoisted_UnaryExpression_.func_name = u'UnaryExpression'
+ var.put(u'UnaryExpression', PyJsHoisted_UnaryExpression_)
+ @Js
+ def PyJsHoisted_NewExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").callprop(u'get', Js(u'callee')).callprop(u'isIdentifier'):
+ return var.get(u't').callprop(u'genericTypeAnnotation', var.get(u'node').get(u'callee'))
+ PyJsHoisted_NewExpression_.func_name = u'NewExpression'
+ var.put(u'NewExpression', PyJsHoisted_NewExpression_)
+ @Js
+ def PyJsHoisted_StringLiteral_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'stringTypeAnnotation')
+ PyJsHoisted_StringLiteral_.func_name = u'StringLiteral'
+ var.put(u'StringLiteral', PyJsHoisted_StringLiteral_)
+ @Js
+ def PyJsHoisted_NumericLiteral_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'numberTypeAnnotation')
+ PyJsHoisted_NumericLiteral_.func_name = u'NumericLiteral'
+ var.put(u'NumericLiteral', PyJsHoisted_NumericLiteral_)
+ @Js
+ def PyJsHoisted_TaggedTemplateExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'resolveCall')(var.get(u"this").callprop(u'get', Js(u'tag')))
+ PyJsHoisted_TaggedTemplateExpression_.func_name = u'TaggedTemplateExpression'
+ var.put(u'TaggedTemplateExpression', PyJsHoisted_TaggedTemplateExpression_)
+ @Js
+ def PyJsHoisted_TemplateLiteral_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'stringTypeAnnotation')
+ PyJsHoisted_TemplateLiteral_.func_name = u'TemplateLiteral'
+ var.put(u'TemplateLiteral', PyJsHoisted_TemplateLiteral_)
+ @Js
+ def PyJsHoisted_LogicalExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u't').callprop(u'createUnionTypeAnnotation', Js([var.get(u"this").callprop(u'get', Js(u'left')).callprop(u'getTypeAnnotation'), var.get(u"this").callprop(u'get', Js(u'right')).callprop(u'getTypeAnnotation')]))
+ PyJsHoisted_LogicalExpression_.func_name = u'LogicalExpression'
+ var.put(u'LogicalExpression', PyJsHoisted_LogicalExpression_)
+ @Js
+ def PyJsHoisted_VariableDeclarator_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'id'])
+ var.put(u'id', var.get(u"this").callprop(u'get', Js(u'id')))
+ if var.get(u'id').callprop(u'isIdentifier'):
+ return var.get(u"this").callprop(u'get', Js(u'init')).callprop(u'getTypeAnnotation')
+ else:
+ return var.get('undefined')
+ PyJsHoisted_VariableDeclarator_.func_name = u'VariableDeclarator'
+ var.put(u'VariableDeclarator', PyJsHoisted_VariableDeclarator_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'ClassDeclaration', var.get(u'exports').put(u'ClassExpression', var.get(u'exports').put(u'FunctionDeclaration', var.get(u'exports').put(u'ArrowFunctionExpression', var.get(u'exports').put(u'FunctionExpression', var.get(u'exports').put(u'Identifier', var.get(u'undefined')))))))
+ var.put(u'_infererReference', var.get(u'require')(Js(u'./inferer-reference')))
+ @Js
+ def PyJs_get_2002_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2002_}, var)
+ var.registers([])
+ return var.get(u'_interopRequireDefault')(var.get(u'_infererReference')).get(u'default')
+ PyJs_get_2002_._set_name(u'get')
+ PyJs_Object_2001_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2002_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'Identifier'), PyJs_Object_2001_)
+ var.get(u'exports').put(u'VariableDeclarator', var.get(u'VariableDeclarator'))
+ var.get(u'exports').put(u'TypeCastExpression', var.get(u'TypeCastExpression'))
+ var.get(u'exports').put(u'NewExpression', var.get(u'NewExpression'))
+ var.get(u'exports').put(u'TemplateLiteral', var.get(u'TemplateLiteral'))
+ var.get(u'exports').put(u'UnaryExpression', var.get(u'UnaryExpression'))
+ var.get(u'exports').put(u'BinaryExpression', var.get(u'BinaryExpression'))
+ var.get(u'exports').put(u'LogicalExpression', var.get(u'LogicalExpression'))
+ var.get(u'exports').put(u'ConditionalExpression', var.get(u'ConditionalExpression'))
+ var.get(u'exports').put(u'SequenceExpression', var.get(u'SequenceExpression'))
+ var.get(u'exports').put(u'AssignmentExpression', var.get(u'AssignmentExpression'))
+ var.get(u'exports').put(u'UpdateExpression', var.get(u'UpdateExpression'))
+ var.get(u'exports').put(u'StringLiteral', var.get(u'StringLiteral'))
+ var.get(u'exports').put(u'NumericLiteral', var.get(u'NumericLiteral'))
+ var.get(u'exports').put(u'BooleanLiteral', var.get(u'BooleanLiteral'))
+ var.get(u'exports').put(u'NullLiteral', var.get(u'NullLiteral'))
+ var.get(u'exports').put(u'RegExpLiteral', var.get(u'RegExpLiteral'))
+ var.get(u'exports').put(u'ObjectExpression', var.get(u'ObjectExpression'))
+ var.get(u'exports').put(u'ArrayExpression', var.get(u'ArrayExpression'))
+ var.get(u'exports').put(u'RestElement', var.get(u'RestElement'))
+ var.get(u'exports').put(u'CallExpression', var.get(u'CallExpression'))
+ var.get(u'exports').put(u'TaggedTemplateExpression', var.get(u'TaggedTemplateExpression'))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ var.get(u'TypeCastExpression').put(u'validParent', var.get(u'true'))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ var.get(u'RestElement').put(u'validParent', var.get(u'true'))
+ pass
+ var.get(u'exports').put(u'FunctionExpression', var.get(u'Func'))
+ var.get(u'exports').put(u'ArrowFunctionExpression', var.get(u'Func'))
+ var.get(u'exports').put(u'FunctionDeclaration', var.get(u'Func'))
+ var.get(u'exports').put(u'ClassExpression', var.get(u'Func'))
+ var.get(u'exports').put(u'ClassDeclaration', var.get(u'Func'))
+ pass
+ pass
+ pass
+PyJs_anonymous_2000_._set_name(u'anonymous')
+PyJs_Object_2005_ = Js({u'./inferer-reference':Js(234.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_2006_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_resolve', u'is', u'exports', u'module', u'isnt', u'canSwapBetweenExpressionAndStatement', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'referencesImport', u'_typeof2', u'_typeof3', u'canHaveVariableDeclarationOrExpression', u'isStatementOrBlock', u't', u'has', u'_guessExecutionStatusRelativeTo', u'_includes', u'isStatic', u'isCompletionRecord', u'_interopRequireWildcard', u'_babelTypes', u'_includes2', u'equals', u'isNodeType', u'_guessExecutionStatusRelativeToDifferentFunctions', u'resolve', u'willIMaybeExecuteBefore', u'require', u'matchesPattern', u'getSource'])
+ @Js
+ def PyJsHoisted__resolve_(dangerous, resolved, this, arguments, var=var):
+ var = Scope({u'resolved':resolved, u'dangerous':dangerous, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'resolved', u'dangerous', u'_isArray3', u'target', u'_this', u'_ret', u'_i3', u'binding', u'elems', u'prop', u'match', u'key', u'props', u'targetKey', u'elem', u'targetName', u'_ref3', u'_iterator3'])
+ var.put(u'_this', var.get(u"this"))
+ if (var.get(u'resolved') and (var.get(u'resolved').callprop(u'indexOf', var.get(u"this"))>=Js(0.0))):
+ return var.get('undefined')
+ var.put(u'resolved', (var.get(u'resolved') or Js([])))
+ var.get(u'resolved').callprop(u'push', var.get(u"this"))
+ if var.get(u"this").callprop(u'isVariableDeclarator'):
+ if var.get(u"this").callprop(u'get', Js(u'id')).callprop(u'isIdentifier'):
+ return var.get(u"this").callprop(u'get', Js(u'init')).callprop(u'resolve', var.get(u'dangerous'), var.get(u'resolved'))
+ else:
+ pass
+ else:
+ if var.get(u"this").callprop(u'isReferencedIdentifier'):
+ var.put(u'binding', var.get(u"this").get(u'scope').callprop(u'getBinding', var.get(u"this").get(u'node').get(u'name')))
+ if var.get(u'binding').neg():
+ return var.get('undefined')
+ if var.get(u'binding').get(u'constant').neg():
+ return var.get('undefined')
+ if PyJsStrictEq(var.get(u'binding').get(u'kind'),Js(u'module')):
+ return var.get('undefined')
+ if PyJsStrictNeq(var.get(u'binding').get(u'path'),var.get(u"this")):
+ @Js
+ def PyJs_anonymous_2010_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'ret'])
+ var.put(u'ret', var.get(u'binding').get(u'path').callprop(u'resolve', var.get(u'dangerous'), var.get(u'resolved')))
+ @Js
+ def PyJs_anonymous_2011_(parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'parent'])
+ return PyJsStrictEq(var.get(u'parent').get(u'node'),var.get(u'ret').get(u'node'))
+ PyJs_anonymous_2011_._set_name(u'anonymous')
+ if var.get(u'_this').callprop(u'find', PyJs_anonymous_2011_):
+ PyJs_Object_2012_ = Js({u'v':PyJsComma(Js(0.0), Js(None))})
+ return PyJs_Object_2012_
+ PyJs_Object_2013_ = Js({u'v':var.get(u'ret')})
+ return PyJs_Object_2013_
+ PyJs_anonymous_2010_._set_name(u'anonymous')
+ var.put(u'_ret', PyJs_anonymous_2010_())
+ if PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'_ret',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'_ret'))),Js(u'object')):
+ return var.get(u'_ret').get(u'v')
+ else:
+ if var.get(u"this").callprop(u'isTypeCastExpression'):
+ return var.get(u"this").callprop(u'get', Js(u'expression')).callprop(u'resolve', var.get(u'dangerous'), var.get(u'resolved'))
+ else:
+ if (var.get(u'dangerous') and var.get(u"this").callprop(u'isMemberExpression')):
+ var.put(u'targetKey', var.get(u"this").callprop(u'toComputedKey'))
+ if var.get(u't').callprop(u'isLiteral', var.get(u'targetKey')).neg():
+ return var.get('undefined')
+ var.put(u'targetName', var.get(u'targetKey').get(u'value'))
+ var.put(u'target', var.get(u"this").callprop(u'get', Js(u'object')).callprop(u'resolve', var.get(u'dangerous'), var.get(u'resolved')))
+ if var.get(u'target').callprop(u'isObjectExpression'):
+ var.put(u'props', var.get(u'target').callprop(u'get', Js(u'properties')))
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'props'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'prop', var.get(u'_ref3'))
+ if var.get(u'prop').callprop(u'isProperty').neg():
+ continue
+ var.put(u'key', var.get(u'prop').callprop(u'get', Js(u'key')))
+ PyJs_Object_2014_ = Js({u'name':var.get(u'targetName')})
+ var.put(u'match', (var.get(u'prop').callprop(u'isnt', Js(u'computed')) and var.get(u'key').callprop(u'isIdentifier', PyJs_Object_2014_)))
+ PyJs_Object_2015_ = Js({u'value':var.get(u'targetName')})
+ var.put(u'match', (var.get(u'match') or var.get(u'key').callprop(u'isLiteral', PyJs_Object_2015_)))
+ if var.get(u'match'):
+ return var.get(u'prop').callprop(u'get', Js(u'value')).callprop(u'resolve', var.get(u'dangerous'), var.get(u'resolved'))
+
+ else:
+ if (var.get(u'target').callprop(u'isArrayExpression') and var.get(u'isNaN')((+var.get(u'targetName'))).neg()):
+ var.put(u'elems', var.get(u'target').callprop(u'get', Js(u'elements')))
+ var.put(u'elem', var.get(u'elems').get(var.get(u'targetName')))
+ if var.get(u'elem'):
+ return var.get(u'elem').callprop(u'resolve', var.get(u'dangerous'), var.get(u'resolved'))
+ PyJsHoisted__resolve_.func_name = u'_resolve'
+ var.put(u'_resolve', PyJsHoisted__resolve_)
+ @Js
+ def PyJsHoisted_isStatic_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").get(u'scope').callprop(u'isStatic', var.get(u"this").get(u'node'))
+ PyJsHoisted_isStatic_.func_name = u'isStatic'
+ var.put(u'isStatic', PyJsHoisted_isStatic_)
+ @Js
+ def PyJsHoisted_isCompletionRecord_(allowInsideFunction, this, arguments, var=var):
+ var = Scope({u'this':this, u'allowInsideFunction':allowInsideFunction, u'arguments':arguments}, var)
+ var.registers([u'path', u'allowInsideFunction', u'container', u'first'])
+ var.put(u'path', var.get(u"this"))
+ var.put(u'first', var.get(u'true'))
+ while 1:
+ var.put(u'container', var.get(u'path').get(u'container'))
+ if (var.get(u'path').callprop(u'isFunction') and var.get(u'first').neg()):
+ return var.get(u'allowInsideFunction').neg().neg()
+ var.put(u'first', Js(False))
+ if (var.get(u'Array').callprop(u'isArray', var.get(u'container')) and PyJsStrictNeq(var.get(u'path').get(u'key'),(var.get(u'container').get(u'length')-Js(1.0)))):
+ return Js(False)
+ if not (var.put(u'path', var.get(u'path').get(u'parentPath')) and var.get(u'path').callprop(u'isProgram').neg()):
+ break
+ return var.get(u'true')
+ PyJsHoisted_isCompletionRecord_.func_name = u'isCompletionRecord'
+ var.put(u'isCompletionRecord', PyJsHoisted_isCompletionRecord_)
+ @Js
+ def PyJsHoisted_willIMaybeExecuteBefore_(target, this, arguments, var=var):
+ var = Scope({u'this':this, u'target':target, u'arguments':arguments}, var)
+ var.registers([u'target'])
+ return PyJsStrictNeq(var.get(u"this").callprop(u'_guessExecutionStatusRelativeTo', var.get(u'target')),Js(u'after'))
+ PyJsHoisted_willIMaybeExecuteBefore_.func_name = u'willIMaybeExecuteBefore'
+ var.put(u'willIMaybeExecuteBefore', PyJsHoisted_willIMaybeExecuteBefore_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2007_ = Js({})
+ var.put(u'newObj', PyJs_Object_2007_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_canHaveVariableDeclarationOrExpression_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return ((PyJsStrictEq(var.get(u"this").get(u'key'),Js(u'init')) or PyJsStrictEq(var.get(u"this").get(u'key'),Js(u'left'))) and var.get(u"this").get(u'parentPath').callprop(u'isFor'))
+ PyJsHoisted_canHaveVariableDeclarationOrExpression_.func_name = u'canHaveVariableDeclarationOrExpression'
+ var.put(u'canHaveVariableDeclarationOrExpression', PyJsHoisted_canHaveVariableDeclarationOrExpression_)
+ @Js
+ def PyJsHoisted__guessExecutionStatusRelativeTo_(target, this, arguments, var=var):
+ var = Scope({u'this':this, u'target':target, u'arguments':arguments}, var)
+ var.registers([u'status', u'targetKeyPosition', u'target', u'selfIndex', u'selfPath', u'commonPath', u'targetRelationship', u'selfRelationship', u'selfFuncParent', u'selfPaths', u'targetFuncParent', u'targetPaths', u'selfKeyPosition', u'targetIndex'])
+ var.put(u'targetFuncParent', var.get(u'target').get(u'scope').callprop(u'getFunctionParent'))
+ var.put(u'selfFuncParent', var.get(u"this").get(u'scope').callprop(u'getFunctionParent'))
+ if PyJsStrictNeq(var.get(u'targetFuncParent').get(u'node'),var.get(u'selfFuncParent').get(u'node')):
+ var.put(u'status', var.get(u"this").callprop(u'_guessExecutionStatusRelativeToDifferentFunctions', var.get(u'targetFuncParent')))
+ if var.get(u'status'):
+ return var.get(u'status')
+ else:
+ var.put(u'target', var.get(u'targetFuncParent').get(u'path'))
+ var.put(u'targetPaths', var.get(u'target').callprop(u'getAncestry'))
+ if (var.get(u'targetPaths').callprop(u'indexOf', var.get(u"this"))>=Js(0.0)):
+ return Js(u'after')
+ var.put(u'selfPaths', var.get(u"this").callprop(u'getAncestry'))
+ var.put(u'commonPath', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'targetIndex', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'selfIndex', PyJsComma(Js(0.0), Js(None)))
+ #for JS loop
+ var.put(u'selfIndex', Js(0.0))
+ while (var.get(u'selfIndex')=Js(0.0)):
+ var.put(u'commonPath', var.get(u'selfPath'))
+ break
+ finally:
+ (var.put(u'selfIndex',Js(var.get(u'selfIndex').to_number())+Js(1))-Js(1))
+ if var.get(u'commonPath').neg():
+ return Js(u'before')
+ var.put(u'targetRelationship', var.get(u'targetPaths').get((var.get(u'targetIndex')-Js(1.0))))
+ var.put(u'selfRelationship', var.get(u'selfPaths').get((var.get(u'selfIndex')-Js(1.0))))
+ if (var.get(u'targetRelationship').neg() or var.get(u'selfRelationship').neg()):
+ return Js(u'before')
+ if (var.get(u'targetRelationship').get(u'listKey') and PyJsStrictEq(var.get(u'targetRelationship').get(u'container'),var.get(u'selfRelationship').get(u'container'))):
+ return (Js(u'before') if (var.get(u'targetRelationship').get(u'key')>var.get(u'selfRelationship').get(u'key')) else Js(u'after'))
+ var.put(u'targetKeyPosition', var.get(u't').get(u'VISITOR_KEYS').get(var.get(u'targetRelationship').get(u'type')).callprop(u'indexOf', var.get(u'targetRelationship').get(u'key')))
+ var.put(u'selfKeyPosition', var.get(u't').get(u'VISITOR_KEYS').get(var.get(u'selfRelationship').get(u'type')).callprop(u'indexOf', var.get(u'selfRelationship').get(u'key')))
+ return (Js(u'before') if (var.get(u'targetKeyPosition')>var.get(u'selfKeyPosition')) else Js(u'after'))
+ PyJsHoisted__guessExecutionStatusRelativeTo_.func_name = u'_guessExecutionStatusRelativeTo'
+ var.put(u'_guessExecutionStatusRelativeTo', PyJsHoisted__guessExecutionStatusRelativeTo_)
+ @Js
+ def PyJsHoisted_equals_(key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'value', u'key'])
+ return PyJsStrictEq(var.get(u"this").get(u'node').get(var.get(u'key')),var.get(u'value'))
+ PyJsHoisted_equals_.func_name = u'equals'
+ var.put(u'equals', PyJsHoisted_equals_)
+ @Js
+ def PyJsHoisted_isNodeType_(type, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments}, var)
+ var.registers([u'type'])
+ return var.get(u't').callprop(u'isType', var.get(u"this").get(u'type'), var.get(u'type'))
+ PyJsHoisted_isNodeType_.func_name = u'isNodeType'
+ var.put(u'isNodeType', PyJsHoisted_isNodeType_)
+ @Js
+ def PyJsHoisted_isStatementOrBlock_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if (var.get(u"this").get(u'parentPath').callprop(u'isLabeledStatement') or var.get(u't').callprop(u'isBlockStatement', var.get(u"this").get(u'container'))):
+ return Js(False)
+ else:
+ return PyJsComma(Js(0.0),var.get(u'_includes2').get(u'default'))(var.get(u't').get(u'STATEMENT_OR_BLOCK_KEYS'), var.get(u"this").get(u'key'))
+ PyJsHoisted_isStatementOrBlock_.func_name = u'isStatementOrBlock'
+ var.put(u'isStatementOrBlock', PyJsHoisted_isStatementOrBlock_)
+ @Js
+ def PyJsHoisted_isnt_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ return var.get(u"this").callprop(u'has', var.get(u'key')).neg()
+ PyJsHoisted_isnt_.func_name = u'isnt'
+ var.put(u'isnt', PyJsHoisted_isnt_)
+ @Js
+ def PyJsHoisted_resolve_(dangerous, resolved, this, arguments, var=var):
+ var = Scope({u'resolved':resolved, u'dangerous':dangerous, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'resolved', u'dangerous'])
+ return (var.get(u"this").callprop(u'_resolve', var.get(u'dangerous'), var.get(u'resolved')) or var.get(u"this"))
+ PyJsHoisted_resolve_.func_name = u'resolve'
+ var.put(u'resolve', PyJsHoisted_resolve_)
+ @Js
+ def PyJsHoisted_matchesPattern_(pattern, allowPartial, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'arguments':arguments, u'allowPartial':allowPartial}, var)
+ var.registers([u'node', u'search', u'i', u'pattern', u'allowPartial', u'matches', u'parts'])
+ @Js
+ def PyJsHoisted_matches_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'part', u'name'])
+ var.put(u'part', var.get(u'parts').get(var.get(u'i')))
+ return (PyJsStrictEq(var.get(u'part'),Js(u'*')) or PyJsStrictEq(var.get(u'name'),var.get(u'part')))
+ PyJsHoisted_matches_.func_name = u'matches'
+ var.put(u'matches', PyJsHoisted_matches_)
+ if var.get(u"this").callprop(u'isMemberExpression').neg():
+ return Js(False)
+ var.put(u'parts', var.get(u'pattern').callprop(u'split', Js(u'.')))
+ var.put(u'search', Js([var.get(u"this").get(u'node')]))
+ var.put(u'i', Js(0.0))
+ pass
+ while var.get(u'search').get(u'length'):
+ var.put(u'node', var.get(u'search').callprop(u'shift'))
+ if (var.get(u'allowPartial') and PyJsStrictEq(var.get(u'i'),var.get(u'parts').get(u'length'))):
+ return var.get(u'true')
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'node')):
+ if var.get(u'matches')(var.get(u'node').get(u'name')).neg():
+ return Js(False)
+ else:
+ if var.get(u't').callprop(u'isLiteral', var.get(u'node')):
+ if var.get(u'matches')(var.get(u'node').get(u'value')).neg():
+ return Js(False)
+ else:
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'node')):
+ if (var.get(u'node').get(u'computed') and var.get(u't').callprop(u'isLiteral', var.get(u'node').get(u'property')).neg()):
+ return Js(False)
+ else:
+ var.get(u'search').callprop(u'unshift', var.get(u'node').get(u'property'))
+ var.get(u'search').callprop(u'unshift', var.get(u'node').get(u'object'))
+ continue
+ else:
+ if var.get(u't').callprop(u'isThisExpression', var.get(u'node')):
+ if var.get(u'matches')(Js(u'this')).neg():
+ return Js(False)
+ else:
+ return Js(False)
+ if (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))>var.get(u'parts').get(u'length')):
+ return Js(False)
+ return PyJsStrictEq(var.get(u'i'),var.get(u'parts').get(u'length'))
+ PyJsHoisted_matchesPattern_.func_name = u'matchesPattern'
+ var.put(u'matchesPattern', PyJsHoisted_matchesPattern_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2008_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2008_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_getSource_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.put(u'node', var.get(u"this").get(u'node'))
+ if var.get(u'node').get(u'end'):
+ return var.get(u"this").get(u'hub').get(u'file').get(u'code').callprop(u'slice', var.get(u'node').get(u'start'), var.get(u'node').get(u'end'))
+ else:
+ return Js(u'')
+ PyJsHoisted_getSource_.func_name = u'getSource'
+ var.put(u'getSource', PyJsHoisted_getSource_)
+ @Js
+ def PyJsHoisted_has_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key', u'val'])
+ var.put(u'val', (var.get(u"this").get(u'node') and var.get(u"this").get(u'node').get(var.get(u'key'))))
+ if (var.get(u'val') and var.get(u'Array').callprop(u'isArray', var.get(u'val'))):
+ return var.get(u'val').get(u'length').neg().neg()
+ else:
+ return var.get(u'val').neg().neg()
+ PyJsHoisted_has_.func_name = u'has'
+ var.put(u'has', PyJsHoisted_has_)
+ @Js
+ def PyJsHoisted_referencesImport_(moduleSource, importName, this, arguments, var=var):
+ var = Scope({u'importName':importName, u'this':this, u'moduleSource':moduleSource, u'arguments':arguments}, var)
+ var.registers([u'importName', u'path', u'moduleSource', u'binding', u'parent'])
+ if var.get(u"this").callprop(u'isReferencedIdentifier').neg():
+ return Js(False)
+ var.put(u'binding', var.get(u"this").get(u'scope').callprop(u'getBinding', var.get(u"this").get(u'node').get(u'name')))
+ if (var.get(u'binding').neg() or PyJsStrictNeq(var.get(u'binding').get(u'kind'),Js(u'module'))):
+ return Js(False)
+ var.put(u'path', var.get(u'binding').get(u'path'))
+ var.put(u'parent', var.get(u'path').get(u'parentPath'))
+ if var.get(u'parent').callprop(u'isImportDeclaration').neg():
+ return Js(False)
+ if PyJsStrictEq(var.get(u'parent').get(u'node').get(u'source').get(u'value'),var.get(u'moduleSource')):
+ if var.get(u'importName').neg():
+ return var.get(u'true')
+ else:
+ return Js(False)
+ if (var.get(u'path').callprop(u'isImportDefaultSpecifier') and PyJsStrictEq(var.get(u'importName'),Js(u'default'))):
+ return var.get(u'true')
+ if (var.get(u'path').callprop(u'isImportNamespaceSpecifier') and PyJsStrictEq(var.get(u'importName'),Js(u'*'))):
+ return var.get(u'true')
+ if (var.get(u'path').callprop(u'isImportSpecifier') and PyJsStrictEq(var.get(u'path').get(u'node').get(u'imported').get(u'name'),var.get(u'importName'))):
+ return var.get(u'true')
+ return Js(False)
+ PyJsHoisted_referencesImport_.func_name = u'referencesImport'
+ var.put(u'referencesImport', PyJsHoisted_referencesImport_)
+ @Js
+ def PyJsHoisted__guessExecutionStatusRelativeToDifferentFunctions_(targetFuncParent, this, arguments, var=var):
+ var = Scope({u'this':this, u'targetFuncParent':targetFuncParent, u'arguments':arguments}, var)
+ var.registers([u'status', u'targetFuncPath', u'referencePaths', u'_iterator', u'_isArray2', u'binding', u'_isArray', u'_i2', u'childOfFunction', u'targetFuncParent', u'_i', u'_path', u'path', u'_ref', u'_ref2', u'allStatus', u'_iterator2'])
+ var.put(u'targetFuncPath', var.get(u'targetFuncParent').get(u'path'))
+ if var.get(u'targetFuncPath').callprop(u'isFunctionDeclaration').neg():
+ return var.get('undefined')
+ var.put(u'binding', var.get(u'targetFuncPath').get(u'scope').callprop(u'getBinding', var.get(u'targetFuncPath').get(u'node').get(u'id').get(u'name')))
+ if var.get(u'binding').get(u'references').neg():
+ return Js(u'before')
+ var.put(u'referencePaths', var.get(u'binding').get(u'referencePaths'))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'referencePaths'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'path', var.get(u'_ref'))
+ if (PyJsStrictNeq(var.get(u'path').get(u'key'),Js(u'callee')) or var.get(u'path').get(u'parentPath').callprop(u'isCallExpression').neg()):
+ return var.get('undefined')
+
+ var.put(u'allStatus', PyJsComma(Js(0.0), Js(None)))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'referencePaths'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'_path', var.get(u'_ref2'))
+ @Js
+ def PyJs_anonymous_2009_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return PyJsStrictEq(var.get(u'path').get(u'node'),var.get(u'targetFuncPath').get(u'node'))
+ PyJs_anonymous_2009_._set_name(u'anonymous')
+ var.put(u'childOfFunction', var.get(u'_path').callprop(u'find', PyJs_anonymous_2009_).neg().neg())
+ if var.get(u'childOfFunction'):
+ continue
+ var.put(u'status', var.get(u"this").callprop(u'_guessExecutionStatusRelativeTo', var.get(u'_path')))
+ if var.get(u'allStatus'):
+ if PyJsStrictNeq(var.get(u'allStatus'),var.get(u'status')):
+ return var.get('undefined')
+ else:
+ var.put(u'allStatus', var.get(u'status'))
+
+ return var.get(u'allStatus')
+ PyJsHoisted__guessExecutionStatusRelativeToDifferentFunctions_.func_name = u'_guessExecutionStatusRelativeToDifferentFunctions'
+ var.put(u'_guessExecutionStatusRelativeToDifferentFunctions', PyJsHoisted__guessExecutionStatusRelativeToDifferentFunctions_)
+ @Js
+ def PyJsHoisted_canSwapBetweenExpressionAndStatement_(replacement, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'replacement':replacement}, var)
+ var.registers([u'replacement'])
+ if (PyJsStrictNeq(var.get(u"this").get(u'key'),Js(u'body')) or var.get(u"this").get(u'parentPath').callprop(u'isArrowFunctionExpression').neg()):
+ return Js(False)
+ if var.get(u"this").callprop(u'isExpression'):
+ return var.get(u't').callprop(u'isBlockStatement', var.get(u'replacement'))
+ else:
+ if var.get(u"this").callprop(u'isBlockStatement'):
+ return var.get(u't').callprop(u'isExpression', var.get(u'replacement'))
+ return Js(False)
+ PyJsHoisted_canSwapBetweenExpressionAndStatement_.func_name = u'canSwapBetweenExpressionAndStatement'
+ var.put(u'canSwapBetweenExpressionAndStatement', PyJsHoisted_canSwapBetweenExpressionAndStatement_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.get(u'exports').put(u'is', var.get(u'undefined'))
+ var.put(u'_typeof2', var.get(u'require')(Js(u'babel-runtime/helpers/typeof')))
+ var.put(u'_typeof3', var.get(u'_interopRequireDefault')(var.get(u'_typeof2')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'matchesPattern', var.get(u'matchesPattern'))
+ var.get(u'exports').put(u'has', var.get(u'has'))
+ var.get(u'exports').put(u'isStatic', var.get(u'isStatic'))
+ var.get(u'exports').put(u'isnt', var.get(u'isnt'))
+ var.get(u'exports').put(u'equals', var.get(u'equals'))
+ var.get(u'exports').put(u'isNodeType', var.get(u'isNodeType'))
+ var.get(u'exports').put(u'canHaveVariableDeclarationOrExpression', var.get(u'canHaveVariableDeclarationOrExpression'))
+ var.get(u'exports').put(u'canSwapBetweenExpressionAndStatement', var.get(u'canSwapBetweenExpressionAndStatement'))
+ var.get(u'exports').put(u'isCompletionRecord', var.get(u'isCompletionRecord'))
+ var.get(u'exports').put(u'isStatementOrBlock', var.get(u'isStatementOrBlock'))
+ var.get(u'exports').put(u'referencesImport', var.get(u'referencesImport'))
+ var.get(u'exports').put(u'getSource', var.get(u'getSource'))
+ var.get(u'exports').put(u'willIMaybeExecuteBefore', var.get(u'willIMaybeExecuteBefore'))
+ var.get(u'exports').put(u'_guessExecutionStatusRelativeTo', var.get(u'_guessExecutionStatusRelativeTo'))
+ var.get(u'exports').put(u'_guessExecutionStatusRelativeToDifferentFunctions', var.get(u'_guessExecutionStatusRelativeToDifferentFunctions'))
+ var.get(u'exports').put(u'resolve', var.get(u'resolve'))
+ var.get(u'exports').put(u'_resolve', var.get(u'_resolve'))
+ var.put(u'_includes', var.get(u'require')(Js(u'lodash/includes')))
+ var.put(u'_includes2', var.get(u'_interopRequireDefault')(var.get(u'_includes')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ var.put(u'is', var.get(u'exports').put(u'is', var.get(u'has')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_2006_._set_name(u'anonymous')
+PyJs_Object_2016_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/helpers/typeof':Js(114.0),u'babel-types':Js(258.0),u'lodash/includes':Js(456.0)})
+@Js
+def PyJs_anonymous_2017_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_classCallCheck2', u'PathHoister', u'_interopRequireWildcard', u'require', u'_babelTypes', u'module', u'referenceVisitor', u't', u'_interopRequireDefault', u'_classCallCheck3', u'_getIterator3', u'_getIterator2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2019_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2019_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2018_ = Js({})
+ var.put(u'newObj', PyJs_Object_2018_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ @Js
+ def PyJs_ReferencedIdentifier_2021_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'ReferencedIdentifier':PyJs_ReferencedIdentifier_2021_, u'arguments':arguments}, var)
+ var.registers([u'_isArray', u'_iterator', u'binding', u'violationPath', u'state', u'_i', u'path', u'_ref'])
+ if (var.get(u'path').callprop(u'isJSXIdentifier') and var.get(u'_babelTypes').get(u'react').callprop(u'isCompatTag', var.get(u'path').get(u'node').get(u'name'))):
+ return var.get('undefined')
+ var.put(u'binding', var.get(u'path').get(u'scope').callprop(u'getBinding', var.get(u'path').get(u'node').get(u'name')))
+ if var.get(u'binding').neg():
+ return var.get('undefined')
+ if PyJsStrictNeq(var.get(u'binding'),var.get(u'state').get(u'scope').callprop(u'getBinding', var.get(u'path').get(u'node').get(u'name'))):
+ return var.get('undefined')
+ if var.get(u'binding').get(u'constant'):
+ var.get(u'state').get(u'bindings').put(var.get(u'path').get(u'node').get(u'name'), var.get(u'binding'))
+ else:
+ #for JS loop
+ var.put(u'_iterator', var.get(u'binding').get(u'constantViolations'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'violationPath', var.get(u'_ref'))
+ var.get(u'state').put(u'breakOnScopePaths', var.get(u'state').get(u'breakOnScopePaths').callprop(u'concat', var.get(u'violationPath').callprop(u'getAncestry')))
+
+ PyJs_ReferencedIdentifier_2021_._set_name(u'ReferencedIdentifier')
+ PyJs_Object_2020_ = Js({u'ReferencedIdentifier':PyJs_ReferencedIdentifier_2021_})
+ var.put(u'referenceVisitor', PyJs_Object_2020_)
+ @Js
+ def PyJs_anonymous_2022_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'PathHoister'])
+ @Js
+ def PyJsHoisted_PathHoister_(path, scope, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'scope':scope}, var)
+ var.registers([u'path', u'scope'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'PathHoister'))
+ var.get(u"this").put(u'breakOnScopePaths', Js([]))
+ PyJs_Object_2023_ = Js({})
+ var.get(u"this").put(u'bindings', PyJs_Object_2023_)
+ var.get(u"this").put(u'scopes', Js([]))
+ var.get(u"this").put(u'scope', var.get(u'scope'))
+ var.get(u"this").put(u'path', var.get(u'path'))
+ PyJsHoisted_PathHoister_.func_name = u'PathHoister'
+ var.put(u'PathHoister', PyJsHoisted_PathHoister_)
+ pass
+ @Js
+ def PyJs_isCompatibleScope_2024_(scope, this, arguments, var=var):
+ var = Scope({u'this':this, u'scope':scope, u'arguments':arguments, u'isCompatibleScope':PyJs_isCompatibleScope_2024_}, var)
+ var.registers([u'scope', u'binding', u'key'])
+ for PyJsTemp in var.get(u"this").get(u'bindings'):
+ var.put(u'key', PyJsTemp)
+ var.put(u'binding', var.get(u"this").get(u'bindings').get(var.get(u'key')))
+ if var.get(u'scope').callprop(u'bindingIdentifierEquals', var.get(u'key'), var.get(u'binding').get(u'identifier')).neg():
+ return Js(False)
+ return var.get(u'true')
+ PyJs_isCompatibleScope_2024_._set_name(u'isCompatibleScope')
+ var.get(u'PathHoister').get(u'prototype').put(u'isCompatibleScope', PyJs_isCompatibleScope_2024_)
+ @Js
+ def PyJs_getCompatibleScopes_2025_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'getCompatibleScopes':PyJs_getCompatibleScopes_2025_}, var)
+ var.registers([u'scope'])
+ var.put(u'scope', var.get(u"this").get(u'path').get(u'scope'))
+ while 1:
+ if var.get(u"this").callprop(u'isCompatibleScope', var.get(u'scope')):
+ var.get(u"this").get(u'scopes').callprop(u'push', var.get(u'scope'))
+ else:
+ break
+ if (var.get(u"this").get(u'breakOnScopePaths').callprop(u'indexOf', var.get(u'scope').get(u'path'))>=Js(0.0)):
+ break
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ PyJs_getCompatibleScopes_2025_._set_name(u'getCompatibleScopes')
+ var.get(u'PathHoister').get(u'prototype').put(u'getCompatibleScopes', PyJs_getCompatibleScopes_2025_)
+ @Js
+ def PyJs_getAttachmentPath_2026_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'getAttachmentPath':PyJs_getAttachmentPath_2026_}, var)
+ var.registers([u'path', u'binding', u'name', u'targetScope'])
+ var.put(u'path', var.get(u"this").callprop(u'_getAttachmentPath'))
+ if var.get(u'path').neg():
+ return var.get('undefined')
+ var.put(u'targetScope', var.get(u'path').get(u'scope'))
+ if PyJsStrictEq(var.get(u'targetScope').get(u'path'),var.get(u'path')):
+ var.put(u'targetScope', var.get(u'path').get(u'scope').get(u'parent'))
+ if (var.get(u'targetScope').get(u'path').callprop(u'isProgram') or var.get(u'targetScope').get(u'path').callprop(u'isFunction')):
+ for PyJsTemp in var.get(u"this").get(u'bindings'):
+ var.put(u'name', PyJsTemp)
+ if var.get(u'targetScope').callprop(u'hasOwnBinding', var.get(u'name')).neg():
+ continue
+ var.put(u'binding', var.get(u"this").get(u'bindings').get(var.get(u'name')))
+ if PyJsStrictEq(var.get(u'binding').get(u'kind'),Js(u'param')):
+ continue
+ if (var.get(u'binding').get(u'path').callprop(u'getStatementParent').get(u'key')>var.get(u'path').get(u'key')):
+ return var.get('undefined')
+ return var.get(u'path')
+ PyJs_getAttachmentPath_2026_._set_name(u'getAttachmentPath')
+ var.get(u'PathHoister').get(u'prototype').put(u'getAttachmentPath', PyJs_getAttachmentPath_2026_)
+ @Js
+ def PyJs__getAttachmentPath_2027_(this, arguments, var=var):
+ var = Scope({u'this':this, u'_getAttachmentPath':PyJs__getAttachmentPath_2027_, u'arguments':arguments}, var)
+ var.registers([u'scopes', u'scope'])
+ var.put(u'scopes', var.get(u"this").get(u'scopes'))
+ var.put(u'scope', var.get(u'scopes').callprop(u'pop'))
+ if var.get(u'scope').neg():
+ return var.get('undefined')
+ if var.get(u'scope').get(u'path').callprop(u'isFunction'):
+ if var.get(u"this").callprop(u'hasOwnParamBindings', var.get(u'scope')):
+ if PyJsStrictEq(var.get(u"this").get(u'scope'),var.get(u'scope')):
+ return var.get('undefined')
+ return var.get(u'scope').get(u'path').callprop(u'get', Js(u'body')).callprop(u'get', Js(u'body')).get(u'0')
+ else:
+ return var.get(u"this").callprop(u'getNextScopeStatementParent')
+ else:
+ if var.get(u'scope').get(u'path').callprop(u'isProgram'):
+ return var.get(u"this").callprop(u'getNextScopeStatementParent')
+ PyJs__getAttachmentPath_2027_._set_name(u'_getAttachmentPath')
+ var.get(u'PathHoister').get(u'prototype').put(u'_getAttachmentPath', PyJs__getAttachmentPath_2027_)
+ @Js
+ def PyJs_getNextScopeStatementParent_2028_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getNextScopeStatementParent':PyJs_getNextScopeStatementParent_2028_, u'arguments':arguments}, var)
+ var.registers([u'scope'])
+ var.put(u'scope', var.get(u"this").get(u'scopes').callprop(u'pop'))
+ if var.get(u'scope'):
+ return var.get(u'scope').get(u'path').callprop(u'getStatementParent')
+ PyJs_getNextScopeStatementParent_2028_._set_name(u'getNextScopeStatementParent')
+ var.get(u'PathHoister').get(u'prototype').put(u'getNextScopeStatementParent', PyJs_getNextScopeStatementParent_2028_)
+ @Js
+ def PyJs_hasOwnParamBindings_2029_(scope, this, arguments, var=var):
+ var = Scope({u'this':this, u'scope':scope, u'arguments':arguments, u'hasOwnParamBindings':PyJs_hasOwnParamBindings_2029_}, var)
+ var.registers([u'scope', u'binding', u'name'])
+ for PyJsTemp in var.get(u"this").get(u'bindings'):
+ var.put(u'name', PyJsTemp)
+ if var.get(u'scope').callprop(u'hasOwnBinding', var.get(u'name')).neg():
+ continue
+ var.put(u'binding', var.get(u"this").get(u'bindings').get(var.get(u'name')))
+ if PyJsStrictEq(var.get(u'binding').get(u'kind'),Js(u'param')):
+ return var.get(u'true')
+ return Js(False)
+ PyJs_hasOwnParamBindings_2029_._set_name(u'hasOwnParamBindings')
+ var.get(u'PathHoister').get(u'prototype').put(u'hasOwnParamBindings', PyJs_hasOwnParamBindings_2029_)
+ @Js
+ def PyJs_run_2030_(this, arguments, var=var):
+ var = Scope({u'this':this, u'run':PyJs_run_2030_, u'arguments':arguments}, var)
+ var.registers([u'node', u'attachTo', u'uid', u'parent'])
+ var.put(u'node', var.get(u"this").get(u'path').get(u'node'))
+ if var.get(u'node').get(u'_hoisted'):
+ return var.get('undefined')
+ var.get(u'node').put(u'_hoisted', var.get(u'true'))
+ var.get(u"this").get(u'path').callprop(u'traverse', var.get(u'referenceVisitor'), var.get(u"this"))
+ var.get(u"this").callprop(u'getCompatibleScopes')
+ var.put(u'attachTo', var.get(u"this").callprop(u'getAttachmentPath'))
+ if var.get(u'attachTo').neg():
+ return var.get('undefined')
+ if PyJsStrictEq(var.get(u'attachTo').callprop(u'getFunctionParent'),var.get(u"this").get(u'path').callprop(u'getFunctionParent')):
+ return var.get('undefined')
+ var.put(u'uid', var.get(u'attachTo').get(u'scope').callprop(u'generateUidIdentifier', Js(u'ref')))
+ var.get(u'attachTo').callprop(u'insertBefore', Js([var.get(u't').callprop(u'variableDeclaration', Js(u'var'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u'uid'), var.get(u"this").get(u'path').get(u'node'))]))]))
+ var.put(u'parent', var.get(u"this").get(u'path').get(u'parentPath'))
+ if (var.get(u'parent').callprop(u'isJSXElement') and PyJsStrictEq(var.get(u"this").get(u'path').get(u'container'),var.get(u'parent').get(u'node').get(u'children'))):
+ var.put(u'uid', var.get(u't').callprop(u'JSXExpressionContainer', var.get(u'uid')))
+ var.get(u"this").get(u'path').callprop(u'replaceWith', var.get(u'uid'))
+ PyJs_run_2030_._set_name(u'run')
+ var.get(u'PathHoister').get(u'prototype').put(u'run', PyJs_run_2030_)
+ return var.get(u'PathHoister')
+ PyJs_anonymous_2022_._set_name(u'anonymous')
+ var.put(u'PathHoister', PyJs_anonymous_2022_())
+ var.get(u'exports').put(u'default', var.get(u'PathHoister'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_2017_._set_name(u'anonymous')
+PyJs_Object_2031_ = Js({u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_2032_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'hooks', u'require', u'exports', u'module'])
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ @Js
+ def PyJs_anonymous_2033_(self, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'self':self, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'self', u'parent'])
+ if (PyJsStrictEq(var.get(u'self').get(u'key'),Js(u'body')) and var.get(u'parent').callprop(u'isArrowFunctionExpression')):
+ var.get(u'self').callprop(u'replaceWith', var.get(u'self').get(u'scope').callprop(u'buildUndefinedNode'))
+ return var.get(u'true')
+ PyJs_anonymous_2033_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_2034_(self, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'self':self, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'self', u'removeParent', u'parent'])
+ var.put(u'removeParent', Js(False))
+ var.put(u'removeParent', (var.get(u'removeParent') or (PyJsStrictEq(var.get(u'self').get(u'key'),Js(u'test')) and (var.get(u'parent').callprop(u'isWhile') or var.get(u'parent').callprop(u'isSwitchCase')))))
+ var.put(u'removeParent', (var.get(u'removeParent') or (PyJsStrictEq(var.get(u'self').get(u'key'),Js(u'declaration')) and var.get(u'parent').callprop(u'isExportDeclaration'))))
+ var.put(u'removeParent', (var.get(u'removeParent') or (PyJsStrictEq(var.get(u'self').get(u'key'),Js(u'body')) and var.get(u'parent').callprop(u'isLabeledStatement'))))
+ var.put(u'removeParent', (var.get(u'removeParent') or ((PyJsStrictEq(var.get(u'self').get(u'listKey'),Js(u'declarations')) and var.get(u'parent').callprop(u'isVariableDeclaration')) and PyJsStrictEq(var.get(u'parent').get(u'node').get(u'declarations').get(u'length'),Js(1.0)))))
+ var.put(u'removeParent', (var.get(u'removeParent') or (PyJsStrictEq(var.get(u'self').get(u'key'),Js(u'expression')) and var.get(u'parent').callprop(u'isExpressionStatement'))))
+ if var.get(u'removeParent'):
+ var.get(u'parent').callprop(u'remove')
+ return var.get(u'true')
+ PyJs_anonymous_2034_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_2035_(self, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'self':self, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'self', u'parent'])
+ if (var.get(u'parent').callprop(u'isSequenceExpression') and PyJsStrictEq(var.get(u'parent').get(u'node').get(u'expressions').get(u'length'),Js(1.0))):
+ var.get(u'parent').callprop(u'replaceWith', var.get(u'parent').get(u'node').get(u'expressions').get(u'0'))
+ return var.get(u'true')
+ PyJs_anonymous_2035_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_2036_(self, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'self':self, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'self', u'parent'])
+ if var.get(u'parent').callprop(u'isBinary'):
+ if PyJsStrictEq(var.get(u'self').get(u'key'),Js(u'left')):
+ var.get(u'parent').callprop(u'replaceWith', var.get(u'parent').get(u'node').get(u'right'))
+ else:
+ var.get(u'parent').callprop(u'replaceWith', var.get(u'parent').get(u'node').get(u'left'))
+ return var.get(u'true')
+ PyJs_anonymous_2036_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_2037_(self, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'self':self, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'self', u'parent'])
+ if ((var.get(u'parent').callprop(u'isIfStatement') and (PyJsStrictEq(var.get(u'self').get(u'key'),Js(u'consequent')) or PyJsStrictEq(var.get(u'self').get(u'key'),Js(u'alternate')))) or (var.get(u'parent').callprop(u'isLoop') and PyJsStrictEq(var.get(u'self').get(u'key'),Js(u'body')))):
+ PyJs_Object_2038_ = Js({u'type':Js(u'BlockStatement'),u'body':Js([])})
+ var.get(u'self').callprop(u'replaceWith', PyJs_Object_2038_)
+ return var.get(u'true')
+ PyJs_anonymous_2037_._set_name(u'anonymous')
+ var.put(u'hooks', var.get(u'exports').put(u'hooks', Js([PyJs_anonymous_2033_, PyJs_anonymous_2034_, PyJs_anonymous_2035_, PyJs_anonymous_2036_, PyJs_anonymous_2037_])))
+PyJs_anonymous_2032_._set_name(u'anonymous')
+PyJs_Object_2039_ = Js({})
+@Js
+def PyJs_anonymous_2040_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'Referenced', u'ReferencedIdentifier', u'Pure', u'_interopRequireWildcard', u'require', u'_babelTypes', u'Flow', u'module', u'ReferencedMemberExpression', u'BlockScoped', u'Generated', u'User', u't', u'Statement', u'Var', u'Scope', u'Expression', u'BindingIdentifier'])
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2042_ = Js({})
+ var.put(u'newObj', PyJs_Object_2042_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ def PyJs_LONG_2041_(var=var):
+ return var.get(u'exports').put(u'Var', var.get(u'exports').put(u'BlockScoped', var.get(u'exports').put(u'Referenced', var.get(u'exports').put(u'Scope', var.get(u'exports').put(u'Expression', var.get(u'exports').put(u'Statement', var.get(u'exports').put(u'BindingIdentifier', var.get(u'exports').put(u'ReferencedMemberExpression', var.get(u'exports').put(u'ReferencedIdentifier', var.get(u'undefined'))))))))))
+ var.get(u'exports').put(u'Flow', var.get(u'exports').put(u'Pure', var.get(u'exports').put(u'Generated', var.get(u'exports').put(u'User', PyJs_LONG_2041_()))))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ @Js
+ def PyJs_checkPath_2044_(_ref, opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'checkPath':PyJs_checkPath_2044_, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'node', u'_ref', u'opts', u'parent'])
+ var.put(u'node', var.get(u'_ref').get(u'node'))
+ var.put(u'parent', var.get(u'_ref').get(u'parent'))
+ if (var.get(u't').callprop(u'isIdentifier', var.get(u'node'), var.get(u'opts')).neg() and var.get(u't').callprop(u'isJSXMemberExpression', var.get(u'parent'), var.get(u'opts')).neg()):
+ if var.get(u't').callprop(u'isJSXIdentifier', var.get(u'node'), var.get(u'opts')):
+ if var.get(u'_babelTypes').get(u'react').callprop(u'isCompatTag', var.get(u'node').get(u'name')):
+ return Js(False)
+ else:
+ return Js(False)
+ return var.get(u't').callprop(u'isReferenced', var.get(u'node'), var.get(u'parent'))
+ PyJs_checkPath_2044_._set_name(u'checkPath')
+ PyJs_Object_2043_ = Js({u'types':Js([Js(u'Identifier'), Js(u'JSXIdentifier')]),u'checkPath':PyJs_checkPath_2044_})
+ var.put(u'ReferencedIdentifier', var.get(u'exports').put(u'ReferencedIdentifier', PyJs_Object_2043_))
+ @Js
+ def PyJs_checkPath_2046_(_ref2, this, arguments, var=var):
+ var = Scope({u'this':this, u'checkPath':PyJs_checkPath_2046_, u'_ref2':_ref2, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref2', u'parent'])
+ var.put(u'node', var.get(u'_ref2').get(u'node'))
+ var.put(u'parent', var.get(u'_ref2').get(u'parent'))
+ return (var.get(u't').callprop(u'isMemberExpression', var.get(u'node')) and var.get(u't').callprop(u'isReferenced', var.get(u'node'), var.get(u'parent')))
+ PyJs_checkPath_2046_._set_name(u'checkPath')
+ PyJs_Object_2045_ = Js({u'types':Js([Js(u'MemberExpression')]),u'checkPath':PyJs_checkPath_2046_})
+ var.put(u'ReferencedMemberExpression', var.get(u'exports').put(u'ReferencedMemberExpression', PyJs_Object_2045_))
+ @Js
+ def PyJs_checkPath_2048_(_ref3, this, arguments, var=var):
+ var = Scope({u'this':this, u'checkPath':PyJs_checkPath_2048_, u'_ref3':_ref3, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref3', u'parent'])
+ var.put(u'node', var.get(u'_ref3').get(u'node'))
+ var.put(u'parent', var.get(u'_ref3').get(u'parent'))
+ return (var.get(u't').callprop(u'isIdentifier', var.get(u'node')) and var.get(u't').callprop(u'isBinding', var.get(u'node'), var.get(u'parent')))
+ PyJs_checkPath_2048_._set_name(u'checkPath')
+ PyJs_Object_2047_ = Js({u'types':Js([Js(u'Identifier')]),u'checkPath':PyJs_checkPath_2048_})
+ var.put(u'BindingIdentifier', var.get(u'exports').put(u'BindingIdentifier', PyJs_Object_2047_))
+ @Js
+ def PyJs_checkPath_2050_(_ref4, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref4':_ref4, u'checkPath':PyJs_checkPath_2050_, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref4', u'parent'])
+ var.put(u'node', var.get(u'_ref4').get(u'node'))
+ var.put(u'parent', var.get(u'_ref4').get(u'parent'))
+ if var.get(u't').callprop(u'isStatement', var.get(u'node')):
+ if var.get(u't').callprop(u'isVariableDeclaration', var.get(u'node')):
+ PyJs_Object_2051_ = Js({u'left':var.get(u'node')})
+ if var.get(u't').callprop(u'isForXStatement', var.get(u'parent'), PyJs_Object_2051_):
+ return Js(False)
+ PyJs_Object_2052_ = Js({u'init':var.get(u'node')})
+ if var.get(u't').callprop(u'isForStatement', var.get(u'parent'), PyJs_Object_2052_):
+ return Js(False)
+ return var.get(u'true')
+ else:
+ return Js(False)
+ PyJs_checkPath_2050_._set_name(u'checkPath')
+ PyJs_Object_2049_ = Js({u'types':Js([Js(u'Statement')]),u'checkPath':PyJs_checkPath_2050_})
+ var.put(u'Statement', var.get(u'exports').put(u'Statement', PyJs_Object_2049_))
+ @Js
+ def PyJs_checkPath_2054_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'checkPath':PyJs_checkPath_2054_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ if var.get(u'path').callprop(u'isIdentifier'):
+ return var.get(u'path').callprop(u'isReferencedIdentifier')
+ else:
+ return var.get(u't').callprop(u'isExpression', var.get(u'path').get(u'node'))
+ PyJs_checkPath_2054_._set_name(u'checkPath')
+ PyJs_Object_2053_ = Js({u'types':Js([Js(u'Expression')]),u'checkPath':PyJs_checkPath_2054_})
+ var.put(u'Expression', var.get(u'exports').put(u'Expression', PyJs_Object_2053_))
+ @Js
+ def PyJs_checkPath_2056_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'checkPath':PyJs_checkPath_2056_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return var.get(u't').callprop(u'isScope', var.get(u'path').get(u'node'), var.get(u'path').get(u'parent'))
+ PyJs_checkPath_2056_._set_name(u'checkPath')
+ PyJs_Object_2055_ = Js({u'types':Js([Js(u'Scopable')]),u'checkPath':PyJs_checkPath_2056_})
+ var.put(u'Scope', var.get(u'exports').put(u'Scope', PyJs_Object_2055_))
+ @Js
+ def PyJs_checkPath_2058_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'checkPath':PyJs_checkPath_2058_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return var.get(u't').callprop(u'isReferenced', var.get(u'path').get(u'node'), var.get(u'path').get(u'parent'))
+ PyJs_checkPath_2058_._set_name(u'checkPath')
+ PyJs_Object_2057_ = Js({u'checkPath':PyJs_checkPath_2058_})
+ var.put(u'Referenced', var.get(u'exports').put(u'Referenced', PyJs_Object_2057_))
+ @Js
+ def PyJs_checkPath_2060_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'checkPath':PyJs_checkPath_2060_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return var.get(u't').callprop(u'isBlockScoped', var.get(u'path').get(u'node'))
+ PyJs_checkPath_2060_._set_name(u'checkPath')
+ PyJs_Object_2059_ = Js({u'checkPath':PyJs_checkPath_2060_})
+ var.put(u'BlockScoped', var.get(u'exports').put(u'BlockScoped', PyJs_Object_2059_))
+ @Js
+ def PyJs_checkPath_2062_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'checkPath':PyJs_checkPath_2062_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return var.get(u't').callprop(u'isVar', var.get(u'path').get(u'node'))
+ PyJs_checkPath_2062_._set_name(u'checkPath')
+ PyJs_Object_2061_ = Js({u'types':Js([Js(u'VariableDeclaration')]),u'checkPath':PyJs_checkPath_2062_})
+ var.put(u'Var', var.get(u'exports').put(u'Var', PyJs_Object_2061_))
+ @Js
+ def PyJs_checkPath_2064_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'checkPath':PyJs_checkPath_2064_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return (var.get(u'path').get(u'node') and var.get(u'path').get(u'node').get(u'loc').neg().neg())
+ PyJs_checkPath_2064_._set_name(u'checkPath')
+ PyJs_Object_2063_ = Js({u'checkPath':PyJs_checkPath_2064_})
+ var.put(u'User', var.get(u'exports').put(u'User', PyJs_Object_2063_))
+ @Js
+ def PyJs_checkPath_2066_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'checkPath':PyJs_checkPath_2066_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return var.get(u'path').callprop(u'isUser').neg()
+ PyJs_checkPath_2066_._set_name(u'checkPath')
+ PyJs_Object_2065_ = Js({u'checkPath':PyJs_checkPath_2066_})
+ var.put(u'Generated', var.get(u'exports').put(u'Generated', PyJs_Object_2065_))
+ @Js
+ def PyJs_checkPath_2068_(path, opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'checkPath':PyJs_checkPath_2068_, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'path', u'opts'])
+ return var.get(u'path').get(u'scope').callprop(u'isPure', var.get(u'path').get(u'node'), var.get(u'opts'))
+ PyJs_checkPath_2068_._set_name(u'checkPath')
+ PyJs_Object_2067_ = Js({u'checkPath':PyJs_checkPath_2068_})
+ var.put(u'Pure', var.get(u'exports').put(u'Pure', PyJs_Object_2067_))
+ @Js
+ def PyJs_checkPath_2070_(_ref5, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref5':_ref5, u'checkPath':PyJs_checkPath_2070_, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref5'])
+ var.put(u'node', var.get(u'_ref5').get(u'node'))
+ if var.get(u't').callprop(u'isFlow', var.get(u'node')):
+ return var.get(u'true')
+ else:
+ if var.get(u't').callprop(u'isImportDeclaration', var.get(u'node')):
+ return (PyJsStrictEq(var.get(u'node').get(u'importKind'),Js(u'type')) or PyJsStrictEq(var.get(u'node').get(u'importKind'),Js(u'typeof')))
+ else:
+ if var.get(u't').callprop(u'isExportDeclaration', var.get(u'node')):
+ return PyJsStrictEq(var.get(u'node').get(u'exportKind'),Js(u'type'))
+ else:
+ return Js(False)
+ PyJs_checkPath_2070_._set_name(u'checkPath')
+ PyJs_Object_2069_ = Js({u'types':Js([Js(u'Flow'), Js(u'ImportDeclaration'), Js(u'ExportDeclaration')]),u'checkPath':PyJs_checkPath_2070_})
+ var.put(u'Flow', var.get(u'exports').put(u'Flow', PyJs_Object_2069_))
+PyJs_anonymous_2040_._set_name(u'anonymous')
+PyJs_Object_2071_ = Js({u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_2072_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_hoister', u'updateSiblingKeys', u'_verifyNodeList', u'_interopRequireDefault', u'_cache', u'_getIterator2', u'_getIterator3', u'_maybePopFromStatements', u'_typeof2', u'_typeof3', u'_interopRequireWildcard', u'unshiftContainer', u'insertAfter', u'exports', u'pushContainer', u'insertBefore', u'_babelTypes', u'hoist', u'module', u'_index2', u'_index', u'require', u'_containerInsert', u'_containerInsertBefore', u't', u'_containerInsertAfter', u'_hoister2'])
+ @Js
+ def PyJsHoisted_pushContainer_(listKey, nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'listKey':listKey, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'path', u'listKey', u'container', u'nodes'])
+ var.get(u"this").callprop(u'_assertUnremoved')
+ var.put(u'nodes', var.get(u"this").callprop(u'_verifyNodeList', var.get(u'nodes')))
+ var.put(u'container', var.get(u"this").get(u'node').get(var.get(u'listKey')))
+ PyJs_Object_2078_ = Js({u'parentPath':var.get(u"this"),u'parent':var.get(u"this").get(u'node'),u'container':var.get(u'container'),u'listKey':var.get(u'listKey'),u'key':var.get(u'container').get(u'length')})
+ var.put(u'path', var.get(u'_index2').get(u'default').callprop(u'get', PyJs_Object_2078_))
+ return var.get(u'path').callprop(u'replaceWithMultiple', var.get(u'nodes'))
+ PyJsHoisted_pushContainer_.func_name = u'pushContainer'
+ var.put(u'pushContainer', PyJsHoisted_pushContainer_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2073_ = Js({})
+ var.put(u'newObj', PyJs_Object_2073_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_insertBefore_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'nodes'])
+ var.get(u"this").callprop(u'_assertUnremoved')
+ var.put(u'nodes', var.get(u"this").callprop(u'_verifyNodeList', var.get(u'nodes')))
+ if (var.get(u"this").get(u'parentPath').callprop(u'isExpressionStatement') or var.get(u"this").get(u'parentPath').callprop(u'isLabeledStatement')):
+ return var.get(u"this").get(u'parentPath').callprop(u'insertBefore', var.get(u'nodes'))
+ else:
+ if (var.get(u"this").callprop(u'isNodeType', Js(u'Expression')) or (var.get(u"this").get(u'parentPath').callprop(u'isForStatement') and PyJsStrictEq(var.get(u"this").get(u'key'),Js(u'init')))):
+ if var.get(u"this").get(u'node'):
+ var.get(u'nodes').callprop(u'push', var.get(u"this").get(u'node'))
+ var.get(u"this").callprop(u'replaceExpressionWithStatements', var.get(u'nodes'))
+ else:
+ var.get(u"this").callprop(u'_maybePopFromStatements', var.get(u'nodes'))
+ if var.get(u'Array').callprop(u'isArray', var.get(u"this").get(u'container')):
+ return var.get(u"this").callprop(u'_containerInsertBefore', var.get(u'nodes'))
+ else:
+ if var.get(u"this").callprop(u'isStatementOrBlock'):
+ if var.get(u"this").get(u'node'):
+ var.get(u'nodes').callprop(u'push', var.get(u"this").get(u'node'))
+ var.get(u"this").callprop(u'_replaceWith', var.get(u't').callprop(u'blockStatement', var.get(u'nodes')))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"We don't know what to do with this node type. We were previously a Statement but we can't fit in here?")))
+ raise PyJsTempException
+ return Js([var.get(u"this")])
+ PyJsHoisted_insertBefore_.func_name = u'insertBefore'
+ var.put(u'insertBefore', PyJsHoisted_insertBefore_)
+ @Js
+ def PyJsHoisted__containerInsert_(PyJsArg_66726f6d_, nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'from':PyJsArg_66726f6d_, u'arguments':arguments}, var)
+ var.registers([u'node', u'paths', u'_isArray', u'context', u'_iterator', u'_isArray2', u'to', u'i', u'_i2', u'_ref2', u'contexts', u'from', u'_i', u'path', u'_ref', u'_iterator2', u'nodes', u'_path'])
+ var.get(u"this").callprop(u'updateSiblingKeys', var.get(u'from'), var.get(u'nodes').get(u'length'))
+ var.put(u'paths', Js([]))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'_path', var.get(u'_ref'))
+ var.get(u'_path').callprop(u'setScope')
+ @Js
+ def PyJs_anonymous_2076_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return Js(u'Inserted.')
+ PyJs_anonymous_2076_._set_name(u'anonymous')
+ var.get(u'_path').callprop(u'debug', PyJs_anonymous_2076_)
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'contexts'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'context', var.get(u'_ref2'))
+ var.get(u'context').callprop(u'maybeQueue', var.get(u'_path'), var.get(u'true'))
+
+
+ return var.get(u'paths')
+ PyJsHoisted__containerInsert_.func_name = u'_containerInsert'
+ var.put(u'_containerInsert', PyJsHoisted__containerInsert_)
+ @Js
+ def PyJsHoisted_unshiftContainer_(listKey, nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'listKey':listKey, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'path', u'listKey', u'nodes'])
+ var.get(u"this").callprop(u'_assertUnremoved')
+ var.put(u'nodes', var.get(u"this").callprop(u'_verifyNodeList', var.get(u'nodes')))
+ PyJs_Object_2077_ = Js({u'parentPath':var.get(u"this"),u'parent':var.get(u"this").get(u'node'),u'container':var.get(u"this").get(u'node').get(var.get(u'listKey')),u'listKey':var.get(u'listKey'),u'key':Js(0.0)})
+ var.put(u'path', var.get(u'_index2').get(u'default').callprop(u'get', PyJs_Object_2077_))
+ return var.get(u'path').callprop(u'insertBefore', var.get(u'nodes'))
+ PyJsHoisted_unshiftContainer_.func_name = u'unshiftContainer'
+ var.put(u'unshiftContainer', PyJsHoisted_unshiftContainer_)
+ @Js
+ def PyJsHoisted__containerInsertBefore_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'nodes'])
+ return var.get(u"this").callprop(u'_containerInsert', var.get(u"this").get(u'key'), var.get(u'nodes'))
+ PyJsHoisted__containerInsertBefore_.func_name = u'_containerInsertBefore'
+ var.put(u'_containerInsertBefore', PyJsHoisted__containerInsertBefore_)
+ @Js
+ def PyJsHoisted_updateSiblingKeys_(fromIndex, incrementBy, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'fromIndex':fromIndex, u'incrementBy':incrementBy}, var)
+ var.registers([u'i', u'paths', u'incrementBy', u'fromIndex', u'path'])
+ if var.get(u"this").get(u'parent').neg():
+ return var.get('undefined')
+ var.put(u'paths', var.get(u'_cache').get(u'path').callprop(u'get', var.get(u"this").get(u'parent')))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'fromIndex')):
+ var.get(u'path').put(u'key', var.get(u'incrementBy'), u'+')
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ PyJsHoisted_updateSiblingKeys_.func_name = u'updateSiblingKeys'
+ var.put(u'updateSiblingKeys', PyJsHoisted_updateSiblingKeys_)
+ @Js
+ def PyJsHoisted__verifyNodeList_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'i', u'node', u'nodes', u'type', u'msg'])
+ if var.get(u'nodes').neg():
+ return Js([])
+ if PyJsStrictNeq(var.get(u'nodes').get(u'constructor'),var.get(u'Array')):
+ var.put(u'nodes', Js([var.get(u'nodes')]))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else var.get(u"this").get(u'scope')))
+ var.put(u'hoister', var.get(u'_hoister2').get(u'default').create(var.get(u"this"), var.get(u'scope')))
+ return var.get(u'hoister').callprop(u'run')
+ PyJsHoisted_hoist_.func_name = u'hoist'
+ var.put(u'hoist', PyJsHoisted_hoist_)
+ @Js
+ def PyJsHoisted__containerInsertAfter_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'nodes'])
+ return var.get(u"this").callprop(u'_containerInsert', (var.get(u"this").get(u'key')+Js(1.0)), var.get(u'nodes'))
+ PyJsHoisted__containerInsertAfter_.func_name = u'_containerInsertAfter'
+ var.put(u'_containerInsertAfter', PyJsHoisted__containerInsertAfter_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2074_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2074_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__maybePopFromStatements_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'nodes', u'last', u'isIdentifier'])
+ var.put(u'last', var.get(u'nodes').get((var.get(u'nodes').get(u'length')-Js(1.0))))
+ var.put(u'isIdentifier', (var.get(u't').callprop(u'isIdentifier', var.get(u'last')) or (var.get(u't').callprop(u'isExpressionStatement', var.get(u'last')) and var.get(u't').callprop(u'isIdentifier', var.get(u'last').get(u'expression')))))
+ if (var.get(u'isIdentifier') and var.get(u"this").callprop(u'isCompletionRecord').neg()):
+ var.get(u'nodes').callprop(u'pop')
+ PyJsHoisted__maybePopFromStatements_.func_name = u'_maybePopFromStatements'
+ var.put(u'_maybePopFromStatements', PyJsHoisted__maybePopFromStatements_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_typeof2', var.get(u'require')(Js(u'babel-runtime/helpers/typeof')))
+ var.put(u'_typeof3', var.get(u'_interopRequireDefault')(var.get(u'_typeof2')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'insertBefore', var.get(u'insertBefore'))
+ var.get(u'exports').put(u'_containerInsert', var.get(u'_containerInsert'))
+ var.get(u'exports').put(u'_containerInsertBefore', var.get(u'_containerInsertBefore'))
+ var.get(u'exports').put(u'_containerInsertAfter', var.get(u'_containerInsertAfter'))
+ var.get(u'exports').put(u'_maybePopFromStatements', var.get(u'_maybePopFromStatements'))
+ var.get(u'exports').put(u'insertAfter', var.get(u'insertAfter'))
+ var.get(u'exports').put(u'updateSiblingKeys', var.get(u'updateSiblingKeys'))
+ var.get(u'exports').put(u'_verifyNodeList', var.get(u'_verifyNodeList'))
+ var.get(u'exports').put(u'unshiftContainer', var.get(u'unshiftContainer'))
+ var.get(u'exports').put(u'pushContainer', var.get(u'pushContainer'))
+ var.get(u'exports').put(u'hoist', var.get(u'hoist'))
+ var.put(u'_cache', var.get(u'require')(Js(u'../cache')))
+ var.put(u'_hoister', var.get(u'require')(Js(u'./lib/hoister')))
+ var.put(u'_hoister2', var.get(u'_interopRequireDefault')(var.get(u'_hoister')))
+ var.put(u'_index', var.get(u'require')(Js(u'./index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_2072_._set_name(u'anonymous')
+PyJs_Object_2079_ = Js({u'../cache':Js(222.0),u'./index':Js(232.0),u'./lib/hoister':Js(237.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/helpers/typeof':Js(114.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_2080_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_assertUnremoved', u'exports', u'require', u'remove', u'_remove', u'_markRemoved', u'module', u'_removalHooks', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'_callRemovalHooks'])
+ @Js
+ def PyJsHoisted__assertUnremoved_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u"this").get(u'removed'):
+ PyJsTempException = JsToPyException(var.get(u"this").callprop(u'buildCodeFrameError', Js(u'NodePath has been removed so is read-only.')))
+ raise PyJsTempException
+ PyJsHoisted__assertUnremoved_.func_name = u'_assertUnremoved'
+ var.put(u'_assertUnremoved', PyJsHoisted__assertUnremoved_)
+ @Js
+ def PyJsHoisted_remove_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'_assertUnremoved')
+ var.get(u"this").callprop(u'resync')
+ if var.get(u"this").callprop(u'_callRemovalHooks'):
+ var.get(u"this").callprop(u'_markRemoved')
+ return var.get('undefined')
+ var.get(u"this").callprop(u'shareCommentsWithSiblings')
+ var.get(u"this").callprop(u'_remove')
+ var.get(u"this").callprop(u'_markRemoved')
+ PyJsHoisted_remove_.func_name = u'remove'
+ var.put(u'remove', PyJsHoisted_remove_)
+ @Js
+ def PyJsHoisted__remove_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u'Array').callprop(u'isArray', var.get(u"this").get(u'container')):
+ var.get(u"this").get(u'container').callprop(u'splice', var.get(u"this").get(u'key'), Js(1.0))
+ var.get(u"this").callprop(u'updateSiblingKeys', var.get(u"this").get(u'key'), (-Js(1.0)))
+ else:
+ var.get(u"this").callprop(u'_replaceWith', var.get(u"null"))
+ PyJsHoisted__remove_.func_name = u'_remove'
+ var.put(u'_remove', PyJsHoisted__remove_)
+ @Js
+ def PyJsHoisted__markRemoved_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").put(u'shouldSkip', var.get(u'true'))
+ var.get(u"this").put(u'removed', var.get(u'true'))
+ var.get(u"this").put(u'node', var.get(u"null"))
+ PyJsHoisted__markRemoved_.func_name = u'_markRemoved'
+ var.put(u'_markRemoved', PyJsHoisted__markRemoved_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2081_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2081_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__callRemovalHooks_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'fn', u'_isArray', u'_iterator', u'_ref', u'_i'])
+ #for JS loop
+ var.put(u'_iterator', var.get(u'_removalHooks').get(u'hooks'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'fn', var.get(u'_ref'))
+ if var.get(u'fn')(var.get(u"this"), var.get(u"this").get(u'parentPath')):
+ return var.get(u'true')
+
+ PyJsHoisted__callRemovalHooks_.func_name = u'_callRemovalHooks'
+ var.put(u'_callRemovalHooks', PyJsHoisted__callRemovalHooks_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'remove', var.get(u'remove'))
+ var.get(u'exports').put(u'_callRemovalHooks', var.get(u'_callRemovalHooks'))
+ var.get(u'exports').put(u'_remove', var.get(u'_remove'))
+ var.get(u'exports').put(u'_markRemoved', var.get(u'_markRemoved'))
+ var.get(u'exports').put(u'_assertUnremoved', var.get(u'_assertUnremoved'))
+ var.put(u'_removalHooks', var.get(u'require')(Js(u'./lib/removal-hooks')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_2080_._set_name(u'anonymous')
+PyJs_Object_2082_ = Js({u'./lib/removal-hooks':Js(238.0),u'babel-runtime/core-js/get-iterator':Js(96.0)})
+@Js
+def PyJs_anonymous_2083_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'replaceExpressionWithStatements', u'module', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'replaceInline', u'replaceWithSourceString', u'_babelCodeFrame2', u'_replaceWith', u'_babylon', u'hoistVariablesVisitor', u'exports', u'_babelTypes', u'_interopRequireWildcard', u'replaceWith', u'_babelCodeFrame', u'_index4', u'_index2', u'_index3', u'_index', u'require', u't', u'replaceWithMultiple'])
+ @Js
+ def PyJsHoisted_replaceExpressionWithStatements_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'container', u'_isArray2', u'toSequenceExpression', u'completionRecords', u'_i2', u'_ref2', u'exprs', u'uid', u'path', u'nodes', u'callee', u'loop', u'_iterator2'])
+ var.get(u"this").callprop(u'resync')
+ var.put(u'toSequenceExpression', var.get(u't').callprop(u'toSequenceExpression', var.get(u'nodes'), var.get(u"this").get(u'scope')))
+ if var.get(u't').callprop(u'isSequenceExpression', var.get(u'toSequenceExpression')):
+ var.put(u'exprs', var.get(u'toSequenceExpression').get(u'expressions'))
+ if ((var.get(u'exprs').get(u'length')>=Js(2.0)) and var.get(u"this").get(u'parentPath').callprop(u'isExpressionStatement')):
+ var.get(u"this").callprop(u'_maybePopFromStatements', var.get(u'exprs'))
+ if PyJsStrictEq(var.get(u'exprs').get(u'length'),Js(1.0)):
+ var.get(u"this").callprop(u'replaceWith', var.get(u'exprs').get(u'0'))
+ else:
+ var.get(u"this").callprop(u'replaceWith', var.get(u'toSequenceExpression'))
+ else:
+ if var.get(u'toSequenceExpression'):
+ var.get(u"this").callprop(u'replaceWith', var.get(u'toSequenceExpression'))
+ else:
+ var.put(u'container', var.get(u't').callprop(u'functionExpression', var.get(u"null"), Js([]), var.get(u't').callprop(u'blockStatement', var.get(u'nodes'))))
+ var.get(u'container').put(u'shadow', var.get(u'true'))
+ var.get(u"this").callprop(u'replaceWith', var.get(u't').callprop(u'callExpression', var.get(u'container'), Js([])))
+ var.get(u"this").callprop(u'traverse', var.get(u'hoistVariablesVisitor'))
+ var.put(u'completionRecords', var.get(u"this").callprop(u'get', Js(u'callee')).callprop(u'getCompletionRecords'))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'completionRecords'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'path', var.get(u'_ref2'))
+ if var.get(u'path').callprop(u'isExpressionStatement').neg():
+ continue
+ @Js
+ def PyJs_anonymous_2091_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return var.get(u'path').callprop(u'isLoop')
+ PyJs_anonymous_2091_._set_name(u'anonymous')
+ var.put(u'loop', var.get(u'path').callprop(u'findParent', PyJs_anonymous_2091_))
+ if var.get(u'loop'):
+ var.put(u'callee', var.get(u"this").callprop(u'get', Js(u'callee')))
+ var.put(u'uid', var.get(u'callee').get(u'scope').callprop(u'generateDeclaredUidIdentifier', Js(u'ret')))
+ var.get(u'callee').callprop(u'get', Js(u'body')).callprop(u'pushContainer', Js(u'body'), var.get(u't').callprop(u'returnStatement', var.get(u'uid')))
+ var.get(u'path').callprop(u'get', Js(u'expression')).callprop(u'replaceWith', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'uid'), var.get(u'path').get(u'node').get(u'expression')))
+ else:
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'returnStatement', var.get(u'path').get(u'node').get(u'expression')))
+
+ return var.get(u"this").get(u'node')
+ PyJsHoisted_replaceExpressionWithStatements_.func_name = u'replaceExpressionWithStatements'
+ var.put(u'replaceExpressionWithStatements', PyJsHoisted_replaceExpressionWithStatements_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2084_ = Js({})
+ var.put(u'newObj', PyJs_Object_2084_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_replaceWith_(replacement, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'replacement':replacement}, var)
+ var.registers([u'oldNode', u'replacement'])
+ var.get(u"this").callprop(u'resync')
+ if var.get(u"this").get(u'removed'):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"You can't replace this node, we've already removed it")))
+ raise PyJsTempException
+ if var.get(u'replacement').instanceof(var.get(u'_index4').get(u'default')):
+ var.put(u'replacement', var.get(u'replacement').get(u'node'))
+ if var.get(u'replacement').neg():
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'You passed `path.replaceWith()` a falsy node, use `path.remove()` instead')))
+ raise PyJsTempException
+ if PyJsStrictEq(var.get(u"this").get(u'node'),var.get(u'replacement')):
+ return var.get('undefined')
+ if (var.get(u"this").callprop(u'isProgram') and var.get(u't').callprop(u'isProgram', var.get(u'replacement')).neg()):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'You can only replace a Program root node with another Program node')))
+ raise PyJsTempException
+ if var.get(u'Array').callprop(u'isArray', var.get(u'replacement')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"Don't use `path.replaceWith()` with an array of nodes, use `path.replaceWithMultiple()`")))
+ raise PyJsTempException
+ if PyJsStrictEq(var.get(u'replacement',throw=False).typeof(),Js(u'string')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"Don't use `path.replaceWith()` with a source string, use `path.replaceWithSourceString()`")))
+ raise PyJsTempException
+ if (var.get(u"this").callprop(u'isNodeType', Js(u'Statement')) and var.get(u't').callprop(u'isExpression', var.get(u'replacement'))):
+ if (var.get(u"this").callprop(u'canHaveVariableDeclarationOrExpression').neg() and var.get(u"this").callprop(u'canSwapBetweenExpressionAndStatement', var.get(u'replacement')).neg()):
+ var.put(u'replacement', var.get(u't').callprop(u'expressionStatement', var.get(u'replacement')))
+ if (var.get(u"this").callprop(u'isNodeType', Js(u'Expression')) and var.get(u't').callprop(u'isStatement', var.get(u'replacement'))):
+ if (var.get(u"this").callprop(u'canHaveVariableDeclarationOrExpression').neg() and var.get(u"this").callprop(u'canSwapBetweenExpressionAndStatement', var.get(u'replacement')).neg()):
+ return var.get(u"this").callprop(u'replaceExpressionWithStatements', Js([var.get(u'replacement')]))
+ var.put(u'oldNode', var.get(u"this").get(u'node'))
+ if var.get(u'oldNode'):
+ var.get(u't').callprop(u'inheritsComments', var.get(u'replacement'), var.get(u'oldNode'))
+ var.get(u't').callprop(u'removeComments', var.get(u'oldNode'))
+ var.get(u"this").callprop(u'_replaceWith', var.get(u'replacement'))
+ var.get(u"this").put(u'type', var.get(u'replacement').get(u'type'))
+ var.get(u"this").callprop(u'setScope')
+ var.get(u"this").callprop(u'requeue')
+ PyJsHoisted_replaceWith_.func_name = u'replaceWith'
+ var.put(u'replaceWith', PyJsHoisted_replaceWith_)
+ @Js
+ def PyJsHoisted__replaceWith_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").get(u'container').neg():
+ PyJsTempException = JsToPyException(var.get(u'ReferenceError').create(Js(u'Container is falsy')))
+ raise PyJsTempException
+ if var.get(u"this").get(u'inList'):
+ var.get(u't').callprop(u'validate', var.get(u"this").get(u'parent'), var.get(u"this").get(u'key'), Js([var.get(u'node')]))
+ else:
+ var.get(u't').callprop(u'validate', var.get(u"this").get(u'parent'), var.get(u"this").get(u'key'), var.get(u'node'))
+ @Js
+ def PyJs_anonymous_2090_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return (Js(u'Replace with ')+(var.get(u'node') and var.get(u'node').get(u'type')))
+ PyJs_anonymous_2090_._set_name(u'anonymous')
+ var.get(u"this").callprop(u'debug', PyJs_anonymous_2090_)
+ var.get(u"this").put(u'node', var.get(u"this").get(u'container').put(var.get(u"this").get(u'key'), var.get(u'node')))
+ PyJsHoisted__replaceWith_.func_name = u'_replaceWith'
+ var.put(u'_replaceWith', PyJsHoisted__replaceWith_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2085_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2085_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_replaceInline_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'nodes'])
+ var.get(u"this").callprop(u'resync')
+ if var.get(u'Array').callprop(u'isArray', var.get(u'nodes')):
+ if var.get(u'Array').callprop(u'isArray', var.get(u"this").get(u'container')):
+ var.put(u'nodes', var.get(u"this").callprop(u'_verifyNodeList', var.get(u'nodes')))
+ var.get(u"this").callprop(u'_containerInsertAfter', var.get(u'nodes'))
+ return var.get(u"this").callprop(u'remove')
+ else:
+ return var.get(u"this").callprop(u'replaceWithMultiple', var.get(u'nodes'))
+ else:
+ return var.get(u"this").callprop(u'replaceWith', var.get(u'nodes'))
+ PyJsHoisted_replaceInline_.func_name = u'replaceInline'
+ var.put(u'replaceInline', PyJsHoisted_replaceInline_)
+ @Js
+ def PyJsHoisted_replaceWithMultiple_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'nodes'])
+ var.get(u"this").callprop(u'resync')
+ var.put(u'nodes', var.get(u"this").callprop(u'_verifyNodeList', var.get(u'nodes')))
+ var.get(u't').callprop(u'inheritLeadingComments', var.get(u'nodes').get(u'0'), var.get(u"this").get(u'node'))
+ var.get(u't').callprop(u'inheritTrailingComments', var.get(u'nodes').get((var.get(u'nodes').get(u'length')-Js(1.0))), var.get(u"this").get(u'node'))
+ var.get(u"this").put(u'node', var.get(u"this").get(u'container').put(var.get(u"this").get(u'key'), var.get(u"null")))
+ var.get(u"this").callprop(u'insertAfter', var.get(u'nodes'))
+ if var.get(u"this").get(u'node'):
+ var.get(u"this").callprop(u'requeue')
+ else:
+ var.get(u"this").callprop(u'remove')
+ PyJsHoisted_replaceWithMultiple_.func_name = u'replaceWithMultiple'
+ var.put(u'replaceWithMultiple', PyJsHoisted_replaceWithMultiple_)
+ @Js
+ def PyJsHoisted_replaceWithSourceString_(replacement, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'replacement':replacement}, var)
+ var.registers([u'loc', u'replacement'])
+ var.get(u"this").callprop(u'resync')
+ try:
+ var.put(u'replacement', ((Js(u'(')+var.get(u'replacement'))+Js(u')')))
+ var.put(u'replacement', PyJsComma(Js(0.0),var.get(u'_babylon').get(u'parse'))(var.get(u'replacement')))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_657272_62521723 = var.own.get(u'err')
+ var.force_own_put(u'err', PyExceptionToJs(PyJsTempException))
+ try:
+ var.put(u'loc', var.get(u'err').get(u'loc'))
+ if var.get(u'loc'):
+ var.get(u'err').put(u'message', Js(u' - make sure this is an expression.'), u'+')
+ var.get(u'err').put(u'message', (Js(u'\n')+PyJsComma(Js(0.0),var.get(u'_babelCodeFrame2').get(u'default'))(var.get(u'replacement'), var.get(u'loc').get(u'line'), (var.get(u'loc').get(u'column')+Js(1.0)))), u'+')
+ PyJsTempException = JsToPyException(var.get(u'err'))
+ raise PyJsTempException
+ finally:
+ if PyJsHolder_657272_62521723 is not None:
+ var.own[u'err'] = PyJsHolder_657272_62521723
+ else:
+ del var.own[u'err']
+ del PyJsHolder_657272_62521723
+ var.put(u'replacement', var.get(u'replacement').get(u'program').get(u'body').get(u'0').get(u'expression'))
+ var.get(u'_index2').get(u'default').callprop(u'removeProperties', var.get(u'replacement'))
+ return var.get(u"this").callprop(u'replaceWith', var.get(u'replacement'))
+ PyJsHoisted_replaceWithSourceString_.func_name = u'replaceWithSourceString'
+ var.put(u'replaceWithSourceString', PyJsHoisted_replaceWithSourceString_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'replaceWithMultiple', var.get(u'replaceWithMultiple'))
+ var.get(u'exports').put(u'replaceWithSourceString', var.get(u'replaceWithSourceString'))
+ var.get(u'exports').put(u'replaceWith', var.get(u'replaceWith'))
+ var.get(u'exports').put(u'_replaceWith', var.get(u'_replaceWith'))
+ var.get(u'exports').put(u'replaceExpressionWithStatements', var.get(u'replaceExpressionWithStatements'))
+ var.get(u'exports').put(u'replaceInline', var.get(u'replaceInline'))
+ var.put(u'_babelCodeFrame', var.get(u'require')(Js(u'babel-code-frame')))
+ var.put(u'_babelCodeFrame2', var.get(u'_interopRequireDefault')(var.get(u'_babelCodeFrame')))
+ var.put(u'_index', var.get(u'require')(Js(u'../index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ var.put(u'_index3', var.get(u'require')(Js(u'./index')))
+ var.put(u'_index4', var.get(u'_interopRequireDefault')(var.get(u'_index3')))
+ var.put(u'_babylon', var.get(u'require')(Js(u'babylon')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ @Js
+ def PyJs_Function_2087_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'Function':PyJs_Function_2087_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'path').callprop(u'skip')
+ PyJs_Function_2087_._set_name(u'Function')
+ @Js
+ def PyJs_VariableDeclaration_2088_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'VariableDeclaration':PyJs_VariableDeclaration_2088_}, var)
+ var.registers([u'_isArray', u'_iterator', u'key', u'exprs', u'declar', u'_i', u'path', u'bindings', u'_ref'])
+ if PyJsStrictNeq(var.get(u'path').get(u'node').get(u'kind'),Js(u'var')):
+ return var.get('undefined')
+ var.put(u'bindings', var.get(u'path').callprop(u'getBindingIdentifiers'))
+ for PyJsTemp in var.get(u'bindings'):
+ var.put(u'key', PyJsTemp)
+ PyJs_Object_2089_ = Js({u'id':var.get(u'bindings').get(var.get(u'key'))})
+ var.get(u'path').get(u'scope').callprop(u'push', PyJs_Object_2089_)
+ var.put(u'exprs', Js([]))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'path').get(u'node').get(u'declarations'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'declar', var.get(u'_ref'))
+ if var.get(u'declar').get(u'init'):
+ var.get(u'exprs').callprop(u'push', var.get(u't').callprop(u'expressionStatement', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'declar').get(u'id'), var.get(u'declar').get(u'init'))))
+
+ var.get(u'path').callprop(u'replaceWithMultiple', var.get(u'exprs'))
+ PyJs_VariableDeclaration_2088_._set_name(u'VariableDeclaration')
+ PyJs_Object_2086_ = Js({u'Function':PyJs_Function_2087_,u'VariableDeclaration':PyJs_VariableDeclaration_2088_})
+ var.put(u'hoistVariablesVisitor', PyJs_Object_2086_)
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_2083_._set_name(u'anonymous')
+PyJs_Object_2092_ = Js({u'../index':Js(225.0),u'./index':Js(232.0),u'babel-code-frame':Js(4.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-types':Js(258.0),u'babylon':Js(262.0)})
+@Js
+def PyJs_anonymous_2093_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'Binding', u'module', u'_interopRequireDefault', u'_classCallCheck3', u'_classCallCheck2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2094_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2094_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ pass
+ @Js
+ def PyJs_anonymous_2095_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'Binding'])
+ @Js
+ def PyJsHoisted_Binding_(_ref, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'arguments':arguments}, var)
+ var.registers([u'kind', u'existing', u'path', u'scope', u'_ref', u'identifier'])
+ var.put(u'existing', var.get(u'_ref').get(u'existing'))
+ var.put(u'identifier', var.get(u'_ref').get(u'identifier'))
+ var.put(u'scope', var.get(u'_ref').get(u'scope'))
+ var.put(u'path', var.get(u'_ref').get(u'path'))
+ var.put(u'kind', var.get(u'_ref').get(u'kind'))
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'Binding'))
+ var.get(u"this").put(u'identifier', var.get(u'identifier'))
+ var.get(u"this").put(u'scope', var.get(u'scope'))
+ var.get(u"this").put(u'path', var.get(u'path'))
+ var.get(u"this").put(u'kind', var.get(u'kind'))
+ var.get(u"this").put(u'constantViolations', Js([]))
+ var.get(u"this").put(u'constant', var.get(u'true'))
+ var.get(u"this").put(u'referencePaths', Js([]))
+ var.get(u"this").put(u'referenced', Js(False))
+ var.get(u"this").put(u'references', Js(0.0))
+ var.get(u"this").callprop(u'clearValue')
+ if var.get(u'existing'):
+ var.get(u"this").put(u'constantViolations', Js([]).callprop(u'concat', var.get(u'existing').get(u'path'), var.get(u'existing').get(u'constantViolations'), var.get(u"this").get(u'constantViolations')))
+ PyJsHoisted_Binding_.func_name = u'Binding'
+ var.put(u'Binding', PyJsHoisted_Binding_)
+ pass
+ @Js
+ def PyJs_deoptValue_2096_(this, arguments, var=var):
+ var = Scope({u'this':this, u'deoptValue':PyJs_deoptValue_2096_, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").callprop(u'clearValue')
+ var.get(u"this").put(u'hasDeoptedValue', var.get(u'true'))
+ PyJs_deoptValue_2096_._set_name(u'deoptValue')
+ var.get(u'Binding').get(u'prototype').put(u'deoptValue', PyJs_deoptValue_2096_)
+ @Js
+ def PyJs_setValue_2097_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'setValue':PyJs_setValue_2097_, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ if var.get(u"this").get(u'hasDeoptedValue'):
+ return var.get('undefined')
+ var.get(u"this").put(u'hasValue', var.get(u'true'))
+ var.get(u"this").put(u'value', var.get(u'value'))
+ PyJs_setValue_2097_._set_name(u'setValue')
+ var.get(u'Binding').get(u'prototype').put(u'setValue', PyJs_setValue_2097_)
+ @Js
+ def PyJs_clearValue_2098_(this, arguments, var=var):
+ var = Scope({u'this':this, u'clearValue':PyJs_clearValue_2098_, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").put(u'hasDeoptedValue', Js(False))
+ var.get(u"this").put(u'hasValue', Js(False))
+ var.get(u"this").put(u'value', var.get(u"null"))
+ PyJs_clearValue_2098_._set_name(u'clearValue')
+ var.get(u'Binding').get(u'prototype').put(u'clearValue', PyJs_clearValue_2098_)
+ @Js
+ def PyJs_reassign_2099_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'reassign':PyJs_reassign_2099_}, var)
+ var.registers([u'path'])
+ var.get(u"this").put(u'constant', Js(False))
+ if PyJsStrictNeq(var.get(u"this").get(u'constantViolations').callprop(u'indexOf', var.get(u'path')),(-Js(1.0))):
+ return var.get('undefined')
+ var.get(u"this").get(u'constantViolations').callprop(u'push', var.get(u'path'))
+ PyJs_reassign_2099_._set_name(u'reassign')
+ var.get(u'Binding').get(u'prototype').put(u'reassign', PyJs_reassign_2099_)
+ @Js
+ def PyJs_reference_2100_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'reference':PyJs_reference_2100_}, var)
+ var.registers([u'path'])
+ if PyJsStrictNeq(var.get(u"this").get(u'referencePaths').callprop(u'indexOf', var.get(u'path')),(-Js(1.0))):
+ return var.get('undefined')
+ var.get(u"this").put(u'referenced', var.get(u'true'))
+ (var.get(u"this").put(u'references',Js(var.get(u"this").get(u'references').to_number())+Js(1))-Js(1))
+ var.get(u"this").get(u'referencePaths').callprop(u'push', var.get(u'path'))
+ PyJs_reference_2100_._set_name(u'reference')
+ var.get(u'Binding').get(u'prototype').put(u'reference', PyJs_reference_2100_)
+ @Js
+ def PyJs_dereference_2101_(this, arguments, var=var):
+ var = Scope({u'this':this, u'dereference':PyJs_dereference_2101_, u'arguments':arguments}, var)
+ var.registers([])
+ (var.get(u"this").put(u'references',Js(var.get(u"this").get(u'references').to_number())-Js(1))+Js(1))
+ var.get(u"this").put(u'referenced', var.get(u"this").get(u'references').neg().neg())
+ PyJs_dereference_2101_._set_name(u'dereference')
+ var.get(u'Binding').get(u'prototype').put(u'dereference', PyJs_dereference_2101_)
+ return var.get(u'Binding')
+ PyJs_anonymous_2095_._set_name(u'anonymous')
+ var.put(u'Binding', PyJs_anonymous_2095_())
+ var.get(u'exports').put(u'default', var.get(u'Binding'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_2093_._set_name(u'anonymous')
+PyJs_Object_2102_ = Js({u'babel-runtime/helpers/classCallCheck':Js(110.0)})
+@Js
+def PyJs_anonymous_2103_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_binding3', u'_binding2', u'uid', u'_defaults', u'module', u'Scope', u'_interopRequireDefault', u'_cache', u'_getIterator2', u'_getIterator3', u'_renamer2', u'_create2', u'_keys', u'_globals2', u't', u'_classCallCheck3', u'_classCallCheck2', u'_babelMessages', u'_create', u'_renamer', u'exports', u'_interopRequireWildcard', u'_babelTypes', u'_includes2', u'_globals', u'_keys2', u'collectorVisitor', u'_index2', u'_defaults2', u'_repeat2', u'getCache', u'_map2', u'_map', u'_crawlCallsCount', u'require', u'_index', u'messages', u'_repeat', u'_includes'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2105_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2105_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_getCache_(path, parentScope, self, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'self':self, u'arguments':arguments, u'parentScope':parentScope}, var)
+ var.registers([u'scopes', u'_isArray', u'_iterator', u'self', u'parentScope', u'_i', u'path', u'scope', u'_ref'])
+ var.put(u'scopes', (var.get(u'_cache').get(u'scope').callprop(u'get', var.get(u'path').get(u'node')) or Js([])))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'scopes'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'scope', var.get(u'_ref'))
+ if (PyJsStrictEq(var.get(u'scope').get(u'parent'),var.get(u'parentScope')) and PyJsStrictEq(var.get(u'scope').get(u'path'),var.get(u'path'))):
+ return var.get(u'scope')
+
+ var.get(u'scopes').callprop(u'push', var.get(u'self'))
+ if var.get(u'_cache').get(u'scope').callprop(u'has', var.get(u'path').get(u'node')).neg():
+ var.get(u'_cache').get(u'scope').callprop(u'set', var.get(u'path').get(u'node'), var.get(u'scopes'))
+ PyJsHoisted_getCache_.func_name = u'getCache'
+ var.put(u'getCache', PyJsHoisted_getCache_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2104_ = Js({})
+ var.put(u'newObj', PyJs_Object_2104_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_keys', var.get(u'require')(Js(u'babel-runtime/core-js/object/keys')))
+ var.put(u'_keys2', var.get(u'_interopRequireDefault')(var.get(u'_keys')))
+ var.put(u'_create', var.get(u'require')(Js(u'babel-runtime/core-js/object/create')))
+ var.put(u'_create2', var.get(u'_interopRequireDefault')(var.get(u'_create')))
+ var.put(u'_map', var.get(u'require')(Js(u'babel-runtime/core-js/map')))
+ var.put(u'_map2', var.get(u'_interopRequireDefault')(var.get(u'_map')))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_includes', var.get(u'require')(Js(u'lodash/includes')))
+ var.put(u'_includes2', var.get(u'_interopRequireDefault')(var.get(u'_includes')))
+ var.put(u'_repeat', var.get(u'require')(Js(u'lodash/repeat')))
+ var.put(u'_repeat2', var.get(u'_interopRequireDefault')(var.get(u'_repeat')))
+ var.put(u'_renamer', var.get(u'require')(Js(u'./lib/renamer')))
+ var.put(u'_renamer2', var.get(u'_interopRequireDefault')(var.get(u'_renamer')))
+ var.put(u'_index', var.get(u'require')(Js(u'../index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ var.put(u'_defaults', var.get(u'require')(Js(u'lodash/defaults')))
+ var.put(u'_defaults2', var.get(u'_interopRequireDefault')(var.get(u'_defaults')))
+ var.put(u'_babelMessages', var.get(u'require')(Js(u'babel-messages')))
+ var.put(u'messages', var.get(u'_interopRequireWildcard')(var.get(u'_babelMessages')))
+ var.put(u'_binding2', var.get(u'require')(Js(u'./binding')))
+ var.put(u'_binding3', var.get(u'_interopRequireDefault')(var.get(u'_binding2')))
+ var.put(u'_globals', var.get(u'require')(Js(u'globals')))
+ var.put(u'_globals2', var.get(u'_interopRequireDefault')(var.get(u'_globals')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ var.put(u'_cache', var.get(u'require')(Js(u'../cache')))
+ pass
+ pass
+ var.put(u'_crawlCallsCount', Js(0.0))
+ pass
+ @Js
+ def PyJs_For_2107_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'For':PyJs_For_2107_}, var)
+ var.registers([u'_isArray2', u'_i2', u'_ref2', u'declar', u'key', u'path', u'_iterator2'])
+ #for JS loop
+ var.put(u'_iterator2', var.get(u't').get(u'FOR_INIT_KEYS'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'key', var.get(u'_ref2'))
+ var.put(u'declar', var.get(u'path').callprop(u'get', var.get(u'key')))
+ if var.get(u'declar').callprop(u'isVar'):
+ var.get(u'path').get(u'scope').callprop(u'getFunctionParent').callprop(u'registerBinding', Js(u'var'), var.get(u'declar'))
+
+ PyJs_For_2107_._set_name(u'For')
+ @Js
+ def PyJs_Declaration_2108_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'Declaration':PyJs_Declaration_2108_}, var)
+ var.registers([u'path'])
+ if var.get(u'path').callprop(u'isBlockScoped'):
+ return var.get('undefined')
+ if (var.get(u'path').callprop(u'isExportDeclaration') and var.get(u'path').callprop(u'get', Js(u'declaration')).callprop(u'isDeclaration')):
+ return var.get('undefined')
+ var.get(u'path').get(u'scope').callprop(u'getFunctionParent').callprop(u'registerDeclaration', var.get(u'path'))
+ PyJs_Declaration_2108_._set_name(u'Declaration')
+ @Js
+ def PyJs_ReferencedIdentifier_2109_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'ReferencedIdentifier':PyJs_ReferencedIdentifier_2109_, u'arguments':arguments}, var)
+ var.registers([u'path', u'state'])
+ var.get(u'state').get(u'references').callprop(u'push', var.get(u'path'))
+ PyJs_ReferencedIdentifier_2109_._set_name(u'ReferencedIdentifier')
+ @Js
+ def PyJs_ForXStatement_2110_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'ForXStatement':PyJs_ForXStatement_2110_}, var)
+ var.registers([u'path', u'state', u'left'])
+ var.put(u'left', var.get(u'path').callprop(u'get', Js(u'left')))
+ if (var.get(u'left').callprop(u'isPattern') or var.get(u'left').callprop(u'isIdentifier')):
+ var.get(u'state').get(u'constantViolations').callprop(u'push', var.get(u'left'))
+ PyJs_ForXStatement_2110_._set_name(u'ForXStatement')
+ @Js
+ def PyJs_exit_2112_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'exit':PyJs_exit_2112_, u'arguments':arguments}, var)
+ var.registers([u'node', u'decl', u'_isArray3', u'name', u'_i3', u'binding', u'ids', u'declar', u'_binding', u'path', u'scope', u'_id', u'_ref3', u'_iterator3'])
+ var.put(u'node', var.get(u'path').get(u'node'))
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ var.put(u'declar', var.get(u'node').get(u'declaration'))
+ if (var.get(u't').callprop(u'isClassDeclaration', var.get(u'declar')) or var.get(u't').callprop(u'isFunctionDeclaration', var.get(u'declar'))):
+ var.put(u'_id', var.get(u'declar').get(u'id'))
+ if var.get(u'_id').neg():
+ return var.get('undefined')
+ var.put(u'binding', var.get(u'scope').callprop(u'getBinding', var.get(u'_id').get(u'name')))
+ if var.get(u'binding'):
+ var.get(u'binding').callprop(u'reference', var.get(u'path'))
+ else:
+ if var.get(u't').callprop(u'isVariableDeclaration', var.get(u'declar')):
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'declar').get(u'declarations'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'decl', var.get(u'_ref3'))
+ var.put(u'ids', var.get(u't').callprop(u'getBindingIdentifiers', var.get(u'decl')))
+ for PyJsTemp in var.get(u'ids'):
+ var.put(u'name', PyJsTemp)
+ var.put(u'_binding', var.get(u'scope').callprop(u'getBinding', var.get(u'name')))
+ if var.get(u'_binding'):
+ var.get(u'_binding').callprop(u'reference', var.get(u'path'))
+
+ PyJs_exit_2112_._set_name(u'exit')
+ PyJs_Object_2111_ = Js({u'exit':PyJs_exit_2112_})
+ @Js
+ def PyJs_LabeledStatement_2113_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'LabeledStatement':PyJs_LabeledStatement_2113_, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ var.get(u'path').get(u'scope').callprop(u'getProgramParent').callprop(u'addGlobal', var.get(u'path').get(u'node'))
+ var.get(u'path').get(u'scope').callprop(u'getBlockParent').callprop(u'registerDeclaration', var.get(u'path'))
+ PyJs_LabeledStatement_2113_._set_name(u'LabeledStatement')
+ @Js
+ def PyJs_AssignmentExpression_2114_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'AssignmentExpression':PyJs_AssignmentExpression_2114_}, var)
+ var.registers([u'path', u'state'])
+ var.get(u'state').get(u'assignments').callprop(u'push', var.get(u'path'))
+ PyJs_AssignmentExpression_2114_._set_name(u'AssignmentExpression')
+ @Js
+ def PyJs_UpdateExpression_2115_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'UpdateExpression':PyJs_UpdateExpression_2115_}, var)
+ var.registers([u'path', u'state'])
+ var.get(u'state').get(u'constantViolations').callprop(u'push', var.get(u'path').callprop(u'get', Js(u'argument')))
+ PyJs_UpdateExpression_2115_._set_name(u'UpdateExpression')
+ @Js
+ def PyJs_UnaryExpression_2116_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'UnaryExpression':PyJs_UnaryExpression_2116_, u'arguments':arguments}, var)
+ var.registers([u'path', u'state'])
+ if PyJsStrictEq(var.get(u'path').get(u'node').get(u'operator'),Js(u'delete')):
+ var.get(u'state').get(u'constantViolations').callprop(u'push', var.get(u'path').callprop(u'get', Js(u'argument')))
+ PyJs_UnaryExpression_2116_._set_name(u'UnaryExpression')
+ @Js
+ def PyJs_BlockScoped_2117_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'BlockScoped':PyJs_BlockScoped_2117_}, var)
+ var.registers([u'scope', u'path'])
+ var.put(u'scope', var.get(u'path').get(u'scope'))
+ if PyJsStrictEq(var.get(u'scope').get(u'path'),var.get(u'path')):
+ var.put(u'scope', var.get(u'scope').get(u'parent'))
+ var.get(u'scope').callprop(u'getBlockParent').callprop(u'registerDeclaration', var.get(u'path'))
+ PyJs_BlockScoped_2117_._set_name(u'BlockScoped')
+ @Js
+ def PyJs_ClassDeclaration_2118_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'ClassDeclaration':PyJs_ClassDeclaration_2118_, u'arguments':arguments}, var)
+ var.registers([u'path', u'id', u'name'])
+ var.put(u'id', var.get(u'path').get(u'node').get(u'id'))
+ if var.get(u'id').neg():
+ return var.get('undefined')
+ var.put(u'name', var.get(u'id').get(u'name'))
+ var.get(u'path').get(u'scope').get(u'bindings').put(var.get(u'name'), var.get(u'path').get(u'scope').callprop(u'getBinding', var.get(u'name')))
+ PyJs_ClassDeclaration_2118_._set_name(u'ClassDeclaration')
+ @Js
+ def PyJs_Block_2119_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'Block':PyJs_Block_2119_}, var)
+ var.registers([u'paths', u'_isArray4', u'bodyPath', u'_ref4', u'_i4', u'path', u'_iterator4'])
+ var.put(u'paths', var.get(u'path').callprop(u'get', Js(u'body')))
+ #for JS loop
+ var.put(u'_iterator4', var.get(u'paths'))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator4'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i4').get(u'value'))
+ var.put(u'bodyPath', var.get(u'_ref4'))
+ if var.get(u'bodyPath').callprop(u'isFunctionDeclaration'):
+ var.get(u'path').get(u'scope').callprop(u'getBlockParent').callprop(u'registerDeclaration', var.get(u'bodyPath'))
+
+ PyJs_Block_2119_._set_name(u'Block')
+ PyJs_Object_2106_ = Js({u'For':PyJs_For_2107_,u'Declaration':PyJs_Declaration_2108_,u'ReferencedIdentifier':PyJs_ReferencedIdentifier_2109_,u'ForXStatement':PyJs_ForXStatement_2110_,u'ExportDeclaration':PyJs_Object_2111_,u'LabeledStatement':PyJs_LabeledStatement_2113_,u'AssignmentExpression':PyJs_AssignmentExpression_2114_,u'UpdateExpression':PyJs_UpdateExpression_2115_,u'UnaryExpression':PyJs_UnaryExpression_2116_,u'BlockScoped':PyJs_BlockScoped_2117_,u'ClassDeclaration':PyJs_ClassDeclaration_2118_,u'Block':PyJs_Block_2119_})
+ var.put(u'collectorVisitor', PyJs_Object_2106_)
+ var.put(u'uid', Js(0.0))
+ @Js
+ def PyJs_anonymous_2120_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'Scope'])
+ @Js
+ def PyJsHoisted_Scope_(path, parentScope, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'parentScope':parentScope}, var)
+ var.registers([u'cached', u'path', u'parentScope'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'Scope'))
+ if (var.get(u'parentScope') and PyJsStrictEq(var.get(u'parentScope').get(u'block'),var.get(u'path').get(u'node'))):
+ return var.get(u'parentScope')
+ var.put(u'cached', var.get(u'getCache')(var.get(u'path'), var.get(u'parentScope'), var.get(u"this")))
+ if var.get(u'cached'):
+ return var.get(u'cached')
+ var.get(u"this").put(u'uid', (var.put(u'uid',Js(var.get(u'uid').to_number())+Js(1))-Js(1)))
+ var.get(u"this").put(u'parent', var.get(u'parentScope'))
+ var.get(u"this").put(u'hub', var.get(u'path').get(u'hub'))
+ var.get(u"this").put(u'parentBlock', var.get(u'path').get(u'parent'))
+ var.get(u"this").put(u'block', var.get(u'path').get(u'node'))
+ var.get(u"this").put(u'path', var.get(u'path'))
+ var.get(u"this").put(u'labels', var.get(u'_map2').get(u'default').create())
+ PyJsHoisted_Scope_.func_name = u'Scope'
+ var.put(u'Scope', PyJsHoisted_Scope_)
+ pass
+ @Js
+ def PyJs_traverse_2121_(node, opts, state, this, arguments, var=var):
+ var = Scope({u'node':node, u'traverse':PyJs_traverse_2121_, u'this':this, u'state':state, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'node', u'state', u'opts'])
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(var.get(u'node'), var.get(u'opts'), var.get(u"this"), var.get(u'state'), var.get(u"this").get(u'path'))
+ PyJs_traverse_2121_._set_name(u'traverse')
+ var.get(u'Scope').get(u'prototype').put(u'traverse', PyJs_traverse_2121_)
+ @Js
+ def PyJs_generateDeclaredUidIdentifier_2122_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'generateDeclaredUidIdentifier':PyJs_generateDeclaredUidIdentifier_2122_}, var)
+ var.registers([u'name', u'id'])
+ var.put(u'name', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else Js(u'temp')))
+ var.put(u'id', var.get(u"this").callprop(u'generateUidIdentifier', var.get(u'name')))
+ PyJs_Object_2123_ = Js({u'id':var.get(u'id')})
+ var.get(u"this").callprop(u'push', PyJs_Object_2123_)
+ return var.get(u'id')
+ PyJs_generateDeclaredUidIdentifier_2122_._set_name(u'generateDeclaredUidIdentifier')
+ var.get(u'Scope').get(u'prototype').put(u'generateDeclaredUidIdentifier', PyJs_generateDeclaredUidIdentifier_2122_)
+ @Js
+ def PyJs_generateUidIdentifier_2124_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'generateUidIdentifier':PyJs_generateUidIdentifier_2124_}, var)
+ var.registers([u'name'])
+ var.put(u'name', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else Js(u'temp')))
+ return var.get(u't').callprop(u'identifier', var.get(u"this").callprop(u'generateUid', var.get(u'name')))
+ PyJs_generateUidIdentifier_2124_._set_name(u'generateUidIdentifier')
+ var.get(u'Scope').get(u'prototype').put(u'generateUidIdentifier', PyJs_generateUidIdentifier_2124_)
+ @Js
+ def PyJs_generateUid_2125_(this, arguments, var=var):
+ var = Scope({u'this':this, u'generateUid':PyJs_generateUid_2125_, u'arguments':arguments}, var)
+ var.registers([u'i', u'program', u'name', u'uid'])
+ var.put(u'name', (var.get(u'arguments').get(u'0') if ((var.get(u'arguments').get(u'length')>Js(0.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'0'),var.get(u'undefined'))) else Js(u'temp')))
+ var.put(u'name', var.get(u't').callprop(u'toIdentifier', var.get(u'name')).callprop(u'replace', JsRegExp(u'/^_+/'), Js(u'')).callprop(u'replace', JsRegExp(u'/[0-9]+$/g'), Js(u'')))
+ var.put(u'uid', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'i', Js(0.0))
+ while 1:
+ var.put(u'uid', var.get(u"this").callprop(u'_generateUid', var.get(u'name'), var.get(u'i')))
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ if not (((var.get(u"this").callprop(u'hasLabel', var.get(u'uid')) or var.get(u"this").callprop(u'hasBinding', var.get(u'uid'))) or var.get(u"this").callprop(u'hasGlobal', var.get(u'uid'))) or var.get(u"this").callprop(u'hasReference', var.get(u'uid'))):
+ break
+ var.put(u'program', var.get(u"this").callprop(u'getProgramParent'))
+ var.get(u'program').get(u'references').put(var.get(u'uid'), var.get(u'true'))
+ var.get(u'program').get(u'uids').put(var.get(u'uid'), var.get(u'true'))
+ return var.get(u'uid')
+ PyJs_generateUid_2125_._set_name(u'generateUid')
+ var.get(u'Scope').get(u'prototype').put(u'generateUid', PyJs_generateUid_2125_)
+ @Js
+ def PyJs__generateUid_2126_(name, i, this, arguments, var=var):
+ var = Scope({u'i':i, u'this':this, u'_generateUid':PyJs__generateUid_2126_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'i', u'id', u'name'])
+ var.put(u'id', var.get(u'name'))
+ if (var.get(u'i')>Js(1.0)):
+ var.put(u'id', var.get(u'i'), u'+')
+ return (Js(u'_')+var.get(u'id'))
+ PyJs__generateUid_2126_._set_name(u'_generateUid')
+ var.get(u'Scope').get(u'prototype').put(u'_generateUid', PyJs__generateUid_2126_)
+ @Js
+ def PyJs_generateUidIdentifierBasedOnNode_2127_(parent, defaultName, this, arguments, var=var):
+ var = Scope({u'this':this, u'defaultName':defaultName, u'generateUidIdentifierBasedOnNode':PyJs_generateUidIdentifierBasedOnNode_2127_, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent', u'defaultName', u'add', u'parts', u'id'])
+ var.put(u'node', var.get(u'parent'))
+ if var.get(u't').callprop(u'isAssignmentExpression', var.get(u'parent')):
+ var.put(u'node', var.get(u'parent').get(u'left'))
+ else:
+ if var.get(u't').callprop(u'isVariableDeclarator', var.get(u'parent')):
+ var.put(u'node', var.get(u'parent').get(u'id'))
+ else:
+ if (var.get(u't').callprop(u'isObjectProperty', var.get(u'node')) or var.get(u't').callprop(u'isObjectMethod', var.get(u'node'))):
+ var.put(u'node', var.get(u'node').get(u'key'))
+ var.put(u'parts', Js([]))
+ @Js
+ def PyJs_add_2128_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'add':PyJs_add_2128_, u'arguments':arguments}, var)
+ var.registers([u'node', u'specifier', u'_isArray5', u'_isArray6', u'_i6', u'_ref5', u'prop', u'_ref6', u'_iterator5', u'_iterator6', u'_i5'])
+ if var.get(u't').callprop(u'isModuleDeclaration', var.get(u'node')):
+ if var.get(u'node').get(u'source'):
+ var.get(u'add')(var.get(u'node').get(u'source'))
+ else:
+ if (var.get(u'node').get(u'specifiers') and var.get(u'node').get(u'specifiers').get(u'length')):
+ #for JS loop
+ var.put(u'_iterator5', var.get(u'node').get(u'specifiers'))
+ var.put(u'_isArray5', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator5')))
+ var.put(u'_i5', Js(0.0))
+ var.put(u'_iterator5', (var.get(u'_iterator5') if var.get(u'_isArray5') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator5'))))
+ while 1:
+ pass
+ if var.get(u'_isArray5'):
+ if (var.get(u'_i5')>=var.get(u'_iterator5').get(u'length')):
+ break
+ var.put(u'_ref5', var.get(u'_iterator5').get((var.put(u'_i5',Js(var.get(u'_i5').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i5', var.get(u'_iterator5').callprop(u'next'))
+ if var.get(u'_i5').get(u'done'):
+ break
+ var.put(u'_ref5', var.get(u'_i5').get(u'value'))
+ var.put(u'specifier', var.get(u'_ref5'))
+ var.get(u'add')(var.get(u'specifier'))
+
+ else:
+ if var.get(u'node').get(u'declaration'):
+ var.get(u'add')(var.get(u'node').get(u'declaration'))
+ else:
+ if var.get(u't').callprop(u'isModuleSpecifier', var.get(u'node')):
+ var.get(u'add')(var.get(u'node').get(u'local'))
+ else:
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'node')):
+ var.get(u'add')(var.get(u'node').get(u'object'))
+ var.get(u'add')(var.get(u'node').get(u'property'))
+ else:
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'node')):
+ var.get(u'parts').callprop(u'push', var.get(u'node').get(u'name'))
+ else:
+ if var.get(u't').callprop(u'isLiteral', var.get(u'node')):
+ var.get(u'parts').callprop(u'push', var.get(u'node').get(u'value'))
+ else:
+ if var.get(u't').callprop(u'isCallExpression', var.get(u'node')):
+ var.get(u'add')(var.get(u'node').get(u'callee'))
+ else:
+ if (var.get(u't').callprop(u'isObjectExpression', var.get(u'node')) or var.get(u't').callprop(u'isObjectPattern', var.get(u'node'))):
+ #for JS loop
+ var.put(u'_iterator6', var.get(u'node').get(u'properties'))
+ var.put(u'_isArray6', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator6')))
+ var.put(u'_i6', Js(0.0))
+ var.put(u'_iterator6', (var.get(u'_iterator6') if var.get(u'_isArray6') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator6'))))
+ while 1:
+ pass
+ if var.get(u'_isArray6'):
+ if (var.get(u'_i6')>=var.get(u'_iterator6').get(u'length')):
+ break
+ var.put(u'_ref6', var.get(u'_iterator6').get((var.put(u'_i6',Js(var.get(u'_i6').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i6', var.get(u'_iterator6').callprop(u'next'))
+ if var.get(u'_i6').get(u'done'):
+ break
+ var.put(u'_ref6', var.get(u'_i6').get(u'value'))
+ var.put(u'prop', var.get(u'_ref6'))
+ var.get(u'add')((var.get(u'prop').get(u'key') or var.get(u'prop').get(u'argument')))
+
+ PyJs_add_2128_._set_name(u'add')
+ var.put(u'add', PyJs_add_2128_)
+ var.get(u'add')(var.get(u'node'))
+ var.put(u'id', var.get(u'parts').callprop(u'join', Js(u'$')))
+ var.put(u'id', ((var.get(u'id').callprop(u'replace', JsRegExp(u'/^_/'), Js(u'')) or var.get(u'defaultName')) or Js(u'ref')))
+ return var.get(u"this").callprop(u'generateUidIdentifier', var.get(u'id').callprop(u'slice', Js(0.0), Js(20.0)))
+ PyJs_generateUidIdentifierBasedOnNode_2127_._set_name(u'generateUidIdentifierBasedOnNode')
+ var.get(u'Scope').get(u'prototype').put(u'generateUidIdentifierBasedOnNode', PyJs_generateUidIdentifierBasedOnNode_2127_)
+ @Js
+ def PyJs_isStatic_2129_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'isStatic':PyJs_isStatic_2129_, u'arguments':arguments}, var)
+ var.registers([u'node', u'binding'])
+ if (var.get(u't').callprop(u'isThisExpression', var.get(u'node')) or var.get(u't').callprop(u'isSuper', var.get(u'node'))):
+ return var.get(u'true')
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'node')):
+ var.put(u'binding', var.get(u"this").callprop(u'getBinding', var.get(u'node').get(u'name')))
+ if var.get(u'binding'):
+ return var.get(u'binding').get(u'constant')
+ else:
+ return var.get(u"this").callprop(u'hasBinding', var.get(u'node').get(u'name'))
+ return Js(False)
+ PyJs_isStatic_2129_._set_name(u'isStatic')
+ var.get(u'Scope').get(u'prototype').put(u'isStatic', PyJs_isStatic_2129_)
+ @Js
+ def PyJs_maybeGenerateMemoised_2130_(node, dontPush, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'maybeGenerateMemoised':PyJs_maybeGenerateMemoised_2130_, u'dontPush':dontPush, u'arguments':arguments}, var)
+ var.registers([u'node', u'dontPush', u'_id2'])
+ if var.get(u"this").callprop(u'isStatic', var.get(u'node')):
+ return var.get(u"null")
+ else:
+ var.put(u'_id2', var.get(u"this").callprop(u'generateUidIdentifierBasedOnNode', var.get(u'node')))
+ if var.get(u'dontPush').neg():
+ PyJs_Object_2131_ = Js({u'id':var.get(u'_id2')})
+ var.get(u"this").callprop(u'push', PyJs_Object_2131_)
+ return var.get(u'_id2')
+ PyJs_maybeGenerateMemoised_2130_._set_name(u'maybeGenerateMemoised')
+ var.get(u'Scope').get(u'prototype').put(u'maybeGenerateMemoised', PyJs_maybeGenerateMemoised_2130_)
+ @Js
+ def PyJs_checkBlockScopedCollisions_2132_(local, kind, name, id, this, arguments, var=var):
+ var = Scope({u'kind':kind, u'name':name, u'this':this, u'checkBlockScopedCollisions':PyJs_checkBlockScopedCollisions_2132_, u'local':local, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'id', u'duplicate', u'local', u'kind', u'name'])
+ if PyJsStrictEq(var.get(u'kind'),Js(u'param')):
+ return var.get('undefined')
+ if (PyJsStrictEq(var.get(u'kind'),Js(u'hoisted')) and PyJsStrictEq(var.get(u'local').get(u'kind'),Js(u'let'))):
+ return var.get('undefined')
+ var.put(u'duplicate', Js(False))
+ if var.get(u'duplicate').neg():
+ var.put(u'duplicate', (((PyJsStrictEq(var.get(u'kind'),Js(u'let')) or PyJsStrictEq(var.get(u'local').get(u'kind'),Js(u'let'))) or PyJsStrictEq(var.get(u'local').get(u'kind'),Js(u'const'))) or PyJsStrictEq(var.get(u'local').get(u'kind'),Js(u'module'))))
+ if var.get(u'duplicate').neg():
+ var.put(u'duplicate', (PyJsStrictEq(var.get(u'local').get(u'kind'),Js(u'param')) and (PyJsStrictEq(var.get(u'kind'),Js(u'let')) or PyJsStrictEq(var.get(u'kind'),Js(u'const')))))
+ if var.get(u'duplicate'):
+ PyJsTempException = JsToPyException(var.get(u"this").get(u'hub').get(u'file').callprop(u'buildCodeFrameError', var.get(u'id'), var.get(u'messages').callprop(u'get', Js(u'scopeDuplicateDeclaration'), var.get(u'name')), var.get(u'TypeError')))
+ raise PyJsTempException
+ PyJs_checkBlockScopedCollisions_2132_._set_name(u'checkBlockScopedCollisions')
+ var.get(u'Scope').get(u'prototype').put(u'checkBlockScopedCollisions', PyJs_checkBlockScopedCollisions_2132_)
+ @Js
+ def PyJs_rename_2133_(oldName, newName, block, this, arguments, var=var):
+ var = Scope({u'rename':PyJs_rename_2133_, u'newName':newName, u'this':this, u'oldName':oldName, u'block':block, u'arguments':arguments}, var)
+ var.registers([u'newName', u'binding', u'oldName', u'block'])
+ var.put(u'binding', var.get(u"this").callprop(u'getBinding', var.get(u'oldName')))
+ if var.get(u'binding'):
+ var.put(u'newName', (var.get(u'newName') or var.get(u"this").callprop(u'generateUidIdentifier', var.get(u'oldName')).get(u'name')))
+ return var.get(u'_renamer2').get(u'default').create(var.get(u'binding'), var.get(u'oldName'), var.get(u'newName')).callprop(u'rename', var.get(u'block'))
+ PyJs_rename_2133_._set_name(u'rename')
+ var.get(u'Scope').get(u'prototype').put(u'rename', PyJs_rename_2133_)
+ @Js
+ def PyJs__renameFromMap_2134_(map, oldName, newName, value, this, arguments, var=var):
+ var = Scope({u'map':map, u'_renameFromMap':PyJs__renameFromMap_2134_, u'oldName':oldName, u'newName':newName, u'this':this, u'value':value, u'arguments':arguments}, var)
+ var.registers([u'newName', u'map', u'oldName', u'value'])
+ if var.get(u'map').get(var.get(u'oldName')):
+ var.get(u'map').put(var.get(u'newName'), var.get(u'value'))
+ var.get(u'map').put(var.get(u'oldName'), var.get(u"null"))
+ PyJs__renameFromMap_2134_._set_name(u'_renameFromMap')
+ var.get(u'Scope').get(u'prototype').put(u'_renameFromMap', PyJs__renameFromMap_2134_)
+ @Js
+ def PyJs_dump_2135_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'dump':PyJs_dump_2135_}, var)
+ var.registers([u'scope', u'binding', u'name', u'sep'])
+ var.put(u'sep', PyJsComma(Js(0.0),var.get(u'_repeat2').get(u'default'))(Js(u'-'), Js(60.0)))
+ var.get(u'console').callprop(u'log', var.get(u'sep'))
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ var.get(u'console').callprop(u'log', Js(u'#'), var.get(u'scope').get(u'block').get(u'type'))
+ for PyJsTemp in var.get(u'scope').get(u'bindings'):
+ var.put(u'name', PyJsTemp)
+ var.put(u'binding', var.get(u'scope').get(u'bindings').get(var.get(u'name')))
+ PyJs_Object_2136_ = Js({u'constant':var.get(u'binding').get(u'constant'),u'references':var.get(u'binding').get(u'references'),u'violations':var.get(u'binding').get(u'constantViolations').get(u'length'),u'kind':var.get(u'binding').get(u'kind')})
+ var.get(u'console').callprop(u'log', Js(u' -'), var.get(u'name'), PyJs_Object_2136_)
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ var.get(u'console').callprop(u'log', var.get(u'sep'))
+ PyJs_dump_2135_._set_name(u'dump')
+ var.get(u'Scope').get(u'prototype').put(u'dump', PyJs_dump_2135_)
+ @Js
+ def PyJs_toArray_2137_(node, i, this, arguments, var=var):
+ var = Scope({u'node':node, u'i':i, u'this':this, u'arguments':arguments, u'toArray':PyJs_toArray_2137_}, var)
+ var.registers([u'node', u'helperName', u'i', u'args', u'binding', u'file'])
+ var.put(u'file', var.get(u"this").get(u'hub').get(u'file'))
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'node')):
+ var.put(u'binding', var.get(u"this").callprop(u'getBinding', var.get(u'node').get(u'name')))
+ if ((var.get(u'binding') and var.get(u'binding').get(u'constant')) and var.get(u'binding').get(u'path').callprop(u'isGenericType', Js(u'Array'))):
+ return var.get(u'node')
+ if var.get(u't').callprop(u'isArrayExpression', var.get(u'node')):
+ return var.get(u'node')
+ PyJs_Object_2138_ = Js({u'name':Js(u'arguments')})
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'node'), PyJs_Object_2138_):
+ def PyJs_LONG_2139_(var=var):
+ return var.get(u't').callprop(u'callExpression', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'memberExpression', var.get(u't').callprop(u'identifier', Js(u'Array')), var.get(u't').callprop(u'identifier', Js(u'prototype'))), var.get(u't').callprop(u'identifier', Js(u'slice'))), var.get(u't').callprop(u'identifier', Js(u'call'))), Js([var.get(u'node')]))
+ return PyJs_LONG_2139_()
+ var.put(u'helperName', Js(u'toArray'))
+ var.put(u'args', Js([var.get(u'node')]))
+ if PyJsStrictEq(var.get(u'i'),var.get(u'true')):
+ var.put(u'helperName', Js(u'toConsumableArray'))
+ else:
+ if var.get(u'i'):
+ var.get(u'args').callprop(u'push', var.get(u't').callprop(u'numericLiteral', var.get(u'i')))
+ var.put(u'helperName', Js(u'slicedToArray'))
+ return var.get(u't').callprop(u'callExpression', var.get(u'file').callprop(u'addHelper', var.get(u'helperName')), var.get(u'args'))
+ PyJs_toArray_2137_._set_name(u'toArray')
+ var.get(u'Scope').get(u'prototype').put(u'toArray', PyJs_toArray_2137_)
+ @Js
+ def PyJs_hasLabel_2140_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'hasLabel':PyJs_hasLabel_2140_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return var.get(u"this").callprop(u'getLabel', var.get(u'name')).neg().neg()
+ PyJs_hasLabel_2140_._set_name(u'hasLabel')
+ var.get(u'Scope').get(u'prototype').put(u'hasLabel', PyJs_hasLabel_2140_)
+ @Js
+ def PyJs_getLabel_2141_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'getLabel':PyJs_getLabel_2141_, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return var.get(u"this").get(u'labels').callprop(u'get', var.get(u'name'))
+ PyJs_getLabel_2141_._set_name(u'getLabel')
+ var.get(u'Scope').get(u'prototype').put(u'getLabel', PyJs_getLabel_2141_)
+ @Js
+ def PyJs_registerLabel_2142_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'registerLabel':PyJs_registerLabel_2142_}, var)
+ var.registers([u'path'])
+ var.get(u"this").get(u'labels').callprop(u'set', var.get(u'path').get(u'node').get(u'label').get(u'name'), var.get(u'path'))
+ PyJs_registerLabel_2142_._set_name(u'registerLabel')
+ var.get(u'Scope').get(u'prototype').put(u'registerLabel', PyJs_registerLabel_2142_)
+ @Js
+ def PyJs_registerDeclaration_2143_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'registerDeclaration':PyJs_registerDeclaration_2143_}, var)
+ var.registers([u'_isArray7', u'specifiers', u'_ref8', u'_i8', u'_i7', u'declarations', u'_isArray8', u'_ref7', u'declar', u'_iterator8', u'path', u'specifier', u'_declar', u'_iterator7'])
+ if var.get(u'path').callprop(u'isLabeledStatement'):
+ var.get(u"this").callprop(u'registerLabel', var.get(u'path'))
+ else:
+ if var.get(u'path').callprop(u'isFunctionDeclaration'):
+ var.get(u"this").callprop(u'registerBinding', Js(u'hoisted'), var.get(u'path').callprop(u'get', Js(u'id')), var.get(u'path'))
+ else:
+ if var.get(u'path').callprop(u'isVariableDeclaration'):
+ var.put(u'declarations', var.get(u'path').callprop(u'get', Js(u'declarations')))
+ #for JS loop
+ var.put(u'_iterator7', var.get(u'declarations'))
+ var.put(u'_isArray7', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator7')))
+ var.put(u'_i7', Js(0.0))
+ var.put(u'_iterator7', (var.get(u'_iterator7') if var.get(u'_isArray7') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator7'))))
+ while 1:
+ pass
+ if var.get(u'_isArray7'):
+ if (var.get(u'_i7')>=var.get(u'_iterator7').get(u'length')):
+ break
+ var.put(u'_ref7', var.get(u'_iterator7').get((var.put(u'_i7',Js(var.get(u'_i7').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i7', var.get(u'_iterator7').callprop(u'next'))
+ if var.get(u'_i7').get(u'done'):
+ break
+ var.put(u'_ref7', var.get(u'_i7').get(u'value'))
+ var.put(u'declar', var.get(u'_ref7'))
+ var.get(u"this").callprop(u'registerBinding', var.get(u'path').get(u'node').get(u'kind'), var.get(u'declar'))
+
+ else:
+ if var.get(u'path').callprop(u'isClassDeclaration'):
+ var.get(u"this").callprop(u'registerBinding', Js(u'let'), var.get(u'path'))
+ else:
+ if var.get(u'path').callprop(u'isImportDeclaration'):
+ var.put(u'specifiers', var.get(u'path').callprop(u'get', Js(u'specifiers')))
+ #for JS loop
+ var.put(u'_iterator8', var.get(u'specifiers'))
+ var.put(u'_isArray8', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator8')))
+ var.put(u'_i8', Js(0.0))
+ var.put(u'_iterator8', (var.get(u'_iterator8') if var.get(u'_isArray8') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator8'))))
+ while 1:
+ pass
+ if var.get(u'_isArray8'):
+ if (var.get(u'_i8')>=var.get(u'_iterator8').get(u'length')):
+ break
+ var.put(u'_ref8', var.get(u'_iterator8').get((var.put(u'_i8',Js(var.get(u'_i8').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i8', var.get(u'_iterator8').callprop(u'next'))
+ if var.get(u'_i8').get(u'done'):
+ break
+ var.put(u'_ref8', var.get(u'_i8').get(u'value'))
+ var.put(u'specifier', var.get(u'_ref8'))
+ var.get(u"this").callprop(u'registerBinding', Js(u'module'), var.get(u'specifier'))
+
+ else:
+ if var.get(u'path').callprop(u'isExportDeclaration'):
+ var.put(u'_declar', var.get(u'path').callprop(u'get', Js(u'declaration')))
+ if ((var.get(u'_declar').callprop(u'isClassDeclaration') or var.get(u'_declar').callprop(u'isFunctionDeclaration')) or var.get(u'_declar').callprop(u'isVariableDeclaration')):
+ var.get(u"this").callprop(u'registerDeclaration', var.get(u'_declar'))
+ else:
+ var.get(u"this").callprop(u'registerBinding', Js(u'unknown'), var.get(u'path'))
+ PyJs_registerDeclaration_2143_._set_name(u'registerDeclaration')
+ var.get(u'Scope').get(u'prototype').put(u'registerDeclaration', PyJs_registerDeclaration_2143_)
+ @Js
+ def PyJs_buildUndefinedNode_2144_(this, arguments, var=var):
+ var = Scope({u'this':this, u'buildUndefinedNode':PyJs_buildUndefinedNode_2144_, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u"this").callprop(u'hasBinding', Js(u'undefined')):
+ return var.get(u't').callprop(u'unaryExpression', Js(u'void'), var.get(u't').callprop(u'numericLiteral', Js(0.0)), var.get(u'true'))
+ else:
+ return var.get(u't').callprop(u'identifier', Js(u'undefined'))
+ PyJs_buildUndefinedNode_2144_._set_name(u'buildUndefinedNode')
+ var.get(u'Scope').get(u'prototype').put(u'buildUndefinedNode', PyJs_buildUndefinedNode_2144_)
+ @Js
+ def PyJs_registerConstantViolation_2145_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'registerConstantViolation':PyJs_registerConstantViolation_2145_}, var)
+ var.registers([u'path', u'binding', u'ids', u'name'])
+ var.put(u'ids', var.get(u'path').callprop(u'getBindingIdentifiers'))
+ for PyJsTemp in var.get(u'ids'):
+ var.put(u'name', PyJsTemp)
+ var.put(u'binding', var.get(u"this").callprop(u'getBinding', var.get(u'name')))
+ if var.get(u'binding'):
+ var.get(u'binding').callprop(u'reassign', var.get(u'path'))
+ PyJs_registerConstantViolation_2145_._set_name(u'registerConstantViolation')
+ var.get(u'Scope').get(u'prototype').put(u'registerConstantViolation', PyJs_registerConstantViolation_2145_)
+ @Js
+ def PyJs_registerBinding_2146_(kind, path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'kind':kind, u'arguments':arguments, u'registerBinding':PyJs_registerBinding_2146_}, var)
+ var.registers([u'parent', u'kind', u'_i10', u'_i9', u'_ref9', u'name', u'_ref10', u'ids', u'_isArray9', u'declarators', u'declar', u'_iterator9', u'_isArray10', u'_iterator10', u'path', u'_id3', u'local', u'bindingPath'])
+ var.put(u'bindingPath', (var.get(u'arguments').get(u'2') if ((var.get(u'arguments').get(u'length')>Js(2.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'2'),var.get(u'undefined'))) else var.get(u'path')))
+ if var.get(u'kind').neg():
+ PyJsTempException = JsToPyException(var.get(u'ReferenceError').create(Js(u'no `kind`')))
+ raise PyJsTempException
+ if var.get(u'path').callprop(u'isVariableDeclaration'):
+ var.put(u'declarators', var.get(u'path').callprop(u'get', Js(u'declarations')))
+ #for JS loop
+ var.put(u'_iterator9', var.get(u'declarators'))
+ var.put(u'_isArray9', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator9')))
+ var.put(u'_i9', Js(0.0))
+ var.put(u'_iterator9', (var.get(u'_iterator9') if var.get(u'_isArray9') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator9'))))
+ while 1:
+ pass
+ if var.get(u'_isArray9'):
+ if (var.get(u'_i9')>=var.get(u'_iterator9').get(u'length')):
+ break
+ var.put(u'_ref9', var.get(u'_iterator9').get((var.put(u'_i9',Js(var.get(u'_i9').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i9', var.get(u'_iterator9').callprop(u'next'))
+ if var.get(u'_i9').get(u'done'):
+ break
+ var.put(u'_ref9', var.get(u'_i9').get(u'value'))
+ var.put(u'declar', var.get(u'_ref9'))
+ var.get(u"this").callprop(u'registerBinding', var.get(u'kind'), var.get(u'declar'))
+
+ return var.get('undefined')
+ var.put(u'parent', var.get(u"this").callprop(u'getProgramParent'))
+ var.put(u'ids', var.get(u'path').callprop(u'getBindingIdentifiers', var.get(u'true')))
+ for PyJsTemp in var.get(u'ids'):
+ var.put(u'name', PyJsTemp)
+ #for JS loop
+ var.put(u'_iterator10', var.get(u'ids').get(var.get(u'name')))
+ var.put(u'_isArray10', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator10')))
+ var.put(u'_i10', Js(0.0))
+ var.put(u'_iterator10', (var.get(u'_iterator10') if var.get(u'_isArray10') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator10'))))
+ while 1:
+ pass
+ if var.get(u'_isArray10'):
+ if (var.get(u'_i10')>=var.get(u'_iterator10').get(u'length')):
+ break
+ var.put(u'_ref10', var.get(u'_iterator10').get((var.put(u'_i10',Js(var.get(u'_i10').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i10', var.get(u'_iterator10').callprop(u'next'))
+ if var.get(u'_i10').get(u'done'):
+ break
+ var.put(u'_ref10', var.get(u'_i10').get(u'value'))
+ var.put(u'_id3', var.get(u'_ref10'))
+ var.put(u'local', var.get(u"this").callprop(u'getOwnBinding', var.get(u'name')))
+ if var.get(u'local'):
+ if PyJsStrictEq(var.get(u'local').get(u'identifier'),var.get(u'_id3')):
+ continue
+ var.get(u"this").callprop(u'checkBlockScopedCollisions', var.get(u'local'), var.get(u'kind'), var.get(u'name'), var.get(u'_id3'))
+ if (var.get(u'local') and var.get(u'local').get(u'path').callprop(u'isFlow')):
+ var.put(u'local', var.get(u"null"))
+ var.get(u'parent').get(u'references').put(var.get(u'name'), var.get(u'true'))
+ PyJs_Object_2147_ = Js({u'identifier':var.get(u'_id3'),u'existing':var.get(u'local'),u'scope':var.get(u"this"),u'path':var.get(u'bindingPath'),u'kind':var.get(u'kind')})
+ var.get(u"this").get(u'bindings').put(var.get(u'name'), var.get(u'_binding3').get(u'default').create(PyJs_Object_2147_))
+
+ PyJs_registerBinding_2146_._set_name(u'registerBinding')
+ var.get(u'Scope').get(u'prototype').put(u'registerBinding', PyJs_registerBinding_2146_)
+ @Js
+ def PyJs_addGlobal_2148_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'addGlobal':PyJs_addGlobal_2148_}, var)
+ var.registers([u'node'])
+ var.get(u"this").get(u'globals').put(var.get(u'node').get(u'name'), var.get(u'node'))
+ PyJs_addGlobal_2148_._set_name(u'addGlobal')
+ var.get(u'Scope').get(u'prototype').put(u'addGlobal', PyJs_addGlobal_2148_)
+ @Js
+ def PyJs_hasUid_2149_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'hasUid':PyJs_hasUid_2149_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'scope', u'name'])
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ if var.get(u'scope').get(u'uids').get(var.get(u'name')):
+ return var.get(u'true')
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ return Js(False)
+ PyJs_hasUid_2149_._set_name(u'hasUid')
+ var.get(u'Scope').get(u'prototype').put(u'hasUid', PyJs_hasUid_2149_)
+ @Js
+ def PyJs_hasGlobal_2150_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'hasGlobal':PyJs_hasGlobal_2150_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'scope', u'name'])
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ if var.get(u'scope').get(u'globals').get(var.get(u'name')):
+ return var.get(u'true')
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ return Js(False)
+ PyJs_hasGlobal_2150_._set_name(u'hasGlobal')
+ var.get(u'Scope').get(u'prototype').put(u'hasGlobal', PyJs_hasGlobal_2150_)
+ @Js
+ def PyJs_hasReference_2151_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'hasReference':PyJs_hasReference_2151_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'scope', u'name'])
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ if var.get(u'scope').get(u'references').get(var.get(u'name')):
+ return var.get(u'true')
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ return Js(False)
+ PyJs_hasReference_2151_._set_name(u'hasReference')
+ var.get(u'Scope').get(u'prototype').put(u'hasReference', PyJs_hasReference_2151_)
+ @Js
+ def PyJs_isPure_2152_(node, constantsOnly, this, arguments, var=var):
+ var = Scope({u'node':node, u'constantsOnly':constantsOnly, u'this':this, u'arguments':arguments, u'isPure':PyJs_isPure_2152_}, var)
+ var.registers([u'node', u'constantsOnly', u'_isArray11', u'binding', u'elem', u'prop', u'_i13', u'_i12', u'_i11', u'_isArray13', u'_isArray12', u'_ref11', u'_iterator11', u'_ref13', u'_iterator13', u'_iterator12', u'method', u'_ref12'])
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'node')):
+ var.put(u'binding', var.get(u"this").callprop(u'getBinding', var.get(u'node').get(u'name')))
+ if var.get(u'binding').neg():
+ return Js(False)
+ if var.get(u'constantsOnly'):
+ return var.get(u'binding').get(u'constant')
+ return var.get(u'true')
+ else:
+ if var.get(u't').callprop(u'isClass', var.get(u'node')):
+ if (var.get(u'node').get(u'superClass') and var.get(u"this").callprop(u'isPure', var.get(u'node').get(u'superClass'), var.get(u'constantsOnly')).neg()):
+ return Js(False)
+ return var.get(u"this").callprop(u'isPure', var.get(u'node').get(u'body'), var.get(u'constantsOnly'))
+ else:
+ if var.get(u't').callprop(u'isClassBody', var.get(u'node')):
+ #for JS loop
+ var.put(u'_iterator11', var.get(u'node').get(u'body'))
+ var.put(u'_isArray11', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator11')))
+ var.put(u'_i11', Js(0.0))
+ var.put(u'_iterator11', (var.get(u'_iterator11') if var.get(u'_isArray11') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator11'))))
+ while 1:
+ pass
+ if var.get(u'_isArray11'):
+ if (var.get(u'_i11')>=var.get(u'_iterator11').get(u'length')):
+ break
+ var.put(u'_ref11', var.get(u'_iterator11').get((var.put(u'_i11',Js(var.get(u'_i11').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i11', var.get(u'_iterator11').callprop(u'next'))
+ if var.get(u'_i11').get(u'done'):
+ break
+ var.put(u'_ref11', var.get(u'_i11').get(u'value'))
+ var.put(u'method', var.get(u'_ref11'))
+ if var.get(u"this").callprop(u'isPure', var.get(u'method'), var.get(u'constantsOnly')).neg():
+ return Js(False)
+
+ return var.get(u'true')
+ else:
+ if var.get(u't').callprop(u'isBinary', var.get(u'node')):
+ return (var.get(u"this").callprop(u'isPure', var.get(u'node').get(u'left'), var.get(u'constantsOnly')) and var.get(u"this").callprop(u'isPure', var.get(u'node').get(u'right'), var.get(u'constantsOnly')))
+ else:
+ if var.get(u't').callprop(u'isArrayExpression', var.get(u'node')):
+ #for JS loop
+ var.put(u'_iterator12', var.get(u'node').get(u'elements'))
+ var.put(u'_isArray12', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator12')))
+ var.put(u'_i12', Js(0.0))
+ var.put(u'_iterator12', (var.get(u'_iterator12') if var.get(u'_isArray12') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator12'))))
+ while 1:
+ pass
+ if var.get(u'_isArray12'):
+ if (var.get(u'_i12')>=var.get(u'_iterator12').get(u'length')):
+ break
+ var.put(u'_ref12', var.get(u'_iterator12').get((var.put(u'_i12',Js(var.get(u'_i12').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i12', var.get(u'_iterator12').callprop(u'next'))
+ if var.get(u'_i12').get(u'done'):
+ break
+ var.put(u'_ref12', var.get(u'_i12').get(u'value'))
+ var.put(u'elem', var.get(u'_ref12'))
+ if var.get(u"this").callprop(u'isPure', var.get(u'elem'), var.get(u'constantsOnly')).neg():
+ return Js(False)
+
+ return var.get(u'true')
+ else:
+ if var.get(u't').callprop(u'isObjectExpression', var.get(u'node')):
+ #for JS loop
+ var.put(u'_iterator13', var.get(u'node').get(u'properties'))
+ var.put(u'_isArray13', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator13')))
+ var.put(u'_i13', Js(0.0))
+ var.put(u'_iterator13', (var.get(u'_iterator13') if var.get(u'_isArray13') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator13'))))
+ while 1:
+ pass
+ if var.get(u'_isArray13'):
+ if (var.get(u'_i13')>=var.get(u'_iterator13').get(u'length')):
+ break
+ var.put(u'_ref13', var.get(u'_iterator13').get((var.put(u'_i13',Js(var.get(u'_i13').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i13', var.get(u'_iterator13').callprop(u'next'))
+ if var.get(u'_i13').get(u'done'):
+ break
+ var.put(u'_ref13', var.get(u'_i13').get(u'value'))
+ var.put(u'prop', var.get(u'_ref13'))
+ if var.get(u"this").callprop(u'isPure', var.get(u'prop'), var.get(u'constantsOnly')).neg():
+ return Js(False)
+
+ return var.get(u'true')
+ else:
+ if var.get(u't').callprop(u'isClassMethod', var.get(u'node')):
+ if (var.get(u'node').get(u'computed') and var.get(u"this").callprop(u'isPure', var.get(u'node').get(u'key'), var.get(u'constantsOnly')).neg()):
+ return Js(False)
+ if (PyJsStrictEq(var.get(u'node').get(u'kind'),Js(u'get')) or PyJsStrictEq(var.get(u'node').get(u'kind'),Js(u'set'))):
+ return Js(False)
+ return var.get(u'true')
+ else:
+ if (var.get(u't').callprop(u'isClassProperty', var.get(u'node')) or var.get(u't').callprop(u'isObjectProperty', var.get(u'node'))):
+ if (var.get(u'node').get(u'computed') and var.get(u"this").callprop(u'isPure', var.get(u'node').get(u'key'), var.get(u'constantsOnly')).neg()):
+ return Js(False)
+ return var.get(u"this").callprop(u'isPure', var.get(u'node').get(u'value'), var.get(u'constantsOnly'))
+ else:
+ if var.get(u't').callprop(u'isUnaryExpression', var.get(u'node')):
+ return var.get(u"this").callprop(u'isPure', var.get(u'node').get(u'argument'), var.get(u'constantsOnly'))
+ else:
+ return var.get(u't').callprop(u'isPureish', var.get(u'node'))
+ PyJs_isPure_2152_._set_name(u'isPure')
+ var.get(u'Scope').get(u'prototype').put(u'isPure', PyJs_isPure_2152_)
+ @Js
+ def PyJs_setData_2153_(key, val, this, arguments, var=var):
+ var = Scope({u'this':this, u'setData':PyJs_setData_2153_, u'val':val, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'val', u'key'])
+ return var.get(u"this").get(u'data').put(var.get(u'key'), var.get(u'val'))
+ PyJs_setData_2153_._set_name(u'setData')
+ var.get(u'Scope').get(u'prototype').put(u'setData', PyJs_setData_2153_)
+ @Js
+ def PyJs_getData_2154_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'getData':PyJs_getData_2154_, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'scope', u'data', u'key'])
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ var.put(u'data', var.get(u'scope').get(u'data').get(var.get(u'key')))
+ if (var.get(u'data')!=var.get(u"null")):
+ return var.get(u'data')
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ PyJs_getData_2154_._set_name(u'getData')
+ var.get(u'Scope').get(u'prototype').put(u'getData', PyJs_getData_2154_)
+ @Js
+ def PyJs_removeData_2155_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'removeData':PyJs_removeData_2155_, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'scope', u'data', u'key'])
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ var.put(u'data', var.get(u'scope').get(u'data').get(var.get(u'key')))
+ if (var.get(u'data')!=var.get(u"null")):
+ var.get(u'scope').get(u'data').put(var.get(u'key'), var.get(u"null"))
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ PyJs_removeData_2155_._set_name(u'removeData')
+ var.get(u'Scope').get(u'prototype').put(u'removeData', PyJs_removeData_2155_)
+ @Js
+ def PyJs_init_2156_(this, arguments, var=var):
+ var = Scope({u'this':this, u'init':PyJs_init_2156_, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u"this").get(u'references').neg():
+ var.get(u"this").callprop(u'crawl')
+ PyJs_init_2156_._set_name(u'init')
+ var.get(u'Scope').get(u'prototype').put(u'init', PyJs_init_2156_)
+ @Js
+ def PyJs_crawl_2157_(this, arguments, var=var):
+ var = Scope({u'this':this, u'crawl':PyJs_crawl_2157_, u'arguments':arguments}, var)
+ var.registers([])
+ (var.put(u'_crawlCallsCount',Js(var.get(u'_crawlCallsCount').to_number())+Js(1))-Js(1))
+ var.get(u"this").callprop(u'_crawl')
+ (var.put(u'_crawlCallsCount',Js(var.get(u'_crawlCallsCount').to_number())-Js(1))+Js(1))
+ PyJs_crawl_2157_._set_name(u'crawl')
+ var.get(u'Scope').get(u'prototype').put(u'crawl', PyJs_crawl_2157_)
+ @Js
+ def PyJs__crawl_2158_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'_crawl':PyJs__crawl_2158_}, var)
+ var.registers([u'binding', u'_ref15', u'param', u'_ref17', u'_ref16', u'state', u'_ref14', u'params', u'_isArray18', u'ref', u'_ref18', u'node', u'parent', u'_isArray17', u'_isArray16', u'_isArray15', u'_isArray14', u'key', u'path', u'_path2', u'_iterator15', u'_iterator14', u'_iterator17', u'_iterator16', u'name', u'_iterator18', u'ids', u'programParent', u'_i17', u'_i16', u'_i15', u'_i14', u'_i18', u'_path'])
+ var.put(u'path', var.get(u"this").get(u'path'))
+ var.get(u"this").put(u'references', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.get(u"this").put(u'bindings', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.get(u"this").put(u'globals', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.get(u"this").put(u'uids', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.get(u"this").put(u'data', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ if var.get(u'path').callprop(u'isLoop'):
+ #for JS loop
+ var.put(u'_iterator14', var.get(u't').get(u'FOR_INIT_KEYS'))
+ var.put(u'_isArray14', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator14')))
+ var.put(u'_i14', Js(0.0))
+ var.put(u'_iterator14', (var.get(u'_iterator14') if var.get(u'_isArray14') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator14'))))
+ while 1:
+ pass
+ if var.get(u'_isArray14'):
+ if (var.get(u'_i14')>=var.get(u'_iterator14').get(u'length')):
+ break
+ var.put(u'_ref14', var.get(u'_iterator14').get((var.put(u'_i14',Js(var.get(u'_i14').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i14', var.get(u'_iterator14').callprop(u'next'))
+ if var.get(u'_i14').get(u'done'):
+ break
+ var.put(u'_ref14', var.get(u'_i14').get(u'value'))
+ var.put(u'key', var.get(u'_ref14'))
+ var.put(u'node', var.get(u'path').callprop(u'get', var.get(u'key')))
+ if var.get(u'node').callprop(u'isBlockScoped'):
+ var.get(u"this").callprop(u'registerBinding', var.get(u'node').get(u'node').get(u'kind'), var.get(u'node'))
+
+ if (var.get(u'path').callprop(u'isFunctionExpression') and var.get(u'path').callprop(u'has', Js(u'id'))):
+ if var.get(u'path').callprop(u'get', Js(u'id')).get(u'node').get(var.get(u't').get(u'NOT_LOCAL_BINDING')).neg():
+ var.get(u"this").callprop(u'registerBinding', Js(u'local'), var.get(u'path').callprop(u'get', Js(u'id')), var.get(u'path'))
+ if (var.get(u'path').callprop(u'isClassExpression') and var.get(u'path').callprop(u'has', Js(u'id'))):
+ if var.get(u'path').callprop(u'get', Js(u'id')).get(u'node').get(var.get(u't').get(u'NOT_LOCAL_BINDING')).neg():
+ var.get(u"this").callprop(u'registerBinding', Js(u'local'), var.get(u'path'))
+ if var.get(u'path').callprop(u'isFunction'):
+ var.put(u'params', var.get(u'path').callprop(u'get', Js(u'params')))
+ #for JS loop
+ var.put(u'_iterator15', var.get(u'params'))
+ var.put(u'_isArray15', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator15')))
+ var.put(u'_i15', Js(0.0))
+ var.put(u'_iterator15', (var.get(u'_iterator15') if var.get(u'_isArray15') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator15'))))
+ while 1:
+ pass
+ if var.get(u'_isArray15'):
+ if (var.get(u'_i15')>=var.get(u'_iterator15').get(u'length')):
+ break
+ var.put(u'_ref15', var.get(u'_iterator15').get((var.put(u'_i15',Js(var.get(u'_i15').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i15', var.get(u'_iterator15').callprop(u'next'))
+ if var.get(u'_i15').get(u'done'):
+ break
+ var.put(u'_ref15', var.get(u'_i15').get(u'value'))
+ var.put(u'param', var.get(u'_ref15'))
+ var.get(u"this").callprop(u'registerBinding', Js(u'param'), var.get(u'param'))
+
+ if var.get(u'path').callprop(u'isCatchClause'):
+ var.get(u"this").callprop(u'registerBinding', Js(u'let'), var.get(u'path'))
+ var.put(u'parent', var.get(u"this").callprop(u'getProgramParent'))
+ if var.get(u'parent').get(u'crawling'):
+ return var.get('undefined')
+ PyJs_Object_2159_ = Js({u'references':Js([]),u'constantViolations':Js([]),u'assignments':Js([])})
+ var.put(u'state', PyJs_Object_2159_)
+ var.get(u"this").put(u'crawling', var.get(u'true'))
+ var.get(u'path').callprop(u'traverse', var.get(u'collectorVisitor'), var.get(u'state'))
+ var.get(u"this").put(u'crawling', Js(False))
+ #for JS loop
+ var.put(u'_iterator16', var.get(u'state').get(u'assignments'))
+ var.put(u'_isArray16', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator16')))
+ var.put(u'_i16', Js(0.0))
+ var.put(u'_iterator16', (var.get(u'_iterator16') if var.get(u'_isArray16') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator16'))))
+ while 1:
+ pass
+ if var.get(u'_isArray16'):
+ if (var.get(u'_i16')>=var.get(u'_iterator16').get(u'length')):
+ break
+ var.put(u'_ref16', var.get(u'_iterator16').get((var.put(u'_i16',Js(var.get(u'_i16').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i16', var.get(u'_iterator16').callprop(u'next'))
+ if var.get(u'_i16').get(u'done'):
+ break
+ var.put(u'_ref16', var.get(u'_i16').get(u'value'))
+ var.put(u'_path', var.get(u'_ref16'))
+ var.put(u'ids', var.get(u'_path').callprop(u'getBindingIdentifiers'))
+ var.put(u'programParent', PyJsComma(Js(0.0), Js(None)))
+ for PyJsTemp in var.get(u'ids'):
+ var.put(u'name', PyJsTemp)
+ if var.get(u'_path').get(u'scope').callprop(u'getBinding', var.get(u'name')):
+ continue
+ var.put(u'programParent', (var.get(u'programParent') or var.get(u'_path').get(u'scope').callprop(u'getProgramParent')))
+ var.get(u'programParent').callprop(u'addGlobal', var.get(u'ids').get(var.get(u'name')))
+ var.get(u'_path').get(u'scope').callprop(u'registerConstantViolation', var.get(u'_path'))
+
+ #for JS loop
+ var.put(u'_iterator17', var.get(u'state').get(u'references'))
+ var.put(u'_isArray17', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator17')))
+ var.put(u'_i17', Js(0.0))
+ var.put(u'_iterator17', (var.get(u'_iterator17') if var.get(u'_isArray17') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator17'))))
+ while 1:
+ pass
+ if var.get(u'_isArray17'):
+ if (var.get(u'_i17')>=var.get(u'_iterator17').get(u'length')):
+ break
+ var.put(u'_ref17', var.get(u'_iterator17').get((var.put(u'_i17',Js(var.get(u'_i17').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i17', var.get(u'_iterator17').callprop(u'next'))
+ if var.get(u'_i17').get(u'done'):
+ break
+ var.put(u'_ref17', var.get(u'_i17').get(u'value'))
+ var.put(u'ref', var.get(u'_ref17'))
+ var.put(u'binding', var.get(u'ref').get(u'scope').callprop(u'getBinding', var.get(u'ref').get(u'node').get(u'name')))
+ if var.get(u'binding'):
+ var.get(u'binding').callprop(u'reference', var.get(u'ref'))
+ else:
+ var.get(u'ref').get(u'scope').callprop(u'getProgramParent').callprop(u'addGlobal', var.get(u'ref').get(u'node'))
+
+ #for JS loop
+ var.put(u'_iterator18', var.get(u'state').get(u'constantViolations'))
+ var.put(u'_isArray18', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator18')))
+ var.put(u'_i18', Js(0.0))
+ var.put(u'_iterator18', (var.get(u'_iterator18') if var.get(u'_isArray18') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator18'))))
+ while 1:
+ pass
+ if var.get(u'_isArray18'):
+ if (var.get(u'_i18')>=var.get(u'_iterator18').get(u'length')):
+ break
+ var.put(u'_ref18', var.get(u'_iterator18').get((var.put(u'_i18',Js(var.get(u'_i18').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i18', var.get(u'_iterator18').callprop(u'next'))
+ if var.get(u'_i18').get(u'done'):
+ break
+ var.put(u'_ref18', var.get(u'_i18').get(u'value'))
+ var.put(u'_path2', var.get(u'_ref18'))
+ var.get(u'_path2').get(u'scope').callprop(u'registerConstantViolation', var.get(u'_path2'))
+
+ PyJs__crawl_2158_._set_name(u'_crawl')
+ var.get(u'Scope').get(u'prototype').put(u'_crawl', PyJs__crawl_2158_)
+ @Js
+ def PyJs_push_2160_(opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'push':PyJs_push_2160_, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'kind', u'blockHoist', u'_path$unshiftContaine', u'declarPath', u'declar', u'declarator', u'path', u'dataKey', u'unique', u'opts'])
+ var.put(u'path', var.get(u"this").get(u'path'))
+ if (var.get(u'path').callprop(u'isBlockStatement').neg() and var.get(u'path').callprop(u'isProgram').neg()):
+ var.put(u'path', var.get(u"this").callprop(u'getBlockParent').get(u'path'))
+ if var.get(u'path').callprop(u'isSwitchStatement'):
+ var.put(u'path', var.get(u"this").callprop(u'getFunctionParent').get(u'path'))
+ if ((var.get(u'path').callprop(u'isLoop') or var.get(u'path').callprop(u'isCatchClause')) or var.get(u'path').callprop(u'isFunction')):
+ var.get(u't').callprop(u'ensureBlock', var.get(u'path').get(u'node'))
+ var.put(u'path', var.get(u'path').callprop(u'get', Js(u'body')))
+ var.put(u'unique', var.get(u'opts').get(u'unique'))
+ var.put(u'kind', (var.get(u'opts').get(u'kind') or Js(u'var')))
+ var.put(u'blockHoist', (Js(2.0) if (var.get(u'opts').get(u'_blockHoist')==var.get(u"null")) else var.get(u'opts').get(u'_blockHoist')))
+ var.put(u'dataKey', (((Js(u'declaration:')+var.get(u'kind'))+Js(u':'))+var.get(u'blockHoist')))
+ var.put(u'declarPath', (var.get(u'unique').neg() and var.get(u'path').callprop(u'getData', var.get(u'dataKey'))))
+ if var.get(u'declarPath').neg():
+ var.put(u'declar', var.get(u't').callprop(u'variableDeclaration', var.get(u'kind'), Js([])))
+ var.get(u'declar').put(u'_generated', var.get(u'true'))
+ var.get(u'declar').put(u'_blockHoist', var.get(u'blockHoist'))
+ var.put(u'_path$unshiftContaine', var.get(u'path').callprop(u'unshiftContainer', Js(u'body'), Js([var.get(u'declar')])))
+ var.put(u'declarPath', var.get(u'_path$unshiftContaine').get(u'0'))
+ if var.get(u'unique').neg():
+ var.get(u'path').callprop(u'setData', var.get(u'dataKey'), var.get(u'declarPath'))
+ var.put(u'declarator', var.get(u't').callprop(u'variableDeclarator', var.get(u'opts').get(u'id'), var.get(u'opts').get(u'init')))
+ var.get(u'declarPath').get(u'node').get(u'declarations').callprop(u'push', var.get(u'declarator'))
+ var.get(u"this").callprop(u'registerBinding', var.get(u'kind'), var.get(u'declarPath').callprop(u'get', Js(u'declarations')).callprop(u'pop'))
+ PyJs_push_2160_._set_name(u'push')
+ var.get(u'Scope').get(u'prototype').put(u'push', PyJs_push_2160_)
+ @Js
+ def PyJs_getProgramParent_2161_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getProgramParent':PyJs_getProgramParent_2161_, u'arguments':arguments}, var)
+ var.registers([u'scope'])
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ if var.get(u'scope').get(u'path').callprop(u'isProgram'):
+ return var.get(u'scope')
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"We couldn't find a Function or Program...")))
+ raise PyJsTempException
+ PyJs_getProgramParent_2161_._set_name(u'getProgramParent')
+ var.get(u'Scope').get(u'prototype').put(u'getProgramParent', PyJs_getProgramParent_2161_)
+ @Js
+ def PyJs_getFunctionParent_2162_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'getFunctionParent':PyJs_getFunctionParent_2162_}, var)
+ var.registers([u'scope'])
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ if var.get(u'scope').get(u'path').callprop(u'isFunctionParent'):
+ return var.get(u'scope')
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"We couldn't find a Function or Program...")))
+ raise PyJsTempException
+ PyJs_getFunctionParent_2162_._set_name(u'getFunctionParent')
+ var.get(u'Scope').get(u'prototype').put(u'getFunctionParent', PyJs_getFunctionParent_2162_)
+ @Js
+ def PyJs_getBlockParent_2163_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getBlockParent':PyJs_getBlockParent_2163_, u'arguments':arguments}, var)
+ var.registers([u'scope'])
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ if var.get(u'scope').get(u'path').callprop(u'isBlockParent'):
+ return var.get(u'scope')
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...")))
+ raise PyJsTempException
+ PyJs_getBlockParent_2163_._set_name(u'getBlockParent')
+ var.get(u'Scope').get(u'prototype').put(u'getBlockParent', PyJs_getBlockParent_2163_)
+ @Js
+ def PyJs_getAllBindings_2164_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'getAllBindings':PyJs_getAllBindings_2164_}, var)
+ var.registers([u'scope', u'ids'])
+ var.put(u'ids', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ PyJsComma(Js(0.0),var.get(u'_defaults2').get(u'default'))(var.get(u'ids'), var.get(u'scope').get(u'bindings'))
+ var.put(u'scope', var.get(u'scope').get(u'parent'))
+ if not var.get(u'scope'):
+ break
+ return var.get(u'ids')
+ PyJs_getAllBindings_2164_._set_name(u'getAllBindings')
+ var.get(u'Scope').get(u'prototype').put(u'getAllBindings', PyJs_getAllBindings_2164_)
+ @Js
+ def PyJs_getAllBindingsOfKind_2165_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'getAllBindingsOfKind':PyJs_getAllBindingsOfKind_2165_}, var)
+ var.registers([u'kind', u'name', u'binding', u'ids', u'_iterator19', u'_ref19', u'scope', u'_i19', u'_isArray19'])
+ var.put(u'ids', PyJsComma(Js(0.0),var.get(u'_create2').get(u'default'))(var.get(u"null")))
+ #for JS loop
+ var.put(u'_iterator19', var.get(u'arguments'))
+ var.put(u'_isArray19', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator19')))
+ var.put(u'_i19', Js(0.0))
+ var.put(u'_iterator19', (var.get(u'_iterator19') if var.get(u'_isArray19') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator19'))))
+ while 1:
+ pass
+ if var.get(u'_isArray19'):
+ if (var.get(u'_i19')>=var.get(u'_iterator19').get(u'length')):
+ break
+ var.put(u'_ref19', var.get(u'_iterator19').get((var.put(u'_i19',Js(var.get(u'_i19').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i19', var.get(u'_iterator19').callprop(u'next'))
+ if var.get(u'_i19').get(u'done'):
+ break
+ var.put(u'_ref19', var.get(u'_i19').get(u'value'))
+ var.put(u'kind', var.get(u'_ref19'))
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ for PyJsTemp in var.get(u'scope').get(u'bindings'):
+ var.put(u'name', PyJsTemp)
+ var.put(u'binding', var.get(u'scope').get(u'bindings').get(var.get(u'name')))
+ if PyJsStrictEq(var.get(u'binding').get(u'kind'),var.get(u'kind')):
+ var.get(u'ids').put(var.get(u'name'), var.get(u'binding'))
+ var.put(u'scope', var.get(u'scope').get(u'parent'))
+ if not var.get(u'scope'):
+ break
+
+ return var.get(u'ids')
+ PyJs_getAllBindingsOfKind_2165_._set_name(u'getAllBindingsOfKind')
+ var.get(u'Scope').get(u'prototype').put(u'getAllBindingsOfKind', PyJs_getAllBindingsOfKind_2165_)
+ @Js
+ def PyJs_bindingIdentifierEquals_2166_(name, node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'bindingIdentifierEquals':PyJs_bindingIdentifierEquals_2166_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'node', u'name'])
+ return PyJsStrictEq(var.get(u"this").callprop(u'getBindingIdentifier', var.get(u'name')),var.get(u'node'))
+ PyJs_bindingIdentifierEquals_2166_._set_name(u'bindingIdentifierEquals')
+ var.get(u'Scope').get(u'prototype').put(u'bindingIdentifierEquals', PyJs_bindingIdentifierEquals_2166_)
+ @Js
+ def PyJs_warnOnFlowBinding_2167_(binding, this, arguments, var=var):
+ var = Scope({u'this':this, u'binding':binding, u'arguments':arguments, u'warnOnFlowBinding':PyJs_warnOnFlowBinding_2167_}, var)
+ var.registers([u'binding'])
+ if ((PyJsStrictEq(var.get(u'_crawlCallsCount'),Js(0.0)) and var.get(u'binding')) and var.get(u'binding').get(u'path').callprop(u'isFlow')):
+ var.get(u'console').callprop(u'warn', Js(u'\n You or one of the Babel plugins you are using are using Flow declarations as bindings.\n Support for this will be removed in version 6.8. To find out the caller, grep for this\n message and change it to a `console.trace()`.\n '))
+ return var.get(u'binding')
+ PyJs_warnOnFlowBinding_2167_._set_name(u'warnOnFlowBinding')
+ var.get(u'Scope').get(u'prototype').put(u'warnOnFlowBinding', PyJs_warnOnFlowBinding_2167_)
+ @Js
+ def PyJs_getBinding_2168_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'getBinding':PyJs_getBinding_2168_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'scope', u'binding', u'name'])
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ var.put(u'binding', var.get(u'scope').callprop(u'getOwnBinding', var.get(u'name')))
+ if var.get(u'binding'):
+ return var.get(u"this").callprop(u'warnOnFlowBinding', var.get(u'binding'))
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ PyJs_getBinding_2168_._set_name(u'getBinding')
+ var.get(u'Scope').get(u'prototype').put(u'getBinding', PyJs_getBinding_2168_)
+ @Js
+ def PyJs_getOwnBinding_2169_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'getOwnBinding':PyJs_getOwnBinding_2169_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return var.get(u"this").callprop(u'warnOnFlowBinding', var.get(u"this").get(u'bindings').get(var.get(u'name')))
+ PyJs_getOwnBinding_2169_._set_name(u'getOwnBinding')
+ var.get(u'Scope').get(u'prototype').put(u'getOwnBinding', PyJs_getOwnBinding_2169_)
+ @Js
+ def PyJs_getBindingIdentifier_2170_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'getBindingIdentifier':PyJs_getBindingIdentifier_2170_, u'arguments':arguments}, var)
+ var.registers([u'info', u'name'])
+ var.put(u'info', var.get(u"this").callprop(u'getBinding', var.get(u'name')))
+ return (var.get(u'info') and var.get(u'info').get(u'identifier'))
+ PyJs_getBindingIdentifier_2170_._set_name(u'getBindingIdentifier')
+ var.get(u'Scope').get(u'prototype').put(u'getBindingIdentifier', PyJs_getBindingIdentifier_2170_)
+ @Js
+ def PyJs_getOwnBindingIdentifier_2171_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'getOwnBindingIdentifier':PyJs_getOwnBindingIdentifier_2171_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'binding', u'name'])
+ var.put(u'binding', var.get(u"this").get(u'bindings').get(var.get(u'name')))
+ return (var.get(u'binding') and var.get(u'binding').get(u'identifier'))
+ PyJs_getOwnBindingIdentifier_2171_._set_name(u'getOwnBindingIdentifier')
+ var.get(u'Scope').get(u'prototype').put(u'getOwnBindingIdentifier', PyJs_getOwnBindingIdentifier_2171_)
+ @Js
+ def PyJs_hasOwnBinding_2172_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'hasOwnBinding':PyJs_hasOwnBinding_2172_, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return var.get(u"this").callprop(u'getOwnBinding', var.get(u'name')).neg().neg()
+ PyJs_hasOwnBinding_2172_._set_name(u'hasOwnBinding')
+ var.get(u'Scope').get(u'prototype').put(u'hasOwnBinding', PyJs_hasOwnBinding_2172_)
+ @Js
+ def PyJs_hasBinding_2173_(name, noGlobals, this, arguments, var=var):
+ var = Scope({u'this':this, u'hasBinding':PyJs_hasBinding_2173_, u'name':name, u'noGlobals':noGlobals, u'arguments':arguments}, var)
+ var.registers([u'name', u'noGlobals'])
+ if var.get(u'name').neg():
+ return Js(False)
+ if var.get(u"this").callprop(u'hasOwnBinding', var.get(u'name')):
+ return var.get(u'true')
+ if var.get(u"this").callprop(u'parentHasBinding', var.get(u'name'), var.get(u'noGlobals')):
+ return var.get(u'true')
+ if var.get(u"this").callprop(u'hasUid', var.get(u'name')):
+ return var.get(u'true')
+ if (var.get(u'noGlobals').neg() and PyJsComma(Js(0.0),var.get(u'_includes2').get(u'default'))(var.get(u'Scope').get(u'globals'), var.get(u'name'))):
+ return var.get(u'true')
+ if (var.get(u'noGlobals').neg() and PyJsComma(Js(0.0),var.get(u'_includes2').get(u'default'))(var.get(u'Scope').get(u'contextVariables'), var.get(u'name'))):
+ return var.get(u'true')
+ return Js(False)
+ PyJs_hasBinding_2173_._set_name(u'hasBinding')
+ var.get(u'Scope').get(u'prototype').put(u'hasBinding', PyJs_hasBinding_2173_)
+ @Js
+ def PyJs_parentHasBinding_2174_(name, noGlobals, this, arguments, var=var):
+ var = Scope({u'this':this, u'parentHasBinding':PyJs_parentHasBinding_2174_, u'name':name, u'noGlobals':noGlobals, u'arguments':arguments}, var)
+ var.registers([u'name', u'noGlobals'])
+ return (var.get(u"this").get(u'parent') and var.get(u"this").get(u'parent').callprop(u'hasBinding', var.get(u'name'), var.get(u'noGlobals')))
+ PyJs_parentHasBinding_2174_._set_name(u'parentHasBinding')
+ var.get(u'Scope').get(u'prototype').put(u'parentHasBinding', PyJs_parentHasBinding_2174_)
+ @Js
+ def PyJs_moveBindingTo_2175_(name, scope, this, arguments, var=var):
+ var = Scope({u'this':this, u'scope':scope, u'moveBindingTo':PyJs_moveBindingTo_2175_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'info', u'scope', u'name'])
+ var.put(u'info', var.get(u"this").callprop(u'getBinding', var.get(u'name')))
+ if var.get(u'info'):
+ var.get(u'info').get(u'scope').callprop(u'removeOwnBinding', var.get(u'name'))
+ var.get(u'info').put(u'scope', var.get(u'scope'))
+ var.get(u'scope').get(u'bindings').put(var.get(u'name'), var.get(u'info'))
+ PyJs_moveBindingTo_2175_._set_name(u'moveBindingTo')
+ var.get(u'Scope').get(u'prototype').put(u'moveBindingTo', PyJs_moveBindingTo_2175_)
+ @Js
+ def PyJs_removeOwnBinding_2176_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'removeOwnBinding':PyJs_removeOwnBinding_2176_, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ var.get(u"this").get(u'bindings').delete(var.get(u'name'))
+ PyJs_removeOwnBinding_2176_._set_name(u'removeOwnBinding')
+ var.get(u'Scope').get(u'prototype').put(u'removeOwnBinding', PyJs_removeOwnBinding_2176_)
+ @Js
+ def PyJs_removeBinding_2177_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'removeBinding':PyJs_removeBinding_2177_, u'arguments':arguments}, var)
+ var.registers([u'info', u'scope', u'name'])
+ var.put(u'info', var.get(u"this").callprop(u'getBinding', var.get(u'name')))
+ if var.get(u'info'):
+ var.get(u'info').get(u'scope').callprop(u'removeOwnBinding', var.get(u'name'))
+ var.put(u'scope', var.get(u"this"))
+ while 1:
+ if var.get(u'scope').get(u'uids').get(var.get(u'name')):
+ var.get(u'scope').get(u'uids').put(var.get(u'name'), Js(False))
+ if not var.put(u'scope', var.get(u'scope').get(u'parent')):
+ break
+ PyJs_removeBinding_2177_._set_name(u'removeBinding')
+ var.get(u'Scope').get(u'prototype').put(u'removeBinding', PyJs_removeBinding_2177_)
+ return var.get(u'Scope')
+ PyJs_anonymous_2120_._set_name(u'anonymous')
+ var.put(u'Scope', PyJs_anonymous_2120_())
+ var.get(u'Scope').put(u'globals', PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u'_globals2').get(u'default').get(u'builtin')))
+ var.get(u'Scope').put(u'contextVariables', Js([Js(u'arguments'), Js(u'undefined'), Js(u'Infinity'), Js(u'NaN')]))
+ var.get(u'exports').put(u'default', var.get(u'Scope'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_2103_._set_name(u'anonymous')
+PyJs_Object_2178_ = Js({u'../cache':Js(222.0),u'../index':Js(225.0),u'./binding':Js(243.0),u'./lib/renamer':Js(245.0),u'babel-messages':Js(57.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/core-js/map':Js(98.0),u'babel-runtime/core-js/object/create':Js(101.0),u'babel-runtime/core-js/object/keys':Js(103.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-types':Js(258.0),u'globals':Js(278.0),u'lodash/defaults':Js(442.0),u'lodash/includes':Js(456.0),u'lodash/repeat':Js(483.0)})
+@Js
+def PyJs_anonymous_2179_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'_binding2', u'exports', u'_interopRequireWildcard', u'Renamer', u'require', u'_babelTypes', u'renameVisitor', u'module', u't', u'_binding', u'_interopRequireDefault', u'_classCallCheck3', u'_classCallCheck2'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2181_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2181_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2180_ = Js({})
+ var.put(u'newObj', PyJs_Object_2180_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_classCallCheck2', var.get(u'require')(Js(u'babel-runtime/helpers/classCallCheck')))
+ var.put(u'_classCallCheck3', var.get(u'_interopRequireDefault')(var.get(u'_classCallCheck2')))
+ var.put(u'_binding', var.get(u'require')(Js(u'../binding')))
+ var.put(u'_binding2', var.get(u'_interopRequireDefault')(var.get(u'_binding')))
+ var.put(u'_babelTypes', var.get(u'require')(Js(u'babel-types')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_babelTypes')))
+ pass
+ pass
+ @Js
+ def PyJs_ReferencedIdentifier_2183_(_ref, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'_ref':_ref, u'ReferencedIdentifier':PyJs_ReferencedIdentifier_2183_, u'state':state, u'arguments':arguments}, var)
+ var.registers([u'node', u'_ref', u'state'])
+ var.put(u'node', var.get(u'_ref').get(u'node'))
+ if PyJsStrictEq(var.get(u'node').get(u'name'),var.get(u'state').get(u'oldName')):
+ var.get(u'node').put(u'name', var.get(u'state').get(u'newName'))
+ PyJs_ReferencedIdentifier_2183_._set_name(u'ReferencedIdentifier')
+ @Js
+ def PyJs_Scope_2184_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'arguments':arguments, u'Scope':PyJs_Scope_2184_}, var)
+ var.registers([u'path', u'state'])
+ if var.get(u'path').get(u'scope').callprop(u'bindingIdentifierEquals', var.get(u'state').get(u'oldName'), var.get(u'state').get(u'binding').get(u'identifier')).neg():
+ var.get(u'path').callprop(u'skip')
+ PyJs_Scope_2184_._set_name(u'Scope')
+ @Js
+ def PyJs_AssignmentExpressionDeclaration_2185_(path, state, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'state':state, u'AssignmentExpressionDeclaration':PyJs_AssignmentExpressionDeclaration_2185_, u'arguments':arguments}, var)
+ var.registers([u'path', u'state', u'ids', u'name'])
+ var.put(u'ids', var.get(u'path').callprop(u'getOuterBindingIdentifiers'))
+ for PyJsTemp in var.get(u'ids'):
+ var.put(u'name', PyJsTemp)
+ if PyJsStrictEq(var.get(u'name'),var.get(u'state').get(u'oldName')):
+ var.get(u'ids').get(var.get(u'name')).put(u'name', var.get(u'state').get(u'newName'))
+ PyJs_AssignmentExpressionDeclaration_2185_._set_name(u'AssignmentExpressionDeclaration')
+ PyJs_Object_2182_ = Js({u'ReferencedIdentifier':PyJs_ReferencedIdentifier_2183_,u'Scope':PyJs_Scope_2184_,u'AssignmentExpression|Declaration':PyJs_AssignmentExpressionDeclaration_2185_})
+ var.put(u'renameVisitor', PyJs_Object_2182_)
+ @Js
+ def PyJs_anonymous_2186_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'Renamer'])
+ @Js
+ def PyJsHoisted_Renamer_(binding, oldName, newName, this, arguments, var=var):
+ var = Scope({u'newName':newName, u'this':this, u'binding':binding, u'oldName':oldName, u'arguments':arguments}, var)
+ var.registers([u'newName', u'binding', u'oldName'])
+ PyJsComma(Js(0.0),var.get(u'_classCallCheck3').get(u'default'))(var.get(u"this"), var.get(u'Renamer'))
+ var.get(u"this").put(u'newName', var.get(u'newName'))
+ var.get(u"this").put(u'oldName', var.get(u'oldName'))
+ var.get(u"this").put(u'binding', var.get(u'binding'))
+ PyJsHoisted_Renamer_.func_name = u'Renamer'
+ var.put(u'Renamer', PyJsHoisted_Renamer_)
+ pass
+ @Js
+ def PyJs_maybeConvertFromExportDeclaration_2187_(parentDeclar, this, arguments, var=var):
+ var = Scope({u'this':this, u'parentDeclar':parentDeclar, u'maybeConvertFromExportDeclaration':PyJs_maybeConvertFromExportDeclaration_2187_, u'arguments':arguments}, var)
+ var.registers([u'specifiers', u'exportDeclar', u'name', u'bindingIdentifiers', u'exportedName', u'parentDeclar', u'localName', u'aliasDeclar', u'isDefault'])
+ var.put(u'exportDeclar', (var.get(u'parentDeclar').get(u'parentPath').callprop(u'isExportDeclaration') and var.get(u'parentDeclar').get(u'parentPath')))
+ if var.get(u'exportDeclar').neg():
+ return var.get('undefined')
+ var.put(u'isDefault', var.get(u'exportDeclar').callprop(u'isExportDefaultDeclaration'))
+ if ((var.get(u'isDefault') and (var.get(u'parentDeclar').callprop(u'isFunctionDeclaration') or var.get(u'parentDeclar').callprop(u'isClassDeclaration'))) and var.get(u'parentDeclar').get(u'node').get(u'id').neg()):
+ var.get(u'parentDeclar').get(u'node').put(u'id', var.get(u'parentDeclar').get(u'scope').callprop(u'generateUidIdentifier', Js(u'default')))
+ var.put(u'bindingIdentifiers', var.get(u'parentDeclar').callprop(u'getOuterBindingIdentifiers'))
+ var.put(u'specifiers', Js([]))
+ for PyJsTemp in var.get(u'bindingIdentifiers'):
+ var.put(u'name', PyJsTemp)
+ var.put(u'localName', (var.get(u"this").get(u'newName') if PyJsStrictEq(var.get(u'name'),var.get(u"this").get(u'oldName')) else var.get(u'name')))
+ var.put(u'exportedName', (Js(u'default') if var.get(u'isDefault') else var.get(u'name')))
+ var.get(u'specifiers').callprop(u'push', var.get(u't').callprop(u'exportSpecifier', var.get(u't').callprop(u'identifier', var.get(u'localName')), var.get(u't').callprop(u'identifier', var.get(u'exportedName'))))
+ if var.get(u'specifiers').get(u'length'):
+ var.put(u'aliasDeclar', var.get(u't').callprop(u'exportNamedDeclaration', var.get(u"null"), var.get(u'specifiers')))
+ if var.get(u'parentDeclar').callprop(u'isFunctionDeclaration'):
+ var.get(u'aliasDeclar').put(u'_blockHoist', Js(3.0))
+ var.get(u'exportDeclar').callprop(u'insertAfter', var.get(u'aliasDeclar'))
+ var.get(u'exportDeclar').callprop(u'replaceWith', var.get(u'parentDeclar').get(u'node'))
+ PyJs_maybeConvertFromExportDeclaration_2187_._set_name(u'maybeConvertFromExportDeclaration')
+ var.get(u'Renamer').get(u'prototype').put(u'maybeConvertFromExportDeclaration', PyJs_maybeConvertFromExportDeclaration_2187_)
+ @Js
+ def PyJs_maybeConvertFromClassFunctionDeclaration_2188_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'maybeConvertFromClassFunctionDeclaration':PyJs_maybeConvertFromClassFunctionDeclaration_2188_}, var)
+ var.registers([u'path'])
+ return var.get('undefined')
+ if (var.get(u'path').callprop(u'isFunctionDeclaration').neg() and var.get(u'path').callprop(u'isClassDeclaration').neg()):
+ return var.get('undefined')
+ if PyJsStrictNeq(var.get(u"this").get(u'binding').get(u'kind'),Js(u'hoisted')):
+ return var.get('undefined')
+ var.get(u'path').get(u'node').put(u'id', var.get(u't').callprop(u'identifier', var.get(u"this").get(u'oldName')))
+ var.get(u'path').get(u'node').put(u'_blockHoist', Js(3.0))
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'variableDeclaration', Js(u'let'), Js([var.get(u't').callprop(u'variableDeclarator', var.get(u't').callprop(u'identifier', var.get(u"this").get(u'newName')), var.get(u't').callprop(u'toExpression', var.get(u'path').get(u'node')))])))
+ PyJs_maybeConvertFromClassFunctionDeclaration_2188_._set_name(u'maybeConvertFromClassFunctionDeclaration')
+ var.get(u'Renamer').get(u'prototype').put(u'maybeConvertFromClassFunctionDeclaration', PyJs_maybeConvertFromClassFunctionDeclaration_2188_)
+ @Js
+ def PyJs_maybeConvertFromClassFunctionExpression_2189_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'maybeConvertFromClassFunctionExpression':PyJs_maybeConvertFromClassFunctionExpression_2189_}, var)
+ var.registers([u'path'])
+ return var.get('undefined')
+ if (var.get(u'path').callprop(u'isFunctionExpression').neg() and var.get(u'path').callprop(u'isClassExpression').neg()):
+ return var.get('undefined')
+ if PyJsStrictNeq(var.get(u"this").get(u'binding').get(u'kind'),Js(u'local')):
+ return var.get('undefined')
+ var.get(u'path').get(u'node').put(u'id', var.get(u't').callprop(u'identifier', var.get(u"this").get(u'oldName')))
+ PyJs_Object_2190_ = Js({u'id':var.get(u't').callprop(u'identifier', var.get(u"this").get(u'newName'))})
+ var.get(u"this").get(u'binding').get(u'scope').get(u'parent').callprop(u'push', PyJs_Object_2190_)
+ var.get(u'path').callprop(u'replaceWith', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u't').callprop(u'identifier', var.get(u"this").get(u'newName')), var.get(u'path').get(u'node')))
+ PyJs_maybeConvertFromClassFunctionExpression_2189_._set_name(u'maybeConvertFromClassFunctionExpression')
+ var.get(u'Renamer').get(u'prototype').put(u'maybeConvertFromClassFunctionExpression', PyJs_maybeConvertFromClassFunctionExpression_2189_)
+ @Js
+ def PyJs_rename_2191_(block, this, arguments, var=var):
+ var = Scope({u'this':this, u'rename':PyJs_rename_2191_, u'arguments':arguments, u'block':block}, var)
+ var.registers([u'newName', u'binding', u'oldName', u'parentDeclar', u'scope', u'path', u'block'])
+ var.put(u'binding', var.get(u"this").get(u'binding'))
+ var.put(u'oldName', var.get(u"this").get(u'oldName'))
+ var.put(u'newName', var.get(u"this").get(u'newName'))
+ var.put(u'scope', var.get(u'binding').get(u'scope'))
+ var.put(u'path', var.get(u'binding').get(u'path'))
+ @Js
+ def PyJs_anonymous_2192_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return (var.get(u'path').callprop(u'isDeclaration') or var.get(u'path').callprop(u'isFunctionExpression'))
+ PyJs_anonymous_2192_._set_name(u'anonymous')
+ var.put(u'parentDeclar', var.get(u'path').callprop(u'find', PyJs_anonymous_2192_))
+ if var.get(u'parentDeclar'):
+ var.get(u"this").callprop(u'maybeConvertFromExportDeclaration', var.get(u'parentDeclar'))
+ var.get(u'scope').callprop(u'traverse', (var.get(u'block') or var.get(u'scope').get(u'block')), var.get(u'renameVisitor'), var.get(u"this"))
+ if var.get(u'block').neg():
+ var.get(u'scope').callprop(u'removeOwnBinding', var.get(u'oldName'))
+ var.get(u'scope').get(u'bindings').put(var.get(u'newName'), var.get(u'binding'))
+ var.get(u"this").get(u'binding').get(u'identifier').put(u'name', var.get(u'newName'))
+ if PyJsStrictEq(var.get(u'binding').get(u'type'),Js(u'hoisted')):
+ pass
+ if var.get(u'parentDeclar'):
+ var.get(u"this").callprop(u'maybeConvertFromClassFunctionDeclaration', var.get(u'parentDeclar'))
+ var.get(u"this").callprop(u'maybeConvertFromClassFunctionExpression', var.get(u'parentDeclar'))
+ PyJs_rename_2191_._set_name(u'rename')
+ var.get(u'Renamer').get(u'prototype').put(u'rename', PyJs_rename_2191_)
+ return var.get(u'Renamer')
+ PyJs_anonymous_2186_._set_name(u'anonymous')
+ var.put(u'Renamer', PyJs_anonymous_2186_())
+ var.get(u'exports').put(u'default', var.get(u'Renamer'))
+ var.get(u'module').put(u'exports', var.get(u'exports').get(u'default'))
+PyJs_anonymous_2179_._set_name(u'anonymous')
+PyJs_Object_2193_ = Js({u'../binding':Js(243.0),u'babel-runtime/helpers/classCallCheck':Js(110.0),u'babel-types':Js(258.0)})
+@Js
+def PyJs_anonymous_2194_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'module', u'_clone', u'_virtualTypes', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'virtualTypes', u'_typeof2', u'_typeof3', u'shouldIgnoreKey', u'validateVisitorMethods', u'verify', u'_keys', u'wrapWithStateOrWrapper', u'_babelMessages', u'exports', u'_interopRequireWildcard', u'mergePair', u'_babelTypes', u'_keys2', u'ensureCallbackArrays', u'ensureEntranceObjects', u'require', u'messages', u'wrapCheck', u'_clone2', u'explode', u'merge', u't'])
+ @Js
+ def PyJsHoisted_mergePair_(dest, src, this, arguments, var=var):
+ var = Scope({u'dest':dest, u'src':src, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'dest', u'src', u'key'])
+ for PyJsTemp in var.get(u'src'):
+ var.put(u'key', PyJsTemp)
+ var.get(u'dest').put(var.get(u'key'), Js([]).callprop(u'concat', (var.get(u'dest').get(var.get(u'key')) or Js([])), var.get(u'src').get(var.get(u'key'))))
+ PyJsHoisted_mergePair_.func_name = u'mergePair'
+ var.put(u'mergePair', PyJsHoisted_mergePair_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2195_ = Js({})
+ var.put(u'newObj', PyJs_Object_2195_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_shouldIgnoreKey_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ if PyJsStrictEq(var.get(u'key').get(u'0'),Js(u'_')):
+ return var.get(u'true')
+ if ((PyJsStrictEq(var.get(u'key'),Js(u'enter')) or PyJsStrictEq(var.get(u'key'),Js(u'exit'))) or PyJsStrictEq(var.get(u'key'),Js(u'shouldSkip'))):
+ return var.get(u'true')
+ if ((PyJsStrictEq(var.get(u'key'),Js(u'blacklist')) or PyJsStrictEq(var.get(u'key'),Js(u'noScope'))) or PyJsStrictEq(var.get(u'key'),Js(u'skipKeys'))):
+ return var.get(u'true')
+ return Js(False)
+ PyJsHoisted_shouldIgnoreKey_.func_name = u'shouldIgnoreKey'
+ var.put(u'shouldIgnoreKey', PyJsHoisted_shouldIgnoreKey_)
+ @Js
+ def PyJsHoisted_validateVisitorMethods_(path, val, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments, u'val':val}, var)
+ var.registers([u'_isArray5', u'fns', u'val', u'_ref5', u'_iterator5', u'path', u'_i5', u'fn'])
+ var.put(u'fns', Js([]).callprop(u'concat', var.get(u'val')))
+ #for JS loop
+ var.put(u'_iterator5', var.get(u'fns'))
+ var.put(u'_isArray5', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator5')))
+ var.put(u'_i5', Js(0.0))
+ var.put(u'_iterator5', (var.get(u'_iterator5') if var.get(u'_isArray5') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator5'))))
+ while 1:
+ pass
+ if var.get(u'_isArray5'):
+ if (var.get(u'_i5')>=var.get(u'_iterator5').get(u'length')):
+ break
+ var.put(u'_ref5', var.get(u'_iterator5').get((var.put(u'_i5',Js(var.get(u'_i5').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i5', var.get(u'_iterator5').callprop(u'next'))
+ if var.get(u'_i5').get(u'done'):
+ break
+ var.put(u'_ref5', var.get(u'_i5').get(u'value'))
+ var.put(u'fn', var.get(u'_ref5'))
+ if PyJsStrictNeq(var.get(u'fn',throw=False).typeof(),Js(u'function')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((((Js(u'Non-function found defined in ')+var.get(u'path'))+Js(u' with type '))+(Js(u'undefined') if PyJsStrictEq(var.get(u'fn',throw=False).typeof(),Js(u'undefined')) else PyJsComma(Js(0.0),var.get(u'_typeof3').get(u'default'))(var.get(u'fn'))))))
+ raise PyJsTempException
+
+ PyJsHoisted_validateVisitorMethods_.func_name = u'validateVisitorMethods'
+ var.put(u'validateVisitorMethods', PyJsHoisted_validateVisitorMethods_)
+ @Js
+ def PyJsHoisted_verify_(visitor, this, arguments, var=var):
+ var = Scope({u'this':this, u'visitor':visitor, u'arguments':arguments}, var)
+ var.registers([u'visitors', u'nodeType', u'visitor', u'visitorKey'])
+ if var.get(u'visitor').get(u'_verified'):
+ return var.get('undefined')
+ if PyJsStrictEq(var.get(u'visitor',throw=False).typeof(),Js(u'function')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(var.get(u'messages').callprop(u'get', Js(u'traverseVerifyRootFunction'))))
+ raise PyJsTempException
+ for PyJsTemp in var.get(u'visitor'):
+ var.put(u'nodeType', PyJsTemp)
+ if (PyJsStrictEq(var.get(u'nodeType'),Js(u'enter')) or PyJsStrictEq(var.get(u'nodeType'),Js(u'exit'))):
+ var.get(u'validateVisitorMethods')(var.get(u'nodeType'), var.get(u'visitor').get(var.get(u'nodeType')))
+ if var.get(u'shouldIgnoreKey')(var.get(u'nodeType')):
+ continue
+ if (var.get(u't').get(u'TYPES').callprop(u'indexOf', var.get(u'nodeType'))=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'part', var.get(u'_ref'))
+ var.get(u'visitor').put(var.get(u'part'), var.get(u'fns'))
+
+ var.get(u'verify')(var.get(u'visitor'))
+ var.get(u'visitor').delete(u'__esModule')
+ var.get(u'ensureEntranceObjects')(var.get(u'visitor'))
+ var.get(u'ensureCallbackArrays')(var.get(u'visitor'))
+ #for JS loop
+ var.put(u'_iterator2', PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u'visitor')))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'_nodeType3', var.get(u'_ref2'))
+ if var.get(u'shouldIgnoreKey')(var.get(u'_nodeType3')):
+ continue
+ var.put(u'wrapper', var.get(u'virtualTypes').get(var.get(u'_nodeType3')))
+ if var.get(u'wrapper').neg():
+ continue
+ var.put(u'_fns2', var.get(u'visitor').get(var.get(u'_nodeType3')))
+ for PyJsTemp in var.get(u'_fns2'):
+ var.put(u'type', PyJsTemp)
+ var.get(u'_fns2').put(var.get(u'type'), var.get(u'wrapCheck')(var.get(u'wrapper'), var.get(u'_fns2').get(var.get(u'type'))))
+ var.get(u'visitor').delete(var.get(u'_nodeType3'))
+ if var.get(u'wrapper').get(u'types'):
+ #for JS loop
+ var.put(u'_iterator4', var.get(u'wrapper').get(u'types'))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator4'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i4').get(u'value'))
+ var.put(u'_type', var.get(u'_ref4'))
+ if var.get(u'visitor').get(var.get(u'_type')):
+ var.get(u'mergePair')(var.get(u'visitor').get(var.get(u'_type')), var.get(u'_fns2'))
+ else:
+ var.get(u'visitor').put(var.get(u'_type'), var.get(u'_fns2'))
+
+ else:
+ var.get(u'mergePair')(var.get(u'visitor'), var.get(u'_fns2'))
+
+ for PyJsTemp in var.get(u'visitor'):
+ var.put(u'_nodeType', PyJsTemp)
+ if var.get(u'shouldIgnoreKey')(var.get(u'_nodeType')):
+ continue
+ var.put(u'_fns', var.get(u'visitor').get(var.get(u'_nodeType')))
+ var.put(u'aliases', var.get(u't').get(u'FLIPPED_ALIAS_KEYS').get(var.get(u'_nodeType')))
+ var.put(u'deprecratedKey', var.get(u't').get(u'DEPRECATED_KEYS').get(var.get(u'_nodeType')))
+ if var.get(u'deprecratedKey'):
+ var.get(u'console').callprop(u'trace', (((Js(u'Visitor defined for ')+var.get(u'_nodeType'))+Js(u' but it has been renamed to '))+var.get(u'deprecratedKey')))
+ var.put(u'aliases', Js([var.get(u'deprecratedKey')]))
+ if var.get(u'aliases').neg():
+ continue
+ var.get(u'visitor').delete(var.get(u'_nodeType'))
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'aliases'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'alias', var.get(u'_ref3'))
+ var.put(u'existing', var.get(u'visitor').get(var.get(u'alias')))
+ if var.get(u'existing'):
+ var.get(u'mergePair')(var.get(u'existing'), var.get(u'_fns'))
+ else:
+ var.get(u'visitor').put(var.get(u'alias'), PyJsComma(Js(0.0),var.get(u'_clone2').get(u'default'))(var.get(u'_fns')))
+
+ for PyJsTemp in var.get(u'visitor'):
+ var.put(u'_nodeType2', PyJsTemp)
+ if var.get(u'shouldIgnoreKey')(var.get(u'_nodeType2')):
+ continue
+ var.get(u'ensureCallbackArrays')(var.get(u'visitor').get(var.get(u'_nodeType2')))
+ return var.get(u'visitor')
+ PyJsHoisted_explode_.func_name = u'explode'
+ var.put(u'explode', PyJsHoisted_explode_)
+ @Js
+ def PyJsHoisted_merge_(visitors, this, arguments, var=var):
+ var = Scope({u'this':this, u'visitors':visitors, u'arguments':arguments}, var)
+ var.registers([u'visitorType', u'i', u'visitor', u'rootVisitor', u'wrapper', u'states', u'visitors', u'state', u'nodeVisitor', u'type'])
+ var.put(u'states', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else Js([])))
+ var.put(u'wrapper', var.get(u'arguments').get(u'2'))
+ PyJs_Object_2197_ = Js({})
+ var.put(u'rootVisitor', PyJs_Object_2197_)
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')'), Js(u'<'), Js(u'>='), Js(u'<=')])))
+ var.put(u'EQUALITY_BINARY_OPERATORS', var.get(u'exports').put(u'EQUALITY_BINARY_OPERATORS', Js([Js(u'=='), Js(u'==='), Js(u'!='), Js(u'!==')])))
+ var.put(u'COMPARISON_BINARY_OPERATORS', var.get(u'exports').put(u'COMPARISON_BINARY_OPERATORS', Js([]).callprop(u'concat', var.get(u'EQUALITY_BINARY_OPERATORS'), Js([Js(u'in'), Js(u'instanceof')]))))
+ var.put(u'BOOLEAN_BINARY_OPERATORS', var.get(u'exports').put(u'BOOLEAN_BINARY_OPERATORS', Js([]).callprop(u'concat', var.get(u'COMPARISON_BINARY_OPERATORS'), var.get(u'BOOLEAN_NUMBER_BINARY_OPERATORS'))))
+ var.put(u'NUMBER_BINARY_OPERATORS', var.get(u'exports').put(u'NUMBER_BINARY_OPERATORS', Js([Js(u'-'), Js(u'/'), Js(u'%'), Js(u'*'), Js(u'**'), Js(u'&'), Js(u'|'), Js(u'>>'), Js(u'>>>'), Js(u'<<'), Js(u'^')])))
+ var.put(u'BINARY_OPERATORS', var.get(u'exports').put(u'BINARY_OPERATORS', Js([Js(u'+')]).callprop(u'concat', var.get(u'NUMBER_BINARY_OPERATORS'), var.get(u'BOOLEAN_BINARY_OPERATORS'))))
+ var.put(u'BOOLEAN_UNARY_OPERATORS', var.get(u'exports').put(u'BOOLEAN_UNARY_OPERATORS', Js([Js(u'delete'), Js(u'!')])))
+ var.put(u'NUMBER_UNARY_OPERATORS', var.get(u'exports').put(u'NUMBER_UNARY_OPERATORS', Js([Js(u'+'), Js(u'-'), Js(u'++'), Js(u'--'), Js(u'~')])))
+ var.put(u'STRING_UNARY_OPERATORS', var.get(u'exports').put(u'STRING_UNARY_OPERATORS', Js([Js(u'typeof')])))
+ var.put(u'UNARY_OPERATORS', var.get(u'exports').put(u'UNARY_OPERATORS', Js([Js(u'void')]).callprop(u'concat', var.get(u'BOOLEAN_UNARY_OPERATORS'), var.get(u'NUMBER_UNARY_OPERATORS'), var.get(u'STRING_UNARY_OPERATORS'))))
+ PyJs_Object_2211_ = Js({u'optional':Js([Js(u'typeAnnotation'), Js(u'typeParameters'), Js(u'returnType')]),u'force':Js([Js(u'start'), Js(u'loc'), Js(u'end')])})
+ var.put(u'INHERIT_KEYS', var.get(u'exports').put(u'INHERIT_KEYS', PyJs_Object_2211_))
+ var.put(u'BLOCK_SCOPED_SYMBOL', var.get(u'exports').put(u'BLOCK_SCOPED_SYMBOL', PyJsComma(Js(0.0),var.get(u'_for2').get(u'default'))(Js(u'var used to be block scoped'))))
+ var.put(u'NOT_LOCAL_BINDING', var.get(u'exports').put(u'NOT_LOCAL_BINDING', PyJsComma(Js(0.0),var.get(u'_for2').get(u'default'))(Js(u'should not be considered a local binding'))))
+PyJs_anonymous_2207_._set_name(u'anonymous')
+PyJs_Object_2212_ = Js({u'babel-runtime/core-js/symbol/for':Js(106.0)})
+@Js
+def PyJs_anonymous_2213_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'toComputedKey', u'toBindingIdentifierName', u'module', u'_isString2', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'toKeyAlias', u'_isNumber', u'toSequenceExpression', u'_isRegExp2', u'_isRegExp', u'toIdentifier', u't', u'_isNumber2', u'exports', u'_stringify2', u'_interopRequireWildcard', u'toExpression', u'_maxSafeInteger2', u'_isPlainObject2', u'_index', u'_isString', u'require', u'toBlock', u'toStatement', u'_stringify', u'_maxSafeInteger', u'_isPlainObject', u'valueToNode'])
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2214_ = Js({})
+ var.put(u'newObj', PyJs_Object_2214_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_toSequenceExpression_(nodes, scope, this, arguments, var=var):
+ var = Scope({u'this':this, u'scope':scope, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'convert', u'bailed', u'i', u'declars', u'result', u'scope', u'nodes'])
+ @Js
+ def PyJsHoisted_convert_(nodes, this, arguments, var=var):
+ var = Scope({u'this':this, u'nodes':nodes, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'_isArray2', u'ensureLastUndefined', u'alternate', u'nodes', u'_i2', u'_ref2', u'key', u'exprs', u'declar', u'_i', u'_ref', u'consequent', u'bindings', u'_iterator2'])
+ var.put(u'ensureLastUndefined', Js(False))
+ var.put(u'exprs', Js([]))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'nodes'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'node', var.get(u'_ref'))
+ if var.get(u't').callprop(u'isExpression', var.get(u'node')):
+ var.get(u'exprs').callprop(u'push', var.get(u'node'))
+ else:
+ if var.get(u't').callprop(u'isExpressionStatement', var.get(u'node')):
+ var.get(u'exprs').callprop(u'push', var.get(u'node').get(u'expression'))
+ else:
+ if var.get(u't').callprop(u'isVariableDeclaration', var.get(u'node')):
+ if PyJsStrictNeq(var.get(u'node').get(u'kind'),Js(u'var')):
+ return var.put(u'bailed', var.get(u'true'))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'node').get(u'declarations'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'declar', var.get(u'_ref2'))
+ var.put(u'bindings', var.get(u't').callprop(u'getBindingIdentifiers', var.get(u'declar')))
+ for PyJsTemp in var.get(u'bindings'):
+ var.put(u'key', PyJsTemp)
+ PyJs_Object_2216_ = Js({u'kind':var.get(u'node').get(u'kind'),u'id':var.get(u'bindings').get(var.get(u'key'))})
+ var.get(u'declars').callprop(u'push', PyJs_Object_2216_)
+ if var.get(u'declar').get(u'init'):
+ var.get(u'exprs').callprop(u'push', var.get(u't').callprop(u'assignmentExpression', Js(u'='), var.get(u'declar').get(u'id'), var.get(u'declar').get(u'init')))
+
+ var.put(u'ensureLastUndefined', var.get(u'true'))
+ continue
+ else:
+ if var.get(u't').callprop(u'isIfStatement', var.get(u'node')):
+ var.put(u'consequent', (var.get(u'convert')(Js([var.get(u'node').get(u'consequent')])) if var.get(u'node').get(u'consequent') else var.get(u'scope').callprop(u'buildUndefinedNode')))
+ var.put(u'alternate', (var.get(u'convert')(Js([var.get(u'node').get(u'alternate')])) if var.get(u'node').get(u'alternate') else var.get(u'scope').callprop(u'buildUndefinedNode')))
+ if (var.get(u'consequent').neg() or var.get(u'alternate').neg()):
+ return var.put(u'bailed', var.get(u'true'))
+ var.get(u'exprs').callprop(u'push', var.get(u't').callprop(u'conditionalExpression', var.get(u'node').get(u'test'), var.get(u'consequent'), var.get(u'alternate')))
+ else:
+ if var.get(u't').callprop(u'isBlockStatement', var.get(u'node')):
+ var.get(u'exprs').callprop(u'push', var.get(u'convert')(var.get(u'node').get(u'body')))
+ else:
+ if var.get(u't').callprop(u'isEmptyStatement', var.get(u'node')):
+ var.put(u'ensureLastUndefined', var.get(u'true'))
+ continue
+ else:
+ return var.put(u'bailed', var.get(u'true'))
+ var.put(u'ensureLastUndefined', Js(False))
+
+ if (var.get(u'ensureLastUndefined') or PyJsStrictEq(var.get(u'exprs').get(u'length'),Js(0.0))):
+ var.get(u'exprs').callprop(u'push', var.get(u'scope').callprop(u'buildUndefinedNode'))
+ if PyJsStrictEq(var.get(u'exprs').get(u'length'),Js(1.0)):
+ return var.get(u'exprs').get(u'0')
+ else:
+ return var.get(u't').callprop(u'sequenceExpression', var.get(u'exprs'))
+ PyJsHoisted_convert_.func_name = u'convert'
+ var.put(u'convert', PyJsHoisted_convert_)
+ if (var.get(u'nodes').neg() or var.get(u'nodes').get(u'length').neg()):
+ return var.get('undefined')
+ var.put(u'declars', Js([]))
+ var.put(u'bailed', Js(False))
+ var.put(u'result', var.get(u'convert')(var.get(u'nodes')))
+ if var.get(u'bailed'):
+ return var.get('undefined')
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else (var.get(u'node').get(u'key') or var.get(u'node').get(u'property'))))
+ if var.get(u'node').get(u'computed').neg():
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'key')):
+ var.put(u'key', var.get(u't').callprop(u'stringLiteral', var.get(u'key').get(u'name')))
+ return var.get(u'key')
+ PyJsHoisted_toComputedKey_.func_name = u'toComputedKey'
+ var.put(u'toComputedKey', PyJsHoisted_toComputedKey_)
+ @Js
+ def PyJsHoisted_toBindingIdentifierName_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ var.put(u'name', var.get(u'toIdentifier')(var.get(u'name')))
+ if (PyJsStrictEq(var.get(u'name'),Js(u'eval')) or PyJsStrictEq(var.get(u'name'),Js(u'arguments'))):
+ var.put(u'name', (Js(u'_')+var.get(u'name')))
+ return var.get(u'name')
+ PyJsHoisted_toBindingIdentifierName_.func_name = u'toBindingIdentifierName'
+ var.put(u'toBindingIdentifierName', PyJsHoisted_toBindingIdentifierName_)
+ @Js
+ def PyJsHoisted_toBlock_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'parent'])
+ if var.get(u't').callprop(u'isBlockStatement', var.get(u'node')):
+ return var.get(u'node')
+ if var.get(u't').callprop(u'isEmptyStatement', var.get(u'node')):
+ var.put(u'node', Js([]))
+ if var.get(u'Array').callprop(u'isArray', var.get(u'node')).neg():
+ if var.get(u't').callprop(u'isStatement', var.get(u'node')).neg():
+ if var.get(u't').callprop(u'isFunction', var.get(u'parent')):
+ var.put(u'node', var.get(u't').callprop(u'returnStatement', var.get(u'node')))
+ else:
+ var.put(u'node', var.get(u't').callprop(u'expressionStatement', var.get(u'node')))
+ var.put(u'node', Js([var.get(u'node')]))
+ return var.get(u't').callprop(u'blockStatement', var.get(u'node'))
+ PyJsHoisted_toBlock_.func_name = u'toBlock'
+ var.put(u'toBlock', PyJsHoisted_toBlock_)
+ @Js
+ def PyJsHoisted_toStatement_(node, ignore, this, arguments, var=var):
+ var = Scope({u'node':node, u'ignore':ignore, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'ignore', u'mustHaveId', u'newType'])
+ if var.get(u't').callprop(u'isStatement', var.get(u'node')):
+ return var.get(u'node')
+ var.put(u'mustHaveId', Js(False))
+ var.put(u'newType', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u't').callprop(u'isClass', var.get(u'node')):
+ var.put(u'mustHaveId', var.get(u'true'))
+ var.put(u'newType', Js(u'ClassDeclaration'))
+ else:
+ if var.get(u't').callprop(u'isFunction', var.get(u'node')):
+ var.put(u'mustHaveId', var.get(u'true'))
+ var.put(u'newType', Js(u'FunctionDeclaration'))
+ else:
+ if var.get(u't').callprop(u'isAssignmentExpression', var.get(u'node')):
+ return var.get(u't').callprop(u'expressionStatement', var.get(u'node'))
+ if (var.get(u'mustHaveId') and var.get(u'node').get(u'id').neg()):
+ var.put(u'newType', Js(False))
+ if var.get(u'newType').neg():
+ if var.get(u'ignore'):
+ return Js(False)
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create(((Js(u'cannot turn ')+var.get(u'node').get(u'type'))+Js(u' to a statement'))))
+ raise PyJsTempException
+ var.get(u'node').put(u'type', var.get(u'newType'))
+ return var.get(u'node')
+ PyJsHoisted_toStatement_.func_name = u'toStatement'
+ var.put(u'toStatement', PyJsHoisted_toStatement_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2215_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2215_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_toIdentifier_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ var.put(u'name', (var.get(u'name')+Js(u'')))
+ var.put(u'name', var.get(u'name').callprop(u'replace', JsRegExp(u'/[^a-zA-Z0-9$_]/g'), Js(u'-')))
+ var.put(u'name', var.get(u'name').callprop(u'replace', JsRegExp(u'/^[-0-9]+/'), Js(u'')))
+ @Js
+ def PyJs_anonymous_2218_(match, c, this, arguments, var=var):
+ var = Scope({u'this':this, u'c':c, u'arguments':arguments, u'match':match}, var)
+ var.registers([u'c', u'match'])
+ return (var.get(u'c').callprop(u'toUpperCase') if var.get(u'c') else Js(u''))
+ PyJs_anonymous_2218_._set_name(u'anonymous')
+ var.put(u'name', var.get(u'name').callprop(u'replace', JsRegExp(u'/[-\\s]+(.)?/g'), PyJs_anonymous_2218_))
+ if var.get(u't').callprop(u'isValidIdentifier', var.get(u'name')).neg():
+ var.put(u'name', (Js(u'_')+var.get(u'name')))
+ return (var.get(u'name') or Js(u'_'))
+ PyJsHoisted_toIdentifier_.func_name = u'toIdentifier'
+ var.put(u'toIdentifier', PyJsHoisted_toIdentifier_)
+ @Js
+ def PyJsHoisted_toKeyAlias_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'alias', u'key'])
+ var.put(u'key', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else var.get(u'node').get(u'key')))
+ var.put(u'alias', PyJsComma(Js(0.0), Js(None)))
+ if PyJsStrictEq(var.get(u'node').get(u'kind'),Js(u'method')):
+ return (var.get(u'toKeyAlias').callprop(u'increment')+Js(u''))
+ else:
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'key')):
+ var.put(u'alias', var.get(u'key').get(u'name'))
+ else:
+ if var.get(u't').callprop(u'isStringLiteral', var.get(u'key')):
+ var.put(u'alias', PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'key').get(u'value')))
+ else:
+ var.put(u'alias', PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u't').callprop(u'removePropertiesDeep', var.get(u't').callprop(u'cloneDeep', var.get(u'key')))))
+ if var.get(u'node').get(u'computed'):
+ var.put(u'alias', ((Js(u'[')+var.get(u'alias'))+Js(u']')))
+ if var.get(u'node').get(u'static'):
+ var.put(u'alias', (Js(u'static:')+var.get(u'alias')))
+ return var.get(u'alias')
+ PyJsHoisted_toKeyAlias_.func_name = u'toKeyAlias'
+ var.put(u'toKeyAlias', PyJsHoisted_toKeyAlias_)
+ @Js
+ def PyJsHoisted_valueToNode_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'pattern', u'value', u'flags', u'nodeKey', u'key', u'props'])
+ if PyJsStrictEq(var.get(u'value'),var.get(u'undefined')):
+ return var.get(u't').callprop(u'identifier', Js(u'undefined'))
+ if (PyJsStrictEq(var.get(u'value'),var.get(u'true')) or PyJsStrictEq(var.get(u'value'),Js(False))):
+ return var.get(u't').callprop(u'booleanLiteral', var.get(u'value'))
+ if PyJsStrictEq(var.get(u'value'),var.get(u"null")):
+ return var.get(u't').callprop(u'nullLiteral')
+ if PyJsComma(Js(0.0),var.get(u'_isString2').get(u'default'))(var.get(u'value')):
+ return var.get(u't').callprop(u'stringLiteral', var.get(u'value'))
+ if PyJsComma(Js(0.0),var.get(u'_isNumber2').get(u'default'))(var.get(u'value')):
+ return var.get(u't').callprop(u'numericLiteral', var.get(u'value'))
+ if PyJsComma(Js(0.0),var.get(u'_isRegExp2').get(u'default'))(var.get(u'value')):
+ var.put(u'pattern', var.get(u'value').get(u'source'))
+ var.put(u'flags', var.get(u'value').callprop(u'toString').callprop(u'match', JsRegExp(u'/\\/([a-z]+|)$/')).get(u'1'))
+ return var.get(u't').callprop(u'regExpLiteral', var.get(u'pattern'), var.get(u'flags'))
+ if var.get(u'Array').callprop(u'isArray', var.get(u'value')):
+ return var.get(u't').callprop(u'arrayExpression', var.get(u'value').callprop(u'map', var.get(u't').get(u'valueToNode')))
+ if PyJsComma(Js(0.0),var.get(u'_isPlainObject2').get(u'default'))(var.get(u'value')):
+ var.put(u'props', Js([]))
+ for PyJsTemp in var.get(u'value'):
+ var.put(u'key', PyJsTemp)
+ var.put(u'nodeKey', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u't').callprop(u'isValidIdentifier', var.get(u'key')):
+ var.put(u'nodeKey', var.get(u't').callprop(u'identifier', var.get(u'key')))
+ else:
+ var.put(u'nodeKey', var.get(u't').callprop(u'stringLiteral', var.get(u'key')))
+ var.get(u'props').callprop(u'push', var.get(u't').callprop(u'objectProperty', var.get(u'nodeKey'), var.get(u't').callprop(u'valueToNode', var.get(u'value').get(var.get(u'key')))))
+ return var.get(u't').callprop(u'objectExpression', var.get(u'props'))
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u"don't know how to turn this value into a node")))
+ raise PyJsTempException
+ PyJsHoisted_valueToNode_.func_name = u'valueToNode'
+ var.put(u'valueToNode', PyJsHoisted_valueToNode_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_maxSafeInteger', var.get(u'require')(Js(u'babel-runtime/core-js/number/max-safe-integer')))
+ var.put(u'_maxSafeInteger2', var.get(u'_interopRequireDefault')(var.get(u'_maxSafeInteger')))
+ var.put(u'_stringify', var.get(u'require')(Js(u'babel-runtime/core-js/json/stringify')))
+ var.put(u'_stringify2', var.get(u'_interopRequireDefault')(var.get(u'_stringify')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'toComputedKey', var.get(u'toComputedKey'))
+ var.get(u'exports').put(u'toSequenceExpression', var.get(u'toSequenceExpression'))
+ var.get(u'exports').put(u'toKeyAlias', var.get(u'toKeyAlias'))
+ var.get(u'exports').put(u'toIdentifier', var.get(u'toIdentifier'))
+ var.get(u'exports').put(u'toBindingIdentifierName', var.get(u'toBindingIdentifierName'))
+ var.get(u'exports').put(u'toStatement', var.get(u'toStatement'))
+ var.get(u'exports').put(u'toExpression', var.get(u'toExpression'))
+ var.get(u'exports').put(u'toBlock', var.get(u'toBlock'))
+ var.get(u'exports').put(u'valueToNode', var.get(u'valueToNode'))
+ var.put(u'_isPlainObject', var.get(u'require')(Js(u'lodash/isPlainObject')))
+ var.put(u'_isPlainObject2', var.get(u'_interopRequireDefault')(var.get(u'_isPlainObject')))
+ var.put(u'_isNumber', var.get(u'require')(Js(u'lodash/isNumber')))
+ var.put(u'_isNumber2', var.get(u'_interopRequireDefault')(var.get(u'_isNumber')))
+ var.put(u'_isRegExp', var.get(u'require')(Js(u'lodash/isRegExp')))
+ var.put(u'_isRegExp2', var.get(u'_interopRequireDefault')(var.get(u'_isRegExp')))
+ var.put(u'_isString', var.get(u'require')(Js(u'lodash/isString')))
+ var.put(u'_isString2', var.get(u'_interopRequireDefault')(var.get(u'_isString')))
+ var.put(u'_index', var.get(u'require')(Js(u'./index')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_index')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ var.get(u'toKeyAlias').put(u'uid', Js(0.0))
+ @Js
+ def PyJs_anonymous_2217_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if (var.get(u'toKeyAlias').get(u'uid')>=var.get(u'_maxSafeInteger2').get(u'default')):
+ return var.get(u'toKeyAlias').put(u'uid', Js(0.0))
+ else:
+ return (var.get(u'toKeyAlias').put(u'uid',Js(var.get(u'toKeyAlias').get(u'uid').to_number())+Js(1))-Js(1))
+ PyJs_anonymous_2217_._set_name(u'anonymous')
+ var.get(u'toKeyAlias').put(u'increment', PyJs_anonymous_2217_)
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_2213_._set_name(u'anonymous')
+PyJs_Object_2219_ = Js({u'./index':Js(258.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/core-js/json/stringify':Js(97.0),u'babel-runtime/core-js/number/max-safe-integer':Js(99.0),u'lodash/isNumber':Js(466.0),u'lodash/isPlainObject':Js(469.0),u'lodash/isRegExp':Js(470.0),u'lodash/isString':Js(471.0)})
+@Js
+def PyJs_anonymous_2220_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_constants', u'_interopRequireWildcard', u'_index', u'require', u'module', u't', u'_index2', u'_index3', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2221_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2221_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2222_ = Js({})
+ var.put(u'newObj', PyJs_Object_2222_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ Js(u'use strict')
+ var.put(u'_index', var.get(u'require')(Js(u'../index')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_index')))
+ var.put(u'_constants', var.get(u'require')(Js(u'../constants')))
+ var.put(u'_index2', var.get(u'require')(Js(u'./index')))
+ var.put(u'_index3', var.get(u'_interopRequireDefault')(var.get(u'_index2')))
+ pass
+ pass
+ PyJs_Object_2225_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeOrValueType'))(Js(u'null'), Js(u'Expression'), Js(u'SpreadElement')))),u'default':Js([])})
+ PyJs_Object_2224_ = Js({u'elements':PyJs_Object_2225_})
+ PyJs_Object_2223_ = Js({u'fields':PyJs_Object_2224_,u'visitor':Js([Js(u'elements')]),u'aliases':Js([Js(u'Expression')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ArrayExpression'), PyJs_Object_2223_)
+ PyJs_Object_2228_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'string'))})
+ PyJs_Object_2229_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'LVal'))})
+ PyJs_Object_2230_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2227_ = Js({u'operator':PyJs_Object_2228_,u'left':PyJs_Object_2229_,u'right':PyJs_Object_2230_})
+ PyJs_Object_2226_ = Js({u'fields':PyJs_Object_2227_,u'builder':Js([Js(u'operator'), Js(u'left'), Js(u'right')]),u'visitor':Js([Js(u'left'), Js(u'right')]),u'aliases':Js([Js(u'Expression')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'AssignmentExpression'), PyJs_Object_2226_)
+ PyJs_Object_2233_ = Js({u'validate':var.get(u'_index2').get(u'assertOneOf').callprop(u'apply', var.get(u'undefined'), var.get(u'_constants').get(u'BINARY_OPERATORS'))})
+ PyJs_Object_2234_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2235_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2232_ = Js({u'operator':PyJs_Object_2233_,u'left':PyJs_Object_2234_,u'right':PyJs_Object_2235_})
+ PyJs_Object_2231_ = Js({u'builder':Js([Js(u'operator'), Js(u'left'), Js(u'right')]),u'fields':PyJs_Object_2232_,u'visitor':Js([Js(u'left'), Js(u'right')]),u'aliases':Js([Js(u'Binary'), Js(u'Expression')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'BinaryExpression'), PyJs_Object_2231_)
+ PyJs_Object_2238_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'DirectiveLiteral'))})
+ PyJs_Object_2237_ = Js({u'value':PyJs_Object_2238_})
+ PyJs_Object_2236_ = Js({u'visitor':Js([Js(u'value')]),u'fields':PyJs_Object_2237_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'Directive'), PyJs_Object_2236_)
+ PyJs_Object_2241_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'string'))})
+ PyJs_Object_2240_ = Js({u'value':PyJs_Object_2241_})
+ PyJs_Object_2239_ = Js({u'builder':Js([Js(u'value')]),u'fields':PyJs_Object_2240_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'DirectiveLiteral'), PyJs_Object_2239_)
+ PyJs_Object_2244_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Directive')))),u'default':Js([])})
+ PyJs_Object_2245_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Statement'))))})
+ PyJs_Object_2243_ = Js({u'directives':PyJs_Object_2244_,u'body':PyJs_Object_2245_})
+ PyJs_Object_2242_ = Js({u'builder':Js([Js(u'body'), Js(u'directives')]),u'visitor':Js([Js(u'directives'), Js(u'body')]),u'fields':PyJs_Object_2243_,u'aliases':Js([Js(u'Scopable'), Js(u'BlockParent'), Js(u'Block'), Js(u'Statement')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'BlockStatement'), PyJs_Object_2242_)
+ PyJs_Object_2248_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Identifier')),u'optional':var.get(u'true')})
+ PyJs_Object_2247_ = Js({u'label':PyJs_Object_2248_})
+ PyJs_Object_2246_ = Js({u'visitor':Js([Js(u'label')]),u'fields':PyJs_Object_2247_,u'aliases':Js([Js(u'Statement'), Js(u'Terminatorless'), Js(u'CompletionStatement')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'BreakStatement'), PyJs_Object_2246_)
+ PyJs_Object_2251_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2252_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'), Js(u'SpreadElement'))))})
+ PyJs_Object_2250_ = Js({u'callee':PyJs_Object_2251_,u'arguments':PyJs_Object_2252_})
+ PyJs_Object_2249_ = Js({u'visitor':Js([Js(u'callee'), Js(u'arguments')]),u'fields':PyJs_Object_2250_,u'aliases':Js([Js(u'Expression')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'CallExpression'), PyJs_Object_2249_)
+ PyJs_Object_2255_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2256_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'BlockStatement'))})
+ PyJs_Object_2254_ = Js({u'param':PyJs_Object_2255_,u'body':PyJs_Object_2256_})
+ PyJs_Object_2253_ = Js({u'visitor':Js([Js(u'param'), Js(u'body')]),u'fields':PyJs_Object_2254_,u'aliases':Js([Js(u'Scopable')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'CatchClause'), PyJs_Object_2253_)
+ PyJs_Object_2259_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2260_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2261_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2258_ = Js({u'test':PyJs_Object_2259_,u'consequent':PyJs_Object_2260_,u'alternate':PyJs_Object_2261_})
+ PyJs_Object_2257_ = Js({u'visitor':Js([Js(u'test'), Js(u'consequent'), Js(u'alternate')]),u'fields':PyJs_Object_2258_,u'aliases':Js([Js(u'Expression'), Js(u'Conditional')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ConditionalExpression'), PyJs_Object_2257_)
+ PyJs_Object_2264_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Identifier')),u'optional':var.get(u'true')})
+ PyJs_Object_2263_ = Js({u'label':PyJs_Object_2264_})
+ PyJs_Object_2262_ = Js({u'visitor':Js([Js(u'label')]),u'fields':PyJs_Object_2263_,u'aliases':Js([Js(u'Statement'), Js(u'Terminatorless'), Js(u'CompletionStatement')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ContinueStatement'), PyJs_Object_2262_)
+ PyJs_Object_2265_ = Js({u'aliases':Js([Js(u'Statement')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'DebuggerStatement'), PyJs_Object_2265_)
+ PyJs_Object_2268_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2269_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Statement'))})
+ PyJs_Object_2267_ = Js({u'test':PyJs_Object_2268_,u'body':PyJs_Object_2269_})
+ PyJs_Object_2266_ = Js({u'visitor':Js([Js(u'test'), Js(u'body')]),u'fields':PyJs_Object_2267_,u'aliases':Js([Js(u'Statement'), Js(u'BlockParent'), Js(u'Loop'), Js(u'While'), Js(u'Scopable')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'DoWhileStatement'), PyJs_Object_2266_)
+ PyJs_Object_2270_ = Js({u'aliases':Js([Js(u'Statement')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'EmptyStatement'), PyJs_Object_2270_)
+ PyJs_Object_2273_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2272_ = Js({u'expression':PyJs_Object_2273_})
+ PyJs_Object_2271_ = Js({u'visitor':Js([Js(u'expression')]),u'fields':PyJs_Object_2272_,u'aliases':Js([Js(u'Statement'), Js(u'ExpressionWrapper')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ExpressionStatement'), PyJs_Object_2271_)
+ PyJs_Object_2276_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Program'))})
+ PyJs_Object_2275_ = Js({u'program':PyJs_Object_2276_})
+ PyJs_Object_2274_ = Js({u'builder':Js([Js(u'program'), Js(u'comments'), Js(u'tokens')]),u'visitor':Js([Js(u'program')]),u'fields':PyJs_Object_2275_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'File'), PyJs_Object_2274_)
+ PyJs_Object_2279_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'VariableDeclaration'), Js(u'LVal'))})
+ PyJs_Object_2280_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2281_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Statement'))})
+ PyJs_Object_2278_ = Js({u'left':PyJs_Object_2279_,u'right':PyJs_Object_2280_,u'body':PyJs_Object_2281_})
+ PyJs_Object_2277_ = Js({u'visitor':Js([Js(u'left'), Js(u'right'), Js(u'body')]),u'aliases':Js([Js(u'Scopable'), Js(u'Statement'), Js(u'For'), Js(u'BlockParent'), Js(u'Loop'), Js(u'ForXStatement')]),u'fields':PyJs_Object_2278_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ForInStatement'), PyJs_Object_2277_)
+ PyJs_Object_2284_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'VariableDeclaration'), Js(u'Expression')),u'optional':var.get(u'true')})
+ PyJs_Object_2285_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression')),u'optional':var.get(u'true')})
+ PyJs_Object_2286_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression')),u'optional':var.get(u'true')})
+ PyJs_Object_2287_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Statement'))})
+ PyJs_Object_2283_ = Js({u'init':PyJs_Object_2284_,u'test':PyJs_Object_2285_,u'update':PyJs_Object_2286_,u'body':PyJs_Object_2287_})
+ PyJs_Object_2282_ = Js({u'visitor':Js([Js(u'init'), Js(u'test'), Js(u'update'), Js(u'body')]),u'aliases':Js([Js(u'Scopable'), Js(u'Statement'), Js(u'For'), Js(u'BlockParent'), Js(u'Loop')]),u'fields':PyJs_Object_2283_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ForStatement'), PyJs_Object_2282_)
+ PyJs_Object_2290_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2291_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'LVal'))))})
+ PyJs_Object_2292_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'BlockStatement'))})
+ PyJs_Object_2293_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2294_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2289_ = Js({u'id':PyJs_Object_2290_,u'params':PyJs_Object_2291_,u'body':PyJs_Object_2292_,u'generator':PyJs_Object_2293_,u'async':PyJs_Object_2294_})
+ PyJs_Object_2288_ = Js({u'builder':Js([Js(u'id'), Js(u'params'), Js(u'body'), Js(u'generator'), Js(u'async')]),u'visitor':Js([Js(u'id'), Js(u'params'), Js(u'body'), Js(u'returnType'), Js(u'typeParameters')]),u'fields':PyJs_Object_2289_,u'aliases':Js([Js(u'Scopable'), Js(u'Function'), Js(u'BlockParent'), Js(u'FunctionParent'), Js(u'Statement'), Js(u'Pureish'), Js(u'Declaration')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'FunctionDeclaration'), PyJs_Object_2288_)
+ PyJs_Object_2297_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Identifier')),u'optional':var.get(u'true')})
+ PyJs_Object_2298_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'LVal'))))})
+ PyJs_Object_2299_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'BlockStatement'))})
+ PyJs_Object_2300_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2301_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2296_ = Js({u'id':PyJs_Object_2297_,u'params':PyJs_Object_2298_,u'body':PyJs_Object_2299_,u'generator':PyJs_Object_2300_,u'async':PyJs_Object_2301_})
+ PyJs_Object_2295_ = Js({u'inherits':Js(u'FunctionDeclaration'),u'aliases':Js([Js(u'Scopable'), Js(u'Function'), Js(u'BlockParent'), Js(u'FunctionParent'), Js(u'Expression'), Js(u'Pureish')]),u'fields':PyJs_Object_2296_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'FunctionExpression'), PyJs_Object_2295_)
+ @Js
+ def PyJs_validate_2305_(node, key, val, this, arguments, var=var):
+ var = Scope({u'node':node, u'val':val, u'this':this, u'arguments':arguments, u'key':key, u'validate':PyJs_validate_2305_}, var)
+ var.registers([u'node', u'val', u'key'])
+ if var.get(u't').callprop(u'isValidIdentifier', var.get(u'val')).neg():
+ pass
+ PyJs_validate_2305_._set_name(u'validate')
+ PyJs_Object_2304_ = Js({u'validate':PyJs_validate_2305_})
+ PyJs_Object_2306_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Decorator'))))})
+ PyJs_Object_2303_ = Js({u'name':PyJs_Object_2304_,u'decorators':PyJs_Object_2306_})
+ PyJs_Object_2302_ = Js({u'builder':Js([Js(u'name')]),u'visitor':Js([Js(u'typeAnnotation')]),u'aliases':Js([Js(u'Expression'), Js(u'LVal')]),u'fields':PyJs_Object_2303_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'Identifier'), PyJs_Object_2302_)
+ PyJs_Object_2309_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2310_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Statement'))})
+ PyJs_Object_2311_ = Js({u'optional':var.get(u'true'),u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Statement'))})
+ PyJs_Object_2308_ = Js({u'test':PyJs_Object_2309_,u'consequent':PyJs_Object_2310_,u'alternate':PyJs_Object_2311_})
+ PyJs_Object_2307_ = Js({u'visitor':Js([Js(u'test'), Js(u'consequent'), Js(u'alternate')]),u'aliases':Js([Js(u'Statement'), Js(u'Conditional')]),u'fields':PyJs_Object_2308_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'IfStatement'), PyJs_Object_2307_)
+ PyJs_Object_2314_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2315_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Statement'))})
+ PyJs_Object_2313_ = Js({u'label':PyJs_Object_2314_,u'body':PyJs_Object_2315_})
+ PyJs_Object_2312_ = Js({u'visitor':Js([Js(u'label'), Js(u'body')]),u'aliases':Js([Js(u'Statement')]),u'fields':PyJs_Object_2313_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'LabeledStatement'), PyJs_Object_2312_)
+ PyJs_Object_2318_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'string'))})
+ PyJs_Object_2317_ = Js({u'value':PyJs_Object_2318_})
+ PyJs_Object_2316_ = Js({u'builder':Js([Js(u'value')]),u'fields':PyJs_Object_2317_,u'aliases':Js([Js(u'Expression'), Js(u'Pureish'), Js(u'Literal'), Js(u'Immutable')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'StringLiteral'), PyJs_Object_2316_)
+ PyJs_Object_2321_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'number'))})
+ PyJs_Object_2320_ = Js({u'value':PyJs_Object_2321_})
+ PyJs_Object_2319_ = Js({u'builder':Js([Js(u'value')]),u'deprecatedAlias':Js(u'NumberLiteral'),u'fields':PyJs_Object_2320_,u'aliases':Js([Js(u'Expression'), Js(u'Pureish'), Js(u'Literal'), Js(u'Immutable')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'NumericLiteral'), PyJs_Object_2319_)
+ PyJs_Object_2322_ = Js({u'aliases':Js([Js(u'Expression'), Js(u'Pureish'), Js(u'Literal'), Js(u'Immutable')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'NullLiteral'), PyJs_Object_2322_)
+ PyJs_Object_2325_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2324_ = Js({u'value':PyJs_Object_2325_})
+ PyJs_Object_2323_ = Js({u'builder':Js([Js(u'value')]),u'fields':PyJs_Object_2324_,u'aliases':Js([Js(u'Expression'), Js(u'Pureish'), Js(u'Literal'), Js(u'Immutable')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'BooleanLiteral'), PyJs_Object_2323_)
+ PyJs_Object_2328_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'string'))})
+ PyJs_Object_2329_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'string')),u'default':Js(u'')})
+ PyJs_Object_2327_ = Js({u'pattern':PyJs_Object_2328_,u'flags':PyJs_Object_2329_})
+ PyJs_Object_2326_ = Js({u'builder':Js([Js(u'pattern'), Js(u'flags')]),u'deprecatedAlias':Js(u'RegexLiteral'),u'aliases':Js([Js(u'Expression'), Js(u'Literal')]),u'fields':PyJs_Object_2327_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'RegExpLiteral'), PyJs_Object_2326_)
+ PyJs_Object_2332_ = Js({u'validate':var.get(u'_index2').get(u'assertOneOf').callprop(u'apply', var.get(u'undefined'), var.get(u'_constants').get(u'LOGICAL_OPERATORS'))})
+ PyJs_Object_2333_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2334_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2331_ = Js({u'operator':PyJs_Object_2332_,u'left':PyJs_Object_2333_,u'right':PyJs_Object_2334_})
+ PyJs_Object_2330_ = Js({u'builder':Js([Js(u'operator'), Js(u'left'), Js(u'right')]),u'visitor':Js([Js(u'left'), Js(u'right')]),u'aliases':Js([Js(u'Binary'), Js(u'Expression')]),u'fields':PyJs_Object_2331_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'LogicalExpression'), PyJs_Object_2330_)
+ PyJs_Object_2337_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ @Js
+ def PyJs_validate_2339_(node, key, val, this, arguments, var=var):
+ var = Scope({u'node':node, u'val':val, u'this':this, u'arguments':arguments, u'key':key, u'validate':PyJs_validate_2339_}, var)
+ var.registers([u'node', u'expectedType', u'val', u'key'])
+ var.put(u'expectedType', (Js(u'Expression') if var.get(u'node').get(u'computed') else Js(u'Identifier')))
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(var.get(u'expectedType'))(var.get(u'node'), var.get(u'key'), var.get(u'val'))
+ PyJs_validate_2339_._set_name(u'validate')
+ PyJs_Object_2338_ = Js({u'validate':PyJs_validate_2339_})
+ PyJs_Object_2340_ = Js({u'default':Js(False)})
+ PyJs_Object_2336_ = Js({u'object':PyJs_Object_2337_,u'property':PyJs_Object_2338_,u'computed':PyJs_Object_2340_})
+ PyJs_Object_2335_ = Js({u'builder':Js([Js(u'object'), Js(u'property'), Js(u'computed')]),u'visitor':Js([Js(u'object'), Js(u'property')]),u'aliases':Js([Js(u'Expression'), Js(u'LVal')]),u'fields':PyJs_Object_2336_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'MemberExpression'), PyJs_Object_2335_)
+ PyJs_Object_2343_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2344_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'), Js(u'SpreadElement'))))})
+ PyJs_Object_2342_ = Js({u'callee':PyJs_Object_2343_,u'arguments':PyJs_Object_2344_})
+ PyJs_Object_2341_ = Js({u'visitor':Js([Js(u'callee'), Js(u'arguments')]),u'aliases':Js([Js(u'Expression')]),u'fields':PyJs_Object_2342_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'NewExpression'), PyJs_Object_2341_)
+ PyJs_Object_2347_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Directive')))),u'default':Js([])})
+ PyJs_Object_2348_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Statement'))))})
+ PyJs_Object_2346_ = Js({u'directives':PyJs_Object_2347_,u'body':PyJs_Object_2348_})
+ PyJs_Object_2345_ = Js({u'visitor':Js([Js(u'directives'), Js(u'body')]),u'builder':Js([Js(u'body'), Js(u'directives')]),u'fields':PyJs_Object_2346_,u'aliases':Js([Js(u'Scopable'), Js(u'BlockParent'), Js(u'Block'), Js(u'FunctionParent')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'Program'), PyJs_Object_2345_)
+ PyJs_Object_2351_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'ObjectMethod'), Js(u'ObjectProperty'), Js(u'SpreadProperty'))))})
+ PyJs_Object_2350_ = Js({u'properties':PyJs_Object_2351_})
+ PyJs_Object_2349_ = Js({u'visitor':Js([Js(u'properties')]),u'aliases':Js([Js(u'Expression')]),u'fields':PyJs_Object_2350_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ObjectExpression'), PyJs_Object_2349_)
+ PyJs_Object_2354_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'string')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertOneOf'))(Js(u'method'), Js(u'get'), Js(u'set'))),u'default':Js(u'method')})
+ PyJs_Object_2355_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean')),u'default':Js(False)})
+ @Js
+ def PyJs_validate_2357_(node, key, val, this, arguments, var=var):
+ var = Scope({u'node':node, u'val':val, u'this':this, u'arguments':arguments, u'key':key, u'validate':PyJs_validate_2357_}, var)
+ var.registers([u'node', u'val', u'key', u'expectedTypes'])
+ var.put(u'expectedTypes', (Js([Js(u'Expression')]) if var.get(u'node').get(u'computed') else Js([Js(u'Identifier'), Js(u'StringLiteral'), Js(u'NumericLiteral')])))
+ var.get(u'_index2').get(u'assertNodeType').callprop(u'apply', var.get(u'undefined'), var.get(u'expectedTypes'))(var.get(u'node'), var.get(u'key'), var.get(u'val'))
+ PyJs_validate_2357_._set_name(u'validate')
+ PyJs_Object_2356_ = Js({u'validate':PyJs_validate_2357_})
+ PyJs_Object_2358_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Decorator'))))})
+ PyJs_Object_2359_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'BlockStatement'))})
+ PyJs_Object_2360_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2361_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2353_ = Js({u'kind':PyJs_Object_2354_,u'computed':PyJs_Object_2355_,u'key':PyJs_Object_2356_,u'decorators':PyJs_Object_2358_,u'body':PyJs_Object_2359_,u'generator':PyJs_Object_2360_,u'async':PyJs_Object_2361_})
+ PyJs_Object_2352_ = Js({u'builder':Js([Js(u'kind'), Js(u'key'), Js(u'params'), Js(u'body'), Js(u'computed')]),u'fields':PyJs_Object_2353_,u'visitor':Js([Js(u'key'), Js(u'params'), Js(u'body'), Js(u'decorators'), Js(u'returnType'), Js(u'typeParameters')]),u'aliases':Js([Js(u'UserWhitespacable'), Js(u'Function'), Js(u'Scopable'), Js(u'BlockParent'), Js(u'FunctionParent'), Js(u'Method'), Js(u'ObjectMember')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ObjectMethod'), PyJs_Object_2352_)
+ PyJs_Object_2364_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean')),u'default':Js(False)})
+ @Js
+ def PyJs_validate_2366_(node, key, val, this, arguments, var=var):
+ var = Scope({u'node':node, u'val':val, u'this':this, u'arguments':arguments, u'key':key, u'validate':PyJs_validate_2366_}, var)
+ var.registers([u'node', u'val', u'key', u'expectedTypes'])
+ var.put(u'expectedTypes', (Js([Js(u'Expression')]) if var.get(u'node').get(u'computed') else Js([Js(u'Identifier'), Js(u'StringLiteral'), Js(u'NumericLiteral')])))
+ var.get(u'_index2').get(u'assertNodeType').callprop(u'apply', var.get(u'undefined'), var.get(u'expectedTypes'))(var.get(u'node'), var.get(u'key'), var.get(u'val'))
+ PyJs_validate_2366_._set_name(u'validate')
+ PyJs_Object_2365_ = Js({u'validate':PyJs_validate_2366_})
+ PyJs_Object_2367_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2368_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'boolean')),u'default':Js(False)})
+ PyJs_Object_2369_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Decorator')))),u'optional':var.get(u'true')})
+ PyJs_Object_2363_ = Js({u'computed':PyJs_Object_2364_,u'key':PyJs_Object_2365_,u'value':PyJs_Object_2367_,u'shorthand':PyJs_Object_2368_,u'decorators':PyJs_Object_2369_})
+ PyJs_Object_2362_ = Js({u'builder':Js([Js(u'key'), Js(u'value'), Js(u'computed'), Js(u'shorthand'), Js(u'decorators')]),u'fields':PyJs_Object_2363_,u'visitor':Js([Js(u'key'), Js(u'value'), Js(u'decorators')]),u'aliases':Js([Js(u'UserWhitespacable'), Js(u'Property'), Js(u'ObjectMember')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ObjectProperty'), PyJs_Object_2362_)
+ PyJs_Object_2372_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'LVal'))})
+ PyJs_Object_2373_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Decorator'))))})
+ PyJs_Object_2371_ = Js({u'argument':PyJs_Object_2372_,u'decorators':PyJs_Object_2373_})
+ PyJs_Object_2370_ = Js({u'visitor':Js([Js(u'argument'), Js(u'typeAnnotation')]),u'aliases':Js([Js(u'LVal')]),u'fields':PyJs_Object_2371_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'RestElement'), PyJs_Object_2370_)
+ PyJs_Object_2376_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression')),u'optional':var.get(u'true')})
+ PyJs_Object_2375_ = Js({u'argument':PyJs_Object_2376_})
+ PyJs_Object_2374_ = Js({u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'Statement'), Js(u'Terminatorless'), Js(u'CompletionStatement')]),u'fields':PyJs_Object_2375_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ReturnStatement'), PyJs_Object_2374_)
+ PyJs_Object_2379_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))))})
+ PyJs_Object_2378_ = Js({u'expressions':PyJs_Object_2379_})
+ PyJs_Object_2377_ = Js({u'visitor':Js([Js(u'expressions')]),u'fields':PyJs_Object_2378_,u'aliases':Js([Js(u'Expression')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'SequenceExpression'), PyJs_Object_2377_)
+ PyJs_Object_2382_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression')),u'optional':var.get(u'true')})
+ PyJs_Object_2383_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Statement'))))})
+ PyJs_Object_2381_ = Js({u'test':PyJs_Object_2382_,u'consequent':PyJs_Object_2383_})
+ PyJs_Object_2380_ = Js({u'visitor':Js([Js(u'test'), Js(u'consequent')]),u'fields':PyJs_Object_2381_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'SwitchCase'), PyJs_Object_2380_)
+ PyJs_Object_2386_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2387_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'SwitchCase'))))})
+ PyJs_Object_2385_ = Js({u'discriminant':PyJs_Object_2386_,u'cases':PyJs_Object_2387_})
+ PyJs_Object_2384_ = Js({u'visitor':Js([Js(u'discriminant'), Js(u'cases')]),u'aliases':Js([Js(u'Statement'), Js(u'BlockParent'), Js(u'Scopable')]),u'fields':PyJs_Object_2385_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'SwitchStatement'), PyJs_Object_2384_)
+ PyJs_Object_2388_ = Js({u'aliases':Js([Js(u'Expression')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ThisExpression'), PyJs_Object_2388_)
+ PyJs_Object_2391_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2390_ = Js({u'argument':PyJs_Object_2391_})
+ PyJs_Object_2389_ = Js({u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'Statement'), Js(u'Terminatorless'), Js(u'CompletionStatement')]),u'fields':PyJs_Object_2390_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'ThrowStatement'), PyJs_Object_2389_)
+ PyJs_Object_2394_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'BlockStatement'))})
+ PyJs_Object_2395_ = Js({u'optional':var.get(u'true'),u'handler':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'BlockStatement'))})
+ PyJs_Object_2396_ = Js({u'optional':var.get(u'true'),u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'BlockStatement'))})
+ PyJs_Object_2393_ = Js({u'body':PyJs_Object_2394_,u'handler':PyJs_Object_2395_,u'finalizer':PyJs_Object_2396_})
+ PyJs_Object_2392_ = Js({u'visitor':Js([Js(u'block'), Js(u'handler'), Js(u'finalizer')]),u'aliases':Js([Js(u'Statement')]),u'fields':PyJs_Object_2393_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'TryStatement'), PyJs_Object_2392_)
+ PyJs_Object_2399_ = Js({u'default':var.get(u'true')})
+ PyJs_Object_2400_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2401_ = Js({u'validate':var.get(u'_index2').get(u'assertOneOf').callprop(u'apply', var.get(u'undefined'), var.get(u'_constants').get(u'UNARY_OPERATORS'))})
+ PyJs_Object_2398_ = Js({u'prefix':PyJs_Object_2399_,u'argument':PyJs_Object_2400_,u'operator':PyJs_Object_2401_})
+ PyJs_Object_2397_ = Js({u'builder':Js([Js(u'operator'), Js(u'argument'), Js(u'prefix')]),u'fields':PyJs_Object_2398_,u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'UnaryLike'), Js(u'Expression')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'UnaryExpression'), PyJs_Object_2397_)
+ PyJs_Object_2404_ = Js({u'default':Js(False)})
+ PyJs_Object_2405_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2406_ = Js({u'validate':var.get(u'_index2').get(u'assertOneOf').callprop(u'apply', var.get(u'undefined'), var.get(u'_constants').get(u'UPDATE_OPERATORS'))})
+ PyJs_Object_2403_ = Js({u'prefix':PyJs_Object_2404_,u'argument':PyJs_Object_2405_,u'operator':PyJs_Object_2406_})
+ PyJs_Object_2402_ = Js({u'builder':Js([Js(u'operator'), Js(u'argument'), Js(u'prefix')]),u'fields':PyJs_Object_2403_,u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'Expression')])})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'UpdateExpression'), PyJs_Object_2402_)
+ PyJs_Object_2409_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'string')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertOneOf'))(Js(u'var'), Js(u'let'), Js(u'const')))})
+ PyJs_Object_2410_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'VariableDeclarator'))))})
+ PyJs_Object_2408_ = Js({u'kind':PyJs_Object_2409_,u'declarations':PyJs_Object_2410_})
+ PyJs_Object_2407_ = Js({u'builder':Js([Js(u'kind'), Js(u'declarations')]),u'visitor':Js([Js(u'declarations')]),u'aliases':Js([Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2408_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'VariableDeclaration'), PyJs_Object_2407_)
+ PyJs_Object_2413_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'LVal'))})
+ PyJs_Object_2414_ = Js({u'optional':var.get(u'true'),u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2412_ = Js({u'id':PyJs_Object_2413_,u'init':PyJs_Object_2414_})
+ PyJs_Object_2411_ = Js({u'visitor':Js([Js(u'id'), Js(u'init')]),u'fields':PyJs_Object_2412_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'VariableDeclarator'), PyJs_Object_2411_)
+ PyJs_Object_2417_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2418_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'BlockStatement'), Js(u'Statement'))})
+ PyJs_Object_2416_ = Js({u'test':PyJs_Object_2417_,u'body':PyJs_Object_2418_})
+ PyJs_Object_2415_ = Js({u'visitor':Js([Js(u'test'), Js(u'body')]),u'aliases':Js([Js(u'Statement'), Js(u'BlockParent'), Js(u'Loop'), Js(u'While'), Js(u'Scopable')]),u'fields':PyJs_Object_2416_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'WhileStatement'), PyJs_Object_2415_)
+ PyJs_Object_2421_ = Js({u'object':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2422_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index2').get(u'assertNodeType'))(Js(u'BlockStatement'), Js(u'Statement'))})
+ PyJs_Object_2420_ = Js({u'object':PyJs_Object_2421_,u'body':PyJs_Object_2422_})
+ PyJs_Object_2419_ = Js({u'visitor':Js([Js(u'object'), Js(u'body')]),u'aliases':Js([Js(u'Statement')]),u'fields':PyJs_Object_2420_})
+ PyJsComma(Js(0.0),var.get(u'_index3').get(u'default'))(Js(u'WithStatement'), PyJs_Object_2419_)
+PyJs_anonymous_2220_._set_name(u'anonymous')
+PyJs_Object_2423_ = Js({u'../constants':Js(247.0),u'../index':Js(258.0),u'./index':Js(253.0)})
+@Js
+def PyJs_anonymous_2424_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_index', u'require', u'module', u'_index2', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2425_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2425_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.put(u'_index', var.get(u'require')(Js(u'./index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ pass
+ PyJs_Object_2428_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2429_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2430_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Decorator'))))})
+ PyJs_Object_2427_ = Js({u'left':PyJs_Object_2428_,u'right':PyJs_Object_2429_,u'decorators':PyJs_Object_2430_})
+ PyJs_Object_2426_ = Js({u'visitor':Js([Js(u'left'), Js(u'right')]),u'aliases':Js([Js(u'Pattern'), Js(u'LVal')]),u'fields':PyJs_Object_2427_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'AssignmentPattern'), PyJs_Object_2426_)
+ PyJs_Object_2433_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))))})
+ PyJs_Object_2434_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Decorator'))))})
+ PyJs_Object_2432_ = Js({u'elements':PyJs_Object_2433_,u'decorators':PyJs_Object_2434_})
+ PyJs_Object_2431_ = Js({u'visitor':Js([Js(u'elements'), Js(u'typeAnnotation')]),u'aliases':Js([Js(u'Pattern'), Js(u'LVal')]),u'fields':PyJs_Object_2432_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ArrayPattern'), PyJs_Object_2431_)
+ PyJs_Object_2437_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'LVal'))))})
+ PyJs_Object_2438_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'BlockStatement'), Js(u'Expression'))})
+ PyJs_Object_2439_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'boolean')),u'default':Js(False)})
+ PyJs_Object_2436_ = Js({u'params':PyJs_Object_2437_,u'body':PyJs_Object_2438_,u'async':PyJs_Object_2439_})
+ PyJs_Object_2435_ = Js({u'builder':Js([Js(u'params'), Js(u'body'), Js(u'async')]),u'visitor':Js([Js(u'params'), Js(u'body'), Js(u'returnType'), Js(u'typeParameters')]),u'aliases':Js([Js(u'Scopable'), Js(u'Function'), Js(u'BlockParent'), Js(u'FunctionParent'), Js(u'Expression'), Js(u'Pureish')]),u'fields':PyJs_Object_2436_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ArrowFunctionExpression'), PyJs_Object_2435_)
+ PyJs_Object_2442_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'ClassMethod'), Js(u'ClassProperty'))))})
+ PyJs_Object_2441_ = Js({u'body':PyJs_Object_2442_})
+ PyJs_Object_2440_ = Js({u'visitor':Js([Js(u'body')]),u'fields':PyJs_Object_2441_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ClassBody'), PyJs_Object_2440_)
+ PyJs_Object_2445_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2446_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'ClassBody'))})
+ PyJs_Object_2447_ = Js({u'optional':var.get(u'true'),u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2448_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Decorator'))))})
+ PyJs_Object_2444_ = Js({u'id':PyJs_Object_2445_,u'body':PyJs_Object_2446_,u'superClass':PyJs_Object_2447_,u'decorators':PyJs_Object_2448_})
+ PyJs_Object_2443_ = Js({u'builder':Js([Js(u'id'), Js(u'superClass'), Js(u'body'), Js(u'decorators')]),u'visitor':Js([Js(u'id'), Js(u'body'), Js(u'superClass'), Js(u'mixins'), Js(u'typeParameters'), Js(u'superTypeParameters'), Js(u'implements'), Js(u'decorators')]),u'aliases':Js([Js(u'Scopable'), Js(u'Class'), Js(u'Statement'), Js(u'Declaration'), Js(u'Pureish')]),u'fields':PyJs_Object_2444_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ClassDeclaration'), PyJs_Object_2443_)
+ PyJs_Object_2451_ = Js({u'optional':var.get(u'true'),u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2452_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'ClassBody'))})
+ PyJs_Object_2453_ = Js({u'optional':var.get(u'true'),u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2454_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Decorator'))))})
+ PyJs_Object_2450_ = Js({u'id':PyJs_Object_2451_,u'body':PyJs_Object_2452_,u'superClass':PyJs_Object_2453_,u'decorators':PyJs_Object_2454_})
+ PyJs_Object_2449_ = Js({u'inherits':Js(u'ClassDeclaration'),u'aliases':Js([Js(u'Scopable'), Js(u'Class'), Js(u'Expression'), Js(u'Pureish')]),u'fields':PyJs_Object_2450_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ClassExpression'), PyJs_Object_2449_)
+ PyJs_Object_2457_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'StringLiteral'))})
+ PyJs_Object_2456_ = Js({u'source':PyJs_Object_2457_})
+ PyJs_Object_2455_ = Js({u'visitor':Js([Js(u'source')]),u'aliases':Js([Js(u'Statement'), Js(u'Declaration'), Js(u'ModuleDeclaration'), Js(u'ExportDeclaration')]),u'fields':PyJs_Object_2456_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ExportAllDeclaration'), PyJs_Object_2455_)
+ PyJs_Object_2460_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'FunctionDeclaration'), Js(u'ClassDeclaration'), Js(u'Expression'))})
+ PyJs_Object_2459_ = Js({u'declaration':PyJs_Object_2460_})
+ PyJs_Object_2458_ = Js({u'visitor':Js([Js(u'declaration')]),u'aliases':Js([Js(u'Statement'), Js(u'Declaration'), Js(u'ModuleDeclaration'), Js(u'ExportDeclaration')]),u'fields':PyJs_Object_2459_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ExportDefaultDeclaration'), PyJs_Object_2458_)
+ PyJs_Object_2463_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Declaration')),u'optional':var.get(u'true')})
+ PyJs_Object_2464_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'ExportSpecifier'))))})
+ PyJs_Object_2465_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'StringLiteral')),u'optional':var.get(u'true')})
+ PyJs_Object_2462_ = Js({u'declaration':PyJs_Object_2463_,u'specifiers':PyJs_Object_2464_,u'source':PyJs_Object_2465_})
+ PyJs_Object_2461_ = Js({u'visitor':Js([Js(u'declaration'), Js(u'specifiers'), Js(u'source')]),u'aliases':Js([Js(u'Statement'), Js(u'Declaration'), Js(u'ModuleDeclaration'), Js(u'ExportDeclaration')]),u'fields':PyJs_Object_2462_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ExportNamedDeclaration'), PyJs_Object_2461_)
+ PyJs_Object_2468_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2469_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2467_ = Js({u'local':PyJs_Object_2468_,u'exported':PyJs_Object_2469_})
+ PyJs_Object_2466_ = Js({u'visitor':Js([Js(u'local'), Js(u'exported')]),u'aliases':Js([Js(u'ModuleSpecifier')]),u'fields':PyJs_Object_2467_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ExportSpecifier'), PyJs_Object_2466_)
+ PyJs_Object_2472_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'VariableDeclaration'), Js(u'LVal'))})
+ PyJs_Object_2473_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2474_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Statement'))})
+ PyJs_Object_2471_ = Js({u'left':PyJs_Object_2472_,u'right':PyJs_Object_2473_,u'body':PyJs_Object_2474_})
+ PyJs_Object_2470_ = Js({u'visitor':Js([Js(u'left'), Js(u'right'), Js(u'body')]),u'aliases':Js([Js(u'Scopable'), Js(u'Statement'), Js(u'For'), Js(u'BlockParent'), Js(u'Loop'), Js(u'ForXStatement')]),u'fields':PyJs_Object_2471_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ForOfStatement'), PyJs_Object_2470_)
+ PyJs_Object_2477_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'ImportSpecifier'), Js(u'ImportDefaultSpecifier'), Js(u'ImportNamespaceSpecifier'))))})
+ PyJs_Object_2478_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'StringLiteral'))})
+ PyJs_Object_2476_ = Js({u'specifiers':PyJs_Object_2477_,u'source':PyJs_Object_2478_})
+ PyJs_Object_2475_ = Js({u'visitor':Js([Js(u'specifiers'), Js(u'source')]),u'aliases':Js([Js(u'Statement'), Js(u'Declaration'), Js(u'ModuleDeclaration')]),u'fields':PyJs_Object_2476_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ImportDeclaration'), PyJs_Object_2475_)
+ PyJs_Object_2481_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2480_ = Js({u'local':PyJs_Object_2481_})
+ PyJs_Object_2479_ = Js({u'visitor':Js([Js(u'local')]),u'aliases':Js([Js(u'ModuleSpecifier')]),u'fields':PyJs_Object_2480_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ImportDefaultSpecifier'), PyJs_Object_2479_)
+ PyJs_Object_2484_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2483_ = Js({u'local':PyJs_Object_2484_})
+ PyJs_Object_2482_ = Js({u'visitor':Js([Js(u'local')]),u'aliases':Js([Js(u'ModuleSpecifier')]),u'fields':PyJs_Object_2483_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ImportNamespaceSpecifier'), PyJs_Object_2482_)
+ PyJs_Object_2487_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2488_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2486_ = Js({u'local':PyJs_Object_2487_,u'imported':PyJs_Object_2488_})
+ PyJs_Object_2485_ = Js({u'visitor':Js([Js(u'local'), Js(u'imported')]),u'aliases':Js([Js(u'ModuleSpecifier')]),u'fields':PyJs_Object_2486_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ImportSpecifier'), PyJs_Object_2485_)
+ PyJs_Object_2491_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'string'))})
+ PyJs_Object_2492_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'string'))})
+ PyJs_Object_2490_ = Js({u'meta':PyJs_Object_2491_,u'property':PyJs_Object_2492_})
+ PyJs_Object_2489_ = Js({u'visitor':Js([Js(u'meta'), Js(u'property')]),u'aliases':Js([Js(u'Expression')]),u'fields':PyJs_Object_2490_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'MetaProperty'), PyJs_Object_2489_)
+ PyJs_Object_2495_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'string')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertOneOf'))(Js(u'get'), Js(u'set'), Js(u'method'), Js(u'constructor'))),u'default':Js(u'method')})
+ PyJs_Object_2496_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2497_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'boolean'))})
+ @Js
+ def PyJs_validate_2499_(node, key, val, this, arguments, var=var):
+ var = Scope({u'node':node, u'val':val, u'this':this, u'arguments':arguments, u'key':key, u'validate':PyJs_validate_2499_}, var)
+ var.registers([u'node', u'val', u'key', u'expectedTypes'])
+ var.put(u'expectedTypes', (Js([Js(u'Expression')]) if var.get(u'node').get(u'computed') else Js([Js(u'Identifier'), Js(u'StringLiteral'), Js(u'NumericLiteral')])))
+ var.get(u'_index').get(u'assertNodeType').callprop(u'apply', var.get(u'undefined'), var.get(u'expectedTypes'))(var.get(u'node'), var.get(u'key'), var.get(u'val'))
+ PyJs_validate_2499_._set_name(u'validate')
+ PyJs_Object_2498_ = Js({u'validate':PyJs_validate_2499_})
+ PyJs_Object_2500_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'LVal'))))})
+ PyJs_Object_2501_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'BlockStatement'))})
+ PyJs_Object_2502_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2503_ = Js({u'default':Js(False),u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'boolean'))})
+ PyJs_Object_2494_ = Js({u'kind':PyJs_Object_2495_,u'computed':PyJs_Object_2496_,u'static':PyJs_Object_2497_,u'key':PyJs_Object_2498_,u'params':PyJs_Object_2500_,u'body':PyJs_Object_2501_,u'generator':PyJs_Object_2502_,u'async':PyJs_Object_2503_})
+ PyJs_Object_2493_ = Js({u'aliases':Js([Js(u'Function'), Js(u'Scopable'), Js(u'BlockParent'), Js(u'FunctionParent'), Js(u'Method')]),u'builder':Js([Js(u'kind'), Js(u'key'), Js(u'params'), Js(u'body'), Js(u'computed'), Js(u'static')]),u'visitor':Js([Js(u'key'), Js(u'params'), Js(u'body'), Js(u'decorators'), Js(u'returnType'), Js(u'typeParameters')]),u'fields':PyJs_Object_2494_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ClassMethod'), PyJs_Object_2493_)
+ PyJs_Object_2506_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'RestProperty'), Js(u'Property'))))})
+ PyJs_Object_2507_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Decorator'))))})
+ PyJs_Object_2505_ = Js({u'properties':PyJs_Object_2506_,u'decorators':PyJs_Object_2507_})
+ PyJs_Object_2504_ = Js({u'visitor':Js([Js(u'properties'), Js(u'typeAnnotation')]),u'aliases':Js([Js(u'Pattern'), Js(u'LVal')]),u'fields':PyJs_Object_2505_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ObjectPattern'), PyJs_Object_2504_)
+ PyJs_Object_2510_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2509_ = Js({u'argument':PyJs_Object_2510_})
+ PyJs_Object_2508_ = Js({u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'UnaryLike')]),u'fields':PyJs_Object_2509_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'SpreadElement'), PyJs_Object_2508_)
+ PyJs_Object_2511_ = Js({u'aliases':Js([Js(u'Expression')])})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'Super'), PyJs_Object_2511_)
+ PyJs_Object_2514_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2515_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'TemplateLiteral'))})
+ PyJs_Object_2513_ = Js({u'tag':PyJs_Object_2514_,u'quasi':PyJs_Object_2515_})
+ PyJs_Object_2512_ = Js({u'visitor':Js([Js(u'tag'), Js(u'quasi')]),u'aliases':Js([Js(u'Expression')]),u'fields':PyJs_Object_2513_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TaggedTemplateExpression'), PyJs_Object_2512_)
+ PyJs_Object_2518_ = Js({})
+ PyJs_Object_2519_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'boolean')),u'default':Js(False)})
+ PyJs_Object_2517_ = Js({u'value':PyJs_Object_2518_,u'tail':PyJs_Object_2519_})
+ PyJs_Object_2516_ = Js({u'builder':Js([Js(u'value'), Js(u'tail')]),u'fields':PyJs_Object_2517_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TemplateElement'), PyJs_Object_2516_)
+ PyJs_Object_2522_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'TemplateElement'))))})
+ PyJs_Object_2523_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'chain'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'array')), PyJsComma(Js(0.0),var.get(u'_index').get(u'assertEach'))(PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))))})
+ PyJs_Object_2521_ = Js({u'quasis':PyJs_Object_2522_,u'expressions':PyJs_Object_2523_})
+ PyJs_Object_2520_ = Js({u'visitor':Js([Js(u'quasis'), Js(u'expressions')]),u'aliases':Js([Js(u'Expression'), Js(u'Literal')]),u'fields':PyJs_Object_2521_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TemplateLiteral'), PyJs_Object_2520_)
+ PyJs_Object_2526_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'boolean')),u'default':Js(False)})
+ PyJs_Object_2527_ = Js({u'optional':var.get(u'true'),u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2525_ = Js({u'delegate':PyJs_Object_2526_,u'argument':PyJs_Object_2527_})
+ PyJs_Object_2524_ = Js({u'builder':Js([Js(u'argument'), Js(u'delegate')]),u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'Expression'), Js(u'Terminatorless')]),u'fields':PyJs_Object_2525_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'YieldExpression'), PyJs_Object_2524_)
+PyJs_anonymous_2424_._set_name(u'anonymous')
+PyJs_Object_2528_ = Js({u'./index':Js(253.0)})
+@Js
+def PyJs_anonymous_2529_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_index', u'require', u'module', u'_index2', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2530_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2530_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.put(u'_index', var.get(u'require')(Js(u'./index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ pass
+ PyJs_Object_2533_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2532_ = Js({u'argument':PyJs_Object_2533_})
+ PyJs_Object_2531_ = Js({u'builder':Js([Js(u'argument')]),u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'Expression'), Js(u'Terminatorless')]),u'fields':PyJs_Object_2532_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'AwaitExpression'), PyJs_Object_2531_)
+ PyJs_Object_2536_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'VariableDeclaration'), Js(u'LVal'))})
+ PyJs_Object_2537_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2538_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Statement'))})
+ PyJs_Object_2535_ = Js({u'left':PyJs_Object_2536_,u'right':PyJs_Object_2537_,u'body':PyJs_Object_2538_})
+ PyJs_Object_2534_ = Js({u'visitor':Js([Js(u'left'), Js(u'right'), Js(u'body')]),u'aliases':Js([Js(u'Scopable'), Js(u'Statement'), Js(u'For'), Js(u'BlockParent'), Js(u'Loop'), Js(u'ForXStatement')]),u'fields':PyJs_Object_2535_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ForAwaitStatement'), PyJs_Object_2534_)
+ PyJs_Object_2540_ = Js({})
+ PyJs_Object_2539_ = Js({u'visitor':Js([Js(u'object'), Js(u'callee')]),u'aliases':Js([Js(u'Expression')]),u'fields':PyJs_Object_2540_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'BindExpression'), PyJs_Object_2539_)
+ PyJs_Object_2543_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2542_ = Js({u'expression':PyJs_Object_2543_})
+ PyJs_Object_2541_ = Js({u'visitor':Js([Js(u'expression')]),u'fields':PyJs_Object_2542_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'Decorator'), PyJs_Object_2541_)
+ PyJs_Object_2546_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'BlockStatement'))})
+ PyJs_Object_2545_ = Js({u'body':PyJs_Object_2546_})
+ PyJs_Object_2544_ = Js({u'visitor':Js([Js(u'body')]),u'aliases':Js([Js(u'Expression')]),u'fields':PyJs_Object_2545_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'DoExpression'), PyJs_Object_2544_)
+ PyJs_Object_2549_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2548_ = Js({u'exported':PyJs_Object_2549_})
+ PyJs_Object_2547_ = Js({u'visitor':Js([Js(u'exported')]),u'aliases':Js([Js(u'ModuleSpecifier')]),u'fields':PyJs_Object_2548_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ExportDefaultSpecifier'), PyJs_Object_2547_)
+ PyJs_Object_2552_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Identifier'))})
+ PyJs_Object_2551_ = Js({u'exported':PyJs_Object_2552_})
+ PyJs_Object_2550_ = Js({u'visitor':Js([Js(u'exported')]),u'aliases':Js([Js(u'ModuleSpecifier')]),u'fields':PyJs_Object_2551_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ExportNamespaceSpecifier'), PyJs_Object_2550_)
+ PyJs_Object_2555_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'LVal'))})
+ PyJs_Object_2554_ = Js({u'argument':PyJs_Object_2555_})
+ PyJs_Object_2553_ = Js({u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'UnaryLike')]),u'fields':PyJs_Object_2554_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'RestProperty'), PyJs_Object_2553_)
+ PyJs_Object_2558_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertNodeType'))(Js(u'Expression'))})
+ PyJs_Object_2557_ = Js({u'argument':PyJs_Object_2558_})
+ PyJs_Object_2556_ = Js({u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'UnaryLike')]),u'fields':PyJs_Object_2557_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'SpreadProperty'), PyJs_Object_2556_)
+PyJs_anonymous_2529_._set_name(u'anonymous')
+PyJs_Object_2559_ = Js({u'./index':Js(253.0)})
+@Js
+def PyJs_anonymous_2560_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_index', u'require', u'module', u'_index2', u'_interopRequireDefault'])
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2561_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2561_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ Js(u'use strict')
+ var.put(u'_index', var.get(u'require')(Js(u'./index')))
+ var.put(u'_index2', var.get(u'_interopRequireDefault')(var.get(u'_index')))
+ pass
+ PyJs_Object_2563_ = Js({})
+ PyJs_Object_2562_ = Js({u'aliases':Js([Js(u'Flow'), Js(u'FlowBaseAnnotation')]),u'fields':PyJs_Object_2563_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'AnyTypeAnnotation'), PyJs_Object_2562_)
+ PyJs_Object_2565_ = Js({})
+ PyJs_Object_2564_ = Js({u'visitor':Js([Js(u'elementType')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2565_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ArrayTypeAnnotation'), PyJs_Object_2564_)
+ PyJs_Object_2567_ = Js({})
+ PyJs_Object_2566_ = Js({u'aliases':Js([Js(u'Flow'), Js(u'FlowBaseAnnotation')]),u'fields':PyJs_Object_2567_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'BooleanTypeAnnotation'), PyJs_Object_2566_)
+ PyJs_Object_2569_ = Js({})
+ PyJs_Object_2568_ = Js({u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2569_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'BooleanLiteralTypeAnnotation'), PyJs_Object_2568_)
+ PyJs_Object_2571_ = Js({})
+ PyJs_Object_2570_ = Js({u'aliases':Js([Js(u'Flow'), Js(u'FlowBaseAnnotation')]),u'fields':PyJs_Object_2571_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'NullLiteralTypeAnnotation'), PyJs_Object_2570_)
+ PyJs_Object_2573_ = Js({})
+ PyJs_Object_2572_ = Js({u'visitor':Js([Js(u'id'), Js(u'typeParameters')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2573_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ClassImplements'), PyJs_Object_2572_)
+ PyJs_Object_2576_ = Js({u'validate':PyJsComma(Js(0.0),var.get(u'_index').get(u'assertValueType'))(Js(u'boolean')),u'default':Js(False)})
+ PyJs_Object_2575_ = Js({u'computed':PyJs_Object_2576_})
+ PyJs_Object_2574_ = Js({u'visitor':Js([Js(u'key'), Js(u'value'), Js(u'typeAnnotation'), Js(u'decorators')]),u'builder':Js([Js(u'key'), Js(u'value'), Js(u'typeAnnotation'), Js(u'decorators'), Js(u'computed')]),u'aliases':Js([Js(u'Property')]),u'fields':PyJs_Object_2575_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ClassProperty'), PyJs_Object_2574_)
+ PyJs_Object_2578_ = Js({})
+ PyJs_Object_2577_ = Js({u'visitor':Js([Js(u'id'), Js(u'typeParameters'), Js(u'extends'), Js(u'body')]),u'aliases':Js([Js(u'Flow'), Js(u'FlowDeclaration'), Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2578_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'DeclareClass'), PyJs_Object_2577_)
+ PyJs_Object_2580_ = Js({})
+ PyJs_Object_2579_ = Js({u'visitor':Js([Js(u'id')]),u'aliases':Js([Js(u'Flow'), Js(u'FlowDeclaration'), Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2580_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'DeclareFunction'), PyJs_Object_2579_)
+ PyJs_Object_2582_ = Js({})
+ PyJs_Object_2581_ = Js({u'visitor':Js([Js(u'id'), Js(u'typeParameters'), Js(u'extends'), Js(u'body')]),u'aliases':Js([Js(u'Flow'), Js(u'FlowDeclaration'), Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2582_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'DeclareInterface'), PyJs_Object_2581_)
+ PyJs_Object_2584_ = Js({})
+ PyJs_Object_2583_ = Js({u'visitor':Js([Js(u'id'), Js(u'body')]),u'aliases':Js([Js(u'Flow'), Js(u'FlowDeclaration'), Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2584_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'DeclareModule'), PyJs_Object_2583_)
+ PyJs_Object_2586_ = Js({})
+ PyJs_Object_2585_ = Js({u'visitor':Js([Js(u'typeAnnotation')]),u'aliases':Js([Js(u'Flow'), Js(u'FlowDeclaration'), Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2586_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'DeclareModuleExports'), PyJs_Object_2585_)
+ PyJs_Object_2588_ = Js({})
+ PyJs_Object_2587_ = Js({u'visitor':Js([Js(u'id'), Js(u'typeParameters'), Js(u'right')]),u'aliases':Js([Js(u'Flow'), Js(u'FlowDeclaration'), Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2588_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'DeclareTypeAlias'), PyJs_Object_2587_)
+ PyJs_Object_2590_ = Js({})
+ PyJs_Object_2589_ = Js({u'visitor':Js([Js(u'id')]),u'aliases':Js([Js(u'Flow'), Js(u'FlowDeclaration'), Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2590_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'DeclareVariable'), PyJs_Object_2589_)
+ PyJs_Object_2591_ = Js({u'aliases':Js([Js(u'Flow')])})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ExistentialTypeParam'), PyJs_Object_2591_)
+ PyJs_Object_2593_ = Js({})
+ PyJs_Object_2592_ = Js({u'visitor':Js([Js(u'typeParameters'), Js(u'params'), Js(u'rest'), Js(u'returnType')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2593_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'FunctionTypeAnnotation'), PyJs_Object_2592_)
+ PyJs_Object_2595_ = Js({})
+ PyJs_Object_2594_ = Js({u'visitor':Js([Js(u'name'), Js(u'typeAnnotation')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2595_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'FunctionTypeParam'), PyJs_Object_2594_)
+ PyJs_Object_2597_ = Js({})
+ PyJs_Object_2596_ = Js({u'visitor':Js([Js(u'id'), Js(u'typeParameters')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2597_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'GenericTypeAnnotation'), PyJs_Object_2596_)
+ PyJs_Object_2599_ = Js({})
+ PyJs_Object_2598_ = Js({u'visitor':Js([Js(u'id'), Js(u'typeParameters')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2599_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'InterfaceExtends'), PyJs_Object_2598_)
+ PyJs_Object_2601_ = Js({})
+ PyJs_Object_2600_ = Js({u'visitor':Js([Js(u'id'), Js(u'typeParameters'), Js(u'extends'), Js(u'body')]),u'aliases':Js([Js(u'Flow'), Js(u'FlowDeclaration'), Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2601_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'InterfaceDeclaration'), PyJs_Object_2600_)
+ PyJs_Object_2603_ = Js({})
+ PyJs_Object_2602_ = Js({u'visitor':Js([Js(u'types')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2603_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'IntersectionTypeAnnotation'), PyJs_Object_2602_)
+ PyJs_Object_2604_ = Js({u'aliases':Js([Js(u'Flow'), Js(u'FlowBaseAnnotation')])})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'MixedTypeAnnotation'), PyJs_Object_2604_)
+ PyJs_Object_2605_ = Js({u'aliases':Js([Js(u'Flow'), Js(u'FlowBaseAnnotation')])})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'EmptyTypeAnnotation'), PyJs_Object_2605_)
+ PyJs_Object_2607_ = Js({})
+ PyJs_Object_2606_ = Js({u'visitor':Js([Js(u'typeAnnotation')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2607_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'NullableTypeAnnotation'), PyJs_Object_2606_)
+ PyJs_Object_2609_ = Js({})
+ PyJs_Object_2608_ = Js({u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2609_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'NumericLiteralTypeAnnotation'), PyJs_Object_2608_)
+ PyJs_Object_2611_ = Js({})
+ PyJs_Object_2610_ = Js({u'aliases':Js([Js(u'Flow'), Js(u'FlowBaseAnnotation')]),u'fields':PyJs_Object_2611_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'NumberTypeAnnotation'), PyJs_Object_2610_)
+ PyJs_Object_2613_ = Js({})
+ PyJs_Object_2612_ = Js({u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2613_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'StringLiteralTypeAnnotation'), PyJs_Object_2612_)
+ PyJs_Object_2615_ = Js({})
+ PyJs_Object_2614_ = Js({u'aliases':Js([Js(u'Flow'), Js(u'FlowBaseAnnotation')]),u'fields':PyJs_Object_2615_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'StringTypeAnnotation'), PyJs_Object_2614_)
+ PyJs_Object_2617_ = Js({})
+ PyJs_Object_2616_ = Js({u'aliases':Js([Js(u'Flow'), Js(u'FlowBaseAnnotation')]),u'fields':PyJs_Object_2617_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ThisTypeAnnotation'), PyJs_Object_2616_)
+ PyJs_Object_2619_ = Js({})
+ PyJs_Object_2618_ = Js({u'visitor':Js([Js(u'types')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2619_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TupleTypeAnnotation'), PyJs_Object_2618_)
+ PyJs_Object_2621_ = Js({})
+ PyJs_Object_2620_ = Js({u'visitor':Js([Js(u'argument')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2621_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TypeofTypeAnnotation'), PyJs_Object_2620_)
+ PyJs_Object_2623_ = Js({})
+ PyJs_Object_2622_ = Js({u'visitor':Js([Js(u'id'), Js(u'typeParameters'), Js(u'right')]),u'aliases':Js([Js(u'Flow'), Js(u'FlowDeclaration'), Js(u'Statement'), Js(u'Declaration')]),u'fields':PyJs_Object_2623_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TypeAlias'), PyJs_Object_2622_)
+ PyJs_Object_2625_ = Js({})
+ PyJs_Object_2624_ = Js({u'visitor':Js([Js(u'typeAnnotation')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2625_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TypeAnnotation'), PyJs_Object_2624_)
+ PyJs_Object_2627_ = Js({})
+ PyJs_Object_2626_ = Js({u'visitor':Js([Js(u'expression'), Js(u'typeAnnotation')]),u'aliases':Js([Js(u'Flow'), Js(u'ExpressionWrapper'), Js(u'Expression')]),u'fields':PyJs_Object_2627_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TypeCastExpression'), PyJs_Object_2626_)
+ PyJs_Object_2629_ = Js({})
+ PyJs_Object_2628_ = Js({u'visitor':Js([Js(u'bound')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2629_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TypeParameter'), PyJs_Object_2628_)
+ PyJs_Object_2631_ = Js({})
+ PyJs_Object_2630_ = Js({u'visitor':Js([Js(u'params')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2631_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TypeParameterDeclaration'), PyJs_Object_2630_)
+ PyJs_Object_2633_ = Js({})
+ PyJs_Object_2632_ = Js({u'visitor':Js([Js(u'params')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2633_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'TypeParameterInstantiation'), PyJs_Object_2632_)
+ PyJs_Object_2635_ = Js({})
+ PyJs_Object_2634_ = Js({u'visitor':Js([Js(u'properties'), Js(u'indexers'), Js(u'callProperties')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2635_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ObjectTypeAnnotation'), PyJs_Object_2634_)
+ PyJs_Object_2637_ = Js({})
+ PyJs_Object_2636_ = Js({u'visitor':Js([Js(u'value')]),u'aliases':Js([Js(u'Flow'), Js(u'UserWhitespacable')]),u'fields':PyJs_Object_2637_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ObjectTypeCallProperty'), PyJs_Object_2636_)
+ PyJs_Object_2639_ = Js({})
+ PyJs_Object_2638_ = Js({u'visitor':Js([Js(u'id'), Js(u'key'), Js(u'value')]),u'aliases':Js([Js(u'Flow'), Js(u'UserWhitespacable')]),u'fields':PyJs_Object_2639_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ObjectTypeIndexer'), PyJs_Object_2638_)
+ PyJs_Object_2641_ = Js({})
+ PyJs_Object_2640_ = Js({u'visitor':Js([Js(u'key'), Js(u'value')]),u'aliases':Js([Js(u'Flow'), Js(u'UserWhitespacable')]),u'fields':PyJs_Object_2641_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'ObjectTypeProperty'), PyJs_Object_2640_)
+ PyJs_Object_2643_ = Js({})
+ PyJs_Object_2642_ = Js({u'visitor':Js([Js(u'id'), Js(u'qualification')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2643_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'QualifiedTypeIdentifier'), PyJs_Object_2642_)
+ PyJs_Object_2645_ = Js({})
+ PyJs_Object_2644_ = Js({u'visitor':Js([Js(u'types')]),u'aliases':Js([Js(u'Flow')]),u'fields':PyJs_Object_2645_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'UnionTypeAnnotation'), PyJs_Object_2644_)
+ PyJs_Object_2647_ = Js({})
+ PyJs_Object_2646_ = Js({u'aliases':Js([Js(u'Flow'), Js(u'FlowBaseAnnotation')]),u'fields':PyJs_Object_2647_})
+ PyJsComma(Js(0.0),var.get(u'_index2').get(u'default'))(Js(u'VoidTypeAnnotation'), PyJs_Object_2646_)
+PyJs_anonymous_2560_._set_name(u'anonymous')
+PyJs_Object_2648_ = Js({u'./index':Js(253.0)})
+@Js
+def PyJs_anonymous_2649_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'chain', u'BUILDER_KEYS', u'defineType', u'assertNodeOrValueType', u'module', u'_interopRequireDefault', u'_getIterator2', u'_getIterator3', u'assertEach', u'_typeof2', u'_typeof3', u'VISITOR_KEYS', u'NODE_FIELDS', u'assertOneOf', u'store', u'DEPRECATED_KEYS', u'exports', u'_stringify2', u'assertNodeType', u'_interopRequireWildcard', u'ALIAS_KEYS', u'getType', u'_index', u'require', u'assertValueType', u'_stringify', u't'])
+ @Js
+ def PyJsHoisted_assertNodeType_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'validate', u'_len2', u'types', u'_key2'])
+ @Js
+ def PyJsHoisted_validate_(node, key, val, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'val':val, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'key', u'val', u'valid', u'_i', u'_ref', u'type'])
+ var.put(u'valid', Js(False))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'types'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'type', var.get(u'_ref'))
+ if var.get(u't').callprop(u'is', var.get(u'type'), var.get(u'val')):
+ var.put(u'valid', var.get(u'true'))
+ break
+
+ if var.get(u'valid').neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((((((((Js(u'Property ')+var.get(u'key'))+Js(u' of '))+var.get(u'node').get(u'type'))+Js(u' expected node to be of a type '))+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'types')))+Js(u' '))+(Js(u'but instead got ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))((var.get(u'val') and var.get(u'val').get(u'type')))))))
+ raise PyJsTempException
+ PyJsHoisted_validate_.func_name = u'validate'
+ var.put(u'validate', PyJsHoisted_validate_)
+ #for JS loop
+ var.put(u'_len2', var.get(u'arguments').get(u'length'))
+ var.put(u'types', var.get(u'Array')(var.get(u'_len2')))
+ var.put(u'_key2', Js(0.0))
+ while (var.get(u'_key2')=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'fn', var.get(u'_ref3'))
+ var.get(u'fn').callprop(u'apply', var.get(u'undefined'), var.get(u'arguments'))
+
+ PyJsHoisted_validate_.func_name = u'validate'
+ var.put(u'validate', PyJsHoisted_validate_)
+ #for JS loop
+ var.put(u'_len4', var.get(u'arguments').get(u'length'))
+ var.put(u'fns', var.get(u'Array')(var.get(u'_len4')))
+ var.put(u'_key4', Js(0.0))
+ while (var.get(u'_key4')=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'type', var.get(u'_ref2'))
+ if (PyJsStrictEq(var.get(u'getType')(var.get(u'val')),var.get(u'type')) or var.get(u't').callprop(u'is', var.get(u'type'), var.get(u'val'))):
+ var.put(u'valid', var.get(u'true'))
+ break
+
+ if var.get(u'valid').neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((((((((Js(u'Property ')+var.get(u'key'))+Js(u' of '))+var.get(u'node').get(u'type'))+Js(u' expected node to be of a type '))+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'types')))+Js(u' '))+(Js(u'but instead got ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))((var.get(u'val') and var.get(u'val').get(u'type')))))))
+ raise PyJsTempException
+ PyJsHoisted_validate_.func_name = u'validate'
+ var.put(u'validate', PyJsHoisted_validate_)
+ #for JS loop
+ var.put(u'_len3', var.get(u'arguments').get(u'length'))
+ var.put(u'types', var.get(u'Array')(var.get(u'_len3')))
+ var.put(u'_key3', Js(0.0))
+ while (var.get(u'_key3')Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else PyJs_Object_2657_))
+ PyJs_Object_2658_ = Js({})
+ var.put(u'inherits', ((var.get(u'opts').get(u'inherits') and var.get(u'store').get(var.get(u'opts').get(u'inherits'))) or PyJs_Object_2658_))
+ PyJs_Object_2659_ = Js({})
+ var.get(u'opts').put(u'fields', ((var.get(u'opts').get(u'fields') or var.get(u'inherits').get(u'fields')) or PyJs_Object_2659_))
+ var.get(u'opts').put(u'visitor', ((var.get(u'opts').get(u'visitor') or var.get(u'inherits').get(u'visitor')) or Js([])))
+ var.get(u'opts').put(u'aliases', ((var.get(u'opts').get(u'aliases') or var.get(u'inherits').get(u'aliases')) or Js([])))
+ var.get(u'opts').put(u'builder', (((var.get(u'opts').get(u'builder') or var.get(u'inherits').get(u'builder')) or var.get(u'opts').get(u'visitor')) or Js([])))
+ if var.get(u'opts').get(u'deprecatedAlias'):
+ var.get(u'DEPRECATED_KEYS').put(var.get(u'opts').get(u'deprecatedAlias'), var.get(u'type'))
+ #for JS loop
+ var.put(u'_iterator4', var.get(u'opts').get(u'visitor').callprop(u'concat', var.get(u'opts').get(u'builder')))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator4'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i4').get(u'value'))
+ var.put(u'_key5', var.get(u'_ref4'))
+ PyJs_Object_2660_ = Js({})
+ var.get(u'opts').get(u'fields').put(var.get(u'_key5'), (var.get(u'opts').get(u'fields').get(var.get(u'_key5')) or PyJs_Object_2660_))
+
+ for PyJsTemp in var.get(u'opts').get(u'fields'):
+ var.put(u'key', PyJsTemp)
+ var.put(u'field', var.get(u'opts').get(u'fields').get(var.get(u'key')))
+ if PyJsStrictEq(var.get(u'opts').get(u'builder').callprop(u'indexOf', var.get(u'key')),(-Js(1.0))):
+ var.get(u'field').put(u'optional', var.get(u'true'))
+ if PyJsStrictEq(var.get(u'field').get(u'default'),var.get(u'undefined')):
+ var.get(u'field').put(u'default', var.get(u"null"))
+ else:
+ if var.get(u'field').get(u'validate').neg():
+ var.get(u'field').put(u'validate', var.get(u'assertValueType')(var.get(u'getType')(var.get(u'field').get(u'default'))))
+ var.get(u'VISITOR_KEYS').put(var.get(u'type'), var.get(u'opts').get(u'visitor'))
+ var.get(u'BUILDER_KEYS').put(var.get(u'type'), var.get(u'opts').get(u'builder'))
+ var.get(u'NODE_FIELDS').put(var.get(u'type'), var.get(u'opts').get(u'fields'))
+ var.get(u'ALIAS_KEYS').put(var.get(u'type'), var.get(u'opts').get(u'aliases'))
+ var.get(u'store').put(var.get(u'type'), var.get(u'opts'))
+ PyJsHoisted_defineType_.func_name = u'defineType'
+ var.put(u'defineType', PyJsHoisted_defineType_)
+ @Js
+ def PyJsHoisted_assertEach_(callback, this, arguments, var=var):
+ var = Scope({u'this':this, u'callback':callback, u'arguments':arguments}, var)
+ var.registers([u'callback', u'validator'])
+ @Js
+ def PyJsHoisted_validator_(node, key, val, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'val':val, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'i', u'node', u'val', u'key'])
+ if var.get(u'Array').callprop(u'isArray', var.get(u'val')).neg():
+ return var.get('undefined')
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=Js(0.0)):
+ continue
+ if var.get(u't').callprop(u'isAnyTypeAnnotation', var.get(u'node')):
+ return Js([var.get(u'node')])
+ if var.get(u't').callprop(u'isFlowBaseAnnotation', var.get(u'node')):
+ var.get(u'bases').put(var.get(u'node').get(u'type'), var.get(u'node'))
+ continue
+ if var.get(u't').callprop(u'isUnionTypeAnnotation', var.get(u'node')):
+ if (var.get(u'typeGroups').callprop(u'indexOf', var.get(u'node').get(u'types'))=var.get(u'_iterator5').get(u'length')):
+ break
+ var.put(u'_ref5', var.get(u'_iterator5').get((var.put(u'_i5',Js(var.get(u'_i5').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i5', var.get(u'_iterator5').callprop(u'next'))
+ if var.get(u'_i5').get(u'done'):
+ break
+ var.put(u'_ref5', var.get(u'_i5').get(u'value'))
+ var.put(u'_key2', var.get(u'_ref5'))
+ if (var.get(u'child').get(var.get(u'_key2'))==var.get(u"null")):
+ var.get(u'child').put(var.get(u'_key2'), var.get(u'parent').get(var.get(u'_key2')))
+
+ for PyJsTemp in var.get(u'parent'):
+ var.put(u'key', PyJsTemp)
+ if PyJsStrictEq(var.get(u'key').get(u'0'),Js(u'_')):
+ var.get(u'child').put(var.get(u'key'), var.get(u'parent').get(var.get(u'key')))
+ #for JS loop
+ var.put(u'_iterator6', var.get(u't').get(u'INHERIT_KEYS').get(u'force'))
+ var.put(u'_isArray6', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator6')))
+ var.put(u'_i6', Js(0.0))
+ var.put(u'_iterator6', (var.get(u'_iterator6') if var.get(u'_isArray6') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator6'))))
+ while 1:
+ pass
+ if var.get(u'_isArray6'):
+ if (var.get(u'_i6')>=var.get(u'_iterator6').get(u'length')):
+ break
+ var.put(u'_ref6', var.get(u'_iterator6').get((var.put(u'_i6',Js(var.get(u'_i6').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i6', var.get(u'_iterator6').callprop(u'next'))
+ if var.get(u'_i6').get(u'done'):
+ break
+ var.put(u'_ref6', var.get(u'_i6').get(u'value'))
+ var.put(u'_key3', var.get(u'_ref6'))
+ var.get(u'child').put(var.get(u'_key3'), var.get(u'parent').get(var.get(u'_key3')))
+
+ var.get(u't').callprop(u'inheritsComments', var.get(u'child'), var.get(u'parent'))
+ return var.get(u'child')
+ PyJsHoisted_inherits_.func_name = u'inherits'
+ var.put(u'inherits', PyJsHoisted_inherits_)
+ @Js
+ def PyJsHoisted_buildMatchMemberExpression_(match, allowPartial, this, arguments, var=var):
+ var = Scope({u'this':this, u'allowPartial':allowPartial, u'match':match, u'arguments':arguments}, var)
+ var.registers([u'parts', u'allowPartial', u'match'])
+ var.put(u'parts', var.get(u'match').callprop(u'split', Js(u'.')))
+ @Js
+ def PyJs_anonymous_2823_(member, this, arguments, var=var):
+ var = Scope({u'member':member, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'node', u'search', u'member'])
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'member')).neg():
+ return Js(False)
+ var.put(u'search', Js([var.get(u'member')]))
+ var.put(u'i', Js(0.0))
+ while var.get(u'search').get(u'length'):
+ var.put(u'node', var.get(u'search').callprop(u'shift'))
+ if (var.get(u'allowPartial') and PyJsStrictEq(var.get(u'i'),var.get(u'parts').get(u'length'))):
+ return var.get(u'true')
+ if var.get(u't').callprop(u'isIdentifier', var.get(u'node')):
+ if PyJsStrictNeq(var.get(u'parts').get(var.get(u'i')),var.get(u'node').get(u'name')):
+ return Js(False)
+ else:
+ if var.get(u't').callprop(u'isStringLiteral', var.get(u'node')):
+ if PyJsStrictNeq(var.get(u'parts').get(var.get(u'i')),var.get(u'node').get(u'value')):
+ return Js(False)
+ else:
+ if var.get(u't').callprop(u'isMemberExpression', var.get(u'node')):
+ if (var.get(u'node').get(u'computed') and var.get(u't').callprop(u'isStringLiteral', var.get(u'node').get(u'property')).neg()):
+ return Js(False)
+ else:
+ var.get(u'search').callprop(u'push', var.get(u'node').get(u'object'))
+ var.get(u'search').callprop(u'push', var.get(u'node').get(u'property'))
+ continue
+ else:
+ return Js(False)
+ if (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))>var.get(u'parts').get(u'length')):
+ return Js(False)
+ return var.get(u'true')
+ PyJs_anonymous_2823_._set_name(u'anonymous')
+ return PyJs_anonymous_2823_
+ PyJsHoisted_buildMatchMemberExpression_.func_name = u'buildMatchMemberExpression'
+ var.put(u'buildMatchMemberExpression', PyJsHoisted_buildMatchMemberExpression_)
+ @Js
+ def PyJsHoisted_cloneDeep_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'newNode', u'val', u'key'])
+ PyJs_Object_2822_ = Js({})
+ var.put(u'newNode', PyJs_Object_2822_)
+ for PyJsTemp in var.get(u'node'):
+ var.put(u'key', PyJsTemp)
+ if PyJsStrictEq(var.get(u'key').get(u'0'),Js(u'_')):
+ continue
+ var.put(u'val', var.get(u'node').get(var.get(u'key')))
+ if var.get(u'val'):
+ if var.get(u'val').get(u'type'):
+ var.put(u'val', var.get(u't').callprop(u'cloneDeep', var.get(u'val')))
+ else:
+ if var.get(u'Array').callprop(u'isArray', var.get(u'val')):
+ var.put(u'val', var.get(u'val').callprop(u'map', var.get(u't').get(u'cloneDeep')))
+ var.get(u'newNode').put(var.get(u'key'), var.get(u'val'))
+ return var.get(u'newNode')
+ PyJsHoisted_cloneDeep_.func_name = u'cloneDeep'
+ var.put(u'cloneDeep', PyJsHoisted_cloneDeep_)
+ @Js
+ def PyJsHoisted_is_(type, node, opts, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'type':type, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'matches', u'node', u'type', u'opts'])
+ if var.get(u'node').neg():
+ return Js(False)
+ var.put(u'matches', var.get(u'isType')(var.get(u'node').get(u'type'), var.get(u'type')))
+ if var.get(u'matches').neg():
+ return Js(False)
+ if PyJsStrictEq(var.get(u'opts',throw=False).typeof(),Js(u'undefined')):
+ return var.get(u'true')
+ else:
+ return var.get(u't').callprop(u'shallowEqual', var.get(u'node'), var.get(u'opts'))
+ PyJsHoisted_is_.func_name = u'is'
+ var.put(u'is', PyJsHoisted_is_)
+ @Js
+ def PyJsHoisted_inheritTrailingComments_(child, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'parent':parent, u'child':child}, var)
+ var.registers([u'parent', u'child'])
+ var.get(u'_inheritComments')(Js(u'trailingComments'), var.get(u'child'), var.get(u'parent'))
+ PyJsHoisted_inheritTrailingComments_.func_name = u'inheritTrailingComments'
+ var.put(u'inheritTrailingComments', PyJsHoisted_inheritTrailingComments_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2809_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2809_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_isType_(nodeType, targetType, this, arguments, var=var):
+ var = Scope({u'this':this, u'targetType':targetType, u'nodeType':nodeType, u'arguments':arguments}, var)
+ var.registers([u'targetType', u'_isArray', u'_iterator', u'alias', u'_i', u'nodeType', u'_ref', u'aliases'])
+ if PyJsStrictEq(var.get(u'nodeType'),var.get(u'targetType')):
+ return var.get(u'true')
+ if var.get(u't').get(u'ALIAS_KEYS').get(var.get(u'targetType')):
+ return Js(False)
+ var.put(u'aliases', var.get(u't').get(u'FLIPPED_ALIAS_KEYS').get(var.get(u'targetType')))
+ if var.get(u'aliases'):
+ if PyJsStrictEq(var.get(u'aliases').get(u'0'),var.get(u'nodeType')):
+ return var.get(u'true')
+ #for JS loop
+ var.put(u'_iterator', var.get(u'aliases'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'alias', var.get(u'_ref'))
+ if PyJsStrictEq(var.get(u'nodeType'),var.get(u'alias')):
+ return var.get(u'true')
+
+ return Js(False)
+ PyJsHoisted_isType_.func_name = u'isType'
+ var.put(u'isType', PyJsHoisted_isType_)
+ @Js
+ def PyJsHoisted_shallowEqual_(actual, expected, this, arguments, var=var):
+ var = Scope({u'expected':expected, u'this':this, u'actual':actual, u'arguments':arguments}, var)
+ var.registers([u'_isArray3', u'keys', u'_ref3', u'_i3', u'key', u'expected', u'actual', u'_iterator3'])
+ var.put(u'keys', PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u'expected')))
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'keys'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator3'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'key', var.get(u'_ref3'))
+ if PyJsStrictNeq(var.get(u'actual').get(var.get(u'key')),var.get(u'expected').get(var.get(u'key'))):
+ return Js(False)
+
+ return var.get(u'true')
+ PyJsHoisted_shallowEqual_.func_name = u'shallowEqual'
+ var.put(u'shallowEqual', PyJsHoisted_shallowEqual_)
+ @Js
+ def PyJsHoisted_inheritInnerComments_(child, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'parent':parent, u'child':child}, var)
+ var.registers([u'parent', u'child'])
+ var.get(u'_inheritComments')(Js(u'innerComments'), var.get(u'child'), var.get(u'parent'))
+ PyJsHoisted_inheritInnerComments_.func_name = u'inheritInnerComments'
+ var.put(u'inheritInnerComments', PyJsHoisted_inheritInnerComments_)
+ @Js
+ def PyJsHoisted_ensureBlock_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'key'])
+ var.put(u'key', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else Js(u'body')))
+ return var.get(u'node').put(var.get(u'key'), var.get(u't').callprop(u'toBlock', var.get(u'node').get(var.get(u'key')), var.get(u'node')))
+ PyJsHoisted_ensureBlock_.func_name = u'ensureBlock'
+ var.put(u'ensureBlock', PyJsHoisted_ensureBlock_)
+ @Js
+ def PyJsHoisted_assertNode_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u'isNode')(var.get(u'node')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((Js(u'Not a valid node ')+(var.get(u'node') and var.get(u'node').get(u'type')))))
+ raise PyJsTempException
+ PyJsHoisted_assertNode_.func_name = u'assertNode'
+ var.put(u'assertNode', PyJsHoisted_assertNode_)
+ @Js
+ def PyJsHoisted_inheritLeadingComments_(child, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'parent':parent, u'child':child}, var)
+ var.registers([u'parent', u'child'])
+ var.get(u'_inheritComments')(Js(u'leadingComments'), var.get(u'child'), var.get(u'parent'))
+ PyJsHoisted_inheritLeadingComments_.func_name = u'inheritLeadingComments'
+ var.put(u'inheritLeadingComments', PyJsHoisted_inheritLeadingComments_)
+ @Js
+ def PyJsHoisted__inheritComments_(key, child, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'parent':parent, u'key':key, u'child':child}, var)
+ var.registers([u'parent', u'key', u'child'])
+ if (var.get(u'child') and var.get(u'parent')):
+ var.get(u'child').put(var.get(u'key'), PyJsComma(Js(0.0),var.get(u'_uniq2').get(u'default'))(PyJsComma(Js(0.0),var.get(u'_compact2').get(u'default'))(Js([]).callprop(u'concat', var.get(u'child').get(var.get(u'key')), var.get(u'parent').get(var.get(u'key'))))))
+ PyJsHoisted__inheritComments_.func_name = u'_inheritComments'
+ var.put(u'_inheritComments', PyJsHoisted__inheritComments_)
+ @Js
+ def PyJsHoisted_removeProperties_(node, opts, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'node', u'map', u'_ref9', u'_i9', u'_ref10', u'_isArray9', u'syms', u'_i10', u'_iterator9', u'_key4', u'key', u'_isArray10', u'sym', u'_iterator10', u'opts'])
+ PyJs_Object_2825_ = Js({})
+ var.put(u'opts', (var.get(u'opts') or PyJs_Object_2825_))
+ var.put(u'map', (var.get(u'CLEAR_KEYS') if var.get(u'opts').get(u'preserveComments') else var.get(u'CLEAR_KEYS_PLUS_COMMENTS')))
+ #for JS loop
+ var.put(u'_iterator9', var.get(u'map'))
+ var.put(u'_isArray9', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator9')))
+ var.put(u'_i9', Js(0.0))
+ var.put(u'_iterator9', (var.get(u'_iterator9') if var.get(u'_isArray9') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator9'))))
+ while 1:
+ pass
+ if var.get(u'_isArray9'):
+ if (var.get(u'_i9')>=var.get(u'_iterator9').get(u'length')):
+ break
+ var.put(u'_ref9', var.get(u'_iterator9').get((var.put(u'_i9',Js(var.get(u'_i9').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i9', var.get(u'_iterator9').callprop(u'next'))
+ if var.get(u'_i9').get(u'done'):
+ break
+ var.put(u'_ref9', var.get(u'_i9').get(u'value'))
+ var.put(u'_key4', var.get(u'_ref9'))
+ if (var.get(u'node').get(var.get(u'_key4'))!=var.get(u"null")):
+ var.get(u'node').put(var.get(u'_key4'), var.get(u'undefined'))
+
+ for PyJsTemp in var.get(u'node'):
+ var.put(u'key', PyJsTemp)
+ if (PyJsStrictEq(var.get(u'key').get(u'0'),Js(u'_')) and (var.get(u'node').get(var.get(u'key'))!=var.get(u"null"))):
+ var.get(u'node').put(var.get(u'key'), var.get(u'undefined'))
+ var.put(u'syms', PyJsComma(Js(0.0),var.get(u'_getOwnPropertySymbols2').get(u'default'))(var.get(u'node')))
+ #for JS loop
+ var.put(u'_iterator10', var.get(u'syms'))
+ var.put(u'_isArray10', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator10')))
+ var.put(u'_i10', Js(0.0))
+ var.put(u'_iterator10', (var.get(u'_iterator10') if var.get(u'_isArray10') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator10'))))
+ while 1:
+ pass
+ if var.get(u'_isArray10'):
+ if (var.get(u'_i10')>=var.get(u'_iterator10').get(u'length')):
+ break
+ var.put(u'_ref10', var.get(u'_iterator10').get((var.put(u'_i10',Js(var.get(u'_i10').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i10', var.get(u'_iterator10').callprop(u'next'))
+ if var.get(u'_i10').get(u'done'):
+ break
+ var.put(u'_ref10', var.get(u'_i10').get(u'value'))
+ var.put(u'sym', var.get(u'_ref10'))
+ var.get(u'node').put(var.get(u'sym'), var.get(u"null"))
+
+ PyJsHoisted_removeProperties_.func_name = u'removeProperties'
+ var.put(u'removeProperties', PyJsHoisted_removeProperties_)
+ @Js
+ def PyJsHoisted_isNode_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return (var.get(u'node') and var.get(u'_definitions').get(u'VISITOR_KEYS').get(var.get(u'node').get(u'type'))).neg().neg()
+ PyJsHoisted_isNode_.func_name = u'isNode'
+ var.put(u'isNode', PyJsHoisted_isNode_)
+ @Js
+ def PyJsHoisted_inheritsComments_(child, parent, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'parent':parent, u'child':child}, var)
+ var.registers([u'parent', u'child'])
+ var.get(u'inheritTrailingComments')(var.get(u'child'), var.get(u'parent'))
+ var.get(u'inheritLeadingComments')(var.get(u'child'), var.get(u'parent'))
+ var.get(u'inheritInnerComments')(var.get(u'child'), var.get(u'parent'))
+ return var.get(u'child')
+ PyJsHoisted_inheritsComments_.func_name = u'inheritsComments'
+ var.put(u'inheritsComments', PyJsHoisted_inheritsComments_)
+ @Js
+ def PyJsHoisted_removeComments_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray4', u'_i4', u'key', u'_iterator4', u'_ref4'])
+ #for JS loop
+ var.put(u'_iterator4', var.get(u't').get(u'COMMENT_KEYS'))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator4'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i4').get(u'value'))
+ var.put(u'key', var.get(u'_ref4'))
+ var.get(u'node').delete(var.get(u'key'))
+
+ return var.get(u'node')
+ PyJsHoisted_removeComments_.func_name = u'removeComments'
+ var.put(u'removeComments', PyJsHoisted_removeComments_)
+ @Js
+ def PyJsHoisted__interopRequireWildcard_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj', u'key', u'newObj'])
+ if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')):
+ return var.get(u'obj')
+ else:
+ PyJs_Object_2808_ = Js({})
+ var.put(u'newObj', PyJs_Object_2808_)
+ if (var.get(u'obj')!=var.get(u"null")):
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'newObj').put(var.get(u'key'), var.get(u'obj').get(var.get(u'key')))
+ var.get(u'newObj').put(u'default', var.get(u'obj'))
+ return var.get(u'newObj')
+ PyJsHoisted__interopRequireWildcard_.func_name = u'_interopRequireWildcard'
+ var.put(u'_interopRequireWildcard', PyJsHoisted__interopRequireWildcard_)
+ @Js
+ def PyJsHoisted_removePropertiesDeep_(tree, opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'tree':tree, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'tree', u'opts'])
+ var.get(u'traverseFast')(var.get(u'tree'), var.get(u'removeProperties'), var.get(u'opts'))
+ return var.get(u'tree')
+ PyJsHoisted_removePropertiesDeep_.func_name = u'removePropertiesDeep'
+ var.put(u'removePropertiesDeep', PyJsHoisted_removePropertiesDeep_)
+ @Js
+ def PyJsHoisted_clone_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'newNode', u'key'])
+ PyJs_Object_2821_ = Js({})
+ var.put(u'newNode', PyJs_Object_2821_)
+ for PyJsTemp in var.get(u'node'):
+ var.put(u'key', PyJsTemp)
+ if PyJsStrictEq(var.get(u'key').get(u'0'),Js(u'_')):
+ continue
+ var.get(u'newNode').put(var.get(u'key'), var.get(u'node').get(var.get(u'key')))
+ return var.get(u'newNode')
+ PyJsHoisted_clone_.func_name = u'clone'
+ var.put(u'clone', PyJsHoisted_clone_)
+ @Js
+ def PyJsHoisted_appendToMemberExpression_(member, append, computed, this, arguments, var=var):
+ var = Scope({u'member':member, u'this':this, u'computed':computed, u'append':append, u'arguments':arguments}, var)
+ var.registers([u'member', u'computed', u'append'])
+ var.get(u'member').put(u'object', var.get(u't').callprop(u'memberExpression', var.get(u'member').get(u'object'), var.get(u'member').get(u'property'), var.get(u'member').get(u'computed')))
+ var.get(u'member').put(u'property', var.get(u'append'))
+ var.get(u'member').put(u'computed', var.get(u'computed').neg().neg())
+ return var.get(u'member')
+ PyJsHoisted_appendToMemberExpression_.func_name = u'appendToMemberExpression'
+ var.put(u'appendToMemberExpression', PyJsHoisted_appendToMemberExpression_)
+ @Js
+ def PyJsHoisted_validate_(node, key, val, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'val':val, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'node', u'fields', u'val', u'key', u'field'])
+ if var.get(u'node').neg():
+ return var.get('undefined')
+ var.put(u'fields', var.get(u't').get(u'NODE_FIELDS').get(var.get(u'node').get(u'type')))
+ if var.get(u'fields').neg():
+ return var.get('undefined')
+ var.put(u'field', var.get(u'fields').get(var.get(u'key')))
+ if (var.get(u'field').neg() or var.get(u'field').get(u'validate').neg()):
+ return var.get('undefined')
+ if (var.get(u'field').get(u'optional') and (var.get(u'val')==var.get(u"null"))):
+ return var.get('undefined')
+ var.get(u'field').callprop(u'validate', var.get(u'node'), var.get(u'key'), var.get(u'val'))
+ PyJsHoisted_validate_.func_name = u'validate'
+ var.put(u'validate', PyJsHoisted_validate_)
+ @Js
+ def PyJsHoisted_traverseFast_(node, enter, opts, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'opts':opts, u'enter':enter}, var)
+ var.registers([u'_isArray7', u'node', u'_ref7', u'_i8', u'keys', u'_ref8', u'_isArray8', u'_i7', u'_node', u'_iterator8', u'key', u'enter', u'_iterator7', u'subNode', u'opts'])
+ if var.get(u'node').neg():
+ return var.get('undefined')
+ var.put(u'keys', var.get(u't').get(u'VISITOR_KEYS').get(var.get(u'node').get(u'type')))
+ if var.get(u'keys').neg():
+ return var.get('undefined')
+ PyJs_Object_2824_ = Js({})
+ var.put(u'opts', (var.get(u'opts') or PyJs_Object_2824_))
+ var.get(u'enter')(var.get(u'node'), var.get(u'opts'))
+ #for JS loop
+ var.put(u'_iterator7', var.get(u'keys'))
+ var.put(u'_isArray7', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator7')))
+ var.put(u'_i7', Js(0.0))
+ var.put(u'_iterator7', (var.get(u'_iterator7') if var.get(u'_isArray7') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator7'))))
+ while 1:
+ pass
+ if var.get(u'_isArray7'):
+ if (var.get(u'_i7')>=var.get(u'_iterator7').get(u'length')):
+ break
+ var.put(u'_ref7', var.get(u'_iterator7').get((var.put(u'_i7',Js(var.get(u'_i7').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i7', var.get(u'_iterator7').callprop(u'next'))
+ if var.get(u'_i7').get(u'done'):
+ break
+ var.put(u'_ref7', var.get(u'_i7').get(u'value'))
+ var.put(u'key', var.get(u'_ref7'))
+ var.put(u'subNode', var.get(u'node').get(var.get(u'key')))
+ if var.get(u'Array').callprop(u'isArray', var.get(u'subNode')):
+ #for JS loop
+ var.put(u'_iterator8', var.get(u'subNode'))
+ var.put(u'_isArray8', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator8')))
+ var.put(u'_i8', Js(0.0))
+ var.put(u'_iterator8', (var.get(u'_iterator8') if var.get(u'_isArray8') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator8'))))
+ while 1:
+ pass
+ if var.get(u'_isArray8'):
+ if (var.get(u'_i8')>=var.get(u'_iterator8').get(u'length')):
+ break
+ var.put(u'_ref8', var.get(u'_iterator8').get((var.put(u'_i8',Js(var.get(u'_i8').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i8', var.get(u'_iterator8').callprop(u'next'))
+ if var.get(u'_i8').get(u'done'):
+ break
+ var.put(u'_ref8', var.get(u'_i8').get(u'value'))
+ var.put(u'_node', var.get(u'_ref8'))
+ var.get(u'traverseFast')(var.get(u'_node'), var.get(u'enter'), var.get(u'opts'))
+
+ else:
+ var.get(u'traverseFast')(var.get(u'subNode'), var.get(u'enter'), var.get(u'opts'))
+
+ PyJsHoisted_traverseFast_.func_name = u'traverseFast'
+ var.put(u'traverseFast', PyJsHoisted_traverseFast_)
+ @Js
+ def PyJsHoisted_prependToMemberExpression_(member, prepend, this, arguments, var=var):
+ var = Scope({u'member':member, u'this':this, u'arguments':arguments, u'prepend':prepend}, var)
+ var.registers([u'member', u'prepend'])
+ var.get(u'member').put(u'object', var.get(u't').callprop(u'memberExpression', var.get(u'prepend'), var.get(u'member').get(u'object')))
+ return var.get(u'member')
+ PyJsHoisted_prependToMemberExpression_.func_name = u'prependToMemberExpression'
+ var.put(u'prependToMemberExpression', PyJsHoisted_prependToMemberExpression_)
+ @Js
+ def PyJsHoisted_registerType_(type, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments}, var)
+ var.registers([u'is', u'type'])
+ var.put(u'is', var.get(u't').get((Js(u'is')+var.get(u'type'))))
+ if var.get(u'is').neg():
+ @Js
+ def PyJs_anonymous_2810_(node, opts, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'node', u'opts'])
+ return var.get(u't').callprop(u'is', var.get(u'type'), var.get(u'node'), var.get(u'opts'))
+ PyJs_anonymous_2810_._set_name(u'anonymous')
+ var.put(u'is', var.get(u't').put((Js(u'is')+var.get(u'type')), PyJs_anonymous_2810_))
+ @Js
+ def PyJs_anonymous_2811_(node, opts, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'node', u'opts'])
+ PyJs_Object_2812_ = Js({})
+ var.put(u'opts', (var.get(u'opts') or PyJs_Object_2812_))
+ if var.get(u'is')(var.get(u'node'), var.get(u'opts')).neg():
+ PyJsTempException = JsToPyException(var.get(u'Error').create((((Js(u'Expected type ')+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'type')))+Js(u' with option '))+PyJsComma(Js(0.0),var.get(u'_stringify2').get(u'default'))(var.get(u'opts')))))
+ raise PyJsTempException
+ PyJs_anonymous_2811_._set_name(u'anonymous')
+ var.get(u't').put((Js(u'assert')+var.get(u'type')), PyJs_anonymous_2811_)
+ PyJsHoisted_registerType_.func_name = u'registerType'
+ var.put(u'registerType', PyJsHoisted_registerType_)
+ @Js
+ def PyJsHoisted_cloneWithoutLoc_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'newNode'])
+ var.put(u'newNode', var.get(u'clone')(var.get(u'node')))
+ var.get(u'newNode').delete(u'loc')
+ return var.get(u'newNode')
+ PyJsHoisted_cloneWithoutLoc_.func_name = u'cloneWithoutLoc'
+ var.put(u'cloneWithoutLoc', PyJsHoisted_cloneWithoutLoc_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ def PyJs_LONG_2723_(var=var):
+ def PyJs_LONG_2722_(var=var):
+ def PyJs_LONG_2721_(var=var):
+ def PyJs_LONG_2720_(var=var):
+ def PyJs_LONG_2719_(var=var):
+ return var.get(u'exports').put(u'EQUALITY_BINARY_OPERATORS', var.get(u'exports').put(u'BOOLEAN_NUMBER_BINARY_OPERATORS', var.get(u'exports').put(u'UPDATE_OPERATORS', var.get(u'exports').put(u'LOGICAL_OPERATORS', var.get(u'exports').put(u'COMMENT_KEYS', var.get(u'exports').put(u'FOR_INIT_KEYS', var.get(u'exports').put(u'FLATTENABLE_KEYS', var.get(u'exports').put(u'STATEMENT_OR_BLOCK_KEYS', var.get(u'undefined')))))))))
+ return var.get(u'exports').put(u'UNARY_OPERATORS', var.get(u'exports').put(u'STRING_UNARY_OPERATORS', var.get(u'exports').put(u'NUMBER_UNARY_OPERATORS', var.get(u'exports').put(u'BOOLEAN_UNARY_OPERATORS', var.get(u'exports').put(u'BINARY_OPERATORS', var.get(u'exports').put(u'NUMBER_BINARY_OPERATORS', var.get(u'exports').put(u'BOOLEAN_BINARY_OPERATORS', var.get(u'exports').put(u'COMPARISON_BINARY_OPERATORS', PyJs_LONG_2719_()))))))))
+ return var.get(u'exports').put(u'TYPES', var.get(u'exports').put(u'react', var.get(u'exports').put(u'DEPRECATED_KEYS', var.get(u'exports').put(u'BUILDER_KEYS', var.get(u'exports').put(u'NODE_FIELDS', var.get(u'exports').put(u'ALIAS_KEYS', var.get(u'exports').put(u'VISITOR_KEYS', var.get(u'exports').put(u'NOT_LOCAL_BINDING', var.get(u'exports').put(u'BLOCK_SCOPED_SYMBOL', var.get(u'exports').put(u'INHERIT_KEYS', PyJs_LONG_2720_()))))))))))
+ return var.get(u'exports').put(u'isSpecifierDefault', var.get(u'exports').put(u'isVar', var.get(u'exports').put(u'isBlockScoped', var.get(u'exports').put(u'isLet', var.get(u'exports').put(u'isValidIdentifier', var.get(u'exports').put(u'isReferenced', var.get(u'exports').put(u'isBinding', var.get(u'exports').put(u'getOuterBindingIdentifiers', var.get(u'exports').put(u'getBindingIdentifiers', PyJs_LONG_2721_())))))))))
+ return var.get(u'exports').put(u'toExpression', var.get(u'exports').put(u'toStatement', var.get(u'exports').put(u'toBindingIdentifierName', var.get(u'exports').put(u'toIdentifier', var.get(u'exports').put(u'toKeyAlias', var.get(u'exports').put(u'toSequenceExpression', var.get(u'exports').put(u'toComputedKey', var.get(u'exports').put(u'isImmutable', var.get(u'exports').put(u'isScope', PyJs_LONG_2722_())))))))))
+ var.get(u'exports').put(u'createTypeAnnotationBasedOnTypeof', var.get(u'exports').put(u'removeTypeDuplicates', var.get(u'exports').put(u'createUnionTypeAnnotation', var.get(u'exports').put(u'valueToNode', var.get(u'exports').put(u'toBlock', PyJs_LONG_2723_())))))
+ var.put(u'_getOwnPropertySymbols', var.get(u'require')(Js(u'babel-runtime/core-js/object/get-own-property-symbols')))
+ var.put(u'_getOwnPropertySymbols2', var.get(u'_interopRequireDefault')(var.get(u'_getOwnPropertySymbols')))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.put(u'_keys', var.get(u'require')(Js(u'babel-runtime/core-js/object/keys')))
+ var.put(u'_keys2', var.get(u'_interopRequireDefault')(var.get(u'_keys')))
+ var.put(u'_stringify', var.get(u'require')(Js(u'babel-runtime/core-js/json/stringify')))
+ var.put(u'_stringify2', var.get(u'_interopRequireDefault')(var.get(u'_stringify')))
+ var.put(u'_constants', var.get(u'require')(Js(u'./constants')))
+ @Js
+ def PyJs_get_2725_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2725_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'STATEMENT_OR_BLOCK_KEYS')
+ PyJs_get_2725_._set_name(u'get')
+ PyJs_Object_2724_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2725_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'STATEMENT_OR_BLOCK_KEYS'), PyJs_Object_2724_)
+ @Js
+ def PyJs_get_2727_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2727_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'FLATTENABLE_KEYS')
+ PyJs_get_2727_._set_name(u'get')
+ PyJs_Object_2726_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2727_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'FLATTENABLE_KEYS'), PyJs_Object_2726_)
+ @Js
+ def PyJs_get_2729_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2729_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'FOR_INIT_KEYS')
+ PyJs_get_2729_._set_name(u'get')
+ PyJs_Object_2728_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2729_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'FOR_INIT_KEYS'), PyJs_Object_2728_)
+ @Js
+ def PyJs_get_2731_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2731_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'COMMENT_KEYS')
+ PyJs_get_2731_._set_name(u'get')
+ PyJs_Object_2730_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2731_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'COMMENT_KEYS'), PyJs_Object_2730_)
+ @Js
+ def PyJs_get_2733_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2733_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'LOGICAL_OPERATORS')
+ PyJs_get_2733_._set_name(u'get')
+ PyJs_Object_2732_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2733_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'LOGICAL_OPERATORS'), PyJs_Object_2732_)
+ @Js
+ def PyJs_get_2735_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2735_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'UPDATE_OPERATORS')
+ PyJs_get_2735_._set_name(u'get')
+ PyJs_Object_2734_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2735_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'UPDATE_OPERATORS'), PyJs_Object_2734_)
+ @Js
+ def PyJs_get_2737_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2737_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'BOOLEAN_NUMBER_BINARY_OPERATORS')
+ PyJs_get_2737_._set_name(u'get')
+ PyJs_Object_2736_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2737_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'BOOLEAN_NUMBER_BINARY_OPERATORS'), PyJs_Object_2736_)
+ @Js
+ def PyJs_get_2739_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2739_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'EQUALITY_BINARY_OPERATORS')
+ PyJs_get_2739_._set_name(u'get')
+ PyJs_Object_2738_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2739_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'EQUALITY_BINARY_OPERATORS'), PyJs_Object_2738_)
+ @Js
+ def PyJs_get_2741_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2741_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'COMPARISON_BINARY_OPERATORS')
+ PyJs_get_2741_._set_name(u'get')
+ PyJs_Object_2740_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2741_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'COMPARISON_BINARY_OPERATORS'), PyJs_Object_2740_)
+ @Js
+ def PyJs_get_2743_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2743_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'BOOLEAN_BINARY_OPERATORS')
+ PyJs_get_2743_._set_name(u'get')
+ PyJs_Object_2742_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2743_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'BOOLEAN_BINARY_OPERATORS'), PyJs_Object_2742_)
+ @Js
+ def PyJs_get_2745_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2745_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'NUMBER_BINARY_OPERATORS')
+ PyJs_get_2745_._set_name(u'get')
+ PyJs_Object_2744_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2745_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'NUMBER_BINARY_OPERATORS'), PyJs_Object_2744_)
+ @Js
+ def PyJs_get_2747_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2747_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'BINARY_OPERATORS')
+ PyJs_get_2747_._set_name(u'get')
+ PyJs_Object_2746_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2747_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'BINARY_OPERATORS'), PyJs_Object_2746_)
+ @Js
+ def PyJs_get_2749_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2749_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'BOOLEAN_UNARY_OPERATORS')
+ PyJs_get_2749_._set_name(u'get')
+ PyJs_Object_2748_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2749_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'BOOLEAN_UNARY_OPERATORS'), PyJs_Object_2748_)
+ @Js
+ def PyJs_get_2751_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2751_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'NUMBER_UNARY_OPERATORS')
+ PyJs_get_2751_._set_name(u'get')
+ PyJs_Object_2750_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2751_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'NUMBER_UNARY_OPERATORS'), PyJs_Object_2750_)
+ @Js
+ def PyJs_get_2753_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2753_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'STRING_UNARY_OPERATORS')
+ PyJs_get_2753_._set_name(u'get')
+ PyJs_Object_2752_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2753_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'STRING_UNARY_OPERATORS'), PyJs_Object_2752_)
+ @Js
+ def PyJs_get_2755_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2755_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'UNARY_OPERATORS')
+ PyJs_get_2755_._set_name(u'get')
+ PyJs_Object_2754_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2755_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'UNARY_OPERATORS'), PyJs_Object_2754_)
+ @Js
+ def PyJs_get_2757_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2757_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'INHERIT_KEYS')
+ PyJs_get_2757_._set_name(u'get')
+ PyJs_Object_2756_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2757_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'INHERIT_KEYS'), PyJs_Object_2756_)
+ @Js
+ def PyJs_get_2759_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2759_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'BLOCK_SCOPED_SYMBOL')
+ PyJs_get_2759_._set_name(u'get')
+ PyJs_Object_2758_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2759_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'BLOCK_SCOPED_SYMBOL'), PyJs_Object_2758_)
+ @Js
+ def PyJs_get_2761_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2761_}, var)
+ var.registers([])
+ return var.get(u'_constants').get(u'NOT_LOCAL_BINDING')
+ PyJs_get_2761_._set_name(u'get')
+ PyJs_Object_2760_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2761_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'NOT_LOCAL_BINDING'), PyJs_Object_2760_)
+ var.get(u'exports').put(u'is', var.get(u'is'))
+ var.get(u'exports').put(u'isType', var.get(u'isType'))
+ var.get(u'exports').put(u'validate', var.get(u'validate'))
+ var.get(u'exports').put(u'shallowEqual', var.get(u'shallowEqual'))
+ var.get(u'exports').put(u'appendToMemberExpression', var.get(u'appendToMemberExpression'))
+ var.get(u'exports').put(u'prependToMemberExpression', var.get(u'prependToMemberExpression'))
+ var.get(u'exports').put(u'ensureBlock', var.get(u'ensureBlock'))
+ var.get(u'exports').put(u'clone', var.get(u'clone'))
+ var.get(u'exports').put(u'cloneWithoutLoc', var.get(u'cloneWithoutLoc'))
+ var.get(u'exports').put(u'cloneDeep', var.get(u'cloneDeep'))
+ var.get(u'exports').put(u'buildMatchMemberExpression', var.get(u'buildMatchMemberExpression'))
+ var.get(u'exports').put(u'removeComments', var.get(u'removeComments'))
+ var.get(u'exports').put(u'inheritsComments', var.get(u'inheritsComments'))
+ var.get(u'exports').put(u'inheritTrailingComments', var.get(u'inheritTrailingComments'))
+ var.get(u'exports').put(u'inheritLeadingComments', var.get(u'inheritLeadingComments'))
+ var.get(u'exports').put(u'inheritInnerComments', var.get(u'inheritInnerComments'))
+ var.get(u'exports').put(u'inherits', var.get(u'inherits'))
+ var.get(u'exports').put(u'assertNode', var.get(u'assertNode'))
+ var.get(u'exports').put(u'isNode', var.get(u'isNode'))
+ var.get(u'exports').put(u'traverseFast', var.get(u'traverseFast'))
+ var.get(u'exports').put(u'removeProperties', var.get(u'removeProperties'))
+ var.get(u'exports').put(u'removePropertiesDeep', var.get(u'removePropertiesDeep'))
+ var.put(u'_retrievers', var.get(u'require')(Js(u'./retrievers')))
+ @Js
+ def PyJs_get_2763_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2763_}, var)
+ var.registers([])
+ return var.get(u'_retrievers').get(u'getBindingIdentifiers')
+ PyJs_get_2763_._set_name(u'get')
+ PyJs_Object_2762_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2763_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'getBindingIdentifiers'), PyJs_Object_2762_)
+ @Js
+ def PyJs_get_2765_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2765_}, var)
+ var.registers([])
+ return var.get(u'_retrievers').get(u'getOuterBindingIdentifiers')
+ PyJs_get_2765_._set_name(u'get')
+ PyJs_Object_2764_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2765_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'getOuterBindingIdentifiers'), PyJs_Object_2764_)
+ var.put(u'_validators', var.get(u'require')(Js(u'./validators')))
+ @Js
+ def PyJs_get_2767_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2767_}, var)
+ var.registers([])
+ return var.get(u'_validators').get(u'isBinding')
+ PyJs_get_2767_._set_name(u'get')
+ PyJs_Object_2766_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2767_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'isBinding'), PyJs_Object_2766_)
+ @Js
+ def PyJs_get_2769_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2769_}, var)
+ var.registers([])
+ return var.get(u'_validators').get(u'isReferenced')
+ PyJs_get_2769_._set_name(u'get')
+ PyJs_Object_2768_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2769_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'isReferenced'), PyJs_Object_2768_)
+ @Js
+ def PyJs_get_2771_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2771_}, var)
+ var.registers([])
+ return var.get(u'_validators').get(u'isValidIdentifier')
+ PyJs_get_2771_._set_name(u'get')
+ PyJs_Object_2770_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2771_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'isValidIdentifier'), PyJs_Object_2770_)
+ @Js
+ def PyJs_get_2773_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2773_}, var)
+ var.registers([])
+ return var.get(u'_validators').get(u'isLet')
+ PyJs_get_2773_._set_name(u'get')
+ PyJs_Object_2772_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2773_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'isLet'), PyJs_Object_2772_)
+ @Js
+ def PyJs_get_2775_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2775_}, var)
+ var.registers([])
+ return var.get(u'_validators').get(u'isBlockScoped')
+ PyJs_get_2775_._set_name(u'get')
+ PyJs_Object_2774_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2775_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'isBlockScoped'), PyJs_Object_2774_)
+ @Js
+ def PyJs_get_2777_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2777_}, var)
+ var.registers([])
+ return var.get(u'_validators').get(u'isVar')
+ PyJs_get_2777_._set_name(u'get')
+ PyJs_Object_2776_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2777_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'isVar'), PyJs_Object_2776_)
+ @Js
+ def PyJs_get_2779_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2779_}, var)
+ var.registers([])
+ return var.get(u'_validators').get(u'isSpecifierDefault')
+ PyJs_get_2779_._set_name(u'get')
+ PyJs_Object_2778_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2779_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'isSpecifierDefault'), PyJs_Object_2778_)
+ @Js
+ def PyJs_get_2781_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2781_}, var)
+ var.registers([])
+ return var.get(u'_validators').get(u'isScope')
+ PyJs_get_2781_._set_name(u'get')
+ PyJs_Object_2780_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2781_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'isScope'), PyJs_Object_2780_)
+ @Js
+ def PyJs_get_2783_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2783_}, var)
+ var.registers([])
+ return var.get(u'_validators').get(u'isImmutable')
+ PyJs_get_2783_._set_name(u'get')
+ PyJs_Object_2782_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2783_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'isImmutable'), PyJs_Object_2782_)
+ var.put(u'_converters', var.get(u'require')(Js(u'./converters')))
+ @Js
+ def PyJs_get_2785_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2785_}, var)
+ var.registers([])
+ return var.get(u'_converters').get(u'toComputedKey')
+ PyJs_get_2785_._set_name(u'get')
+ PyJs_Object_2784_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2785_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'toComputedKey'), PyJs_Object_2784_)
+ @Js
+ def PyJs_get_2787_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2787_}, var)
+ var.registers([])
+ return var.get(u'_converters').get(u'toSequenceExpression')
+ PyJs_get_2787_._set_name(u'get')
+ PyJs_Object_2786_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2787_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'toSequenceExpression'), PyJs_Object_2786_)
+ @Js
+ def PyJs_get_2789_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2789_}, var)
+ var.registers([])
+ return var.get(u'_converters').get(u'toKeyAlias')
+ PyJs_get_2789_._set_name(u'get')
+ PyJs_Object_2788_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2789_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'toKeyAlias'), PyJs_Object_2788_)
+ @Js
+ def PyJs_get_2791_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2791_}, var)
+ var.registers([])
+ return var.get(u'_converters').get(u'toIdentifier')
+ PyJs_get_2791_._set_name(u'get')
+ PyJs_Object_2790_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2791_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'toIdentifier'), PyJs_Object_2790_)
+ @Js
+ def PyJs_get_2793_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2793_}, var)
+ var.registers([])
+ return var.get(u'_converters').get(u'toBindingIdentifierName')
+ PyJs_get_2793_._set_name(u'get')
+ PyJs_Object_2792_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2793_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'toBindingIdentifierName'), PyJs_Object_2792_)
+ @Js
+ def PyJs_get_2795_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2795_}, var)
+ var.registers([])
+ return var.get(u'_converters').get(u'toStatement')
+ PyJs_get_2795_._set_name(u'get')
+ PyJs_Object_2794_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2795_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'toStatement'), PyJs_Object_2794_)
+ @Js
+ def PyJs_get_2797_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2797_}, var)
+ var.registers([])
+ return var.get(u'_converters').get(u'toExpression')
+ PyJs_get_2797_._set_name(u'get')
+ PyJs_Object_2796_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2797_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'toExpression'), PyJs_Object_2796_)
+ @Js
+ def PyJs_get_2799_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2799_}, var)
+ var.registers([])
+ return var.get(u'_converters').get(u'toBlock')
+ PyJs_get_2799_._set_name(u'get')
+ PyJs_Object_2798_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2799_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'toBlock'), PyJs_Object_2798_)
+ @Js
+ def PyJs_get_2801_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2801_}, var)
+ var.registers([])
+ return var.get(u'_converters').get(u'valueToNode')
+ PyJs_get_2801_._set_name(u'get')
+ PyJs_Object_2800_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2801_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'valueToNode'), PyJs_Object_2800_)
+ var.put(u'_flow', var.get(u'require')(Js(u'./flow')))
+ @Js
+ def PyJs_get_2803_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2803_}, var)
+ var.registers([])
+ return var.get(u'_flow').get(u'createUnionTypeAnnotation')
+ PyJs_get_2803_._set_name(u'get')
+ PyJs_Object_2802_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2803_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'createUnionTypeAnnotation'), PyJs_Object_2802_)
+ @Js
+ def PyJs_get_2805_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2805_}, var)
+ var.registers([])
+ return var.get(u'_flow').get(u'removeTypeDuplicates')
+ PyJs_get_2805_._set_name(u'get')
+ PyJs_Object_2804_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2805_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'removeTypeDuplicates'), PyJs_Object_2804_)
+ @Js
+ def PyJs_get_2807_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'get':PyJs_get_2807_}, var)
+ var.registers([])
+ return var.get(u'_flow').get(u'createTypeAnnotationBasedOnTypeof')
+ PyJs_get_2807_._set_name(u'get')
+ PyJs_Object_2806_ = Js({u'enumerable':var.get(u'true'),u'get':PyJs_get_2807_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'createTypeAnnotationBasedOnTypeof'), PyJs_Object_2806_)
+ var.put(u'_toFastProperties', var.get(u'require')(Js(u'to-fast-properties')))
+ var.put(u'_toFastProperties2', var.get(u'_interopRequireDefault')(var.get(u'_toFastProperties')))
+ var.put(u'_compact', var.get(u'require')(Js(u'lodash/compact')))
+ var.put(u'_compact2', var.get(u'_interopRequireDefault')(var.get(u'_compact')))
+ var.put(u'_clone', var.get(u'require')(Js(u'lodash/clone')))
+ var.put(u'_clone2', var.get(u'_interopRequireDefault')(var.get(u'_clone')))
+ var.put(u'_each', var.get(u'require')(Js(u'lodash/each')))
+ var.put(u'_each2', var.get(u'_interopRequireDefault')(var.get(u'_each')))
+ var.put(u'_uniq', var.get(u'require')(Js(u'lodash/uniq')))
+ var.put(u'_uniq2', var.get(u'_interopRequireDefault')(var.get(u'_uniq')))
+ var.get(u'require')(Js(u'./definitions/init'))
+ var.put(u'_definitions', var.get(u'require')(Js(u'./definitions')))
+ var.put(u'_react2', var.get(u'require')(Js(u'./react')))
+ var.put(u'_react', var.get(u'_interopRequireWildcard')(var.get(u'_react2')))
+ pass
+ pass
+ var.put(u't', var.get(u'exports'))
+ pass
+ var.get(u'exports').put(u'VISITOR_KEYS', var.get(u'_definitions').get(u'VISITOR_KEYS'))
+ var.get(u'exports').put(u'ALIAS_KEYS', var.get(u'_definitions').get(u'ALIAS_KEYS'))
+ var.get(u'exports').put(u'NODE_FIELDS', var.get(u'_definitions').get(u'NODE_FIELDS'))
+ var.get(u'exports').put(u'BUILDER_KEYS', var.get(u'_definitions').get(u'BUILDER_KEYS'))
+ var.get(u'exports').put(u'DEPRECATED_KEYS', var.get(u'_definitions').get(u'DEPRECATED_KEYS'))
+ var.get(u'exports').put(u'react', var.get(u'_react'))
+ for PyJsTemp in var.get(u't').get(u'VISITOR_KEYS'):
+ var.put(u'type', PyJsTemp)
+ var.get(u'registerType')(var.get(u'type'))
+ PyJs_Object_2813_ = Js({})
+ var.get(u't').put(u'FLIPPED_ALIAS_KEYS', PyJs_Object_2813_)
+ @Js
+ def PyJs_anonymous_2814_(aliases, type, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments, u'aliases':aliases}, var)
+ var.registers([u'type', u'aliases'])
+ @Js
+ def PyJs_anonymous_2815_(alias, this, arguments, var=var):
+ var = Scope({u'this':this, u'alias':alias, u'arguments':arguments}, var)
+ var.registers([u'alias', u'types'])
+ var.put(u'types', var.get(u't').get(u'FLIPPED_ALIAS_KEYS').put(var.get(u'alias'), (var.get(u't').get(u'FLIPPED_ALIAS_KEYS').get(var.get(u'alias')) or Js([]))))
+ var.get(u'types').callprop(u'push', var.get(u'type'))
+ PyJs_anonymous_2815_._set_name(u'anonymous')
+ PyJsComma(Js(0.0),var.get(u'_each2').get(u'default'))(var.get(u'aliases'), PyJs_anonymous_2815_)
+ PyJs_anonymous_2814_._set_name(u'anonymous')
+ PyJsComma(Js(0.0),var.get(u'_each2').get(u'default'))(var.get(u't').get(u'ALIAS_KEYS'), PyJs_anonymous_2814_)
+ @Js
+ def PyJs_anonymous_2816_(types, type, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments, u'types':types}, var)
+ var.registers([u'type', u'types'])
+ var.get(u't').put((var.get(u'type').callprop(u'toUpperCase')+Js(u'_TYPES')), var.get(u'types'))
+ var.get(u'registerType')(var.get(u'type'))
+ PyJs_anonymous_2816_._set_name(u'anonymous')
+ PyJsComma(Js(0.0),var.get(u'_each2').get(u'default'))(var.get(u't').get(u'FLIPPED_ALIAS_KEYS'), PyJs_anonymous_2816_)
+ var.put(u'TYPES', var.get(u'exports').put(u'TYPES', PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u't').get(u'VISITOR_KEYS')).callprop(u'concat', PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u't').get(u'FLIPPED_ALIAS_KEYS'))).callprop(u'concat', PyJsComma(Js(0.0),var.get(u'_keys2').get(u'default'))(var.get(u't').get(u'DEPRECATED_KEYS')))))
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_2817_(keys, type, this, arguments, var=var):
+ var = Scope({u'keys':keys, u'this':this, u'type':type, u'arguments':arguments}, var)
+ var.registers([u'keys', u'builder', u'type'])
+ @Js
+ def PyJsHoisted_builder_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray2', u'field', u'i', u'_ref2', u'_i2', u'_key', u'key', u'arg', u'_iterator2'])
+ if (var.get(u'arguments').get(u'length')>var.get(u'keys').get(u'length')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create((((((Js(u't.')+var.get(u'type'))+Js(u': Too many arguments passed. Received '))+var.get(u'arguments').get(u'length'))+Js(u' but can receive '))+(Js(u'no more than ')+var.get(u'keys').get(u'length')))))
+ raise PyJsTempException
+ PyJs_Object_2818_ = Js({})
+ var.put(u'node', PyJs_Object_2818_)
+ var.get(u'node').put(u'type', var.get(u'type'))
+ var.put(u'i', Js(0.0))
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'keys'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator2'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'_key', var.get(u'_ref2'))
+ var.put(u'field', var.get(u't').get(u'NODE_FIELDS').get(var.get(u'type')).get(var.get(u'_key')))
+ var.put(u'arg', var.get(u'arguments').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))
+ if PyJsStrictEq(var.get(u'arg'),var.get(u'undefined')):
+ var.put(u'arg', PyJsComma(Js(0.0),var.get(u'_clone2').get(u'default'))(var.get(u'field').get(u'default')))
+ var.get(u'node').put(var.get(u'_key'), var.get(u'arg'))
+
+ for PyJsTemp in var.get(u'node'):
+ var.put(u'key', PyJsTemp)
+ var.get(u'validate')(var.get(u'node'), var.get(u'key'), var.get(u'node').get(var.get(u'key')))
+ return var.get(u'node')
+ PyJsHoisted_builder_.func_name = u'builder'
+ var.put(u'builder', PyJsHoisted_builder_)
+ pass
+ var.get(u't').put(var.get(u'type'), var.get(u'builder'))
+ var.get(u't').put((var.get(u'type').get(u'0').callprop(u'toLowerCase')+var.get(u'type').callprop(u'slice', Js(1.0))), var.get(u'builder'))
+ PyJs_anonymous_2817_._set_name(u'anonymous')
+ PyJsComma(Js(0.0),var.get(u'_each2').get(u'default'))(var.get(u't').get(u'BUILDER_KEYS'), PyJs_anonymous_2817_)
+ @Js
+ def PyJs__loop_2819_(_type, this, arguments, var=var):
+ var = Scope({u'this':this, u'_type':_type, u'_loop':PyJs__loop_2819_, u'arguments':arguments}, var)
+ var.registers([u'_type', u'newType', u'proxy'])
+ @Js
+ def PyJsHoisted_proxy_(fn, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'fn':fn}, var)
+ var.registers([u'fn'])
+ @Js
+ def PyJs_anonymous_2820_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'console').callprop(u'trace', (((Js(u'The node type ')+var.get(u'_type'))+Js(u' has been renamed to '))+var.get(u'newType')))
+ return var.get(u'fn').callprop(u'apply', var.get(u"this"), var.get(u'arguments'))
+ PyJs_anonymous_2820_._set_name(u'anonymous')
+ return PyJs_anonymous_2820_
+ PyJsHoisted_proxy_.func_name = u'proxy'
+ var.put(u'proxy', PyJsHoisted_proxy_)
+ var.put(u'newType', var.get(u't').get(u'DEPRECATED_KEYS').get(var.get(u'_type')))
+ pass
+ var.get(u't').put(var.get(u'_type'), var.get(u't').put((var.get(u'_type').get(u'0').callprop(u'toLowerCase')+var.get(u'_type').callprop(u'slice', Js(1.0))), var.get(u'proxy')(var.get(u't').get(var.get(u'newType')))))
+ var.get(u't').put((Js(u'is')+var.get(u'_type')), var.get(u'proxy')(var.get(u't').get((Js(u'is')+var.get(u'newType')))))
+ var.get(u't').put((Js(u'assert')+var.get(u'_type')), var.get(u'proxy')(var.get(u't').get((Js(u'assert')+var.get(u'newType')))))
+ PyJs__loop_2819_._set_name(u'_loop')
+ var.put(u'_loop', PyJs__loop_2819_)
+ for PyJsTemp in var.get(u't').get(u'DEPRECATED_KEYS'):
+ var.put(u'_type', PyJsTemp)
+ var.get(u'_loop')(var.get(u'_type'))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ PyJsComma(Js(0.0),var.get(u'_toFastProperties2').get(u'default'))(var.get(u't'))
+ PyJsComma(Js(0.0),var.get(u'_toFastProperties2').get(u'default'))(var.get(u't').get(u'VISITOR_KEYS'))
+ pass
+ var.put(u'CLEAR_KEYS', Js([Js(u'tokens'), Js(u'start'), Js(u'end'), Js(u'loc'), Js(u'raw'), Js(u'rawValue')]))
+ var.put(u'CLEAR_KEYS_PLUS_COMMENTS', var.get(u't').get(u'COMMENT_KEYS').callprop(u'concat', Js([Js(u'comments')])).callprop(u'concat', var.get(u'CLEAR_KEYS')))
+ pass
+ pass
+PyJs_anonymous_2718_._set_name(u'anonymous')
+PyJs_Object_2826_ = Js({u'./constants':Js(247.0),u'./converters':Js(248.0),u'./definitions':Js(253.0),u'./definitions/init':Js(254.0),u'./flow':Js(257.0),u'./react':Js(259.0),u'./retrievers':Js(260.0),u'./validators':Js(261.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'babel-runtime/core-js/json/stringify':Js(97.0),u'babel-runtime/core-js/object/get-own-property-symbols':Js(102.0),u'babel-runtime/core-js/object/keys':Js(103.0),u'lodash/clone':Js(438.0),u'lodash/compact':Js(441.0),u'lodash/each':Js(443.0),u'lodash/uniq':Js(495.0),u'to-fast-properties':Js(522.0)})
+@Js
+def PyJs_anonymous_2827_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'_interopRequireWildcard', u'_index', u'cleanJSXElementLiteralChild', u'require', u'module', u'buildChildren', u't', u'isReactComponent', u'isCompatTag'])
+ @Js
+ def PyJsHoisted_cleanJSXElementLiteralChild_(child, args, this, arguments, var=var):
+ var = Scope({u'this':this, u'args':args, u'arguments':arguments, u'child':child}, var)
+ var.registers([u'isLastNonEmptyLine', u'str', u'i', u'isLastLine', u'args', u'lines', u'lastNonEmptyLine', u'isFirstLine', u'_i', u'child', u'line', u'trimmedLine'])
+ var.put(u'lines', var.get(u'child').get(u'value').callprop(u'split', JsRegExp(u'/\\r\\n|\\n|\\r/')))
+ var.put(u'lastNonEmptyLine', Js(0.0))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=Js(0.0)):
+ return var.get(u'true')
+ else:
+ if PyJsStrictEq(var.get(u'val'),var.get(u'node')):
+ return var.get(u'true')
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ return Js(False)
+ PyJsHoisted_isBinding_.func_name = u'isBinding'
+ var.put(u'isBinding', PyJsHoisted_isBinding_)
+ @Js
+ def PyJsHoisted_isReferenced_(node, parent, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'parent':parent}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'parent', u'param', u'_i', u'_ref'])
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'parent').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'BindExpression')):
+ SWITCHED = True
+ return (PyJsStrictEq(var.get(u'parent').get(u'object'),var.get(u'node')) or PyJsStrictEq(var.get(u'parent').get(u'callee'),var.get(u'node')))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'MemberExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'JSXMemberExpression')):
+ SWITCHED = True
+ if (PyJsStrictEq(var.get(u'parent').get(u'property'),var.get(u'node')) and var.get(u'parent').get(u'computed')):
+ return var.get(u'true')
+ else:
+ if PyJsStrictEq(var.get(u'parent').get(u'object'),var.get(u'node')):
+ return var.get(u'true')
+ else:
+ return Js(False)
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'MetaProperty')):
+ SWITCHED = True
+ return Js(False)
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ObjectProperty')):
+ SWITCHED = True
+ if PyJsStrictEq(var.get(u'parent').get(u'key'),var.get(u'node')):
+ return var.get(u'parent').get(u'computed')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'VariableDeclarator')):
+ SWITCHED = True
+ return PyJsStrictNeq(var.get(u'parent').get(u'id'),var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ArrowFunctionExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'FunctionDeclaration')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'FunctionExpression')):
+ SWITCHED = True
+ #for JS loop
+ var.put(u'_iterator', var.get(u'parent').get(u'params'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else PyJsComma(Js(0.0),var.get(u'_getIterator3').get(u'default'))(var.get(u'_iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'param', var.get(u'_ref'))
+ if PyJsStrictEq(var.get(u'param'),var.get(u'node')):
+ return Js(False)
+
+ return PyJsStrictNeq(var.get(u'parent').get(u'id'),var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ExportSpecifier')):
+ SWITCHED = True
+ if var.get(u'parent').get(u'source'):
+ return Js(False)
+ else:
+ return PyJsStrictEq(var.get(u'parent').get(u'local'),var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ExportNamespaceSpecifier')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ExportDefaultSpecifier')):
+ SWITCHED = True
+ return Js(False)
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'JSXAttribute')):
+ SWITCHED = True
+ return PyJsStrictNeq(var.get(u'parent').get(u'name'),var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ClassProperty')):
+ SWITCHED = True
+ if PyJsStrictEq(var.get(u'parent').get(u'key'),var.get(u'node')):
+ return var.get(u'parent').get(u'computed')
+ else:
+ return PyJsStrictEq(var.get(u'parent').get(u'value'),var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ImportDefaultSpecifier')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ImportNamespaceSpecifier')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ImportSpecifier')):
+ SWITCHED = True
+ return Js(False)
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ClassDeclaration')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ClassExpression')):
+ SWITCHED = True
+ return PyJsStrictNeq(var.get(u'parent').get(u'id'),var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ClassMethod')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ObjectMethod')):
+ SWITCHED = True
+ return (PyJsStrictEq(var.get(u'parent').get(u'key'),var.get(u'node')) and var.get(u'parent').get(u'computed'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'LabeledStatement')):
+ SWITCHED = True
+ return Js(False)
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'CatchClause')):
+ SWITCHED = True
+ return PyJsStrictNeq(var.get(u'parent').get(u'param'),var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'RestElement')):
+ SWITCHED = True
+ return Js(False)
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'AssignmentExpression')):
+ SWITCHED = True
+ return PyJsStrictEq(var.get(u'parent').get(u'right'),var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'AssignmentPattern')):
+ SWITCHED = True
+ return PyJsStrictEq(var.get(u'parent').get(u'right'),var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ObjectPattern')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ArrayPattern')):
+ SWITCHED = True
+ return Js(False)
+ SWITCHED = True
+ break
+ return var.get(u'true')
+ PyJsHoisted_isReferenced_.func_name = u'isReferenced'
+ var.put(u'isReferenced', PyJsHoisted_isReferenced_)
+ @Js
+ def PyJsHoisted_isValidIdentifier_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ if (PyJsStrictNeq(var.get(u'name',throw=False).typeof(),Js(u'string')) or var.get(u'_esutils2').get(u'default').get(u'keyword').callprop(u'isReservedWordES6', var.get(u'name'), var.get(u'true'))):
+ return Js(False)
+ else:
+ return var.get(u'_esutils2').get(u'default').get(u'keyword').callprop(u'isIdentifierNameES6', var.get(u'name'))
+ PyJsHoisted_isValidIdentifier_.func_name = u'isValidIdentifier'
+ var.put(u'isValidIdentifier', PyJsHoisted_isValidIdentifier_)
+ @Js
+ def PyJsHoisted_isVar_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ PyJs_Object_2838_ = Js({u'kind':Js(u'var')})
+ return (var.get(u't').callprop(u'isVariableDeclaration', var.get(u'node'), PyJs_Object_2838_) and var.get(u'node').get(var.get(u'_constants').get(u'BLOCK_SCOPED_SYMBOL')).neg())
+ PyJsHoisted_isVar_.func_name = u'isVar'
+ var.put(u'isVar', PyJsHoisted_isVar_)
+ @Js
+ def PyJsHoisted__interopRequireDefault_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ PyJs_Object_2837_ = Js({u'default':var.get(u'obj')})
+ return (var.get(u'obj') if (var.get(u'obj') and var.get(u'obj').get(u'__esModule')) else PyJs_Object_2837_)
+ PyJsHoisted__interopRequireDefault_.func_name = u'_interopRequireDefault'
+ var.put(u'_interopRequireDefault', PyJsHoisted__interopRequireDefault_)
+ @Js
+ def PyJsHoisted_isLet_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return (var.get(u't').callprop(u'isVariableDeclaration', var.get(u'node')) and (PyJsStrictNeq(var.get(u'node').get(u'kind'),Js(u'var')) or var.get(u'node').get(var.get(u'_constants').get(u'BLOCK_SCOPED_SYMBOL'))))
+ PyJsHoisted_isLet_.func_name = u'isLet'
+ var.put(u'isLet', PyJsHoisted_isLet_)
+ @Js
+ def PyJsHoisted_isSpecifierDefault_(specifier, this, arguments, var=var):
+ var = Scope({u'this':this, u'specifier':specifier, u'arguments':arguments}, var)
+ var.registers([u'specifier'])
+ PyJs_Object_2839_ = Js({u'name':Js(u'default')})
+ return (var.get(u't').callprop(u'isImportDefaultSpecifier', var.get(u'specifier')) or var.get(u't').callprop(u'isIdentifier', (var.get(u'specifier').get(u'imported') or var.get(u'specifier').get(u'exported')), PyJs_Object_2839_))
+ PyJsHoisted_isSpecifierDefault_.func_name = u'isSpecifierDefault'
+ var.put(u'isSpecifierDefault', PyJsHoisted_isSpecifierDefault_)
+ @Js
+ def PyJsHoisted_isBlockScoped_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return ((var.get(u't').callprop(u'isFunctionDeclaration', var.get(u'node')) or var.get(u't').callprop(u'isClassDeclaration', var.get(u'node'))) or var.get(u't').callprop(u'isLet', var.get(u'node')))
+ PyJsHoisted_isBlockScoped_.func_name = u'isBlockScoped'
+ var.put(u'isBlockScoped', PyJsHoisted_isBlockScoped_)
+ Js(u'use strict')
+ var.get(u'exports').put(u'__esModule', var.get(u'true'))
+ var.put(u'_getIterator2', var.get(u'require')(Js(u'babel-runtime/core-js/get-iterator')))
+ var.put(u'_getIterator3', var.get(u'_interopRequireDefault')(var.get(u'_getIterator2')))
+ var.get(u'exports').put(u'isBinding', var.get(u'isBinding'))
+ var.get(u'exports').put(u'isReferenced', var.get(u'isReferenced'))
+ var.get(u'exports').put(u'isValidIdentifier', var.get(u'isValidIdentifier'))
+ var.get(u'exports').put(u'isLet', var.get(u'isLet'))
+ var.get(u'exports').put(u'isBlockScoped', var.get(u'isBlockScoped'))
+ var.get(u'exports').put(u'isVar', var.get(u'isVar'))
+ var.get(u'exports').put(u'isSpecifierDefault', var.get(u'isSpecifierDefault'))
+ var.get(u'exports').put(u'isScope', var.get(u'isScope'))
+ var.get(u'exports').put(u'isImmutable', var.get(u'isImmutable'))
+ var.put(u'_retrievers', var.get(u'require')(Js(u'./retrievers')))
+ var.put(u'_esutils', var.get(u'require')(Js(u'esutils')))
+ var.put(u'_esutils2', var.get(u'_interopRequireDefault')(var.get(u'_esutils')))
+ var.put(u'_index', var.get(u'require')(Js(u'./index')))
+ var.put(u't', var.get(u'_interopRequireWildcard')(var.get(u'_index')))
+ var.put(u'_constants', var.get(u'require')(Js(u'./constants')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_2835_._set_name(u'anonymous')
+PyJs_Object_2841_ = Js({u'./constants':Js(247.0),u'./index':Js(258.0),u'./retrievers':Js(260.0),u'babel-runtime/core-js/get-iterator':Js(96.0),u'esutils':Js(276.0)})
+@Js
+def PyJs_anonymous_2842_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'TokContext', u'reservedWords', u'parse$1', u'pp$4', u'isKeyword$1', u'getLineInfo', u'astralIdentifierStartCodes', u'isNewLine', u'module', u'_typeof', u'isIdentifierChar', u'State', u'plugins', u'keywords', u'getOptions', u'Node', u'pp$8', u'isIdentifierStart', u'TokenType', u'types$1', u'beforeExpr', u'nonASCIIidentifierStartChars', u'DECIMAL_NUMBER', u'_inherits', u'flowPlugin', u'_possibleConstructorReturn', u'commentKeys', u'XHTMLEntities', u'isInAstralSet', u'empty', u'astralIdentifierCodes', u'exports', u'nonASCIIidentifierChars', u'binop', u'startsExpr', u'lineBreakG', u'pp', u'jsxPlugin', u'_classCallCheck$6', u'_classCallCheck$4', u'_classCallCheck$5', u'_classCallCheck$2', u'_classCallCheck$3', u'_classCallCheck$1', u'Position', u'getQualifiedJSXName', u'types', u'switchLabel', u'nonASCIIidentifier', u'lineBreak', u'HEX_NUMBER', u'last', u'loopLabel', u'Tokenizer', u'defaultOptions', u'_classCallCheck', u'require', u'Parser', u'Token', u'nonASCIIidentifierStart', u'makePredicate', u'nonASCIIwhitespace', u'kw', u'codePointToString', u'finishNodeAt', u'pp$1', u'pp$2', u'pp$3', u'SourceLocation', u'pp$5', u'pp$6', u'pp$7'])
+ @Js
+ def PyJsHoisted_codePointToString_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code'])
+ if (var.get(u'code')<=Js(65535)):
+ return var.get(u'String').callprop(u'fromCharCode', var.get(u'code'))
+ else:
+ return var.get(u'String').callprop(u'fromCharCode', (((var.get(u'code')-Js(65536))>>Js(10.0))+Js(55296)), (((var.get(u'code')-Js(65536))&Js(1023.0))+Js(56320)))
+ PyJsHoisted_codePointToString_.func_name = u'codePointToString'
+ var.put(u'codePointToString', PyJsHoisted_codePointToString_)
+ @Js
+ def PyJsHoisted_isNewLine_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code'])
+ return (((PyJsStrictEq(var.get(u'code'),Js(10.0)) or PyJsStrictEq(var.get(u'code'),Js(13.0))) or PyJsStrictEq(var.get(u'code'),Js(8232))) or PyJsStrictEq(var.get(u'code'),Js(8233)))
+ PyJsHoisted_isNewLine_.func_name = u'isNewLine'
+ var.put(u'isNewLine', PyJsHoisted_isNewLine_)
+ @Js
+ def PyJsHoisted_isIdentifierChar_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code'])
+ if (var.get(u'code')=Js(170)) and var.get(u'nonASCIIidentifier').callprop(u'test', var.get(u'String').callprop(u'fromCharCode', var.get(u'code'))))
+ return (var.get(u'isInAstralSet')(var.get(u'code'), var.get(u'astralIdentifierStartCodes')) or var.get(u'isInAstralSet')(var.get(u'code'), var.get(u'astralIdentifierCodes')))
+ PyJsHoisted_isIdentifierChar_.func_name = u'isIdentifierChar'
+ var.put(u'isIdentifierChar', PyJsHoisted_isIdentifierChar_)
+ @Js
+ def PyJsHoisted_getOptions_(opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'opts':opts}, var)
+ var.registers([u'opts', u'options', u'key'])
+ PyJs_Object_2847_ = Js({})
+ var.put(u'options', PyJs_Object_2847_)
+ for PyJsTemp in var.get(u'defaultOptions'):
+ var.put(u'key', PyJsTemp)
+ var.get(u'options').put(var.get(u'key'), (var.get(u'opts').get(var.get(u'key')) if (var.get(u'opts') and var.get(u'opts').contains(var.get(u'key'))) else var.get(u'defaultOptions').get(var.get(u'key'))))
+ return var.get(u'options')
+ PyJsHoisted_getOptions_.func_name = u'getOptions'
+ var.put(u'getOptions', PyJsHoisted_getOptions_)
+ @Js
+ def PyJsHoisted_isIdentifierStart_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code'])
+ if (var.get(u'code')=Js(170)) and var.get(u'nonASCIIidentifierStart').callprop(u'test', var.get(u'String').callprop(u'fromCharCode', var.get(u'code'))))
+ return var.get(u'isInAstralSet')(var.get(u'code'), var.get(u'astralIdentifierStartCodes'))
+ PyJsHoisted_isIdentifierStart_.func_name = u'isIdentifierStart'
+ var.put(u'isIdentifierStart', PyJsHoisted_isIdentifierStart_)
+ @Js
+ def PyJsHoisted__inherits_(subClass, superClass, this, arguments, var=var):
+ var = Scope({u'this':this, u'superClass':superClass, u'subClass':subClass, u'arguments':arguments}, var)
+ var.registers([u'superClass', u'subClass'])
+ if (PyJsStrictNeq(var.get(u'superClass',throw=False).typeof(),Js(u'function')) and PyJsStrictNeq(var.get(u'superClass'),var.get(u"null"))):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((Js(u'Super expression must either be null or a function, not ')+var.get(u'superClass',throw=False).typeof())))
+ raise PyJsTempException
+ PyJs_Object_2937_ = Js({u'value':var.get(u'subClass'),u'enumerable':Js(False),u'writable':var.get(u'true'),u'configurable':var.get(u'true')})
+ PyJs_Object_2936_ = Js({u'constructor':PyJs_Object_2937_})
+ var.get(u'subClass').put(u'prototype', var.get(u'Object').callprop(u'create', (var.get(u'superClass') and var.get(u'superClass').get(u'prototype')), PyJs_Object_2936_))
+ if var.get(u'superClass'):
+ (var.get(u'Object').callprop(u'setPrototypeOf', var.get(u'subClass'), var.get(u'superClass')) if var.get(u'Object').get(u'setPrototypeOf') else var.get(u'subClass').put(u'__proto__', var.get(u'superClass')))
+ PyJsHoisted__inherits_.func_name = u'_inherits'
+ var.put(u'_inherits', PyJsHoisted__inherits_)
+ @Js
+ def PyJsHoisted__possibleConstructorReturn_(self, call, this, arguments, var=var):
+ var = Scope({u'this':this, u'self':self, u'call':call, u'arguments':arguments}, var)
+ var.registers([u'self', u'call'])
+ if var.get(u'self').neg():
+ PyJsTempException = JsToPyException(var.get(u'ReferenceError').create(Js(u"this hasn't been initialised - super() hasn't been called")))
+ raise PyJsTempException
+ return (var.get(u'call') if (var.get(u'call') and (PyJsStrictEq(var.get(u'call',throw=False).typeof(),Js(u'object')) or PyJsStrictEq(var.get(u'call',throw=False).typeof(),Js(u'function')))) else var.get(u'self'))
+ PyJsHoisted__possibleConstructorReturn_.func_name = u'_possibleConstructorReturn'
+ var.put(u'_possibleConstructorReturn', PyJsHoisted__possibleConstructorReturn_)
+ @Js
+ def PyJsHoisted_isInAstralSet_(code, set, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'set':set, u'arguments':arguments}, var)
+ var.registers([u'i', u'code', u'set', u'pos'])
+ var.put(u'pos', Js(65536))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')var.get(u'code')):
+ return Js(False)
+ var.put(u'pos', var.get(u'set').get((var.get(u'i')+Js(1.0))), u'+')
+ if (var.get(u'pos')>=var.get(u'code')):
+ return var.get(u'true')
+ finally:
+ var.put(u'i', Js(2.0), u'+')
+ PyJsHoisted_isInAstralSet_.func_name = u'isInAstralSet'
+ var.put(u'isInAstralSet', PyJsHoisted_isInAstralSet_)
+ @Js
+ def PyJsHoisted_binop_(name, prec, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'prec':prec, u'arguments':arguments}, var)
+ var.registers([u'name', u'prec'])
+ PyJs_Object_2850_ = Js({u'beforeExpr':var.get(u'true'),u'binop':var.get(u'prec')})
+ return var.get(u'TokenType').create(var.get(u'name'), PyJs_Object_2850_)
+ PyJsHoisted_binop_.func_name = u'binop'
+ var.put(u'binop', PyJsHoisted_binop_)
+ @Js
+ def PyJsHoistedNonPyName(instance, Constructor, this, arguments, var=var):
+ var = Scope({u'this':this, u'instance':instance, u'arguments':arguments, u'Constructor':Constructor}, var)
+ var.registers([u'instance', u'Constructor'])
+ if var.get(u'instance').instanceof(var.get(u'Constructor')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Cannot call a class as a function')))
+ raise PyJsTempException
+ PyJsHoistedNonPyName.func_name = u'_classCallCheck$6'
+ var.put(u'_classCallCheck$6', PyJsHoistedNonPyName)
+ @Js
+ def PyJsHoisted_finishNodeAt_(node, type, pos, loc, this, arguments, var=var):
+ var = Scope({u'node':node, u'loc':loc, u'arguments':arguments, u'this':this, u'type':type, u'pos':pos}, var)
+ var.registers([u'node', u'loc', u'type', u'pos'])
+ var.get(u'node').put(u'type', var.get(u'type'))
+ var.get(u'node').put(u'end', var.get(u'pos'))
+ var.get(u'node').get(u'loc').put(u'end', var.get(u'loc'))
+ var.get(u"this").callprop(u'processComment', var.get(u'node'))
+ return var.get(u'node')
+ PyJsHoisted_finishNodeAt_.func_name = u'finishNodeAt'
+ var.put(u'finishNodeAt', PyJsHoisted_finishNodeAt_)
+ @Js
+ def PyJsHoistedNonPyName(instance, Constructor, this, arguments, var=var):
+ var = Scope({u'this':this, u'instance':instance, u'arguments':arguments, u'Constructor':Constructor}, var)
+ var.registers([u'instance', u'Constructor'])
+ if var.get(u'instance').instanceof(var.get(u'Constructor')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Cannot call a class as a function')))
+ raise PyJsTempException
+ PyJsHoistedNonPyName.func_name = u'_classCallCheck$5'
+ var.put(u'_classCallCheck$5', PyJsHoistedNonPyName)
+ @Js
+ def PyJsHoistedNonPyName(instance, Constructor, this, arguments, var=var):
+ var = Scope({u'this':this, u'instance':instance, u'arguments':arguments, u'Constructor':Constructor}, var)
+ var.registers([u'instance', u'Constructor'])
+ if var.get(u'instance').instanceof(var.get(u'Constructor')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Cannot call a class as a function')))
+ raise PyJsTempException
+ PyJsHoistedNonPyName.func_name = u'_classCallCheck$2'
+ var.put(u'_classCallCheck$2', PyJsHoistedNonPyName)
+ @Js
+ def PyJsHoistedNonPyName(instance, Constructor, this, arguments, var=var):
+ var = Scope({u'this':this, u'instance':instance, u'arguments':arguments, u'Constructor':Constructor}, var)
+ var.registers([u'instance', u'Constructor'])
+ if var.get(u'instance').instanceof(var.get(u'Constructor')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Cannot call a class as a function')))
+ raise PyJsTempException
+ PyJsHoistedNonPyName.func_name = u'_classCallCheck$3'
+ var.put(u'_classCallCheck$3', PyJsHoistedNonPyName)
+ @Js
+ def PyJsHoistedNonPyName(instance, Constructor, this, arguments, var=var):
+ var = Scope({u'this':this, u'instance':instance, u'arguments':arguments, u'Constructor':Constructor}, var)
+ var.registers([u'instance', u'Constructor'])
+ if var.get(u'instance').instanceof(var.get(u'Constructor')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Cannot call a class as a function')))
+ raise PyJsTempException
+ PyJsHoistedNonPyName.func_name = u'_classCallCheck$1'
+ var.put(u'_classCallCheck$1', PyJsHoistedNonPyName)
+ @Js
+ def PyJsHoisted_getQualifiedJSXName_(object, this, arguments, var=var):
+ var = Scope({u'this':this, u'object':object, u'arguments':arguments}, var)
+ var.registers([u'object'])
+ if PyJsStrictEq(var.get(u'object').get(u'type'),Js(u'JSXIdentifier')):
+ return var.get(u'object').get(u'name')
+ if PyJsStrictEq(var.get(u'object').get(u'type'),Js(u'JSXNamespacedName')):
+ return ((var.get(u'object').get(u'namespace').get(u'name')+Js(u':'))+var.get(u'object').get(u'name').get(u'name'))
+ if PyJsStrictEq(var.get(u'object').get(u'type'),Js(u'JSXMemberExpression')):
+ return ((var.get(u'getQualifiedJSXName')(var.get(u'object').get(u'object'))+Js(u'.'))+var.get(u'getQualifiedJSXName')(var.get(u'object').get(u'property')))
+ PyJsHoisted_getQualifiedJSXName_.func_name = u'getQualifiedJSXName'
+ var.put(u'getQualifiedJSXName', PyJsHoisted_getQualifiedJSXName_)
+ @Js
+ def PyJsHoisted_getLineInfo_(input, offset, this, arguments, var=var):
+ var = Scope({u'this':this, u'input':input, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'input', u'line', u'cur', u'match', u'offset'])
+ #for JS loop
+ var.put(u'line', Js(1.0))
+ var.put(u'cur', Js(0.0))
+ while 1:
+ var.get(u'lineBreakG').put(u'lastIndex', var.get(u'cur'))
+ var.put(u'match', var.get(u'lineBreakG').callprop(u'exec', var.get(u'input')))
+ if (var.get(u'match') and (var.get(u'match').get(u'index')=Js(0.0))
+ PyJs_anonymous_2844_._set_name(u'anonymous')
+ return PyJs_anonymous_2844_
+ PyJsHoisted_makePredicate_.func_name = u'makePredicate'
+ var.put(u'makePredicate', PyJsHoisted_makePredicate_)
+ @Js
+ def PyJsHoisted_kw_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'options', u'name'])
+ PyJs_Object_2866_ = Js({})
+ var.put(u'options', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else PyJs_Object_2866_))
+ var.get(u'options').put(u'keyword', var.get(u'name'))
+ var.get(u'keywords').put(var.get(u'name'), var.get(u'types').put((Js(u'_')+var.get(u'name')), var.get(u'TokenType').create(var.get(u'name'), var.get(u'options'))))
+ PyJsHoisted_kw_.func_name = u'kw'
+ var.put(u'kw', PyJsHoisted_kw_)
+ @Js
+ def PyJsHoisted__classCallCheck_(instance, Constructor, this, arguments, var=var):
+ var = Scope({u'this':this, u'instance':instance, u'arguments':arguments, u'Constructor':Constructor}, var)
+ var.registers([u'instance', u'Constructor'])
+ if var.get(u'instance').instanceof(var.get(u'Constructor')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Cannot call a class as a function')))
+ raise PyJsTempException
+ PyJsHoisted__classCallCheck_.func_name = u'_classCallCheck'
+ var.put(u'_classCallCheck', PyJsHoisted__classCallCheck_)
+ Js(u'use strict')
+ PyJs_Object_2843_ = Js({u'value':var.get(u'true')})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'__esModule'), PyJs_Object_2843_)
+ pass
+ PyJs_Object_2845_ = Js({u'6':var.get(u'makePredicate')(Js(u'enum await')),u'strict':var.get(u'makePredicate')(Js(u'implements interface let package private protected public static yield')),u'strictBind':var.get(u'makePredicate')(Js(u'eval arguments'))})
+ var.put(u'reservedWords', PyJs_Object_2845_)
+ var.put(u'isKeyword$1', var.get(u'makePredicate')(Js(u'break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this let const class extends export import yield super')))
+ var.put(u'nonASCIIidentifierStartChars', Js(u'\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\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\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\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\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc'))
+ var.put(u'nonASCIIidentifierChars', Js(u'\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d4-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d01-\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f'))
+ var.put(u'nonASCIIidentifierStart', var.get(u'RegExp').create(((Js(u'[')+var.get(u'nonASCIIidentifierStartChars'))+Js(u']'))))
+ var.put(u'nonASCIIidentifier', var.get(u'RegExp').create((((Js(u'[')+var.get(u'nonASCIIidentifierStartChars'))+var.get(u'nonASCIIidentifierChars'))+Js(u']'))))
+ var.put(u'nonASCIIidentifierStartChars', var.put(u'nonASCIIidentifierChars', var.get(u"null")))
+ var.put(u'astralIdentifierStartCodes', Js([Js(0.0), Js(11.0), Js(2.0), Js(25.0), Js(2.0), Js(18.0), Js(2.0), Js(1.0), Js(2.0), Js(14.0), Js(3.0), Js(13.0), Js(35.0), Js(122.0), Js(70.0), Js(52.0), Js(268.0), Js(28.0), Js(4.0), Js(48.0), Js(48.0), Js(31.0), Js(17.0), Js(26.0), Js(6.0), Js(37.0), Js(11.0), Js(29.0), Js(3.0), Js(35.0), Js(5.0), Js(7.0), Js(2.0), Js(4.0), Js(43.0), Js(157.0), Js(19.0), Js(35.0), Js(5.0), Js(35.0), Js(5.0), Js(39.0), Js(9.0), Js(51.0), Js(157.0), Js(310.0), Js(10.0), Js(21.0), Js(11.0), Js(7.0), Js(153.0), Js(5.0), Js(3.0), Js(0.0), Js(2.0), Js(43.0), Js(2.0), Js(1.0), Js(4.0), Js(0.0), Js(3.0), Js(22.0), Js(11.0), Js(22.0), Js(10.0), Js(30.0), Js(66.0), Js(18.0), Js(2.0), Js(1.0), Js(11.0), Js(21.0), Js(11.0), Js(25.0), Js(71.0), Js(55.0), Js(7.0), Js(1.0), Js(65.0), Js(0.0), Js(16.0), Js(3.0), Js(2.0), Js(2.0), Js(2.0), Js(26.0), Js(45.0), Js(28.0), Js(4.0), Js(28.0), Js(36.0), Js(7.0), Js(2.0), Js(27.0), Js(28.0), Js(53.0), Js(11.0), Js(21.0), Js(11.0), Js(18.0), Js(14.0), Js(17.0), Js(111.0), Js(72.0), Js(56.0), Js(50.0), Js(14.0), Js(50.0), Js(785.0), Js(52.0), Js(76.0), Js(44.0), Js(33.0), Js(24.0), Js(27.0), Js(35.0), Js(42.0), Js(34.0), Js(4.0), Js(0.0), Js(13.0), Js(47.0), Js(15.0), Js(3.0), Js(22.0), Js(0.0), Js(2.0), Js(0.0), Js(36.0), Js(17.0), Js(2.0), Js(24.0), Js(85.0), Js(6.0), Js(2.0), Js(0.0), Js(2.0), Js(3.0), Js(2.0), Js(14.0), Js(2.0), Js(9.0), Js(8.0), Js(46.0), Js(39.0), Js(7.0), Js(3.0), Js(1.0), Js(3.0), Js(21.0), Js(2.0), Js(6.0), Js(2.0), Js(1.0), Js(2.0), Js(4.0), Js(4.0), Js(0.0), Js(19.0), Js(0.0), Js(13.0), Js(4.0), Js(159.0), Js(52.0), Js(19.0), Js(3.0), Js(54.0), Js(47.0), Js(21.0), Js(1.0), Js(2.0), Js(0.0), Js(185.0), Js(46.0), Js(42.0), Js(3.0), Js(37.0), Js(47.0), Js(21.0), Js(0.0), Js(60.0), Js(42.0), Js(86.0), Js(25.0), Js(391.0), Js(63.0), Js(32.0), Js(0.0), Js(449.0), Js(56.0), Js(264.0), Js(8.0), Js(2.0), Js(36.0), Js(18.0), Js(0.0), Js(50.0), Js(29.0), Js(881.0), Js(921.0), Js(103.0), Js(110.0), Js(18.0), Js(195.0), Js(2749.0), Js(1070.0), Js(4050.0), Js(582.0), Js(8634.0), Js(568.0), Js(8.0), Js(30.0), Js(114.0), Js(29.0), Js(19.0), Js(47.0), Js(17.0), Js(3.0), Js(32.0), Js(20.0), Js(6.0), Js(18.0), Js(881.0), Js(68.0), Js(12.0), Js(0.0), Js(67.0), Js(12.0), Js(65.0), Js(0.0), Js(32.0), Js(6124.0), Js(20.0), Js(754.0), Js(9486.0), Js(1.0), Js(3071.0), Js(106.0), Js(6.0), Js(12.0), Js(4.0), Js(8.0), Js(8.0), Js(9.0), Js(5991.0), Js(84.0), Js(2.0), Js(70.0), Js(2.0), Js(1.0), Js(3.0), Js(0.0), Js(3.0), Js(1.0), Js(3.0), Js(3.0), Js(2.0), Js(11.0), Js(2.0), Js(0.0), Js(2.0), Js(6.0), Js(2.0), Js(64.0), Js(2.0), Js(3.0), Js(3.0), Js(7.0), Js(2.0), Js(6.0), Js(2.0), Js(27.0), Js(2.0), Js(3.0), Js(2.0), Js(4.0), Js(2.0), Js(0.0), Js(4.0), Js(6.0), Js(2.0), Js(339.0), Js(3.0), Js(24.0), Js(2.0), Js(24.0), Js(2.0), Js(30.0), Js(2.0), Js(24.0), Js(2.0), Js(30.0), Js(2.0), Js(24.0), Js(2.0), Js(30.0), Js(2.0), Js(24.0), Js(2.0), Js(30.0), Js(2.0), Js(24.0), Js(2.0), Js(7.0), Js(4149.0), Js(196.0), Js(60.0), Js(67.0), Js(1213.0), Js(3.0), Js(2.0), Js(26.0), Js(2.0), Js(1.0), Js(2.0), Js(0.0), Js(3.0), Js(0.0), Js(2.0), Js(9.0), Js(2.0), Js(3.0), Js(2.0), Js(0.0), Js(2.0), Js(0.0), Js(7.0), Js(0.0), Js(5.0), Js(0.0), Js(2.0), Js(0.0), Js(2.0), Js(0.0), Js(2.0), Js(2.0), Js(2.0), Js(1.0), Js(2.0), Js(0.0), Js(3.0), Js(0.0), Js(2.0), Js(0.0), Js(2.0), Js(0.0), Js(2.0), Js(0.0), Js(2.0), Js(0.0), Js(2.0), Js(1.0), Js(2.0), Js(0.0), Js(3.0), Js(3.0), Js(2.0), Js(6.0), Js(2.0), Js(3.0), Js(2.0), Js(3.0), Js(2.0), Js(0.0), Js(2.0), Js(9.0), Js(2.0), Js(16.0), Js(6.0), Js(2.0), Js(2.0), Js(4.0), Js(2.0), Js(16.0), Js(4421.0), Js(42710.0), Js(42.0), Js(4148.0), Js(12.0), Js(221.0), Js(3.0), Js(5761.0), Js(10591.0), Js(541.0)]))
+ var.put(u'astralIdentifierCodes', Js([Js(509.0), Js(0.0), Js(227.0), Js(0.0), Js(150.0), Js(4.0), Js(294.0), Js(9.0), Js(1368.0), Js(2.0), Js(2.0), Js(1.0), Js(6.0), Js(3.0), Js(41.0), Js(2.0), Js(5.0), Js(0.0), Js(166.0), Js(1.0), Js(1306.0), Js(2.0), Js(54.0), Js(14.0), Js(32.0), Js(9.0), Js(16.0), Js(3.0), Js(46.0), Js(10.0), Js(54.0), Js(9.0), Js(7.0), Js(2.0), Js(37.0), Js(13.0), Js(2.0), Js(9.0), Js(52.0), Js(0.0), Js(13.0), Js(2.0), Js(49.0), Js(13.0), Js(10.0), Js(2.0), Js(4.0), Js(9.0), Js(83.0), Js(11.0), Js(7.0), Js(0.0), Js(161.0), Js(11.0), Js(6.0), Js(9.0), Js(7.0), Js(3.0), Js(57.0), Js(0.0), Js(2.0), Js(6.0), Js(3.0), Js(1.0), Js(3.0), Js(2.0), Js(10.0), Js(0.0), Js(11.0), Js(1.0), Js(3.0), Js(6.0), Js(4.0), Js(4.0), Js(193.0), Js(17.0), Js(10.0), Js(9.0), Js(87.0), Js(19.0), Js(13.0), Js(9.0), Js(214.0), Js(6.0), Js(3.0), Js(8.0), Js(28.0), Js(1.0), Js(83.0), Js(16.0), Js(16.0), Js(9.0), Js(82.0), Js(12.0), Js(9.0), Js(9.0), Js(84.0), Js(14.0), Js(5.0), Js(9.0), Js(423.0), Js(9.0), Js(838.0), Js(7.0), Js(2.0), Js(7.0), Js(17.0), Js(9.0), Js(57.0), Js(21.0), Js(2.0), Js(13.0), Js(19882.0), Js(9.0), Js(135.0), Js(4.0), Js(60.0), Js(6.0), Js(26.0), Js(9.0), Js(1016.0), Js(45.0), Js(17.0), Js(3.0), Js(19723.0), Js(1.0), Js(5319.0), Js(4.0), Js(4.0), Js(5.0), Js(9.0), Js(7.0), Js(3.0), Js(6.0), Js(31.0), Js(3.0), Js(149.0), Js(2.0), Js(1418.0), Js(49.0), Js(513.0), Js(54.0), Js(5.0), Js(49.0), Js(9.0), Js(0.0), Js(15.0), Js(0.0), Js(23.0), Js(4.0), Js(2.0), Js(14.0), Js(1361.0), Js(6.0), Js(2.0), Js(16.0), Js(3.0), Js(6.0), Js(2.0), Js(1.0), Js(2.0), Js(4.0), Js(2214.0), Js(6.0), Js(110.0), Js(6.0), Js(6.0), Js(9.0), Js(792487.0), Js(239.0)]))
+ pass
+ pass
+ pass
+ PyJs_Object_2846_ = Js({u'sourceType':Js(u'script'),u'sourceFilename':var.get(u'undefined'),u'allowReturnOutsideFunction':Js(False),u'allowImportExportEverywhere':Js(False),u'allowSuperOutsideMethod':Js(False),u'plugins':Js([]),u'strictMode':var.get(u"null")})
+ var.put(u'defaultOptions', PyJs_Object_2846_)
+ pass
+ pass
+ @Js
+ def PyJs_TokenType_2848_(label, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'TokenType':PyJs_TokenType_2848_, u'label':label}, var)
+ var.registers([u'conf', u'label'])
+ PyJs_Object_2849_ = Js({})
+ var.put(u'conf', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else PyJs_Object_2849_))
+ var.get(u'_classCallCheck$2')(var.get(u"this"), var.get(u'TokenType'))
+ var.get(u"this").put(u'label', var.get(u'label'))
+ var.get(u"this").put(u'keyword', var.get(u'conf').get(u'keyword'))
+ var.get(u"this").put(u'beforeExpr', var.get(u'conf').get(u'beforeExpr').neg().neg())
+ var.get(u"this").put(u'startsExpr', var.get(u'conf').get(u'startsExpr').neg().neg())
+ var.get(u"this").put(u'rightAssociative', var.get(u'conf').get(u'rightAssociative').neg().neg())
+ var.get(u"this").put(u'isLoop', var.get(u'conf').get(u'isLoop').neg().neg())
+ var.get(u"this").put(u'isAssign', var.get(u'conf').get(u'isAssign').neg().neg())
+ var.get(u"this").put(u'prefix', var.get(u'conf').get(u'prefix').neg().neg())
+ var.get(u"this").put(u'postfix', var.get(u'conf').get(u'postfix').neg().neg())
+ var.get(u"this").put(u'binop', (var.get(u'conf').get(u'binop') or var.get(u"null")))
+ var.get(u"this").put(u'updateContext', var.get(u"null"))
+ PyJs_TokenType_2848_._set_name(u'TokenType')
+ var.put(u'TokenType', PyJs_TokenType_2848_)
+ pass
+ PyJs_Object_2851_ = Js({u'beforeExpr':var.get(u'true')})
+ var.put(u'beforeExpr', PyJs_Object_2851_)
+ PyJs_Object_2852_ = Js({u'startsExpr':var.get(u'true')})
+ var.put(u'startsExpr', PyJs_Object_2852_)
+ PyJs_Object_2854_ = Js({u'beforeExpr':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ PyJs_Object_2855_ = Js({u'beforeExpr':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ PyJs_Object_2856_ = Js({u'beforeExpr':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ PyJs_Object_2857_ = Js({u'beforeExpr':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ PyJs_Object_2858_ = Js({u'beforeExpr':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ PyJs_Object_2859_ = Js({u'beforeExpr':var.get(u'true'),u'isAssign':var.get(u'true')})
+ PyJs_Object_2860_ = Js({u'beforeExpr':var.get(u'true'),u'isAssign':var.get(u'true')})
+ PyJs_Object_2861_ = Js({u'prefix':var.get(u'true'),u'postfix':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ PyJs_Object_2862_ = Js({u'beforeExpr':var.get(u'true'),u'prefix':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ PyJs_Object_2863_ = Js({u'beforeExpr':var.get(u'true'),u'binop':Js(9.0),u'prefix':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ PyJs_Object_2864_ = Js({u'beforeExpr':var.get(u'true'),u'binop':Js(11.0),u'rightAssociative':var.get(u'true')})
+ PyJs_Object_2853_ = Js({u'num':var.get(u'TokenType').create(Js(u'num'), var.get(u'startsExpr')),u'regexp':var.get(u'TokenType').create(Js(u'regexp'), var.get(u'startsExpr')),u'string':var.get(u'TokenType').create(Js(u'string'), var.get(u'startsExpr')),u'name':var.get(u'TokenType').create(Js(u'name'), var.get(u'startsExpr')),u'eof':var.get(u'TokenType').create(Js(u'eof')),u'bracketL':var.get(u'TokenType').create(Js(u'['), PyJs_Object_2854_),u'bracketR':var.get(u'TokenType').create(Js(u']')),u'braceL':var.get(u'TokenType').create(Js(u'{'), PyJs_Object_2855_),u'braceBarL':var.get(u'TokenType').create(Js(u'{|'), PyJs_Object_2856_),u'braceR':var.get(u'TokenType').create(Js(u'}')),u'braceBarR':var.get(u'TokenType').create(Js(u'|}')),u'parenL':var.get(u'TokenType').create(Js(u'('), PyJs_Object_2857_),u'parenR':var.get(u'TokenType').create(Js(u')')),u'comma':var.get(u'TokenType').create(Js(u','), var.get(u'beforeExpr')),u'semi':var.get(u'TokenType').create(Js(u';'), var.get(u'beforeExpr')),u'colon':var.get(u'TokenType').create(Js(u':'), var.get(u'beforeExpr')),u'doubleColon':var.get(u'TokenType').create(Js(u'::'), var.get(u'beforeExpr')),u'dot':var.get(u'TokenType').create(Js(u'.')),u'question':var.get(u'TokenType').create(Js(u'?'), var.get(u'beforeExpr')),u'arrow':var.get(u'TokenType').create(Js(u'=>'), var.get(u'beforeExpr')),u'template':var.get(u'TokenType').create(Js(u'template')),u'ellipsis':var.get(u'TokenType').create(Js(u'...'), var.get(u'beforeExpr')),u'backQuote':var.get(u'TokenType').create(Js(u'`'), var.get(u'startsExpr')),u'dollarBraceL':var.get(u'TokenType').create(Js(u'${'), PyJs_Object_2858_),u'at':var.get(u'TokenType').create(Js(u'@')),u'eq':var.get(u'TokenType').create(Js(u'='), PyJs_Object_2859_),u'assign':var.get(u'TokenType').create(Js(u'_='), PyJs_Object_2860_),u'incDec':var.get(u'TokenType').create(Js(u'++/--'), PyJs_Object_2861_),u'prefix':var.get(u'TokenType').create(Js(u'prefix'), PyJs_Object_2862_),u'logicalOR':var.get(u'binop')(Js(u'||'), Js(1.0)),u'logicalAND':var.get(u'binop')(Js(u'&&'), Js(2.0)),u'bitwiseOR':var.get(u'binop')(Js(u'|'), Js(3.0)),u'bitwiseXOR':var.get(u'binop')(Js(u'^'), Js(4.0)),u'bitwiseAND':var.get(u'binop')(Js(u'&'), Js(5.0)),u'equality':var.get(u'binop')(Js(u'==/!='), Js(6.0)),u'relational':var.get(u'binop')(Js(u'>'), Js(7.0)),u'bitShift':var.get(u'binop')(Js(u'<>>'), Js(8.0)),u'plusMin':var.get(u'TokenType').create(Js(u'+/-'), PyJs_Object_2863_),u'modulo':var.get(u'binop')(Js(u'%'), Js(10.0)),u'star':var.get(u'binop')(Js(u'*'), Js(10.0)),u'slash':var.get(u'binop')(Js(u'/'), Js(10.0)),u'exponent':var.get(u'TokenType').create(Js(u'**'), PyJs_Object_2864_)})
+ var.put(u'types', PyJs_Object_2853_)
+ PyJs_Object_2865_ = Js({})
+ var.put(u'keywords', PyJs_Object_2865_)
+ pass
+ var.get(u'kw')(Js(u'break'))
+ var.get(u'kw')(Js(u'case'), var.get(u'beforeExpr'))
+ var.get(u'kw')(Js(u'catch'))
+ var.get(u'kw')(Js(u'continue'))
+ var.get(u'kw')(Js(u'debugger'))
+ var.get(u'kw')(Js(u'default'), var.get(u'beforeExpr'))
+ PyJs_Object_2867_ = Js({u'isLoop':var.get(u'true'),u'beforeExpr':var.get(u'true')})
+ var.get(u'kw')(Js(u'do'), PyJs_Object_2867_)
+ var.get(u'kw')(Js(u'else'), var.get(u'beforeExpr'))
+ var.get(u'kw')(Js(u'finally'))
+ PyJs_Object_2868_ = Js({u'isLoop':var.get(u'true')})
+ var.get(u'kw')(Js(u'for'), PyJs_Object_2868_)
+ var.get(u'kw')(Js(u'function'), var.get(u'startsExpr'))
+ var.get(u'kw')(Js(u'if'))
+ var.get(u'kw')(Js(u'return'), var.get(u'beforeExpr'))
+ var.get(u'kw')(Js(u'switch'))
+ var.get(u'kw')(Js(u'throw'), var.get(u'beforeExpr'))
+ var.get(u'kw')(Js(u'try'))
+ var.get(u'kw')(Js(u'var'))
+ var.get(u'kw')(Js(u'let'))
+ var.get(u'kw')(Js(u'const'))
+ PyJs_Object_2869_ = Js({u'isLoop':var.get(u'true')})
+ var.get(u'kw')(Js(u'while'), PyJs_Object_2869_)
+ var.get(u'kw')(Js(u'with'))
+ PyJs_Object_2870_ = Js({u'beforeExpr':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ var.get(u'kw')(Js(u'new'), PyJs_Object_2870_)
+ var.get(u'kw')(Js(u'this'), var.get(u'startsExpr'))
+ var.get(u'kw')(Js(u'super'), var.get(u'startsExpr'))
+ var.get(u'kw')(Js(u'class'))
+ var.get(u'kw')(Js(u'extends'), var.get(u'beforeExpr'))
+ var.get(u'kw')(Js(u'export'))
+ var.get(u'kw')(Js(u'import'))
+ PyJs_Object_2871_ = Js({u'beforeExpr':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ var.get(u'kw')(Js(u'yield'), PyJs_Object_2871_)
+ var.get(u'kw')(Js(u'null'), var.get(u'startsExpr'))
+ var.get(u'kw')(Js(u'true'), var.get(u'startsExpr'))
+ var.get(u'kw')(Js(u'false'), var.get(u'startsExpr'))
+ PyJs_Object_2872_ = Js({u'beforeExpr':var.get(u'true'),u'binop':Js(7.0)})
+ var.get(u'kw')(Js(u'in'), PyJs_Object_2872_)
+ PyJs_Object_2873_ = Js({u'beforeExpr':var.get(u'true'),u'binop':Js(7.0)})
+ var.get(u'kw')(Js(u'instanceof'), PyJs_Object_2873_)
+ PyJs_Object_2874_ = Js({u'beforeExpr':var.get(u'true'),u'prefix':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ var.get(u'kw')(Js(u'typeof'), PyJs_Object_2874_)
+ PyJs_Object_2875_ = Js({u'beforeExpr':var.get(u'true'),u'prefix':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ var.get(u'kw')(Js(u'void'), PyJs_Object_2875_)
+ PyJs_Object_2876_ = Js({u'beforeExpr':var.get(u'true'),u'prefix':var.get(u'true'),u'startsExpr':var.get(u'true')})
+ var.get(u'kw')(Js(u'delete'), PyJs_Object_2876_)
+ var.put(u'lineBreak', JsRegExp(u'/\\r\\n?|\\n|\\u2028|\\u2029/'))
+ var.put(u'lineBreakG', var.get(u'RegExp').create(var.get(u'lineBreak').get(u'source'), Js(u'g')))
+ pass
+ var.put(u'nonASCIIwhitespace', JsRegExp(u'/[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/'))
+ pass
+ @Js
+ def PyJs_TokContext_2877_(token, isExpr, preserveSpace, override, this, arguments, var=var):
+ var = Scope({u'TokContext':PyJs_TokContext_2877_, u'this':this, u'token':token, u'isExpr':isExpr, u'arguments':arguments, u'preserveSpace':preserveSpace, u'override':override}, var)
+ var.registers([u'override', u'token', u'isExpr', u'preserveSpace'])
+ var.get(u'_classCallCheck$3')(var.get(u"this"), var.get(u'TokContext'))
+ var.get(u"this").put(u'token', var.get(u'token'))
+ var.get(u"this").put(u'isExpr', var.get(u'isExpr').neg().neg())
+ var.get(u"this").put(u'preserveSpace', var.get(u'preserveSpace').neg().neg())
+ var.get(u"this").put(u'override', var.get(u'override'))
+ PyJs_TokContext_2877_._set_name(u'TokContext')
+ var.put(u'TokContext', PyJs_TokContext_2877_)
+ @Js
+ def PyJs_anonymous_2879_(p, this, arguments, var=var):
+ var = Scope({u'this':this, u'p':p, u'arguments':arguments}, var)
+ var.registers([u'p'])
+ return var.get(u'p').callprop(u'readTmplToken')
+ PyJs_anonymous_2879_._set_name(u'anonymous')
+ PyJs_Object_2878_ = Js({u'braceStatement':var.get(u'TokContext').create(Js(u'{'), Js(False)),u'braceExpression':var.get(u'TokContext').create(Js(u'{'), var.get(u'true')),u'templateQuasi':var.get(u'TokContext').create(Js(u'${'), var.get(u'true')),u'parenStatement':var.get(u'TokContext').create(Js(u'('), Js(False)),u'parenExpression':var.get(u'TokContext').create(Js(u'('), var.get(u'true')),u'template':var.get(u'TokContext').create(Js(u'`'), var.get(u'true'), var.get(u'true'), PyJs_anonymous_2879_),u'functionExpression':var.get(u'TokContext').create(Js(u'function'), var.get(u'true'))})
+ var.put(u'types$1', PyJs_Object_2878_)
+ @Js
+ def PyJs_anonymous_2880_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'out'])
+ if PyJsStrictEq(var.get(u"this").get(u'state').get(u'context').get(u'length'),Js(1.0)):
+ var.get(u"this").get(u'state').put(u'exprAllowed', var.get(u'true'))
+ return var.get('undefined')
+ var.put(u'out', var.get(u"this").get(u'state').get(u'context').callprop(u'pop'))
+ if (PyJsStrictEq(var.get(u'out'),var.get(u'types$1').get(u'braceStatement')) and PyJsStrictEq(var.get(u"this").callprop(u'curContext'),var.get(u'types$1').get(u'functionExpression'))):
+ var.get(u"this").get(u'state').get(u'context').callprop(u'pop')
+ var.get(u"this").get(u'state').put(u'exprAllowed', Js(False))
+ else:
+ if PyJsStrictEq(var.get(u'out'),var.get(u'types$1').get(u'templateQuasi')):
+ var.get(u"this").get(u'state').put(u'exprAllowed', var.get(u'true'))
+ else:
+ var.get(u"this").get(u'state').put(u'exprAllowed', var.get(u'out').get(u'isExpr').neg())
+ PyJs_anonymous_2880_._set_name(u'anonymous')
+ var.get(u'types').get(u'parenR').put(u'updateContext', var.get(u'types').get(u'braceR').put(u'updateContext', PyJs_anonymous_2880_))
+ @Js
+ def PyJs_anonymous_2881_(prevType, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'prevType':prevType}, var)
+ var.registers([u'prevType'])
+ var.get(u"this").get(u'state').put(u'exprAllowed', Js(False))
+ if ((PyJsStrictEq(var.get(u'prevType'),var.get(u'types').get(u'_let')) or PyJsStrictEq(var.get(u'prevType'),var.get(u'types').get(u'_const'))) or PyJsStrictEq(var.get(u'prevType'),var.get(u'types').get(u'_var'))):
+ if var.get(u'lineBreak').callprop(u'test', var.get(u"this").get(u'input').callprop(u'slice', var.get(u"this").get(u'state').get(u'end'))):
+ var.get(u"this").get(u'state').put(u'exprAllowed', var.get(u'true'))
+ PyJs_anonymous_2881_._set_name(u'anonymous')
+ var.get(u'types').get(u'name').put(u'updateContext', PyJs_anonymous_2881_)
+ @Js
+ def PyJs_anonymous_2882_(prevType, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'prevType':prevType}, var)
+ var.registers([u'prevType'])
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', (var.get(u'types$1').get(u'braceStatement') if var.get(u"this").callprop(u'braceIsBlock', var.get(u'prevType')) else var.get(u'types$1').get(u'braceExpression')))
+ var.get(u"this").get(u'state').put(u'exprAllowed', var.get(u'true'))
+ PyJs_anonymous_2882_._set_name(u'anonymous')
+ var.get(u'types').get(u'braceL').put(u'updateContext', PyJs_anonymous_2882_)
+ @Js
+ def PyJs_anonymous_2883_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', var.get(u'types$1').get(u'templateQuasi'))
+ var.get(u"this").get(u'state').put(u'exprAllowed', var.get(u'true'))
+ PyJs_anonymous_2883_._set_name(u'anonymous')
+ var.get(u'types').get(u'dollarBraceL').put(u'updateContext', PyJs_anonymous_2883_)
+ @Js
+ def PyJs_anonymous_2884_(prevType, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'prevType':prevType}, var)
+ var.registers([u'prevType', u'statementParens'])
+ var.put(u'statementParens', (((PyJsStrictEq(var.get(u'prevType'),var.get(u'types').get(u'_if')) or PyJsStrictEq(var.get(u'prevType'),var.get(u'types').get(u'_for'))) or PyJsStrictEq(var.get(u'prevType'),var.get(u'types').get(u'_with'))) or PyJsStrictEq(var.get(u'prevType'),var.get(u'types').get(u'_while'))))
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', (var.get(u'types$1').get(u'parenStatement') if var.get(u'statementParens') else var.get(u'types$1').get(u'parenExpression')))
+ var.get(u"this").get(u'state').put(u'exprAllowed', var.get(u'true'))
+ PyJs_anonymous_2884_._set_name(u'anonymous')
+ var.get(u'types').get(u'parenL').put(u'updateContext', PyJs_anonymous_2884_)
+ @Js
+ def PyJs_anonymous_2885_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ pass
+ PyJs_anonymous_2885_._set_name(u'anonymous')
+ var.get(u'types').get(u'incDec').put(u'updateContext', PyJs_anonymous_2885_)
+ @Js
+ def PyJs_anonymous_2886_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if PyJsStrictNeq(var.get(u"this").callprop(u'curContext'),var.get(u'types$1').get(u'braceStatement')):
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', var.get(u'types$1').get(u'functionExpression'))
+ var.get(u"this").get(u'state').put(u'exprAllowed', Js(False))
+ PyJs_anonymous_2886_._set_name(u'anonymous')
+ var.get(u'types').get(u'_function').put(u'updateContext', PyJs_anonymous_2886_)
+ @Js
+ def PyJs_anonymous_2887_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if PyJsStrictEq(var.get(u"this").callprop(u'curContext'),var.get(u'types$1').get(u'template')):
+ var.get(u"this").get(u'state').get(u'context').callprop(u'pop')
+ else:
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', var.get(u'types$1').get(u'template'))
+ var.get(u"this").get(u'state').put(u'exprAllowed', Js(False))
+ PyJs_anonymous_2887_._set_name(u'anonymous')
+ var.get(u'types').get(u'backQuote').put(u'updateContext', PyJs_anonymous_2887_)
+ pass
+ @Js
+ def PyJs_Position_2888_(line, col, this, arguments, var=var):
+ var = Scope({u'this':this, u'Position':PyJs_Position_2888_, u'line':line, u'col':col, u'arguments':arguments}, var)
+ var.registers([u'line', u'col'])
+ var.get(u'_classCallCheck$4')(var.get(u"this"), var.get(u'Position'))
+ var.get(u"this").put(u'line', var.get(u'line'))
+ var.get(u"this").put(u'column', var.get(u'col'))
+ PyJs_Position_2888_._set_name(u'Position')
+ var.put(u'Position', PyJs_Position_2888_)
+ @Js
+ def PyJs_SourceLocation_2889_(start, end, this, arguments, var=var):
+ var = Scope({u'this':this, u'start':start, u'end':end, u'arguments':arguments, u'SourceLocation':PyJs_SourceLocation_2889_}, var)
+ var.registers([u'start', u'end'])
+ var.get(u'_classCallCheck$4')(var.get(u"this"), var.get(u'SourceLocation'))
+ var.get(u"this").put(u'start', var.get(u'start'))
+ var.get(u"this").put(u'end', var.get(u'end'))
+ PyJs_SourceLocation_2889_._set_name(u'SourceLocation')
+ var.put(u'SourceLocation', PyJs_SourceLocation_2889_)
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_2890_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'State'])
+ @Js
+ def PyJsHoisted_State_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'_classCallCheck$5')(var.get(u"this"), var.get(u'State'))
+ PyJsHoisted_State_.func_name = u'State'
+ var.put(u'State', PyJsHoisted_State_)
+ pass
+ @Js
+ def PyJs_init_2891_(options, input, this, arguments, var=var):
+ var = Scope({u'this':this, u'input':input, u'init':PyJs_init_2891_, u'options':options, u'arguments':arguments}, var)
+ var.registers([u'input', u'options'])
+ var.get(u"this").put(u'strict', (Js(False) if PyJsStrictEq(var.get(u'options').get(u'strictMode'),Js(False)) else PyJsStrictEq(var.get(u'options').get(u'sourceType'),Js(u'module'))))
+ var.get(u"this").put(u'input', var.get(u'input'))
+ var.get(u"this").put(u'potentialArrowAt', (-Js(1.0)))
+ var.get(u"this").put(u'inMethod', var.get(u"this").put(u'inFunction', var.get(u"this").put(u'inGenerator', var.get(u"this").put(u'inAsync', var.get(u"this").put(u'inType', Js(False))))))
+ var.get(u"this").put(u'labels', Js([]))
+ var.get(u"this").put(u'decorators', Js([]))
+ var.get(u"this").put(u'tokens', Js([]))
+ var.get(u"this").put(u'comments', Js([]))
+ var.get(u"this").put(u'trailingComments', Js([]))
+ var.get(u"this").put(u'leadingComments', Js([]))
+ var.get(u"this").put(u'commentStack', Js([]))
+ var.get(u"this").put(u'pos', var.get(u"this").put(u'lineStart', Js(0.0)))
+ var.get(u"this").put(u'curLine', Js(1.0))
+ var.get(u"this").put(u'type', var.get(u'types').get(u'eof'))
+ var.get(u"this").put(u'value', var.get(u"null"))
+ var.get(u"this").put(u'start', var.get(u"this").put(u'end', var.get(u"this").get(u'pos')))
+ var.get(u"this").put(u'startLoc', var.get(u"this").put(u'endLoc', var.get(u"this").callprop(u'curPosition')))
+ var.get(u"this").put(u'lastTokEndLoc', var.get(u"this").put(u'lastTokStartLoc', var.get(u"null")))
+ var.get(u"this").put(u'lastTokStart', var.get(u"this").put(u'lastTokEnd', var.get(u"this").get(u'pos')))
+ var.get(u"this").put(u'context', Js([var.get(u'types$1').get(u'braceStatement')]))
+ var.get(u"this").put(u'exprAllowed', var.get(u'true'))
+ var.get(u"this").put(u'containsEsc', var.get(u"this").put(u'containsOctal', Js(False)))
+ var.get(u"this").put(u'octalPosition', var.get(u"null"))
+ var.get(u"this").put(u'exportedIdentifiers', Js([]))
+ return var.get(u"this")
+ PyJs_init_2891_._set_name(u'init')
+ var.get(u'State').get(u'prototype').put(u'init', PyJs_init_2891_)
+ @Js
+ def PyJs_curPosition_2892_(this, arguments, var=var):
+ var = Scope({u'this':this, u'curPosition':PyJs_curPosition_2892_, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'Position').create(var.get(u"this").get(u'curLine'), (var.get(u"this").get(u'pos')-var.get(u"this").get(u'lineStart')))
+ PyJs_curPosition_2892_._set_name(u'curPosition')
+ var.get(u'State').get(u'prototype').put(u'curPosition', PyJs_curPosition_2892_)
+ @Js
+ def PyJs_clone_2893_(skipArrays, this, arguments, var=var):
+ var = Scope({u'this':this, u'clone':PyJs_clone_2893_, u'skipArrays':skipArrays, u'arguments':arguments}, var)
+ var.registers([u'state', u'val', u'key', u'skipArrays'])
+ var.put(u'state', var.get(u'State').create())
+ for PyJsTemp in var.get(u"this"):
+ var.put(u'key', PyJsTemp)
+ var.put(u'val', var.get(u"this").get(var.get(u'key')))
+ if ((var.get(u'skipArrays').neg() or PyJsStrictEq(var.get(u'key'),Js(u'context'))) and var.get(u'Array').callprop(u'isArray', var.get(u'val'))):
+ var.put(u'val', var.get(u'val').callprop(u'slice'))
+ var.get(u'state').put(var.get(u'key'), var.get(u'val'))
+ return var.get(u'state')
+ PyJs_clone_2893_._set_name(u'clone')
+ var.get(u'State').get(u'prototype').put(u'clone', PyJs_clone_2893_)
+ return var.get(u'State')
+ PyJs_anonymous_2890_._set_name(u'anonymous')
+ var.put(u'State', PyJs_anonymous_2890_())
+ pass
+ @Js
+ def PyJs_Token_2894_(state, this, arguments, var=var):
+ var = Scope({u'this':this, u'state':state, u'Token':PyJs_Token_2894_, u'arguments':arguments}, var)
+ var.registers([u'state'])
+ var.get(u'_classCallCheck$1')(var.get(u"this"), var.get(u'Token'))
+ var.get(u"this").put(u'type', var.get(u'state').get(u'type'))
+ var.get(u"this").put(u'value', var.get(u'state').get(u'value'))
+ var.get(u"this").put(u'start', var.get(u'state').get(u'start'))
+ var.get(u"this").put(u'end', var.get(u'state').get(u'end'))
+ var.get(u"this").put(u'loc', var.get(u'SourceLocation').create(var.get(u'state').get(u'startLoc'), var.get(u'state').get(u'endLoc')))
+ PyJs_Token_2894_._set_name(u'Token')
+ var.put(u'Token', PyJs_Token_2894_)
+ pass
+ @Js
+ def PyJs_anonymous_2895_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'Tokenizer'])
+ @Js
+ def PyJsHoisted_Tokenizer_(options, input, this, arguments, var=var):
+ var = Scope({u'this':this, u'input':input, u'options':options, u'arguments':arguments}, var)
+ var.registers([u'input', u'options'])
+ var.get(u'_classCallCheck$1')(var.get(u"this"), var.get(u'Tokenizer'))
+ var.get(u"this").put(u'state', var.get(u'State').create())
+ var.get(u"this").get(u'state').callprop(u'init', var.get(u'options'), var.get(u'input'))
+ PyJsHoisted_Tokenizer_.func_name = u'Tokenizer'
+ var.put(u'Tokenizer', PyJsHoisted_Tokenizer_)
+ pass
+ @Js
+ def PyJs_next_2896_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'next':PyJs_next_2896_}, var)
+ var.registers([])
+ if var.get(u"this").get(u'isLookahead').neg():
+ var.get(u"this").get(u'state').get(u'tokens').callprop(u'push', var.get(u'Token').create(var.get(u"this").get(u'state')))
+ var.get(u"this").get(u'state').put(u'lastTokEnd', var.get(u"this").get(u'state').get(u'end'))
+ var.get(u"this").get(u'state').put(u'lastTokStart', var.get(u"this").get(u'state').get(u'start'))
+ var.get(u"this").get(u'state').put(u'lastTokEndLoc', var.get(u"this").get(u'state').get(u'endLoc'))
+ var.get(u"this").get(u'state').put(u'lastTokStartLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.get(u"this").callprop(u'nextToken')
+ PyJs_next_2896_._set_name(u'next')
+ var.get(u'Tokenizer').get(u'prototype').put(u'next', PyJs_next_2896_)
+ @Js
+ def PyJs_eat_2897_(type, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments, u'eat':PyJs_eat_2897_}, var)
+ var.registers([u'type'])
+ if var.get(u"this").callprop(u'match', var.get(u'type')):
+ var.get(u"this").callprop(u'next')
+ return var.get(u'true')
+ else:
+ return Js(False)
+ PyJs_eat_2897_._set_name(u'eat')
+ var.get(u'Tokenizer').get(u'prototype').put(u'eat', PyJs_eat_2897_)
+ @Js
+ def PyJs_match_2898_(type, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments, u'match':PyJs_match_2898_}, var)
+ var.registers([u'type'])
+ return PyJsStrictEq(var.get(u"this").get(u'state').get(u'type'),var.get(u'type'))
+ PyJs_match_2898_._set_name(u'match')
+ var.get(u'Tokenizer').get(u'prototype').put(u'match', PyJs_match_2898_)
+ @Js
+ def PyJs_isKeyword_2899_(word, this, arguments, var=var):
+ var = Scope({u'this':this, u'isKeyword':PyJs_isKeyword_2899_, u'word':word, u'arguments':arguments}, var)
+ var.registers([u'word'])
+ return var.get(u'isKeyword$1')(var.get(u'word'))
+ PyJs_isKeyword_2899_._set_name(u'isKeyword')
+ var.get(u'Tokenizer').get(u'prototype').put(u'isKeyword', PyJs_isKeyword_2899_)
+ @Js
+ def PyJs_lookahead_2900_(this, arguments, var=var):
+ var = Scope({u'this':this, u'lookahead':PyJs_lookahead_2900_, u'arguments':arguments}, var)
+ var.registers([u'curr', u'old'])
+ var.put(u'old', var.get(u"this").get(u'state'))
+ var.get(u"this").put(u'state', var.get(u'old').callprop(u'clone', var.get(u'true')))
+ var.get(u"this").put(u'isLookahead', var.get(u'true'))
+ var.get(u"this").callprop(u'next')
+ var.get(u"this").put(u'isLookahead', Js(False))
+ var.put(u'curr', var.get(u"this").get(u'state').callprop(u'clone', var.get(u'true')))
+ var.get(u"this").put(u'state', var.get(u'old'))
+ return var.get(u'curr')
+ PyJs_lookahead_2900_._set_name(u'lookahead')
+ var.get(u'Tokenizer').get(u'prototype').put(u'lookahead', PyJs_lookahead_2900_)
+ @Js
+ def PyJs_setStrict_2901_(strict, this, arguments, var=var):
+ var = Scope({u'this':this, u'strict':strict, u'arguments':arguments, u'setStrict':PyJs_setStrict_2901_}, var)
+ var.registers([u'strict'])
+ var.get(u"this").get(u'state').put(u'strict', var.get(u'strict'))
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'num')).neg() and var.get(u"this").callprop(u'match', var.get(u'types').get(u'string')).neg()):
+ return var.get('undefined')
+ var.get(u"this").get(u'state').put(u'pos', var.get(u"this").get(u'state').get(u'start'))
+ while (var.get(u"this").get(u'state').get(u'pos')=var.get(u"this").get(u'input').get(u'length')):
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'eof'))
+ if var.get(u'curContext').get(u'override'):
+ return var.get(u'curContext').callprop(u'override', var.get(u"this"))
+ else:
+ return var.get(u"this").callprop(u'readToken', var.get(u"this").callprop(u'fullCharCodeAtPos'))
+ PyJs_nextToken_2903_._set_name(u'nextToken')
+ var.get(u'Tokenizer').get(u'prototype').put(u'nextToken', PyJs_nextToken_2903_)
+ @Js
+ def PyJs_readToken_2904_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'readToken':PyJs_readToken_2904_, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code'])
+ if (var.get(u'isIdentifierStart')(var.get(u'code')) or PyJsStrictEq(var.get(u'code'),Js(92.0))):
+ return var.get(u"this").callprop(u'readWord')
+ else:
+ return var.get(u"this").callprop(u'getTokenFromCode', var.get(u'code'))
+ PyJs_readToken_2904_._set_name(u'readToken')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readToken', PyJs_readToken_2904_)
+ @Js
+ def PyJs_fullCharCodeAtPos_2905_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'fullCharCodeAtPos':PyJs_fullCharCodeAtPos_2905_}, var)
+ var.registers([u'code', u'next'])
+ var.put(u'code', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')))
+ if ((var.get(u'code')<=Js(55295)) or (var.get(u'code')>=Js(57344))):
+ return var.get(u'code')
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ return (((var.get(u'code')<Js(8.0)) and (var.get(u'ch')=Js(5760.0)) and var.get(u'nonASCIIwhitespace').callprop(u'test', var.get(u'String').callprop(u'fromCharCode', var.get(u'ch'))))):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ else:
+ raise JS_BREAK_LABEL_6c6f6f70("Breaked")
+ SWITCHED = True
+ break
+ except JS_CONTINUE_LABEL_6c6f6f70:
+ pass
+ except JS_BREAK_LABEL_6c6f6f70:
+ pass
+ PyJs_skipSpace_2910_._set_name(u'skipSpace')
+ var.get(u'Tokenizer').get(u'prototype').put(u'skipSpace', PyJs_skipSpace_2910_)
+ @Js
+ def PyJs_finishToken_2911_(type, val, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments, u'val':val, u'finishToken':PyJs_finishToken_2911_}, var)
+ var.registers([u'type', u'val', u'prevType'])
+ var.get(u"this").get(u'state').put(u'end', var.get(u"this").get(u'state').get(u'pos'))
+ var.get(u"this").get(u'state').put(u'endLoc', var.get(u"this").get(u'state').callprop(u'curPosition'))
+ var.put(u'prevType', var.get(u"this").get(u'state').get(u'type'))
+ var.get(u"this").get(u'state').put(u'type', var.get(u'type'))
+ var.get(u"this").get(u'state').put(u'value', var.get(u'val'))
+ var.get(u"this").callprop(u'updateContext', var.get(u'prevType'))
+ PyJs_finishToken_2911_._set_name(u'finishToken')
+ var.get(u'Tokenizer').get(u'prototype').put(u'finishToken', PyJs_finishToken_2911_)
+ @Js
+ def PyJs_readToken_dot_2912_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'readToken_dot':PyJs_readToken_dot_2912_}, var)
+ var.registers([u'next2', u'next'])
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ if ((var.get(u'next')>=Js(48.0)) and (var.get(u'next')<=Js(57.0))):
+ return var.get(u"this").callprop(u'readNumber', var.get(u'true'))
+ var.put(u'next2', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(2.0))))
+ if (PyJsStrictEq(var.get(u'next'),Js(46.0)) and PyJsStrictEq(var.get(u'next2'),Js(46.0))):
+ var.get(u"this").get(u'state').put(u'pos', Js(3.0), u'+')
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'ellipsis'))
+ else:
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'dot'))
+ PyJs_readToken_dot_2912_._set_name(u'readToken_dot')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readToken_dot', PyJs_readToken_dot_2912_)
+ @Js
+ def PyJs_readToken_slash_2913_(this, arguments, var=var):
+ var = Scope({u'this':this, u'readToken_slash':PyJs_readToken_slash_2913_, u'arguments':arguments}, var)
+ var.registers([u'next'])
+ if var.get(u"this").get(u'state').get(u'exprAllowed'):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'readRegexp')
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ if PyJsStrictEq(var.get(u'next'),Js(61.0)):
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'assign'), Js(2.0))
+ else:
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'slash'), Js(1.0))
+ PyJs_readToken_slash_2913_._set_name(u'readToken_slash')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readToken_slash', PyJs_readToken_slash_2913_)
+ @Js
+ def PyJs_readToken_mult_modulo_2914_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'readToken_mult_modulo':PyJs_readToken_mult_modulo_2914_, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'width', u'code', u'type', u'next'])
+ var.put(u'type', (var.get(u'types').get(u'star') if PyJsStrictEq(var.get(u'code'),Js(42.0)) else var.get(u'types').get(u'modulo')))
+ var.put(u'width', Js(1.0))
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ if PyJsStrictEq(var.get(u'next'),Js(42.0)):
+ (var.put(u'width',Js(var.get(u'width').to_number())+Js(1))-Js(1))
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(2.0))))
+ var.put(u'type', var.get(u'types').get(u'exponent'))
+ if PyJsStrictEq(var.get(u'next'),Js(61.0)):
+ (var.put(u'width',Js(var.get(u'width').to_number())+Js(1))-Js(1))
+ var.put(u'type', var.get(u'types').get(u'assign'))
+ return var.get(u"this").callprop(u'finishOp', var.get(u'type'), var.get(u'width'))
+ PyJs_readToken_mult_modulo_2914_._set_name(u'readToken_mult_modulo')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readToken_mult_modulo', PyJs_readToken_mult_modulo_2914_)
+ @Js
+ def PyJs_readToken_pipe_amp_2915_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments, u'readToken_pipe_amp':PyJs_readToken_pipe_amp_2915_}, var)
+ var.registers([u'code', u'next'])
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ if PyJsStrictEq(var.get(u'next'),var.get(u'code')):
+ return var.get(u"this").callprop(u'finishOp', (var.get(u'types').get(u'logicalOR') if PyJsStrictEq(var.get(u'code'),Js(124.0)) else var.get(u'types').get(u'logicalAND')), Js(2.0))
+ if PyJsStrictEq(var.get(u'next'),Js(61.0)):
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'assign'), Js(2.0))
+ if ((PyJsStrictEq(var.get(u'code'),Js(124.0)) and PyJsStrictEq(var.get(u'next'),Js(125.0))) and var.get(u"this").callprop(u'hasPlugin', Js(u'flow'))):
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'braceBarR'), Js(2.0))
+ return var.get(u"this").callprop(u'finishOp', (var.get(u'types').get(u'bitwiseOR') if PyJsStrictEq(var.get(u'code'),Js(124.0)) else var.get(u'types').get(u'bitwiseAND')), Js(1.0))
+ PyJs_readToken_pipe_amp_2915_._set_name(u'readToken_pipe_amp')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readToken_pipe_amp', PyJs_readToken_pipe_amp_2915_)
+ @Js
+ def PyJs_readToken_caret_2916_(this, arguments, var=var):
+ var = Scope({u'this':this, u'readToken_caret':PyJs_readToken_caret_2916_, u'arguments':arguments}, var)
+ var.registers([u'next'])
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ if PyJsStrictEq(var.get(u'next'),Js(61.0)):
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'assign'), Js(2.0))
+ else:
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'bitwiseXOR'), Js(1.0))
+ PyJs_readToken_caret_2916_._set_name(u'readToken_caret')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readToken_caret', PyJs_readToken_caret_2916_)
+ @Js
+ def PyJs_readToken_plus_min_2917_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments, u'readToken_plus_min':PyJs_readToken_plus_min_2917_}, var)
+ var.registers([u'code', u'next'])
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ if PyJsStrictEq(var.get(u'next'),var.get(u'code')):
+ if ((PyJsStrictEq(var.get(u'next'),Js(45.0)) and PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(2.0))),Js(62.0))) and var.get(u'lineBreak').callprop(u'test', var.get(u"this").get(u'input').callprop(u'slice', var.get(u"this").get(u'state').get(u'lastTokEnd'), var.get(u"this").get(u'state').get(u'pos')))):
+ var.get(u"this").callprop(u'skipLineComment', Js(3.0))
+ var.get(u"this").callprop(u'skipSpace')
+ return var.get(u"this").callprop(u'nextToken')
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'incDec'), Js(2.0))
+ if PyJsStrictEq(var.get(u'next'),Js(61.0)):
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'assign'), Js(2.0))
+ else:
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'plusMin'), Js(1.0))
+ PyJs_readToken_plus_min_2917_._set_name(u'readToken_plus_min')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readToken_plus_min', PyJs_readToken_plus_min_2917_)
+ @Js
+ def PyJs_readToken_lt_gt_2918_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments, u'readToken_lt_gt':PyJs_readToken_lt_gt_2918_}, var)
+ var.registers([u'code', u'size', u'next'])
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ var.put(u'size', Js(1.0))
+ if PyJsStrictEq(var.get(u'next'),var.get(u'code')):
+ var.put(u'size', (Js(3.0) if (PyJsStrictEq(var.get(u'code'),Js(62.0)) and PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(2.0))),Js(62.0))) else Js(2.0)))
+ if PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+var.get(u'size'))),Js(61.0)):
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'assign'), (var.get(u'size')+Js(1.0)))
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'bitShift'), var.get(u'size'))
+ if (((PyJsStrictEq(var.get(u'next'),Js(33.0)) and PyJsStrictEq(var.get(u'code'),Js(60.0))) and PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(2.0))),Js(45.0))) and PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(3.0))),Js(45.0))):
+ if var.get(u"this").get(u'inModule'):
+ var.get(u"this").callprop(u'unexpected')
+ var.get(u"this").callprop(u'skipLineComment', Js(4.0))
+ var.get(u"this").callprop(u'skipSpace')
+ return var.get(u"this").callprop(u'nextToken')
+ if PyJsStrictEq(var.get(u'next'),Js(61.0)):
+ var.put(u'size', Js(2.0))
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'relational'), var.get(u'size'))
+ PyJs_readToken_lt_gt_2918_._set_name(u'readToken_lt_gt')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readToken_lt_gt', PyJs_readToken_lt_gt_2918_)
+ @Js
+ def PyJs_readToken_eq_excl_2919_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'readToken_eq_excl':PyJs_readToken_eq_excl_2919_, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code', u'next'])
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ if PyJsStrictEq(var.get(u'next'),Js(61.0)):
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'equality'), (Js(3.0) if PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(2.0))),Js(61.0)) else Js(2.0)))
+ if (PyJsStrictEq(var.get(u'code'),Js(61.0)) and PyJsStrictEq(var.get(u'next'),Js(62.0))):
+ var.get(u"this").get(u'state').put(u'pos', Js(2.0), u'+')
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'arrow'))
+ return var.get(u"this").callprop(u'finishOp', (var.get(u'types').get(u'eq') if PyJsStrictEq(var.get(u'code'),Js(61.0)) else var.get(u'types').get(u'prefix')), Js(1.0))
+ PyJs_readToken_eq_excl_2919_._set_name(u'readToken_eq_excl')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readToken_eq_excl', PyJs_readToken_eq_excl_2919_)
+ @Js
+ def PyJs_getTokenFromCode_2920_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'getTokenFromCode':PyJs_getTokenFromCode_2920_, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code', u'next'])
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'code'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(46.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readToken_dot')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(40.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'parenL'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(41.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'parenR'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(59.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'semi'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(44.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'comma'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(91.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'bracketL'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(93.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'bracketR'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(123.0)):
+ SWITCHED = True
+ if (var.get(u"this").callprop(u'hasPlugin', Js(u'flow')) and PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))),Js(124.0))):
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'braceBarL'), Js(2.0))
+ else:
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'braceL'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(125.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'braceR'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(58.0)):
+ SWITCHED = True
+ if (var.get(u"this").callprop(u'hasPlugin', Js(u'functionBind')) and PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))),Js(58.0))):
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'doubleColon'), Js(2.0))
+ else:
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'colon'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(63.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'question'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(64.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'at'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(96.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'backQuote'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(48.0)):
+ SWITCHED = True
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))))
+ if (PyJsStrictEq(var.get(u'next'),Js(120.0)) or PyJsStrictEq(var.get(u'next'),Js(88.0))):
+ return var.get(u"this").callprop(u'readRadixNumber', Js(16.0))
+ if (PyJsStrictEq(var.get(u'next'),Js(111.0)) or PyJsStrictEq(var.get(u'next'),Js(79.0))):
+ return var.get(u"this").callprop(u'readRadixNumber', Js(8.0))
+ if (PyJsStrictEq(var.get(u'next'),Js(98.0)) or PyJsStrictEq(var.get(u'next'),Js(66.0))):
+ return var.get(u"this").callprop(u'readRadixNumber', Js(2.0))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(49.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(50.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(51.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(52.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(53.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(54.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(55.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(56.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(57.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readNumber', Js(False))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(34.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(39.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readString', var.get(u'code'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(47.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readToken_slash')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(37.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(42.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readToken_mult_modulo', var.get(u'code'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(124.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(38.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readToken_pipe_amp', var.get(u'code'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(94.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readToken_caret')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(43.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(45.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readToken_plus_min', var.get(u'code'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(60.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(62.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readToken_lt_gt', var.get(u'code'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(61.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(33.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'readToken_eq_excl', var.get(u'code'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(126.0)):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'finishOp', var.get(u'types').get(u'prefix'), Js(1.0))
+ SWITCHED = True
+ break
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'pos'), ((Js(u"Unexpected character '")+var.get(u'codePointToString')(var.get(u'code')))+Js(u"'")))
+ PyJs_getTokenFromCode_2920_._set_name(u'getTokenFromCode')
+ var.get(u'Tokenizer').get(u'prototype').put(u'getTokenFromCode', PyJs_getTokenFromCode_2920_)
+ @Js
+ def PyJs_finishOp_2921_(type, size, this, arguments, var=var):
+ var = Scope({u'this':this, u'finishOp':PyJs_finishOp_2921_, u'type':type, u'arguments':arguments, u'size':size}, var)
+ var.registers([u'type', u'str', u'size'])
+ var.put(u'str', var.get(u"this").get(u'input').callprop(u'slice', var.get(u"this").get(u'state').get(u'pos'), (var.get(u"this").get(u'state').get(u'pos')+var.get(u'size'))))
+ var.get(u"this").get(u'state').put(u'pos', var.get(u'size'), u'+')
+ return var.get(u"this").callprop(u'finishToken', var.get(u'type'), var.get(u'str'))
+ PyJs_finishOp_2921_._set_name(u'finishOp')
+ var.get(u'Tokenizer').get(u'prototype').put(u'finishOp', PyJs_finishOp_2921_)
+ @Js
+ def PyJs_readRegexp_2922_(this, arguments, var=var):
+ var = Scope({u'this':this, u'readRegexp':PyJs_readRegexp_2922_, u'arguments':arguments}, var)
+ var.registers([u'content', u'ch', u'inClass', u'escaped', u'start', u'mods', u'validFlags'])
+ var.put(u'escaped', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'inClass', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'start', var.get(u"this").get(u'state').get(u'pos'))
+ #for JS loop
+
+ while 1:
+ if (var.get(u"this").get(u'state').get(u'pos')>=var.get(u"this").get(u'input').get(u'length')):
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'Unterminated regular expression'))
+ var.put(u'ch', var.get(u"this").get(u'input').callprop(u'charAt', var.get(u"this").get(u'state').get(u'pos')))
+ if var.get(u'lineBreak').callprop(u'test', var.get(u'ch')):
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'Unterminated regular expression'))
+ if var.get(u'escaped'):
+ var.put(u'escaped', Js(False))
+ else:
+ if PyJsStrictEq(var.get(u'ch'),Js(u'[')):
+ var.put(u'inClass', var.get(u'true'))
+ else:
+ if (PyJsStrictEq(var.get(u'ch'),Js(u']')) and var.get(u'inClass')):
+ var.put(u'inClass', Js(False))
+ else:
+ if (PyJsStrictEq(var.get(u'ch'),Js(u'/')) and var.get(u'inClass').neg()):
+ break
+ var.put(u'escaped', PyJsStrictEq(var.get(u'ch'),Js(u'\\')))
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+
+ var.put(u'content', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'start'), var.get(u"this").get(u'state').get(u'pos')))
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ var.put(u'mods', var.get(u"this").callprop(u'readWord1'))
+ if var.get(u'mods'):
+ var.put(u'validFlags', JsRegExp(u'/^[gmsiyu]*$/'))
+ if var.get(u'validFlags').callprop(u'test', var.get(u'mods')).neg():
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'Invalid regular expression flag'))
+ PyJs_Object_2923_ = Js({u'pattern':var.get(u'content'),u'flags':var.get(u'mods')})
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'regexp'), PyJs_Object_2923_)
+ PyJs_readRegexp_2922_._set_name(u'readRegexp')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readRegexp', PyJs_readRegexp_2922_)
+ @Js
+ def PyJs_readInt_2924_(radix, len, this, arguments, var=var):
+ var = Scope({u'this':this, u'readInt':PyJs_readInt_2924_, u'radix':radix, u'arguments':arguments, u'len':len}, var)
+ var.registers([u'code', u'e', u'val', u'i', u'len', u'start', u'radix', u'total'])
+ var.put(u'start', var.get(u"this").get(u'state').get(u'pos'))
+ var.put(u'total', Js(0.0))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'e', (var.get(u'Infinity') if (var.get(u'len')==var.get(u"null")) else var.get(u'len')))
+ while (var.get(u'i')=Js(97.0)):
+ var.put(u'val', ((var.get(u'code')-Js(97.0))+Js(10.0)))
+ else:
+ if (var.get(u'code')>=Js(65.0)):
+ var.put(u'val', ((var.get(u'code')-Js(65.0))+Js(10.0)))
+ else:
+ if ((var.get(u'code')>=Js(48.0)) and (var.get(u'code')<=Js(57.0))):
+ var.put(u'val', (var.get(u'code')-Js(48.0)))
+ else:
+ var.put(u'val', var.get(u'Infinity'))
+ if (var.get(u'val')>=var.get(u'radix')):
+ break
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ var.put(u'total', ((var.get(u'total')*var.get(u'radix'))+var.get(u'val')))
+ finally:
+ var.put(u'i',Js(var.get(u'i').to_number())+Js(1))
+ if (PyJsStrictEq(var.get(u"this").get(u'state').get(u'pos'),var.get(u'start')) or ((var.get(u'len')!=var.get(u"null")) and PyJsStrictNeq((var.get(u"this").get(u'state').get(u'pos')-var.get(u'start')),var.get(u'len')))):
+ return var.get(u"null")
+ return var.get(u'total')
+ PyJs_readInt_2924_._set_name(u'readInt')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readInt', PyJs_readInt_2924_)
+ @Js
+ def PyJs_readRadixNumber_2925_(radix, this, arguments, var=var):
+ var = Scope({u'this':this, u'radix':radix, u'arguments':arguments, u'readRadixNumber':PyJs_readRadixNumber_2925_}, var)
+ var.registers([u'radix', u'val'])
+ var.get(u"this").get(u'state').put(u'pos', Js(2.0), u'+')
+ var.put(u'val', var.get(u"this").callprop(u'readInt', var.get(u'radix')))
+ if (var.get(u'val')==var.get(u"null")):
+ var.get(u"this").callprop(u'raise', (var.get(u"this").get(u'state').get(u'start')+Js(2.0)), (Js(u'Expected number in radix ')+var.get(u'radix')))
+ if var.get(u'isIdentifierStart')(var.get(u"this").callprop(u'fullCharCodeAtPos')):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'pos'), Js(u'Identifier directly after number'))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'num'), var.get(u'val'))
+ PyJs_readRadixNumber_2925_._set_name(u'readRadixNumber')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readRadixNumber', PyJs_readRadixNumber_2925_)
+ @Js
+ def PyJs_readNumber_2926_(startsWithDot, this, arguments, var=var):
+ var = Scope({u'this':this, u'startsWithDot':startsWithDot, u'arguments':arguments, u'readNumber':PyJs_readNumber_2926_}, var)
+ var.registers([u'isFloat', u'val', u'next', u'start', u'str', u'octal', u'startsWithDot'])
+ var.put(u'start', var.get(u"this").get(u'state').get(u'pos'))
+ var.put(u'isFloat', Js(False))
+ var.put(u'octal', PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')),Js(48.0)))
+ if (var.get(u'startsWithDot').neg() and PyJsStrictEq(var.get(u"this").callprop(u'readInt', Js(10.0)),var.get(u"null"))):
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'Invalid number'))
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')))
+ if PyJsStrictEq(var.get(u'next'),Js(46.0)):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ var.get(u"this").callprop(u'readInt', Js(10.0))
+ var.put(u'isFloat', var.get(u'true'))
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')))
+ if (PyJsStrictEq(var.get(u'next'),Js(69.0)) or PyJsStrictEq(var.get(u'next'),Js(101.0))):
+ var.put(u'next', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))))
+ if (PyJsStrictEq(var.get(u'next'),Js(43.0)) or PyJsStrictEq(var.get(u'next'),Js(45.0))):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ if PyJsStrictEq(var.get(u"this").callprop(u'readInt', Js(10.0)),var.get(u"null")):
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'Invalid number'))
+ var.put(u'isFloat', var.get(u'true'))
+ if var.get(u'isIdentifierStart')(var.get(u"this").callprop(u'fullCharCodeAtPos')):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'pos'), Js(u'Identifier directly after number'))
+ var.put(u'str', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'start'), var.get(u"this").get(u'state').get(u'pos')))
+ var.put(u'val', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'isFloat'):
+ var.put(u'val', var.get(u'parseFloat')(var.get(u'str')))
+ else:
+ if (var.get(u'octal').neg() or PyJsStrictEq(var.get(u'str').get(u'length'),Js(1.0))):
+ var.put(u'val', var.get(u'parseInt')(var.get(u'str'), Js(10.0)))
+ else:
+ if (JsRegExp(u'/[89]/').callprop(u'test', var.get(u'str')) or var.get(u"this").get(u'state').get(u'strict')):
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'Invalid number'))
+ else:
+ var.put(u'val', var.get(u'parseInt')(var.get(u'str'), Js(8.0)))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'num'), var.get(u'val'))
+ PyJs_readNumber_2926_._set_name(u'readNumber')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readNumber', PyJs_readNumber_2926_)
+ @Js
+ def PyJs_readCodePoint_2927_(this, arguments, var=var):
+ var = Scope({u'this':this, u'readCodePoint':PyJs_readCodePoint_2927_, u'arguments':arguments}, var)
+ var.registers([u'code', u'ch', u'codePos'])
+ var.put(u'ch', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')))
+ var.put(u'code', PyJsComma(Js(0.0), Js(None)))
+ if PyJsStrictEq(var.get(u'ch'),Js(123.0)):
+ var.put(u'codePos', var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1)))
+ var.put(u'code', var.get(u"this").callprop(u'readHexChar', (var.get(u"this").get(u'input').callprop(u'indexOf', Js(u'}'), var.get(u"this").get(u'state').get(u'pos'))-var.get(u"this").get(u'state').get(u'pos'))))
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ if (var.get(u'code')>Js(1114111)):
+ var.get(u"this").callprop(u'raise', var.get(u'codePos'), Js(u'Code point out of bounds'))
+ else:
+ var.put(u'code', var.get(u"this").callprop(u'readHexChar', Js(4.0)))
+ return var.get(u'code')
+ PyJs_readCodePoint_2927_._set_name(u'readCodePoint')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readCodePoint', PyJs_readCodePoint_2927_)
+ @Js
+ def PyJs_readString_2928_(quote, this, arguments, var=var):
+ var = Scope({u'this':this, u'quote':quote, u'arguments':arguments, u'readString':PyJs_readString_2928_}, var)
+ var.registers([u'ch', u'quote', u'chunkStart', u'out'])
+ var.put(u'out', Js(u''))
+ var.put(u'chunkStart', var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1)))
+ #for JS loop
+
+ while 1:
+ if (var.get(u"this").get(u'state').get(u'pos')>=var.get(u"this").get(u'input').get(u'length')):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u'Unterminated string constant'))
+ var.put(u'ch', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')))
+ if PyJsStrictEq(var.get(u'ch'),var.get(u'quote')):
+ break
+ if PyJsStrictEq(var.get(u'ch'),Js(92.0)):
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), var.get(u"this").get(u'state').get(u'pos')), u'+')
+ var.put(u'out', var.get(u"this").callprop(u'readEscapedChar', Js(False)), u'+')
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ else:
+ if var.get(u'isNewLine')(var.get(u'ch')):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u'Unterminated string constant'))
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), (var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))-Js(1))), u'+')
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'string'), var.get(u'out'))
+ PyJs_readString_2928_._set_name(u'readString')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readString', PyJs_readString_2928_)
+ @Js
+ def PyJs_readTmplToken_2929_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'readTmplToken':PyJs_readTmplToken_2929_}, var)
+ var.registers([u'ch', u'chunkStart', u'out'])
+ var.put(u'out', Js(u''))
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ #for JS loop
+
+ while 1:
+ if (var.get(u"this").get(u'state').get(u'pos')>=var.get(u"this").get(u'input').get(u'length')):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u'Unterminated template'))
+ var.put(u'ch', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')))
+ if (PyJsStrictEq(var.get(u'ch'),Js(96.0)) or (PyJsStrictEq(var.get(u'ch'),Js(36.0)) and PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', (var.get(u"this").get(u'state').get(u'pos')+Js(1.0))),Js(123.0)))):
+ if (PyJsStrictEq(var.get(u"this").get(u'state').get(u'pos'),var.get(u"this").get(u'state').get(u'start')) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'template'))):
+ if PyJsStrictEq(var.get(u'ch'),Js(36.0)):
+ var.get(u"this").get(u'state').put(u'pos', Js(2.0), u'+')
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'dollarBraceL'))
+ else:
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'backQuote'))
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), var.get(u"this").get(u'state').get(u'pos')), u'+')
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'template'), var.get(u'out'))
+ if PyJsStrictEq(var.get(u'ch'),Js(92.0)):
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), var.get(u"this").get(u'state').get(u'pos')), u'+')
+ var.put(u'out', var.get(u"this").callprop(u'readEscapedChar', var.get(u'true')), u'+')
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ else:
+ if var.get(u'isNewLine')(var.get(u'ch')):
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), var.get(u"this").get(u'state').get(u'pos')), u'+')
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'ch'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(13.0)):
+ SWITCHED = True
+ if PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')),Js(10.0)):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(10.0)):
+ SWITCHED = True
+ var.put(u'out', Js(u'\n'), u'+')
+ break
+ if True:
+ SWITCHED = True
+ var.put(u'out', var.get(u'String').callprop(u'fromCharCode', var.get(u'ch')), u'+')
+ break
+ SWITCHED = True
+ break
+ var.get(u"this").get(u'state').put(u'curLine',Js(var.get(u"this").get(u'state').get(u'curLine').to_number())+Js(1))
+ var.get(u"this").get(u'state').put(u'lineStart', var.get(u"this").get(u'state').get(u'pos'))
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ else:
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+
+ PyJs_readTmplToken_2929_._set_name(u'readTmplToken')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readTmplToken', PyJs_readTmplToken_2929_)
+ @Js
+ def PyJs_readEscapedChar_2930_(inTemplate, this, arguments, var=var):
+ var = Scope({u'this':this, u'readEscapedChar':PyJs_readEscapedChar_2930_, u'inTemplate':inTemplate, u'arguments':arguments}, var)
+ var.registers([u'octal', u'octalStr', u'ch', u'inTemplate'])
+ var.put(u'ch', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))))
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'ch'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(110.0)):
+ SWITCHED = True
+ return Js(u'\n')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(114.0)):
+ SWITCHED = True
+ return Js(u'\r')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(120.0)):
+ SWITCHED = True
+ return var.get(u'String').callprop(u'fromCharCode', var.get(u"this").callprop(u'readHexChar', Js(2.0)))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(117.0)):
+ SWITCHED = True
+ return var.get(u'codePointToString')(var.get(u"this").callprop(u'readCodePoint'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(116.0)):
+ SWITCHED = True
+ return Js(u'\t')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(98.0)):
+ SWITCHED = True
+ return Js(u'\x08')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(118.0)):
+ SWITCHED = True
+ return Js(u'\x0b')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(102.0)):
+ SWITCHED = True
+ return Js(u'\x0c')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(13.0)):
+ SWITCHED = True
+ if PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')),Js(10.0)):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(10.0)):
+ SWITCHED = True
+ var.get(u"this").get(u'state').put(u'lineStart', var.get(u"this").get(u'state').get(u'pos'))
+ var.get(u"this").get(u'state').put(u'curLine',Js(var.get(u"this").get(u'state').get(u'curLine').to_number())+Js(1))
+ return Js(u'')
+ if True:
+ SWITCHED = True
+ if ((var.get(u'ch')>=Js(48.0)) and (var.get(u'ch')<=Js(55.0))):
+ var.put(u'octalStr', var.get(u"this").get(u'input').callprop(u'substr', (var.get(u"this").get(u'state').get(u'pos')-Js(1.0)), Js(3.0)).callprop(u'match', JsRegExp(u'/^[0-7]+/')).get(u'0'))
+ var.put(u'octal', var.get(u'parseInt')(var.get(u'octalStr'), Js(8.0)))
+ if (var.get(u'octal')>Js(255.0)):
+ var.put(u'octalStr', var.get(u'octalStr').callprop(u'slice', Js(0.0), (-Js(1.0))))
+ var.put(u'octal', var.get(u'parseInt')(var.get(u'octalStr'), Js(8.0)))
+ if (var.get(u'octal')>Js(0.0)):
+ if var.get(u"this").get(u'state').get(u'containsOctal').neg():
+ var.get(u"this").get(u'state').put(u'containsOctal', var.get(u'true'))
+ var.get(u"this").get(u'state').put(u'octalPosition', (var.get(u"this").get(u'state').get(u'pos')-Js(2.0)))
+ if (var.get(u"this").get(u'state').get(u'strict') or var.get(u'inTemplate')):
+ var.get(u"this").callprop(u'raise', (var.get(u"this").get(u'state').get(u'pos')-Js(2.0)), Js(u'Octal literal in strict mode'))
+ var.get(u"this").get(u'state').put(u'pos', (var.get(u'octalStr').get(u'length')-Js(1.0)), u'+')
+ return var.get(u'String').callprop(u'fromCharCode', var.get(u'octal'))
+ return var.get(u'String').callprop(u'fromCharCode', var.get(u'ch'))
+ SWITCHED = True
+ break
+ PyJs_readEscapedChar_2930_._set_name(u'readEscapedChar')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readEscapedChar', PyJs_readEscapedChar_2930_)
+ @Js
+ def PyJs_readHexChar_2931_(len, this, arguments, var=var):
+ var = Scope({u'this':this, u'readHexChar':PyJs_readHexChar_2931_, u'arguments':arguments, u'len':len}, var)
+ var.registers([u'codePos', u'len', u'n'])
+ var.put(u'codePos', var.get(u"this").get(u'state').get(u'pos'))
+ var.put(u'n', var.get(u"this").callprop(u'readInt', Js(16.0), var.get(u'len')))
+ if PyJsStrictEq(var.get(u'n'),var.get(u"null")):
+ var.get(u"this").callprop(u'raise', var.get(u'codePos'), Js(u'Bad character escape sequence'))
+ return var.get(u'n')
+ PyJs_readHexChar_2931_._set_name(u'readHexChar')
+ var.get(u'Tokenizer').get(u'prototype').put(u'readHexChar', PyJs_readHexChar_2931_)
+ @Js
+ def PyJs_readWord1_2932_(this, arguments, var=var):
+ var = Scope({u'this':this, u'readWord1':PyJs_readWord1_2932_, u'arguments':arguments}, var)
+ var.registers([u'ch', u'word', u'chunkStart', u'escStart', u'esc', u'first'])
+ var.get(u"this").get(u'state').put(u'containsEsc', Js(False))
+ var.put(u'word', Js(u''))
+ var.put(u'first', var.get(u'true'))
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ while (var.get(u"this").get(u'state').get(u'pos')=Js(0.0)):
+ @Js
+ def PyJs_anonymous_2944_(plugin, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'plugin':plugin}, var)
+ var.registers([u'plugin'])
+ return PyJsStrictNeq(var.get(u'plugin'),Js(u'flow'))
+ PyJs_anonymous_2944_._set_name(u'anonymous')
+ var.put(u'pluginList', var.get(u'pluginList').callprop(u'filter', PyJs_anonymous_2944_))
+ var.get(u'pluginList').callprop(u'push', Js(u'flow'))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'pluginList'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else var.get(u'_iterator').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'name', var.get(u'_ref'))
+ if var.get(u'pluginMap').get(var.get(u'name')).neg():
+ var.get(u'pluginMap').put(var.get(u'name'), var.get(u'true'))
+ var.put(u'plugin', var.get(u'plugins').get(var.get(u'name')))
+ if var.get(u'plugin'):
+ var.get(u'plugin')(var.get(u"this"))
+
+ return var.get(u'pluginMap')
+ PyJs_loadPlugins_2942_._set_name(u'loadPlugins')
+ var.get(u'Parser').get(u'prototype').put(u'loadPlugins', PyJs_loadPlugins_2942_)
+ @Js
+ def PyJs_parse_2945_(this, arguments, var=var):
+ var = Scope({u'this':this, u'parse':PyJs_parse_2945_, u'arguments':arguments}, var)
+ var.registers([u'program', u'file'])
+ var.put(u'file', var.get(u"this").callprop(u'startNode'))
+ var.put(u'program', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'nextToken')
+ return var.get(u"this").callprop(u'parseTopLevel', var.get(u'file'), var.get(u'program'))
+ PyJs_parse_2945_._set_name(u'parse')
+ var.get(u'Parser').get(u'prototype').put(u'parse', PyJs_parse_2945_)
+ return var.get(u'Parser')
+ PyJs_anonymous_2939_._set_name(u'anonymous')
+ var.put(u'Parser', PyJs_anonymous_2939_(var.get(u'Tokenizer')))
+ @Js
+ def PyJs_anonymous_2946_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ return var.get(u'obj',throw=False).typeof()
+ PyJs_anonymous_2946_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_2947_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ return (Js(u'symbol') if (((var.get(u'obj') and PyJsStrictEq(var.get(u'Symbol',throw=False).typeof(),Js(u'function'))) and PyJsStrictEq(var.get(u'obj').get(u'constructor'),var.get(u'Symbol'))) and PyJsStrictNeq(var.get(u'obj'),var.get(u'Symbol').get(u'prototype'))) else var.get(u'obj',throw=False).typeof())
+ PyJs_anonymous_2947_._set_name(u'anonymous')
+ var.put(u'_typeof', (PyJs_anonymous_2946_ if (PyJsStrictEq(var.get(u'Symbol',throw=False).typeof(),Js(u'function')) and PyJsStrictEq(var.get(u'Symbol').get(u'iterator').typeof(),Js(u'symbol'))) else PyJs_anonymous_2947_))
+ var.put(u'pp', var.get(u'Parser').get(u'prototype'))
+ @Js
+ def PyJs_anonymous_2948_(node, key, val, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'val':val, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'node', u'val', u'key', u'extra'])
+ if var.get(u'node').neg():
+ return var.get('undefined')
+ PyJs_Object_2949_ = Js({})
+ var.put(u'extra', var.get(u'node').put(u'extra', (var.get(u'node').get(u'extra') or PyJs_Object_2949_)))
+ var.get(u'extra').put(var.get(u'key'), var.get(u'val'))
+ PyJs_anonymous_2948_._set_name(u'anonymous')
+ var.get(u'pp').put(u'addExtra', PyJs_anonymous_2948_)
+ @Js
+ def PyJs_anonymous_2950_(op, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'op':op}, var)
+ var.registers([u'op'])
+ return (var.get(u"this").callprop(u'match', var.get(u'types').get(u'relational')) and PyJsStrictEq(var.get(u"this").get(u'state').get(u'value'),var.get(u'op')))
+ PyJs_anonymous_2950_._set_name(u'anonymous')
+ var.get(u'pp').put(u'isRelational', PyJs_anonymous_2950_)
+ @Js
+ def PyJs_anonymous_2951_(op, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'op':op}, var)
+ var.registers([u'op'])
+ if var.get(u"this").callprop(u'isRelational', var.get(u'op')):
+ var.get(u"this").callprop(u'next')
+ else:
+ var.get(u"this").callprop(u'unexpected', var.get(u"null"), var.get(u'types').get(u'relational'))
+ PyJs_anonymous_2951_._set_name(u'anonymous')
+ var.get(u'pp').put(u'expectRelational', PyJs_anonymous_2951_)
+ @Js
+ def PyJs_anonymous_2952_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return (var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')) and PyJsStrictEq(var.get(u"this").get(u'state').get(u'value'),var.get(u'name')))
+ PyJs_anonymous_2952_._set_name(u'anonymous')
+ var.get(u'pp').put(u'isContextual', PyJs_anonymous_2952_)
+ @Js
+ def PyJs_anonymous_2953_(name, this, arguments, var=var):
+ var = Scope({u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'name'])
+ return (PyJsStrictEq(var.get(u"this").get(u'state').get(u'value'),var.get(u'name')) and var.get(u"this").callprop(u'eat', var.get(u'types').get(u'name')))
+ PyJs_anonymous_2953_._set_name(u'anonymous')
+ var.get(u'pp').put(u'eatContextual', PyJs_anonymous_2953_)
+ @Js
+ def PyJs_anonymous_2954_(name, message, this, arguments, var=var):
+ var = Scope({u'this':this, u'message':message, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'message', u'name'])
+ if var.get(u"this").callprop(u'eatContextual', var.get(u'name')).neg():
+ var.get(u"this").callprop(u'unexpected', var.get(u"null"), var.get(u'message'))
+ PyJs_anonymous_2954_._set_name(u'anonymous')
+ var.get(u'pp').put(u'expectContextual', PyJs_anonymous_2954_)
+ @Js
+ def PyJs_anonymous_2955_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return ((var.get(u"this").callprop(u'match', var.get(u'types').get(u'eof')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'braceR'))) or var.get(u'lineBreak').callprop(u'test', var.get(u"this").get(u'input').callprop(u'slice', var.get(u"this").get(u'state').get(u'lastTokEnd'), var.get(u"this").get(u'state').get(u'start'))))
+ PyJs_anonymous_2955_._set_name(u'anonymous')
+ var.get(u'pp').put(u'canInsertSemicolon', PyJs_anonymous_2955_)
+ @Js
+ def PyJs_anonymous_2956_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return (var.get(u"this").callprop(u'eat', var.get(u'types').get(u'semi')) or var.get(u"this").callprop(u'canInsertSemicolon'))
+ PyJs_anonymous_2956_._set_name(u'anonymous')
+ var.get(u'pp').put(u'isLineTerminator', PyJs_anonymous_2956_)
+ @Js
+ def PyJs_anonymous_2957_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u"this").callprop(u'isLineTerminator').neg():
+ var.get(u"this").callprop(u'unexpected', var.get(u"null"), var.get(u'types').get(u'semi'))
+ PyJs_anonymous_2957_._set_name(u'anonymous')
+ var.get(u'pp').put(u'semicolon', PyJs_anonymous_2957_)
+ @Js
+ def PyJs_anonymous_2958_(type, pos, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'pos':pos, u'arguments':arguments}, var)
+ var.registers([u'type', u'pos'])
+ return (var.get(u"this").callprop(u'eat', var.get(u'type')) or var.get(u"this").callprop(u'unexpected', var.get(u'pos'), var.get(u'type')))
+ PyJs_anonymous_2958_._set_name(u'anonymous')
+ var.get(u'pp').put(u'expect', PyJs_anonymous_2958_)
+ @Js
+ def PyJs_anonymous_2959_(pos, this, arguments, var=var):
+ var = Scope({u'this':this, u'pos':pos, u'arguments':arguments}, var)
+ var.registers([u'pos', u'messageOrType'])
+ var.put(u'messageOrType', (var.get(u'arguments').get(u'1') if ((var.get(u'arguments').get(u'length')>Js(1.0)) and PyJsStrictNeq(var.get(u'arguments').get(u'1'),var.get(u'undefined'))) else Js(u'Unexpected token')))
+ if ((var.get(u'messageOrType') and PyJsStrictEq((Js(u'undefined') if PyJsStrictEq(var.get(u'messageOrType',throw=False).typeof(),Js(u'undefined')) else var.get(u'_typeof')(var.get(u'messageOrType'))),Js(u'object'))) and var.get(u'messageOrType').get(u'label')):
+ var.put(u'messageOrType', (Js(u'Unexpected token, expected ')+var.get(u'messageOrType').get(u'label')))
+ var.get(u"this").callprop(u'raise', (var.get(u'pos') if (var.get(u'pos')!=var.get(u"null")) else var.get(u"this").get(u'state').get(u'start')), var.get(u'messageOrType'))
+ PyJs_anonymous_2959_._set_name(u'anonymous')
+ var.get(u'pp').put(u'unexpected', PyJs_anonymous_2959_)
+ var.put(u'pp$1', var.get(u'Parser').get(u'prototype'))
+ @Js
+ def PyJs_anonymous_2960_(file, program, this, arguments, var=var):
+ var = Scope({u'this':this, u'program':program, u'arguments':arguments, u'file':file}, var)
+ var.registers([u'program', u'file'])
+ var.get(u'program').put(u'sourceType', var.get(u"this").get(u'options').get(u'sourceType'))
+ var.get(u"this").callprop(u'parseBlockBody', var.get(u'program'), var.get(u'true'), var.get(u'true'), var.get(u'types').get(u'eof'))
+ var.get(u'file').put(u'program', var.get(u"this").callprop(u'finishNode', var.get(u'program'), Js(u'Program')))
+ var.get(u'file').put(u'comments', var.get(u"this").get(u'state').get(u'comments'))
+ var.get(u'file').put(u'tokens', var.get(u"this").get(u'state').get(u'tokens'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'file'), Js(u'File'))
+ PyJs_anonymous_2960_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseTopLevel', PyJs_anonymous_2960_)
+ PyJs_Object_2961_ = Js({u'kind':Js(u'loop')})
+ var.put(u'loopLabel', PyJs_Object_2961_)
+ PyJs_Object_2962_ = Js({u'kind':Js(u'switch')})
+ var.put(u'switchLabel', PyJs_Object_2962_)
+ @Js
+ def PyJs_anonymous_2963_(stmt, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'stmt':stmt}, var)
+ var.registers([u'directiveLiteral', u'directive', u'val', u'expr', u'stmt', u'raw'])
+ var.put(u'expr', var.get(u'stmt').get(u'expression'))
+ var.put(u'directiveLiteral', var.get(u"this").callprop(u'startNodeAt', var.get(u'expr').get(u'start'), var.get(u'expr').get(u'loc').get(u'start')))
+ var.put(u'directive', var.get(u"this").callprop(u'startNodeAt', var.get(u'stmt').get(u'start'), var.get(u'stmt').get(u'loc').get(u'start')))
+ var.put(u'raw', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'expr').get(u'start'), var.get(u'expr').get(u'end')))
+ var.put(u'val', var.get(u'directiveLiteral').put(u'value', var.get(u'raw').callprop(u'slice', Js(1.0), (-Js(1.0)))))
+ var.get(u"this").callprop(u'addExtra', var.get(u'directiveLiteral'), Js(u'raw'), var.get(u'raw'))
+ var.get(u"this").callprop(u'addExtra', var.get(u'directiveLiteral'), Js(u'rawValue'), var.get(u'val'))
+ var.get(u'directive').put(u'value', var.get(u"this").callprop(u'finishNodeAt', var.get(u'directiveLiteral'), Js(u'DirectiveLiteral'), var.get(u'expr').get(u'end'), var.get(u'expr').get(u'loc').get(u'end')))
+ return var.get(u"this").callprop(u'finishNodeAt', var.get(u'directive'), Js(u'Directive'), var.get(u'stmt').get(u'end'), var.get(u'stmt').get(u'loc').get(u'end'))
+ PyJs_anonymous_2963_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'stmtToDirective', PyJs_anonymous_2963_)
+ @Js
+ def PyJs_anonymous_2964_(declaration, topLevel, this, arguments, var=var):
+ var = Scope({u'this':this, u'topLevel':topLevel, u'arguments':arguments, u'declaration':declaration}, var)
+ var.registers([u'node', u'expr', u'topLevel', u'state', u'starttype', u'declaration', u'maybeName'])
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'at')):
+ var.get(u"this").callprop(u'parseDecorators', var.get(u'true'))
+ var.put(u'starttype', var.get(u"this").get(u'state').get(u'type'))
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'starttype'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_break')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_continue')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseBreakContinueStatement', var.get(u'node'), var.get(u'starttype').get(u'keyword'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_debugger')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseDebuggerStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_do')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseDoStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_for')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseForStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_function')):
+ SWITCHED = True
+ if var.get(u'declaration').neg():
+ var.get(u"this").callprop(u'unexpected')
+ return var.get(u"this").callprop(u'parseFunctionStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_class')):
+ SWITCHED = True
+ if var.get(u'declaration').neg():
+ var.get(u"this").callprop(u'unexpected')
+ var.get(u"this").callprop(u'takeDecorators', var.get(u'node'))
+ return var.get(u"this").callprop(u'parseClass', var.get(u'node'), var.get(u'true'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_if')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseIfStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_return')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseReturnStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_switch')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseSwitchStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_throw')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseThrowStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_try')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseTryStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_let')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_const')):
+ SWITCHED = True
+ if var.get(u'declaration').neg():
+ var.get(u"this").callprop(u'unexpected')
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_var')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseVarStatement', var.get(u'node'), var.get(u'starttype'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_while')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseWhileStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_with')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseWithStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'braceL')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseBlock')
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'semi')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseEmptyStatement', var.get(u'node'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_export')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_import')):
+ SWITCHED = True
+ if (var.get(u"this").callprop(u'hasPlugin', Js(u'dynamicImport')) and PyJsStrictEq(var.get(u"this").callprop(u'lookahead').get(u'type'),var.get(u'types').get(u'parenL'))):
+ break
+ if var.get(u"this").get(u'options').get(u'allowImportExportEverywhere').neg():
+ if var.get(u'topLevel').neg():
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u"'import' and 'export' may only appear at the top level"))
+ if var.get(u"this").get(u'inModule').neg():
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u"'import' and 'export' may appear only with 'sourceType: module'"))
+ return (var.get(u"this").callprop(u'parseImport', var.get(u'node')) if PyJsStrictEq(var.get(u'starttype'),var.get(u'types').get(u'_import')) else var.get(u"this").callprop(u'parseExport', var.get(u'node')))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'name')):
+ SWITCHED = True
+ if PyJsStrictEq(var.get(u"this").get(u'state').get(u'value'),Js(u'async')):
+ var.put(u'state', var.get(u"this").get(u'state').callprop(u'clone'))
+ var.get(u"this").callprop(u'next')
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'_function')) and var.get(u"this").callprop(u'canInsertSemicolon').neg()):
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'_function'))
+ return var.get(u"this").callprop(u'parseFunction', var.get(u'node'), var.get(u'true'), Js(False), var.get(u'true'))
+ else:
+ var.get(u"this").put(u'state', var.get(u'state'))
+ SWITCHED = True
+ break
+ var.put(u'maybeName', var.get(u"this").get(u'state').get(u'value'))
+ var.put(u'expr', var.get(u"this").callprop(u'parseExpression'))
+ if ((PyJsStrictEq(var.get(u'starttype'),var.get(u'types').get(u'name')) and PyJsStrictEq(var.get(u'expr').get(u'type'),Js(u'Identifier'))) and var.get(u"this").callprop(u'eat', var.get(u'types').get(u'colon'))):
+ return var.get(u"this").callprop(u'parseLabeledStatement', var.get(u'node'), var.get(u'maybeName'), var.get(u'expr'))
+ else:
+ return var.get(u"this").callprop(u'parseExpressionStatement', var.get(u'node'), var.get(u'expr'))
+ PyJs_anonymous_2964_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseStatement', PyJs_anonymous_2964_)
+ @Js
+ def PyJs_anonymous_2965_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").get(u'state').get(u'decorators').get(u'length'):
+ var.get(u'node').put(u'decorators', var.get(u"this").get(u'state').get(u'decorators'))
+ var.get(u"this").get(u'state').put(u'decorators', Js([]))
+ PyJs_anonymous_2965_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'takeDecorators', PyJs_anonymous_2965_)
+ @Js
+ def PyJs_anonymous_2966_(allowExport, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'allowExport':allowExport}, var)
+ var.registers([u'allowExport'])
+ while var.get(u"this").callprop(u'match', var.get(u'types').get(u'at')):
+ var.get(u"this").get(u'state').get(u'decorators').callprop(u'push', var.get(u"this").callprop(u'parseDecorator'))
+ if (var.get(u'allowExport') and var.get(u"this").callprop(u'match', var.get(u'types').get(u'_export'))):
+ return var.get('undefined')
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'_class')).neg():
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u'Leading decorators must be attached to a class declaration'))
+ PyJs_anonymous_2966_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseDecorators', PyJs_anonymous_2966_)
+ @Js
+ def PyJs_anonymous_2967_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").callprop(u'hasPlugin', Js(u'decorators')).neg():
+ var.get(u"this").callprop(u'unexpected')
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ var.get(u'node').put(u'expression', var.get(u"this").callprop(u'parseMaybeAssign'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'Decorator'))
+ PyJs_anonymous_2967_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseDecorator', PyJs_anonymous_2967_)
+ @Js
+ def PyJs_anonymous_2968_(node, keyword, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'keyword':keyword}, var)
+ var.registers([u'i', u'node', u'isBreak', u'keyword', u'lab'])
+ var.put(u'isBreak', PyJsStrictEq(var.get(u'keyword'),Js(u'break')))
+ var.get(u"this").callprop(u'next')
+ if var.get(u"this").callprop(u'isLineTerminator'):
+ var.get(u'node').put(u'label', var.get(u"null"))
+ else:
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')).neg():
+ var.get(u"this").callprop(u'unexpected')
+ else:
+ var.get(u'node').put(u'label', var.get(u"this").callprop(u'parseIdentifier'))
+ var.get(u"this").callprop(u'semicolon')
+ var.put(u'i', PyJsComma(Js(0.0), Js(None)))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'_label', var.get(u'_ref'))
+ if PyJsStrictEq(var.get(u'_label').get(u'name'),var.get(u'maybeName')):
+ var.get(u"this").callprop(u'raise', var.get(u'expr').get(u'start'), ((Js(u"Label '")+var.get(u'maybeName'))+Js(u"' is already declared")))
+
+ var.put(u'kind', (Js(u'loop') if var.get(u"this").get(u'state').get(u'type').get(u'isLoop') else (Js(u'switch') if var.get(u"this").callprop(u'match', var.get(u'types').get(u'_switch')) else var.get(u"null"))))
+ #for JS loop
+ var.put(u'i', (var.get(u"this").get(u'state').get(u'labels').get(u'length')-Js(1.0)))
+ while (var.get(u'i')>=Js(0.0)):
+ try:
+ var.put(u'label', var.get(u"this").get(u'state').get(u'labels').get(var.get(u'i')))
+ if PyJsStrictEq(var.get(u'label').get(u'statementStart'),var.get(u'node').get(u'start')):
+ var.get(u'label').put(u'statementStart', var.get(u"this").get(u'state').get(u'start'))
+ var.get(u'label').put(u'kind', var.get(u'kind'))
+ else:
+ break
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ PyJs_Object_2984_ = Js({u'name':var.get(u'maybeName'),u'kind':var.get(u'kind'),u'statementStart':var.get(u"this").get(u'state').get(u'start')})
+ var.get(u"this").get(u'state').get(u'labels').callprop(u'push', PyJs_Object_2984_)
+ var.get(u'node').put(u'body', var.get(u"this").callprop(u'parseStatement', var.get(u'true')))
+ var.get(u"this").get(u'state').get(u'labels').callprop(u'pop')
+ var.get(u'node').put(u'label', var.get(u'expr'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'LabeledStatement'))
+ PyJs_anonymous_2983_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseLabeledStatement', PyJs_anonymous_2983_)
+ @Js
+ def PyJs_anonymous_2985_(node, expr, this, arguments, var=var):
+ var = Scope({u'node':node, u'expr':expr, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'expr'])
+ var.get(u'node').put(u'expression', var.get(u'expr'))
+ var.get(u"this").callprop(u'semicolon')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ExpressionStatement'))
+ PyJs_anonymous_2985_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseExpressionStatement', PyJs_anonymous_2985_)
+ @Js
+ def PyJs_anonymous_2986_(allowDirectives, this, arguments, var=var):
+ var = Scope({u'this':this, u'allowDirectives':allowDirectives, u'arguments':arguments}, var)
+ var.registers([u'node', u'allowDirectives'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'braceL'))
+ var.get(u"this").callprop(u'parseBlockBody', var.get(u'node'), var.get(u'allowDirectives'), Js(False), var.get(u'types').get(u'braceR'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'BlockStatement'))
+ PyJs_anonymous_2986_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseBlock', PyJs_anonymous_2986_)
+ @Js
+ def PyJs_anonymous_2987_(node, allowDirectives, topLevel, end, this, arguments, var=var):
+ var = Scope({u'node':node, u'topLevel':topLevel, u'allowDirectives':allowDirectives, u'end':end, u'arguments':arguments, u'this':this}, var)
+ var.registers([u'node', u'allowDirectives', u'end', u'parsedNonDirective', u'directive', u'topLevel', u'stmt', u'octalPosition', u'oldStrict'])
+ var.get(u'node').put(u'body', Js([]))
+ var.get(u'node').put(u'directives', Js([]))
+ var.put(u'parsedNonDirective', Js(False))
+ var.put(u'oldStrict', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'octalPosition', PyJsComma(Js(0.0), Js(None)))
+ while var.get(u"this").callprop(u'eat', var.get(u'end')).neg():
+ if ((var.get(u'parsedNonDirective').neg() and var.get(u"this").get(u'state').get(u'containsOctal')) and var.get(u'octalPosition').neg()):
+ var.put(u'octalPosition', var.get(u"this").get(u'state').get(u'octalPosition'))
+ var.put(u'stmt', var.get(u"this").callprop(u'parseStatement', var.get(u'true'), var.get(u'topLevel')))
+ if ((((var.get(u'allowDirectives') and var.get(u'parsedNonDirective').neg()) and PyJsStrictEq(var.get(u'stmt').get(u'type'),Js(u'ExpressionStatement'))) and PyJsStrictEq(var.get(u'stmt').get(u'expression').get(u'type'),Js(u'StringLiteral'))) and var.get(u'stmt').get(u'expression').get(u'extra').get(u'parenthesized').neg()):
+ var.put(u'directive', var.get(u"this").callprop(u'stmtToDirective', var.get(u'stmt')))
+ var.get(u'node').get(u'directives').callprop(u'push', var.get(u'directive'))
+ if (PyJsStrictEq(var.get(u'oldStrict'),var.get(u'undefined')) and PyJsStrictEq(var.get(u'directive').get(u'value').get(u'value'),Js(u'use strict'))):
+ var.put(u'oldStrict', var.get(u"this").get(u'state').get(u'strict'))
+ var.get(u"this").callprop(u'setStrict', var.get(u'true'))
+ if var.get(u'octalPosition'):
+ var.get(u"this").callprop(u'raise', var.get(u'octalPosition'), Js(u'Octal literal in strict mode'))
+ continue
+ var.put(u'parsedNonDirective', var.get(u'true'))
+ var.get(u'node').get(u'body').callprop(u'push', var.get(u'stmt'))
+ if PyJsStrictEq(var.get(u'oldStrict'),Js(False)):
+ var.get(u"this").callprop(u'setStrict', Js(False))
+ PyJs_anonymous_2987_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseBlockBody', PyJs_anonymous_2987_)
+ @Js
+ def PyJs_anonymous_2988_(node, init, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'init':init, u'arguments':arguments}, var)
+ var.registers([u'node', u'init'])
+ var.get(u'node').put(u'init', var.get(u'init'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'semi'))
+ var.get(u'node').put(u'test', (var.get(u"null") if var.get(u"this").callprop(u'match', var.get(u'types').get(u'semi')) else var.get(u"this").callprop(u'parseExpression')))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'semi'))
+ var.get(u'node').put(u'update', (var.get(u"null") if var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenR')) else var.get(u"this").callprop(u'parseExpression')))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenR'))
+ var.get(u'node').put(u'body', var.get(u"this").callprop(u'parseStatement', Js(False)))
+ var.get(u"this").get(u'state').get(u'labels').callprop(u'pop')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ForStatement'))
+ PyJs_anonymous_2988_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseFor', PyJs_anonymous_2988_)
+ @Js
+ def PyJs_anonymous_2989_(node, init, forAwait, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'init':init, u'forAwait':forAwait, u'arguments':arguments}, var)
+ var.registers([u'node', u'init', u'type', u'forAwait'])
+ var.put(u'type', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'forAwait'):
+ var.get(u"this").callprop(u'eatContextual', Js(u'of'))
+ var.put(u'type', Js(u'ForAwaitStatement'))
+ else:
+ var.put(u'type', (Js(u'ForInStatement') if var.get(u"this").callprop(u'match', var.get(u'types').get(u'_in')) else Js(u'ForOfStatement')))
+ var.get(u"this").callprop(u'next')
+ var.get(u'node').put(u'left', var.get(u'init'))
+ var.get(u'node').put(u'right', var.get(u"this").callprop(u'parseExpression'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenR'))
+ var.get(u'node').put(u'body', var.get(u"this").callprop(u'parseStatement', Js(False)))
+ var.get(u"this").get(u'state').get(u'labels').callprop(u'pop')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), var.get(u'type'))
+ PyJs_anonymous_2989_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseForIn', PyJs_anonymous_2989_)
+ @Js
+ def PyJs_anonymous_2990_(node, isFor, kind, this, arguments, var=var):
+ var = Scope({u'node':node, u'isFor':isFor, u'kind':kind, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'decl', u'node', u'kind', u'isFor'])
+ var.get(u'node').put(u'declarations', Js([]))
+ var.get(u'node').put(u'kind', var.get(u'kind').get(u'keyword'))
+ #for JS loop
+
+ while 1:
+ var.put(u'decl', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'parseVarHead', var.get(u'decl'))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'eq')):
+ var.get(u'decl').put(u'init', var.get(u"this").callprop(u'parseMaybeAssign', var.get(u'isFor')))
+ else:
+ if (PyJsStrictEq(var.get(u'kind'),var.get(u'types').get(u'_const')) and (var.get(u"this").callprop(u'match', var.get(u'types').get(u'_in')) or var.get(u"this").callprop(u'isContextual', Js(u'of'))).neg()):
+ var.get(u"this").callprop(u'unexpected')
+ else:
+ if (PyJsStrictNeq(var.get(u'decl').get(u'id').get(u'type'),Js(u'Identifier')) and (var.get(u'isFor') and (var.get(u"this").callprop(u'match', var.get(u'types').get(u'_in')) or var.get(u"this").callprop(u'isContextual', Js(u'of')))).neg()):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'lastTokEnd'), Js(u'Complex binding patterns require an initialization value'))
+ else:
+ var.get(u'decl').put(u'init', var.get(u"null"))
+ var.get(u'node').get(u'declarations').callprop(u'push', var.get(u"this").callprop(u'finishNode', var.get(u'decl'), Js(u'VariableDeclarator')))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'comma')).neg():
+ break
+
+ return var.get(u'node')
+ PyJs_anonymous_2990_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseVar', PyJs_anonymous_2990_)
+ @Js
+ def PyJs_anonymous_2991_(decl, this, arguments, var=var):
+ var = Scope({u'decl':decl, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'decl'])
+ var.get(u'decl').put(u'id', var.get(u"this").callprop(u'parseBindingAtom'))
+ var.get(u"this").callprop(u'checkLVal', var.get(u'decl').get(u'id'), var.get(u'true'), var.get(u'undefined'), Js(u'variable declaration'))
+ PyJs_anonymous_2991_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseVarHead', PyJs_anonymous_2991_)
+ @Js
+ def PyJs_anonymous_2992_(node, isStatement, allowExpressionBody, isAsync, optionalId, this, arguments, var=var):
+ var = Scope({u'node':node, u'optionalId':optionalId, u'isAsync':isAsync, u'arguments':arguments, u'this':this, u'isStatement':isStatement, u'allowExpressionBody':allowExpressionBody}, var)
+ var.registers([u'node', u'optionalId', u'isAsync', u'oldInMethod', u'isStatement', u'allowExpressionBody'])
+ var.put(u'oldInMethod', var.get(u"this").get(u'state').get(u'inMethod'))
+ var.get(u"this").get(u'state').put(u'inMethod', Js(False))
+ var.get(u"this").callprop(u'initFunction', var.get(u'node'), var.get(u'isAsync'))
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'star')):
+ if (var.get(u'node').get(u'async') and var.get(u"this").callprop(u'hasPlugin', Js(u'asyncGenerators')).neg()):
+ var.get(u"this").callprop(u'unexpected')
+ else:
+ var.get(u'node').put(u'generator', var.get(u'true'))
+ var.get(u"this").callprop(u'next')
+ if (((var.get(u'isStatement') and var.get(u'optionalId').neg()) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')).neg()) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'_yield')).neg()):
+ var.get(u"this").callprop(u'unexpected')
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'_yield'))):
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'parseBindingIdentifier'))
+ var.get(u"this").callprop(u'parseFunctionParams', var.get(u'node'))
+ var.get(u"this").callprop(u'parseFunctionBody', var.get(u'node'), var.get(u'allowExpressionBody'))
+ var.get(u"this").get(u'state').put(u'inMethod', var.get(u'oldInMethod'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), (Js(u'FunctionDeclaration') if var.get(u'isStatement') else Js(u'FunctionExpression')))
+ PyJs_anonymous_2992_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseFunction', PyJs_anonymous_2992_)
+ @Js
+ def PyJs_anonymous_2993_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenL'))
+ var.get(u'node').put(u'params', var.get(u"this").callprop(u'parseBindingList', var.get(u'types').get(u'parenR')))
+ PyJs_anonymous_2993_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseFunctionParams', PyJs_anonymous_2993_)
+ @Js
+ def PyJs_anonymous_2994_(node, isStatement, optionalId, this, arguments, var=var):
+ var = Scope({u'node':node, u'optionalId':optionalId, u'this':this, u'isStatement':isStatement, u'arguments':arguments}, var)
+ var.registers([u'node', u'optionalId', u'isStatement'])
+ var.get(u"this").callprop(u'next')
+ var.get(u"this").callprop(u'parseClassId', var.get(u'node'), var.get(u'isStatement'), var.get(u'optionalId'))
+ var.get(u"this").callprop(u'parseClassSuper', var.get(u'node'))
+ var.get(u"this").callprop(u'parseClassBody', var.get(u'node'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), (Js(u'ClassDeclaration') if var.get(u'isStatement') else Js(u'ClassExpression')))
+ PyJs_anonymous_2994_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseClass', PyJs_anonymous_2994_)
+ @Js
+ def PyJs_anonymous_2995_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return (var.get(u"this").callprop(u'match', var.get(u'types').get(u'eq')) or var.get(u"this").callprop(u'isLineTerminator'))
+ PyJs_anonymous_2995_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'isClassProperty', PyJs_anonymous_2995_)
+ @Js
+ def PyJs_anonymous_2996_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return Js(False)
+ PyJs_anonymous_2996_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'isClassMutatorStarter', PyJs_anonymous_2996_)
+ @Js
+ def PyJs_anonymous_2997_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'isStaticPrototype', u'hadConstructor', u'isConstructorCall', u'isGetSet', u'isGenerator', u'start', u'paramCount', u'isMaybeStatic', u'classBody', u'key', u'isConstructor', u'isAsync', u'isAsyncMethod', u'hadConstructorCall', u'decorators', u'method', u'oldStrict'])
+ var.put(u'oldStrict', var.get(u"this").get(u'state').get(u'strict'))
+ var.get(u"this").get(u'state').put(u'strict', var.get(u'true'))
+ var.put(u'hadConstructorCall', Js(False))
+ var.put(u'hadConstructor', Js(False))
+ var.put(u'decorators', Js([]))
+ var.put(u'classBody', var.get(u"this").callprop(u'startNode'))
+ var.get(u'classBody').put(u'body', Js([]))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'braceL'))
+ while var.get(u"this").callprop(u'eat', var.get(u'types').get(u'braceR')).neg():
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'semi')):
+ continue
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'at')):
+ var.get(u'decorators').callprop(u'push', var.get(u"this").callprop(u'parseDecorator'))
+ continue
+ var.put(u'method', var.get(u"this").callprop(u'startNode'))
+ if var.get(u'decorators').get(u'length'):
+ var.get(u'method').put(u'decorators', var.get(u'decorators'))
+ var.put(u'decorators', Js([]))
+ var.put(u'isConstructorCall', Js(False))
+ var.put(u'isMaybeStatic', (var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')) and PyJsStrictEq(var.get(u"this").get(u'state').get(u'value'),Js(u'static'))))
+ var.put(u'isGenerator', var.get(u"this").callprop(u'eat', var.get(u'types').get(u'star')))
+ var.put(u'isGetSet', Js(False))
+ var.put(u'isAsync', Js(False))
+ var.get(u"this").callprop(u'parsePropertyName', var.get(u'method'))
+ var.get(u'method').put(u'static', (var.get(u'isMaybeStatic') and var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL')).neg()))
+ if var.get(u'method').get(u'static'):
+ var.put(u'isGenerator', var.get(u"this").callprop(u'eat', var.get(u'types').get(u'star')))
+ var.get(u"this").callprop(u'parsePropertyName', var.get(u'method'))
+ if var.get(u'isGenerator').neg():
+ if var.get(u"this").callprop(u'isClassProperty'):
+ var.get(u'classBody').get(u'body').callprop(u'push', var.get(u"this").callprop(u'parseClassProperty', var.get(u'method')))
+ continue
+ def PyJs_LONG_2998_(var=var):
+ return (((((PyJsStrictEq(var.get(u'method').get(u'key').get(u'type'),Js(u'Identifier')) and var.get(u'method').get(u'computed').neg()) and var.get(u"this").callprop(u'hasPlugin', Js(u'classConstructorCall'))) and PyJsStrictEq(var.get(u'method').get(u'key').get(u'name'),Js(u'call'))) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'name'))) and PyJsStrictEq(var.get(u"this").get(u'state').get(u'value'),Js(u'constructor')))
+ if PyJs_LONG_2998_():
+ var.put(u'isConstructorCall', var.get(u'true'))
+ var.get(u"this").callprop(u'parsePropertyName', var.get(u'method'))
+ var.put(u'isAsyncMethod', (((var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL')).neg() and var.get(u'method').get(u'computed').neg()) and PyJsStrictEq(var.get(u'method').get(u'key').get(u'type'),Js(u'Identifier'))) and PyJsStrictEq(var.get(u'method').get(u'key').get(u'name'),Js(u'async'))))
+ if var.get(u'isAsyncMethod'):
+ if (var.get(u"this").callprop(u'hasPlugin', Js(u'asyncGenerators')) and var.get(u"this").callprop(u'eat', var.get(u'types').get(u'star'))):
+ var.put(u'isGenerator', var.get(u'true'))
+ var.put(u'isAsync', var.get(u'true'))
+ var.get(u"this").callprop(u'parsePropertyName', var.get(u'method'))
+ var.get(u'method').put(u'kind', Js(u'method'))
+ if var.get(u'method').get(u'computed').neg():
+ var.put(u'key', var.get(u'method').get(u'key'))
+ if (((((var.get(u'isAsync').neg() and var.get(u'isGenerator').neg()) and var.get(u"this").callprop(u'isClassMutatorStarter').neg()) and PyJsStrictEq(var.get(u'key').get(u'type'),Js(u'Identifier'))) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL')).neg()) and (PyJsStrictEq(var.get(u'key').get(u'name'),Js(u'get')) or PyJsStrictEq(var.get(u'key').get(u'name'),Js(u'set')))):
+ var.put(u'isGetSet', var.get(u'true'))
+ var.get(u'method').put(u'kind', var.get(u'key').get(u'name'))
+ var.put(u'key', var.get(u"this").callprop(u'parsePropertyName', var.get(u'method')))
+ var.put(u'isConstructor', ((var.get(u'isConstructorCall').neg() and var.get(u'method').get(u'static').neg()) and ((PyJsStrictEq(var.get(u'key').get(u'type'),Js(u'Identifier')) and PyJsStrictEq(var.get(u'key').get(u'name'),Js(u'constructor'))) or (PyJsStrictEq(var.get(u'key').get(u'type'),Js(u'StringLiteral')) and PyJsStrictEq(var.get(u'key').get(u'value'),Js(u'constructor'))))))
+ if var.get(u'isConstructor'):
+ if var.get(u'hadConstructor'):
+ var.get(u"this").callprop(u'raise', var.get(u'key').get(u'start'), Js(u'Duplicate constructor in the same class'))
+ if var.get(u'isGetSet'):
+ var.get(u"this").callprop(u'raise', var.get(u'key').get(u'start'), Js(u"Constructor can't have get/set modifier"))
+ if var.get(u'isGenerator'):
+ var.get(u"this").callprop(u'raise', var.get(u'key').get(u'start'), Js(u"Constructor can't be a generator"))
+ if var.get(u'isAsync'):
+ var.get(u"this").callprop(u'raise', var.get(u'key').get(u'start'), Js(u"Constructor can't be an async function"))
+ var.get(u'method').put(u'kind', Js(u'constructor'))
+ var.put(u'hadConstructor', var.get(u'true'))
+ var.put(u'isStaticPrototype', (var.get(u'method').get(u'static') and ((PyJsStrictEq(var.get(u'key').get(u'type'),Js(u'Identifier')) and PyJsStrictEq(var.get(u'key').get(u'name'),Js(u'prototype'))) or (PyJsStrictEq(var.get(u'key').get(u'type'),Js(u'StringLiteral')) and PyJsStrictEq(var.get(u'key').get(u'value'),Js(u'prototype'))))))
+ if var.get(u'isStaticPrototype'):
+ var.get(u"this").callprop(u'raise', var.get(u'key').get(u'start'), Js(u'Classes may not have static property named prototype'))
+ if var.get(u'isConstructorCall'):
+ if var.get(u'hadConstructorCall'):
+ var.get(u"this").callprop(u'raise', var.get(u'method').get(u'start'), Js(u'Duplicate constructor call in the same class'))
+ var.get(u'method').put(u'kind', Js(u'constructorCall'))
+ var.put(u'hadConstructorCall', var.get(u'true'))
+ if ((PyJsStrictEq(var.get(u'method').get(u'kind'),Js(u'constructor')) or PyJsStrictEq(var.get(u'method').get(u'kind'),Js(u'constructorCall'))) and var.get(u'method').get(u'decorators')):
+ var.get(u"this").callprop(u'raise', var.get(u'method').get(u'start'), Js(u"You can't attach decorators to a class constructor"))
+ var.get(u"this").callprop(u'parseClassMethod', var.get(u'classBody'), var.get(u'method'), var.get(u'isGenerator'), var.get(u'isAsync'))
+ if var.get(u'isGetSet'):
+ var.put(u'paramCount', (Js(0.0) if PyJsStrictEq(var.get(u'method').get(u'kind'),Js(u'get')) else Js(1.0)))
+ if PyJsStrictNeq(var.get(u'method').get(u'params').get(u'length'),var.get(u'paramCount')):
+ var.put(u'start', var.get(u'method').get(u'start'))
+ if PyJsStrictEq(var.get(u'method').get(u'kind'),Js(u'get')):
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'getter should have no params'))
+ else:
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'setter should have exactly one param'))
+ if var.get(u'decorators').get(u'length'):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u'You have trailing decorators with no method'))
+ var.get(u'node').put(u'body', var.get(u"this").callprop(u'finishNode', var.get(u'classBody'), Js(u'ClassBody')))
+ var.get(u"this").get(u'state').put(u'strict', var.get(u'oldStrict'))
+ PyJs_anonymous_2997_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseClassBody', PyJs_anonymous_2997_)
+ @Js
+ def PyJs_anonymous_2999_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'eq')):
+ if var.get(u"this").callprop(u'hasPlugin', Js(u'classProperties')).neg():
+ var.get(u"this").callprop(u'unexpected')
+ var.get(u"this").callprop(u'next')
+ var.get(u'node').put(u'value', var.get(u"this").callprop(u'parseMaybeAssign'))
+ else:
+ var.get(u'node').put(u'value', var.get(u"null"))
+ var.get(u"this").callprop(u'semicolon')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ClassProperty'))
+ PyJs_anonymous_2999_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseClassProperty', PyJs_anonymous_2999_)
+ @Js
+ def PyJs_anonymous_3000_(classBody, method, isGenerator, isAsync, this, arguments, var=var):
+ var = Scope({u'isAsync':isAsync, u'classBody':classBody, u'this':this, u'isGenerator':isGenerator, u'method':method, u'arguments':arguments}, var)
+ var.registers([u'isAsync', u'isGenerator', u'classBody', u'method'])
+ var.get(u"this").callprop(u'parseMethod', var.get(u'method'), var.get(u'isGenerator'), var.get(u'isAsync'))
+ var.get(u'classBody').get(u'body').callprop(u'push', var.get(u"this").callprop(u'finishNode', var.get(u'method'), Js(u'ClassMethod')))
+ PyJs_anonymous_3000_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseClassMethod', PyJs_anonymous_3000_)
+ @Js
+ def PyJs_anonymous_3001_(node, isStatement, optionalId, this, arguments, var=var):
+ var = Scope({u'node':node, u'optionalId':optionalId, u'this':this, u'isStatement':isStatement, u'arguments':arguments}, var)
+ var.registers([u'node', u'optionalId', u'isStatement'])
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')):
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'parseIdentifier'))
+ else:
+ if (var.get(u'optionalId') or var.get(u'isStatement').neg()):
+ var.get(u'node').put(u'id', var.get(u"null"))
+ else:
+ var.get(u"this").callprop(u'unexpected')
+ PyJs_anonymous_3001_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseClassId', PyJs_anonymous_3001_)
+ @Js
+ def PyJs_anonymous_3002_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u'node').put(u'superClass', (var.get(u"this").callprop(u'parseExprSubscripts') if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'_extends')) else var.get(u"null")))
+ PyJs_anonymous_3002_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseClassSuper', PyJs_anonymous_3002_)
+ @Js
+ def PyJs_anonymous_3003_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'specifier', u'expr', u'_specifier', u'_specifier2', u'needsSemi'])
+ var.get(u"this").callprop(u'next')
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'star')):
+ var.put(u'specifier', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ if (var.get(u"this").callprop(u'hasPlugin', Js(u'exportExtensions')) and var.get(u"this").callprop(u'eatContextual', Js(u'as'))):
+ var.get(u'specifier').put(u'exported', var.get(u"this").callprop(u'parseIdentifier'))
+ var.get(u'node').put(u'specifiers', Js([var.get(u"this").callprop(u'finishNode', var.get(u'specifier'), Js(u'ExportNamespaceSpecifier'))]))
+ var.get(u"this").callprop(u'parseExportSpecifiersMaybe', var.get(u'node'))
+ var.get(u"this").callprop(u'parseExportFrom', var.get(u'node'), var.get(u'true'))
+ else:
+ var.get(u"this").callprop(u'parseExportFrom', var.get(u'node'), var.get(u'true'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ExportAllDeclaration'))
+ else:
+ if (var.get(u"this").callprop(u'hasPlugin', Js(u'exportExtensions')) and var.get(u"this").callprop(u'isExportDefaultSpecifier')):
+ var.put(u'_specifier', var.get(u"this").callprop(u'startNode'))
+ var.get(u'_specifier').put(u'exported', var.get(u"this").callprop(u'parseIdentifier', var.get(u'true')))
+ var.get(u'node').put(u'specifiers', Js([var.get(u"this").callprop(u'finishNode', var.get(u'_specifier'), Js(u'ExportDefaultSpecifier'))]))
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'comma')) and PyJsStrictEq(var.get(u"this").callprop(u'lookahead').get(u'type'),var.get(u'types').get(u'star'))):
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'))
+ var.put(u'_specifier2', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'star'))
+ var.get(u"this").callprop(u'expectContextual', Js(u'as'))
+ var.get(u'_specifier2').put(u'exported', var.get(u"this").callprop(u'parseIdentifier'))
+ var.get(u'node').get(u'specifiers').callprop(u'push', var.get(u"this").callprop(u'finishNode', var.get(u'_specifier2'), Js(u'ExportNamespaceSpecifier')))
+ else:
+ var.get(u"this").callprop(u'parseExportSpecifiersMaybe', var.get(u'node'))
+ var.get(u"this").callprop(u'parseExportFrom', var.get(u'node'), var.get(u'true'))
+ else:
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'_default')):
+ var.put(u'expr', var.get(u"this").callprop(u'startNode'))
+ var.put(u'needsSemi', Js(False))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'_function')):
+ var.put(u'expr', var.get(u"this").callprop(u'parseFunction', var.get(u'expr'), var.get(u'true'), Js(False), Js(False), var.get(u'true')))
+ else:
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'_class')):
+ var.put(u'expr', var.get(u"this").callprop(u'parseClass', var.get(u'expr'), var.get(u'true'), var.get(u'true')))
+ else:
+ var.put(u'needsSemi', var.get(u'true'))
+ var.put(u'expr', var.get(u"this").callprop(u'parseMaybeAssign'))
+ var.get(u'node').put(u'declaration', var.get(u'expr'))
+ if var.get(u'needsSemi'):
+ var.get(u"this").callprop(u'semicolon')
+ var.get(u"this").callprop(u'checkExport', var.get(u'node'), var.get(u'true'), var.get(u'true'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ExportDefaultDeclaration'))
+ else:
+ if (var.get(u"this").get(u'state').get(u'type').get(u'keyword') or var.get(u"this").callprop(u'shouldParseExportDeclaration')):
+ var.get(u'node').put(u'specifiers', Js([]))
+ var.get(u'node').put(u'source', var.get(u"null"))
+ var.get(u'node').put(u'declaration', var.get(u"this").callprop(u'parseExportDeclaration', var.get(u'node')))
+ else:
+ var.get(u'node').put(u'declaration', var.get(u"null"))
+ var.get(u'node').put(u'specifiers', var.get(u"this").callprop(u'parseExportSpecifiers'))
+ var.get(u"this").callprop(u'parseExportFrom', var.get(u'node'))
+ var.get(u"this").callprop(u'checkExport', var.get(u'node'), var.get(u'true'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ExportNamedDeclaration'))
+ PyJs_anonymous_3003_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseExport', PyJs_anonymous_3003_)
+ @Js
+ def PyJs_anonymous_3004_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").callprop(u'parseStatement', var.get(u'true'))
+ PyJs_anonymous_3004_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseExportDeclaration', PyJs_anonymous_3004_)
+ @Js
+ def PyJs_anonymous_3005_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'lookahead'])
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')):
+ return ((PyJsStrictNeq(var.get(u"this").get(u'state').get(u'value'),Js(u'type')) and PyJsStrictNeq(var.get(u"this").get(u'state').get(u'value'),Js(u'async'))) and PyJsStrictNeq(var.get(u"this").get(u'state').get(u'value'),Js(u'interface')))
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'_default')).neg():
+ return Js(False)
+ var.put(u'lookahead', var.get(u"this").callprop(u'lookahead'))
+ return (PyJsStrictEq(var.get(u'lookahead').get(u'type'),var.get(u'types').get(u'comma')) or (PyJsStrictEq(var.get(u'lookahead').get(u'type'),var.get(u'types').get(u'name')) and PyJsStrictEq(var.get(u'lookahead').get(u'value'),Js(u'from'))))
+ PyJs_anonymous_3005_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'isExportDefaultSpecifier', PyJs_anonymous_3005_)
+ @Js
+ def PyJs_anonymous_3006_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'comma')):
+ var.get(u'node').put(u'specifiers', var.get(u'node').get(u'specifiers').callprop(u'concat', var.get(u"this").callprop(u'parseExportSpecifiers')))
+ PyJs_anonymous_3006_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseExportSpecifiersMaybe', PyJs_anonymous_3006_)
+ @Js
+ def PyJs_anonymous_3007_(node, expect, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'expect':expect, u'arguments':arguments}, var)
+ var.registers([u'node', u'expect'])
+ if var.get(u"this").callprop(u'eatContextual', Js(u'from')):
+ var.get(u'node').put(u'source', (var.get(u"this").callprop(u'parseExprAtom') if var.get(u"this").callprop(u'match', var.get(u'types').get(u'string')) else var.get(u"this").callprop(u'unexpected')))
+ var.get(u"this").callprop(u'checkExport', var.get(u'node'))
+ else:
+ if var.get(u'expect'):
+ var.get(u"this").callprop(u'unexpected')
+ else:
+ var.get(u'node').put(u'source', var.get(u"null"))
+ var.get(u"this").callprop(u'semicolon')
+ PyJs_anonymous_3007_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseExportFrom', PyJs_anonymous_3007_)
+ @Js
+ def PyJs_anonymous_3008_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").callprop(u'isContextual', Js(u'async'))
+ PyJs_anonymous_3008_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'shouldParseExportDeclaration', PyJs_anonymous_3008_)
+ @Js
+ def PyJs_anonymous_3009_(node, checkNames, isDefault, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'checkNames':checkNames, u'arguments':arguments, u'isDefault':isDefault}, var)
+ var.registers([u'node', u'specifier', u'_isArray3', u'_isArray2', u'isClass', u'_ref3', u'_i3', u'_i2', u'_ref2', u'checkNames', u'isDefault', u'declaration', u'_iterator3', u'_iterator2'])
+ if var.get(u'checkNames'):
+ if var.get(u'isDefault'):
+ var.get(u"this").callprop(u'checkDuplicateExports', var.get(u'node'), Js(u'default'))
+ else:
+ if (var.get(u'node').get(u'specifiers') and var.get(u'node').get(u'specifiers').get(u'length')):
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'node').get(u'specifiers'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else var.get(u'_iterator2').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'specifier', var.get(u'_ref2'))
+ var.get(u"this").callprop(u'checkDuplicateExports', var.get(u'specifier'), var.get(u'specifier').get(u'exported').get(u'name'))
+
+ else:
+ if var.get(u'node').get(u'declaration'):
+ if (PyJsStrictEq(var.get(u'node').get(u'declaration').get(u'type'),Js(u'FunctionDeclaration')) or PyJsStrictEq(var.get(u'node').get(u'declaration').get(u'type'),Js(u'ClassDeclaration'))):
+ var.get(u"this").callprop(u'checkDuplicateExports', var.get(u'node'), var.get(u'node').get(u'declaration').get(u'id').get(u'name'))
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'declaration').get(u'type'),Js(u'VariableDeclaration')):
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'node').get(u'declaration').get(u'declarations'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else var.get(u'_iterator3').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'declaration', var.get(u'_ref3'))
+ var.get(u"this").callprop(u'checkDeclaration', var.get(u'declaration').get(u'id'))
+
+ if var.get(u"this").get(u'state').get(u'decorators').get(u'length'):
+ var.put(u'isClass', (var.get(u'node').get(u'declaration') and (PyJsStrictEq(var.get(u'node').get(u'declaration').get(u'type'),Js(u'ClassDeclaration')) or PyJsStrictEq(var.get(u'node').get(u'declaration').get(u'type'),Js(u'ClassExpression')))))
+ if (var.get(u'node').get(u'declaration').neg() or var.get(u'isClass').neg()):
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'start'), Js(u'You can only use decorators on an export when exporting a class'))
+ var.get(u"this").callprop(u'takeDecorators', var.get(u'node').get(u'declaration'))
+ PyJs_anonymous_3009_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'checkExport', PyJs_anonymous_3009_)
+ @Js
+ def PyJs_anonymous_3010_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray5', u'_isArray4', u'_i5', u'_i4', u'elem', u'prop', u'_iterator5', u'_iterator4', u'_ref5', u'_ref4'])
+ if PyJsStrictEq(var.get(u'node').get(u'type'),Js(u'ObjectPattern')):
+ #for JS loop
+ var.put(u'_iterator4', var.get(u'node').get(u'properties'))
+ var.put(u'_isArray4', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator4')))
+ var.put(u'_i4', Js(0.0))
+ var.put(u'_iterator4', (var.get(u'_iterator4') if var.get(u'_isArray4') else var.get(u'_iterator4').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray4'):
+ if (var.get(u'_i4')>=var.get(u'_iterator4').get(u'length')):
+ break
+ var.put(u'_ref4', var.get(u'_iterator4').get((var.put(u'_i4',Js(var.get(u'_i4').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i4', var.get(u'_iterator4').callprop(u'next'))
+ if var.get(u'_i4').get(u'done'):
+ break
+ var.put(u'_ref4', var.get(u'_i4').get(u'value'))
+ var.put(u'prop', var.get(u'_ref4'))
+ var.get(u"this").callprop(u'checkDeclaration', var.get(u'prop'))
+
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'type'),Js(u'ArrayPattern')):
+ #for JS loop
+ var.put(u'_iterator5', var.get(u'node').get(u'elements'))
+ var.put(u'_isArray5', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator5')))
+ var.put(u'_i5', Js(0.0))
+ var.put(u'_iterator5', (var.get(u'_iterator5') if var.get(u'_isArray5') else var.get(u'_iterator5').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray5'):
+ if (var.get(u'_i5')>=var.get(u'_iterator5').get(u'length')):
+ break
+ var.put(u'_ref5', var.get(u'_iterator5').get((var.put(u'_i5',Js(var.get(u'_i5').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i5', var.get(u'_iterator5').callprop(u'next'))
+ if var.get(u'_i5').get(u'done'):
+ break
+ var.put(u'_ref5', var.get(u'_i5').get(u'value'))
+ var.put(u'elem', var.get(u'_ref5'))
+ if var.get(u'elem'):
+ var.get(u"this").callprop(u'checkDeclaration', var.get(u'elem'))
+
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'type'),Js(u'ObjectProperty')):
+ var.get(u"this").callprop(u'checkDeclaration', var.get(u'node').get(u'value'))
+ else:
+ if (PyJsStrictEq(var.get(u'node').get(u'type'),Js(u'RestElement')) or PyJsStrictEq(var.get(u'node').get(u'type'),Js(u'RestProperty'))):
+ var.get(u"this").callprop(u'checkDeclaration', var.get(u'node').get(u'argument'))
+ else:
+ if PyJsStrictEq(var.get(u'node').get(u'type'),Js(u'Identifier')):
+ var.get(u"this").callprop(u'checkDuplicateExports', var.get(u'node'), var.get(u'node').get(u'name'))
+ PyJs_anonymous_3010_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'checkDeclaration', PyJs_anonymous_3010_)
+ @Js
+ def PyJs_anonymous_3011_(node, name, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'node', u'name'])
+ if (var.get(u"this").get(u'state').get(u'exportedIdentifiers').callprop(u'indexOf', var.get(u'name'))>(-Js(1.0))):
+ var.get(u"this").callprop(u'raiseDuplicateExportError', var.get(u'node'), var.get(u'name'))
+ var.get(u"this").get(u'state').get(u'exportedIdentifiers').callprop(u'push', var.get(u'name'))
+ PyJs_anonymous_3011_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'checkDuplicateExports', PyJs_anonymous_3011_)
+ @Js
+ def PyJs_anonymous_3012_(node, name, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'name':name, u'arguments':arguments}, var)
+ var.registers([u'node', u'name'])
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'start'), (Js(u'Only one default export allowed per module.') if PyJsStrictEq(var.get(u'name'),Js(u'default')) else ((Js(u'`')+var.get(u'name'))+Js(u'` has already been exported. Exported identifiers must be unique.'))))
+ PyJs_anonymous_3012_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'raiseDuplicateExportError', PyJs_anonymous_3012_)
+ @Js
+ def PyJs_anonymous_3013_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'nodes', u'isDefault', u'needsFrom', u'first'])
+ var.put(u'nodes', Js([]))
+ var.put(u'first', var.get(u'true'))
+ var.put(u'needsFrom', PyJsComma(Js(0.0), Js(None)))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'braceL'))
+ while var.get(u"this").callprop(u'eat', var.get(u'types').get(u'braceR')).neg():
+ if var.get(u'first'):
+ var.put(u'first', Js(False))
+ else:
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'braceR')):
+ break
+ var.put(u'isDefault', var.get(u"this").callprop(u'match', var.get(u'types').get(u'_default')))
+ if (var.get(u'isDefault') and var.get(u'needsFrom').neg()):
+ var.put(u'needsFrom', var.get(u'true'))
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u'node').put(u'local', var.get(u"this").callprop(u'parseIdentifier', var.get(u'isDefault')))
+ var.get(u'node').put(u'exported', (var.get(u"this").callprop(u'parseIdentifier', var.get(u'true')) if var.get(u"this").callprop(u'eatContextual', Js(u'as')) else var.get(u'node').get(u'local').callprop(u'__clone')))
+ var.get(u'nodes').callprop(u'push', var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ExportSpecifier')))
+ if (var.get(u'needsFrom') and var.get(u"this").callprop(u'isContextual', Js(u'from')).neg()):
+ var.get(u"this").callprop(u'unexpected')
+ return var.get(u'nodes')
+ PyJs_anonymous_3013_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseExportSpecifiers', PyJs_anonymous_3013_)
+ @Js
+ def PyJs_anonymous_3014_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'next')
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'string')):
+ var.get(u'node').put(u'specifiers', Js([]))
+ var.get(u'node').put(u'source', var.get(u"this").callprop(u'parseExprAtom'))
+ else:
+ var.get(u'node').put(u'specifiers', Js([]))
+ var.get(u"this").callprop(u'parseImportSpecifiers', var.get(u'node'))
+ var.get(u"this").callprop(u'expectContextual', Js(u'from'))
+ var.get(u'node').put(u'source', (var.get(u"this").callprop(u'parseExprAtom') if var.get(u"this").callprop(u'match', var.get(u'types').get(u'string')) else var.get(u"this").callprop(u'unexpected')))
+ var.get(u"this").callprop(u'semicolon')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ImportDeclaration'))
+ PyJs_anonymous_3014_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseImport', PyJs_anonymous_3014_)
+ @Js
+ def PyJs_anonymous_3015_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'specifier', u'startLoc', u'_specifier3', u'startPos', u'first'])
+ var.put(u'first', var.get(u'true'))
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')):
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.get(u'node').get(u'specifiers').callprop(u'push', var.get(u"this").callprop(u'parseImportSpecifierDefault', var.get(u"this").callprop(u'parseIdentifier'), var.get(u'startPos'), var.get(u'startLoc')))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'comma')).neg():
+ return var.get('undefined')
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'star')):
+ var.put(u'specifier', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ var.get(u"this").callprop(u'expectContextual', Js(u'as'))
+ var.get(u'specifier').put(u'local', var.get(u"this").callprop(u'parseIdentifier'))
+ var.get(u"this").callprop(u'checkLVal', var.get(u'specifier').get(u'local'), var.get(u'true'), var.get(u'undefined'), Js(u'import namespace specifier'))
+ var.get(u'node').get(u'specifiers').callprop(u'push', var.get(u"this").callprop(u'finishNode', var.get(u'specifier'), Js(u'ImportNamespaceSpecifier')))
+ return var.get('undefined')
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'braceL'))
+ while var.get(u"this").callprop(u'eat', var.get(u'types').get(u'braceR')).neg():
+ if var.get(u'first'):
+ var.put(u'first', Js(False))
+ else:
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'braceR')):
+ break
+ var.put(u'_specifier3', var.get(u"this").callprop(u'startNode'))
+ var.get(u'_specifier3').put(u'imported', var.get(u"this").callprop(u'parseIdentifier', var.get(u'true')))
+ var.get(u'_specifier3').put(u'local', (var.get(u"this").callprop(u'parseIdentifier') if var.get(u"this").callprop(u'eatContextual', Js(u'as')) else var.get(u'_specifier3').get(u'imported').callprop(u'__clone')))
+ var.get(u"this").callprop(u'checkLVal', var.get(u'_specifier3').get(u'local'), var.get(u'true'), var.get(u'undefined'), Js(u'import specifier'))
+ var.get(u'node').get(u'specifiers').callprop(u'push', var.get(u"this").callprop(u'finishNode', var.get(u'_specifier3'), Js(u'ImportSpecifier')))
+ PyJs_anonymous_3015_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseImportSpecifiers', PyJs_anonymous_3015_)
+ @Js
+ def PyJs_anonymous_3016_(id, startPos, startLoc, this, arguments, var=var):
+ var = Scope({u'this':this, u'startPos':startPos, u'id':id, u'startLoc':startLoc, u'arguments':arguments}, var)
+ var.registers([u'node', u'startPos', u'id', u'startLoc'])
+ var.put(u'node', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'node').put(u'local', var.get(u'id'))
+ var.get(u"this").callprop(u'checkLVal', var.get(u'node').get(u'local'), var.get(u'true'), var.get(u'undefined'), Js(u'default import specifier'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ImportDefaultSpecifier'))
+ PyJs_anonymous_3016_._set_name(u'anonymous')
+ var.get(u'pp$1').put(u'parseImportSpecifierDefault', PyJs_anonymous_3016_)
+ var.put(u'pp$2', var.get(u'Parser').get(u'prototype'))
+ @Js
+ def PyJs_anonymous_3017_(node, isBinding, contextDescription, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'isBinding':isBinding, u'arguments':arguments, u'contextDescription':contextDescription}, var)
+ var.registers([u'node', u'_isArray', u'_iterator', u'isBinding', u'prop', u'_i', u'message', u'contextDescription', u'_ref'])
+ if var.get(u'node'):
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'node').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'Identifier')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ObjectPattern')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ArrayPattern')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'AssignmentPattern')):
+ SWITCHED = True
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ObjectExpression')):
+ SWITCHED = True
+ var.get(u'node').put(u'type', Js(u'ObjectPattern'))
+ #for JS loop
+ var.put(u'_iterator', var.get(u'node').get(u'properties'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else var.get(u'_iterator').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'prop', var.get(u'_ref'))
+ if PyJsStrictEq(var.get(u'prop').get(u'type'),Js(u'ObjectMethod')):
+ if (PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'get')) or PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'set'))):
+ var.get(u"this").callprop(u'raise', var.get(u'prop').get(u'key').get(u'start'), Js(u"Object pattern can't contain getter or setter"))
+ else:
+ var.get(u"this").callprop(u'raise', var.get(u'prop').get(u'key').get(u'start'), Js(u"Object pattern can't contain methods"))
+ else:
+ var.get(u"this").callprop(u'toAssignable', var.get(u'prop'), var.get(u'isBinding'), Js(u'object destructuring pattern'))
+
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ObjectProperty')):
+ SWITCHED = True
+ var.get(u"this").callprop(u'toAssignable', var.get(u'node').get(u'value'), var.get(u'isBinding'), var.get(u'contextDescription'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'SpreadProperty')):
+ SWITCHED = True
+ var.get(u'node').put(u'type', Js(u'RestProperty'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ArrayExpression')):
+ SWITCHED = True
+ var.get(u'node').put(u'type', Js(u'ArrayPattern'))
+ var.get(u"this").callprop(u'toAssignableList', var.get(u'node').get(u'elements'), var.get(u'isBinding'), var.get(u'contextDescription'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'AssignmentExpression')):
+ SWITCHED = True
+ if PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'=')):
+ var.get(u'node').put(u'type', Js(u'AssignmentPattern'))
+ var.get(u'node').delete(u'operator')
+ else:
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'left').get(u'end'), Js(u"Only '=' operator can be used for specifying default value."))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'MemberExpression')):
+ SWITCHED = True
+ if var.get(u'isBinding').neg():
+ break
+ if True:
+ SWITCHED = True
+ var.put(u'message', (Js(u'Invalid left-hand side')+((Js(u' in ')+var.get(u'contextDescription')) if var.get(u'contextDescription') else Js(u'expression'))))
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'start'), var.get(u'message'))
+ SWITCHED = True
+ break
+ return var.get(u'node')
+ PyJs_anonymous_3017_._set_name(u'anonymous')
+ var.get(u'pp$2').put(u'toAssignable', PyJs_anonymous_3017_)
+ @Js
+ def PyJs_anonymous_3018_(exprList, isBinding, contextDescription, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'isBinding':isBinding, u'exprList':exprList, u'contextDescription':contextDescription}, var)
+ var.registers([u'last', u'i', u'isBinding', u'contextDescription', u'arg', u'end', u'exprList', u'elt'])
+ var.put(u'end', var.get(u'exprList').get(u'length'))
+ if var.get(u'end'):
+ var.put(u'last', var.get(u'exprList').get((var.get(u'end')-Js(1.0))))
+ if (var.get(u'last') and PyJsStrictEq(var.get(u'last').get(u'type'),Js(u'RestElement'))):
+ var.put(u'end',Js(var.get(u'end').to_number())-Js(1))
+ else:
+ if (var.get(u'last') and PyJsStrictEq(var.get(u'last').get(u'type'),Js(u'SpreadElement'))):
+ var.get(u'last').put(u'type', Js(u'RestElement'))
+ var.put(u'arg', var.get(u'last').get(u'argument'))
+ var.get(u"this").callprop(u'toAssignable', var.get(u'arg'), var.get(u'isBinding'), var.get(u'contextDescription'))
+ if ((PyJsStrictNeq(var.get(u'arg').get(u'type'),Js(u'Identifier')) and PyJsStrictNeq(var.get(u'arg').get(u'type'),Js(u'MemberExpression'))) and PyJsStrictNeq(var.get(u'arg').get(u'type'),Js(u'ArrayPattern'))):
+ var.get(u"this").callprop(u'unexpected', var.get(u'arg').get(u'start'))
+ var.put(u'end',Js(var.get(u'end').to_number())-Js(1))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'prop', var.get(u'_ref2'))
+ if PyJsStrictEq(var.get(u'prop').get(u'type'),Js(u'ObjectProperty')):
+ var.put(u'prop', var.get(u'prop').get(u'value'))
+ var.get(u"this").callprop(u'checkLVal', var.get(u'prop'), var.get(u'isBinding'), var.get(u'checkClashes'), Js(u'object destructuring pattern'))
+
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ArrayPattern')):
+ SWITCHED = True
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'expr').get(u'elements'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else var.get(u'_iterator3').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'elem', var.get(u'_ref3'))
+ if var.get(u'elem'):
+ var.get(u"this").callprop(u'checkLVal', var.get(u'elem'), var.get(u'isBinding'), var.get(u'checkClashes'), Js(u'array destructuring pattern'))
+
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'AssignmentPattern')):
+ SWITCHED = True
+ var.get(u"this").callprop(u'checkLVal', var.get(u'expr').get(u'left'), var.get(u'isBinding'), var.get(u'checkClashes'), Js(u'assignment pattern'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'RestProperty')):
+ SWITCHED = True
+ var.get(u"this").callprop(u'checkLVal', var.get(u'expr').get(u'argument'), var.get(u'isBinding'), var.get(u'checkClashes'), Js(u'rest property'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'RestElement')):
+ SWITCHED = True
+ var.get(u"this").callprop(u'checkLVal', var.get(u'expr').get(u'argument'), var.get(u'isBinding'), var.get(u'checkClashes'), Js(u'rest element'))
+ break
+ if True:
+ SWITCHED = True
+ var.put(u'message', (((Js(u'Binding invalid') if var.get(u'isBinding') else Js(u'Invalid'))+Js(u' left-hand side'))+((Js(u' in ')+var.get(u'contextDescription')) if var.get(u'contextDescription') else Js(u'expression'))))
+ var.get(u"this").callprop(u'raise', var.get(u'expr').get(u'start'), var.get(u'message'))
+ SWITCHED = True
+ break
+ PyJs_anonymous_3028_._set_name(u'anonymous')
+ var.get(u'pp$2').put(u'checkLVal', PyJs_anonymous_3028_)
+ var.put(u'pp$3', var.get(u'Parser').get(u'prototype'))
+ @Js
+ def PyJs_anonymous_3029_(prop, propHash, this, arguments, var=var):
+ var = Scope({u'this':this, u'propHash':propHash, u'arguments':arguments, u'prop':prop}, var)
+ var.registers([u'propHash', u'name', u'key', u'prop'])
+ if var.get(u'prop').get(u'computed'):
+ return var.get('undefined')
+ var.put(u'key', var.get(u'prop').get(u'key'))
+ var.put(u'name', PyJsComma(Js(0.0), Js(None)))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'key').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'Identifier')):
+ SWITCHED = True
+ var.put(u'name', var.get(u'key').get(u'name'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'StringLiteral')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'NumericLiteral')):
+ SWITCHED = True
+ var.put(u'name', var.get(u'String')(var.get(u'key').get(u'value')))
+ break
+ if True:
+ SWITCHED = True
+ return var.get('undefined')
+ SWITCHED = True
+ break
+ if (PyJsStrictEq(var.get(u'name'),Js(u'__proto__')) and var.get(u'prop').get(u'kind').neg()):
+ if var.get(u'propHash').get(u'proto'):
+ var.get(u"this").callprop(u'raise', var.get(u'key').get(u'start'), Js(u'Redefinition of __proto__ property'))
+ var.get(u'propHash').put(u'proto', var.get(u'true'))
+ PyJs_anonymous_3029_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'checkPropClash', PyJs_anonymous_3029_)
+ @Js
+ def PyJs_anonymous_3030_(noIn, refShorthandDefaultPos, this, arguments, var=var):
+ var = Scope({u'noIn':noIn, u'this':this, u'refShorthandDefaultPos':refShorthandDefaultPos, u'arguments':arguments}, var)
+ var.registers([u'node', u'expr', u'refShorthandDefaultPos', u'startLoc', u'noIn', u'startPos'])
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.put(u'expr', var.get(u"this").callprop(u'parseMaybeAssign', var.get(u'noIn'), var.get(u'refShorthandDefaultPos')))
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'comma')):
+ var.put(u'node', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'node').put(u'expressions', Js([var.get(u'expr')]))
+ while var.get(u"this").callprop(u'eat', var.get(u'types').get(u'comma')):
+ var.get(u'node').get(u'expressions').callprop(u'push', var.get(u"this").callprop(u'parseMaybeAssign', var.get(u'noIn'), var.get(u'refShorthandDefaultPos')))
+ var.get(u"this").callprop(u'toReferencedList', var.get(u'node').get(u'expressions'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'SequenceExpression'))
+ return var.get(u'expr')
+ PyJs_anonymous_3030_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseExpression', PyJs_anonymous_3030_)
+ @Js
+ def PyJs_anonymous_3031_(noIn, refShorthandDefaultPos, afterLeftParse, refNeedsArrowPos, this, arguments, var=var):
+ var = Scope({u'afterLeftParse':afterLeftParse, u'this':this, u'refShorthandDefaultPos':refShorthandDefaultPos, u'noIn':noIn, u'arguments':arguments, u'refNeedsArrowPos':refNeedsArrowPos}, var)
+ var.registers([u'node', u'afterLeftParse', u'startLoc', u'errorMsg', u'refNeedsArrowPos', u'refShorthandDefaultPos', u'failOnShorthandAssign', u'noIn', u'startPos', u'_left', u'left'])
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'_yield')) and var.get(u"this").get(u'state').get(u'inGenerator')):
+ var.put(u'_left', var.get(u"this").callprop(u'parseYield'))
+ if var.get(u'afterLeftParse'):
+ var.put(u'_left', var.get(u'afterLeftParse').callprop(u'call', var.get(u"this"), var.get(u'_left'), var.get(u'startPos'), var.get(u'startLoc')))
+ return var.get(u'_left')
+ var.put(u'failOnShorthandAssign', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'refShorthandDefaultPos'):
+ var.put(u'failOnShorthandAssign', Js(False))
+ else:
+ PyJs_Object_3032_ = Js({u'start':Js(0.0)})
+ var.put(u'refShorthandDefaultPos', PyJs_Object_3032_)
+ var.put(u'failOnShorthandAssign', var.get(u'true'))
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'name'))):
+ var.get(u"this").get(u'state').put(u'potentialArrowAt', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'left', var.get(u"this").callprop(u'parseMaybeConditional', var.get(u'noIn'), var.get(u'refShorthandDefaultPos'), var.get(u'refNeedsArrowPos')))
+ if var.get(u'afterLeftParse'):
+ var.put(u'left', var.get(u'afterLeftParse').callprop(u'call', var.get(u"this"), var.get(u'left'), var.get(u'startPos'), var.get(u'startLoc')))
+ if var.get(u"this").get(u'state').get(u'type').get(u'isAssign'):
+ var.put(u'node', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'node').put(u'operator', var.get(u"this").get(u'state').get(u'value'))
+ var.get(u'node').put(u'left', (var.get(u"this").callprop(u'toAssignable', var.get(u'left'), var.get(u'undefined'), Js(u'assignment expression')) if var.get(u"this").callprop(u'match', var.get(u'types').get(u'eq')) else var.get(u'left')))
+ var.get(u'refShorthandDefaultPos').put(u'start', Js(0.0))
+ var.get(u"this").callprop(u'checkLVal', var.get(u'left'), var.get(u'undefined'), var.get(u'undefined'), Js(u'assignment expression'))
+ if (var.get(u'left').get(u'extra') and var.get(u'left').get(u'extra').get(u'parenthesized')):
+ var.put(u'errorMsg', PyJsComma(Js(0.0), Js(None)))
+ if PyJsStrictEq(var.get(u'left').get(u'type'),Js(u'ObjectPattern')):
+ var.put(u'errorMsg', Js(u'`({a}) = 0` use `({a} = 0)`'))
+ else:
+ if PyJsStrictEq(var.get(u'left').get(u'type'),Js(u'ArrayPattern')):
+ var.put(u'errorMsg', Js(u'`([a]) = 0` use `([a] = 0)`'))
+ if var.get(u'errorMsg'):
+ var.get(u"this").callprop(u'raise', var.get(u'left').get(u'start'), (Js(u"You're trying to assign to a parenthesized expression, eg. instead of ")+var.get(u'errorMsg')))
+ var.get(u"this").callprop(u'next')
+ var.get(u'node').put(u'right', var.get(u"this").callprop(u'parseMaybeAssign', var.get(u'noIn')))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'AssignmentExpression'))
+ else:
+ if (var.get(u'failOnShorthandAssign') and var.get(u'refShorthandDefaultPos').get(u'start')):
+ var.get(u"this").callprop(u'unexpected', var.get(u'refShorthandDefaultPos').get(u'start'))
+ return var.get(u'left')
+ PyJs_anonymous_3031_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseMaybeAssign', PyJs_anonymous_3031_)
+ @Js
+ def PyJs_anonymous_3033_(noIn, refShorthandDefaultPos, refNeedsArrowPos, this, arguments, var=var):
+ var = Scope({u'noIn':noIn, u'this':this, u'refShorthandDefaultPos':refShorthandDefaultPos, u'arguments':arguments, u'refNeedsArrowPos':refNeedsArrowPos}, var)
+ var.registers([u'expr', u'refShorthandDefaultPos', u'startLoc', u'noIn', u'startPos', u'refNeedsArrowPos'])
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.put(u'expr', var.get(u"this").callprop(u'parseExprOps', var.get(u'noIn'), var.get(u'refShorthandDefaultPos')))
+ if (var.get(u'refShorthandDefaultPos') and var.get(u'refShorthandDefaultPos').get(u'start')):
+ return var.get(u'expr')
+ return var.get(u"this").callprop(u'parseConditional', var.get(u'expr'), var.get(u'noIn'), var.get(u'startPos'), var.get(u'startLoc'), var.get(u'refNeedsArrowPos'))
+ PyJs_anonymous_3033_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseMaybeConditional', PyJs_anonymous_3033_)
+ @Js
+ def PyJs_anonymous_3034_(expr, noIn, startPos, startLoc, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'startLoc':startLoc, u'noIn':noIn, u'expr':expr, u'startPos':startPos}, var)
+ var.registers([u'node', u'expr', u'startPos', u'noIn', u'startLoc'])
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'question')):
+ var.put(u'node', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'node').put(u'test', var.get(u'expr'))
+ var.get(u'node').put(u'consequent', var.get(u"this").callprop(u'parseMaybeAssign'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'colon'))
+ var.get(u'node').put(u'alternate', var.get(u"this").callprop(u'parseMaybeAssign', var.get(u'noIn')))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ConditionalExpression'))
+ return var.get(u'expr')
+ PyJs_anonymous_3034_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseConditional', PyJs_anonymous_3034_)
+ @Js
+ def PyJs_anonymous_3035_(noIn, refShorthandDefaultPos, this, arguments, var=var):
+ var = Scope({u'noIn':noIn, u'this':this, u'refShorthandDefaultPos':refShorthandDefaultPos, u'arguments':arguments}, var)
+ var.registers([u'noIn', u'expr', u'startPos', u'refShorthandDefaultPos', u'startLoc'])
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.put(u'expr', var.get(u"this").callprop(u'parseMaybeUnary', var.get(u'refShorthandDefaultPos')))
+ if (var.get(u'refShorthandDefaultPos') and var.get(u'refShorthandDefaultPos').get(u'start')):
+ return var.get(u'expr')
+ else:
+ return var.get(u"this").callprop(u'parseExprOp', var.get(u'expr'), var.get(u'startPos'), var.get(u'startLoc'), (-Js(1.0)), var.get(u'noIn'))
+ PyJs_anonymous_3035_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseExprOps', PyJs_anonymous_3035_)
+ @Js
+ def PyJs_anonymous_3036_(left, leftStartPos, leftStartLoc, minPrec, noIn, this, arguments, var=var):
+ var = Scope({u'minPrec':minPrec, u'arguments':arguments, u'noIn':noIn, u'leftStartLoc':leftStartLoc, u'this':this, u'leftStartPos':leftStartPos, u'left':left}, var)
+ var.registers([u'node', u'minPrec', u'leftStartPos', u'prec', u'startLoc', u'noIn', u'leftStartLoc', u'startPos', u'op', u'left'])
+ var.put(u'prec', var.get(u"this").get(u'state').get(u'type').get(u'binop'))
+ if ((var.get(u'prec')!=var.get(u"null")) and (var.get(u'noIn').neg() or var.get(u"this").callprop(u'match', var.get(u'types').get(u'_in')).neg())):
+ if (var.get(u'prec')>var.get(u'minPrec')):
+ var.put(u'node', var.get(u"this").callprop(u'startNodeAt', var.get(u'leftStartPos'), var.get(u'leftStartLoc')))
+ var.get(u'node').put(u'left', var.get(u'left'))
+ var.get(u'node').put(u'operator', var.get(u"this").get(u'state').get(u'value'))
+ if ((((PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'**')) and PyJsStrictEq(var.get(u'left').get(u'type'),Js(u'UnaryExpression'))) and var.get(u'left').get(u'extra')) and var.get(u'left').get(u'extra').get(u'parenthesizedArgument').neg()) and var.get(u'left').get(u'extra').get(u'parenthesized').neg()):
+ var.get(u"this").callprop(u'raise', var.get(u'left').get(u'argument').get(u'start'), Js(u'Illegal expression. Wrap left hand side or entire exponentiation in parentheses.'))
+ var.put(u'op', var.get(u"this").get(u'state').get(u'type'))
+ var.get(u"this").callprop(u'next')
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.get(u'node').put(u'right', var.get(u"this").callprop(u'parseExprOp', var.get(u"this").callprop(u'parseMaybeUnary'), var.get(u'startPos'), var.get(u'startLoc'), ((var.get(u'prec')-Js(1.0)) if var.get(u'op').get(u'rightAssociative') else var.get(u'prec')), var.get(u'noIn')))
+ var.get(u"this").callprop(u'finishNode', var.get(u'node'), (Js(u'LogicalExpression') if (PyJsStrictEq(var.get(u'op'),var.get(u'types').get(u'logicalOR')) or PyJsStrictEq(var.get(u'op'),var.get(u'types').get(u'logicalAND'))) else Js(u'BinaryExpression')))
+ return var.get(u"this").callprop(u'parseExprOp', var.get(u'node'), var.get(u'leftStartPos'), var.get(u'leftStartLoc'), var.get(u'minPrec'), var.get(u'noIn'))
+ return var.get(u'left')
+ PyJs_anonymous_3036_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseExprOp', PyJs_anonymous_3036_)
+ @Js
+ def PyJs_anonymous_3037_(refShorthandDefaultPos, this, arguments, var=var):
+ var = Scope({u'this':this, u'refShorthandDefaultPos':refShorthandDefaultPos, u'arguments':arguments}, var)
+ var.registers([u'node', u'expr', u'update', u'_node', u'refShorthandDefaultPos', u'startLoc', u'startPos', u'argType'])
+ if var.get(u"this").get(u'state').get(u'type').get(u'prefix'):
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.put(u'update', var.get(u"this").callprop(u'match', var.get(u'types').get(u'incDec')))
+ var.get(u'node').put(u'operator', var.get(u"this").get(u'state').get(u'value'))
+ var.get(u'node').put(u'prefix', var.get(u'true'))
+ var.get(u"this").callprop(u'next')
+ var.put(u'argType', var.get(u"this").get(u'state').get(u'type'))
+ var.get(u'node').put(u'argument', var.get(u"this").callprop(u'parseMaybeUnary'))
+ var.get(u"this").callprop(u'addExtra', var.get(u'node'), Js(u'parenthesizedArgument'), (PyJsStrictEq(var.get(u'argType'),var.get(u'types').get(u'parenL')) and (var.get(u'node').get(u'argument').get(u'extra').neg() or var.get(u'node').get(u'argument').get(u'extra').get(u'parenthesized').neg())))
+ if (var.get(u'refShorthandDefaultPos') and var.get(u'refShorthandDefaultPos').get(u'start')):
+ var.get(u"this").callprop(u'unexpected', var.get(u'refShorthandDefaultPos').get(u'start'))
+ if var.get(u'update'):
+ var.get(u"this").callprop(u'checkLVal', var.get(u'node').get(u'argument'), var.get(u'undefined'), var.get(u'undefined'), Js(u'prefix operation'))
+ else:
+ if ((var.get(u"this").get(u'state').get(u'strict') and PyJsStrictEq(var.get(u'node').get(u'operator'),Js(u'delete'))) and PyJsStrictEq(var.get(u'node').get(u'argument').get(u'type'),Js(u'Identifier'))):
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'start'), Js(u'Deleting local variable in strict mode'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), (Js(u'UpdateExpression') if var.get(u'update') else Js(u'UnaryExpression')))
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.put(u'expr', var.get(u"this").callprop(u'parseExprSubscripts', var.get(u'refShorthandDefaultPos')))
+ if (var.get(u'refShorthandDefaultPos') and var.get(u'refShorthandDefaultPos').get(u'start')):
+ return var.get(u'expr')
+ while (var.get(u"this").get(u'state').get(u'type').get(u'postfix') and var.get(u"this").callprop(u'canInsertSemicolon').neg()):
+ var.put(u'_node', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'_node').put(u'operator', var.get(u"this").get(u'state').get(u'value'))
+ var.get(u'_node').put(u'prefix', Js(False))
+ var.get(u'_node').put(u'argument', var.get(u'expr'))
+ var.get(u"this").callprop(u'checkLVal', var.get(u'expr'), var.get(u'undefined'), var.get(u'undefined'), Js(u'postfix operation'))
+ var.get(u"this").callprop(u'next')
+ var.put(u'expr', var.get(u"this").callprop(u'finishNode', var.get(u'_node'), Js(u'UpdateExpression')))
+ return var.get(u'expr')
+ PyJs_anonymous_3037_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseMaybeUnary', PyJs_anonymous_3037_)
+ @Js
+ def PyJs_anonymous_3038_(refShorthandDefaultPos, this, arguments, var=var):
+ var = Scope({u'this':this, u'refShorthandDefaultPos':refShorthandDefaultPos, u'arguments':arguments}, var)
+ var.registers([u'expr', u'startPos', u'potentialArrowAt', u'startLoc', u'refShorthandDefaultPos'])
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.put(u'potentialArrowAt', var.get(u"this").get(u'state').get(u'potentialArrowAt'))
+ var.put(u'expr', var.get(u"this").callprop(u'parseExprAtom', var.get(u'refShorthandDefaultPos')))
+ if (PyJsStrictEq(var.get(u'expr').get(u'type'),Js(u'ArrowFunctionExpression')) and PyJsStrictEq(var.get(u'expr').get(u'start'),var.get(u'potentialArrowAt'))):
+ return var.get(u'expr')
+ if (var.get(u'refShorthandDefaultPos') and var.get(u'refShorthandDefaultPos').get(u'start')):
+ return var.get(u'expr')
+ return var.get(u"this").callprop(u'parseSubscripts', var.get(u'expr'), var.get(u'startPos'), var.get(u'startLoc'))
+ PyJs_anonymous_3038_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseExprSubscripts', PyJs_anonymous_3038_)
+ @Js
+ def PyJs_anonymous_3039_(base, startPos, startLoc, noCalls, this, arguments, var=var):
+ var = Scope({u'base':base, u'arguments':arguments, u'startLoc':startLoc, u'this':this, u'startPos':startPos, u'noCalls':noCalls}, var)
+ var.registers([u'node', u'startLoc', u'possibleAsync', u'_node3', u'_node2', u'base', u'_node5', u'_node4', u'startPos', u'noCalls'])
+ #for JS loop
+
+ while 1:
+ if (var.get(u'noCalls').neg() and var.get(u"this").callprop(u'eat', var.get(u'types').get(u'doubleColon'))):
+ var.put(u'node', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'node').put(u'object', var.get(u'base'))
+ var.get(u'node').put(u'callee', var.get(u"this").callprop(u'parseNoCallExpr'))
+ return var.get(u"this").callprop(u'parseSubscripts', var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'BindExpression')), var.get(u'startPos'), var.get(u'startLoc'), var.get(u'noCalls'))
+ else:
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'dot')):
+ var.put(u'_node2', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'_node2').put(u'object', var.get(u'base'))
+ var.get(u'_node2').put(u'property', var.get(u"this").callprop(u'parseIdentifier', var.get(u'true')))
+ var.get(u'_node2').put(u'computed', Js(False))
+ var.put(u'base', var.get(u"this").callprop(u'finishNode', var.get(u'_node2'), Js(u'MemberExpression')))
+ else:
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'bracketL')):
+ var.put(u'_node3', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'_node3').put(u'object', var.get(u'base'))
+ var.get(u'_node3').put(u'property', var.get(u"this").callprop(u'parseExpression'))
+ var.get(u'_node3').put(u'computed', var.get(u'true'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'bracketR'))
+ var.put(u'base', var.get(u"this").callprop(u'finishNode', var.get(u'_node3'), Js(u'MemberExpression')))
+ else:
+ if (var.get(u'noCalls').neg() and var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL'))):
+ var.put(u'possibleAsync', (((PyJsStrictEq(var.get(u"this").get(u'state').get(u'potentialArrowAt'),var.get(u'base').get(u'start')) and PyJsStrictEq(var.get(u'base').get(u'type'),Js(u'Identifier'))) and PyJsStrictEq(var.get(u'base').get(u'name'),Js(u'async'))) and var.get(u"this").callprop(u'canInsertSemicolon').neg()))
+ var.get(u"this").callprop(u'next')
+ var.put(u'_node4', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'_node4').put(u'callee', var.get(u'base'))
+ var.get(u'_node4').put(u'arguments', var.get(u"this").callprop(u'parseCallExpressionArguments', var.get(u'types').get(u'parenR'), var.get(u'possibleAsync')))
+ if (PyJsStrictEq(var.get(u'_node4').get(u'callee').get(u'type'),Js(u'Import')) and PyJsStrictNeq(var.get(u'_node4').get(u'arguments').get(u'length'),Js(1.0))):
+ var.get(u"this").callprop(u'raise', var.get(u'_node4').get(u'start'), Js(u'import() requires exactly one argument'))
+ var.put(u'base', var.get(u"this").callprop(u'finishNode', var.get(u'_node4'), Js(u'CallExpression')))
+ if (var.get(u'possibleAsync') and var.get(u"this").callprop(u'shouldParseAsyncArrow')):
+ return var.get(u"this").callprop(u'parseAsyncArrowFromCallExpression', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')), var.get(u'_node4'))
+ else:
+ var.get(u"this").callprop(u'toReferencedList', var.get(u'_node4').get(u'arguments'))
+ else:
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'backQuote')):
+ var.put(u'_node5', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'_node5').put(u'tag', var.get(u'base'))
+ var.get(u'_node5').put(u'quasi', var.get(u"this").callprop(u'parseTemplate'))
+ var.put(u'base', var.get(u"this").callprop(u'finishNode', var.get(u'_node5'), Js(u'TaggedTemplateExpression')))
+ else:
+ return var.get(u'base')
+
+ PyJs_anonymous_3039_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseSubscripts', PyJs_anonymous_3039_)
+ @Js
+ def PyJs_anonymous_3040_(close, possibleAsyncArrow, this, arguments, var=var):
+ var = Scope({u'this':this, u'close':close, u'possibleAsyncArrow':possibleAsyncArrow, u'arguments':arguments}, var)
+ var.registers([u'elts', u'close', u'first', u'possibleAsyncArrow', u'innerParenStart'])
+ var.put(u'innerParenStart', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'elts', Js([]))
+ var.put(u'first', var.get(u'true'))
+ while var.get(u"this").callprop(u'eat', var.get(u'close')).neg():
+ if var.get(u'first'):
+ var.put(u'first', Js(False))
+ else:
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'))
+ if var.get(u"this").callprop(u'eat', var.get(u'close')):
+ break
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL')) and var.get(u'innerParenStart').neg()):
+ var.put(u'innerParenStart', var.get(u"this").get(u'state').get(u'start'))
+ PyJs_Object_3041_ = Js({u'start':Js(0.0)})
+ var.get(u'elts').callprop(u'push', var.get(u"this").callprop(u'parseExprListItem', var.get(u'undefined'), (PyJs_Object_3041_ if var.get(u'possibleAsyncArrow') else var.get(u'undefined'))))
+ if ((var.get(u'possibleAsyncArrow') and var.get(u'innerParenStart')) and var.get(u"this").callprop(u'shouldParseAsyncArrow')):
+ var.get(u"this").callprop(u'unexpected')
+ return var.get(u'elts')
+ PyJs_anonymous_3040_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseCallExpressionArguments', PyJs_anonymous_3040_)
+ @Js
+ def PyJs_anonymous_3042_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").callprop(u'match', var.get(u'types').get(u'arrow'))
+ PyJs_anonymous_3042_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'shouldParseAsyncArrow', PyJs_anonymous_3042_)
+ @Js
+ def PyJs_anonymous_3043_(node, call, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'call':call, u'arguments':arguments}, var)
+ var.registers([u'node', u'call'])
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'arrow'))
+ return var.get(u"this").callprop(u'parseArrowExpression', var.get(u'node'), var.get(u'call').get(u'arguments'), var.get(u'true'))
+ PyJs_anonymous_3043_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseAsyncArrowFromCallExpression', PyJs_anonymous_3043_)
+ @Js
+ def PyJs_anonymous_3044_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'startPos', u'startLoc'])
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ return var.get(u"this").callprop(u'parseSubscripts', var.get(u"this").callprop(u'parseExprAtom'), var.get(u'startPos'), var.get(u'startLoc'), var.get(u'true'))
+ PyJs_anonymous_3044_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseNoCallExpr', PyJs_anonymous_3044_)
+ @Js
+ def PyJs_anonymous_3045_(refShorthandDefaultPos, this, arguments, var=var):
+ var = Scope({u'this':this, u'refShorthandDefaultPos':refShorthandDefaultPos, u'arguments':arguments}, var)
+ var.registers([u'node', u'oldLabels', u'allowAwait', u'oldInFunction', u'allowYield', u'value', u'params', u'_node6', u'callee', u'id', u'canBeArrow', u'refShorthandDefaultPos'])
+ var.put(u'node', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'canBeArrow', PyJsStrictEq(var.get(u"this").get(u'state').get(u'potentialArrowAt'),var.get(u"this").get(u'state').get(u'start')))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u"this").get(u'state').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_super')):
+ SWITCHED = True
+ if (var.get(u"this").get(u'state').get(u'inMethod').neg() and var.get(u"this").get(u'options').get(u'allowSuperOutsideMethod').neg()):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u"'super' outside of function or class"))
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ if ((var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL')).neg() and var.get(u"this").callprop(u'match', var.get(u'types').get(u'bracketL')).neg()) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'dot')).neg()):
+ var.get(u"this").callprop(u'unexpected')
+ if ((var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL')) and PyJsStrictNeq(var.get(u"this").get(u'state').get(u'inMethod'),Js(u'constructor'))) and var.get(u"this").get(u'options').get(u'allowSuperOutsideMethod').neg()):
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'start'), Js(u'super() outside of class constructor'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'Super'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_import')):
+ SWITCHED = True
+ if var.get(u"this").callprop(u'hasPlugin', Js(u'dynamicImport')).neg():
+ var.get(u"this").callprop(u'unexpected')
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL')).neg():
+ var.get(u"this").callprop(u'unexpected', var.get(u"null"), var.get(u'types').get(u'parenL'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'Import'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_this')):
+ SWITCHED = True
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ThisExpression'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_yield')):
+ SWITCHED = True
+ if var.get(u"this").get(u'state').get(u'inGenerator'):
+ var.get(u"this").callprop(u'unexpected')
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'name')):
+ SWITCHED = True
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.put(u'allowAwait', (PyJsStrictEq(var.get(u"this").get(u'state').get(u'value'),Js(u'await')) and var.get(u"this").get(u'state').get(u'inAsync')))
+ var.put(u'allowYield', var.get(u"this").callprop(u'shouldAllowYieldIdentifier'))
+ var.put(u'id', var.get(u"this").callprop(u'parseIdentifier', (var.get(u'allowAwait') or var.get(u'allowYield'))))
+ if PyJsStrictEq(var.get(u'id').get(u'name'),Js(u'await')):
+ if (var.get(u"this").get(u'state').get(u'inAsync') or var.get(u"this").get(u'inModule')):
+ return var.get(u"this").callprop(u'parseAwait', var.get(u'node'))
+ else:
+ if ((PyJsStrictEq(var.get(u'id').get(u'name'),Js(u'async')) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'_function'))) and var.get(u"this").callprop(u'canInsertSemicolon').neg()):
+ var.get(u"this").callprop(u'next')
+ return var.get(u"this").callprop(u'parseFunction', var.get(u'node'), Js(False), Js(False), var.get(u'true'))
+ else:
+ if ((var.get(u'canBeArrow') and PyJsStrictEq(var.get(u'id').get(u'name'),Js(u'async'))) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'name'))):
+ var.put(u'params', Js([var.get(u"this").callprop(u'parseIdentifier')]))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'arrow'))
+ return var.get(u"this").callprop(u'parseArrowExpression', var.get(u'node'), var.get(u'params'), var.get(u'true'))
+ if ((var.get(u'canBeArrow') and var.get(u"this").callprop(u'canInsertSemicolon').neg()) and var.get(u"this").callprop(u'eat', var.get(u'types').get(u'arrow'))):
+ return var.get(u"this").callprop(u'parseArrowExpression', var.get(u'node'), Js([var.get(u'id')]))
+ return var.get(u'id')
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_do')):
+ SWITCHED = True
+ if var.get(u"this").callprop(u'hasPlugin', Js(u'doExpressions')):
+ var.put(u'_node6', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ var.put(u'oldInFunction', var.get(u"this").get(u'state').get(u'inFunction'))
+ var.put(u'oldLabels', var.get(u"this").get(u'state').get(u'labels'))
+ var.get(u"this").get(u'state').put(u'labels', Js([]))
+ var.get(u"this").get(u'state').put(u'inFunction', Js(False))
+ var.get(u'_node6').put(u'body', var.get(u"this").callprop(u'parseBlock', Js(False), var.get(u'true')))
+ var.get(u"this").get(u'state').put(u'inFunction', var.get(u'oldInFunction'))
+ var.get(u"this").get(u'state').put(u'labels', var.get(u'oldLabels'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'_node6'), Js(u'DoExpression'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'regexp')):
+ SWITCHED = True
+ var.put(u'value', var.get(u"this").get(u'state').get(u'value'))
+ var.put(u'node', var.get(u"this").callprop(u'parseLiteral', var.get(u'value').get(u'value'), Js(u'RegExpLiteral')))
+ var.get(u'node').put(u'pattern', var.get(u'value').get(u'pattern'))
+ var.get(u'node').put(u'flags', var.get(u'value').get(u'flags'))
+ return var.get(u'node')
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'num')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseLiteral', var.get(u"this").get(u'state').get(u'value'), Js(u'NumericLiteral'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'string')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseLiteral', var.get(u"this").get(u'state').get(u'value'), Js(u'StringLiteral'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_null')):
+ SWITCHED = True
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'NullLiteral'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_true')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_false')):
+ SWITCHED = True
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u'node').put(u'value', var.get(u"this").callprop(u'match', var.get(u'types').get(u'_true')))
+ var.get(u"this").callprop(u'next')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'BooleanLiteral'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'parenL')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseParenAndDistinguishExpression', var.get(u"null"), var.get(u"null"), var.get(u'canBeArrow'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'bracketL')):
+ SWITCHED = True
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ var.get(u'node').put(u'elements', var.get(u"this").callprop(u'parseExprList', var.get(u'types').get(u'bracketR'), var.get(u'true'), var.get(u'refShorthandDefaultPos')))
+ var.get(u"this").callprop(u'toReferencedList', var.get(u'node').get(u'elements'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ArrayExpression'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'braceL')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseObj', Js(False), var.get(u'refShorthandDefaultPos'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_function')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseFunctionExpression')
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'at')):
+ SWITCHED = True
+ var.get(u"this").callprop(u'parseDecorators')
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_class')):
+ SWITCHED = True
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'takeDecorators', var.get(u'node'))
+ return var.get(u"this").callprop(u'parseClass', var.get(u'node'), Js(False))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'_new')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseNew')
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'backQuote')):
+ SWITCHED = True
+ return var.get(u"this").callprop(u'parseTemplate')
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'types').get(u'doubleColon')):
+ SWITCHED = True
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ var.get(u'node').put(u'object', var.get(u"null"))
+ var.put(u'callee', var.get(u'node').put(u'callee', var.get(u"this").callprop(u'parseNoCallExpr')))
+ if PyJsStrictEq(var.get(u'callee').get(u'type'),Js(u'MemberExpression')):
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'BindExpression'))
+ else:
+ var.get(u"this").callprop(u'raise', var.get(u'callee').get(u'start'), Js(u'Binding should be performed on object property.'))
+ if True:
+ SWITCHED = True
+ var.get(u"this").callprop(u'unexpected')
+ SWITCHED = True
+ break
+ PyJs_anonymous_3045_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseExprAtom', PyJs_anonymous_3045_)
+ @Js
+ def PyJs_anonymous_3046_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'meta'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.put(u'meta', var.get(u"this").callprop(u'parseIdentifier', var.get(u'true')))
+ if ((var.get(u"this").get(u'state').get(u'inGenerator') and var.get(u"this").callprop(u'eat', var.get(u'types').get(u'dot'))) and var.get(u"this").callprop(u'hasPlugin', Js(u'functionSent'))):
+ return var.get(u"this").callprop(u'parseMetaProperty', var.get(u'node'), var.get(u'meta'), Js(u'sent'))
+ else:
+ return var.get(u"this").callprop(u'parseFunction', var.get(u'node'), Js(False))
+ PyJs_anonymous_3046_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseFunctionExpression', PyJs_anonymous_3046_)
+ @Js
+ def PyJs_anonymous_3047_(node, meta, propertyName, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'propertyName':propertyName, u'meta':meta, u'arguments':arguments}, var)
+ var.registers([u'node', u'propertyName', u'meta'])
+ var.get(u'node').put(u'meta', var.get(u'meta'))
+ var.get(u'node').put(u'property', var.get(u"this").callprop(u'parseIdentifier', var.get(u'true')))
+ if PyJsStrictNeq(var.get(u'node').get(u'property').get(u'name'),var.get(u'propertyName')):
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'property').get(u'start'), (((Js(u'The only valid meta property for new is ')+var.get(u'meta').get(u'name'))+Js(u'.'))+var.get(u'propertyName')))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'MetaProperty'))
+ PyJs_anonymous_3047_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseMetaProperty', PyJs_anonymous_3047_)
+ @Js
+ def PyJs_anonymous_3048_(value, type, this, arguments, var=var):
+ var = Scope({u'this':this, u'type':type, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'node', u'type', u'value'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'addExtra', var.get(u'node'), Js(u'rawValue'), var.get(u'value'))
+ var.get(u"this").callprop(u'addExtra', var.get(u'node'), Js(u'raw'), var.get(u"this").get(u'input').callprop(u'slice', var.get(u"this").get(u'state').get(u'start'), var.get(u"this").get(u'state').get(u'end')))
+ var.get(u'node').put(u'value', var.get(u'value'))
+ var.get(u"this").callprop(u'next')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), var.get(u'type'))
+ PyJs_anonymous_3048_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseLiteral', PyJs_anonymous_3048_)
+ @Js
+ def PyJs_anonymous_3049_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'val'])
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenL'))
+ var.put(u'val', var.get(u"this").callprop(u'parseExpression'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenR'))
+ return var.get(u'val')
+ PyJs_anonymous_3049_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseParenExpression', PyJs_anonymous_3049_)
+ @Js
+ def PyJs_anonymous_3050_(startPos, startLoc, canBeArrow, this, arguments, var=var):
+ var = Scope({u'this':this, u'startPos':startPos, u'canBeArrow':canBeArrow, u'startLoc':startLoc, u'arguments':arguments}, var)
+ var.registers([u'innerStartLoc', u'optionalCommaStart', u'_ref', u'startPos', u'arrowNode', u'_iterator', u'val', u'param', u'innerStartPos', u'spreadNodeStartPos', u'refShorthandDefaultPos', u'_i', u'spreadStart', u'exprList', u'canBeArrow', u'innerEndPos', u'spreadNodeStartLoc', u'refNeedsArrowPos', u'_isArray', u'innerEndLoc', u'startLoc', u'first'])
+ var.put(u'startPos', (var.get(u'startPos') or var.get(u"this").get(u'state').get(u'start')))
+ var.put(u'startLoc', (var.get(u'startLoc') or var.get(u"this").get(u'state').get(u'startLoc')))
+ var.put(u'val', PyJsComma(Js(0.0), Js(None)))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenL'))
+ var.put(u'innerStartPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'innerStartLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.put(u'exprList', Js([]))
+ var.put(u'first', var.get(u'true'))
+ PyJs_Object_3051_ = Js({u'start':Js(0.0)})
+ var.put(u'refShorthandDefaultPos', PyJs_Object_3051_)
+ var.put(u'spreadStart', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'optionalCommaStart', PyJsComma(Js(0.0), Js(None)))
+ PyJs_Object_3052_ = Js({u'start':Js(0.0)})
+ var.put(u'refNeedsArrowPos', PyJs_Object_3052_)
+ while var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenR')).neg():
+ if var.get(u'first'):
+ var.put(u'first', Js(False))
+ else:
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'), (var.get(u'refNeedsArrowPos').get(u'start') or var.get(u"null")))
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenR')):
+ var.put(u'optionalCommaStart', var.get(u"this").get(u'state').get(u'start'))
+ break
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'ellipsis')):
+ var.put(u'spreadNodeStartPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'spreadNodeStartLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.put(u'spreadStart', var.get(u"this").get(u'state').get(u'start'))
+ var.get(u'exprList').callprop(u'push', var.get(u"this").callprop(u'parseParenItem', var.get(u"this").callprop(u'parseRest'), var.get(u'spreadNodeStartLoc'), var.get(u'spreadNodeStartPos')))
+ break
+ else:
+ var.get(u'exprList').callprop(u'push', var.get(u"this").callprop(u'parseMaybeAssign', Js(False), var.get(u'refShorthandDefaultPos'), var.get(u"this").get(u'parseParenItem'), var.get(u'refNeedsArrowPos')))
+ var.put(u'innerEndPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'innerEndLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenR'))
+ var.put(u'arrowNode', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ if ((var.get(u'canBeArrow') and var.get(u"this").callprop(u'shouldParseArrow')) and var.put(u'arrowNode', var.get(u"this").callprop(u'parseArrow', var.get(u'arrowNode')))):
+ #for JS loop
+ var.put(u'_iterator', var.get(u'exprList'))
+ var.put(u'_isArray', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator')))
+ var.put(u'_i', Js(0.0))
+ var.put(u'_iterator', (var.get(u'_iterator') if var.get(u'_isArray') else var.get(u'_iterator').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray'):
+ if (var.get(u'_i')>=var.get(u'_iterator').get(u'length')):
+ break
+ var.put(u'_ref', var.get(u'_iterator').get((var.put(u'_i',Js(var.get(u'_i').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i', var.get(u'_iterator').callprop(u'next'))
+ if var.get(u'_i').get(u'done'):
+ break
+ var.put(u'_ref', var.get(u'_i').get(u'value'))
+ var.put(u'param', var.get(u'_ref'))
+ if (var.get(u'param').get(u'extra') and var.get(u'param').get(u'extra').get(u'parenthesized')):
+ var.get(u"this").callprop(u'unexpected', var.get(u'param').get(u'extra').get(u'parenStart'))
+
+ return var.get(u"this").callprop(u'parseArrowExpression', var.get(u'arrowNode'), var.get(u'exprList'))
+ if var.get(u'exprList').get(u'length').neg():
+ var.get(u"this").callprop(u'unexpected', var.get(u"this").get(u'state').get(u'lastTokStart'))
+ if var.get(u'optionalCommaStart'):
+ var.get(u"this").callprop(u'unexpected', var.get(u'optionalCommaStart'))
+ if var.get(u'spreadStart'):
+ var.get(u"this").callprop(u'unexpected', var.get(u'spreadStart'))
+ if var.get(u'refShorthandDefaultPos').get(u'start'):
+ var.get(u"this").callprop(u'unexpected', var.get(u'refShorthandDefaultPos').get(u'start'))
+ if var.get(u'refNeedsArrowPos').get(u'start'):
+ var.get(u"this").callprop(u'unexpected', var.get(u'refNeedsArrowPos').get(u'start'))
+ if (var.get(u'exprList').get(u'length')>Js(1.0)):
+ var.put(u'val', var.get(u"this").callprop(u'startNodeAt', var.get(u'innerStartPos'), var.get(u'innerStartLoc')))
+ var.get(u'val').put(u'expressions', var.get(u'exprList'))
+ var.get(u"this").callprop(u'toReferencedList', var.get(u'val').get(u'expressions'))
+ var.get(u"this").callprop(u'finishNodeAt', var.get(u'val'), Js(u'SequenceExpression'), var.get(u'innerEndPos'), var.get(u'innerEndLoc'))
+ else:
+ var.put(u'val', var.get(u'exprList').get(u'0'))
+ var.get(u"this").callprop(u'addExtra', var.get(u'val'), Js(u'parenthesized'), var.get(u'true'))
+ var.get(u"this").callprop(u'addExtra', var.get(u'val'), Js(u'parenStart'), var.get(u'startPos'))
+ return var.get(u'val')
+ PyJs_anonymous_3050_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseParenAndDistinguishExpression', PyJs_anonymous_3050_)
+ @Js
+ def PyJs_anonymous_3053_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u"this").callprop(u'canInsertSemicolon').neg()
+ PyJs_anonymous_3053_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'shouldParseArrow', PyJs_anonymous_3053_)
+ @Js
+ def PyJs_anonymous_3054_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'arrow')):
+ return var.get(u'node')
+ PyJs_anonymous_3054_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseArrow', PyJs_anonymous_3054_)
+ @Js
+ def PyJs_anonymous_3055_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return var.get(u'node')
+ PyJs_anonymous_3055_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseParenItem', PyJs_anonymous_3055_)
+ @Js
+ def PyJs_anonymous_3056_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'meta'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.put(u'meta', var.get(u"this").callprop(u'parseIdentifier', var.get(u'true')))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'dot')):
+ return var.get(u"this").callprop(u'parseMetaProperty', var.get(u'node'), var.get(u'meta'), Js(u'target'))
+ var.get(u'node').put(u'callee', var.get(u"this").callprop(u'parseNoCallExpr'))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'parenL')):
+ var.get(u'node').put(u'arguments', var.get(u"this").callprop(u'parseExprList', var.get(u'types').get(u'parenR')))
+ var.get(u"this").callprop(u'toReferencedList', var.get(u'node').get(u'arguments'))
+ else:
+ var.get(u'node').put(u'arguments', Js([]))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'NewExpression'))
+ PyJs_anonymous_3056_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseNew', PyJs_anonymous_3056_)
+ @Js
+ def PyJs_anonymous_3057_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'elem'])
+ var.put(u'elem', var.get(u"this").callprop(u'startNode'))
+ PyJs_Object_3058_ = Js({u'raw':var.get(u"this").get(u'input').callprop(u'slice', var.get(u"this").get(u'state').get(u'start'), var.get(u"this").get(u'state').get(u'end')).callprop(u'replace', JsRegExp(u'/\\r\\n?/g'), Js(u'\n')),u'cooked':var.get(u"this").get(u'state').get(u'value')})
+ var.get(u'elem').put(u'value', PyJs_Object_3058_)
+ var.get(u"this").callprop(u'next')
+ var.get(u'elem').put(u'tail', var.get(u"this").callprop(u'match', var.get(u'types').get(u'backQuote')))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'elem'), Js(u'TemplateElement'))
+ PyJs_anonymous_3057_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseTemplateElement', PyJs_anonymous_3057_)
+ @Js
+ def PyJs_anonymous_3059_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'curElt'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ var.get(u'node').put(u'expressions', Js([]))
+ var.put(u'curElt', var.get(u"this").callprop(u'parseTemplateElement'))
+ var.get(u'node').put(u'quasis', Js([var.get(u'curElt')]))
+ while var.get(u'curElt').get(u'tail').neg():
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'dollarBraceL'))
+ var.get(u'node').get(u'expressions').callprop(u'push', var.get(u"this").callprop(u'parseExpression'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'braceR'))
+ var.get(u'node').get(u'quasis').callprop(u'push', var.put(u'curElt', var.get(u"this").callprop(u'parseTemplateElement')))
+ var.get(u"this").callprop(u'next')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'TemplateLiteral'))
+ PyJs_anonymous_3059_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseTemplate', PyJs_anonymous_3059_)
+ @Js
+ def PyJs_anonymous_3060_(isPattern, refShorthandDefaultPos, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'refShorthandDefaultPos':refShorthandDefaultPos, u'isPattern':isPattern}, var)
+ var.registers([u'node', u'firstRestLocation', u'isGenerator', u'prop', u'isAsync', u'asyncId', u'refShorthandDefaultPos', u'startLoc', u'propHash', u'position', u'startPos', u'isPattern', u'decorators', u'first'])
+ var.put(u'decorators', Js([]))
+ var.put(u'propHash', var.get(u'Object').callprop(u'create', var.get(u"null")))
+ var.put(u'first', var.get(u'true'))
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u'node').put(u'properties', Js([]))
+ var.get(u"this").callprop(u'next')
+ var.put(u'firstRestLocation', var.get(u"null"))
+ while var.get(u"this").callprop(u'eat', var.get(u'types').get(u'braceR')).neg():
+ if var.get(u'first'):
+ var.put(u'first', Js(False))
+ else:
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'braceR')):
+ break
+ while var.get(u"this").callprop(u'match', var.get(u'types').get(u'at')):
+ var.get(u'decorators').callprop(u'push', var.get(u"this").callprop(u'parseDecorator'))
+ var.put(u'prop', var.get(u"this").callprop(u'startNode'))
+ var.put(u'isGenerator', Js(False))
+ var.put(u'isAsync', Js(False))
+ var.put(u'startPos', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'startLoc', PyJsComma(Js(0.0), Js(None)))
+ if var.get(u'decorators').get(u'length'):
+ var.get(u'prop').put(u'decorators', var.get(u'decorators'))
+ var.put(u'decorators', Js([]))
+ if (var.get(u"this").callprop(u'hasPlugin', Js(u'objectRestSpread')) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'ellipsis'))):
+ var.put(u'prop', var.get(u"this").callprop(u'parseSpread'))
+ var.get(u'prop').put(u'type', (Js(u'RestProperty') if var.get(u'isPattern') else Js(u'SpreadProperty')))
+ var.get(u'node').get(u'properties').callprop(u'push', var.get(u'prop'))
+ if var.get(u'isPattern'):
+ var.put(u'position', var.get(u"this").get(u'state').get(u'start'))
+ if PyJsStrictNeq(var.get(u'firstRestLocation'),var.get(u"null")):
+ var.get(u"this").callprop(u'unexpected', var.get(u'firstRestLocation'), Js(u'Cannot have multiple rest elements when destructuring'))
+ else:
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'braceR')):
+ break
+ else:
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'comma')) and PyJsStrictEq(var.get(u"this").callprop(u'lookahead').get(u'type'),var.get(u'types').get(u'braceR'))):
+ continue
+ else:
+ var.put(u'firstRestLocation', var.get(u'position'))
+ continue
+ else:
+ continue
+ var.get(u'prop').put(u'method', Js(False))
+ var.get(u'prop').put(u'shorthand', Js(False))
+ if (var.get(u'isPattern') or var.get(u'refShorthandDefaultPos')):
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ if var.get(u'isPattern').neg():
+ var.put(u'isGenerator', var.get(u"this").callprop(u'eat', var.get(u'types').get(u'star')))
+ if (var.get(u'isPattern').neg() and var.get(u"this").callprop(u'isContextual', Js(u'async'))):
+ if var.get(u'isGenerator'):
+ var.get(u"this").callprop(u'unexpected')
+ var.put(u'asyncId', var.get(u"this").callprop(u'parseIdentifier'))
+ if ((((var.get(u"this").callprop(u'match', var.get(u'types').get(u'colon')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL'))) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'braceR'))) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'eq'))) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'comma'))):
+ var.get(u'prop').put(u'key', var.get(u'asyncId'))
+ else:
+ var.put(u'isAsync', var.get(u'true'))
+ if var.get(u"this").callprop(u'hasPlugin', Js(u'asyncGenerators')):
+ var.put(u'isGenerator', var.get(u"this").callprop(u'eat', var.get(u'types').get(u'star')))
+ var.get(u"this").callprop(u'parsePropertyName', var.get(u'prop'))
+ else:
+ var.get(u"this").callprop(u'parsePropertyName', var.get(u'prop'))
+ var.get(u"this").callprop(u'parseObjPropValue', var.get(u'prop'), var.get(u'startPos'), var.get(u'startLoc'), var.get(u'isGenerator'), var.get(u'isAsync'), var.get(u'isPattern'), var.get(u'refShorthandDefaultPos'))
+ var.get(u"this").callprop(u'checkPropClash', var.get(u'prop'), var.get(u'propHash'))
+ if var.get(u'prop').get(u'shorthand'):
+ var.get(u"this").callprop(u'addExtra', var.get(u'prop'), Js(u'shorthand'), var.get(u'true'))
+ var.get(u'node').get(u'properties').callprop(u'push', var.get(u'prop'))
+ if PyJsStrictNeq(var.get(u'firstRestLocation'),var.get(u"null")):
+ var.get(u"this").callprop(u'unexpected', var.get(u'firstRestLocation'), Js(u'The rest element has to be the last element when destructuring'))
+ if var.get(u'decorators').get(u'length'):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u'You have trailing decorators with no property'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), (Js(u'ObjectPattern') if var.get(u'isPattern') else Js(u'ObjectExpression')))
+ PyJs_anonymous_3060_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseObj', PyJs_anonymous_3060_)
+ @Js
+ def PyJs_anonymous_3061_(prop, startPos, startLoc, isGenerator, isAsync, isPattern, refShorthandDefaultPos, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'isGenerator':isGenerator, u'prop':prop, u'isAsync':isAsync, u'refShorthandDefaultPos':refShorthandDefaultPos, u'startLoc':startLoc, u'startPos':startPos, u'isPattern':isPattern}, var)
+ var.registers([u'isGenerator', u'prop', u'start', u'paramCount', u'illegalBinding', u'refShorthandDefaultPos', u'startLoc', u'isAsync', u'startPos', u'isPattern'])
+ if ((var.get(u'isAsync') or var.get(u'isGenerator')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL'))):
+ if var.get(u'isPattern'):
+ var.get(u"this").callprop(u'unexpected')
+ var.get(u'prop').put(u'kind', Js(u'method'))
+ var.get(u'prop').put(u'method', var.get(u'true'))
+ var.get(u"this").callprop(u'parseMethod', var.get(u'prop'), var.get(u'isGenerator'), var.get(u'isAsync'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'prop'), Js(u'ObjectMethod'))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'colon')):
+ var.get(u'prop').put(u'value', (var.get(u"this").callprop(u'parseMaybeDefault', var.get(u"this").get(u'state').get(u'start'), var.get(u"this").get(u'state').get(u'startLoc')) if var.get(u'isPattern') else var.get(u"this").callprop(u'parseMaybeAssign', Js(False), var.get(u'refShorthandDefaultPos'))))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'prop'), Js(u'ObjectProperty'))
+ def PyJs_LONG_3062_(var=var):
+ return (((((var.get(u'isPattern').neg() and var.get(u'prop').get(u'computed').neg()) and PyJsStrictEq(var.get(u'prop').get(u'key').get(u'type'),Js(u'Identifier'))) and (PyJsStrictEq(var.get(u'prop').get(u'key').get(u'name'),Js(u'get')) or PyJsStrictEq(var.get(u'prop').get(u'key').get(u'name'),Js(u'set')))) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'comma')).neg()) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'braceR')).neg())
+ if PyJs_LONG_3062_():
+ if (var.get(u'isGenerator') or var.get(u'isAsync')):
+ var.get(u"this").callprop(u'unexpected')
+ var.get(u'prop').put(u'kind', var.get(u'prop').get(u'key').get(u'name'))
+ var.get(u"this").callprop(u'parsePropertyName', var.get(u'prop'))
+ var.get(u"this").callprop(u'parseMethod', var.get(u'prop'), Js(False))
+ var.put(u'paramCount', (Js(0.0) if PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'get')) else Js(1.0)))
+ if PyJsStrictNeq(var.get(u'prop').get(u'params').get(u'length'),var.get(u'paramCount')):
+ var.put(u'start', var.get(u'prop').get(u'start'))
+ if PyJsStrictEq(var.get(u'prop').get(u'kind'),Js(u'get')):
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'getter should have no params'))
+ else:
+ var.get(u"this").callprop(u'raise', var.get(u'start'), Js(u'setter should have exactly one param'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'prop'), Js(u'ObjectMethod'))
+ if (var.get(u'prop').get(u'computed').neg() and PyJsStrictEq(var.get(u'prop').get(u'key').get(u'type'),Js(u'Identifier'))):
+ if var.get(u'isPattern'):
+ var.put(u'illegalBinding', var.get(u"this").callprop(u'isKeyword', var.get(u'prop').get(u'key').get(u'name')))
+ if (var.get(u'illegalBinding').neg() and var.get(u"this").get(u'state').get(u'strict')):
+ var.put(u'illegalBinding', (var.get(u'reservedWords').callprop(u'strictBind', var.get(u'prop').get(u'key').get(u'name')) or var.get(u'reservedWords').callprop(u'strict', var.get(u'prop').get(u'key').get(u'name'))))
+ if var.get(u'illegalBinding'):
+ var.get(u"this").callprop(u'raise', var.get(u'prop').get(u'key').get(u'start'), (Js(u'Binding ')+var.get(u'prop').get(u'key').get(u'name')))
+ var.get(u'prop').put(u'value', var.get(u"this").callprop(u'parseMaybeDefault', var.get(u'startPos'), var.get(u'startLoc'), var.get(u'prop').get(u'key').callprop(u'__clone')))
+ else:
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'eq')) and var.get(u'refShorthandDefaultPos')):
+ if var.get(u'refShorthandDefaultPos').get(u'start').neg():
+ var.get(u'refShorthandDefaultPos').put(u'start', var.get(u"this").get(u'state').get(u'start'))
+ var.get(u'prop').put(u'value', var.get(u"this").callprop(u'parseMaybeDefault', var.get(u'startPos'), var.get(u'startLoc'), var.get(u'prop').get(u'key').callprop(u'__clone')))
+ else:
+ var.get(u'prop').put(u'value', var.get(u'prop').get(u'key').callprop(u'__clone'))
+ var.get(u'prop').put(u'shorthand', var.get(u'true'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'prop'), Js(u'ObjectProperty'))
+ var.get(u"this").callprop(u'unexpected')
+ PyJs_anonymous_3061_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseObjPropValue', PyJs_anonymous_3061_)
+ @Js
+ def PyJs_anonymous_3063_(prop, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'prop':prop}, var)
+ var.registers([u'prop'])
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'bracketL')):
+ var.get(u'prop').put(u'computed', var.get(u'true'))
+ var.get(u'prop').put(u'key', var.get(u"this").callprop(u'parseMaybeAssign'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'bracketR'))
+ return var.get(u'prop').get(u'key')
+ else:
+ var.get(u'prop').put(u'computed', Js(False))
+ return var.get(u'prop').put(u'key', (var.get(u"this").callprop(u'parseExprAtom') if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'num')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'string'))) else var.get(u"this").callprop(u'parseIdentifier', var.get(u'true'))))
+ PyJs_anonymous_3063_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parsePropertyName', PyJs_anonymous_3063_)
+ @Js
+ def PyJs_anonymous_3064_(node, isAsync, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'isAsync':isAsync, u'arguments':arguments}, var)
+ var.registers([u'node', u'isAsync'])
+ var.get(u'node').put(u'id', var.get(u"null"))
+ var.get(u'node').put(u'generator', Js(False))
+ var.get(u'node').put(u'expression', Js(False))
+ var.get(u'node').put(u'async', var.get(u'isAsync').neg().neg())
+ PyJs_anonymous_3064_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'initFunction', PyJs_anonymous_3064_)
+ @Js
+ def PyJs_anonymous_3065_(node, isGenerator, isAsync, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'isAsync':isAsync, u'isGenerator':isGenerator, u'arguments':arguments}, var)
+ var.registers([u'node', u'oldInMethod', u'isAsync', u'isGenerator'])
+ var.put(u'oldInMethod', var.get(u"this").get(u'state').get(u'inMethod'))
+ var.get(u"this").get(u'state').put(u'inMethod', (var.get(u'node').get(u'kind') or var.get(u'true')))
+ var.get(u"this").callprop(u'initFunction', var.get(u'node'), var.get(u'isAsync'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenL'))
+ var.get(u'node').put(u'params', var.get(u"this").callprop(u'parseBindingList', var.get(u'types').get(u'parenR')))
+ var.get(u'node').put(u'generator', var.get(u'isGenerator'))
+ var.get(u"this").callprop(u'parseFunctionBody', var.get(u'node'))
+ var.get(u"this").get(u'state').put(u'inMethod', var.get(u'oldInMethod'))
+ return var.get(u'node')
+ PyJs_anonymous_3065_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseMethod', PyJs_anonymous_3065_)
+ @Js
+ def PyJs_anonymous_3066_(node, params, isAsync, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'isAsync':isAsync, u'params':params, u'arguments':arguments}, var)
+ var.registers([u'node', u'isAsync', u'params'])
+ var.get(u"this").callprop(u'initFunction', var.get(u'node'), var.get(u'isAsync'))
+ var.get(u'node').put(u'params', var.get(u"this").callprop(u'toAssignableList', var.get(u'params'), var.get(u'true'), Js(u'arrow function parameters')))
+ var.get(u"this").callprop(u'parseFunctionBody', var.get(u'node'), var.get(u'true'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ArrowFunctionExpression'))
+ PyJs_anonymous_3066_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseArrowExpression', PyJs_anonymous_3066_)
+ @Js
+ def PyJs_anonymous_3067_(node, allowExpression, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'allowExpression':allowExpression, u'arguments':arguments}, var)
+ var.registers([u'node', u'_isArray3', u'_isArray2', u'directive', u'oldLabels', u'checkLVal', u'oldInAsync', u'allowExpression', u'isStrict', u'_i3', u'_i2', u'param', u'_ref2', u'oldInFunc', u'isExpression', u'oldStrict', u'nameHash', u'oldInGen', u'_ref3', u'_iterator3', u'_iterator2'])
+ var.put(u'isExpression', (var.get(u'allowExpression') and var.get(u"this").callprop(u'match', var.get(u'types').get(u'braceL')).neg()))
+ var.put(u'oldInAsync', var.get(u"this").get(u'state').get(u'inAsync'))
+ var.get(u"this").get(u'state').put(u'inAsync', var.get(u'node').get(u'async'))
+ if var.get(u'isExpression'):
+ var.get(u'node').put(u'body', var.get(u"this").callprop(u'parseMaybeAssign'))
+ var.get(u'node').put(u'expression', var.get(u'true'))
+ else:
+ var.put(u'oldInFunc', var.get(u"this").get(u'state').get(u'inFunction'))
+ var.put(u'oldInGen', var.get(u"this").get(u'state').get(u'inGenerator'))
+ var.put(u'oldLabels', var.get(u"this").get(u'state').get(u'labels'))
+ var.get(u"this").get(u'state').put(u'inFunction', var.get(u'true'))
+ var.get(u"this").get(u'state').put(u'inGenerator', var.get(u'node').get(u'generator'))
+ var.get(u"this").get(u'state').put(u'labels', Js([]))
+ var.get(u'node').put(u'body', var.get(u"this").callprop(u'parseBlock', var.get(u'true')))
+ var.get(u'node').put(u'expression', Js(False))
+ var.get(u"this").get(u'state').put(u'inFunction', var.get(u'oldInFunc'))
+ var.get(u"this").get(u'state').put(u'inGenerator', var.get(u'oldInGen'))
+ var.get(u"this").get(u'state').put(u'labels', var.get(u'oldLabels'))
+ var.get(u"this").get(u'state').put(u'inAsync', var.get(u'oldInAsync'))
+ var.put(u'checkLVal', var.get(u"this").get(u'state').get(u'strict'))
+ var.put(u'isStrict', Js(False))
+ if var.get(u'allowExpression'):
+ var.put(u'checkLVal', var.get(u'true'))
+ if (var.get(u'isExpression').neg() and var.get(u'node').get(u'body').get(u'directives').get(u'length')):
+ #for JS loop
+ var.put(u'_iterator2', var.get(u'node').get(u'body').get(u'directives'))
+ var.put(u'_isArray2', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator2')))
+ var.put(u'_i2', Js(0.0))
+ var.put(u'_iterator2', (var.get(u'_iterator2') if var.get(u'_isArray2') else var.get(u'_iterator2').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray2'):
+ if (var.get(u'_i2')>=var.get(u'_iterator2').get(u'length')):
+ break
+ var.put(u'_ref2', var.get(u'_iterator2').get((var.put(u'_i2',Js(var.get(u'_i2').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i2', var.get(u'_iterator2').callprop(u'next'))
+ if var.get(u'_i2').get(u'done'):
+ break
+ var.put(u'_ref2', var.get(u'_i2').get(u'value'))
+ var.put(u'directive', var.get(u'_ref2'))
+ if PyJsStrictEq(var.get(u'directive').get(u'value').get(u'value'),Js(u'use strict')):
+ var.put(u'isStrict', var.get(u'true'))
+ var.put(u'checkLVal', var.get(u'true'))
+ break
+
+ if (((var.get(u'isStrict') and var.get(u'node').get(u'id')) and PyJsStrictEq(var.get(u'node').get(u'id').get(u'type'),Js(u'Identifier'))) and PyJsStrictEq(var.get(u'node').get(u'id').get(u'name'),Js(u'yield'))):
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'id').get(u'start'), Js(u'Binding yield in strict mode'))
+ if var.get(u'checkLVal'):
+ var.put(u'nameHash', var.get(u'Object').callprop(u'create', var.get(u"null")))
+ var.put(u'oldStrict', var.get(u"this").get(u'state').get(u'strict'))
+ if var.get(u'isStrict'):
+ var.get(u"this").get(u'state').put(u'strict', var.get(u'true'))
+ if var.get(u'node').get(u'id'):
+ var.get(u"this").callprop(u'checkLVal', var.get(u'node').get(u'id'), var.get(u'true'), var.get(u'undefined'), Js(u'function name'))
+ #for JS loop
+ var.put(u'_iterator3', var.get(u'node').get(u'params'))
+ var.put(u'_isArray3', var.get(u'Array').callprop(u'isArray', var.get(u'_iterator3')))
+ var.put(u'_i3', Js(0.0))
+ var.put(u'_iterator3', (var.get(u'_iterator3') if var.get(u'_isArray3') else var.get(u'_iterator3').callprop(var.get(u'Symbol').get(u'iterator'))))
+ while 1:
+ pass
+ if var.get(u'_isArray3'):
+ if (var.get(u'_i3')>=var.get(u'_iterator3').get(u'length')):
+ break
+ var.put(u'_ref3', var.get(u'_iterator3').get((var.put(u'_i3',Js(var.get(u'_i3').to_number())+Js(1))-Js(1))))
+ else:
+ var.put(u'_i3', var.get(u'_iterator3').callprop(u'next'))
+ if var.get(u'_i3').get(u'done'):
+ break
+ var.put(u'_ref3', var.get(u'_i3').get(u'value'))
+ var.put(u'param', var.get(u'_ref3'))
+ if (var.get(u'isStrict') and PyJsStrictNeq(var.get(u'param').get(u'type'),Js(u'Identifier'))):
+ var.get(u"this").callprop(u'raise', var.get(u'param').get(u'start'), Js(u'Non-simple parameter in strict mode'))
+ var.get(u"this").callprop(u'checkLVal', var.get(u'param'), var.get(u'true'), var.get(u'nameHash'), Js(u'function parameter list'))
+
+ var.get(u"this").get(u'state').put(u'strict', var.get(u'oldStrict'))
+ PyJs_anonymous_3067_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseFunctionBody', PyJs_anonymous_3067_)
+ @Js
+ def PyJs_anonymous_3068_(close, allowEmpty, refShorthandDefaultPos, this, arguments, var=var):
+ var = Scope({u'this':this, u'close':close, u'allowEmpty':allowEmpty, u'refShorthandDefaultPos':refShorthandDefaultPos, u'arguments':arguments}, var)
+ var.registers([u'elts', u'close', u'allowEmpty', u'refShorthandDefaultPos', u'first'])
+ var.put(u'elts', Js([]))
+ var.put(u'first', var.get(u'true'))
+ while var.get(u"this").callprop(u'eat', var.get(u'close')).neg():
+ if var.get(u'first'):
+ var.put(u'first', Js(False))
+ else:
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'))
+ if var.get(u"this").callprop(u'eat', var.get(u'close')):
+ break
+ var.get(u'elts').callprop(u'push', var.get(u"this").callprop(u'parseExprListItem', var.get(u'allowEmpty'), var.get(u'refShorthandDefaultPos')))
+ return var.get(u'elts')
+ PyJs_anonymous_3068_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseExprList', PyJs_anonymous_3068_)
+ @Js
+ def PyJs_anonymous_3069_(allowEmpty, refShorthandDefaultPos, this, arguments, var=var):
+ var = Scope({u'this':this, u'allowEmpty':allowEmpty, u'refShorthandDefaultPos':refShorthandDefaultPos, u'arguments':arguments}, var)
+ var.registers([u'allowEmpty', u'refShorthandDefaultPos', u'elt'])
+ var.put(u'elt', PyJsComma(Js(0.0), Js(None)))
+ if (var.get(u'allowEmpty') and var.get(u"this").callprop(u'match', var.get(u'types').get(u'comma'))):
+ var.put(u'elt', var.get(u"null"))
+ else:
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'ellipsis')):
+ var.put(u'elt', var.get(u"this").callprop(u'parseSpread', var.get(u'refShorthandDefaultPos')))
+ else:
+ var.put(u'elt', var.get(u"this").callprop(u'parseMaybeAssign', Js(False), var.get(u'refShorthandDefaultPos'), var.get(u"this").get(u'parseParenItem')))
+ return var.get(u'elt')
+ PyJs_anonymous_3069_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseExprListItem', PyJs_anonymous_3069_)
+ @Js
+ def PyJs_anonymous_3070_(liberal, this, arguments, var=var):
+ var = Scope({u'this':this, u'liberal':liberal, u'arguments':arguments}, var)
+ var.registers([u'node', u'liberal'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')):
+ if ((var.get(u'liberal').neg() and var.get(u"this").get(u'state').get(u'strict')) and var.get(u'reservedWords').callprop(u'strict', var.get(u"this").get(u'state').get(u'value'))):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), ((Js(u"The keyword '")+var.get(u"this").get(u'state').get(u'value'))+Js(u"' is reserved")))
+ var.get(u'node').put(u'name', var.get(u"this").get(u'state').get(u'value'))
+ else:
+ if (var.get(u'liberal') and var.get(u"this").get(u'state').get(u'type').get(u'keyword')):
+ var.get(u'node').put(u'name', var.get(u"this").get(u'state').get(u'type').get(u'keyword'))
+ else:
+ var.get(u"this").callprop(u'unexpected')
+ if ((var.get(u'liberal').neg() and PyJsStrictEq(var.get(u'node').get(u'name'),Js(u'await'))) and var.get(u"this").get(u'state').get(u'inAsync')):
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'start'), Js(u'invalid use of await inside of an async function'))
+ var.get(u'node').get(u'loc').put(u'identifierName', var.get(u'node').get(u'name'))
+ var.get(u"this").callprop(u'next')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'Identifier'))
+ PyJs_anonymous_3070_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseIdentifier', PyJs_anonymous_3070_)
+ @Js
+ def PyJs_anonymous_3071_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").get(u'state').get(u'inAsync').neg():
+ var.get(u"this").callprop(u'unexpected')
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'star')):
+ var.get(u"this").callprop(u'raise', var.get(u'node').get(u'start'), Js(u'await* has been removed from the async functions proposal. Use Promise.all() instead.'))
+ var.get(u'node').put(u'argument', var.get(u"this").callprop(u'parseMaybeUnary'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'AwaitExpression'))
+ PyJs_anonymous_3071_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseAwait', PyJs_anonymous_3071_)
+ @Js
+ def PyJs_anonymous_3072_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'next')
+ if ((var.get(u"this").callprop(u'match', var.get(u'types').get(u'semi')) or var.get(u"this").callprop(u'canInsertSemicolon')) or (var.get(u"this").callprop(u'match', var.get(u'types').get(u'star')).neg() and var.get(u"this").get(u'state').get(u'type').get(u'startsExpr').neg())):
+ var.get(u'node').put(u'delegate', Js(False))
+ var.get(u'node').put(u'argument', var.get(u"null"))
+ else:
+ var.get(u'node').put(u'delegate', var.get(u"this").callprop(u'eat', var.get(u'types').get(u'star')))
+ var.get(u'node').put(u'argument', var.get(u"this").callprop(u'parseMaybeAssign'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'YieldExpression'))
+ PyJs_anonymous_3072_._set_name(u'anonymous')
+ var.get(u'pp$3').put(u'parseYield', PyJs_anonymous_3072_)
+ pass
+ var.put(u'pp$4', var.get(u'Parser').get(u'prototype'))
+ var.put(u'commentKeys', Js([Js(u'leadingComments'), Js(u'trailingComments'), Js(u'innerComments')]))
+ @Js
+ def PyJs_anonymous_3073_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'Node'])
+ @Js
+ def PyJsHoisted_Node_(pos, loc, filename, this, arguments, var=var):
+ var = Scope({u'this':this, u'loc':loc, u'pos':pos, u'arguments':arguments, u'filename':filename}, var)
+ var.registers([u'loc', u'pos', u'filename'])
+ var.get(u'_classCallCheck$6')(var.get(u"this"), var.get(u'Node'))
+ var.get(u"this").put(u'type', Js(u''))
+ var.get(u"this").put(u'start', var.get(u'pos'))
+ var.get(u"this").put(u'end', Js(0.0))
+ var.get(u"this").put(u'loc', var.get(u'SourceLocation').create(var.get(u'loc')))
+ if var.get(u'filename'):
+ var.get(u"this").get(u'loc').put(u'filename', var.get(u'filename'))
+ PyJsHoisted_Node_.func_name = u'Node'
+ var.put(u'Node', PyJsHoisted_Node_)
+ pass
+ @Js
+ def PyJs___clone_3074_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'__clone':PyJs___clone_3074_}, var)
+ var.registers([u'node2', u'key'])
+ var.put(u'node2', var.get(u'Node').create())
+ for PyJsTemp in var.get(u"this"):
+ var.put(u'key', PyJsTemp)
+ if (var.get(u'commentKeys').callprop(u'indexOf', var.get(u'key'))Js(0.0))):
+ return var.get('undefined')
+ var.put(u'stack', var.get(u"this").get(u'state').get(u'commentStack'))
+ var.put(u'lastChild', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'trailingComments', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'i', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'j', PyJsComma(Js(0.0), Js(None)))
+ if (var.get(u"this").get(u'state').get(u'trailingComments').get(u'length')>Js(0.0)):
+ if (var.get(u"this").get(u'state').get(u'trailingComments').get(u'0').get(u'start')>=var.get(u'node').get(u'end')):
+ var.put(u'trailingComments', var.get(u"this").get(u'state').get(u'trailingComments'))
+ var.get(u"this").get(u'state').put(u'trailingComments', Js([]))
+ else:
+ var.get(u"this").get(u'state').get(u'trailingComments').put(u'length', Js(0.0))
+ else:
+ var.put(u'lastInStack', var.get(u'last')(var.get(u'stack')))
+ if (((var.get(u'stack').get(u'length')>Js(0.0)) and var.get(u'lastInStack').get(u'trailingComments')) and (var.get(u'lastInStack').get(u'trailingComments').get(u'0').get(u'start')>=var.get(u'node').get(u'end'))):
+ var.put(u'trailingComments', var.get(u'lastInStack').get(u'trailingComments'))
+ var.get(u'lastInStack').put(u'trailingComments', var.get(u"null"))
+ while ((var.get(u'stack').get(u'length')>Js(0.0)) and (var.get(u'last')(var.get(u'stack')).get(u'start')>=var.get(u'node').get(u'start'))):
+ var.put(u'lastChild', var.get(u'stack').callprop(u'pop'))
+ if var.get(u'lastChild'):
+ if var.get(u'lastChild').get(u'leadingComments'):
+ if (PyJsStrictNeq(var.get(u'lastChild'),var.get(u'node')) and (var.get(u'last')(var.get(u'lastChild').get(u'leadingComments')).get(u'end')<=var.get(u'node').get(u'start'))):
+ var.get(u'node').put(u'leadingComments', var.get(u'lastChild').get(u'leadingComments'))
+ var.get(u'lastChild').put(u'leadingComments', var.get(u"null"))
+ else:
+ #for JS loop
+ var.put(u'i', (var.get(u'lastChild').get(u'leadingComments').get(u'length')-Js(2.0)))
+ while (var.get(u'i')>=Js(0.0)):
+ try:
+ if (var.get(u'lastChild').get(u'leadingComments').get(var.get(u'i')).get(u'end')<=var.get(u'node').get(u'start')):
+ var.get(u'node').put(u'leadingComments', var.get(u'lastChild').get(u'leadingComments').callprop(u'splice', Js(0.0), (var.get(u'i')+Js(1.0))))
+ break
+ finally:
+ var.put(u'i',Js(var.get(u'i').to_number())-Js(1))
+ else:
+ if (var.get(u"this").get(u'state').get(u'leadingComments').get(u'length')>Js(0.0)):
+ if (var.get(u'last')(var.get(u"this").get(u'state').get(u'leadingComments')).get(u'end')<=var.get(u'node').get(u'start')):
+ if var.get(u"this").get(u'state').get(u'commentPreviousNode'):
+ #for JS loop
+ var.put(u'j', Js(0.0))
+ while (var.get(u'j')Js(0.0)):
+ var.get(u'node').put(u'leadingComments', var.get(u"this").get(u'state').get(u'leadingComments'))
+ var.get(u"this").get(u'state').put(u'leadingComments', Js([]))
+ else:
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')var.get(u'node').get(u'start')):
+ break
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ var.get(u'node').put(u'leadingComments', var.get(u"this").get(u'state').get(u'leadingComments').callprop(u'slice', Js(0.0), var.get(u'i')))
+ if PyJsStrictEq(var.get(u'node').get(u'leadingComments').get(u'length'),Js(0.0)):
+ var.get(u'node').put(u'leadingComments', var.get(u"null"))
+ var.put(u'trailingComments', var.get(u"this").get(u'state').get(u'leadingComments').callprop(u'slice', var.get(u'i')))
+ if PyJsStrictEq(var.get(u'trailingComments').get(u'length'),Js(0.0)):
+ var.put(u'trailingComments', var.get(u"null"))
+ var.get(u"this").get(u'state').put(u'commentPreviousNode', var.get(u'node'))
+ if var.get(u'trailingComments'):
+ if ((var.get(u'trailingComments').get(u'length') and (var.get(u'trailingComments').get(u'0').get(u'start')>=var.get(u'node').get(u'start'))) and (var.get(u'last')(var.get(u'trailingComments')).get(u'end')<=var.get(u'node').get(u'end'))):
+ var.get(u'node').put(u'innerComments', var.get(u'trailingComments'))
+ else:
+ var.get(u'node').put(u'trailingComments', var.get(u'trailingComments'))
+ var.get(u'stack').callprop(u'push', var.get(u'node'))
+ PyJs_anonymous_3081_._set_name(u'anonymous')
+ var.get(u'pp$6').put(u'processComment', PyJs_anonymous_3081_)
+ var.put(u'pp$7', var.get(u'Parser').get(u'prototype'))
+ @Js
+ def PyJs_anonymous_3082_(tok, allowLeadingPipeOrAnd, this, arguments, var=var):
+ var = Scope({u'this':this, u'tok':tok, u'arguments':arguments, u'allowLeadingPipeOrAnd':allowLeadingPipeOrAnd}, var)
+ var.registers([u'tok', u'oldInType', u'type', u'allowLeadingPipeOrAnd'])
+ var.put(u'oldInType', var.get(u"this").get(u'state').get(u'inType'))
+ var.get(u"this").get(u'state').put(u'inType', var.get(u'true'))
+ var.get(u"this").callprop(u'expect', (var.get(u'tok') or var.get(u'types').get(u'colon')))
+ if var.get(u'allowLeadingPipeOrAnd'):
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'bitwiseAND')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'bitwiseOR'))):
+ var.get(u"this").callprop(u'next')
+ var.put(u'type', var.get(u"this").callprop(u'flowParseType'))
+ var.get(u"this").get(u'state').put(u'inType', var.get(u'oldInType'))
+ return var.get(u'type')
+ PyJs_anonymous_3082_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseTypeInitialiser', PyJs_anonymous_3082_)
+ @Js
+ def PyJs_anonymous_3083_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'next')
+ var.get(u"this").callprop(u'flowParseInterfaceish', var.get(u'node'), var.get(u'true'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'DeclareClass'))
+ PyJs_anonymous_3083_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseDeclareClass', PyJs_anonymous_3083_)
+ @Js
+ def PyJs_anonymous_3084_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'typeContainer', u'tmp', u'typeNode', u'id', u'node'])
+ var.get(u"this").callprop(u'next')
+ var.put(u'id', var.get(u'node').put(u'id', var.get(u"this").callprop(u'parseIdentifier')))
+ var.put(u'typeNode', var.get(u"this").callprop(u'startNode'))
+ var.put(u'typeContainer', var.get(u"this").callprop(u'startNode'))
+ if var.get(u"this").callprop(u'isRelational', Js(u'<')):
+ var.get(u'typeNode').put(u'typeParameters', var.get(u"this").callprop(u'flowParseTypeParameterDeclaration'))
+ else:
+ var.get(u'typeNode').put(u'typeParameters', var.get(u"null"))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenL'))
+ var.put(u'tmp', var.get(u"this").callprop(u'flowParseFunctionTypeParams'))
+ var.get(u'typeNode').put(u'params', var.get(u'tmp').get(u'params'))
+ var.get(u'typeNode').put(u'rest', var.get(u'tmp').get(u'rest'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenR'))
+ var.get(u'typeNode').put(u'returnType', var.get(u"this").callprop(u'flowParseTypeInitialiser'))
+ var.get(u'typeContainer').put(u'typeAnnotation', var.get(u"this").callprop(u'finishNode', var.get(u'typeNode'), Js(u'FunctionTypeAnnotation')))
+ var.get(u'id').put(u'typeAnnotation', var.get(u"this").callprop(u'finishNode', var.get(u'typeContainer'), Js(u'TypeAnnotation')))
+ var.get(u"this").callprop(u'finishNode', var.get(u'id'), var.get(u'id').get(u'type'))
+ var.get(u"this").callprop(u'semicolon')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'DeclareFunction'))
+ PyJs_anonymous_3084_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseDeclareFunction', PyJs_anonymous_3084_)
+ @Js
+ def PyJs_anonymous_3085_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'_class')):
+ return var.get(u"this").callprop(u'flowParseDeclareClass', var.get(u'node'))
+ else:
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'_function')):
+ return var.get(u"this").callprop(u'flowParseDeclareFunction', var.get(u'node'))
+ else:
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'_var')):
+ return var.get(u"this").callprop(u'flowParseDeclareVariable', var.get(u'node'))
+ else:
+ if var.get(u"this").callprop(u'isContextual', Js(u'module')):
+ if PyJsStrictEq(var.get(u"this").callprop(u'lookahead').get(u'type'),var.get(u'types').get(u'dot')):
+ return var.get(u"this").callprop(u'flowParseDeclareModuleExports', var.get(u'node'))
+ else:
+ return var.get(u"this").callprop(u'flowParseDeclareModule', var.get(u'node'))
+ else:
+ if var.get(u"this").callprop(u'isContextual', Js(u'type')):
+ return var.get(u"this").callprop(u'flowParseDeclareTypeAlias', var.get(u'node'))
+ else:
+ if var.get(u"this").callprop(u'isContextual', Js(u'interface')):
+ return var.get(u"this").callprop(u'flowParseDeclareInterface', var.get(u'node'))
+ else:
+ var.get(u"this").callprop(u'unexpected')
+ PyJs_anonymous_3085_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseDeclare', PyJs_anonymous_3085_)
+ @Js
+ def PyJs_anonymous_3086_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'next')
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'flowParseTypeAnnotatableIdentifier'))
+ var.get(u"this").callprop(u'semicolon')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'DeclareVariable'))
+ PyJs_anonymous_3086_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseDeclareVariable', PyJs_anonymous_3086_)
+ @Js
+ def PyJs_anonymous_3087_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'bodyNode', u'body', u'node2', u'node'])
+ var.get(u"this").callprop(u'next')
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'string')):
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'parseExprAtom'))
+ else:
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'parseIdentifier'))
+ var.put(u'bodyNode', var.get(u'node').put(u'body', var.get(u"this").callprop(u'startNode')))
+ var.put(u'body', var.get(u'bodyNode').put(u'body', Js([])))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'braceL'))
+ while var.get(u"this").callprop(u'match', var.get(u'types').get(u'braceR')).neg():
+ var.put(u'node2', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'expectContextual', Js(u'declare'), Js(u'Unexpected token. Only declares are allowed inside declare module'))
+ var.get(u'body').callprop(u'push', var.get(u"this").callprop(u'flowParseDeclare', var.get(u'node2')))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'braceR'))
+ var.get(u"this").callprop(u'finishNode', var.get(u'bodyNode'), Js(u'BlockStatement'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'DeclareModule'))
+ PyJs_anonymous_3087_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseDeclareModule', PyJs_anonymous_3087_)
+ @Js
+ def PyJs_anonymous_3088_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'expectContextual', Js(u'module'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'dot'))
+ var.get(u"this").callprop(u'expectContextual', Js(u'exports'))
+ var.get(u'node').put(u'typeAnnotation', var.get(u"this").callprop(u'flowParseTypeAnnotation'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'DeclareModuleExports'))
+ PyJs_anonymous_3088_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseDeclareModuleExports', PyJs_anonymous_3088_)
+ @Js
+ def PyJs_anonymous_3089_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'next')
+ var.get(u"this").callprop(u'flowParseTypeAlias', var.get(u'node'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'DeclareTypeAlias'))
+ PyJs_anonymous_3089_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseDeclareTypeAlias', PyJs_anonymous_3089_)
+ @Js
+ def PyJs_anonymous_3090_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'next')
+ var.get(u"this").callprop(u'flowParseInterfaceish', var.get(u'node'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'DeclareInterface'))
+ PyJs_anonymous_3090_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseDeclareInterface', PyJs_anonymous_3090_)
+ @Js
+ def PyJs_anonymous_3091_(node, allowStatic, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments, u'allowStatic':allowStatic}, var)
+ var.registers([u'node', u'allowStatic'])
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'parseIdentifier'))
+ if var.get(u"this").callprop(u'isRelational', Js(u'<')):
+ var.get(u'node').put(u'typeParameters', var.get(u"this").callprop(u'flowParseTypeParameterDeclaration'))
+ else:
+ var.get(u'node').put(u'typeParameters', var.get(u"null"))
+ var.get(u'node').put(u'extends', Js([]))
+ var.get(u'node').put(u'mixins', Js([]))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'_extends')):
+ while 1:
+ var.get(u'node').get(u'extends').callprop(u'push', var.get(u"this").callprop(u'flowParseInterfaceExtends'))
+ if not var.get(u"this").callprop(u'eat', var.get(u'types').get(u'comma')):
+ break
+ if var.get(u"this").callprop(u'isContextual', Js(u'mixins')):
+ var.get(u"this").callprop(u'next')
+ while 1:
+ var.get(u'node').get(u'mixins').callprop(u'push', var.get(u"this").callprop(u'flowParseInterfaceExtends'))
+ if not var.get(u"this").callprop(u'eat', var.get(u'types').get(u'comma')):
+ break
+ var.get(u'node').put(u'body', var.get(u"this").callprop(u'flowParseObjectType', var.get(u'allowStatic')))
+ PyJs_anonymous_3091_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseInterfaceish', PyJs_anonymous_3091_)
+ @Js
+ def PyJs_anonymous_3092_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'flowParseQualifiedTypeIdentifier'))
+ if var.get(u"this").callprop(u'isRelational', Js(u'<')):
+ var.get(u'node').put(u'typeParameters', var.get(u"this").callprop(u'flowParseTypeParameterInstantiation'))
+ else:
+ var.get(u'node').put(u'typeParameters', var.get(u"null"))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'InterfaceExtends'))
+ PyJs_anonymous_3092_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseInterfaceExtends', PyJs_anonymous_3092_)
+ @Js
+ def PyJs_anonymous_3093_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u"this").callprop(u'flowParseInterfaceish', var.get(u'node'), Js(False))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'InterfaceDeclaration'))
+ PyJs_anonymous_3093_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseInterface', PyJs_anonymous_3093_)
+ @Js
+ def PyJs_anonymous_3094_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'parseIdentifier'))
+ if var.get(u"this").callprop(u'isRelational', Js(u'<')):
+ var.get(u'node').put(u'typeParameters', var.get(u"this").callprop(u'flowParseTypeParameterDeclaration'))
+ else:
+ var.get(u'node').put(u'typeParameters', var.get(u"null"))
+ var.get(u'node').put(u'right', var.get(u"this").callprop(u'flowParseTypeInitialiser', var.get(u'types').get(u'eq'), var.get(u'true')))
+ var.get(u"this").callprop(u'semicolon')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'TypeAlias'))
+ PyJs_anonymous_3094_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseTypeAlias', PyJs_anonymous_3094_)
+ @Js
+ def PyJs_anonymous_3095_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'variance', u'ident'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.put(u'variance', var.get(u"this").callprop(u'flowParseVariance'))
+ var.put(u'ident', var.get(u"this").callprop(u'flowParseTypeAnnotatableIdentifier'))
+ var.get(u'node').put(u'name', var.get(u'ident').get(u'name'))
+ var.get(u'node').put(u'variance', var.get(u'variance'))
+ var.get(u'node').put(u'bound', var.get(u'ident').get(u'typeAnnotation'))
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'eq')):
+ var.get(u"this").callprop(u'eat', var.get(u'types').get(u'eq'))
+ var.get(u'node').put(u'default', var.get(u"this").callprop(u'flowParseType'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'TypeParameter'))
+ PyJs_anonymous_3095_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseTypeParameter', PyJs_anonymous_3095_)
+ @Js
+ def PyJs_anonymous_3096_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'oldInType'])
+ var.put(u'oldInType', var.get(u"this").get(u'state').get(u'inType'))
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u'node').put(u'params', Js([]))
+ var.get(u"this").get(u'state').put(u'inType', var.get(u'true'))
+ if (var.get(u"this").callprop(u'isRelational', Js(u'<')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'jsxTagStart'))):
+ var.get(u"this").callprop(u'next')
+ else:
+ var.get(u"this").callprop(u'unexpected')
+ while 1:
+ var.get(u'node').get(u'params').callprop(u'push', var.get(u"this").callprop(u'flowParseTypeParameter'))
+ if var.get(u"this").callprop(u'isRelational', Js(u'>')).neg():
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'))
+ if not var.get(u"this").callprop(u'isRelational', Js(u'>')).neg():
+ break
+ var.get(u"this").callprop(u'expectRelational', Js(u'>'))
+ var.get(u"this").get(u'state').put(u'inType', var.get(u'oldInType'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'TypeParameterDeclaration'))
+ PyJs_anonymous_3096_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseTypeParameterDeclaration', PyJs_anonymous_3096_)
+ @Js
+ def PyJs_anonymous_3097_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'oldInType'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.put(u'oldInType', var.get(u"this").get(u'state').get(u'inType'))
+ var.get(u'node').put(u'params', Js([]))
+ var.get(u"this").get(u'state').put(u'inType', var.get(u'true'))
+ var.get(u"this").callprop(u'expectRelational', Js(u'<'))
+ while var.get(u"this").callprop(u'isRelational', Js(u'>')).neg():
+ var.get(u'node').get(u'params').callprop(u'push', var.get(u"this").callprop(u'flowParseType'))
+ if var.get(u"this").callprop(u'isRelational', Js(u'>')).neg():
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'))
+ var.get(u"this").callprop(u'expectRelational', Js(u'>'))
+ var.get(u"this").get(u'state').put(u'inType', var.get(u'oldInType'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'TypeParameterInstantiation'))
+ PyJs_anonymous_3097_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseTypeParameterInstantiation', PyJs_anonymous_3097_)
+ @Js
+ def PyJs_anonymous_3098_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return (var.get(u"this").callprop(u'parseExprAtom') if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'num')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'string'))) else var.get(u"this").callprop(u'parseIdentifier', var.get(u'true')))
+ PyJs_anonymous_3098_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseObjectPropertyKey', PyJs_anonymous_3098_)
+ @Js
+ def PyJs_anonymous_3099_(node, isStatic, variance, this, arguments, var=var):
+ var = Scope({u'node':node, u'variance':variance, u'isStatic':isStatic, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'variance', u'isStatic'])
+ var.get(u'node').put(u'static', var.get(u'isStatic'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'bracketL'))
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'flowParseObjectPropertyKey'))
+ var.get(u'node').put(u'key', var.get(u"this").callprop(u'flowParseTypeInitialiser'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'bracketR'))
+ var.get(u'node').put(u'value', var.get(u"this").callprop(u'flowParseTypeInitialiser'))
+ var.get(u'node').put(u'variance', var.get(u'variance'))
+ var.get(u"this").callprop(u'flowObjectTypeSemicolon')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ObjectTypeIndexer'))
+ PyJs_anonymous_3099_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseObjectTypeIndexer', PyJs_anonymous_3099_)
+ @Js
+ def PyJs_anonymous_3100_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u'node').put(u'params', Js([]))
+ var.get(u'node').put(u'rest', var.get(u"null"))
+ var.get(u'node').put(u'typeParameters', var.get(u"null"))
+ if var.get(u"this").callprop(u'isRelational', Js(u'<')):
+ var.get(u'node').put(u'typeParameters', var.get(u"this").callprop(u'flowParseTypeParameterDeclaration'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenL'))
+ while var.get(u"this").callprop(u'match', var.get(u'types').get(u'name')):
+ var.get(u'node').get(u'params').callprop(u'push', var.get(u"this").callprop(u'flowParseFunctionTypeParam'))
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenR')).neg():
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'comma'))
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'ellipsis')):
+ var.get(u'node').put(u'rest', var.get(u"this").callprop(u'flowParseFunctionTypeParam'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'parenR'))
+ var.get(u'node').put(u'returnType', var.get(u"this").callprop(u'flowParseTypeInitialiser'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'FunctionTypeAnnotation'))
+ PyJs_anonymous_3100_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseObjectTypeMethodish', PyJs_anonymous_3100_)
+ @Js
+ def PyJs_anonymous_3101_(startPos, startLoc, isStatic, key, this, arguments, var=var):
+ var = Scope({u'isStatic':isStatic, u'startLoc':startLoc, u'key':key, u'this':this, u'startPos':startPos, u'arguments':arguments}, var)
+ var.registers([u'node', u'key', u'startPos', u'isStatic', u'startLoc'])
+ var.put(u'node', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'node').put(u'value', var.get(u"this").callprop(u'flowParseObjectTypeMethodish', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc'))))
+ var.get(u'node').put(u'static', var.get(u'isStatic'))
+ var.get(u'node').put(u'key', var.get(u'key'))
+ var.get(u'node').put(u'optional', Js(False))
+ var.get(u"this").callprop(u'flowObjectTypeSemicolon')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ObjectTypeProperty'))
+ PyJs_anonymous_3101_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseObjectTypeMethod', PyJs_anonymous_3101_)
+ @Js
+ def PyJs_anonymous_3102_(node, isStatic, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'isStatic':isStatic, u'arguments':arguments}, var)
+ var.registers([u'node', u'valueNode', u'isStatic'])
+ var.put(u'valueNode', var.get(u"this").callprop(u'startNode'))
+ var.get(u'node').put(u'static', var.get(u'isStatic'))
+ var.get(u'node').put(u'value', var.get(u"this").callprop(u'flowParseObjectTypeMethodish', var.get(u'valueNode')))
+ var.get(u"this").callprop(u'flowObjectTypeSemicolon')
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ObjectTypeCallProperty'))
+ PyJs_anonymous_3102_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseObjectTypeCallProperty', PyJs_anonymous_3102_)
+ @Js
+ def PyJs_anonymous_3103_(allowStatic, allowExact, this, arguments, var=var):
+ var = Scope({u'this':this, u'allowExact':allowExact, u'arguments':arguments, u'allowStatic':allowStatic}, var)
+ var.registers([u'node', u'isStatic', u'nodeStart', u'variancePos', u'propertyKey', u'endDelim', u'oldInType', u'optional', u'startLoc', u'variance', u'startPos', u'exact', u'allowExact', u'allowStatic', u'out'])
+ var.put(u'oldInType', var.get(u"this").get(u'state').get(u'inType'))
+ var.get(u"this").get(u'state').put(u'inType', var.get(u'true'))
+ var.put(u'nodeStart', var.get(u"this").callprop(u'startNode'))
+ var.put(u'node', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'propertyKey', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'isStatic', Js(False))
+ var.get(u'nodeStart').put(u'callProperties', Js([]))
+ var.get(u'nodeStart').put(u'properties', Js([]))
+ var.get(u'nodeStart').put(u'indexers', Js([]))
+ var.put(u'endDelim', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'exact', PyJsComma(Js(0.0), Js(None)))
+ if (var.get(u'allowExact') and var.get(u"this").callprop(u'match', var.get(u'types').get(u'braceBarL'))):
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'braceBarL'))
+ var.put(u'endDelim', var.get(u'types').get(u'braceBarR'))
+ var.put(u'exact', var.get(u'true'))
+ else:
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'braceL'))
+ var.put(u'endDelim', var.get(u'types').get(u'braceR'))
+ var.put(u'exact', Js(False))
+ var.get(u'nodeStart').put(u'exact', var.get(u'exact'))
+ while var.get(u"this").callprop(u'match', var.get(u'endDelim')).neg():
+ var.put(u'optional', Js(False))
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ if ((var.get(u'allowStatic') and var.get(u"this").callprop(u'isContextual', Js(u'static'))) and PyJsStrictNeq(var.get(u"this").callprop(u'lookahead').get(u'type'),var.get(u'types').get(u'colon'))):
+ var.get(u"this").callprop(u'next')
+ var.put(u'isStatic', var.get(u'true'))
+ var.put(u'variancePos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'variance', var.get(u"this").callprop(u'flowParseVariance'))
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'bracketL')):
+ var.get(u'nodeStart').get(u'indexers').callprop(u'push', var.get(u"this").callprop(u'flowParseObjectTypeIndexer', var.get(u'node'), var.get(u'isStatic'), var.get(u'variance')))
+ else:
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL')) or var.get(u"this").callprop(u'isRelational', Js(u'<'))):
+ if var.get(u'variance'):
+ var.get(u"this").callprop(u'unexpected', var.get(u'variancePos'))
+ var.get(u'nodeStart').get(u'callProperties').callprop(u'push', var.get(u"this").callprop(u'flowParseObjectTypeCallProperty', var.get(u'node'), var.get(u'allowStatic')))
+ else:
+ var.put(u'propertyKey', var.get(u"this").callprop(u'flowParseObjectPropertyKey'))
+ if (var.get(u"this").callprop(u'isRelational', Js(u'<')) or var.get(u"this").callprop(u'match', var.get(u'types').get(u'parenL'))):
+ if var.get(u'variance'):
+ var.get(u"this").callprop(u'unexpected', var.get(u'variancePos'))
+ var.get(u'nodeStart').get(u'properties').callprop(u'push', var.get(u"this").callprop(u'flowParseObjectTypeMethod', var.get(u'startPos'), var.get(u'startLoc'), var.get(u'isStatic'), var.get(u'propertyKey')))
+ else:
+ if var.get(u"this").callprop(u'eat', var.get(u'types').get(u'question')):
+ var.put(u'optional', var.get(u'true'))
+ var.get(u'node').put(u'key', var.get(u'propertyKey'))
+ var.get(u'node').put(u'value', var.get(u"this").callprop(u'flowParseTypeInitialiser'))
+ var.get(u'node').put(u'optional', var.get(u'optional'))
+ var.get(u'node').put(u'static', var.get(u'isStatic'))
+ var.get(u'node').put(u'variance', var.get(u'variance'))
+ var.get(u"this").callprop(u'flowObjectTypeSemicolon')
+ var.get(u'nodeStart').get(u'properties').callprop(u'push', var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'ObjectTypeProperty')))
+ var.put(u'isStatic', Js(False))
+ var.get(u"this").callprop(u'expect', var.get(u'endDelim'))
+ var.put(u'out', var.get(u"this").callprop(u'finishNode', var.get(u'nodeStart'), Js(u'ObjectTypeAnnotation')))
+ var.get(u"this").get(u'state').put(u'inType', var.get(u'oldInType'))
+ return var.get(u'out')
+ PyJs_anonymous_3103_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseObjectType', PyJs_anonymous_3103_)
+ @Js
+ def PyJs_anonymous_3104_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if (((var.get(u"this").callprop(u'eat', var.get(u'types').get(u'semi')).neg() and var.get(u"this").callprop(u'eat', var.get(u'types').get(u'comma')).neg()) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'braceR')).neg()) and var.get(u"this").callprop(u'match', var.get(u'types').get(u'braceBarR')).neg()):
+ var.get(u"this").callprop(u'unexpected')
+ PyJs_anonymous_3104_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowObjectTypeSemicolon', PyJs_anonymous_3104_)
+ @Js
+ def PyJs_anonymous_3105_(startPos, startLoc, id, this, arguments, var=var):
+ var = Scope({u'this':this, u'startPos':startPos, u'id':id, u'startLoc':startLoc, u'arguments':arguments}, var)
+ var.registers([u'node', u'startPos', u'node2', u'id', u'startLoc'])
+ var.put(u'startPos', (var.get(u'startPos') or var.get(u"this").get(u'state').get(u'start')))
+ var.put(u'startLoc', (var.get(u'startLoc') or var.get(u"this").get(u'state').get(u'startLoc')))
+ var.put(u'node', (var.get(u'id') or var.get(u"this").callprop(u'parseIdentifier')))
+ while var.get(u"this").callprop(u'eat', var.get(u'types').get(u'dot')):
+ var.put(u'node2', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'node2').put(u'qualification', var.get(u'node'))
+ var.get(u'node2').put(u'id', var.get(u"this").callprop(u'parseIdentifier'))
+ var.put(u'node', var.get(u"this").callprop(u'finishNode', var.get(u'node2'), Js(u'QualifiedTypeIdentifier')))
+ return var.get(u'node')
+ PyJs_anonymous_3105_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseQualifiedTypeIdentifier', PyJs_anonymous_3105_)
+ @Js
+ def PyJs_anonymous_3106_(startPos, startLoc, id, this, arguments, var=var):
+ var = Scope({u'this':this, u'startPos':startPos, u'id':id, u'startLoc':startLoc, u'arguments':arguments}, var)
+ var.registers([u'node', u'startPos', u'id', u'startLoc'])
+ var.put(u'node', var.get(u"this").callprop(u'startNodeAt', var.get(u'startPos'), var.get(u'startLoc')))
+ var.get(u'node').put(u'typeParameters', var.get(u"null"))
+ var.get(u'node').put(u'id', var.get(u"this").callprop(u'flowParseQualifiedTypeIdentifier', var.get(u'startPos'), var.get(u'startLoc'), var.get(u'id')))
+ if var.get(u"this").callprop(u'isRelational', Js(u'<')):
+ var.get(u'node').put(u'typeParameters', var.get(u"this").callprop(u'flowParseTypeParameterInstantiation'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'GenericTypeAnnotation'))
+ PyJs_anonymous_3106_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseGenericType', PyJs_anonymous_3106_)
+ @Js
+ def PyJs_anonymous_3107_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'_typeof'))
+ var.get(u'node').put(u'argument', var.get(u"this").callprop(u'flowParsePrimaryType'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'TypeofTypeAnnotation'))
+ PyJs_anonymous_3107_._set_name(u'anonymous')
+ var.get(u'pp$7').put(u'flowParseTypeofType', PyJs_anonymous_3107_)
+ @Js
+ def PyJs_anonymous_3108_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.put(u'node', var.get(u"this").callprop(u'startNode'))
+ var.get(u'node').put(u'types', Js([]))
+ var.get(u"this").callprop(u'expect', var.get(u'types').get(u'bracketL'))
+ while ((var.get(u"this").get(u'state').get(u'pos')'),u'nbsp':Js(u'\xa0'),u'iexcl':Js(u'\xa1'),u'cent':Js(u'\xa2'),u'pound':Js(u'\xa3'),u'curren':Js(u'\xa4'),u'yen':Js(u'\xa5'),u'brvbar':Js(u'\xa6'),u'sect':Js(u'\xa7'),u'uml':Js(u'\xa8'),u'copy':Js(u'\xa9'),u'ordf':Js(u'\xaa'),u'laquo':Js(u'\xab'),u'not':Js(u'\xac'),u'shy':Js(u'\xad'),u'reg':Js(u'\xae'),u'macr':Js(u'\xaf'),u'deg':Js(u'\xb0'),u'plusmn':Js(u'\xb1'),u'sup2':Js(u'\xb2'),u'sup3':Js(u'\xb3'),u'acute':Js(u'\xb4'),u'micro':Js(u'\xb5'),u'para':Js(u'\xb6'),u'middot':Js(u'\xb7'),u'cedil':Js(u'\xb8'),u'sup1':Js(u'\xb9'),u'ordm':Js(u'\xba'),u'raquo':Js(u'\xbb'),u'frac14':Js(u'\xbc'),u'frac12':Js(u'\xbd'),u'frac34':Js(u'\xbe'),u'iquest':Js(u'\xbf'),u'Agrave':Js(u'\xc0'),u'Aacute':Js(u'\xc1'),u'Acirc':Js(u'\xc2'),u'Atilde':Js(u'\xc3'),u'Auml':Js(u'\xc4'),u'Aring':Js(u'\xc5'),u'AElig':Js(u'\xc6'),u'Ccedil':Js(u'\xc7'),u'Egrave':Js(u'\xc8'),u'Eacute':Js(u'\xc9'),u'Ecirc':Js(u'\xca'),u'Euml':Js(u'\xcb'),u'Igrave':Js(u'\xcc'),u'Iacute':Js(u'\xcd'),u'Icirc':Js(u'\xce'),u'Iuml':Js(u'\xcf'),u'ETH':Js(u'\xd0'),u'Ntilde':Js(u'\xd1'),u'Ograve':Js(u'\xd2'),u'Oacute':Js(u'\xd3'),u'Ocirc':Js(u'\xd4'),u'Otilde':Js(u'\xd5'),u'Ouml':Js(u'\xd6'),u'times':Js(u'\xd7'),u'Oslash':Js(u'\xd8'),u'Ugrave':Js(u'\xd9'),u'Uacute':Js(u'\xda'),u'Ucirc':Js(u'\xdb'),u'Uuml':Js(u'\xdc'),u'Yacute':Js(u'\xdd'),u'THORN':Js(u'\xde'),u'szlig':Js(u'\xdf'),u'agrave':Js(u'\xe0'),u'aacute':Js(u'\xe1'),u'acirc':Js(u'\xe2'),u'atilde':Js(u'\xe3'),u'auml':Js(u'\xe4'),u'aring':Js(u'\xe5'),u'aelig':Js(u'\xe6'),u'ccedil':Js(u'\xe7'),u'egrave':Js(u'\xe8'),u'eacute':Js(u'\xe9'),u'ecirc':Js(u'\xea'),u'euml':Js(u'\xeb'),u'igrave':Js(u'\xec'),u'iacute':Js(u'\xed'),u'icirc':Js(u'\xee'),u'iuml':Js(u'\xef'),u'eth':Js(u'\xf0'),u'ntilde':Js(u'\xf1'),u'ograve':Js(u'\xf2'),u'oacute':Js(u'\xf3'),u'ocirc':Js(u'\xf4'),u'otilde':Js(u'\xf5'),u'ouml':Js(u'\xf6'),u'divide':Js(u'\xf7'),u'oslash':Js(u'\xf8'),u'ugrave':Js(u'\xf9'),u'uacute':Js(u'\xfa'),u'ucirc':Js(u'\xfb'),u'uuml':Js(u'\xfc'),u'yacute':Js(u'\xfd'),u'thorn':Js(u'\xfe'),u'yuml':Js(u'\xff'),u'OElig':Js(u'\u0152'),u'oelig':Js(u'\u0153'),u'Scaron':Js(u'\u0160'),u'scaron':Js(u'\u0161'),u'Yuml':Js(u'\u0178'),u'fnof':Js(u'\u0192'),u'circ':Js(u'\u02c6'),u'tilde':Js(u'\u02dc'),u'Alpha':Js(u'\u0391'),u'Beta':Js(u'\u0392'),u'Gamma':Js(u'\u0393'),u'Delta':Js(u'\u0394'),u'Epsilon':Js(u'\u0395'),u'Zeta':Js(u'\u0396'),u'Eta':Js(u'\u0397'),u'Theta':Js(u'\u0398'),u'Iota':Js(u'\u0399'),u'Kappa':Js(u'\u039a'),u'Lambda':Js(u'\u039b'),u'Mu':Js(u'\u039c'),u'Nu':Js(u'\u039d'),u'Xi':Js(u'\u039e'),u'Omicron':Js(u'\u039f'),u'Pi':Js(u'\u03a0'),u'Rho':Js(u'\u03a1'),u'Sigma':Js(u'\u03a3'),u'Tau':Js(u'\u03a4'),u'Upsilon':Js(u'\u03a5'),u'Phi':Js(u'\u03a6'),u'Chi':Js(u'\u03a7'),u'Psi':Js(u'\u03a8'),u'Omega':Js(u'\u03a9'),u'alpha':Js(u'\u03b1'),u'beta':Js(u'\u03b2'),u'gamma':Js(u'\u03b3'),u'delta':Js(u'\u03b4'),u'epsilon':Js(u'\u03b5'),u'zeta':Js(u'\u03b6'),u'eta':Js(u'\u03b7'),u'theta':Js(u'\u03b8'),u'iota':Js(u'\u03b9'),u'kappa':Js(u'\u03ba'),u'lambda':Js(u'\u03bb'),u'mu':Js(u'\u03bc'),u'nu':Js(u'\u03bd'),u'xi':Js(u'\u03be'),u'omicron':Js(u'\u03bf'),u'pi':Js(u'\u03c0'),u'rho':Js(u'\u03c1'),u'sigmaf':Js(u'\u03c2'),u'sigma':Js(u'\u03c3'),u'tau':Js(u'\u03c4'),u'upsilon':Js(u'\u03c5'),u'phi':Js(u'\u03c6'),u'chi':Js(u'\u03c7'),u'psi':Js(u'\u03c8'),u'omega':Js(u'\u03c9'),u'thetasym':Js(u'\u03d1'),u'upsih':Js(u'\u03d2'),u'piv':Js(u'\u03d6'),u'ensp':Js(u'\u2002'),u'emsp':Js(u'\u2003'),u'thinsp':Js(u'\u2009'),u'zwnj':Js(u'\u200c'),u'zwj':Js(u'\u200d'),u'lrm':Js(u'\u200e'),u'rlm':Js(u'\u200f'),u'ndash':Js(u'\u2013'),u'mdash':Js(u'\u2014'),u'lsquo':Js(u'\u2018'),u'rsquo':Js(u'\u2019'),u'sbquo':Js(u'\u201a'),u'ldquo':Js(u'\u201c'),u'rdquo':Js(u'\u201d'),u'bdquo':Js(u'\u201e'),u'dagger':Js(u'\u2020'),u'Dagger':Js(u'\u2021'),u'bull':Js(u'\u2022'),u'hellip':Js(u'\u2026'),u'permil':Js(u'\u2030'),u'prime':Js(u'\u2032'),u'Prime':Js(u'\u2033'),u'lsaquo':Js(u'\u2039'),u'rsaquo':Js(u'\u203a'),u'oline':Js(u'\u203e'),u'frasl':Js(u'\u2044'),u'euro':Js(u'\u20ac'),u'image':Js(u'\u2111'),u'weierp':Js(u'\u2118'),u'real':Js(u'\u211c'),u'trade':Js(u'\u2122'),u'alefsym':Js(u'\u2135'),u'larr':Js(u'\u2190'),u'uarr':Js(u'\u2191'),u'rarr':Js(u'\u2192'),u'darr':Js(u'\u2193'),u'harr':Js(u'\u2194'),u'crarr':Js(u'\u21b5'),u'lArr':Js(u'\u21d0'),u'uArr':Js(u'\u21d1'),u'rArr':Js(u'\u21d2'),u'dArr':Js(u'\u21d3'),u'hArr':Js(u'\u21d4'),u'forall':Js(u'\u2200'),u'part':Js(u'\u2202'),u'exist':Js(u'\u2203'),u'empty':Js(u'\u2205'),u'nabla':Js(u'\u2207'),u'isin':Js(u'\u2208'),u'notin':Js(u'\u2209'),u'ni':Js(u'\u220b'),u'prod':Js(u'\u220f'),u'sum':Js(u'\u2211'),u'minus':Js(u'\u2212'),u'lowast':Js(u'\u2217'),u'radic':Js(u'\u221a'),u'prop':Js(u'\u221d'),u'infin':Js(u'\u221e'),u'ang':Js(u'\u2220'),u'and':Js(u'\u2227'),u'or':Js(u'\u2228'),u'cap':Js(u'\u2229'),u'cup':Js(u'\u222a'),u'int':Js(u'\u222b'),u'there4':Js(u'\u2234'),u'sim':Js(u'\u223c'),u'cong':Js(u'\u2245'),u'asymp':Js(u'\u2248'),u'ne':Js(u'\u2260'),u'equiv':Js(u'\u2261'),u'le':Js(u'\u2264'),u'ge':Js(u'\u2265'),u'sub':Js(u'\u2282'),u'sup':Js(u'\u2283'),u'nsub':Js(u'\u2284'),u'sube':Js(u'\u2286'),u'supe':Js(u'\u2287'),u'oplus':Js(u'\u2295'),u'otimes':Js(u'\u2297'),u'perp':Js(u'\u22a5'),u'sdot':Js(u'\u22c5'),u'lceil':Js(u'\u2308'),u'rceil':Js(u'\u2309'),u'lfloor':Js(u'\u230a'),u'rfloor':Js(u'\u230b'),u'lang':Js(u'\u2329'),u'rang':Js(u'\u232a'),u'loz':Js(u'\u25ca'),u'spades':Js(u'\u2660'),u'clubs':Js(u'\u2663'),u'hearts':Js(u'\u2665'),u'diams':Js(u'\u2666')})
+ var.put(u'XHTMLEntities', PyJs_Object_3194_)
+ var.put(u'HEX_NUMBER', JsRegExp(u'/^[\\da-fA-F]+$/'))
+ var.put(u'DECIMAL_NUMBER', JsRegExp(u'/^\\d+$/'))
+ var.get(u'types$1').put(u'j_oTag', var.get(u'TokContext').create(Js(u'...'), var.get(u'true'), var.get(u'true')))
+ var.get(u'types').put(u'jsxName', var.get(u'TokenType').create(Js(u'jsxName')))
+ PyJs_Object_3195_ = Js({u'beforeExpr':var.get(u'true')})
+ var.get(u'types').put(u'jsxText', var.get(u'TokenType').create(Js(u'jsxText'), PyJs_Object_3195_))
+ PyJs_Object_3196_ = Js({u'startsExpr':var.get(u'true')})
+ var.get(u'types').put(u'jsxTagStart', var.get(u'TokenType').create(Js(u'jsxTagStart'), PyJs_Object_3196_))
+ var.get(u'types').put(u'jsxTagEnd', var.get(u'TokenType').create(Js(u'jsxTagEnd')))
+ @Js
+ def PyJs_anonymous_3197_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', var.get(u'types$1').get(u'j_expr'))
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', var.get(u'types$1').get(u'j_oTag'))
+ var.get(u"this").get(u'state').put(u'exprAllowed', Js(False))
+ PyJs_anonymous_3197_._set_name(u'anonymous')
+ var.get(u'types').get(u'jsxTagStart').put(u'updateContext', PyJs_anonymous_3197_)
+ @Js
+ def PyJs_anonymous_3198_(prevType, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'prevType':prevType}, var)
+ var.registers([u'prevType', u'out'])
+ var.put(u'out', var.get(u"this").get(u'state').get(u'context').callprop(u'pop'))
+ if ((PyJsStrictEq(var.get(u'out'),var.get(u'types$1').get(u'j_oTag')) and PyJsStrictEq(var.get(u'prevType'),var.get(u'types').get(u'slash'))) or PyJsStrictEq(var.get(u'out'),var.get(u'types$1').get(u'j_cTag'))):
+ var.get(u"this").get(u'state').get(u'context').callprop(u'pop')
+ var.get(u"this").get(u'state').put(u'exprAllowed', PyJsStrictEq(var.get(u"this").callprop(u'curContext'),var.get(u'types$1').get(u'j_expr')))
+ else:
+ var.get(u"this").get(u'state').put(u'exprAllowed', var.get(u'true'))
+ PyJs_anonymous_3198_._set_name(u'anonymous')
+ var.get(u'types').get(u'jsxTagEnd').put(u'updateContext', PyJs_anonymous_3198_)
+ var.put(u'pp$8', var.get(u'Parser').get(u'prototype'))
+ @Js
+ def PyJs_anonymous_3199_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'ch', u'chunkStart', u'out'])
+ var.put(u'out', Js(u''))
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ #for JS loop
+
+ while 1:
+ if (var.get(u"this").get(u'state').get(u'pos')>=var.get(u"this").get(u'input').get(u'length')):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u'Unterminated JSX contents'))
+ var.put(u'ch', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'ch'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(60.0)):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(123.0)):
+ SWITCHED = True
+ if PyJsStrictEq(var.get(u"this").get(u'state').get(u'pos'),var.get(u"this").get(u'state').get(u'start')):
+ if (PyJsStrictEq(var.get(u'ch'),Js(60.0)) and var.get(u"this").get(u'state').get(u'exprAllowed')):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'jsxTagStart'))
+ return var.get(u"this").callprop(u'getTokenFromCode', var.get(u'ch'))
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), var.get(u"this").get(u'state').get(u'pos')), u'+')
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'jsxText'), var.get(u'out'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(38.0)):
+ SWITCHED = True
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), var.get(u"this").get(u'state').get(u'pos')), u'+')
+ var.put(u'out', var.get(u"this").callprop(u'jsxReadEntity'), u'+')
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ break
+ if True:
+ SWITCHED = True
+ if var.get(u'isNewLine')(var.get(u'ch')):
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), var.get(u"this").get(u'state').get(u'pos')), u'+')
+ var.put(u'out', var.get(u"this").callprop(u'jsxReadNewLine', var.get(u'true')), u'+')
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ else:
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ SWITCHED = True
+ break
+
+ PyJs_anonymous_3199_._set_name(u'anonymous')
+ var.get(u'pp$8').put(u'jsxReadToken', PyJs_anonymous_3199_)
+ @Js
+ def PyJs_anonymous_3200_(normalizeCRLF, this, arguments, var=var):
+ var = Scope({u'this':this, u'normalizeCRLF':normalizeCRLF, u'arguments':arguments}, var)
+ var.registers([u'ch', u'normalizeCRLF', u'out'])
+ var.put(u'ch', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')))
+ var.put(u'out', PyJsComma(Js(0.0), Js(None)))
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ if (PyJsStrictEq(var.get(u'ch'),Js(13.0)) and PyJsStrictEq(var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')),Js(10.0))):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ var.put(u'out', (Js(u'\n') if var.get(u'normalizeCRLF') else Js(u'\r\n')))
+ else:
+ var.put(u'out', var.get(u'String').callprop(u'fromCharCode', var.get(u'ch')))
+ var.get(u"this").get(u'state').put(u'curLine',Js(var.get(u"this").get(u'state').get(u'curLine').to_number())+Js(1))
+ var.get(u"this").get(u'state').put(u'lineStart', var.get(u"this").get(u'state').get(u'pos'))
+ return var.get(u'out')
+ PyJs_anonymous_3200_._set_name(u'anonymous')
+ var.get(u'pp$8').put(u'jsxReadNewLine', PyJs_anonymous_3200_)
+ @Js
+ def PyJs_anonymous_3201_(quote, this, arguments, var=var):
+ var = Scope({u'this':this, u'quote':quote, u'arguments':arguments}, var)
+ var.registers([u'ch', u'quote', u'chunkStart', u'out'])
+ var.put(u'out', Js(u''))
+ var.put(u'chunkStart', var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1)))
+ #for JS loop
+
+ while 1:
+ if (var.get(u"this").get(u'state').get(u'pos')>=var.get(u"this").get(u'input').get(u'length')):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u'Unterminated string constant'))
+ var.put(u'ch', var.get(u"this").get(u'input').callprop(u'charCodeAt', var.get(u"this").get(u'state').get(u'pos')))
+ if PyJsStrictEq(var.get(u'ch'),var.get(u'quote')):
+ break
+ if PyJsStrictEq(var.get(u'ch'),Js(38.0)):
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), var.get(u"this").get(u'state').get(u'pos')), u'+')
+ var.put(u'out', var.get(u"this").callprop(u'jsxReadEntity'), u'+')
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ else:
+ if var.get(u'isNewLine')(var.get(u'ch')):
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), var.get(u"this").get(u'state').get(u'pos')), u'+')
+ var.put(u'out', var.get(u"this").callprop(u'jsxReadNewLine', Js(False)), u'+')
+ var.put(u'chunkStart', var.get(u"this").get(u'state').get(u'pos'))
+ else:
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+
+ var.put(u'out', var.get(u"this").get(u'input').callprop(u'slice', var.get(u'chunkStart'), (var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))-Js(1))), u'+')
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'string'), var.get(u'out'))
+ PyJs_anonymous_3201_._set_name(u'anonymous')
+ var.get(u'pp$8').put(u'jsxReadString', PyJs_anonymous_3201_)
+ @Js
+ def PyJs_anonymous_3202_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'count', u'startPos', u'ch', u'str', u'entity'])
+ var.put(u'str', Js(u''))
+ var.put(u'count', Js(0.0))
+ var.put(u'entity', PyJsComma(Js(0.0), Js(None)))
+ var.put(u'ch', var.get(u"this").get(u'input').get(var.get(u"this").get(u'state').get(u'pos')))
+ var.put(u'startPos', var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1)))
+ while ((var.get(u"this").get(u'state').get(u'pos')')))
+ var.get(u'node').put(u'openingElement', var.get(u'openingElement'))
+ var.get(u'node').put(u'closingElement', var.get(u'closingElement'))
+ var.get(u'node').put(u'children', var.get(u'children'))
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'relational')) and PyJsStrictEq(var.get(u"this").get(u'state').get(u'value'),Js(u'<'))):
+ var.get(u"this").callprop(u'raise', var.get(u"this").get(u'state').get(u'start'), Js(u'Adjacent JSX elements must be wrapped in an enclosing tag'))
+ return var.get(u"this").callprop(u'finishNode', var.get(u'node'), Js(u'JSXElement'))
+ PyJs_anonymous_3214_._set_name(u'anonymous')
+ var.get(u'pp$8').put(u'jsxParseElementAt', PyJs_anonymous_3214_)
+ @Js
+ def PyJs_anonymous_3215_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'startPos', u'startLoc'])
+ var.put(u'startPos', var.get(u"this").get(u'state').get(u'start'))
+ var.put(u'startLoc', var.get(u"this").get(u'state').get(u'startLoc'))
+ var.get(u"this").callprop(u'next')
+ return var.get(u"this").callprop(u'jsxParseElementAt', var.get(u'startPos'), var.get(u'startLoc'))
+ PyJs_anonymous_3215_._set_name(u'anonymous')
+ var.get(u'pp$8').put(u'jsxParseElement', PyJs_anonymous_3215_)
+ @Js
+ def PyJs_anonymous_3216_(instance, this, arguments, var=var):
+ var = Scope({u'this':this, u'instance':instance, u'arguments':arguments}, var)
+ var.registers([u'instance'])
+ @Js
+ def PyJs_anonymous_3217_(inner, this, arguments, var=var):
+ var = Scope({u'this':this, u'inner':inner, u'arguments':arguments}, var)
+ var.registers([u'inner'])
+ @Js
+ def PyJs_anonymous_3218_(refShortHandDefaultPos, this, arguments, var=var):
+ var = Scope({u'this':this, u'refShortHandDefaultPos':refShortHandDefaultPos, u'arguments':arguments}, var)
+ var.registers([u'node', u'refShortHandDefaultPos'])
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'jsxText')):
+ var.put(u'node', var.get(u"this").callprop(u'parseLiteral', var.get(u"this").get(u'state').get(u'value'), Js(u'JSXText')))
+ var.get(u'node').put(u'extra', var.get(u"null"))
+ return var.get(u'node')
+ else:
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'jsxTagStart')):
+ return var.get(u"this").callprop(u'jsxParseElement')
+ else:
+ return var.get(u'inner').callprop(u'call', var.get(u"this"), var.get(u'refShortHandDefaultPos'))
+ PyJs_anonymous_3218_._set_name(u'anonymous')
+ return PyJs_anonymous_3218_
+ PyJs_anonymous_3217_._set_name(u'anonymous')
+ var.get(u'instance').callprop(u'extend', Js(u'parseExprAtom'), PyJs_anonymous_3217_)
+ @Js
+ def PyJs_anonymous_3219_(inner, this, arguments, var=var):
+ var = Scope({u'this':this, u'inner':inner, u'arguments':arguments}, var)
+ var.registers([u'inner'])
+ @Js
+ def PyJs_anonymous_3220_(code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'arguments':arguments}, var)
+ var.registers([u'code', u'context'])
+ var.put(u'context', var.get(u"this").callprop(u'curContext'))
+ if PyJsStrictEq(var.get(u'context'),var.get(u'types$1').get(u'j_expr')):
+ return var.get(u"this").callprop(u'jsxReadToken')
+ if (PyJsStrictEq(var.get(u'context'),var.get(u'types$1').get(u'j_oTag')) or PyJsStrictEq(var.get(u'context'),var.get(u'types$1').get(u'j_cTag'))):
+ if var.get(u'isIdentifierStart')(var.get(u'code')):
+ return var.get(u"this").callprop(u'jsxReadWord')
+ if PyJsStrictEq(var.get(u'code'),Js(62.0)):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'jsxTagEnd'))
+ if ((PyJsStrictEq(var.get(u'code'),Js(34.0)) or PyJsStrictEq(var.get(u'code'),Js(39.0))) and PyJsStrictEq(var.get(u'context'),var.get(u'types$1').get(u'j_oTag'))):
+ return var.get(u"this").callprop(u'jsxReadString', var.get(u'code'))
+ if (PyJsStrictEq(var.get(u'code'),Js(60.0)) and var.get(u"this").get(u'state').get(u'exprAllowed')):
+ var.get(u"this").get(u'state').put(u'pos',Js(var.get(u"this").get(u'state').get(u'pos').to_number())+Js(1))
+ return var.get(u"this").callprop(u'finishToken', var.get(u'types').get(u'jsxTagStart'))
+ return var.get(u'inner').callprop(u'call', var.get(u"this"), var.get(u'code'))
+ PyJs_anonymous_3220_._set_name(u'anonymous')
+ return PyJs_anonymous_3220_
+ PyJs_anonymous_3219_._set_name(u'anonymous')
+ var.get(u'instance').callprop(u'extend', Js(u'readToken'), PyJs_anonymous_3219_)
+ @Js
+ def PyJs_anonymous_3221_(inner, this, arguments, var=var):
+ var = Scope({u'this':this, u'inner':inner, u'arguments':arguments}, var)
+ var.registers([u'inner'])
+ @Js
+ def PyJs_anonymous_3222_(prevType, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'prevType':prevType}, var)
+ var.registers([u'curContext', u'prevType'])
+ if var.get(u"this").callprop(u'match', var.get(u'types').get(u'braceL')):
+ var.put(u'curContext', var.get(u"this").callprop(u'curContext'))
+ if PyJsStrictEq(var.get(u'curContext'),var.get(u'types$1').get(u'j_oTag')):
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', var.get(u'types$1').get(u'braceExpression'))
+ else:
+ if PyJsStrictEq(var.get(u'curContext'),var.get(u'types$1').get(u'j_expr')):
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', var.get(u'types$1').get(u'templateQuasi'))
+ else:
+ var.get(u'inner').callprop(u'call', var.get(u"this"), var.get(u'prevType'))
+ var.get(u"this").get(u'state').put(u'exprAllowed', var.get(u'true'))
+ else:
+ if (var.get(u"this").callprop(u'match', var.get(u'types').get(u'slash')) and PyJsStrictEq(var.get(u'prevType'),var.get(u'types').get(u'jsxTagStart'))):
+ var.get(u"this").get(u'state').get(u'context').put(u'length', Js(2.0), u'-')
+ var.get(u"this").get(u'state').get(u'context').callprop(u'push', var.get(u'types$1').get(u'j_cTag'))
+ var.get(u"this").get(u'state').put(u'exprAllowed', Js(False))
+ else:
+ return var.get(u'inner').callprop(u'call', var.get(u"this"), var.get(u'prevType'))
+ PyJs_anonymous_3222_._set_name(u'anonymous')
+ return PyJs_anonymous_3222_
+ PyJs_anonymous_3221_._set_name(u'anonymous')
+ var.get(u'instance').callprop(u'extend', Js(u'updateContext'), PyJs_anonymous_3221_)
+ PyJs_anonymous_3216_._set_name(u'anonymous')
+ var.put(u'jsxPlugin', PyJs_anonymous_3216_)
+ var.get(u'plugins').put(u'flow', var.get(u'flowPlugin'))
+ var.get(u'plugins').put(u'jsx', var.get(u'jsxPlugin'))
+ pass
+ var.get(u'exports').put(u'parse', var.get(u'parse$1'))
+ var.get(u'exports').put(u'tokTypes', var.get(u'types'))
+PyJs_anonymous_2842_._set_name(u'anonymous')
+PyJs_Object_3223_ = Js({})
+@Js
+def PyJs_anonymous_3224_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'maybeMatch', u'require', u'module', u'range', u'balanced'])
+ @Js
+ def PyJsHoisted_balanced_(a, b, str, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'b':b, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'a', u'r', u'b', u'str'])
+ if var.get(u'a').instanceof(var.get(u'RegExp')):
+ var.put(u'a', var.get(u'maybeMatch')(var.get(u'a'), var.get(u'str')))
+ if var.get(u'b').instanceof(var.get(u'RegExp')):
+ var.put(u'b', var.get(u'maybeMatch')(var.get(u'b'), var.get(u'str')))
+ var.put(u'r', var.get(u'range')(var.get(u'a'), var.get(u'b'), var.get(u'str')))
+ PyJs_Object_3225_ = Js({u'start':var.get(u'r').get(u'0'),u'end':var.get(u'r').get(u'1'),u'pre':var.get(u'str').callprop(u'slice', Js(0.0), var.get(u'r').get(u'0')),u'body':var.get(u'str').callprop(u'slice', (var.get(u'r').get(u'0')+var.get(u'a').get(u'length')), var.get(u'r').get(u'1')),u'post':var.get(u'str').callprop(u'slice', (var.get(u'r').get(u'1')+var.get(u'b').get(u'length')))})
+ return (var.get(u'r') and PyJs_Object_3225_)
+ PyJsHoisted_balanced_.func_name = u'balanced'
+ var.put(u'balanced', PyJsHoisted_balanced_)
+ @Js
+ def PyJsHoisted_range_(a, b, str, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'b':b, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'a', u'right', u'ai', u'beg', u'bi', u'i', u'b', u'result', u'str', u'begs', u'left'])
+ pass
+ var.put(u'ai', var.get(u'str').callprop(u'indexOf', var.get(u'a')))
+ var.put(u'bi', var.get(u'str').callprop(u'indexOf', var.get(u'b'), (var.get(u'ai')+Js(1.0))))
+ var.put(u'i', var.get(u'ai'))
+ if ((var.get(u'ai')>=Js(0.0)) and (var.get(u'bi')>Js(0.0))):
+ var.put(u'begs', Js([]))
+ var.put(u'left', var.get(u'str').get(u'length'))
+ while ((var.get(u'i')>=Js(0.0)) and var.get(u'result').neg()):
+ if (var.get(u'i')==var.get(u'ai')):
+ var.get(u'begs').callprop(u'push', var.get(u'i'))
+ var.put(u'ai', var.get(u'str').callprop(u'indexOf', var.get(u'a'), (var.get(u'i')+Js(1.0))))
+ else:
+ if (var.get(u'begs').get(u'length')==Js(1.0)):
+ var.put(u'result', Js([var.get(u'begs').callprop(u'pop'), var.get(u'bi')]))
+ else:
+ var.put(u'beg', var.get(u'begs').callprop(u'pop'))
+ if (var.get(u'beg')=Js(0.0))) else var.get(u'bi')))
+ if var.get(u'begs').get(u'length'):
+ var.put(u'result', Js([var.get(u'left'), var.get(u'right')]))
+ return var.get(u'result')
+ PyJsHoisted_range_.func_name = u'range'
+ var.put(u'range', PyJsHoisted_range_)
+ @Js
+ def PyJsHoisted_maybeMatch_(reg, str, this, arguments, var=var):
+ var = Scope({u'this':this, u'reg':reg, u'str':str, u'arguments':arguments}, var)
+ var.registers([u'm', u'reg', u'str'])
+ var.put(u'm', var.get(u'str').callprop(u'match', var.get(u'reg')))
+ return (var.get(u'm').get(u'0') if var.get(u'm') else var.get(u"null"))
+ PyJsHoisted_maybeMatch_.func_name = u'maybeMatch'
+ var.put(u'maybeMatch', PyJsHoisted_maybeMatch_)
+ var.get(u'module').put(u'exports', var.get(u'balanced'))
+ pass
+ pass
+ var.get(u'balanced').put(u'range', var.get(u'range'))
+ pass
+PyJs_anonymous_3224_._set_name(u'anonymous')
+PyJs_Object_3226_ = Js({})
+@Js
+def PyJs_anonymous_3227_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'escComma', u'escapeBraces', u'exports', u'escOpen', u'escPeriod', u'module', u'expandTop', u'escClose', u'isPadded', u'numeric', u'lte', u'unescapeBraces', u'concatMap', u'embrace', u'expand', u'escSlash', u'balanced', u'parseCommaParts', u'require', u'identity', u'gte'])
+ @Js
+ def PyJsHoisted_escapeBraces_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ return var.get(u'str').callprop(u'split', Js(u'\\\\')).callprop(u'join', var.get(u'escSlash')).callprop(u'split', Js(u'\\{')).callprop(u'join', var.get(u'escOpen')).callprop(u'split', Js(u'\\}')).callprop(u'join', var.get(u'escClose')).callprop(u'split', Js(u'\\,')).callprop(u'join', var.get(u'escComma')).callprop(u'split', Js(u'\\.')).callprop(u'join', var.get(u'escPeriod'))
+ PyJsHoisted_escapeBraces_.func_name = u'escapeBraces'
+ var.put(u'escapeBraces', PyJsHoisted_escapeBraces_)
+ @Js
+ def PyJsHoisted_lte_(i, y, this, arguments, var=var):
+ var = Scope({u'i':i, u'y':y, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'y'])
+ return (var.get(u'i')<=var.get(u'y'))
+ PyJsHoisted_lte_.func_name = u'lte'
+ var.put(u'lte', PyJsHoisted_lte_)
+ @Js
+ def PyJsHoisted_expandTop_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ if var.get(u'str').neg():
+ return Js([])
+ return var.get(u'expand')(var.get(u'escapeBraces')(var.get(u'str')), var.get(u'true')).callprop(u'map', var.get(u'unescapeBraces'))
+ PyJsHoisted_expandTop_.func_name = u'expandTop'
+ var.put(u'expandTop', PyJsHoisted_expandTop_)
+ @Js
+ def PyJsHoisted_numeric_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ return (var.get(u'parseInt')(var.get(u'str'), Js(10.0)) if (var.get(u'parseInt')(var.get(u'str'), Js(10.0))==var.get(u'str')) else var.get(u'str').callprop(u'charCodeAt', Js(0.0)))
+ PyJsHoisted_numeric_.func_name = u'numeric'
+ var.put(u'numeric', PyJsHoisted_numeric_)
+ @Js
+ def PyJsHoisted_unescapeBraces_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ return var.get(u'str').callprop(u'split', var.get(u'escSlash')).callprop(u'join', Js(u'\\')).callprop(u'split', var.get(u'escOpen')).callprop(u'join', Js(u'{')).callprop(u'split', var.get(u'escClose')).callprop(u'join', Js(u'}')).callprop(u'split', var.get(u'escComma')).callprop(u'join', Js(u',')).callprop(u'split', var.get(u'escPeriod')).callprop(u'join', Js(u'.'))
+ PyJsHoisted_unescapeBraces_.func_name = u'unescapeBraces'
+ var.put(u'unescapeBraces', PyJsHoisted_unescapeBraces_)
+ @Js
+ def PyJsHoisted_embrace_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ return ((Js(u'{')+var.get(u'str'))+Js(u'}'))
+ PyJsHoisted_embrace_.func_name = u'embrace'
+ var.put(u'embrace', PyJsHoisted_embrace_)
+ @Js
+ def PyJsHoisted_expand_(str, isTop, this, arguments, var=var):
+ var = Scope({u'this':this, u'isTop':isTop, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'pre', u'm', u'isTop', u'need', u'incr', u'width', u'pad', u'test', u'isAlphaSequence', u'isSequence', u'expansion', u'N', u'post', u'c', u'isOptions', u'reverse', u'i', u'k', u'j', u'expansions', u'n', u'str', u'isNumericSequence', u'y', u'x', u'z'])
+ var.put(u'expansions', Js([]))
+ var.put(u'm', var.get(u'balanced')(Js(u'{'), Js(u'}'), var.get(u'str')))
+ if (var.get(u'm').neg() or JsRegExp(u'/\\$$/').callprop(u'test', var.get(u'm').get(u'pre'))):
+ return Js([var.get(u'str')])
+ var.put(u'isNumericSequence', JsRegExp(u'/^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/').callprop(u'test', var.get(u'm').get(u'body')))
+ var.put(u'isAlphaSequence', JsRegExp(u'/^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/').callprop(u'test', var.get(u'm').get(u'body')))
+ var.put(u'isSequence', (var.get(u'isNumericSequence') or var.get(u'isAlphaSequence')))
+ var.put(u'isOptions', JsRegExp(u'/^(.*,)+(.+)?$/').callprop(u'test', var.get(u'm').get(u'body')))
+ if (var.get(u'isSequence').neg() and var.get(u'isOptions').neg()):
+ if var.get(u'm').get(u'post').callprop(u'match', JsRegExp(u'/,.*\\}/')):
+ var.put(u'str', ((((var.get(u'm').get(u'pre')+Js(u'{'))+var.get(u'm').get(u'body'))+var.get(u'escClose'))+var.get(u'm').get(u'post')))
+ return var.get(u'expand')(var.get(u'str'))
+ return Js([var.get(u'str')])
+ pass
+ if var.get(u'isSequence'):
+ var.put(u'n', var.get(u'm').get(u'body').callprop(u'split', JsRegExp(u'/\\.\\./')))
+ else:
+ var.put(u'n', var.get(u'parseCommaParts')(var.get(u'm').get(u'body')))
+ if PyJsStrictEq(var.get(u'n').get(u'length'),Js(1.0)):
+ var.put(u'n', var.get(u'expand')(var.get(u'n').get(u'0'), Js(False)).callprop(u'map', var.get(u'embrace')))
+ if PyJsStrictEq(var.get(u'n').get(u'length'),Js(1.0)):
+ var.put(u'post', (var.get(u'expand')(var.get(u'm').get(u'post'), Js(False)) if var.get(u'm').get(u'post').get(u'length') else Js([Js(u'')])))
+ @Js
+ def PyJs_anonymous_3228_(p, this, arguments, var=var):
+ var = Scope({u'this':this, u'p':p, u'arguments':arguments}, var)
+ var.registers([u'p'])
+ return ((var.get(u'm').get(u'pre')+var.get(u'n').get(u'0'))+var.get(u'p'))
+ PyJs_anonymous_3228_._set_name(u'anonymous')
+ return var.get(u'post').callprop(u'map', PyJs_anonymous_3228_)
+ var.put(u'pre', var.get(u'm').get(u'pre'))
+ var.put(u'post', (var.get(u'expand')(var.get(u'm').get(u'post'), Js(False)) if var.get(u'm').get(u'post').get(u'length') else Js([Js(u'')])))
+ pass
+ if var.get(u'isSequence'):
+ var.put(u'x', var.get(u'numeric')(var.get(u'n').get(u'0')))
+ var.put(u'y', var.get(u'numeric')(var.get(u'n').get(u'1')))
+ var.put(u'width', var.get(u'Math').callprop(u'max', var.get(u'n').get(u'0').get(u'length'), var.get(u'n').get(u'1').get(u'length')))
+ var.put(u'incr', (var.get(u'Math').callprop(u'abs', var.get(u'numeric')(var.get(u'n').get(u'2'))) if (var.get(u'n').get(u'length')==Js(3.0)) else Js(1.0)))
+ var.put(u'test', var.get(u'lte'))
+ var.put(u'reverse', (var.get(u'y')Js(0.0)):
+ var.put(u'z', var.get(u'Array').create((var.get(u'need')+Js(1.0))).callprop(u'join', Js(u'0')))
+ if (var.get(u'i')=var.get(u'y'))
+ PyJsHoisted_gte_.func_name = u'gte'
+ var.put(u'gte', PyJsHoisted_gte_)
+ var.put(u'concatMap', var.get(u'require')(Js(u'concat-map')))
+ var.put(u'balanced', var.get(u'require')(Js(u'balanced-match')))
+ var.get(u'module').put(u'exports', var.get(u'expandTop'))
+ var.put(u'escSlash', ((Js(u'\x00SLASH')+var.get(u'Math').callprop(u'random'))+Js(u'\x00')))
+ var.put(u'escOpen', ((Js(u'\x00OPEN')+var.get(u'Math').callprop(u'random'))+Js(u'\x00')))
+ var.put(u'escClose', ((Js(u'\x00CLOSE')+var.get(u'Math').callprop(u'random'))+Js(u'\x00')))
+ var.put(u'escComma', ((Js(u'\x00COMMA')+var.get(u'Math').callprop(u'random'))+Js(u'\x00')))
+ var.put(u'escPeriod', ((Js(u'\x00PERIOD')+var.get(u'Math').callprop(u'random'))+Js(u'\x00')))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+PyJs_anonymous_3227_._set_name(u'anonymous')
+PyJs_Object_3230_ = Js({u'balanced-match':Js(263.0),u'concat-map':Js(266.0)})
+@Js
+def PyJs_anonymous_3231_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_3232_(process, this, arguments, var=var):
+ var = Scope({u'process':process, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'styles', u'escapeStringRegexp', u'proto', u'process', u'applyStyle', u'hasAnsi', u'isSimpleWindowsTerm', u'Chalk', u'init', u'build', u'stripAnsi', u'ansiStyles', u'supportsColor', u'defineProps'])
+ @Js
+ def PyJsHoisted_Chalk_(options, this, arguments, var=var):
+ var = Scope({u'this':this, u'options':options, u'arguments':arguments}, var)
+ var.registers([u'options'])
+ var.get(u"this").put(u'enabled', (var.get(u'supportsColor') if (var.get(u'options').neg() or PyJsStrictEq(var.get(u'options').get(u'enabled'),var.get(u'undefined'))) else var.get(u'options').get(u'enabled')))
+ PyJsHoisted_Chalk_.func_name = u'Chalk'
+ var.put(u'Chalk', PyJsHoisted_Chalk_)
+ @Js
+ def PyJsHoisted_applyStyle_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'a', u'nestedStyles', u'i', u'args', u'originalDim', u'code', u'str', u'argsLen'])
+ var.put(u'args', var.get(u'arguments'))
+ var.put(u'argsLen', var.get(u'args').get(u'length'))
+ var.put(u'str', (PyJsStrictNeq(var.get(u'argsLen'),Js(0.0)) and var.get(u'String')(var.get(u'arguments').get(u'0'))))
+ if (var.get(u'argsLen')>Js(1.0)):
+ #for JS loop
+ var.put(u'a', Js(1.0))
+ while (var.get(u'a')Js(0.0)):
+ try:
+ var.put(u'line', var.get(u'lines').get(var.get(u'i')))
+ if (~var.get(u'line').callprop(u'indexOf', Js(u'sourceMappingURL=data:'))):
+ return var.get(u'exports').callprop(u'fromComment', var.get(u'line'))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ PyJsHoisted_convertFromLargeSource_.func_name = u'convertFromLargeSource'
+ var.put(u'convertFromLargeSource', PyJsHoisted_convertFromLargeSource_)
+ @Js
+ def PyJsHoisted_Converter_(sm, opts, this, arguments, var=var):
+ var = Scope({u'this':this, u'opts':opts, u'sm':sm, u'arguments':arguments}, var)
+ var.registers([u'opts', u'sm'])
+ PyJs_Object_3251_ = Js({})
+ var.put(u'opts', (var.get(u'opts') or PyJs_Object_3251_))
+ if var.get(u'opts').get(u'isFileComment'):
+ var.put(u'sm', var.get(u'readFromFileMap')(var.get(u'sm'), var.get(u'opts').get(u'commentFileDir')))
+ if var.get(u'opts').get(u'hasComment'):
+ var.put(u'sm', var.get(u'stripComment')(var.get(u'sm')))
+ if var.get(u'opts').get(u'isEncoded'):
+ var.put(u'sm', var.get(u'decodeBase64')(var.get(u'sm')))
+ if (var.get(u'opts').get(u'isJSON') or var.get(u'opts').get(u'isEncoded')):
+ var.put(u'sm', var.get(u'JSON').callprop(u'parse', var.get(u'sm')))
+ var.get(u"this").put(u'sourcemap', var.get(u'sm'))
+ PyJsHoisted_Converter_.func_name = u'Converter'
+ var.put(u'Converter', PyJsHoisted_Converter_)
+ Js(u'use strict')
+ var.put(u'fs', var.get(u'require')(Js(u'fs')))
+ var.put(u'path', var.get(u'require')(Js(u'path')))
+ var.put(u'commentRx', JsRegExp(u'/^\\s*\\/(?:\\/|\\*)[@#]\\s+sourceMappingURL=data:(?:application|text)\\/json;(?:charset[:=]\\S+;)?base64,(.*)$/mg'))
+ var.put(u'mapFileCommentRx', JsRegExp(u'/(?:\\/\\/[@#][ \\t]+sourceMappingURL=([^\\s\'"]+?)[ \\t]*$)|(?:\\/\\*[@#][ \\t]+sourceMappingURL=([^\\*]+?)[ \\t]*(?:\\*\\/){1}[ \\t]*$)/mg'))
+ pass
+ pass
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_3252_(space, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'space':space}, var)
+ var.registers([u'space'])
+ return var.get(u'JSON').callprop(u'stringify', var.get(u"this").get(u'sourcemap'), var.get(u"null"), var.get(u'space'))
+ PyJs_anonymous_3252_._set_name(u'anonymous')
+ var.get(u'Converter').get(u'prototype').put(u'toJSON', PyJs_anonymous_3252_)
+ @Js
+ def PyJs_anonymous_3253_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'json'])
+ var.put(u'json', var.get(u"this").callprop(u'toJSON'))
+ return var.get(u'Buffer').create(var.get(u'json')).callprop(u'toString', Js(u'base64'))
+ PyJs_anonymous_3253_._set_name(u'anonymous')
+ var.get(u'Converter').get(u'prototype').put(u'toBase64', PyJs_anonymous_3253_)
+ @Js
+ def PyJs_anonymous_3254_(options, this, arguments, var=var):
+ var = Scope({u'this':this, u'options':options, u'arguments':arguments}, var)
+ var.registers([u'base64', u'data', u'options'])
+ var.put(u'base64', var.get(u"this").callprop(u'toBase64'))
+ var.put(u'data', (Js(u'sourceMappingURL=data:application/json;base64,')+var.get(u'base64')))
+ return (((Js(u'/*# ')+var.get(u'data'))+Js(u' */')) if (var.get(u'options') and var.get(u'options').get(u'multiline')) else (Js(u'//# ')+var.get(u'data')))
+ PyJs_anonymous_3254_._set_name(u'anonymous')
+ var.get(u'Converter').get(u'prototype').put(u'toComment', PyJs_anonymous_3254_)
+ @Js
+ def PyJs_anonymous_3255_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'JSON').callprop(u'parse', var.get(u"this").callprop(u'toJSON'))
+ PyJs_anonymous_3255_._set_name(u'anonymous')
+ var.get(u'Converter').get(u'prototype').put(u'toObject', PyJs_anonymous_3255_)
+ @Js
+ def PyJs_anonymous_3256_(key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'value', u'key'])
+ if var.get(u"this").get(u'sourcemap').callprop(u'hasOwnProperty', var.get(u'key')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'property %s already exists on the sourcemap, use set property instead')))
+ raise PyJsTempException
+ return var.get(u"this").callprop(u'setProperty', var.get(u'key'), var.get(u'value'))
+ PyJs_anonymous_3256_._set_name(u'anonymous')
+ var.get(u'Converter').get(u'prototype').put(u'addProperty', PyJs_anonymous_3256_)
+ @Js
+ def PyJs_anonymous_3257_(key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'value', u'key'])
+ var.get(u"this").get(u'sourcemap').put(var.get(u'key'), var.get(u'value'))
+ return var.get(u"this")
+ PyJs_anonymous_3257_._set_name(u'anonymous')
+ var.get(u'Converter').get(u'prototype').put(u'setProperty', PyJs_anonymous_3257_)
+ @Js
+ def PyJs_anonymous_3258_(key, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'key'])
+ return var.get(u"this").get(u'sourcemap').get(var.get(u'key'))
+ PyJs_anonymous_3258_._set_name(u'anonymous')
+ var.get(u'Converter').get(u'prototype').put(u'getProperty', PyJs_anonymous_3258_)
+ @Js
+ def PyJs_anonymous_3259_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ return var.get(u'Converter').create(var.get(u'obj'))
+ PyJs_anonymous_3259_._set_name(u'anonymous')
+ var.get(u'exports').put(u'fromObject', PyJs_anonymous_3259_)
+ @Js
+ def PyJs_anonymous_3260_(json, this, arguments, var=var):
+ var = Scope({u'this':this, u'json':json, u'arguments':arguments}, var)
+ var.registers([u'json'])
+ PyJs_Object_3261_ = Js({u'isJSON':var.get(u'true')})
+ return var.get(u'Converter').create(var.get(u'json'), PyJs_Object_3261_)
+ PyJs_anonymous_3260_._set_name(u'anonymous')
+ var.get(u'exports').put(u'fromJSON', PyJs_anonymous_3260_)
+ @Js
+ def PyJs_anonymous_3262_(base64, this, arguments, var=var):
+ var = Scope({u'this':this, u'base64':base64, u'arguments':arguments}, var)
+ var.registers([u'base64'])
+ PyJs_Object_3263_ = Js({u'isEncoded':var.get(u'true')})
+ return var.get(u'Converter').create(var.get(u'base64'), PyJs_Object_3263_)
+ PyJs_anonymous_3262_._set_name(u'anonymous')
+ var.get(u'exports').put(u'fromBase64', PyJs_anonymous_3262_)
+ @Js
+ def PyJs_anonymous_3264_(comment, this, arguments, var=var):
+ var = Scope({u'comment':comment, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'comment'])
+ var.put(u'comment', var.get(u'comment').callprop(u'replace', JsRegExp(u'/^\\/\\*/g'), Js(u'//')).callprop(u'replace', JsRegExp(u'/\\*\\/$/g'), Js(u'')))
+ PyJs_Object_3265_ = Js({u'isEncoded':var.get(u'true'),u'hasComment':var.get(u'true')})
+ return var.get(u'Converter').create(var.get(u'comment'), PyJs_Object_3265_)
+ PyJs_anonymous_3264_._set_name(u'anonymous')
+ var.get(u'exports').put(u'fromComment', PyJs_anonymous_3264_)
+ @Js
+ def PyJs_anonymous_3266_(comment, dir, this, arguments, var=var):
+ var = Scope({u'comment':comment, u'this':this, u'arguments':arguments, u'dir':dir}, var)
+ var.registers([u'comment', u'dir'])
+ PyJs_Object_3267_ = Js({u'commentFileDir':var.get(u'dir'),u'isFileComment':var.get(u'true'),u'isJSON':var.get(u'true')})
+ return var.get(u'Converter').create(var.get(u'comment'), PyJs_Object_3267_)
+ PyJs_anonymous_3266_._set_name(u'anonymous')
+ var.get(u'exports').put(u'fromMapFileComment', PyJs_anonymous_3266_)
+ @Js
+ def PyJs_anonymous_3268_(content, largeSource, this, arguments, var=var):
+ var = Scope({u'content':content, u'this':this, u'largeSource':largeSource, u'arguments':arguments}, var)
+ var.registers([u'content', u'res', u'm', u'largeSource'])
+ if var.get(u'largeSource'):
+ var.put(u'res', var.get(u'convertFromLargeSource')(var.get(u'content')))
+ return (var.get(u'res') if var.get(u'res') else var.get(u"null"))
+ var.put(u'm', var.get(u'content').callprop(u'match', var.get(u'commentRx')))
+ var.get(u'commentRx').put(u'lastIndex', Js(0.0))
+ return (var.get(u'exports').callprop(u'fromComment', var.get(u'm').callprop(u'pop')) if var.get(u'm') else var.get(u"null"))
+ PyJs_anonymous_3268_._set_name(u'anonymous')
+ var.get(u'exports').put(u'fromSource', PyJs_anonymous_3268_)
+ @Js
+ def PyJs_anonymous_3269_(content, dir, this, arguments, var=var):
+ var = Scope({u'content':content, u'this':this, u'arguments':arguments, u'dir':dir}, var)
+ var.registers([u'content', u'm', u'dir'])
+ var.put(u'm', var.get(u'content').callprop(u'match', var.get(u'mapFileCommentRx')))
+ var.get(u'mapFileCommentRx').put(u'lastIndex', Js(0.0))
+ return (var.get(u'exports').callprop(u'fromMapFileComment', var.get(u'm').callprop(u'pop'), var.get(u'dir')) if var.get(u'm') else var.get(u"null"))
+ PyJs_anonymous_3269_._set_name(u'anonymous')
+ var.get(u'exports').put(u'fromMapFileSource', PyJs_anonymous_3269_)
+ @Js
+ def PyJs_anonymous_3270_(src, this, arguments, var=var):
+ var = Scope({u'this':this, u'src':src, u'arguments':arguments}, var)
+ var.registers([u'src'])
+ var.get(u'commentRx').put(u'lastIndex', Js(0.0))
+ return var.get(u'src').callprop(u'replace', var.get(u'commentRx'), Js(u''))
+ PyJs_anonymous_3270_._set_name(u'anonymous')
+ var.get(u'exports').put(u'removeComments', PyJs_anonymous_3270_)
+ @Js
+ def PyJs_anonymous_3271_(src, this, arguments, var=var):
+ var = Scope({u'this':this, u'src':src, u'arguments':arguments}, var)
+ var.registers([u'src'])
+ var.get(u'mapFileCommentRx').put(u'lastIndex', Js(0.0))
+ return var.get(u'src').callprop(u'replace', var.get(u'mapFileCommentRx'), Js(u''))
+ PyJs_anonymous_3271_._set_name(u'anonymous')
+ var.get(u'exports').put(u'removeMapFileComments', PyJs_anonymous_3271_)
+ @Js
+ def PyJs_anonymous_3272_(file, options, this, arguments, var=var):
+ var = Scope({u'this':this, u'options':options, u'file':file, u'arguments':arguments}, var)
+ var.registers([u'data', u'options', u'file'])
+ var.put(u'data', (Js(u'sourceMappingURL=')+var.get(u'file')))
+ return (((Js(u'/*# ')+var.get(u'data'))+Js(u' */')) if (var.get(u'options') and var.get(u'options').get(u'multiline')) else (Js(u'//# ')+var.get(u'data')))
+ PyJs_anonymous_3272_._set_name(u'anonymous')
+ var.get(u'exports').put(u'generateMapFileComment', PyJs_anonymous_3272_)
+ @Js
+ def PyJs_getCommentRegex_3274_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getCommentRegex':PyJs_getCommentRegex_3274_, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'commentRx').put(u'lastIndex', Js(0.0))
+ return var.get(u'commentRx')
+ PyJs_getCommentRegex_3274_._set_name(u'getCommentRegex')
+ PyJs_Object_3273_ = Js({u'get':PyJs_getCommentRegex_3274_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'commentRegex'), PyJs_Object_3273_)
+ @Js
+ def PyJs_getMapFileCommentRegex_3276_(this, arguments, var=var):
+ var = Scope({u'this':this, u'getMapFileCommentRegex':PyJs_getMapFileCommentRegex_3276_, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'mapFileCommentRx').put(u'lastIndex', Js(0.0))
+ return var.get(u'mapFileCommentRx')
+ PyJs_getMapFileCommentRegex_3276_._set_name(u'getMapFileCommentRegex')
+ PyJs_Object_3275_ = Js({u'get':PyJs_getMapFileCommentRegex_3276_})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'exports'), Js(u'mapFileCommentRegex'), PyJs_Object_3275_)
+ PyJs_anonymous_3250_._set_name(u'anonymous')
+ PyJs_anonymous_3250_.callprop(u'call', var.get(u"this"), var.get(u'require')(Js(u'buffer')).get(u'Buffer'))
+PyJs_anonymous_3249_._set_name(u'anonymous')
+PyJs_Object_3277_ = Js({u'buffer':Js(525.0),u'fs':Js(523.0),u'path':Js(530.0)})
+@Js
+def PyJs_anonymous_3278_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'load', u'exports', u'log', u'formatArgs', u'require', u'module', u'localstorage', u'useColors', u'save'])
+ @Js
+ def PyJsHoisted_load_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'r'])
+ pass
+ try:
+ var.put(u'r', var.get(u'exports').get(u'storage').get(u'debug'))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_27913289 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ pass
+ finally:
+ if PyJsHolder_65_27913289 is not None:
+ var.own[u'e'] = PyJsHolder_65_27913289
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_27913289
+ return var.get(u'r')
+ PyJsHoisted_load_.func_name = u'load'
+ var.put(u'load', PyJsHoisted_load_)
+ @Js
+ def PyJsHoisted_log_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return ((PyJsStrictEq(Js(u'object'),var.get(u'console',throw=False).typeof()) and var.get(u'console').get(u'log')) and var.get(u'Function').get(u'prototype').get(u'apply').callprop(u'call', var.get(u'console').get(u'log'), var.get(u'console'), var.get(u'arguments')))
+ PyJsHoisted_log_.func_name = u'log'
+ var.put(u'log', PyJsHoisted_log_)
+ @Js
+ def PyJsHoisted_formatArgs_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'useColors', u'index', u'c', u'args', u'lastC'])
+ var.put(u'args', var.get(u'arguments'))
+ var.put(u'useColors', var.get(u"this").get(u'useColors'))
+ var.get(u'args').put(u'0', (((((((Js(u'%c') if var.get(u'useColors') else Js(u''))+var.get(u"this").get(u'namespace'))+(Js(u' %c') if var.get(u'useColors') else Js(u' ')))+var.get(u'args').get(u'0'))+(Js(u'%c ') if var.get(u'useColors') else Js(u' ')))+Js(u'+'))+var.get(u'exports').callprop(u'humanize', var.get(u"this").get(u'diff'))))
+ if var.get(u'useColors').neg():
+ return var.get(u'args')
+ var.put(u'c', (Js(u'color: ')+var.get(u"this").get(u'color')))
+ var.put(u'args', Js([var.get(u'args').get(u'0'), var.get(u'c'), Js(u'color: inherit')]).callprop(u'concat', var.get(u'Array').get(u'prototype').get(u'slice').callprop(u'call', var.get(u'args'), Js(1.0))))
+ var.put(u'index', Js(0.0))
+ var.put(u'lastC', Js(0.0))
+ @Js
+ def PyJs_anonymous_3281_(match, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'match':match}, var)
+ var.registers([u'match'])
+ if PyJsStrictEq(Js(u'%%'),var.get(u'match')):
+ return var.get('undefined')
+ (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))-Js(1))
+ if PyJsStrictEq(Js(u'%c'),var.get(u'match')):
+ var.put(u'lastC', var.get(u'index'))
+ PyJs_anonymous_3281_._set_name(u'anonymous')
+ var.get(u'args').get(u'0').callprop(u'replace', JsRegExp(u'/%[a-z%]/g'), PyJs_anonymous_3281_)
+ var.get(u'args').callprop(u'splice', var.get(u'lastC'), Js(0.0), var.get(u'c'))
+ return var.get(u'args')
+ PyJsHoisted_formatArgs_.func_name = u'formatArgs'
+ var.put(u'formatArgs', PyJsHoisted_formatArgs_)
+ @Js
+ def PyJsHoisted_localstorage_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ try:
+ return var.get(u'window').get(u'localStorage')
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_8009014 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ pass
+ finally:
+ if PyJsHolder_65_8009014 is not None:
+ var.own[u'e'] = PyJsHolder_65_8009014
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_8009014
+ PyJsHoisted_localstorage_.func_name = u'localstorage'
+ var.put(u'localstorage', PyJsHoisted_localstorage_)
+ @Js
+ def PyJsHoisted_useColors_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ def PyJs_LONG_3279_(var=var):
+ return ((var.get(u'document').get(u'documentElement').get(u'style').contains(Js(u'WebkitAppearance')) or (var.get(u'window').get(u'console') and (var.get(u'console').get(u'firebug') or (var.get(u'console').get(u'exception') and var.get(u'console').get(u'table'))))) or (var.get(u'navigator').get(u'userAgent').callprop(u'toLowerCase').callprop(u'match', JsRegExp(u'/firefox\\/(\\d+)/')) and (var.get(u'parseInt')(var.get(u'RegExp').get(u'$1'), Js(10.0))>=Js(31.0))))
+ return PyJs_LONG_3279_()
+ PyJsHoisted_useColors_.func_name = u'useColors'
+ var.put(u'useColors', PyJsHoisted_useColors_)
+ @Js
+ def PyJsHoisted_save_(namespaces, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'namespaces':namespaces}, var)
+ var.registers([u'namespaces'])
+ try:
+ if (var.get(u"null")==var.get(u'namespaces')):
+ var.get(u'exports').get(u'storage').callprop(u'removeItem', Js(u'debug'))
+ else:
+ var.get(u'exports').get(u'storage').put(u'debug', var.get(u'namespaces'))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_65_85910939 = var.own.get(u'e')
+ var.force_own_put(u'e', PyExceptionToJs(PyJsTempException))
+ try:
+ pass
+ finally:
+ if PyJsHolder_65_85910939 is not None:
+ var.own[u'e'] = PyJsHolder_65_85910939
+ else:
+ del var.own[u'e']
+ del PyJsHolder_65_85910939
+ PyJsHoisted_save_.func_name = u'save'
+ var.put(u'save', PyJsHoisted_save_)
+ var.put(u'exports', var.get(u'module').put(u'exports', var.get(u'require')(Js(u'./debug'))))
+ var.get(u'exports').put(u'log', var.get(u'log'))
+ var.get(u'exports').put(u'formatArgs', var.get(u'formatArgs'))
+ var.get(u'exports').put(u'save', var.get(u'save'))
+ var.get(u'exports').put(u'load', var.get(u'load'))
+ var.get(u'exports').put(u'useColors', var.get(u'useColors'))
+ var.get(u'exports').put(u'storage', (var.get(u'chrome').get(u'storage').get(u'local') if ((Js(u'undefined')!=var.get(u'chrome',throw=False).typeof()) and (Js(u'undefined')!=var.get(u'chrome').get(u'storage').typeof())) else var.get(u'localstorage')()))
+ var.get(u'exports').put(u'colors', Js([Js(u'lightseagreen'), Js(u'forestgreen'), Js(u'goldenrod'), Js(u'dodgerblue'), Js(u'darkorchid'), Js(u'crimson')]))
+ pass
+ @Js
+ def PyJs_anonymous_3280_(v, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'v':v}, var)
+ var.registers([u'v'])
+ return var.get(u'JSON').callprop(u'stringify', var.get(u'v'))
+ PyJs_anonymous_3280_._set_name(u'anonymous')
+ var.get(u'exports').get(u'formatters').put(u'j', PyJs_anonymous_3280_)
+ pass
+ pass
+ pass
+ pass
+ var.get(u'exports').callprop(u'enable', var.get(u'load')())
+ pass
+PyJs_anonymous_3278_._set_name(u'anonymous')
+PyJs_Object_3282_ = Js({u'./debug':Js(269.0)})
+@Js
+def PyJs_anonymous_3283_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'enable', u'require', u'enabled', u'selectColor', u'coerce', u'disable', u'module', u'debug', u'prevColor', u'prevTime'])
+ @Js
+ def PyJsHoisted_enable_(namespaces, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'namespaces':namespaces}, var)
+ var.registers([u'i', u'namespaces', u'split', u'len'])
+ var.get(u'exports').callprop(u'save', var.get(u'namespaces'))
+ var.put(u'split', (var.get(u'namespaces') or Js(u'')).callprop(u'split', JsRegExp(u'/[\\s,]+/')))
+ var.put(u'len', var.get(u'split').get(u'length'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')var.get(u'maxUsed')) or (PyJsStrictEq(var.get(u'u'),var.get(u'maxUsed')) and (var.get(u'w')>var.get(u'maxWeight')))):
+ var.put(u'maxUsed', var.get(u'u'))
+ var.put(u'maxWeight', var.get(u'w'))
+ var.put(u'result', var.get(u'Number')(var.get(u'n')))
+ return var.get(u'result')
+ PyJsHoisted_getMostUsed_.func_name = u'getMostUsed'
+ var.put(u'getMostUsed', PyJsHoisted_getMostUsed_)
+ Js(u'use strict')
+ var.put(u'repeating', var.get(u'require')(Js(u'repeating')))
+ var.put(u'INDENT_RE', JsRegExp(u'/^(?:( )+|\\t+)/'))
+ pass
+ @Js
+ def PyJs_anonymous_3297_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'actual', u'tabs', u'amount', u'isIndent', u'current', u'indents', u'spaces', u'str', u'prev', u'type'])
+ if PyJsStrictNeq(var.get(u'str',throw=False).typeof(),Js(u'string')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Expected a string')))
+ raise PyJsTempException
+ var.put(u'tabs', Js(0.0))
+ var.put(u'spaces', Js(0.0))
+ var.put(u'prev', Js(0.0))
+ PyJs_Object_3298_ = Js({})
+ var.put(u'indents', PyJs_Object_3298_)
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_3299_(line, this, arguments, var=var):
+ var = Scope({u'this':this, u'line':line, u'arguments':arguments}, var)
+ var.registers([u'matches', u'diff', u'line', u'indent'])
+ if var.get(u'line').neg():
+ return var.get('undefined')
+ pass
+ var.put(u'matches', var.get(u'line').callprop(u'match', var.get(u'INDENT_RE')))
+ if var.get(u'matches').neg():
+ var.put(u'indent', Js(0.0))
+ else:
+ var.put(u'indent', var.get(u'matches').get(u'0').get(u'length'))
+ if var.get(u'matches').get(u'1'):
+ (var.put(u'spaces',Js(var.get(u'spaces').to_number())+Js(1))-Js(1))
+ else:
+ (var.put(u'tabs',Js(var.get(u'tabs').to_number())+Js(1))-Js(1))
+ var.put(u'diff', (var.get(u'indent')-var.get(u'prev')))
+ var.put(u'prev', var.get(u'indent'))
+ if var.get(u'diff'):
+ var.put(u'isIndent', (var.get(u'diff')>Js(0.0)))
+ var.put(u'current', var.get(u'indents').get((var.get(u'diff') if var.get(u'isIndent') else (-var.get(u'diff')))))
+ if var.get(u'current'):
+ (var.get(u'current').put(u'0',Js(var.get(u'current').get(u'0').to_number())+Js(1))-Js(1))
+ else:
+ var.put(u'current', var.get(u'indents').put(var.get(u'diff'), Js([Js(1.0), Js(0.0)])))
+ else:
+ if var.get(u'current'):
+ var.get(u'current').put(u'1', var.get(u'Number')(var.get(u'isIndent')), u'+')
+ PyJs_anonymous_3299_._set_name(u'anonymous')
+ var.get(u'str').callprop(u'split', JsRegExp(u'/\\n/g')).callprop(u'forEach', PyJs_anonymous_3299_)
+ var.put(u'amount', var.get(u'getMostUsed')(var.get(u'indents')))
+ pass
+ pass
+ if var.get(u'amount').neg():
+ var.put(u'type', var.get(u"null"))
+ var.put(u'actual', Js(u''))
+ else:
+ if (var.get(u'spaces')>=var.get(u'tabs')):
+ var.put(u'type', Js(u'space'))
+ var.put(u'actual', var.get(u'repeating')(Js(u' '), var.get(u'amount')))
+ else:
+ var.put(u'type', Js(u'tab'))
+ var.put(u'actual', var.get(u'repeating')(Js(u'\t'), var.get(u'amount')))
+ PyJs_Object_3300_ = Js({u'amount':var.get(u'amount'),u'type':var.get(u'type'),u'indent':var.get(u'actual')})
+ return PyJs_Object_3300_
+ PyJs_anonymous_3297_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_3297_)
+PyJs_anonymous_3296_._set_name(u'anonymous')
+PyJs_Object_3301_ = Js({u'repeating':Js(507.0)})
+@Js
+def PyJs_anonymous_3302_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'matchOperatorsRe', u'require', u'exports', u'module'])
+ Js(u'use strict')
+ var.put(u'matchOperatorsRe', JsRegExp(u'/[|\\\\{}()[\\]^$+*?.]/g'))
+ @Js
+ def PyJs_anonymous_3303_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ if PyJsStrictNeq(var.get(u'str',throw=False).typeof(),Js(u'string')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Expected a string')))
+ raise PyJsTempException
+ return var.get(u'str').callprop(u'replace', var.get(u'matchOperatorsRe'), Js(u'\\$&'))
+ PyJs_anonymous_3303_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_3303_)
+PyJs_anonymous_3302_._set_name(u'anonymous')
+PyJs_Object_3304_ = Js({})
+@Js
+def PyJs_anonymous_3305_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_3306_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'isIterationStatement', u'isProblematicIfStatement', u'trailingStatement', u'isExpression', u'isSourceElement', u'isStatement'])
+ @Js
+ def PyJsHoisted_isIterationStatement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if (var.get(u'node')==var.get(u"null")):
+ return Js(False)
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'node').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'DoWhileStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ForInStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ForStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'WhileStatement')):
+ SWITCHED = True
+ return var.get(u'true')
+ SWITCHED = True
+ break
+ return Js(False)
+ PyJsHoisted_isIterationStatement_.func_name = u'isIterationStatement'
+ var.put(u'isIterationStatement', PyJsHoisted_isIterationStatement_)
+ @Js
+ def PyJsHoisted_isProblematicIfStatement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'current', u'node'])
+ pass
+ if PyJsStrictNeq(var.get(u'node').get(u'type'),Js(u'IfStatement')):
+ return Js(False)
+ if (var.get(u'node').get(u'alternate')==var.get(u"null")):
+ return Js(False)
+ var.put(u'current', var.get(u'node').get(u'consequent'))
+ while 1:
+ if PyJsStrictEq(var.get(u'current').get(u'type'),Js(u'IfStatement')):
+ if (var.get(u'current').get(u'alternate')==var.get(u"null")):
+ return var.get(u'true')
+ var.put(u'current', var.get(u'trailingStatement')(var.get(u'current')))
+ if not var.get(u'current'):
+ break
+ return Js(False)
+ PyJsHoisted_isProblematicIfStatement_.func_name = u'isProblematicIfStatement'
+ var.put(u'isProblematicIfStatement', PyJsHoisted_isProblematicIfStatement_)
+ @Js
+ def PyJsHoisted_trailingStatement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'node').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'IfStatement')):
+ SWITCHED = True
+ if (var.get(u'node').get(u'alternate')!=var.get(u"null")):
+ return var.get(u'node').get(u'alternate')
+ return var.get(u'node').get(u'consequent')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'LabeledStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ForStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ForInStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'WhileStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'WithStatement')):
+ SWITCHED = True
+ return var.get(u'node').get(u'body')
+ SWITCHED = True
+ break
+ return var.get(u"null")
+ PyJsHoisted_trailingStatement_.func_name = u'trailingStatement'
+ var.put(u'trailingStatement', PyJsHoisted_trailingStatement_)
+ @Js
+ def PyJsHoisted_isExpression_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if (var.get(u'node')==var.get(u"null")):
+ return Js(False)
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'node').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ArrayExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'AssignmentExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'BinaryExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'CallExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ConditionalExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'FunctionExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'Identifier')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'Literal')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'LogicalExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'MemberExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'NewExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ObjectExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'SequenceExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ThisExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'UnaryExpression')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'UpdateExpression')):
+ SWITCHED = True
+ return var.get(u'true')
+ SWITCHED = True
+ break
+ return Js(False)
+ PyJsHoisted_isExpression_.func_name = u'isExpression'
+ var.put(u'isExpression', PyJsHoisted_isExpression_)
+ @Js
+ def PyJsHoisted_isSourceElement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ return (var.get(u'isStatement')(var.get(u'node')) or ((var.get(u'node')!=var.get(u"null")) and PyJsStrictEq(var.get(u'node').get(u'type'),Js(u'FunctionDeclaration'))))
+ PyJsHoisted_isSourceElement_.func_name = u'isSourceElement'
+ var.put(u'isSourceElement', PyJsHoisted_isSourceElement_)
+ @Js
+ def PyJsHoisted_isStatement_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ if (var.get(u'node')==var.get(u"null")):
+ return Js(False)
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'node').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'BlockStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'BreakStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ContinueStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'DebuggerStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'DoWhileStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'EmptyStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ExpressionStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ForInStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ForStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'IfStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'LabeledStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ReturnStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'SwitchStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ThrowStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'TryStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'VariableDeclaration')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'WhileStatement')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'WithStatement')):
+ SWITCHED = True
+ return var.get(u'true')
+ SWITCHED = True
+ break
+ return Js(False)
+ PyJsHoisted_isStatement_.func_name = u'isStatement'
+ var.put(u'isStatement', PyJsHoisted_isStatement_)
+ Js(u'use strict')
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ PyJs_Object_3307_ = Js({u'isExpression':var.get(u'isExpression'),u'isStatement':var.get(u'isStatement'),u'isIterationStatement':var.get(u'isIterationStatement'),u'isSourceElement':var.get(u'isSourceElement'),u'isProblematicIfStatement':var.get(u'isProblematicIfStatement'),u'trailingStatement':var.get(u'trailingStatement')})
+ var.get(u'module').put(u'exports', PyJs_Object_3307_)
+ PyJs_anonymous_3306_._set_name(u'anonymous')
+ PyJs_anonymous_3306_()
+PyJs_anonymous_3305_._set_name(u'anonymous')
+PyJs_Object_3308_ = Js({})
+@Js
+def PyJs_anonymous_3309_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_3310_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'isIdentifierPartES6', u'NON_ASCII_WHITESPACES', u'isIdentifierStartES5', u'fromCodePoint', u'IDENTIFIER_START', u'ES6Regex', u'ES5Regex', u'isHexDigit', u'ch', u'IDENTIFIER_PART', u'isLineTerminator', u'isDecimalDigit', u'isIdentifierStartES6', u'isIdentifierPartES5', u'isOctalDigit', u'isWhiteSpace'])
+ @Js
+ def PyJsHoisted_isIdentifierPartES6_(ch, this, arguments, var=var):
+ var = Scope({u'this':this, u'ch':ch, u'arguments':arguments}, var)
+ var.registers([u'ch'])
+ return (var.get(u'IDENTIFIER_PART').get(var.get(u'ch')) if (var.get(u'ch')=Js(48)) and (var.get(u'ch')<=Js(55)))
+ PyJsHoisted_isOctalDigit_.func_name = u'isOctalDigit'
+ var.put(u'isOctalDigit', PyJsHoisted_isOctalDigit_)
+ @Js
+ def PyJsHoisted_isLineTerminator_(ch, this, arguments, var=var):
+ var = Scope({u'this':this, u'ch':ch, u'arguments':arguments}, var)
+ var.registers([u'ch'])
+ return (((PyJsStrictEq(var.get(u'ch'),Js(10)) or PyJsStrictEq(var.get(u'ch'),Js(13))) or PyJsStrictEq(var.get(u'ch'),Js(8232))) or PyJsStrictEq(var.get(u'ch'),Js(8233)))
+ PyJsHoisted_isLineTerminator_.func_name = u'isLineTerminator'
+ var.put(u'isLineTerminator', PyJsHoisted_isLineTerminator_)
+ @Js
+ def PyJsHoisted_isDecimalDigit_(ch, this, arguments, var=var):
+ var = Scope({u'this':this, u'ch':ch, u'arguments':arguments}, var)
+ var.registers([u'ch'])
+ return ((Js(48)<=var.get(u'ch')) and (var.get(u'ch')<=Js(57)))
+ PyJsHoisted_isDecimalDigit_.func_name = u'isDecimalDigit'
+ var.put(u'isDecimalDigit', PyJsHoisted_isDecimalDigit_)
+ @Js
+ def PyJsHoisted_isIdentifierStartES6_(ch, this, arguments, var=var):
+ var = Scope({u'this':this, u'ch':ch, u'arguments':arguments}, var)
+ var.registers([u'ch'])
+ return (var.get(u'IDENTIFIER_START').get(var.get(u'ch')) if (var.get(u'ch')=Js(5760)) and (var.get(u'NON_ASCII_WHITESPACES').callprop(u'indexOf', var.get(u'ch'))>=Js(0.0))))
+ PyJsHoisted_isWhiteSpace_.func_name = u'isWhiteSpace'
+ var.put(u'isWhiteSpace', PyJsHoisted_isWhiteSpace_)
+ Js(u'use strict')
+ pass
+ PyJs_Object_3311_ = Js({u'NonAsciiIdentifierStart':JsRegExp(u'/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\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\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\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\\u2071\\u207F\\u2090-\\u209C\\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-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\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-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/'),u'NonAsciiIdentifierPart':JsRegExp(u'/[\\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]/')})
+ var.put(u'ES5Regex', PyJs_Object_3311_)
+ PyJs_Object_3312_ = Js({u'NonAsciiIdentifierStart':JsRegExp(u'/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\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\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\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\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/'),u'NonAsciiIdentifierPart':JsRegExp(u'/[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\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\\u1369-\\u1371\\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-\\u19DA\\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\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\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\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\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]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDD0-\\uDDDA\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF01-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF98]|\\uD809[\\uDC00-\\uDC6E]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/')})
+ var.put(u'ES6Regex', PyJs_Object_3312_)
+ pass
+ pass
+ pass
+ var.put(u'NON_ASCII_WHITESPACES', Js([Js(5760), Js(6158), Js(8192), Js(8193), Js(8194), Js(8195), Js(8196), Js(8197), Js(8198), Js(8199), Js(8200), Js(8201), Js(8202), Js(8239), Js(8287), Js(12288), Js(65279)]))
+ pass
+ pass
+ pass
+ var.put(u'IDENTIFIER_START', var.get(u'Array').create(Js(128)))
+ #for JS loop
+ var.put(u'ch', Js(0.0))
+ while (var.get(u'ch')=Js(97)) and (var.get(u'ch')<=Js(122))) or ((var.get(u'ch')>=Js(65)) and (var.get(u'ch')<=Js(90)))) or PyJsStrictEq(var.get(u'ch'),Js(36))) or PyJsStrictEq(var.get(u'ch'),Js(95))))
+ finally:
+ var.put(u'ch',Js(var.get(u'ch').to_number())+Js(1))
+ var.put(u'IDENTIFIER_PART', var.get(u'Array').create(Js(128)))
+ #for JS loop
+ var.put(u'ch', Js(0.0))
+ while (var.get(u'ch')=Js(97)) and (var.get(u'ch')<=Js(122))) or ((var.get(u'ch')>=Js(65)) and (var.get(u'ch')<=Js(90)))) or ((var.get(u'ch')>=Js(48)) and (var.get(u'ch')<=Js(57)))) or PyJsStrictEq(var.get(u'ch'),Js(36))) or PyJsStrictEq(var.get(u'ch'),Js(95))))
+ finally:
+ var.put(u'ch',Js(var.get(u'ch').to_number())+Js(1))
+ pass
+ pass
+ pass
+ pass
+ PyJs_Object_3313_ = Js({u'isDecimalDigit':var.get(u'isDecimalDigit'),u'isHexDigit':var.get(u'isHexDigit'),u'isOctalDigit':var.get(u'isOctalDigit'),u'isWhiteSpace':var.get(u'isWhiteSpace'),u'isLineTerminator':var.get(u'isLineTerminator'),u'isIdentifierStartES5':var.get(u'isIdentifierStartES5'),u'isIdentifierPartES5':var.get(u'isIdentifierPartES5'),u'isIdentifierStartES6':var.get(u'isIdentifierStartES6'),u'isIdentifierPartES6':var.get(u'isIdentifierPartES6')})
+ var.get(u'module').put(u'exports', PyJs_Object_3313_)
+ PyJs_anonymous_3310_._set_name(u'anonymous')
+ PyJs_anonymous_3310_()
+PyJs_anonymous_3309_._set_name(u'anonymous')
+PyJs_Object_3314_ = Js({})
+@Js
+def PyJs_anonymous_3315_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_3316_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'isKeywordES6', u'isKeywordES5', u'code', u'isIdentifierNameES6', u'decodeUtf16', u'isIdentifierNameES5', u'isIdentifierES5', u'isIdentifierES6', u'isReservedWordES5', u'isReservedWordES6', u'isRestrictedWord', u'isStrictModeReservedWordES6'])
+ @Js
+ def PyJsHoisted_isKeywordES6_(id, strict, this, arguments, var=var):
+ var = Scope({u'this':this, u'strict':strict, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'strict', u'id'])
+ if (var.get(u'strict') and var.get(u'isStrictModeReservedWordES6')(var.get(u'id'))):
+ return var.get(u'true')
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'id').get(u'length'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(2.0)):
+ SWITCHED = True
+ return ((PyJsStrictEq(var.get(u'id'),Js(u'if')) or PyJsStrictEq(var.get(u'id'),Js(u'in'))) or PyJsStrictEq(var.get(u'id'),Js(u'do')))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(3.0)):
+ SWITCHED = True
+ return (((PyJsStrictEq(var.get(u'id'),Js(u'var')) or PyJsStrictEq(var.get(u'id'),Js(u'for'))) or PyJsStrictEq(var.get(u'id'),Js(u'new'))) or PyJsStrictEq(var.get(u'id'),Js(u'try')))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(4.0)):
+ SWITCHED = True
+ return (((((PyJsStrictEq(var.get(u'id'),Js(u'this')) or PyJsStrictEq(var.get(u'id'),Js(u'else'))) or PyJsStrictEq(var.get(u'id'),Js(u'case'))) or PyJsStrictEq(var.get(u'id'),Js(u'void'))) or PyJsStrictEq(var.get(u'id'),Js(u'with'))) or PyJsStrictEq(var.get(u'id'),Js(u'enum')))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(5.0)):
+ SWITCHED = True
+ return (((((((PyJsStrictEq(var.get(u'id'),Js(u'while')) or PyJsStrictEq(var.get(u'id'),Js(u'break'))) or PyJsStrictEq(var.get(u'id'),Js(u'catch'))) or PyJsStrictEq(var.get(u'id'),Js(u'throw'))) or PyJsStrictEq(var.get(u'id'),Js(u'const'))) or PyJsStrictEq(var.get(u'id'),Js(u'yield'))) or PyJsStrictEq(var.get(u'id'),Js(u'class'))) or PyJsStrictEq(var.get(u'id'),Js(u'super')))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(6.0)):
+ SWITCHED = True
+ return (((((PyJsStrictEq(var.get(u'id'),Js(u'return')) or PyJsStrictEq(var.get(u'id'),Js(u'typeof'))) or PyJsStrictEq(var.get(u'id'),Js(u'delete'))) or PyJsStrictEq(var.get(u'id'),Js(u'switch'))) or PyJsStrictEq(var.get(u'id'),Js(u'export'))) or PyJsStrictEq(var.get(u'id'),Js(u'import')))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(7.0)):
+ SWITCHED = True
+ return ((PyJsStrictEq(var.get(u'id'),Js(u'default')) or PyJsStrictEq(var.get(u'id'),Js(u'finally'))) or PyJsStrictEq(var.get(u'id'),Js(u'extends')))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(8.0)):
+ SWITCHED = True
+ return ((PyJsStrictEq(var.get(u'id'),Js(u'function')) or PyJsStrictEq(var.get(u'id'),Js(u'continue'))) or PyJsStrictEq(var.get(u'id'),Js(u'debugger')))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(10.0)):
+ SWITCHED = True
+ return PyJsStrictEq(var.get(u'id'),Js(u'instanceof'))
+ if True:
+ SWITCHED = True
+ return Js(False)
+ SWITCHED = True
+ break
+ PyJsHoisted_isKeywordES6_.func_name = u'isKeywordES6'
+ var.put(u'isKeywordES6', PyJsHoisted_isKeywordES6_)
+ @Js
+ def PyJsHoisted_isKeywordES5_(id, strict, this, arguments, var=var):
+ var = Scope({u'this':this, u'strict':strict, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'strict', u'id'])
+ if (var.get(u'strict').neg() and PyJsStrictEq(var.get(u'id'),Js(u'yield'))):
+ return Js(False)
+ return var.get(u'isKeywordES6')(var.get(u'id'), var.get(u'strict'))
+ PyJsHoisted_isKeywordES5_.func_name = u'isKeywordES5'
+ var.put(u'isKeywordES5', PyJsHoisted_isKeywordES5_)
+ @Js
+ def PyJsHoisted_isIdentifierNameES6_(id, this, arguments, var=var):
+ var = Scope({u'this':this, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'ch', u'i', u'lowCh', u'id', u'iz', u'check'])
+ pass
+ if PyJsStrictEq(var.get(u'id').get(u'length'),Js(0.0)):
+ return Js(False)
+ var.put(u'check', var.get(u'code').get(u'isIdentifierStartES6'))
+ #for JS loop
+ PyJsComma(var.put(u'i', Js(0.0)),var.put(u'iz', var.get(u'id').get(u'length')))
+ while (var.get(u'i')=var.get(u'iz')):
+ return Js(False)
+ var.put(u'lowCh', var.get(u'id').callprop(u'charCodeAt', var.get(u'i')))
+ if ((Js(56320)<=var.get(u'lowCh')) and (var.get(u'lowCh')<=Js(57343))).neg():
+ return Js(False)
+ var.put(u'ch', var.get(u'decodeUtf16')(var.get(u'ch'), var.get(u'lowCh')))
+ if var.get(u'check')(var.get(u'ch')).neg():
+ return Js(False)
+ var.put(u'check', var.get(u'code').get(u'isIdentifierPartES6'))
+ finally:
+ var.put(u'i',Js(var.get(u'i').to_number())+Js(1))
+ return var.get(u'true')
+ PyJsHoisted_isIdentifierNameES6_.func_name = u'isIdentifierNameES6'
+ var.put(u'isIdentifierNameES6', PyJsHoisted_isIdentifierNameES6_)
+ @Js
+ def PyJsHoisted_decodeUtf16_(lead, trail, this, arguments, var=var):
+ var = Scope({u'this':this, u'trail':trail, u'arguments':arguments, u'lead':lead}, var)
+ var.registers([u'trail', u'lead'])
+ return ((((var.get(u'lead')-Js(55296))*Js(1024))+(var.get(u'trail')-Js(56320)))+Js(65536))
+ PyJsHoisted_decodeUtf16_.func_name = u'decodeUtf16'
+ var.put(u'decodeUtf16', PyJsHoisted_decodeUtf16_)
+ @Js
+ def PyJsHoisted_isIdentifierNameES5_(id, this, arguments, var=var):
+ var = Scope({u'this':this, u'id':id, u'arguments':arguments}, var)
+ var.registers([u'i', u'ch', u'iz', u'id'])
+ pass
+ if PyJsStrictEq(var.get(u'id').get(u'length'),Js(0.0)):
+ return Js(False)
+ var.put(u'ch', var.get(u'id').callprop(u'charCodeAt', Js(0.0)))
+ if var.get(u'code').callprop(u'isIdentifierStartES5', var.get(u'ch')).neg():
+ return Js(False)
+ #for JS loop
+ PyJsComma(var.put(u'i', Js(1.0)),var.put(u'iz', var.get(u'id').get(u'length')))
+ while (var.get(u'i')!=?({]|\\/(?![\\/*])))))|(0[xX][\\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?)|((?!\\d)(?:(?!\\s)[$\\w\\u0080-\\uFFFF]|\\\\u[\\da-fA-F]{4}|\\\\u\\{[\\da-fA-F]{1,6}\\})+)|(--|\\+\\+|&&|\\|\\||=>|\\.{3}|(?:[+\\-\\/%&|^]|\\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\\](){}])|(\\s+)|(^$|[\\s\\S])/g'))
+ PyJs_LONG_3369_()
+ @Js
+ def PyJs_anonymous_3370_(match, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'match':match}, var)
+ var.registers([u'token', u'match'])
+ PyJs_Object_3371_ = Js({u'type':Js(u'invalid'),u'value':var.get(u'match').get(u'0')})
+ var.put(u'token', PyJs_Object_3371_)
+ if var.get(u'match').get(u'1'):
+ PyJsComma(var.get(u'token').put(u'type', Js(u'string')),var.get(u'token').put(u'closed', (var.get(u'match').get(u'3') or var.get(u'match').get(u'4')).neg().neg()))
+ else:
+ if var.get(u'match').get(u'5'):
+ var.get(u'token').put(u'type', Js(u'comment'))
+ else:
+ if var.get(u'match').get(u'6'):
+ PyJsComma(var.get(u'token').put(u'type', Js(u'comment')),var.get(u'token').put(u'closed', var.get(u'match').get(u'7').neg().neg()))
+ else:
+ if var.get(u'match').get(u'8'):
+ var.get(u'token').put(u'type', Js(u'regex'))
+ else:
+ if var.get(u'match').get(u'9'):
+ var.get(u'token').put(u'type', Js(u'number'))
+ else:
+ if var.get(u'match').get(u'10'):
+ var.get(u'token').put(u'type', Js(u'name'))
+ else:
+ if var.get(u'match').get(u'11'):
+ var.get(u'token').put(u'type', Js(u'punctuator'))
+ else:
+ if var.get(u'match').get(u'12'):
+ var.get(u'token').put(u'type', Js(u'whitespace'))
+ return var.get(u'token')
+ PyJs_anonymous_3370_._set_name(u'anonymous')
+ var.get(u'module').get(u'exports').put(u'matchToToken', PyJs_anonymous_3370_)
+PyJs_anonymous_3368_._set_name(u'anonymous')
+PyJs_Object_3372_ = Js({})
+@Js
+def PyJs_anonymous_3373_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_3374_ = Js({})
+ @Js
+ def PyJs_anonymous_3375_(PyJsArg_676c6f62616c_, this, arguments, var=var):
+ var = Scope({u'this':this, u'global':PyJsArg_676c6f62616c_, u'arguments':arguments}, var)
+ var.registers([u'global'])
+ pass
+ @Js
+ def PyJs_anonymous_3376_(root, this, arguments, var=var):
+ var = Scope({u'this':this, u'root':root, u'arguments':arguments}, var)
+ var.registers([u'singleEscapes', u'freeModule', u'freeGlobal', u'freeExports', u'isFunction', u'forOwn', u'toString', u'regexSingleEscape', u'jsesc', u'isSet', u'isArray', u'extend', u'object', u'hasOwnProperty', u'isNumber', u'isObject', u'regexDigit', u'isString', u'isMap', u'root', u'regexWhitelist', u'forEach'])
+ var.put(u'freeExports', ((var.get(u'exports',throw=False).typeof()==Js(u'object')) and var.get(u'exports')))
+ var.put(u'freeModule', ((((var.get(u'module',throw=False).typeof()==Js(u'object')) and var.get(u'module')) and (var.get(u'module').get(u'exports')==var.get(u'freeExports'))) and var.get(u'module')))
+ var.put(u'freeGlobal', ((var.get(u'global',throw=False).typeof()==Js(u'object')) and var.get(u'global')))
+ if (PyJsStrictEq(var.get(u'freeGlobal').get(u'global'),var.get(u'freeGlobal')) or PyJsStrictEq(var.get(u'freeGlobal').get(u'window'),var.get(u'freeGlobal'))):
+ var.put(u'root', var.get(u'freeGlobal'))
+ PyJs_Object_3377_ = Js({})
+ var.put(u'object', PyJs_Object_3377_)
+ var.put(u'hasOwnProperty', var.get(u'object').get(u'hasOwnProperty'))
+ @Js
+ def PyJs_anonymous_3378_(object, callback, this, arguments, var=var):
+ var = Scope({u'this':this, u'callback':callback, u'object':object, u'arguments':arguments}, var)
+ var.registers([u'callback', u'object', u'key'])
+ pass
+ for PyJsTemp in var.get(u'object'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'hasOwnProperty').callprop(u'call', var.get(u'object'), var.get(u'key')):
+ var.get(u'callback')(var.get(u'key'), var.get(u'object').get(var.get(u'key')))
+ PyJs_anonymous_3378_._set_name(u'anonymous')
+ var.put(u'forOwn', PyJs_anonymous_3378_)
+ @Js
+ def PyJs_anonymous_3379_(destination, source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'destination':destination, u'arguments':arguments}, var)
+ var.registers([u'source', u'destination'])
+ if var.get(u'source').neg():
+ return var.get(u'destination')
+ @Js
+ def PyJs_anonymous_3380_(key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'value', u'key'])
+ var.get(u'destination').put(var.get(u'key'), var.get(u'value'))
+ PyJs_anonymous_3380_._set_name(u'anonymous')
+ var.get(u'forOwn')(var.get(u'source'), PyJs_anonymous_3380_)
+ return var.get(u'destination')
+ PyJs_anonymous_3379_._set_name(u'anonymous')
+ var.put(u'extend', PyJs_anonymous_3379_)
+ @Js
+ def PyJs_anonymous_3381_(array, callback, this, arguments, var=var):
+ var = Scope({u'this':this, u'callback':callback, u'array':array, u'arguments':arguments}, var)
+ var.registers([u'index', u'length', u'array', u'callback'])
+ var.put(u'length', var.get(u'array').get(u'length'))
+ var.put(u'index', (-Js(1.0)))
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))=Js(55296)) and (var.get(u'first')<=Js(56319))) and (var.get(u'length')>(var.get(u'index')+Js(1.0)))):
+ var.put(u'second', var.get(u'string').callprop(u'charCodeAt', (var.get(u'index')+Js(1.0))))
+ if ((var.get(u'second')>=Js(56320)) and (var.get(u'second')<=Js(57343))):
+ var.put(u'codePoint', (((((var.get(u'first')-Js(55296))*Js(1024))+var.get(u'second'))-Js(56320))+Js(65536)))
+ var.put(u'hexadecimal', var.get(u'codePoint').callprop(u'toString', Js(16.0)))
+ if var.get(u'lowercaseHex').neg():
+ var.put(u'hexadecimal', var.get(u'hexadecimal').callprop(u'toUpperCase'))
+ var.put(u'result', ((Js(u'\\u{')+var.get(u'hexadecimal'))+Js(u'}')), u'+')
+ (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))-Js(1))
+ continue
+ if var.get(u'options').get(u'escapeEverything').neg():
+ if var.get(u'regexWhitelist').callprop(u'test', var.get(u'character')):
+ var.put(u'result', var.get(u'character'), u'+')
+ continue
+ if (var.get(u'character')==Js(u'"')):
+ var.put(u'result', (Js(u'\\"') if (var.get(u'quote')==var.get(u'character')) else var.get(u'character')), u'+')
+ continue
+ if (var.get(u'character')==Js(u"'")):
+ var.put(u'result', (Js(u"\\'") if (var.get(u'quote')==var.get(u'character')) else var.get(u'character')), u'+')
+ continue
+ if (((var.get(u'character')==Js(u'\x00')) and var.get(u'json').neg()) and var.get(u'regexDigit').callprop(u'test', var.get(u'string').callprop(u'charAt', (var.get(u'index')+Js(1.0)))).neg()):
+ var.put(u'result', Js(u'\\0'), u'+')
+ continue
+ if var.get(u'regexSingleEscape').callprop(u'test', var.get(u'character')):
+ var.put(u'result', var.get(u'singleEscapes').get(var.get(u'character')), u'+')
+ continue
+ var.put(u'charCode', var.get(u'character').callprop(u'charCodeAt', Js(0.0)))
+ var.put(u'hexadecimal', var.get(u'charCode').callprop(u'toString', Js(16.0)))
+ if var.get(u'lowercaseHex').neg():
+ var.put(u'hexadecimal', var.get(u'hexadecimal').callprop(u'toUpperCase'))
+ var.put(u'longhand', ((var.get(u'hexadecimal').get(u'length')>Js(2.0)) or var.get(u'json')))
+ var.put(u'escaped', ((Js(u'\\')+(Js(u'u') if var.get(u'longhand') else Js(u'x')))+(Js(u'0000')+var.get(u'hexadecimal')).callprop(u'slice', ((-Js(4.0)) if var.get(u'longhand') else (-Js(2.0))))))
+ var.put(u'result', var.get(u'escaped'), u'+')
+ continue
+ if var.get(u'options').get(u'wrap'):
+ var.put(u'result', ((var.get(u'quote')+var.get(u'result'))+var.get(u'quote')))
+ if var.get(u'options').get(u'escapeEtago'):
+ return var.get(u'result').callprop(u'replace', JsRegExp(u'/<\\/(script|style)/gi'), Js(u'<\\/$1'))
+ return var.get(u'result')
+ PyJs_anonymous_3390_._set_name(u'anonymous')
+ var.put(u'jsesc', PyJs_anonymous_3390_)
+ var.get(u'jsesc').put(u'version', Js(u'1.3.0'))
+ if (((var.get(u'define',throw=False).typeof()==Js(u'function')) and (var.get(u'define').get(u'amd').typeof()==Js(u'object'))) and var.get(u'define').get(u'amd')):
+ @Js
+ def PyJs_anonymous_3394_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'jsesc')
+ PyJs_anonymous_3394_._set_name(u'anonymous')
+ var.get(u'define')(PyJs_anonymous_3394_)
+ else:
+ if (var.get(u'freeExports') and var.get(u'freeExports').get(u'nodeType').neg()):
+ if var.get(u'freeModule'):
+ var.get(u'freeModule').put(u'exports', var.get(u'jsesc'))
+ else:
+ var.get(u'freeExports').put(u'jsesc', var.get(u'jsesc'))
+ else:
+ var.get(u'root').put(u'jsesc', var.get(u'jsesc'))
+ PyJs_anonymous_3376_._set_name(u'anonymous')
+ PyJs_anonymous_3376_(var.get(u"this"))
+ PyJs_anonymous_3375_._set_name(u'anonymous')
+ PyJs_anonymous_3375_.callprop(u'call', var.get(u"this"), (var.get(u'global') if PyJsStrictNeq(var.get(u'global',throw=False).typeof(),Js(u'undefined')) else (var.get(u'self') if PyJsStrictNeq(var.get(u'self',throw=False).typeof(),Js(u'undefined')) else (var.get(u'window') if PyJsStrictNeq(var.get(u'window',throw=False).typeof(),Js(u'undefined')) else PyJs_Object_3374_))))
+PyJs_anonymous_3373_._set_name(u'anonymous')
+PyJs_Object_3395_ = Js({})
+@Js
+def PyJs_anonymous_3396_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'JSON5', u'exports', u'require', u'module'])
+ PyJs_Object_3397_ = Js({})
+ var.put(u'JSON5', (var.get(u'exports') if PyJsStrictEq(var.get(u'exports',throw=False).typeof(),Js(u'object')) else PyJs_Object_3397_))
+ @Js
+ def PyJs_anonymous_3398_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'comment', u'ch', u'text', u'number', u'escapee', u'at', u'array', u'inlineComment', u'next', u'white', u'peek', u'string', u'blockComment', u'object', u'ws', u'lineNumber', u'columnNumber', u'word', u'value', u'error', u'identifier', u'renderChar'])
+ Js(u'use strict')
+ PyJs_Object_3399_ = Js({u"'":Js(u"'"),u'"':Js(u'"'),u'\\':Js(u'\\'),u'/':Js(u'/'),u'\n':Js(u''),u'b':Js(u'\x08'),u'f':Js(u'\x0c'),u'n':Js(u'\n'),u'r':Js(u'\r'),u't':Js(u'\t')})
+ var.put(u'escapee', PyJs_Object_3399_)
+ var.put(u'ws', Js([Js(u' '), Js(u'\t'), Js(u'\r'), Js(u'\n'), Js(u'\x0b'), Js(u'\x0c'), Js(u'\xa0'), Js(u'\ufeff')]))
+ @Js
+ def PyJs_anonymous_3400_(chr, this, arguments, var=var):
+ var = Scope({u'this':this, u'chr':chr, u'arguments':arguments}, var)
+ var.registers([u'chr'])
+ return (Js(u'EOF') if PyJsStrictEq(var.get(u'chr'),Js(u'')) else ((Js(u"'")+var.get(u'chr'))+Js(u"'")))
+ PyJs_anonymous_3400_._set_name(u'anonymous')
+ var.put(u'renderChar', PyJs_anonymous_3400_)
+ @Js
+ def PyJs_anonymous_3401_(m, this, arguments, var=var):
+ var = Scope({u'this':this, u'm':m, u'arguments':arguments}, var)
+ var.registers([u'm', u'error'])
+ var.put(u'error', var.get(u'SyntaxError').create())
+ var.get(u'error').put(u'message', ((((((var.get(u'm')+Js(u' at line '))+var.get(u'lineNumber'))+Js(u' column '))+var.get(u'columnNumber'))+Js(u' of the JSON5 data. Still to read: '))+var.get(u'JSON').callprop(u'stringify', var.get(u'text').callprop(u'substring', (var.get(u'at')-Js(1.0)), (var.get(u'at')+Js(19.0))))))
+ var.get(u'error').put(u'at', var.get(u'at'))
+ var.get(u'error').put(u'lineNumber', var.get(u'lineNumber'))
+ var.get(u'error').put(u'columnNumber', var.get(u'columnNumber'))
+ PyJsTempException = JsToPyException(var.get(u'error'))
+ raise PyJsTempException
+ PyJs_anonymous_3401_._set_name(u'anonymous')
+ var.put(u'error', PyJs_anonymous_3401_)
+ @Js
+ def PyJs_anonymous_3402_(c, this, arguments, var=var):
+ var = Scope({u'this':this, u'c':c, u'arguments':arguments}, var)
+ var.registers([u'c'])
+ if (var.get(u'c') and PyJsStrictNeq(var.get(u'c'),var.get(u'ch'))):
+ var.get(u'error')((((Js(u'Expected ')+var.get(u'renderChar')(var.get(u'c')))+Js(u' instead of '))+var.get(u'renderChar')(var.get(u'ch'))))
+ var.put(u'ch', var.get(u'text').callprop(u'charAt', var.get(u'at')))
+ (var.put(u'at',Js(var.get(u'at').to_number())+Js(1))-Js(1))
+ (var.put(u'columnNumber',Js(var.get(u'columnNumber').to_number())+Js(1))-Js(1))
+ if (PyJsStrictEq(var.get(u'ch'),Js(u'\n')) or (PyJsStrictEq(var.get(u'ch'),Js(u'\r')) and PyJsStrictNeq(var.get(u'peek')(),Js(u'\n')))):
+ (var.put(u'lineNumber',Js(var.get(u'lineNumber').to_number())+Js(1))-Js(1))
+ var.put(u'columnNumber', Js(0.0))
+ return var.get(u'ch')
+ PyJs_anonymous_3402_._set_name(u'anonymous')
+ var.put(u'next', PyJs_anonymous_3402_)
+ @Js
+ def PyJs_anonymous_3403_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'text').callprop(u'charAt', var.get(u'at'))
+ PyJs_anonymous_3403_._set_name(u'anonymous')
+ var.put(u'peek', PyJs_anonymous_3403_)
+ @Js
+ def PyJs_anonymous_3404_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'key'])
+ var.put(u'key', var.get(u'ch'))
+ if (((PyJsStrictNeq(var.get(u'ch'),Js(u'_')) and PyJsStrictNeq(var.get(u'ch'),Js(u'$'))) and ((var.get(u'ch')Js(u'z')))) and ((var.get(u'ch')Js(u'Z')))):
+ var.get(u'error')(Js(u'Bad identifier as unquoted key'))
+ while (var.get(u'next')() and ((((PyJsStrictEq(var.get(u'ch'),Js(u'_')) or PyJsStrictEq(var.get(u'ch'),Js(u'$'))) or ((var.get(u'ch')>=Js(u'a')) and (var.get(u'ch')<=Js(u'z')))) or ((var.get(u'ch')>=Js(u'A')) and (var.get(u'ch')<=Js(u'Z')))) or ((var.get(u'ch')>=Js(u'0')) and (var.get(u'ch')<=Js(u'9'))))):
+ var.put(u'key', var.get(u'ch'), u'+')
+ return var.get(u'key')
+ PyJs_anonymous_3404_._set_name(u'anonymous')
+ var.put(u'identifier', PyJs_anonymous_3404_)
+ @Js
+ def PyJs_anonymous_3405_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'base', u'number', u'string', u'sign'])
+ var.put(u'sign', Js(u''))
+ var.put(u'string', Js(u''))
+ var.put(u'base', Js(10.0))
+ if (PyJsStrictEq(var.get(u'ch'),Js(u'-')) or PyJsStrictEq(var.get(u'ch'),Js(u'+'))):
+ var.put(u'sign', var.get(u'ch'))
+ var.get(u'next')(var.get(u'ch'))
+ if PyJsStrictEq(var.get(u'ch'),Js(u'I')):
+ var.put(u'number', var.get(u'word')())
+ if (PyJsStrictNeq(var.get(u'number',throw=False).typeof(),Js(u'number')) or var.get(u'isNaN')(var.get(u'number'))):
+ var.get(u'error')(Js(u'Unexpected word for number'))
+ return ((-var.get(u'number')) if PyJsStrictEq(var.get(u'sign'),Js(u'-')) else var.get(u'number'))
+ if PyJsStrictEq(var.get(u'ch'),Js(u'N')):
+ var.put(u'number', var.get(u'word')())
+ if var.get(u'isNaN')(var.get(u'number')).neg():
+ var.get(u'error')(Js(u'expected word to be NaN'))
+ return var.get(u'number')
+ if PyJsStrictEq(var.get(u'ch'),Js(u'0')):
+ var.put(u'string', var.get(u'ch'), u'+')
+ var.get(u'next')()
+ if (PyJsStrictEq(var.get(u'ch'),Js(u'x')) or PyJsStrictEq(var.get(u'ch'),Js(u'X'))):
+ var.put(u'string', var.get(u'ch'), u'+')
+ var.get(u'next')()
+ var.put(u'base', Js(16.0))
+ else:
+ if ((var.get(u'ch')>=Js(u'0')) and (var.get(u'ch')<=Js(u'9'))):
+ var.get(u'error')(Js(u'Octal literal'))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'base'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(10.0)):
+ SWITCHED = True
+ while ((var.get(u'ch')>=Js(u'0')) and (var.get(u'ch')<=Js(u'9'))):
+ var.put(u'string', var.get(u'ch'), u'+')
+ var.get(u'next')()
+ if PyJsStrictEq(var.get(u'ch'),Js(u'.')):
+ var.put(u'string', Js(u'.'), u'+')
+ while ((var.get(u'next')() and (var.get(u'ch')>=Js(u'0'))) and (var.get(u'ch')<=Js(u'9'))):
+ var.put(u'string', var.get(u'ch'), u'+')
+ if (PyJsStrictEq(var.get(u'ch'),Js(u'e')) or PyJsStrictEq(var.get(u'ch'),Js(u'E'))):
+ var.put(u'string', var.get(u'ch'), u'+')
+ var.get(u'next')()
+ if (PyJsStrictEq(var.get(u'ch'),Js(u'-')) or PyJsStrictEq(var.get(u'ch'),Js(u'+'))):
+ var.put(u'string', var.get(u'ch'), u'+')
+ var.get(u'next')()
+ while ((var.get(u'ch')>=Js(u'0')) and (var.get(u'ch')<=Js(u'9'))):
+ var.put(u'string', var.get(u'ch'), u'+')
+ var.get(u'next')()
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(16.0)):
+ SWITCHED = True
+ while ((((var.get(u'ch')>=Js(u'0')) and (var.get(u'ch')<=Js(u'9'))) or ((var.get(u'ch')>=Js(u'A')) and (var.get(u'ch')<=Js(u'F')))) or ((var.get(u'ch')>=Js(u'a')) and (var.get(u'ch')<=Js(u'f')))):
+ var.put(u'string', var.get(u'ch'), u'+')
+ var.get(u'next')()
+ break
+ SWITCHED = True
+ break
+ if PyJsStrictEq(var.get(u'sign'),Js(u'-')):
+ var.put(u'number', (-var.get(u'string')))
+ else:
+ var.put(u'number', (+var.get(u'string')))
+ if var.get(u'isFinite')(var.get(u'number')).neg():
+ var.get(u'error')(Js(u'Bad number'))
+ else:
+ return var.get(u'number')
+ PyJs_anonymous_3405_._set_name(u'anonymous')
+ var.put(u'number', PyJs_anonymous_3405_)
+ @Js
+ def PyJs_anonymous_3406_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'delim', u'uffff', u'hex', u'string'])
+ var.put(u'string', Js(u''))
+ if (PyJsStrictEq(var.get(u'ch'),Js(u'"')) or PyJsStrictEq(var.get(u'ch'),Js(u"'"))):
+ var.put(u'delim', var.get(u'ch'))
+ while var.get(u'next')():
+ if PyJsStrictEq(var.get(u'ch'),var.get(u'delim')):
+ var.get(u'next')()
+ return var.get(u'string')
+ else:
+ if PyJsStrictEq(var.get(u'ch'),Js(u'\\')):
+ var.get(u'next')()
+ if PyJsStrictEq(var.get(u'ch'),Js(u'u')):
+ var.put(u'uffff', Js(0.0))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=Js(0.0)):
+ var.get(u'next')()
+ else:
+ return var.get('undefined')
+ PyJs_anonymous_3410_._set_name(u'anonymous')
+ var.put(u'white', PyJs_anonymous_3410_)
+ @Js
+ def PyJs_anonymous_3411_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'ch'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u't')):
+ SWITCHED = True
+ var.get(u'next')(Js(u't'))
+ var.get(u'next')(Js(u'r'))
+ var.get(u'next')(Js(u'u'))
+ var.get(u'next')(Js(u'e'))
+ return var.get(u'true')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'f')):
+ SWITCHED = True
+ var.get(u'next')(Js(u'f'))
+ var.get(u'next')(Js(u'a'))
+ var.get(u'next')(Js(u'l'))
+ var.get(u'next')(Js(u's'))
+ var.get(u'next')(Js(u'e'))
+ return Js(False)
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'n')):
+ SWITCHED = True
+ var.get(u'next')(Js(u'n'))
+ var.get(u'next')(Js(u'u'))
+ var.get(u'next')(Js(u'l'))
+ var.get(u'next')(Js(u'l'))
+ return var.get(u"null")
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'I')):
+ SWITCHED = True
+ var.get(u'next')(Js(u'I'))
+ var.get(u'next')(Js(u'n'))
+ var.get(u'next')(Js(u'f'))
+ var.get(u'next')(Js(u'i'))
+ var.get(u'next')(Js(u'n'))
+ var.get(u'next')(Js(u'i'))
+ var.get(u'next')(Js(u't'))
+ var.get(u'next')(Js(u'y'))
+ return var.get(u'Infinity')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'N')):
+ SWITCHED = True
+ var.get(u'next')(Js(u'N'))
+ var.get(u'next')(Js(u'a'))
+ var.get(u'next')(Js(u'N'))
+ return var.get(u'NaN')
+ SWITCHED = True
+ break
+ var.get(u'error')((Js(u'Unexpected ')+var.get(u'renderChar')(var.get(u'ch'))))
+ PyJs_anonymous_3411_._set_name(u'anonymous')
+ var.put(u'word', PyJs_anonymous_3411_)
+ @Js
+ def PyJs_anonymous_3412_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'array'])
+ var.put(u'array', Js([]))
+ if PyJsStrictEq(var.get(u'ch'),Js(u'[')):
+ var.get(u'next')(Js(u'['))
+ var.get(u'white')()
+ while var.get(u'ch'):
+ if PyJsStrictEq(var.get(u'ch'),Js(u']')):
+ var.get(u'next')(Js(u']'))
+ return var.get(u'array')
+ if PyJsStrictEq(var.get(u'ch'),Js(u',')):
+ var.get(u'error')(Js(u'Missing array element'))
+ else:
+ var.get(u'array').callprop(u'push', var.get(u'value')())
+ var.get(u'white')()
+ if PyJsStrictNeq(var.get(u'ch'),Js(u',')):
+ var.get(u'next')(Js(u']'))
+ return var.get(u'array')
+ var.get(u'next')(Js(u','))
+ var.get(u'white')()
+ var.get(u'error')(Js(u'Bad array'))
+ PyJs_anonymous_3412_._set_name(u'anonymous')
+ var.put(u'array', PyJs_anonymous_3412_)
+ @Js
+ def PyJs_anonymous_3413_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'object', u'key'])
+ PyJs_Object_3414_ = Js({})
+ var.put(u'object', PyJs_Object_3414_)
+ if PyJsStrictEq(var.get(u'ch'),Js(u'{')):
+ var.get(u'next')(Js(u'{'))
+ var.get(u'white')()
+ while var.get(u'ch'):
+ if PyJsStrictEq(var.get(u'ch'),Js(u'}')):
+ var.get(u'next')(Js(u'}'))
+ return var.get(u'object')
+ if (PyJsStrictEq(var.get(u'ch'),Js(u'"')) or PyJsStrictEq(var.get(u'ch'),Js(u"'"))):
+ var.put(u'key', var.get(u'string')())
+ else:
+ var.put(u'key', var.get(u'identifier')())
+ var.get(u'white')()
+ var.get(u'next')(Js(u':'))
+ var.get(u'object').put(var.get(u'key'), var.get(u'value')())
+ var.get(u'white')()
+ if PyJsStrictNeq(var.get(u'ch'),Js(u',')):
+ var.get(u'next')(Js(u'}'))
+ return var.get(u'object')
+ var.get(u'next')(Js(u','))
+ var.get(u'white')()
+ var.get(u'error')(Js(u'Bad object'))
+ PyJs_anonymous_3413_._set_name(u'anonymous')
+ var.put(u'object', PyJs_anonymous_3413_)
+ @Js
+ def PyJs_anonymous_3415_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u'white')()
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'ch'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'{')):
+ SWITCHED = True
+ return var.get(u'object')()
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'[')):
+ SWITCHED = True
+ return var.get(u'array')()
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'"')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u"'")):
+ SWITCHED = True
+ return var.get(u'string')()
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'-')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'+')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'.')):
+ SWITCHED = True
+ return var.get(u'number')()
+ if True:
+ SWITCHED = True
+ return (var.get(u'number')() if ((var.get(u'ch')>=Js(u'0')) and (var.get(u'ch')<=Js(u'9'))) else var.get(u'word')())
+ SWITCHED = True
+ break
+ PyJs_anonymous_3415_._set_name(u'anonymous')
+ var.put(u'value', PyJs_anonymous_3415_)
+ @Js
+ def PyJs_anonymous_3416_(source, reviver, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'reviver':reviver, u'arguments':arguments}, var)
+ var.registers([u'source', u'reviver', u'result'])
+ pass
+ var.put(u'text', var.get(u'String')(var.get(u'source')))
+ var.put(u'at', Js(0.0))
+ var.put(u'lineNumber', Js(1.0))
+ var.put(u'columnNumber', Js(1.0))
+ var.put(u'ch', Js(u' '))
+ var.put(u'result', var.get(u'value')())
+ var.get(u'white')()
+ if var.get(u'ch'):
+ var.get(u'error')(Js(u'Syntax error'))
+ PyJs_Object_3417_ = Js({u'':var.get(u'result')})
+ @Js
+ def PyJs_walk_3418_(holder, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'holder':holder, u'arguments':arguments, u'key':key, u'walk':PyJs_walk_3418_}, var)
+ var.registers([u'k', u'holder', u'key', u'value', u'v'])
+ var.put(u'value', var.get(u'holder').get(var.get(u'key')))
+ if (var.get(u'value') and PyJsStrictEq(var.get(u'value',throw=False).typeof(),Js(u'object'))):
+ for PyJsTemp in var.get(u'value'):
+ var.put(u'k', PyJsTemp)
+ if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'value'), var.get(u'k')):
+ var.put(u'v', var.get(u'walk')(var.get(u'value'), var.get(u'k')))
+ if PyJsStrictNeq(var.get(u'v'),var.get(u'undefined')):
+ var.get(u'value').put(var.get(u'k'), var.get(u'v'))
+ else:
+ var.get(u'value').delete(var.get(u'k'))
+ return var.get(u'reviver').callprop(u'call', var.get(u'holder'), var.get(u'key'), var.get(u'value'))
+ PyJs_walk_3418_._set_name(u'walk')
+ return (PyJs_walk_3418_(PyJs_Object_3417_, Js(u'')) if PyJsStrictEq(var.get(u'reviver',throw=False).typeof(),Js(u'function')) else var.get(u'result'))
+ PyJs_anonymous_3416_._set_name(u'anonymous')
+ return PyJs_anonymous_3416_
+ PyJs_anonymous_3398_._set_name(u'anonymous')
+ var.get(u'JSON5').put(u'parse', PyJs_anonymous_3398_())
+ @Js
+ def PyJs_anonymous_3419_(obj, replacer, space, this, arguments, var=var):
+ var = Scope({u'this':this, u'replacer':replacer, u'obj':obj, u'arguments':arguments, u'space':space}, var)
+ var.registers([u'isArray', u'topLevelHolder', u'isDate', u'escapeString', u'space', u'internalStringify', u'objStack', u'replacer', u'escapable', u'cx', u'meta', u'checkForCircular', u'isWordChar', u'isWordStart', u'obj', u'makeIndent', u'indentStr', u'isWord', u'getReplacedValueOrUndefined'])
+ @Js
+ def PyJsHoisted_isArray_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ if var.get(u'Array').get(u'isArray'):
+ return var.get(u'Array').callprop(u'isArray', var.get(u'obj'))
+ else:
+ return PyJsStrictEq(var.get(u'Object').get(u'prototype').get(u'toString').callprop(u'call', var.get(u'obj')),Js(u'[object Array]'))
+ PyJsHoisted_isArray_.func_name = u'isArray'
+ var.put(u'isArray', PyJsHoisted_isArray_)
+ @Js
+ def PyJsHoisted_isDate_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ return PyJsStrictEq(var.get(u'Object').get(u'prototype').get(u'toString').callprop(u'call', var.get(u'obj')),Js(u'[object Date]'))
+ PyJsHoisted_isDate_.func_name = u'isDate'
+ var.put(u'isDate', PyJsHoisted_isDate_)
+ @Js
+ def PyJsHoisted_escapeString_(string, this, arguments, var=var):
+ var = Scope({u'this':this, u'string':string, u'arguments':arguments}, var)
+ var.registers([u'string'])
+ var.get(u'escapable').put(u'lastIndex', Js(0.0))
+ @Js
+ def PyJs_anonymous_3422_(a, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'a', u'c'])
+ var.put(u'c', var.get(u'meta').get(var.get(u'a')))
+ return (var.get(u'c') if PyJsStrictEq(var.get(u'c',throw=False).typeof(),Js(u'string')) else (Js(u'\\u')+(Js(u'0000')+var.get(u'a').callprop(u'charCodeAt', Js(0.0)).callprop(u'toString', Js(16.0))).callprop(u'slice', (-Js(4.0)))))
+ PyJs_anonymous_3422_._set_name(u'anonymous')
+ return (((Js(u'"')+var.get(u'string').callprop(u'replace', var.get(u'escapable'), PyJs_anonymous_3422_))+Js(u'"')) if var.get(u'escapable').callprop(u'test', var.get(u'string')) else ((Js(u'"')+var.get(u'string'))+Js(u'"')))
+ PyJsHoisted_escapeString_.func_name = u'escapeString'
+ var.put(u'escapeString', PyJsHoisted_escapeString_)
+ @Js
+ def PyJsHoisted_internalStringify_(holder, key, isTopLevel, this, arguments, var=var):
+ var = Scope({u'this':this, u'isTopLevel':isTopLevel, u'holder':holder, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'i', u'buffer', u'res', u'value', u'prop', u'nonEmpty', u'key', u'isTopLevel', u'holder', u'obj_part'])
+ pass
+ var.put(u'obj_part', var.get(u'getReplacedValueOrUndefined')(var.get(u'holder'), var.get(u'key'), var.get(u'isTopLevel')))
+ if (var.get(u'obj_part') and var.get(u'isDate')(var.get(u'obj_part')).neg()):
+ var.put(u'obj_part', var.get(u'obj_part').callprop(u'valueOf'))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'obj_part',throw=False).typeof())
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'boolean')):
+ SWITCHED = True
+ return var.get(u'obj_part').callprop(u'toString')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'number')):
+ SWITCHED = True
+ if (var.get(u'isNaN')(var.get(u'obj_part')) or var.get(u'isFinite')(var.get(u'obj_part')).neg()):
+ return Js(u'null')
+ return var.get(u'obj_part').callprop(u'toString')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'string')):
+ SWITCHED = True
+ return var.get(u'escapeString')(var.get(u'obj_part').callprop(u'toString'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'object')):
+ SWITCHED = True
+ if PyJsStrictEq(var.get(u'obj_part'),var.get(u"null")):
+ return Js(u'null')
+ else:
+ if var.get(u'isArray')(var.get(u'obj_part')):
+ var.get(u'checkForCircular')(var.get(u'obj_part'))
+ var.put(u'buffer', Js(u'['))
+ var.get(u'objStack').callprop(u'push', var.get(u'obj_part'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=Js(u'a')) and (var.get(u'c')<=Js(u'z'))) or ((var.get(u'c')>=Js(u'A')) and (var.get(u'c')<=Js(u'Z')))) or ((var.get(u'c')>=Js(u'0')) and (var.get(u'c')<=Js(u'9')))) or PyJsStrictEq(var.get(u'c'),Js(u'_'))) or PyJsStrictEq(var.get(u'c'),Js(u'$')))
+ PyJsHoisted_isWordChar_.func_name = u'isWordChar'
+ var.put(u'isWordChar', PyJsHoisted_isWordChar_)
+ @Js
+ def PyJsHoisted_isWordStart_(c, this, arguments, var=var):
+ var = Scope({u'this':this, u'c':c, u'arguments':arguments}, var)
+ var.registers([u'c'])
+ return (((((var.get(u'c')>=Js(u'a')) and (var.get(u'c')<=Js(u'z'))) or ((var.get(u'c')>=Js(u'A')) and (var.get(u'c')<=Js(u'Z')))) or PyJsStrictEq(var.get(u'c'),Js(u'_'))) or PyJsStrictEq(var.get(u'c'),Js(u'$')))
+ PyJsHoisted_isWordStart_.func_name = u'isWordStart'
+ var.put(u'isWordStart', PyJsHoisted_isWordStart_)
+ @Js
+ def PyJsHoisted_makeIndent_(str, num, noNewLine, this, arguments, var=var):
+ var = Scope({u'this':this, u'num':num, u'noNewLine':noNewLine, u'str':str, u'arguments':arguments}, var)
+ var.registers([u'i', u'num', u'indent', u'noNewLine', u'str'])
+ if var.get(u'str').neg():
+ return Js(u'')
+ if (var.get(u'str').get(u'length')>Js(10.0)):
+ var.put(u'str', var.get(u'str').callprop(u'substring', Js(0.0), Js(10.0)))
+ var.put(u'indent', (Js(u'') if var.get(u'noNewLine') else Js(u'\n')))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=Js(0.0))):
+ return var.get(u'value')
+ else:
+ return var.get(u'undefined')
+ else:
+ return var.get(u'value')
+ PyJs_anonymous_3420_._set_name(u'anonymous')
+ var.put(u'getReplacedValueOrUndefined', PyJs_anonymous_3420_)
+ pass
+ pass
+ pass
+ var.get(u'JSON5').put(u'isWord', var.get(u'isWord'))
+ pass
+ pass
+ var.put(u'objStack', Js([]))
+ pass
+ pass
+ pass
+ if var.get(u'space'):
+ if PyJsStrictEq(var.get(u'space',throw=False).typeof(),Js(u'string')):
+ var.put(u'indentStr', var.get(u'space'))
+ else:
+ if (PyJsStrictEq(var.get(u'space',throw=False).typeof(),Js(u'number')) and (var.get(u'space')>=Js(0.0))):
+ var.put(u'indentStr', var.get(u'makeIndent')(Js(u' '), var.get(u'space'), var.get(u'true')))
+ else:
+ pass
+ var.put(u'cx', JsRegExp(u'/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g'))
+ var.put(u'escapable', JsRegExp(u'/[\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g'))
+ PyJs_Object_3421_ = Js({u'\x08':Js(u'\\b'),u'\t':Js(u'\\t'),u'\n':Js(u'\\n'),u'\x0c':Js(u'\\f'),u'\r':Js(u'\\r'),u'"':Js(u'\\"'),u'\\':Js(u'\\\\')})
+ var.put(u'meta', PyJs_Object_3421_)
+ pass
+ pass
+ PyJs_Object_3423_ = Js({u'':var.get(u'obj')})
+ var.put(u'topLevelHolder', PyJs_Object_3423_)
+ if PyJsStrictEq(var.get(u'obj'),var.get(u'undefined')):
+ return var.get(u'getReplacedValueOrUndefined')(var.get(u'topLevelHolder'), Js(u''), var.get(u'true'))
+ return var.get(u'internalStringify')(var.get(u'topLevelHolder'), Js(u''), var.get(u'true'))
+ PyJs_anonymous_3419_._set_name(u'anonymous')
+ var.get(u'JSON5').put(u'stringify', PyJs_anonymous_3419_)
+PyJs_anonymous_3396_._set_name(u'anonymous')
+PyJs_Object_3424_ = Js({})
+@Js
+def PyJs_anonymous_3425_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'DataView', u'module', u'getNative', u'root'])
+ var.put(u'getNative', var.get(u'require')(Js(u'./_getNative')))
+ var.put(u'root', var.get(u'require')(Js(u'./_root')))
+ var.put(u'DataView', var.get(u'getNative')(var.get(u'root'), Js(u'DataView')))
+ var.get(u'module').put(u'exports', var.get(u'DataView'))
+PyJs_anonymous_3425_._set_name(u'anonymous')
+PyJs_Object_3426_ = Js({u'./_getNative':Js(382.0),u'./_root':Js(422.0)})
+@Js
+def PyJs_anonymous_3427_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'hashGet', u'Hash', u'hashClear', u'hashSet', u'require', u'module', u'hashDelete', u'hashHas'])
+ @Js
+ def PyJsHoisted_Hash_(entries, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'entries':entries}, var)
+ var.registers([u'index', u'length', u'entries', u'entry'])
+ var.put(u'index', (-Js(1.0)))
+ var.put(u'length', (var.get(u'entries').get(u'length') if var.get(u'entries') else Js(0.0)))
+ var.get(u"this").callprop(u'clear')
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))(-Js(1.0))))
+ PyJsHoisted_arrayIncludes_.func_name = u'arrayIncludes'
+ var.put(u'arrayIncludes', PyJsHoisted_arrayIncludes_)
+ var.put(u'baseIndexOf', var.get(u'require')(Js(u'./_baseIndexOf')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'arrayIncludes'))
+PyJs_anonymous_3459_._set_name(u'anonymous')
+PyJs_Object_3460_ = Js({u'./_baseIndexOf':Js(325.0)})
+@Js
+def PyJs_anonymous_3461_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'arrayIncludesWith', u'module'])
+ @Js
+ def PyJsHoisted_arrayIncludesWith_(array, value, comparator, this, arguments, var=var):
+ var = Scope({u'this':this, u'array':array, u'comparator':comparator, u'value':value, u'arguments':arguments}, var)
+ var.registers([u'index', u'length', u'array', u'value', u'comparator'])
+ var.put(u'index', (-Js(1.0)))
+ var.put(u'length', (var.get(u'array').get(u'length') if var.get(u'array') else Js(0.0)))
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))=var.get(u'lower')) else var.get(u'lower')))
+ return var.get(u'number')
+ PyJsHoisted_baseClamp_.func_name = u'baseClamp'
+ var.put(u'baseClamp', PyJsHoisted_baseClamp_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'baseClamp'))
+PyJs_anonymous_3481_._set_name(u'anonymous')
+PyJs_Object_3482_ = Js({})
+@Js
+def PyJs_anonymous_3483_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'genTag', u'arrayTag', u'initCloneObject', u'uint32Tag', u'arrayBufferTag', u'objectTag', u'dataViewTag', u'regexpTag', u'copyArray', u'int8Tag', u'uint16Tag', u'errorTag', u'float64Tag', u'isBuffer', u'baseClone', u'assignValue', u'mapTag', u'cloneableTags', u'boolTag', u'arrayEach', u'initCloneByTag', u'funcTag', u'getAllKeys', u'float32Tag', u'cloneBuffer', u'Stack', u'argsTag', u'isArray', u'exports', u'dateTag', u'int16Tag', u'copySymbols', u'keys', u'stringTag', u'numberTag', u'module', u'getTag', u'isObject', u'uint8Tag', u'initCloneArray', u'isHostObject', u'require', u'baseAssign', u'uint8ClampedTag', u'weakMapTag', u'setTag', u'int32Tag', u'symbolTag'])
+ @Js
+ def PyJsHoisted_baseClone_(value, isDeep, isFull, customizer, key, object, stack, this, arguments, var=var):
+ var = Scope({u'this':this, u'isFull':isFull, u'object':object, u'value':value, u'isDeep':isDeep, u'arguments':arguments, u'key':key, u'customizer':customizer, u'stack':stack}, var)
+ var.registers([u'stacked', u'isFull', u'object', u'isFunc', u'value', u'tag', u'isDeep', u'result', u'key', u'props', u'customizer', u'isArr', u'stack'])
+ pass
+ if var.get(u'customizer'):
+ var.put(u'result', (var.get(u'customizer')(var.get(u'value'), var.get(u'key'), var.get(u'object'), var.get(u'stack')) if var.get(u'object') else var.get(u'customizer')(var.get(u'value'))))
+ if PyJsStrictNeq(var.get(u'result'),var.get(u'undefined')):
+ return var.get(u'result')
+ if var.get(u'isObject')(var.get(u'value')).neg():
+ return var.get(u'value')
+ var.put(u'isArr', var.get(u'isArray')(var.get(u'value')))
+ if var.get(u'isArr'):
+ var.put(u'result', var.get(u'initCloneArray')(var.get(u'value')))
+ if var.get(u'isDeep').neg():
+ return var.get(u'copyArray')(var.get(u'value'), var.get(u'result'))
+ else:
+ var.put(u'tag', var.get(u'getTag')(var.get(u'value')))
+ var.put(u'isFunc', ((var.get(u'tag')==var.get(u'funcTag')) or (var.get(u'tag')==var.get(u'genTag'))))
+ if var.get(u'isBuffer')(var.get(u'value')):
+ return var.get(u'cloneBuffer')(var.get(u'value'), var.get(u'isDeep'))
+ if (((var.get(u'tag')==var.get(u'objectTag')) or (var.get(u'tag')==var.get(u'argsTag'))) or (var.get(u'isFunc') and var.get(u'object').neg())):
+ if var.get(u'isHostObject')(var.get(u'value')):
+ PyJs_Object_3487_ = Js({})
+ return (var.get(u'value') if var.get(u'object') else PyJs_Object_3487_)
+ PyJs_Object_3488_ = Js({})
+ var.put(u'result', var.get(u'initCloneObject')((PyJs_Object_3488_ if var.get(u'isFunc') else var.get(u'value'))))
+ if var.get(u'isDeep').neg():
+ return var.get(u'copySymbols')(var.get(u'value'), var.get(u'baseAssign')(var.get(u'result'), var.get(u'value')))
+ else:
+ if var.get(u'cloneableTags').get(var.get(u'tag')).neg():
+ PyJs_Object_3489_ = Js({})
+ return (var.get(u'value') if var.get(u'object') else PyJs_Object_3489_)
+ var.put(u'result', var.get(u'initCloneByTag')(var.get(u'value'), var.get(u'tag'), var.get(u'baseClone'), var.get(u'isDeep')))
+ (var.get(u'stack') or var.put(u'stack', var.get(u'Stack').create()))
+ var.put(u'stacked', var.get(u'stack').callprop(u'get', var.get(u'value')))
+ if var.get(u'stacked'):
+ return var.get(u'stacked')
+ var.get(u'stack').callprop(u'set', var.get(u'value'), var.get(u'result'))
+ if var.get(u'isArr').neg():
+ var.put(u'props', (var.get(u'getAllKeys')(var.get(u'value')) if var.get(u'isFull') else var.get(u'keys')(var.get(u'value'))))
+ @Js
+ def PyJs_anonymous_3490_(subValue, key, this, arguments, var=var):
+ var = Scope({u'this':this, u'subValue':subValue, u'arguments':arguments, u'key':key}, var)
+ var.registers([u'subValue', u'key'])
+ if var.get(u'props'):
+ var.put(u'key', var.get(u'subValue'))
+ var.put(u'subValue', var.get(u'value').get(var.get(u'key')))
+ var.get(u'assignValue')(var.get(u'result'), var.get(u'key'), var.get(u'baseClone')(var.get(u'subValue'), var.get(u'isDeep'), var.get(u'isFull'), var.get(u'customizer'), var.get(u'key'), var.get(u'value'), var.get(u'stack')))
+ PyJs_anonymous_3490_._set_name(u'anonymous')
+ var.get(u'arrayEach')((var.get(u'props') or var.get(u'value')), PyJs_anonymous_3490_)
+ return var.get(u'result')
+ PyJsHoisted_baseClone_.func_name = u'baseClone'
+ var.put(u'baseClone', PyJsHoisted_baseClone_)
+ var.put(u'Stack', var.get(u'require')(Js(u'./_Stack')))
+ var.put(u'arrayEach', var.get(u'require')(Js(u'./_arrayEach')))
+ var.put(u'assignValue', var.get(u'require')(Js(u'./_assignValue')))
+ var.put(u'baseAssign', var.get(u'require')(Js(u'./_baseAssign')))
+ var.put(u'cloneBuffer', var.get(u'require')(Js(u'./_cloneBuffer')))
+ var.put(u'copyArray', var.get(u'require')(Js(u'./_copyArray')))
+ var.put(u'copySymbols', var.get(u'require')(Js(u'./_copySymbols')))
+ var.put(u'getAllKeys', var.get(u'require')(Js(u'./_getAllKeys')))
+ var.put(u'getTag', var.get(u'require')(Js(u'./_getTag')))
+ var.put(u'initCloneArray', var.get(u'require')(Js(u'./_initCloneArray')))
+ var.put(u'initCloneByTag', var.get(u'require')(Js(u'./_initCloneByTag')))
+ var.put(u'initCloneObject', var.get(u'require')(Js(u'./_initCloneObject')))
+ var.put(u'isArray', var.get(u'require')(Js(u'./isArray')))
+ var.put(u'isBuffer', var.get(u'require')(Js(u'./isBuffer')))
+ var.put(u'isHostObject', var.get(u'require')(Js(u'./_isHostObject')))
+ var.put(u'isObject', var.get(u'require')(Js(u'./isObject')))
+ var.put(u'keys', var.get(u'require')(Js(u'./keys')))
+ var.put(u'argsTag', Js(u'[object Arguments]'))
+ var.put(u'arrayTag', Js(u'[object Array]'))
+ var.put(u'boolTag', Js(u'[object Boolean]'))
+ var.put(u'dateTag', Js(u'[object Date]'))
+ var.put(u'errorTag', Js(u'[object Error]'))
+ var.put(u'funcTag', Js(u'[object Function]'))
+ var.put(u'genTag', Js(u'[object GeneratorFunction]'))
+ var.put(u'mapTag', Js(u'[object Map]'))
+ var.put(u'numberTag', Js(u'[object Number]'))
+ var.put(u'objectTag', Js(u'[object Object]'))
+ var.put(u'regexpTag', Js(u'[object RegExp]'))
+ var.put(u'setTag', Js(u'[object Set]'))
+ var.put(u'stringTag', Js(u'[object String]'))
+ var.put(u'symbolTag', Js(u'[object Symbol]'))
+ var.put(u'weakMapTag', Js(u'[object WeakMap]'))
+ var.put(u'arrayBufferTag', Js(u'[object ArrayBuffer]'))
+ var.put(u'dataViewTag', Js(u'[object DataView]'))
+ var.put(u'float32Tag', Js(u'[object Float32Array]'))
+ var.put(u'float64Tag', Js(u'[object Float64Array]'))
+ var.put(u'int8Tag', Js(u'[object Int8Array]'))
+ var.put(u'int16Tag', Js(u'[object Int16Array]'))
+ var.put(u'int32Tag', Js(u'[object Int32Array]'))
+ var.put(u'uint8Tag', Js(u'[object Uint8Array]'))
+ var.put(u'uint8ClampedTag', Js(u'[object Uint8ClampedArray]'))
+ var.put(u'uint16Tag', Js(u'[object Uint16Array]'))
+ var.put(u'uint32Tag', Js(u'[object Uint32Array]'))
+ PyJs_Object_3484_ = Js({})
+ var.put(u'cloneableTags', PyJs_Object_3484_)
+ def PyJs_LONG_3486_(var=var):
+ def PyJs_LONG_3485_(var=var):
+ return var.get(u'cloneableTags').put(var.get(u'regexpTag'), var.get(u'cloneableTags').put(var.get(u'setTag'), var.get(u'cloneableTags').put(var.get(u'stringTag'), var.get(u'cloneableTags').put(var.get(u'symbolTag'), var.get(u'cloneableTags').put(var.get(u'uint8Tag'), var.get(u'cloneableTags').put(var.get(u'uint8ClampedTag'), var.get(u'cloneableTags').put(var.get(u'uint16Tag'), var.get(u'cloneableTags').put(var.get(u'uint32Tag'), var.get(u'true')))))))))
+ return var.get(u'cloneableTags').put(var.get(u'float32Tag'), var.get(u'cloneableTags').put(var.get(u'float64Tag'), var.get(u'cloneableTags').put(var.get(u'int8Tag'), var.get(u'cloneableTags').put(var.get(u'int16Tag'), var.get(u'cloneableTags').put(var.get(u'int32Tag'), var.get(u'cloneableTags').put(var.get(u'mapTag'), var.get(u'cloneableTags').put(var.get(u'numberTag'), var.get(u'cloneableTags').put(var.get(u'objectTag'), PyJs_LONG_3485_()))))))))
+ var.get(u'cloneableTags').put(var.get(u'argsTag'), var.get(u'cloneableTags').put(var.get(u'arrayTag'), var.get(u'cloneableTags').put(var.get(u'arrayBufferTag'), var.get(u'cloneableTags').put(var.get(u'dataViewTag'), var.get(u'cloneableTags').put(var.get(u'boolTag'), var.get(u'cloneableTags').put(var.get(u'dateTag'), PyJs_LONG_3486_()))))))
+ var.get(u'cloneableTags').put(var.get(u'errorTag'), var.get(u'cloneableTags').put(var.get(u'funcTag'), var.get(u'cloneableTags').put(var.get(u'weakMapTag'), Js(False))))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'baseClone'))
+PyJs_anonymous_3483_._set_name(u'anonymous')
+PyJs_Object_3491_ = Js({u'./_Stack':Js(294.0),u'./_arrayEach':Js(301.0),u'./_assignValue':Js(310.0),u'./_baseAssign':Js(312.0),u'./_cloneBuffer':Js(357.0),u'./_copyArray':Js(366.0),u'./_copySymbols':Js(368.0),u'./_getAllKeys':Js(378.0),u'./_getTag':Js(385.0),u'./_initCloneArray':Js(395.0),u'./_initCloneByTag':Js(396.0),u'./_initCloneObject':Js(397.0),u'./_isHostObject':Js(400.0),u'./isArray':Js(458.0),u'./isBuffer':Js(462.0),u'./isObject':Js(467.0),u'./keys':Js(474.0)})
+@Js
+def PyJs_anonymous_3492_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'objectCreate', u'require', u'module', u'baseCreate', u'isObject'])
+ @Js
+ def PyJsHoisted_baseCreate_(proto, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'proto':proto}, var)
+ var.registers([u'proto'])
+ PyJs_Object_3493_ = Js({})
+ return (var.get(u'objectCreate')(var.get(u'proto')) if var.get(u'isObject')(var.get(u'proto')) else PyJs_Object_3493_)
+ PyJsHoisted_baseCreate_.func_name = u'baseCreate'
+ var.put(u'baseCreate', PyJsHoisted_baseCreate_)
+ var.put(u'isObject', var.get(u'require')(Js(u'./isObject')))
+ var.put(u'objectCreate', var.get(u'Object').get(u'create'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'baseCreate'))
+PyJs_anonymous_3492_._set_name(u'anonymous')
+PyJs_Object_3494_ = Js({u'./isObject':Js(467.0)})
+@Js
+def PyJs_anonymous_3495_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'baseEach', u'exports', u'baseForOwn', u'module', u'createBaseEach', u'require'])
+ var.put(u'baseForOwn', var.get(u'require')(Js(u'./_baseForOwn')))
+ var.put(u'createBaseEach', var.get(u'require')(Js(u'./_createBaseEach')))
+ var.put(u'baseEach', var.get(u'createBaseEach')(var.get(u'baseForOwn')))
+ var.get(u'module').put(u'exports', var.get(u'baseEach'))
+PyJs_anonymous_3495_._set_name(u'anonymous')
+PyJs_Object_3496_ = Js({u'./_baseForOwn':Js(320.0),u'./_createBaseEach':Js(371.0)})
+@Js
+def PyJs_anonymous_3497_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module', u'baseFindIndex'])
+ @Js
+ def PyJsHoisted_baseFindIndex_(array, predicate, fromIndex, fromRight, this, arguments, var=var):
+ var = Scope({u'predicate':predicate, u'arguments':arguments, u'this':this, u'array':array, u'fromIndex':fromIndex, u'fromRight':fromRight}, var)
+ var.registers([u'index', u'predicate', u'fromIndex', u'fromRight', u'length', u'array'])
+ var.put(u'length', var.get(u'array').get(u'length'))
+ var.put(u'index', (var.get(u'fromIndex')+(Js(1.0) if var.get(u'fromRight') else (-Js(1.0)))))
+ while ((var.put(u'index',Js(var.get(u'index').to_number())-Js(1))+Js(1)) if var.get(u'fromRight') else (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))Js(0.0)) and var.get(u'predicate')(var.get(u'value'))):
+ if (var.get(u'depth')>Js(1.0)):
+ var.get(u'baseFlatten')(var.get(u'value'), (var.get(u'depth')-Js(1.0)), var.get(u'predicate'), var.get(u'isStrict'), var.get(u'result'))
+ else:
+ var.get(u'arrayPush')(var.get(u'result'), var.get(u'value'))
+ else:
+ if var.get(u'isStrict').neg():
+ var.get(u'result').put(var.get(u'result').get(u'length'), var.get(u'value'))
+ return var.get(u'result')
+ PyJsHoisted_baseFlatten_.func_name = u'baseFlatten'
+ var.put(u'baseFlatten', PyJsHoisted_baseFlatten_)
+ var.put(u'arrayPush', var.get(u'require')(Js(u'./_arrayPush')))
+ var.put(u'isFlattenable', var.get(u'require')(Js(u'./_isFlattenable')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'baseFlatten'))
+PyJs_anonymous_3499_._set_name(u'anonymous')
+PyJs_Object_3500_ = Js({u'./_arrayPush':Js(305.0),u'./_isFlattenable':Js(398.0)})
+@Js
+def PyJs_anonymous_3501_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'createBaseFor', u'require', u'exports', u'module', u'baseFor'])
+ var.put(u'createBaseFor', var.get(u'require')(Js(u'./_createBaseFor')))
+ var.put(u'baseFor', var.get(u'createBaseFor')())
+ var.get(u'module').put(u'exports', var.get(u'baseFor'))
+PyJs_anonymous_3501_._set_name(u'anonymous')
+PyJs_Object_3502_ = Js({u'./_createBaseFor':Js(372.0)})
+@Js
+def PyJs_anonymous_3503_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'baseFor', u'keys', u'baseForOwn', u'module', u'require'])
+ @Js
+ def PyJsHoisted_baseForOwn_(object, iteratee, this, arguments, var=var):
+ var = Scope({u'this':this, u'object':object, u'arguments':arguments, u'iteratee':iteratee}, var)
+ var.registers([u'object', u'iteratee'])
+ return (var.get(u'object') and var.get(u'baseFor')(var.get(u'object'), var.get(u'iteratee'), var.get(u'keys')))
+ PyJsHoisted_baseForOwn_.func_name = u'baseForOwn'
+ var.put(u'baseForOwn', PyJsHoisted_baseForOwn_)
+ var.put(u'baseFor', var.get(u'require')(Js(u'./_baseFor')))
+ var.put(u'keys', var.get(u'require')(Js(u'./keys')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'baseForOwn'))
+PyJs_anonymous_3503_._set_name(u'anonymous')
+PyJs_Object_3504_ = Js({u'./_baseFor':Js(319.0),u'./keys':Js(474.0)})
+@Js
+def PyJs_anonymous_3505_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'toKey', u'isKey', u'require', u'module', u'castPath', u'baseGet'])
+ @Js
+ def PyJsHoisted_baseGet_(object, path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'object':object, u'arguments':arguments}, var)
+ var.registers([u'index', u'length', u'object', u'path'])
+ var.put(u'path', (Js([var.get(u'path')]) if var.get(u'isKey')(var.get(u'path'), var.get(u'object')) else var.get(u'castPath')(var.get(u'path'))))
+ var.put(u'index', Js(0.0))
+ var.put(u'length', var.get(u'path').get(u'length'))
+ while ((var.get(u'object')!=var.get(u"null")) and (var.get(u'index')(-Js(1.0))):
+ if PyJsStrictNeq(var.get(u'seen'),var.get(u'array')):
+ var.get(u'splice').callprop(u'call', var.get(u'seen'), var.get(u'fromIndex'), Js(1.0))
+ var.get(u'splice').callprop(u'call', var.get(u'array'), var.get(u'fromIndex'), Js(1.0))
+ return var.get(u'array')
+ PyJsHoisted_basePullAll_.func_name = u'basePullAll'
+ var.put(u'basePullAll', PyJsHoisted_basePullAll_)
+ var.put(u'arrayMap', var.get(u'require')(Js(u'./_arrayMap')))
+ var.put(u'baseIndexOf', var.get(u'require')(Js(u'./_baseIndexOf')))
+ var.put(u'baseIndexOfWith', var.get(u'require')(Js(u'./_baseIndexOfWith')))
+ var.put(u'baseUnary', var.get(u'require')(Js(u'./_baseUnary')))
+ var.put(u'copyArray', var.get(u'require')(Js(u'./_copyArray')))
+ var.put(u'arrayProto', var.get(u'Array').get(u'prototype'))
+ var.put(u'splice', var.get(u'arrayProto').get(u'splice'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'basePullAll'))
+PyJs_anonymous_3559_._set_name(u'anonymous')
+PyJs_Object_3560_ = Js({u'./_arrayMap':Js(304.0),u'./_baseIndexOf':Js(325.0),u'./_baseIndexOfWith':Js(326.0),u'./_baseUnary':Js(348.0),u'./_copyArray':Js(366.0)})
+@Js
+def PyJs_anonymous_3561_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'MAX_SAFE_INTEGER', u'exports', u'baseRepeat', u'require', u'module', u'nativeFloor'])
+ @Js
+ def PyJsHoisted_baseRepeat_(string, n, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'string':string, u'n':n}, var)
+ var.registers([u'n', u'result', u'string'])
+ var.put(u'result', Js(u''))
+ if ((var.get(u'string').neg() or (var.get(u'n')var.get(u'MAX_SAFE_INTEGER'))):
+ return var.get(u'result')
+ while 1:
+ if (var.get(u'n')%Js(2.0)):
+ var.put(u'result', var.get(u'string'), u'+')
+ var.put(u'n', var.get(u'nativeFloor')((var.get(u'n')/Js(2.0))))
+ if var.get(u'n'):
+ var.put(u'string', var.get(u'string'), u'+')
+ if not var.get(u'n'):
+ break
+ return var.get(u'result')
+ PyJsHoisted_baseRepeat_.func_name = u'baseRepeat'
+ var.put(u'baseRepeat', PyJsHoisted_baseRepeat_)
+ var.put(u'MAX_SAFE_INTEGER', Js(9007199254740991.0))
+ var.put(u'nativeFloor', var.get(u'Math').get(u'floor'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'baseRepeat'))
+PyJs_anonymous_3561_._set_name(u'anonymous')
+PyJs_Object_3562_ = Js({})
+@Js
+def PyJs_anonymous_3563_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'baseSlice', u'exports', u'require', u'module'])
+ @Js
+ def PyJsHoisted_baseSlice_(array, start, end, this, arguments, var=var):
+ var = Scope({u'this':this, u'start':start, u'array':array, u'end':end, u'arguments':arguments}, var)
+ var.registers([u'index', u'end', u'start', u'length', u'result', u'array'])
+ var.put(u'index', (-Js(1.0)))
+ var.put(u'length', var.get(u'array').get(u'length'))
+ if (var.get(u'start')var.get(u'length')) else (var.get(u'length')+var.get(u'start'))))
+ var.put(u'end', (var.get(u'length') if (var.get(u'end')>var.get(u'length')) else var.get(u'end')))
+ if (var.get(u'end')var.get(u'end')) else PyJsBshift((var.get(u'end')-var.get(u'start')),Js(0.0))))
+ var.put(u'start', Js(0.0), u'>>>')
+ var.put(u'result', var.get(u'Array')(var.get(u'length')))
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))=var.get(u'LARGE_ARRAY_SIZE')):
+ var.put(u'set', (var.get(u"null") if var.get(u'iteratee') else var.get(u'createSet')(var.get(u'array'))))
+ if var.get(u'set'):
+ return var.get(u'setToArray')(var.get(u'set'))
+ var.put(u'isCommon', Js(False))
+ var.put(u'includes', var.get(u'cacheHas'))
+ var.put(u'seen', var.get(u'SetCache').create())
+ else:
+ var.put(u'seen', (Js([]) if var.get(u'iteratee') else var.get(u'result')))
+ class JS_CONTINUE_LABEL_6f75746572(Exception): pass
+ class JS_BREAK_LABEL_6f75746572(Exception): pass
+ try:
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))=var.get(u'length'))) else var.get(u'baseSlice')(var.get(u'array'), var.get(u'start'), var.get(u'end')))
+ PyJsHoisted_castSlice_.func_name = u'castSlice'
+ var.put(u'castSlice', PyJsHoisted_castSlice_)
+ var.put(u'baseSlice', var.get(u'require')(Js(u'./_baseSlice')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'castSlice'))
+PyJs_anonymous_3583_._set_name(u'anonymous')
+PyJs_Object_3584_ = Js({u'./_baseSlice':Js(344.0)})
+@Js
+def PyJs_anonymous_3585_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'baseIndexOf', u'require', u'exports', u'module', u'charsEndIndex'])
+ @Js
+ def PyJsHoisted_charsEndIndex_(strSymbols, chrSymbols, this, arguments, var=var):
+ var = Scope({u'this':this, u'chrSymbols':chrSymbols, u'arguments':arguments, u'strSymbols':strSymbols}, var)
+ var.registers([u'index', u'chrSymbols', u'strSymbols'])
+ var.put(u'index', var.get(u'strSymbols').get(u'length'))
+ while ((var.put(u'index',Js(var.get(u'index').to_number())-Js(1))+Js(1)) and (var.get(u'baseIndexOf')(var.get(u'chrSymbols'), var.get(u'strSymbols').get(var.get(u'index')), Js(0.0))>(-Js(1.0)))):
+ pass
+ return var.get(u'index')
+ PyJsHoisted_charsEndIndex_.func_name = u'charsEndIndex'
+ var.put(u'charsEndIndex', PyJsHoisted_charsEndIndex_)
+ var.put(u'baseIndexOf', var.get(u'require')(Js(u'./_baseIndexOf')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'charsEndIndex'))
+PyJs_anonymous_3585_._set_name(u'anonymous')
+PyJs_Object_3586_ = Js({u'./_baseIndexOf':Js(325.0)})
+@Js
+def PyJs_anonymous_3587_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module', u'checkGlobal'])
+ @Js
+ def PyJsHoisted_checkGlobal_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return (var.get(u'value') if (var.get(u'value') and PyJsStrictEq(var.get(u'value').get(u'Object'),var.get(u'Object'))) else var.get(u"null"))
+ PyJsHoisted_checkGlobal_.func_name = u'checkGlobal'
+ var.put(u'checkGlobal', PyJsHoisted_checkGlobal_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'checkGlobal'))
+PyJs_anonymous_3587_._set_name(u'anonymous')
+PyJs_Object_3588_ = Js({})
+@Js
+def PyJs_anonymous_3589_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'cloneArrayBuffer', u'require', u'exports', u'Uint8Array', u'module'])
+ @Js
+ def PyJsHoisted_cloneArrayBuffer_(arrayBuffer, this, arguments, var=var):
+ var = Scope({u'this':this, u'arrayBuffer':arrayBuffer, u'arguments':arguments}, var)
+ var.registers([u'arrayBuffer', u'result'])
+ var.put(u'result', var.get(u'arrayBuffer').get(u'constructor').create(var.get(u'arrayBuffer').get(u'byteLength')))
+ var.get(u'Uint8Array').create(var.get(u'result')).callprop(u'set', var.get(u'Uint8Array').create(var.get(u'arrayBuffer')))
+ return var.get(u'result')
+ PyJsHoisted_cloneArrayBuffer_.func_name = u'cloneArrayBuffer'
+ var.put(u'cloneArrayBuffer', PyJsHoisted_cloneArrayBuffer_)
+ var.put(u'Uint8Array', var.get(u'require')(Js(u'./_Uint8Array')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'cloneArrayBuffer'))
+PyJs_anonymous_3589_._set_name(u'anonymous')
+PyJs_Object_3590_ = Js({u'./_Uint8Array':Js(296.0)})
+@Js
+def PyJs_anonymous_3591_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'cloneBuffer', u'exports', u'require', u'module'])
+ @Js
+ def PyJsHoisted_cloneBuffer_(buffer, isDeep, this, arguments, var=var):
+ var = Scope({u'buffer':buffer, u'this':this, u'isDeep':isDeep, u'arguments':arguments}, var)
+ var.registers([u'buffer', u'isDeep', u'result'])
+ if var.get(u'isDeep'):
+ return var.get(u'buffer').callprop(u'slice')
+ var.put(u'result', var.get(u'buffer').get(u'constructor').create(var.get(u'buffer').get(u'length')))
+ var.get(u'buffer').callprop(u'copy', var.get(u'result'))
+ return var.get(u'result')
+ PyJsHoisted_cloneBuffer_.func_name = u'cloneBuffer'
+ var.put(u'cloneBuffer', PyJsHoisted_cloneBuffer_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'cloneBuffer'))
+PyJs_anonymous_3591_._set_name(u'anonymous')
+PyJs_Object_3592_ = Js({})
+@Js
+def PyJs_anonymous_3593_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'cloneArrayBuffer', u'require', u'exports', u'cloneDataView', u'module'])
+ @Js
+ def PyJsHoisted_cloneDataView_(dataView, isDeep, this, arguments, var=var):
+ var = Scope({u'this':this, u'dataView':dataView, u'isDeep':isDeep, u'arguments':arguments}, var)
+ var.registers([u'buffer', u'dataView', u'isDeep'])
+ var.put(u'buffer', (var.get(u'cloneArrayBuffer')(var.get(u'dataView').get(u'buffer')) if var.get(u'isDeep') else var.get(u'dataView').get(u'buffer')))
+ return var.get(u'dataView').get(u'constructor').create(var.get(u'buffer'), var.get(u'dataView').get(u'byteOffset'), var.get(u'dataView').get(u'byteLength'))
+ PyJsHoisted_cloneDataView_.func_name = u'cloneDataView'
+ var.put(u'cloneDataView', PyJsHoisted_cloneDataView_)
+ var.put(u'cloneArrayBuffer', var.get(u'require')(Js(u'./_cloneArrayBuffer')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'cloneDataView'))
+PyJs_anonymous_3593_._set_name(u'anonymous')
+PyJs_Object_3594_ = Js({u'./_cloneArrayBuffer':Js(356.0)})
+@Js
+def PyJs_anonymous_3595_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'addMapEntry', u'require', u'module', u'arrayReduce', u'mapToArray', u'cloneMap'])
+ @Js
+ def PyJsHoisted_cloneMap_(map, isDeep, cloneFunc, this, arguments, var=var):
+ var = Scope({u'this':this, u'map':map, u'isDeep':isDeep, u'arguments':arguments, u'cloneFunc':cloneFunc}, var)
+ var.registers([u'map', u'array', u'isDeep', u'cloneFunc'])
+ var.put(u'array', (var.get(u'cloneFunc')(var.get(u'mapToArray')(var.get(u'map')), var.get(u'true')) if var.get(u'isDeep') else var.get(u'mapToArray')(var.get(u'map'))))
+ return var.get(u'arrayReduce')(var.get(u'array'), var.get(u'addMapEntry'), var.get(u'map').get(u'constructor').create())
+ PyJsHoisted_cloneMap_.func_name = u'cloneMap'
+ var.put(u'cloneMap', PyJsHoisted_cloneMap_)
+ var.put(u'addMapEntry', var.get(u'require')(Js(u'./_addMapEntry')))
+ var.put(u'arrayReduce', var.get(u'require')(Js(u'./_arrayReduce')))
+ var.put(u'mapToArray', var.get(u'require')(Js(u'./_mapToArray')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'cloneMap'))
+PyJs_anonymous_3595_._set_name(u'anonymous')
+PyJs_Object_3596_ = Js({u'./_addMapEntry':Js(298.0),u'./_arrayReduce':Js(306.0),u'./_mapToArray':Js(419.0)})
+@Js
+def PyJs_anonymous_3597_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'cloneRegExp', u'exports', u'module', u'reFlags'])
+ @Js
+ def PyJsHoisted_cloneRegExp_(regexp, this, arguments, var=var):
+ var = Scope({u'this':this, u'regexp':regexp, u'arguments':arguments}, var)
+ var.registers([u'regexp', u'result'])
+ var.put(u'result', var.get(u'regexp').get(u'constructor').create(var.get(u'regexp').get(u'source'), var.get(u'reFlags').callprop(u'exec', var.get(u'regexp'))))
+ var.get(u'result').put(u'lastIndex', var.get(u'regexp').get(u'lastIndex'))
+ return var.get(u'result')
+ PyJsHoisted_cloneRegExp_.func_name = u'cloneRegExp'
+ var.put(u'cloneRegExp', PyJsHoisted_cloneRegExp_)
+ var.put(u'reFlags', JsRegExp(u'/\\w*$/'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'cloneRegExp'))
+PyJs_anonymous_3597_._set_name(u'anonymous')
+PyJs_Object_3598_ = Js({})
+@Js
+def PyJs_anonymous_3599_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'cloneSet', u'exports', u'require', u'setToArray', u'addSetEntry', u'module', u'arrayReduce'])
+ @Js
+ def PyJsHoisted_cloneSet_(set, isDeep, cloneFunc, this, arguments, var=var):
+ var = Scope({u'this':this, u'cloneFunc':cloneFunc, u'set':set, u'isDeep':isDeep, u'arguments':arguments}, var)
+ var.registers([u'cloneFunc', u'array', u'set', u'isDeep'])
+ var.put(u'array', (var.get(u'cloneFunc')(var.get(u'setToArray')(var.get(u'set')), var.get(u'true')) if var.get(u'isDeep') else var.get(u'setToArray')(var.get(u'set'))))
+ return var.get(u'arrayReduce')(var.get(u'array'), var.get(u'addSetEntry'), var.get(u'set').get(u'constructor').create())
+ PyJsHoisted_cloneSet_.func_name = u'cloneSet'
+ var.put(u'cloneSet', PyJsHoisted_cloneSet_)
+ var.put(u'addSetEntry', var.get(u'require')(Js(u'./_addSetEntry')))
+ var.put(u'arrayReduce', var.get(u'require')(Js(u'./_arrayReduce')))
+ var.put(u'setToArray', var.get(u'require')(Js(u'./_setToArray')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'cloneSet'))
+PyJs_anonymous_3599_._set_name(u'anonymous')
+PyJs_Object_3600_ = Js({u'./_addSetEntry':Js(299.0),u'./_arrayReduce':Js(306.0),u'./_setToArray':Js(425.0)})
+@Js
+def PyJs_anonymous_3601_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'cloneSymbol', u'Symbol', u'symbolValueOf', u'module', u'symbolProto', u'require'])
+ @Js
+ def PyJsHoisted_cloneSymbol_(symbol, this, arguments, var=var):
+ var = Scope({u'this':this, u'symbol':symbol, u'arguments':arguments}, var)
+ var.registers([u'symbol'])
+ PyJs_Object_3602_ = Js({})
+ return (var.get(u'Object')(var.get(u'symbolValueOf').callprop(u'call', var.get(u'symbol'))) if var.get(u'symbolValueOf') else PyJs_Object_3602_)
+ PyJsHoisted_cloneSymbol_.func_name = u'cloneSymbol'
+ var.put(u'cloneSymbol', PyJsHoisted_cloneSymbol_)
+ var.put(u'Symbol', var.get(u'require')(Js(u'./_Symbol')))
+ var.put(u'symbolProto', (var.get(u'Symbol').get(u'prototype') if var.get(u'Symbol') else var.get(u'undefined')))
+ var.put(u'symbolValueOf', (var.get(u'symbolProto').get(u'valueOf') if var.get(u'symbolProto') else var.get(u'undefined')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'cloneSymbol'))
+PyJs_anonymous_3601_._set_name(u'anonymous')
+PyJs_Object_3603_ = Js({u'./_Symbol':Js(295.0)})
+@Js
+def PyJs_anonymous_3604_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'cloneArrayBuffer', u'require', u'exports', u'module', u'cloneTypedArray'])
+ @Js
+ def PyJsHoisted_cloneTypedArray_(typedArray, isDeep, this, arguments, var=var):
+ var = Scope({u'this':this, u'typedArray':typedArray, u'isDeep':isDeep, u'arguments':arguments}, var)
+ var.registers([u'buffer', u'typedArray', u'isDeep'])
+ var.put(u'buffer', (var.get(u'cloneArrayBuffer')(var.get(u'typedArray').get(u'buffer')) if var.get(u'isDeep') else var.get(u'typedArray').get(u'buffer')))
+ return var.get(u'typedArray').get(u'constructor').create(var.get(u'buffer'), var.get(u'typedArray').get(u'byteOffset'), var.get(u'typedArray').get(u'length'))
+ PyJsHoisted_cloneTypedArray_.func_name = u'cloneTypedArray'
+ var.put(u'cloneTypedArray', PyJsHoisted_cloneTypedArray_)
+ var.put(u'cloneArrayBuffer', var.get(u'require')(Js(u'./_cloneArrayBuffer')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'cloneTypedArray'))
+PyJs_anonymous_3604_._set_name(u'anonymous')
+PyJs_Object_3605_ = Js({u'./_cloneArrayBuffer':Js(356.0)})
+@Js
+def PyJs_anonymous_3606_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'compareAscending', u'require', u'isSymbol', u'exports', u'module'])
+ @Js
+ def PyJsHoisted_compareAscending_(value, other, this, arguments, var=var):
+ var = Scope({u'this':this, u'other':other, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'valIsSymbol', u'valIsNull', u'value', u'valIsDefined', u'othIsNull', u'othIsReflexive', u'othIsSymbol', u'othIsDefined', u'other', u'valIsReflexive'])
+ if PyJsStrictNeq(var.get(u'value'),var.get(u'other')):
+ var.put(u'valIsDefined', PyJsStrictNeq(var.get(u'value'),var.get(u'undefined')))
+ var.put(u'valIsNull', PyJsStrictEq(var.get(u'value'),var.get(u"null")))
+ var.put(u'valIsReflexive', PyJsStrictEq(var.get(u'value'),var.get(u'value')))
+ var.put(u'valIsSymbol', var.get(u'isSymbol')(var.get(u'value')))
+ var.put(u'othIsDefined', PyJsStrictNeq(var.get(u'other'),var.get(u'undefined')))
+ var.put(u'othIsNull', PyJsStrictEq(var.get(u'other'),var.get(u"null")))
+ var.put(u'othIsReflexive', PyJsStrictEq(var.get(u'other'),var.get(u'other')))
+ var.put(u'othIsSymbol', var.get(u'isSymbol')(var.get(u'other')))
+ def PyJs_LONG_3607_(var=var):
+ return ((((((var.get(u'othIsNull').neg() and var.get(u'othIsSymbol').neg()) and var.get(u'valIsSymbol').neg()) and (var.get(u'value')>var.get(u'other'))) or ((((var.get(u'valIsSymbol') and var.get(u'othIsDefined')) and var.get(u'othIsReflexive')) and var.get(u'othIsNull').neg()) and var.get(u'othIsSymbol').neg())) or ((var.get(u'valIsNull') and var.get(u'othIsDefined')) and var.get(u'othIsReflexive'))) or (var.get(u'valIsDefined').neg() and var.get(u'othIsReflexive')))
+ if (PyJs_LONG_3607_() or var.get(u'valIsReflexive').neg()):
+ return Js(1.0)
+ def PyJs_LONG_3608_(var=var):
+ return ((((((var.get(u'valIsNull').neg() and var.get(u'valIsSymbol').neg()) and var.get(u'othIsSymbol').neg()) and (var.get(u'value')=var.get(u'ordersLength')):
+ return var.get(u'result')
+ var.put(u'order', var.get(u'orders').get(var.get(u'index')))
+ return (var.get(u'result')*((-Js(1.0)) if (var.get(u'order')==Js(u'desc')) else Js(1.0)))
+ return (var.get(u'object').get(u'index')-var.get(u'other').get(u'index'))
+ PyJsHoisted_compareMultiple_.func_name = u'compareMultiple'
+ var.put(u'compareMultiple', PyJsHoisted_compareMultiple_)
+ var.put(u'compareAscending', var.get(u'require')(Js(u'./_compareAscending')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'compareMultiple'))
+PyJs_anonymous_3610_._set_name(u'anonymous')
+PyJs_Object_3611_ = Js({u'./_compareAscending':Js(364.0)})
+@Js
+def PyJs_anonymous_3612_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'copyArray', u'exports', u'module'])
+ @Js
+ def PyJsHoisted_copyArray_(source, array, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'array':array, u'arguments':arguments}, var)
+ var.registers([u'index', u'length', u'array', u'source'])
+ var.put(u'index', (-Js(1.0)))
+ var.put(u'length', var.get(u'source').get(u'length'))
+ (var.get(u'array') or var.put(u'array', var.get(u'Array')(var.get(u'length'))))
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))Js(1.0)) else var.get(u'undefined')))
+ var.put(u'guard', (var.get(u'sources').get(u'2') if (var.get(u'length')>Js(2.0)) else var.get(u'undefined')))
+ var.put(u'customizer', (PyJsComma((var.put(u'length',Js(var.get(u'length').to_number())-Js(1))+Js(1)),var.get(u'customizer')) if ((var.get(u'assigner').get(u'length')>Js(3.0)) and (var.get(u'customizer',throw=False).typeof()==Js(u'function'))) else var.get(u'undefined')))
+ if (var.get(u'guard') and var.get(u'isIterateeCall')(var.get(u'sources').get(u'0'), var.get(u'sources').get(u'1'), var.get(u'guard'))):
+ var.put(u'customizer', (var.get(u'undefined') if (var.get(u'length')(-Js(1.0))) else var.get(u'undefined'))
+ PyJs_anonymous_3631_._set_name(u'anonymous')
+ return PyJs_anonymous_3631_
+ PyJsHoisted_createFind_.func_name = u'createFind'
+ var.put(u'createFind', PyJsHoisted_createFind_)
+ var.put(u'baseIteratee', var.get(u'require')(Js(u'./_baseIteratee')))
+ var.put(u'isArrayLike', var.get(u'require')(Js(u'./isArrayLike')))
+ var.put(u'keys', var.get(u'require')(Js(u'./keys')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'createFind'))
+PyJs_anonymous_3630_._set_name(u'anonymous')
+PyJs_Object_3633_ = Js({u'./_baseIteratee':Js(331.0),u'./isArrayLike':Js(459.0),u'./keys':Js(474.0)})
+@Js
+def PyJs_anonymous_3634_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'Set', u'INFINITY', u'require', u'setToArray', u'module', u'noop', u'createSet'])
+ var.put(u'Set', var.get(u'require')(Js(u'./_Set')))
+ var.put(u'noop', var.get(u'require')(Js(u'./noop')))
+ var.put(u'setToArray', var.get(u'require')(Js(u'./_setToArray')))
+ var.put(u'INFINITY', (Js(1.0)/Js(0.0)))
+ @Js
+ def PyJs_anonymous_3635_(values, this, arguments, var=var):
+ var = Scope({u'this':this, u'values':values, u'arguments':arguments}, var)
+ var.registers([u'values'])
+ return var.get(u'Set').create(var.get(u'values'))
+ PyJs_anonymous_3635_._set_name(u'anonymous')
+ var.put(u'createSet', (var.get(u'noop') if (var.get(u'Set') and ((Js(1.0)/var.get(u'setToArray')(var.get(u'Set').create(Js([None, (-Js(0.0))]))).get(u'1'))==var.get(u'INFINITY'))).neg() else PyJs_anonymous_3635_))
+ var.get(u'module').put(u'exports', var.get(u'createSet'))
+PyJs_anonymous_3634_._set_name(u'anonymous')
+PyJs_Object_3636_ = Js({u'./_Set':Js(292.0),u'./_setToArray':Js(425.0),u'./noop':Js(479.0)})
+@Js
+def PyJs_anonymous_3637_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'PARTIAL_COMPARE_FLAG', u'exports', u'SetCache', u'arraySome', u'UNORDERED_COMPARE_FLAG', u'equalArrays', u'module', u'require'])
+ @Js
+ def PyJsHoisted_equalArrays_(array, other, equalFunc, customizer, bitmask, stack, this, arguments, var=var):
+ var = Scope({u'equalFunc':equalFunc, u'this':this, u'bitmask':bitmask, u'other':other, u'arguments':arguments, u'array':array, u'customizer':customizer, u'stack':stack}, var)
+ var.registers([u'index', u'compared', u'stacked', u'arrValue', u'equalFunc', u'othLength', u'stack', u'arrLength', u'isPartial', u'other', u'result', u'bitmask', u'seen', u'othValue', u'customizer', u'array'])
+ var.put(u'isPartial', (var.get(u'bitmask')&var.get(u'PARTIAL_COMPARE_FLAG')))
+ var.put(u'arrLength', var.get(u'array').get(u'length'))
+ var.put(u'othLength', var.get(u'other').get(u'length'))
+ if ((var.get(u'arrLength')!=var.get(u'othLength')) and (var.get(u'isPartial') and (var.get(u'othLength')>var.get(u'arrLength'))).neg()):
+ return Js(False)
+ var.put(u'stacked', var.get(u'stack').callprop(u'get', var.get(u'array')))
+ if var.get(u'stacked'):
+ return (var.get(u'stacked')==var.get(u'other'))
+ var.put(u'index', (-Js(1.0)))
+ var.put(u'result', var.get(u'true'))
+ var.put(u'seen', (var.get(u'SetCache').create() if (var.get(u'bitmask')&var.get(u'UNORDERED_COMPARE_FLAG')) else var.get(u'undefined')))
+ var.get(u'stack').callprop(u'set', var.get(u'array'), var.get(u'other'))
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))(-Js(1.0))) and ((var.get(u'value')%Js(1.0))==Js(0.0))) and (var.get(u'value')(-Js(1.0)))
+ PyJsHoisted_listCacheHas_.func_name = u'listCacheHas'
+ var.put(u'listCacheHas', PyJsHoisted_listCacheHas_)
+ var.put(u'assocIndexOf', var.get(u'require')(Js(u'./_assocIndexOf')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'listCacheHas'))
+PyJs_anonymous_3718_._set_name(u'anonymous')
+PyJs_Object_3719_ = Js({u'./_assocIndexOf':Js(311.0)})
+@Js
+def PyJs_anonymous_3720_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'assocIndexOf', u'listCacheSet', u'exports', u'require', u'module'])
+ @Js
+ def PyJsHoisted_listCacheSet_(key, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'value':value, u'key':key, u'arguments':arguments}, var)
+ var.registers([u'index', u'data', u'value', u'key'])
+ var.put(u'data', var.get(u"this").get(u'__data__'))
+ var.put(u'index', var.get(u'assocIndexOf')(var.get(u'data'), var.get(u'key')))
+ if (var.get(u'index')(-Js(1.0)))) if var.get(u'isString')(var.get(u'collection')) else (var.get(u'length').neg().neg() and (var.get(u'baseIndexOf')(var.get(u'collection'), var.get(u'value'), var.get(u'fromIndex'))>(-Js(1.0)))))
+ PyJsHoisted_includes_.func_name = u'includes'
+ var.put(u'includes', PyJsHoisted_includes_)
+ var.put(u'baseIndexOf', var.get(u'require')(Js(u'./_baseIndexOf')))
+ var.put(u'isArrayLike', var.get(u'require')(Js(u'./isArrayLike')))
+ var.put(u'isString', var.get(u'require')(Js(u'./isString')))
+ var.put(u'toInteger', var.get(u'require')(Js(u'./toInteger')))
+ var.put(u'values', var.get(u'require')(Js(u'./values')))
+ var.put(u'nativeMax', var.get(u'Math').get(u'max'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'includes'))
+PyJs_anonymous_3820_._set_name(u'anonymous')
+PyJs_Object_3821_ = Js({u'./_baseIndexOf':Js(325.0),u'./isArrayLike':Js(459.0),u'./isString':Js(471.0),u'./toInteger':Js(490.0),u'./values':Js(496.0)})
+@Js
+def PyJs_anonymous_3822_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'propertyIsEnumerable', u'exports', u'objectToString', u'require', u'module', u'hasOwnProperty', u'isArrayLikeObject', u'objectProto', u'argsTag', u'isArguments'])
+ @Js
+ def PyJsHoisted_isArguments_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((var.get(u'isArrayLikeObject')(var.get(u'value')) and var.get(u'hasOwnProperty').callprop(u'call', var.get(u'value'), Js(u'callee'))) and (var.get(u'propertyIsEnumerable').callprop(u'call', var.get(u'value'), Js(u'callee')).neg() or (var.get(u'objectToString').callprop(u'call', var.get(u'value'))==var.get(u'argsTag'))))
+ PyJsHoisted_isArguments_.func_name = u'isArguments'
+ var.put(u'isArguments', PyJsHoisted_isArguments_)
+ var.put(u'isArrayLikeObject', var.get(u'require')(Js(u'./isArrayLikeObject')))
+ var.put(u'argsTag', Js(u'[object Arguments]'))
+ var.put(u'objectProto', var.get(u'Object').get(u'prototype'))
+ var.put(u'hasOwnProperty', var.get(u'objectProto').get(u'hasOwnProperty'))
+ var.put(u'objectToString', var.get(u'objectProto').get(u'toString'))
+ var.put(u'propertyIsEnumerable', var.get(u'objectProto').get(u'propertyIsEnumerable'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isArguments'))
+PyJs_anonymous_3822_._set_name(u'anonymous')
+PyJs_Object_3823_ = Js({u'./isArrayLikeObject':Js(460.0)})
+@Js
+def PyJs_anonymous_3824_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'isArray', u'require', u'exports', u'module'])
+ var.put(u'isArray', var.get(u'Array').get(u'isArray'))
+ var.get(u'module').put(u'exports', var.get(u'isArray'))
+PyJs_anonymous_3824_._set_name(u'anonymous')
+PyJs_Object_3825_ = Js({})
+@Js
+def PyJs_anonymous_3826_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'isLength', u'getLength', u'require', u'module', u'isArrayLike', u'isFunction'])
+ @Js
+ def PyJsHoisted_isArrayLike_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return (((var.get(u'value')!=var.get(u"null")) and var.get(u'isLength')(var.get(u'getLength')(var.get(u'value')))) and var.get(u'isFunction')(var.get(u'value')).neg())
+ PyJsHoisted_isArrayLike_.func_name = u'isArrayLike'
+ var.put(u'isArrayLike', PyJsHoisted_isArrayLike_)
+ var.put(u'getLength', var.get(u'require')(Js(u'./_getLength')))
+ var.put(u'isFunction', var.get(u'require')(Js(u'./isFunction')))
+ var.put(u'isLength', var.get(u'require')(Js(u'./isLength')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isArrayLike'))
+PyJs_anonymous_3826_._set_name(u'anonymous')
+PyJs_Object_3827_ = Js({u'./_getLength':Js(379.0),u'./isFunction':Js(463.0),u'./isLength':Js(465.0)})
+@Js
+def PyJs_anonymous_3828_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'isArrayLike', u'require', u'module', u'isArrayLikeObject', u'isObjectLike'])
+ @Js
+ def PyJsHoisted_isArrayLikeObject_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return (var.get(u'isObjectLike')(var.get(u'value')) and var.get(u'isArrayLike')(var.get(u'value')))
+ PyJsHoisted_isArrayLikeObject_.func_name = u'isArrayLikeObject'
+ var.put(u'isArrayLikeObject', PyJsHoisted_isArrayLikeObject_)
+ var.put(u'isArrayLike', var.get(u'require')(Js(u'./isArrayLike')))
+ var.put(u'isObjectLike', var.get(u'require')(Js(u'./isObjectLike')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isArrayLikeObject'))
+PyJs_anonymous_3828_._set_name(u'anonymous')
+PyJs_Object_3829_ = Js({u'./isArrayLike':Js(459.0),u'./isObjectLike':Js(468.0)})
+@Js
+def PyJs_anonymous_3830_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'isBoolean', u'objectToString', u'require', u'boolTag', u'module', u'isObjectLike', u'objectProto'])
+ @Js
+ def PyJsHoisted_isBoolean_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((PyJsStrictEq(var.get(u'value'),var.get(u'true')) or PyJsStrictEq(var.get(u'value'),Js(False))) or (var.get(u'isObjectLike')(var.get(u'value')) and (var.get(u'objectToString').callprop(u'call', var.get(u'value'))==var.get(u'boolTag'))))
+ PyJsHoisted_isBoolean_.func_name = u'isBoolean'
+ var.put(u'isBoolean', PyJsHoisted_isBoolean_)
+ var.put(u'isObjectLike', var.get(u'require')(Js(u'./isObjectLike')))
+ var.put(u'boolTag', Js(u'[object Boolean]'))
+ var.put(u'objectProto', var.get(u'Object').get(u'prototype'))
+ var.put(u'objectToString', var.get(u'objectProto').get(u'toString'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isBoolean'))
+PyJs_anonymous_3830_._set_name(u'anonymous')
+PyJs_Object_3831_ = Js({u'./isObjectLike':Js(468.0)})
+@Js
+def PyJs_anonymous_3832_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'freeModule', u'Buffer', u'root', u'require', u'freeExports', u'module', u'moduleExports', u'stubFalse', u'isBuffer'])
+ var.put(u'root', var.get(u'require')(Js(u'./_root')))
+ var.put(u'stubFalse', var.get(u'require')(Js(u'./stubFalse')))
+ var.put(u'freeExports', ((var.get(u'exports',throw=False).typeof()==Js(u'object')) and var.get(u'exports')))
+ var.put(u'freeModule', ((var.get(u'freeExports') and (var.get(u'module',throw=False).typeof()==Js(u'object'))) and var.get(u'module')))
+ var.put(u'moduleExports', (var.get(u'freeModule') and PyJsStrictEq(var.get(u'freeModule').get(u'exports'),var.get(u'freeExports'))))
+ var.put(u'Buffer', (var.get(u'root').get(u'Buffer') if var.get(u'moduleExports') else var.get(u'undefined')))
+ @Js
+ def PyJs_anonymous_3833_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return var.get(u'value').instanceof(var.get(u'Buffer'))
+ PyJs_anonymous_3833_._set_name(u'anonymous')
+ var.put(u'isBuffer', (var.get(u'stubFalse') if var.get(u'Buffer').neg() else PyJs_anonymous_3833_))
+ var.get(u'module').put(u'exports', var.get(u'isBuffer'))
+PyJs_anonymous_3832_._set_name(u'anonymous')
+PyJs_Object_3834_ = Js({u'./_root':Js(422.0),u'./stubFalse':Js(488.0)})
+@Js
+def PyJs_anonymous_3835_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'genTag', u'exports', u'module', u'objectToString', u'require', u'isFunction', u'funcTag', u'objectProto', u'isObject'])
+ @Js
+ def PyJsHoisted_isFunction_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'tag', u'value'])
+ var.put(u'tag', (var.get(u'objectToString').callprop(u'call', var.get(u'value')) if var.get(u'isObject')(var.get(u'value')) else Js(u'')))
+ return ((var.get(u'tag')==var.get(u'funcTag')) or (var.get(u'tag')==var.get(u'genTag')))
+ PyJsHoisted_isFunction_.func_name = u'isFunction'
+ var.put(u'isFunction', PyJsHoisted_isFunction_)
+ var.put(u'isObject', var.get(u'require')(Js(u'./isObject')))
+ var.put(u'funcTag', Js(u'[object Function]'))
+ var.put(u'genTag', Js(u'[object GeneratorFunction]'))
+ var.put(u'objectProto', var.get(u'Object').get(u'prototype'))
+ var.put(u'objectToString', var.get(u'objectProto').get(u'toString'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isFunction'))
+PyJs_anonymous_3835_._set_name(u'anonymous')
+PyJs_Object_3836_ = Js({u'./isObject':Js(467.0)})
+@Js
+def PyJs_anonymous_3837_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'toInteger', u'exports', u'require', u'module', u'isInteger'])
+ @Js
+ def PyJsHoisted_isInteger_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((var.get(u'value',throw=False).typeof()==Js(u'number')) and (var.get(u'value')==var.get(u'toInteger')(var.get(u'value'))))
+ PyJsHoisted_isInteger_.func_name = u'isInteger'
+ var.put(u'isInteger', PyJsHoisted_isInteger_)
+ var.put(u'toInteger', var.get(u'require')(Js(u'./toInteger')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isInteger'))
+PyJs_anonymous_3837_._set_name(u'anonymous')
+PyJs_Object_3838_ = Js({u'./toInteger':Js(490.0)})
+@Js
+def PyJs_anonymous_3839_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'MAX_SAFE_INTEGER', u'require', u'isLength', u'exports', u'module'])
+ @Js
+ def PyJsHoisted_isLength_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((((var.get(u'value',throw=False).typeof()==Js(u'number')) and (var.get(u'value')>(-Js(1.0)))) and ((var.get(u'value')%Js(1.0))==Js(0.0))) and (var.get(u'value')<=var.get(u'MAX_SAFE_INTEGER')))
+ PyJsHoisted_isLength_.func_name = u'isLength'
+ var.put(u'isLength', PyJsHoisted_isLength_)
+ var.put(u'MAX_SAFE_INTEGER', Js(9007199254740991.0))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isLength'))
+PyJs_anonymous_3839_._set_name(u'anonymous')
+PyJs_Object_3840_ = Js({})
+@Js
+def PyJs_anonymous_3841_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'objectToString', u'require', u'module', u'numberTag', u'isObjectLike', u'objectProto', u'isNumber'])
+ @Js
+ def PyJsHoisted_isNumber_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((var.get(u'value',throw=False).typeof()==Js(u'number')) or (var.get(u'isObjectLike')(var.get(u'value')) and (var.get(u'objectToString').callprop(u'call', var.get(u'value'))==var.get(u'numberTag'))))
+ PyJsHoisted_isNumber_.func_name = u'isNumber'
+ var.put(u'isNumber', PyJsHoisted_isNumber_)
+ var.put(u'isObjectLike', var.get(u'require')(Js(u'./isObjectLike')))
+ var.put(u'numberTag', Js(u'[object Number]'))
+ var.put(u'objectProto', var.get(u'Object').get(u'prototype'))
+ var.put(u'objectToString', var.get(u'objectProto').get(u'toString'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isNumber'))
+PyJs_anonymous_3841_._set_name(u'anonymous')
+PyJs_Object_3842_ = Js({u'./isObjectLike':Js(468.0)})
+@Js
+def PyJs_anonymous_3843_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'isObject', u'module'])
+ @Js
+ def PyJsHoisted_isObject_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'type', u'value'])
+ var.put(u'type', var.get(u'value',throw=False).typeof())
+ return (var.get(u'value').neg().neg() and ((var.get(u'type')==Js(u'object')) or (var.get(u'type')==Js(u'function'))))
+ PyJsHoisted_isObject_.func_name = u'isObject'
+ var.put(u'isObject', PyJsHoisted_isObject_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isObject'))
+PyJs_anonymous_3843_._set_name(u'anonymous')
+PyJs_Object_3844_ = Js({})
+@Js
+def PyJs_anonymous_3845_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'isObjectLike', u'require', u'exports', u'module'])
+ @Js
+ def PyJsHoisted_isObjectLike_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return (var.get(u'value').neg().neg() and (var.get(u'value',throw=False).typeof()==Js(u'object')))
+ PyJsHoisted_isObjectLike_.func_name = u'isObjectLike'
+ var.put(u'isObjectLike', PyJsHoisted_isObjectLike_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isObjectLike'))
+PyJs_anonymous_3845_._set_name(u'anonymous')
+PyJs_Object_3846_ = Js({})
+@Js
+def PyJs_anonymous_3847_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'isPlainObject', u'objectTag', u'funcToString', u'isHostObject', u'objectCtorString', u'require', u'objectToString', u'module', u'hasOwnProperty', u'isObjectLike', u'getPrototype', u'objectProto'])
+ @Js
+ def PyJsHoisted_isPlainObject_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value', u'Ctor', u'proto'])
+ if ((var.get(u'isObjectLike')(var.get(u'value')).neg() or (var.get(u'objectToString').callprop(u'call', var.get(u'value'))!=var.get(u'objectTag'))) or var.get(u'isHostObject')(var.get(u'value'))):
+ return Js(False)
+ var.put(u'proto', var.get(u'getPrototype')(var.get(u'value')))
+ if PyJsStrictEq(var.get(u'proto'),var.get(u"null")):
+ return var.get(u'true')
+ var.put(u'Ctor', (var.get(u'hasOwnProperty').callprop(u'call', var.get(u'proto'), Js(u'constructor')) and var.get(u'proto').get(u'constructor')))
+ return (((var.get(u'Ctor',throw=False).typeof()==Js(u'function')) and var.get(u'Ctor').instanceof(var.get(u'Ctor'))) and (var.get(u'funcToString').callprop(u'call', var.get(u'Ctor'))==var.get(u'objectCtorString')))
+ PyJsHoisted_isPlainObject_.func_name = u'isPlainObject'
+ var.put(u'isPlainObject', PyJsHoisted_isPlainObject_)
+ var.put(u'getPrototype', var.get(u'require')(Js(u'./_getPrototype')))
+ var.put(u'isHostObject', var.get(u'require')(Js(u'./_isHostObject')))
+ var.put(u'isObjectLike', var.get(u'require')(Js(u'./isObjectLike')))
+ var.put(u'objectTag', Js(u'[object Object]'))
+ var.put(u'objectProto', var.get(u'Object').get(u'prototype'))
+ var.put(u'funcToString', var.get(u'Function').get(u'prototype').get(u'toString'))
+ var.put(u'hasOwnProperty', var.get(u'objectProto').get(u'hasOwnProperty'))
+ var.put(u'objectCtorString', var.get(u'funcToString').callprop(u'call', var.get(u'Object')))
+ var.put(u'objectToString', var.get(u'objectProto').get(u'toString'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isPlainObject'))
+PyJs_anonymous_3847_._set_name(u'anonymous')
+PyJs_Object_3848_ = Js({u'./_getPrototype':Js(383.0),u'./_isHostObject':Js(400.0),u'./isObjectLike':Js(468.0)})
+@Js
+def PyJs_anonymous_3849_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'regexpTag', u'exports', u'objectToString', u'require', u'module', u'objectProto', u'isObject', u'isRegExp'])
+ @Js
+ def PyJsHoisted_isRegExp_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return (var.get(u'isObject')(var.get(u'value')) and (var.get(u'objectToString').callprop(u'call', var.get(u'value'))==var.get(u'regexpTag')))
+ PyJsHoisted_isRegExp_.func_name = u'isRegExp'
+ var.put(u'isRegExp', PyJsHoisted_isRegExp_)
+ var.put(u'isObject', var.get(u'require')(Js(u'./isObject')))
+ var.put(u'regexpTag', Js(u'[object RegExp]'))
+ var.put(u'objectProto', var.get(u'Object').get(u'prototype'))
+ var.put(u'objectToString', var.get(u'objectProto').get(u'toString'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isRegExp'))
+PyJs_anonymous_3849_._set_name(u'anonymous')
+PyJs_Object_3850_ = Js({u'./isObject':Js(467.0)})
+@Js
+def PyJs_anonymous_3851_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'isArray', u'exports', u'isString', u'objectToString', u'require', u'stringTag', u'module', u'isObjectLike', u'objectProto'])
+ @Js
+ def PyJsHoisted_isString_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((var.get(u'value',throw=False).typeof()==Js(u'string')) or ((var.get(u'isArray')(var.get(u'value')).neg() and var.get(u'isObjectLike')(var.get(u'value'))) and (var.get(u'objectToString').callprop(u'call', var.get(u'value'))==var.get(u'stringTag'))))
+ PyJsHoisted_isString_.func_name = u'isString'
+ var.put(u'isString', PyJsHoisted_isString_)
+ var.put(u'isArray', var.get(u'require')(Js(u'./isArray')))
+ var.put(u'isObjectLike', var.get(u'require')(Js(u'./isObjectLike')))
+ var.put(u'stringTag', Js(u'[object String]'))
+ var.put(u'objectProto', var.get(u'Object').get(u'prototype'))
+ var.put(u'objectToString', var.get(u'objectProto').get(u'toString'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isString'))
+PyJs_anonymous_3851_._set_name(u'anonymous')
+PyJs_Object_3852_ = Js({u'./isArray':Js(458.0),u'./isObjectLike':Js(468.0)})
+@Js
+def PyJs_anonymous_3853_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'objectToString', u'require', u'module', u'isObjectLike', u'objectProto', u'isSymbol', u'symbolTag'])
+ @Js
+ def PyJsHoisted_isSymbol_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((var.get(u'value',throw=False).typeof()==Js(u'symbol')) or (var.get(u'isObjectLike')(var.get(u'value')) and (var.get(u'objectToString').callprop(u'call', var.get(u'value'))==var.get(u'symbolTag'))))
+ PyJsHoisted_isSymbol_.func_name = u'isSymbol'
+ var.put(u'isSymbol', PyJsHoisted_isSymbol_)
+ var.put(u'isObjectLike', var.get(u'require')(Js(u'./isObjectLike')))
+ var.put(u'symbolTag', Js(u'[object Symbol]'))
+ var.put(u'objectProto', var.get(u'Object').get(u'prototype'))
+ var.put(u'objectToString', var.get(u'objectProto').get(u'toString'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isSymbol'))
+PyJs_anonymous_3853_._set_name(u'anonymous')
+PyJs_Object_3854_ = Js({u'./isObjectLike':Js(468.0)})
+@Js
+def PyJs_anonymous_3855_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'arrayTag', u'typedArrayTags', u'uint32Tag', u'arrayBufferTag', u'objectTag', u'dataViewTag', u'int8Tag', u'isObjectLike', u'errorTag', u'float64Tag', u'isLength', u'boolTag', u'funcTag', u'isTypedArray', u'float32Tag', u'argsTag', u'regexpTag', u'exports', u'dateTag', u'setTag', u'stringTag', u'int32Tag', u'module', u'mapTag', u'uint8Tag', u'require', u'objectToString', u'uint16Tag', u'weakMapTag', u'int16Tag', u'numberTag', u'objectProto', u'uint8ClampedTag'])
+ @Js
+ def PyJsHoisted_isTypedArray_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((var.get(u'isObjectLike')(var.get(u'value')) and var.get(u'isLength')(var.get(u'value').get(u'length'))) and var.get(u'typedArrayTags').get(var.get(u'objectToString').callprop(u'call', var.get(u'value'))).neg().neg())
+ PyJsHoisted_isTypedArray_.func_name = u'isTypedArray'
+ var.put(u'isTypedArray', PyJsHoisted_isTypedArray_)
+ var.put(u'isLength', var.get(u'require')(Js(u'./isLength')))
+ var.put(u'isObjectLike', var.get(u'require')(Js(u'./isObjectLike')))
+ var.put(u'argsTag', Js(u'[object Arguments]'))
+ var.put(u'arrayTag', Js(u'[object Array]'))
+ var.put(u'boolTag', Js(u'[object Boolean]'))
+ var.put(u'dateTag', Js(u'[object Date]'))
+ var.put(u'errorTag', Js(u'[object Error]'))
+ var.put(u'funcTag', Js(u'[object Function]'))
+ var.put(u'mapTag', Js(u'[object Map]'))
+ var.put(u'numberTag', Js(u'[object Number]'))
+ var.put(u'objectTag', Js(u'[object Object]'))
+ var.put(u'regexpTag', Js(u'[object RegExp]'))
+ var.put(u'setTag', Js(u'[object Set]'))
+ var.put(u'stringTag', Js(u'[object String]'))
+ var.put(u'weakMapTag', Js(u'[object WeakMap]'))
+ var.put(u'arrayBufferTag', Js(u'[object ArrayBuffer]'))
+ var.put(u'dataViewTag', Js(u'[object DataView]'))
+ var.put(u'float32Tag', Js(u'[object Float32Array]'))
+ var.put(u'float64Tag', Js(u'[object Float64Array]'))
+ var.put(u'int8Tag', Js(u'[object Int8Array]'))
+ var.put(u'int16Tag', Js(u'[object Int16Array]'))
+ var.put(u'int32Tag', Js(u'[object Int32Array]'))
+ var.put(u'uint8Tag', Js(u'[object Uint8Array]'))
+ var.put(u'uint8ClampedTag', Js(u'[object Uint8ClampedArray]'))
+ var.put(u'uint16Tag', Js(u'[object Uint16Array]'))
+ var.put(u'uint32Tag', Js(u'[object Uint32Array]'))
+ PyJs_Object_3856_ = Js({})
+ var.put(u'typedArrayTags', PyJs_Object_3856_)
+ def PyJs_LONG_3857_(var=var):
+ return var.get(u'typedArrayTags').put(var.get(u'int8Tag'), var.get(u'typedArrayTags').put(var.get(u'int16Tag'), var.get(u'typedArrayTags').put(var.get(u'int32Tag'), var.get(u'typedArrayTags').put(var.get(u'uint8Tag'), var.get(u'typedArrayTags').put(var.get(u'uint8ClampedTag'), var.get(u'typedArrayTags').put(var.get(u'uint16Tag'), var.get(u'typedArrayTags').put(var.get(u'uint32Tag'), var.get(u'true'))))))))
+ var.get(u'typedArrayTags').put(var.get(u'float32Tag'), var.get(u'typedArrayTags').put(var.get(u'float64Tag'), PyJs_LONG_3857_()))
+ def PyJs_LONG_3859_(var=var):
+ def PyJs_LONG_3858_(var=var):
+ return var.get(u'typedArrayTags').put(var.get(u'funcTag'), var.get(u'typedArrayTags').put(var.get(u'mapTag'), var.get(u'typedArrayTags').put(var.get(u'numberTag'), var.get(u'typedArrayTags').put(var.get(u'objectTag'), var.get(u'typedArrayTags').put(var.get(u'regexpTag'), var.get(u'typedArrayTags').put(var.get(u'setTag'), var.get(u'typedArrayTags').put(var.get(u'stringTag'), var.get(u'typedArrayTags').put(var.get(u'weakMapTag'), Js(False)))))))))
+ return var.get(u'typedArrayTags').put(var.get(u'argsTag'), var.get(u'typedArrayTags').put(var.get(u'arrayTag'), var.get(u'typedArrayTags').put(var.get(u'arrayBufferTag'), var.get(u'typedArrayTags').put(var.get(u'boolTag'), var.get(u'typedArrayTags').put(var.get(u'dataViewTag'), var.get(u'typedArrayTags').put(var.get(u'dateTag'), var.get(u'typedArrayTags').put(var.get(u'errorTag'), PyJs_LONG_3858_())))))))
+ PyJs_LONG_3859_()
+ var.put(u'objectProto', var.get(u'Object').get(u'prototype'))
+ var.put(u'objectToString', var.get(u'objectProto').get(u'toString'))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'isTypedArray'))
+PyJs_anonymous_3855_._set_name(u'anonymous')
+PyJs_Object_3860_ = Js({u'./isLength':Js(465.0),u'./isObjectLike':Js(468.0)})
+@Js
+def PyJs_anonymous_3861_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'indexKeys', u'exports', u'baseHas', u'baseKeys', u'keys', u'isArrayLike', u'require', u'isIndex', u'module', u'isPrototype'])
+ @Js
+ def PyJsHoisted_keys_(object, this, arguments, var=var):
+ var = Scope({u'this':this, u'object':object, u'arguments':arguments}, var)
+ var.registers([u'skipIndexes', u'object', u'indexes', u'length', u'result', u'key', u'isProto'])
+ var.put(u'isProto', var.get(u'isPrototype')(var.get(u'object')))
+ if (var.get(u'isProto') or var.get(u'isArrayLike')(var.get(u'object'))).neg():
+ return var.get(u'baseKeys')(var.get(u'object'))
+ var.put(u'indexes', var.get(u'indexKeys')(var.get(u'object')))
+ var.put(u'skipIndexes', var.get(u'indexes').neg().neg())
+ var.put(u'result', (var.get(u'indexes') or Js([])))
+ var.put(u'length', var.get(u'result').get(u'length'))
+ for PyJsTemp in var.get(u'object'):
+ var.put(u'key', PyJsTemp)
+ if ((var.get(u'baseHas')(var.get(u'object'), var.get(u'key')) and (var.get(u'skipIndexes') and ((var.get(u'key')==Js(u'length')) or var.get(u'isIndex')(var.get(u'key'), var.get(u'length')))).neg()) and (var.get(u'isProto') and (var.get(u'key')==Js(u'constructor'))).neg()):
+ var.get(u'result').callprop(u'push', var.get(u'key'))
+ return var.get(u'result')
+ PyJsHoisted_keys_.func_name = u'keys'
+ var.put(u'keys', PyJsHoisted_keys_)
+ var.put(u'baseHas', var.get(u'require')(Js(u'./_baseHas')))
+ var.put(u'baseKeys', var.get(u'require')(Js(u'./_baseKeys')))
+ var.put(u'indexKeys', var.get(u'require')(Js(u'./_indexKeys')))
+ var.put(u'isArrayLike', var.get(u'require')(Js(u'./isArrayLike')))
+ var.put(u'isIndex', var.get(u'require')(Js(u'./_isIndex')))
+ var.put(u'isPrototype', var.get(u'require')(Js(u'./_isPrototype')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'keys'))
+PyJs_anonymous_3861_._set_name(u'anonymous')
+PyJs_Object_3862_ = Js({u'./_baseHas':Js(323.0),u'./_baseKeys':Js(332.0),u'./_indexKeys':Js(393.0),u'./_isIndex':Js(401.0),u'./_isPrototype':Js(406.0),u'./isArrayLike':Js(459.0)})
+@Js
+def PyJs_anonymous_3863_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'indexKeys', u'exports', u'baseKeysIn', u'require', u'isIndex', u'module', u'keysIn', u'isPrototype', u'hasOwnProperty', u'objectProto'])
+ @Js
+ def PyJsHoisted_keysIn_(object, this, arguments, var=var):
+ var = Scope({u'this':this, u'object':object, u'arguments':arguments}, var)
+ var.registers([u'skipIndexes', u'index', u'object', u'indexes', u'length', u'result', u'key', u'props', u'isProto', u'propsLength'])
+ var.put(u'index', (-Js(1.0)))
+ var.put(u'isProto', var.get(u'isPrototype')(var.get(u'object')))
+ var.put(u'props', var.get(u'baseKeysIn')(var.get(u'object')))
+ var.put(u'propsLength', var.get(u'props').get(u'length'))
+ var.put(u'indexes', var.get(u'indexKeys')(var.get(u'object')))
+ var.put(u'skipIndexes', var.get(u'indexes').neg().neg())
+ var.put(u'result', (var.get(u'indexes') or Js([])))
+ var.put(u'length', var.get(u'result').get(u'length'))
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))Js(1.0)) and var.get(u'isIterateeCall')(var.get(u'collection'), var.get(u'iteratees').get(u'0'), var.get(u'iteratees').get(u'1'))):
+ var.put(u'iteratees', Js([]))
+ else:
+ if ((var.get(u'length')>Js(2.0)) and var.get(u'isIterateeCall')(var.get(u'iteratees').get(u'0'), var.get(u'iteratees').get(u'1'), var.get(u'iteratees').get(u'2'))):
+ var.put(u'iteratees', Js([var.get(u'iteratees').get(u'0')]))
+ var.put(u'iteratees', (var.get(u'iteratees').get(u'0') if ((var.get(u'iteratees').get(u'length')==Js(1.0)) and var.get(u'isArray')(var.get(u'iteratees').get(u'0'))) else var.get(u'baseFlatten')(var.get(u'iteratees'), Js(1.0), var.get(u'isFlattenableIteratee'))))
+ return var.get(u'baseOrderBy')(var.get(u'collection'), var.get(u'iteratees'), Js([]))
+ PyJs_anonymous_3887_._set_name(u'anonymous')
+ var.put(u'sortBy', var.get(u'rest')(PyJs_anonymous_3887_))
+ var.get(u'module').put(u'exports', var.get(u'sortBy'))
+PyJs_anonymous_3886_._set_name(u'anonymous')
+PyJs_Object_3888_ = Js({u'./_baseFlatten':Js(318.0),u'./_baseOrderBy':Js(339.0),u'./_isFlattenableIteratee':Js(399.0),u'./_isIterateeCall':Js(402.0),u'./isArray':Js(458.0),u'./rest':Js(484.0)})
+@Js
+def PyJs_anonymous_3889_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'startsWith', u'exports', u'toInteger', u'baseToString', u'baseClamp', u'module', u'toString', u'require'])
+ @Js
+ def PyJsHoisted_startsWith_(string, target, position, this, arguments, var=var):
+ var = Scope({u'this':this, u'position':position, u'string':string, u'arguments':arguments, u'target':target}, var)
+ var.registers([u'position', u'string', u'target'])
+ var.put(u'string', var.get(u'toString')(var.get(u'string')))
+ var.put(u'position', var.get(u'baseClamp')(var.get(u'toInteger')(var.get(u'position')), Js(0.0), var.get(u'string').get(u'length')))
+ return (var.get(u'string').callprop(u'lastIndexOf', var.get(u'baseToString')(var.get(u'target')), var.get(u'position'))==var.get(u'position'))
+ PyJsHoisted_startsWith_.func_name = u'startsWith'
+ var.put(u'startsWith', PyJsHoisted_startsWith_)
+ var.put(u'baseClamp', var.get(u'require')(Js(u'./_baseClamp')))
+ var.put(u'baseToString', var.get(u'require')(Js(u'./_baseToString')))
+ var.put(u'toInteger', var.get(u'require')(Js(u'./toInteger')))
+ var.put(u'toString', var.get(u'require')(Js(u'./toString')))
+ pass
+ var.get(u'module').put(u'exports', var.get(u'startsWith'))
+PyJs_anonymous_3889_._set_name(u'anonymous')
+PyJs_Object_3890_ = Js({u'./_baseClamp':Js(313.0),u'./_baseToString':Js(347.0),u'./toInteger':Js(490.0),u'./toString':Js(493.0)})
+@Js
+def PyJs_anonymous_3891_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'stubArray', u'exports', u'require', u'module'])
+ @Js
+ def PyJsHoisted_stubArray_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return Js([])
+ PyJsHoisted_stubArray_.func_name = u'stubArray'
+ var.put(u'stubArray', PyJsHoisted_stubArray_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'stubArray'))
+PyJs_anonymous_3891_._set_name(u'anonymous')
+PyJs_Object_3892_ = Js({})
+@Js
+def PyJs_anonymous_3893_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'stubFalse', u'exports', u'module'])
+ @Js
+ def PyJsHoisted_stubFalse_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return Js(False)
+ PyJsHoisted_stubFalse_.func_name = u'stubFalse'
+ var.put(u'stubFalse', PyJsHoisted_stubFalse_)
+ pass
+ var.get(u'module').put(u'exports', var.get(u'stubFalse'))
+PyJs_anonymous_3893_._set_name(u'anonymous')
+PyJs_Object_3894_ = Js({})
+@Js
+def PyJs_anonymous_3895_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'INFINITY', u'MAX_INTEGER', u'module', u'toNumber', u'toFinite', u'require'])
+ @Js
+ def PyJsHoisted_toFinite_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value', u'sign'])
+ if var.get(u'value').neg():
+ return (var.get(u'value') if PyJsStrictEq(var.get(u'value'),Js(0.0)) else Js(0.0))
+ var.put(u'value', var.get(u'toNumber')(var.get(u'value')))
+ if (PyJsStrictEq(var.get(u'value'),var.get(u'INFINITY')) or PyJsStrictEq(var.get(u'value'),(-var.get(u'INFINITY')))):
+ var.put(u'sign', ((-Js(1.0)) if (var.get(u'value')Js(10000.0)):
+ return var.get('undefined')
+ var.put(u'match', JsRegExp(u'/^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i').callprop(u'exec', var.get(u'str')))
+ if var.get(u'match').neg():
+ return var.get('undefined')
+ var.put(u'n', var.get(u'parseFloat')(var.get(u'match').get(u'1')))
+ var.put(u'type', (var.get(u'match').get(u'2') or Js(u'ms')).callprop(u'toLowerCase'))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'years')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'year')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'yrs')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'yr')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'y')):
+ SWITCHED = True
+ return (var.get(u'n')*var.get(u'y'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'days')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'day')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'd')):
+ SWITCHED = True
+ return (var.get(u'n')*var.get(u'd'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'hours')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'hour')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'hrs')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'hr')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'h')):
+ SWITCHED = True
+ return (var.get(u'n')*var.get(u'h'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'minutes')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'minute')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'mins')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'min')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'm')):
+ SWITCHED = True
+ return (var.get(u'n')*var.get(u'm'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'seconds')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'second')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'secs')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'sec')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u's')):
+ SWITCHED = True
+ return (var.get(u'n')*var.get(u's'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'milliseconds')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'millisecond')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'msecs')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'msec')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ms')):
+ SWITCHED = True
+ return var.get(u'n')
+ SWITCHED = True
+ break
+ PyJsHoisted_parse_.func_name = u'parse'
+ var.put(u'parse', PyJsHoisted_parse_)
+ @Js
+ def PyJsHoisted_short_(ms, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'ms':ms}, var)
+ var.registers([u'ms'])
+ if (var.get(u'ms')>=var.get(u'd')):
+ return (var.get(u'Math').callprop(u'round', (var.get(u'ms')/var.get(u'd')))+Js(u'd'))
+ if (var.get(u'ms')>=var.get(u'h')):
+ return (var.get(u'Math').callprop(u'round', (var.get(u'ms')/var.get(u'h')))+Js(u'h'))
+ if (var.get(u'ms')>=var.get(u'm')):
+ return (var.get(u'Math').callprop(u'round', (var.get(u'ms')/var.get(u'm')))+Js(u'm'))
+ if (var.get(u'ms')>=var.get(u's')):
+ return (var.get(u'Math').callprop(u'round', (var.get(u'ms')/var.get(u's')))+Js(u's'))
+ return (var.get(u'ms')+Js(u'ms'))
+ PyJsHoisted_short_.func_name = u'short'
+ var.put(u'short', PyJsHoisted_short_)
+ @Js
+ def PyJsHoisted_plural_(ms, n, name, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'name':name, u'ms':ms, u'n':n}, var)
+ var.registers([u'name', u'ms', u'n'])
+ if (var.get(u'ms')var.get(u'dst')):
+ var.get(u'names').put(var.get(u'dst'), var.get(u'names').get(var.get(u'src')))
+ var.put(u'dst',Js(var.get(u'dst').to_number())+Js(1))
+ finally:
+ var.put(u'src',Js(var.get(u'src').to_number())+Js(1))
+ var.get(u'names').put(u'length', var.get(u'dst'))
+ return var.get(u'names')
+ PyJs_getOwnPropertyNames_3925_._set_name(u'getOwnPropertyNames')
+ var.get(u'Object').put(u'getOwnPropertyNames', PyJs_getOwnPropertyNames_3925_)
+ pass
+ pass
+ var.get(u'defProp')(var.get(u'exports'), Js(u'makeAccessor'), var.get(u'makeAccessor'))
+PyJs_anonymous_3921_._set_name(u'anonymous')
+PyJs_Object_3927_ = Js({})
+@Js
+def PyJs_anonymous_3928_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_3929_ = Js({})
+ @Js
+ def PyJs_anonymous_3930_(PyJsArg_676c6f62616c_, this, arguments, var=var):
+ var = Scope({u'this':this, u'global':PyJsArg_676c6f62616c_, u'arguments':arguments}, var)
+ var.registers([u'global'])
+ pass
+ @Js
+ def PyJs_anonymous_3931_(root, this, arguments, var=var):
+ var = Scope({u'this':this, u'root':root, u'arguments':arguments}, var)
+ var.registers([u'dataIsEmpty', u'zeroes', u'codePointToString', u'freeModule', u'HIGH_SURROGATE_MIN', u'dataRemove', u'freeExports', u'splitAtBMP', u'dataIntersection', u'lowSurrogate', u'dataContains', u'dataFromCodePoints', u'dataAddData', u'createBMPCharacterClasses', u'createSurrogateCharacterClasses', u'createUnicodeCharacterClasses', u'ERRORS', u'dataToArray', u'floor', u'regenerate', u'hex', u'surrogateSet', u'optimizeByLowSurrogates', u'stringFromCharCode', u'toString', u'dataRemoveData', u'freeGlobal', u'pad', u'LOW_SURROGATE_MAX', u'isArray', u'HIGH_SURROGATE_MAX', u'extend', u'symbolToCodePoint', u'object', u'createCharacterClassesFromData', u'LOW_SURROGATE_MIN', u'slice', u'hasOwnProperty', u'dataRemoveRange', u'isNumber', u'dataAdd', u'highSurrogate', u'codePointToStringUnicode', u'proto', u'dataAddRange', u'regexNull', u'dataIsSingleton', u'root', u'optimizeSurrogateMappings', u'forEach'])
+ var.put(u'freeExports', ((var.get(u'exports',throw=False).typeof()==Js(u'object')) and var.get(u'exports')))
+ var.put(u'freeModule', ((((var.get(u'module',throw=False).typeof()==Js(u'object')) and var.get(u'module')) and (var.get(u'module').get(u'exports')==var.get(u'freeExports'))) and var.get(u'module')))
+ var.put(u'freeGlobal', ((var.get(u'global',throw=False).typeof()==Js(u'object')) and var.get(u'global')))
+ if (PyJsStrictEq(var.get(u'freeGlobal').get(u'global'),var.get(u'freeGlobal')) or PyJsStrictEq(var.get(u'freeGlobal').get(u'window'),var.get(u'freeGlobal'))):
+ var.put(u'root', var.get(u'freeGlobal'))
+ PyJs_Object_3932_ = Js({u'rangeOrder':(Js(u'A range\u2019s `stop` value must be greater than or equal ')+Js(u'to the `start` value.')),u'codePointRange':(Js(u'Invalid code point value. Code points range from ')+Js(u'U+000000 to U+10FFFF.'))})
+ var.put(u'ERRORS', PyJs_Object_3932_)
+ var.put(u'HIGH_SURROGATE_MIN', Js(55296))
+ var.put(u'HIGH_SURROGATE_MAX', Js(56319))
+ var.put(u'LOW_SURROGATE_MIN', Js(56320))
+ var.put(u'LOW_SURROGATE_MAX', Js(57343))
+ var.put(u'regexNull', JsRegExp(u'/\\\\x00([^0123456789]|$)/g'))
+ PyJs_Object_3933_ = Js({})
+ var.put(u'object', PyJs_Object_3933_)
+ var.put(u'hasOwnProperty', var.get(u'object').get(u'hasOwnProperty'))
+ @Js
+ def PyJs_anonymous_3934_(destination, source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'destination':destination, u'arguments':arguments}, var)
+ var.registers([u'source', u'destination', u'key'])
+ pass
+ for PyJsTemp in var.get(u'source'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'hasOwnProperty').callprop(u'call', var.get(u'source'), var.get(u'key')):
+ var.get(u'destination').put(var.get(u'key'), var.get(u'source').get(var.get(u'key')))
+ return var.get(u'destination')
+ PyJs_anonymous_3934_._set_name(u'anonymous')
+ var.put(u'extend', PyJs_anonymous_3934_)
+ @Js
+ def PyJs_anonymous_3935_(array, callback, this, arguments, var=var):
+ var = Scope({u'this':this, u'callback':callback, u'array':array, u'arguments':arguments}, var)
+ var.registers([u'index', u'length', u'array', u'callback'])
+ var.put(u'index', (-Js(1.0)))
+ var.put(u'length', var.get(u'array').get(u'length'))
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))=var.get(u'start')) and (var.get(u'codePoint')var.get(u'rangeEnd')):
+ return var.get(u'data')
+ if ((var.get(u'rangeStart')<=var.get(u'start')) and (var.get(u'rangeEnd')>=var.get(u'end'))):
+ var.get(u'data').callprop(u'splice', var.get(u'index'), Js(2.0))
+ continue
+ if ((var.get(u'rangeStart')>=var.get(u'start')) and (var.get(u'rangeEnd')=var.get(u'start')) and (var.get(u'rangeStart')<=var.get(u'end'))):
+ var.get(u'data').put((var.get(u'index')+Js(1.0)), var.get(u'rangeStart'))
+ else:
+ if ((var.get(u'rangeEnd')>=var.get(u'start')) and (var.get(u'rangeEnd')<=var.get(u'end'))):
+ var.get(u'data').put(var.get(u'index'), (var.get(u'rangeEnd')+Js(1.0)))
+ return var.get(u'data')
+ var.put(u'index', Js(2.0), u'+')
+ return var.get(u'data')
+ PyJs_anonymous_3942_._set_name(u'anonymous')
+ var.put(u'dataRemoveRange', PyJs_anonymous_3942_)
+ @Js
+ def PyJs_anonymous_3943_(data, codePoint, this, arguments, var=var):
+ var = Scope({u'this':this, u'codePoint':codePoint, u'data':data, u'arguments':arguments}, var)
+ var.registers([u'index', u'codePoint', u'end', u'lastIndex', u'start', u'length', u'data'])
+ var.put(u'index', Js(0.0))
+ pass
+ pass
+ var.put(u'lastIndex', var.get(u"null"))
+ var.put(u'length', var.get(u'data').get(u'length'))
+ if ((var.get(u'codePoint')Js(1114111))):
+ PyJsTempException = JsToPyException(var.get(u'RangeError')(var.get(u'ERRORS').get(u'codePointRange')))
+ raise PyJsTempException
+ while (var.get(u'index')=var.get(u'start')) and (var.get(u'codePoint')var.get(u'codePoint')):
+ var.get(u'data').callprop(u'splice', ((var.get(u'lastIndex')+Js(2.0)) if (var.get(u'lastIndex')!=var.get(u"null")) else Js(0.0)), Js(0.0), var.get(u'codePoint'), (var.get(u'codePoint')+Js(1.0)))
+ return var.get(u'data')
+ if (var.get(u'codePoint')==var.get(u'end')):
+ if ((var.get(u'codePoint')+Js(1.0))==var.get(u'data').get((var.get(u'index')+Js(2.0)))):
+ var.get(u'data').callprop(u'splice', var.get(u'index'), Js(4.0), var.get(u'start'), var.get(u'data').get((var.get(u'index')+Js(3.0))))
+ return var.get(u'data')
+ var.get(u'data').put((var.get(u'index')+Js(1.0)), (var.get(u'codePoint')+Js(1.0)))
+ return var.get(u'data')
+ var.put(u'lastIndex', var.get(u'index'))
+ var.put(u'index', Js(2.0), u'+')
+ var.get(u'data').callprop(u'push', var.get(u'codePoint'), (var.get(u'codePoint')+Js(1.0)))
+ return var.get(u'data')
+ PyJs_anonymous_3943_._set_name(u'anonymous')
+ var.put(u'dataAdd', PyJs_anonymous_3943_)
+ @Js
+ def PyJs_anonymous_3944_(dataA, dataB, this, arguments, var=var):
+ var = Scope({u'this':this, u'dataA':dataA, u'arguments':arguments, u'dataB':dataB}, var)
+ var.registers([u'index', u'end', u'dataA', u'dataB', u'start', u'length', u'data'])
+ var.put(u'index', Js(0.0))
+ pass
+ pass
+ var.put(u'data', var.get(u'dataA').callprop(u'slice'))
+ var.put(u'length', var.get(u'dataB').get(u'length'))
+ while (var.get(u'index')Js(1114111))) or (var.get(u'rangeEnd')Js(1114111))):
+ PyJsTempException = JsToPyException(var.get(u'RangeError')(var.get(u'ERRORS').get(u'codePointRange')))
+ raise PyJsTempException
+ var.put(u'index', Js(0.0))
+ pass
+ pass
+ var.put(u'added', Js(False))
+ var.put(u'length', var.get(u'data').get(u'length'))
+ while (var.get(u'index')var.get(u'rangeEnd')):
+ return var.get(u'data')
+ if ((var.get(u'start')>=var.get(u'rangeStart')) and (var.get(u'start')<=var.get(u'rangeEnd'))):
+ if ((var.get(u'end')>var.get(u'rangeStart')) and ((var.get(u'end')-Js(1.0))<=var.get(u'rangeEnd'))):
+ var.get(u'data').callprop(u'splice', var.get(u'index'), Js(2.0))
+ var.put(u'index', Js(2.0), u'-')
+ else:
+ var.get(u'data').callprop(u'splice', (var.get(u'index')-Js(1.0)), Js(2.0))
+ var.put(u'index', Js(2.0), u'-')
+ else:
+ if (var.get(u'start')==(var.get(u'rangeEnd')+Js(1.0))):
+ var.get(u'data').put(var.get(u'index'), var.get(u'rangeStart'))
+ return var.get(u'data')
+ else:
+ if (var.get(u'start')>var.get(u'rangeEnd')):
+ var.get(u'data').callprop(u'splice', var.get(u'index'), Js(0.0), var.get(u'rangeStart'), (var.get(u'rangeEnd')+Js(1.0)))
+ return var.get(u'data')
+ else:
+ if (((var.get(u'rangeStart')>=var.get(u'start')) and (var.get(u'rangeStart')=var.get(u'start')) and (var.get(u'rangeStart')=var.get(u'end'))):
+ var.get(u'data').put(var.get(u'index'), var.get(u'rangeStart'))
+ var.get(u'data').put((var.get(u'index')+Js(1.0)), (var.get(u'rangeEnd')+Js(1.0)))
+ var.put(u'added', var.get(u'true'))
+ var.put(u'index', Js(2.0), u'+')
+ if var.get(u'added').neg():
+ var.get(u'data').callprop(u'push', var.get(u'rangeStart'), (var.get(u'rangeEnd')+Js(1.0)))
+ return var.get(u'data')
+ PyJs_anonymous_3946_._set_name(u'anonymous')
+ var.put(u'dataAddRange', PyJs_anonymous_3946_)
+ @Js
+ def PyJs_anonymous_3947_(data, codePoint, this, arguments, var=var):
+ var = Scope({u'this':this, u'codePoint':codePoint, u'data':data, u'arguments':arguments}, var)
+ var.registers([u'index', u'codePoint', u'end', u'start', u'length', u'data'])
+ var.put(u'index', Js(0.0))
+ var.put(u'length', var.get(u'data').get(u'length'))
+ var.put(u'start', var.get(u'data').get(var.get(u'index')))
+ var.put(u'end', var.get(u'data').get((var.get(u'length')-Js(1.0))))
+ if (var.get(u'length')>=Js(2.0)):
+ if ((var.get(u'codePoint')var.get(u'end'))):
+ return Js(False)
+ while (var.get(u'index')=var.get(u'start')) and (var.get(u'codePoint')=Js(40)) and (var.get(u'codePoint')<=Js(43)))) or (var.get(u'codePoint')==Js(45))) or (var.get(u'codePoint')==Js(46))) or (var.get(u'codePoint')==Js(63))) or ((var.get(u'codePoint')>=Js(91)) and (var.get(u'codePoint')<=Js(94)))) or ((var.get(u'codePoint')>=Js(123)) and (var.get(u'codePoint')<=Js(125)))):
+ var.put(u'string', (Js(u'\\')+var.get(u'stringFromCharCode')(var.get(u'codePoint'))))
+ else:
+ if ((var.get(u'codePoint')>=Js(32)) and (var.get(u'codePoint')<=Js(126))):
+ var.put(u'string', var.get(u'stringFromCharCode')(var.get(u'codePoint')))
+ else:
+ if (var.get(u'codePoint')<=Js(255)):
+ var.put(u'string', (Js(u'\\x')+var.get(u'pad')(var.get(u'hex')(var.get(u'codePoint')), Js(2.0))))
+ else:
+ var.put(u'string', (Js(u'\\u')+var.get(u'pad')(var.get(u'hex')(var.get(u'codePoint')), Js(4.0))))
+ return var.get(u'string')
+ PyJs_anonymous_3954_._set_name(u'anonymous')
+ var.put(u'codePointToString', PyJs_anonymous_3954_)
+ @Js
+ def PyJs_anonymous_3955_(codePoint, this, arguments, var=var):
+ var = Scope({u'this':this, u'codePoint':codePoint, u'arguments':arguments}, var)
+ var.registers([u'codePoint'])
+ if (var.get(u'codePoint')<=Js(65535)):
+ return var.get(u'codePointToString')(var.get(u'codePoint'))
+ return ((Js(u'\\u{')+var.get(u'codePoint').callprop(u'toString', Js(16.0)).callprop(u'toUpperCase'))+Js(u'}'))
+ PyJs_anonymous_3955_._set_name(u'anonymous')
+ var.put(u'codePointToStringUnicode', PyJs_anonymous_3955_)
+ @Js
+ def PyJs_anonymous_3956_(symbol, this, arguments, var=var):
+ var = Scope({u'this':this, u'symbol':symbol, u'arguments':arguments}, var)
+ var.registers([u'symbol', u'length', u'second', u'first'])
+ var.put(u'length', var.get(u'symbol').get(u'length'))
+ var.put(u'first', var.get(u'symbol').callprop(u'charCodeAt', Js(0.0)))
+ pass
+ if (((var.get(u'first')>=var.get(u'HIGH_SURROGATE_MIN')) and (var.get(u'first')<=var.get(u'HIGH_SURROGATE_MAX'))) and (var.get(u'length')>Js(1.0))):
+ var.put(u'second', var.get(u'symbol').callprop(u'charCodeAt', Js(1.0)))
+ return (((((var.get(u'first')-var.get(u'HIGH_SURROGATE_MIN'))*Js(1024))+var.get(u'second'))-var.get(u'LOW_SURROGATE_MIN'))+Js(65536))
+ return var.get(u'first')
+ PyJs_anonymous_3956_._set_name(u'anonymous')
+ var.put(u'symbolToCodePoint', PyJs_anonymous_3956_)
+ @Js
+ def PyJs_anonymous_3957_(data, this, arguments, var=var):
+ var = Scope({u'this':this, u'data':data, u'arguments':arguments}, var)
+ var.registers([u'index', u'end', u'start', u'length', u'result', u'data'])
+ var.put(u'result', Js(u''))
+ var.put(u'index', Js(0.0))
+ pass
+ pass
+ var.put(u'length', var.get(u'data').get(u'length'))
+ if var.get(u'dataIsSingleton')(var.get(u'data')):
+ return var.get(u'codePointToString')(var.get(u'data').get(u'0'))
+ while (var.get(u'index')=var.get(u'HIGH_SURROGATE_MIN')) and (var.get(u'end')<=var.get(u'HIGH_SURROGATE_MAX'))):
+ var.get(u'bmp').callprop(u'push', var.get(u'start'), var.get(u'HIGH_SURROGATE_MIN'))
+ var.get(u'loneHighSurrogates').callprop(u'push', var.get(u'HIGH_SURROGATE_MIN'), (var.get(u'end')+Js(1.0)))
+ if ((var.get(u'end')>=var.get(u'LOW_SURROGATE_MIN')) and (var.get(u'end')<=var.get(u'LOW_SURROGATE_MAX'))):
+ var.get(u'bmp').callprop(u'push', var.get(u'start'), var.get(u'HIGH_SURROGATE_MIN'))
+ var.get(u'loneHighSurrogates').callprop(u'push', var.get(u'HIGH_SURROGATE_MIN'), (var.get(u'HIGH_SURROGATE_MAX')+Js(1.0)))
+ var.get(u'loneLowSurrogates').callprop(u'push', var.get(u'LOW_SURROGATE_MIN'), (var.get(u'end')+Js(1.0)))
+ if (var.get(u'end')>var.get(u'LOW_SURROGATE_MAX')):
+ var.get(u'bmp').callprop(u'push', var.get(u'start'), var.get(u'HIGH_SURROGATE_MIN'))
+ var.get(u'loneHighSurrogates').callprop(u'push', var.get(u'HIGH_SURROGATE_MIN'), (var.get(u'HIGH_SURROGATE_MAX')+Js(1.0)))
+ var.get(u'loneLowSurrogates').callprop(u'push', var.get(u'LOW_SURROGATE_MIN'), (var.get(u'LOW_SURROGATE_MAX')+Js(1.0)))
+ if (var.get(u'end')<=Js(65535)):
+ var.get(u'bmp').callprop(u'push', (var.get(u'LOW_SURROGATE_MAX')+Js(1.0)), (var.get(u'end')+Js(1.0)))
+ else:
+ var.get(u'bmp').callprop(u'push', (var.get(u'LOW_SURROGATE_MAX')+Js(1.0)), (Js(65535)+Js(1.0)))
+ var.get(u'astral').callprop(u'push', (Js(65535)+Js(1.0)), (var.get(u'end')+Js(1.0)))
+ else:
+ if ((var.get(u'start')>=var.get(u'HIGH_SURROGATE_MIN')) and (var.get(u'start')<=var.get(u'HIGH_SURROGATE_MAX'))):
+ if ((var.get(u'end')>=var.get(u'HIGH_SURROGATE_MIN')) and (var.get(u'end')<=var.get(u'HIGH_SURROGATE_MAX'))):
+ var.get(u'loneHighSurrogates').callprop(u'push', var.get(u'start'), (var.get(u'end')+Js(1.0)))
+ if ((var.get(u'end')>=var.get(u'LOW_SURROGATE_MIN')) and (var.get(u'end')<=var.get(u'LOW_SURROGATE_MAX'))):
+ var.get(u'loneHighSurrogates').callprop(u'push', var.get(u'start'), (var.get(u'HIGH_SURROGATE_MAX')+Js(1.0)))
+ var.get(u'loneLowSurrogates').callprop(u'push', var.get(u'LOW_SURROGATE_MIN'), (var.get(u'end')+Js(1.0)))
+ if (var.get(u'end')>var.get(u'LOW_SURROGATE_MAX')):
+ var.get(u'loneHighSurrogates').callprop(u'push', var.get(u'start'), (var.get(u'HIGH_SURROGATE_MAX')+Js(1.0)))
+ var.get(u'loneLowSurrogates').callprop(u'push', var.get(u'LOW_SURROGATE_MIN'), (var.get(u'LOW_SURROGATE_MAX')+Js(1.0)))
+ if (var.get(u'end')<=Js(65535)):
+ var.get(u'bmp').callprop(u'push', (var.get(u'LOW_SURROGATE_MAX')+Js(1.0)), (var.get(u'end')+Js(1.0)))
+ else:
+ var.get(u'bmp').callprop(u'push', (var.get(u'LOW_SURROGATE_MAX')+Js(1.0)), (Js(65535)+Js(1.0)))
+ var.get(u'astral').callprop(u'push', (Js(65535)+Js(1.0)), (var.get(u'end')+Js(1.0)))
+ else:
+ if ((var.get(u'start')>=var.get(u'LOW_SURROGATE_MIN')) and (var.get(u'start')<=var.get(u'LOW_SURROGATE_MAX'))):
+ if ((var.get(u'end')>=var.get(u'LOW_SURROGATE_MIN')) and (var.get(u'end')<=var.get(u'LOW_SURROGATE_MAX'))):
+ var.get(u'loneLowSurrogates').callprop(u'push', var.get(u'start'), (var.get(u'end')+Js(1.0)))
+ if (var.get(u'end')>var.get(u'LOW_SURROGATE_MAX')):
+ var.get(u'loneLowSurrogates').callprop(u'push', var.get(u'start'), (var.get(u'LOW_SURROGATE_MAX')+Js(1.0)))
+ if (var.get(u'end')<=Js(65535)):
+ var.get(u'bmp').callprop(u'push', (var.get(u'LOW_SURROGATE_MAX')+Js(1.0)), (var.get(u'end')+Js(1.0)))
+ else:
+ var.get(u'bmp').callprop(u'push', (var.get(u'LOW_SURROGATE_MAX')+Js(1.0)), (Js(65535)+Js(1.0)))
+ var.get(u'astral').callprop(u'push', (Js(65535)+Js(1.0)), (var.get(u'end')+Js(1.0)))
+ else:
+ if ((var.get(u'start')>var.get(u'LOW_SURROGATE_MAX')) and (var.get(u'start')<=Js(65535))):
+ if (var.get(u'end')<=Js(65535)):
+ var.get(u'bmp').callprop(u'push', var.get(u'start'), (var.get(u'end')+Js(1.0)))
+ else:
+ var.get(u'bmp').callprop(u'push', var.get(u'start'), (Js(65535)+Js(1.0)))
+ var.get(u'astral').callprop(u'push', (Js(65535)+Js(1.0)), (var.get(u'end')+Js(1.0)))
+ else:
+ var.get(u'astral').callprop(u'push', var.get(u'start'), (var.get(u'end')+Js(1.0)))
+ var.put(u'index', Js(2.0), u'+')
+ PyJs_Object_3960_ = Js({u'loneHighSurrogates':var.get(u'loneHighSurrogates'),u'loneLowSurrogates':var.get(u'loneLowSurrogates'),u'bmp':var.get(u'bmp'),u'astral':var.get(u'astral')})
+ return PyJs_Object_3960_
+ PyJs_anonymous_3959_._set_name(u'anonymous')
+ var.put(u'splitAtBMP', PyJs_anonymous_3959_)
+ @Js
+ def PyJs_anonymous_3961_(surrogateMappings, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'surrogateMappings':surrogateMappings}, var)
+ var.registers([u'nextMapping', u'index', u'lowSurrogates', u'addLow', u'highSurrogates', u'mapping', u'tmpLow', u'length', u'result', u'nextLowSurrogates', u'nextHighSurrogates', u'surrogateMappings'])
+ var.put(u'result', Js([]))
+ var.put(u'tmpLow', Js([]))
+ var.put(u'addLow', Js(False))
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ var.put(u'index', (-Js(1.0)))
+ var.put(u'length', var.get(u'surrogateMappings').get(u'length'))
+ while (var.put(u'index',Js(var.get(u'index').to_number())+Js(1))Js(1.0)):
+ var.put(u'value', var.get(u'slice').callprop(u'call', var.get(u'arguments')))
+ if var.get(u"this").instanceof(var.get(u'regenerate')):
+ var.get(u"this").put(u'data', Js([]))
+ return (var.get(u"this").callprop(u'add', var.get(u'value')) if var.get(u'value') else var.get(u"this"))
+ return var.get(u'regenerate').create().callprop(u'add', var.get(u'value'))
+ PyJs_anonymous_3967_._set_name(u'anonymous')
+ var.put(u'regenerate', PyJs_anonymous_3967_)
+ var.get(u'regenerate').put(u'version', Js(u'1.3.2'))
+ var.put(u'proto', var.get(u'regenerate').get(u'prototype'))
+ @Js
+ def PyJs_anonymous_3969_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'$this', u'value'])
+ var.put(u'$this', var.get(u"this"))
+ if (var.get(u'value')==var.get(u"null")):
+ return var.get(u'$this')
+ if var.get(u'value').instanceof(var.get(u'regenerate')):
+ var.get(u'$this').put(u'data', var.get(u'dataAddData')(var.get(u'$this').get(u'data'), var.get(u'value').get(u'data')))
+ return var.get(u'$this')
+ if (var.get(u'arguments').get(u'length')>Js(1.0)):
+ var.put(u'value', var.get(u'slice').callprop(u'call', var.get(u'arguments')))
+ if var.get(u'isArray')(var.get(u'value')):
+ @Js
+ def PyJs_anonymous_3970_(item, this, arguments, var=var):
+ var = Scope({u'this':this, u'item':item, u'arguments':arguments}, var)
+ var.registers([u'item'])
+ var.get(u'$this').callprop(u'add', var.get(u'item'))
+ PyJs_anonymous_3970_._set_name(u'anonymous')
+ var.get(u'forEach')(var.get(u'value'), PyJs_anonymous_3970_)
+ return var.get(u'$this')
+ var.get(u'$this').put(u'data', var.get(u'dataAdd')(var.get(u'$this').get(u'data'), (var.get(u'value') if var.get(u'isNumber')(var.get(u'value')) else var.get(u'symbolToCodePoint')(var.get(u'value')))))
+ return var.get(u'$this')
+ PyJs_anonymous_3969_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_3971_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'$this', u'value'])
+ var.put(u'$this', var.get(u"this"))
+ if (var.get(u'value')==var.get(u"null")):
+ return var.get(u'$this')
+ if var.get(u'value').instanceof(var.get(u'regenerate')):
+ var.get(u'$this').put(u'data', var.get(u'dataRemoveData')(var.get(u'$this').get(u'data'), var.get(u'value').get(u'data')))
+ return var.get(u'$this')
+ if (var.get(u'arguments').get(u'length')>Js(1.0)):
+ var.put(u'value', var.get(u'slice').callprop(u'call', var.get(u'arguments')))
+ if var.get(u'isArray')(var.get(u'value')):
+ @Js
+ def PyJs_anonymous_3972_(item, this, arguments, var=var):
+ var = Scope({u'this':this, u'item':item, u'arguments':arguments}, var)
+ var.registers([u'item'])
+ var.get(u'$this').callprop(u'remove', var.get(u'item'))
+ PyJs_anonymous_3972_._set_name(u'anonymous')
+ var.get(u'forEach')(var.get(u'value'), PyJs_anonymous_3972_)
+ return var.get(u'$this')
+ var.get(u'$this').put(u'data', var.get(u'dataRemove')(var.get(u'$this').get(u'data'), (var.get(u'value') if var.get(u'isNumber')(var.get(u'value')) else var.get(u'symbolToCodePoint')(var.get(u'value')))))
+ return var.get(u'$this')
+ PyJs_anonymous_3971_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_3973_(start, end, this, arguments, var=var):
+ var = Scope({u'this':this, u'start':start, u'end':end, u'arguments':arguments}, var)
+ var.registers([u'start', u'end', u'$this'])
+ var.put(u'$this', var.get(u"this"))
+ var.get(u'$this').put(u'data', var.get(u'dataAddRange')(var.get(u'$this').get(u'data'), (var.get(u'start') if var.get(u'isNumber')(var.get(u'start')) else var.get(u'symbolToCodePoint')(var.get(u'start'))), (var.get(u'end') if var.get(u'isNumber')(var.get(u'end')) else var.get(u'symbolToCodePoint')(var.get(u'end')))))
+ return var.get(u'$this')
+ PyJs_anonymous_3973_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_3974_(start, end, this, arguments, var=var):
+ var = Scope({u'this':this, u'start':start, u'end':end, u'arguments':arguments}, var)
+ var.registers([u'startCodePoint', u'endCodePoint', u'end', u'$this', u'start'])
+ var.put(u'$this', var.get(u"this"))
+ var.put(u'startCodePoint', (var.get(u'start') if var.get(u'isNumber')(var.get(u'start')) else var.get(u'symbolToCodePoint')(var.get(u'start'))))
+ var.put(u'endCodePoint', (var.get(u'end') if var.get(u'isNumber')(var.get(u'end')) else var.get(u'symbolToCodePoint')(var.get(u'end'))))
+ var.get(u'$this').put(u'data', var.get(u'dataRemoveRange')(var.get(u'$this').get(u'data'), var.get(u'startCodePoint'), var.get(u'endCodePoint')))
+ return var.get(u'$this')
+ PyJs_anonymous_3974_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_3975_(argument, this, arguments, var=var):
+ var = Scope({u'this':this, u'argument':argument, u'arguments':arguments}, var)
+ var.registers([u'array', u'$this', u'argument'])
+ var.put(u'$this', var.get(u"this"))
+ var.put(u'array', (var.get(u'dataToArray')(var.get(u'argument').get(u'data')) if var.get(u'argument').instanceof(var.get(u'regenerate')) else var.get(u'argument')))
+ var.get(u'$this').put(u'data', var.get(u'dataIntersection')(var.get(u'$this').get(u'data'), var.get(u'array')))
+ return var.get(u'$this')
+ PyJs_anonymous_3975_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_3976_(codePoint, this, arguments, var=var):
+ var = Scope({u'this':this, u'codePoint':codePoint, u'arguments':arguments}, var)
+ var.registers([u'codePoint'])
+ return var.get(u'dataContains')(var.get(u"this").get(u'data'), (var.get(u'codePoint') if var.get(u'isNumber')(var.get(u'codePoint')) else var.get(u'symbolToCodePoint')(var.get(u'codePoint'))))
+ PyJs_anonymous_3976_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_3977_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'set'])
+ var.put(u'set', var.get(u'regenerate').create())
+ var.get(u'set').put(u'data', var.get(u"this").get(u'data').callprop(u'slice', Js(0.0)))
+ return var.get(u'set')
+ PyJs_anonymous_3977_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_3978_(options, this, arguments, var=var):
+ var = Scope({u'this':this, u'options':options, u'arguments':arguments}, var)
+ var.registers([u'result', u'options'])
+ var.put(u'result', var.get(u'createCharacterClassesFromData')(var.get(u"this").get(u'data'), (var.get(u'options').get(u'bmpOnly') if var.get(u'options') else Js(False)), (var.get(u'options').get(u'hasUnicodeFlag') if var.get(u'options') else Js(False))))
+ if var.get(u'result').neg():
+ return Js(u'[]')
+ return var.get(u'result').callprop(u'replace', var.get(u'regexNull'), Js(u'\\0$1'))
+ PyJs_anonymous_3978_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_3979_(flags, this, arguments, var=var):
+ var = Scope({u'this':this, u'flags':flags, u'arguments':arguments}, var)
+ var.registers([u'pattern', u'flags'])
+ PyJs_Object_3980_ = Js({u'hasUnicodeFlag':var.get(u'true')})
+ var.put(u'pattern', var.get(u"this").callprop(u'toString', (PyJs_Object_3980_ if (var.get(u'flags') and (var.get(u'flags').callprop(u'indexOf', Js(u'u'))!=(-Js(1.0)))) else var.get(u"null"))))
+ return var.get(u'RegExp')(var.get(u'pattern'), (var.get(u'flags') or Js(u'')))
+ PyJs_anonymous_3979_._set_name(u'anonymous')
+ @Js
+ def PyJs_anonymous_3981_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'dataToArray')(var.get(u"this").get(u'data'))
+ PyJs_anonymous_3981_._set_name(u'anonymous')
+ PyJs_Object_3968_ = Js({u'add':PyJs_anonymous_3969_,u'remove':PyJs_anonymous_3971_,u'addRange':PyJs_anonymous_3973_,u'removeRange':PyJs_anonymous_3974_,u'intersection':PyJs_anonymous_3975_,u'contains':PyJs_anonymous_3976_,u'clone':PyJs_anonymous_3977_,u'toString':PyJs_anonymous_3978_,u'toRegExp':PyJs_anonymous_3979_,u'valueOf':PyJs_anonymous_3981_})
+ var.get(u'extend')(var.get(u'proto'), PyJs_Object_3968_)
+ var.get(u'proto').put(u'toArray', var.get(u'proto').get(u'valueOf'))
+ if (((var.get(u'define',throw=False).typeof()==Js(u'function')) and (var.get(u'define').get(u'amd').typeof()==Js(u'object'))) and var.get(u'define').get(u'amd')):
+ @Js
+ def PyJs_anonymous_3982_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'regenerate')
+ PyJs_anonymous_3982_._set_name(u'anonymous')
+ var.get(u'define')(PyJs_anonymous_3982_)
+ else:
+ if (var.get(u'freeExports') and var.get(u'freeExports').get(u'nodeType').neg()):
+ if var.get(u'freeModule'):
+ var.get(u'freeModule').put(u'exports', var.get(u'regenerate'))
+ else:
+ var.get(u'freeExports').put(u'regenerate', var.get(u'regenerate'))
+ else:
+ var.get(u'root').put(u'regenerate', var.get(u'regenerate'))
+ PyJs_anonymous_3931_._set_name(u'anonymous')
+ PyJs_anonymous_3931_(var.get(u"this"))
+ PyJs_anonymous_3930_._set_name(u'anonymous')
+ PyJs_anonymous_3930_.callprop(u'call', var.get(u"this"), (var.get(u'global') if PyJsStrictNeq(var.get(u'global',throw=False).typeof(),Js(u'undefined')) else (var.get(u'self') if PyJsStrictNeq(var.get(u'self',throw=False).typeof(),Js(u'undefined')) else (var.get(u'window') if PyJsStrictNeq(var.get(u'window',throw=False).typeof(),Js(u'undefined')) else PyJs_Object_3929_))))
+PyJs_anonymous_3928_._set_name(u'anonymous')
+PyJs_Object_3983_ = Js({})
+@Js
+def PyJs_anonymous_3984_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'regenerate', u'require', u'exports', u'module'])
+ var.put(u'regenerate', var.get(u'require')(Js(u'regenerate')))
+ def PyJs_LONG_3986_(var=var):
+ return var.get(u'regenerate')().callprop(u'addRange', Js(0), Js(8)).callprop(u'addRange', Js(14), Js(31)).callprop(u'addRange', Js(33), Js(159)).callprop(u'addRange', Js(161), Js(5759)).callprop(u'addRange', Js(5761), Js(8191)).callprop(u'addRange', Js(8203), Js(8231)).callprop(u'addRange', Js(8234), Js(8238)).callprop(u'addRange', Js(8240), Js(8286)).callprop(u'addRange', Js(8288), Js(12287)).callprop(u'addRange', Js(12289), Js(65278))
+ PyJs_Object_3985_ = Js({u'd':var.get(u'regenerate')().callprop(u'addRange', Js(48), Js(57)),u'D':var.get(u'regenerate')().callprop(u'addRange', Js(0), Js(47)).callprop(u'addRange', Js(58), Js(65535)),u's':var.get(u'regenerate')(Js(32), Js(160), Js(5760), Js(8239), Js(8287), Js(12288), Js(65279)).callprop(u'addRange', Js(9), Js(13)).callprop(u'addRange', Js(8192), Js(8202)).callprop(u'addRange', Js(8232), Js(8233)),u'S':PyJs_LONG_3986_().callprop(u'addRange', Js(65280), Js(65535)),u'w':var.get(u'regenerate')(Js(95)).callprop(u'addRange', Js(48), Js(57)).callprop(u'addRange', Js(65), Js(90)).callprop(u'addRange', Js(97), Js(122)),u'W':var.get(u'regenerate')(Js(96)).callprop(u'addRange', Js(0), Js(47)).callprop(u'addRange', Js(58), Js(64)).callprop(u'addRange', Js(91), Js(94)).callprop(u'addRange', Js(123), Js(65535))})
+ var.get(u'exports').put(u'REGULAR', PyJs_Object_3985_)
+ def PyJs_LONG_3988_(var=var):
+ return var.get(u'regenerate')().callprop(u'addRange', Js(0), Js(8)).callprop(u'addRange', Js(14), Js(31)).callprop(u'addRange', Js(33), Js(159)).callprop(u'addRange', Js(161), Js(5759)).callprop(u'addRange', Js(5761), Js(8191)).callprop(u'addRange', Js(8203), Js(8231)).callprop(u'addRange', Js(8234), Js(8238)).callprop(u'addRange', Js(8240), Js(8286)).callprop(u'addRange', Js(8288), Js(12287)).callprop(u'addRange', Js(12289), Js(65278))
+ PyJs_Object_3987_ = Js({u'd':var.get(u'regenerate')().callprop(u'addRange', Js(48), Js(57)),u'D':var.get(u'regenerate')().callprop(u'addRange', Js(0), Js(47)).callprop(u'addRange', Js(58), Js(1114111)),u's':var.get(u'regenerate')(Js(32), Js(160), Js(5760), Js(8239), Js(8287), Js(12288), Js(65279)).callprop(u'addRange', Js(9), Js(13)).callprop(u'addRange', Js(8192), Js(8202)).callprop(u'addRange', Js(8232), Js(8233)),u'S':PyJs_LONG_3988_().callprop(u'addRange', Js(65280), Js(1114111)),u'w':var.get(u'regenerate')(Js(95)).callprop(u'addRange', Js(48), Js(57)).callprop(u'addRange', Js(65), Js(90)).callprop(u'addRange', Js(97), Js(122)),u'W':var.get(u'regenerate')(Js(96)).callprop(u'addRange', Js(0), Js(47)).callprop(u'addRange', Js(58), Js(64)).callprop(u'addRange', Js(91), Js(94)).callprop(u'addRange', Js(123), Js(1114111))})
+ var.get(u'exports').put(u'UNICODE', PyJs_Object_3987_)
+ def PyJs_LONG_3990_(var=var):
+ return var.get(u'regenerate')().callprop(u'addRange', Js(0), Js(8)).callprop(u'addRange', Js(14), Js(31)).callprop(u'addRange', Js(33), Js(159)).callprop(u'addRange', Js(161), Js(5759)).callprop(u'addRange', Js(5761), Js(8191)).callprop(u'addRange', Js(8203), Js(8231)).callprop(u'addRange', Js(8234), Js(8238)).callprop(u'addRange', Js(8240), Js(8286)).callprop(u'addRange', Js(8288), Js(12287)).callprop(u'addRange', Js(12289), Js(65278))
+ PyJs_Object_3989_ = Js({u'd':var.get(u'regenerate')().callprop(u'addRange', Js(48), Js(57)),u'D':var.get(u'regenerate')().callprop(u'addRange', Js(0), Js(47)).callprop(u'addRange', Js(58), Js(1114111)),u's':var.get(u'regenerate')(Js(32), Js(160), Js(5760), Js(8239), Js(8287), Js(12288), Js(65279)).callprop(u'addRange', Js(9), Js(13)).callprop(u'addRange', Js(8192), Js(8202)).callprop(u'addRange', Js(8232), Js(8233)),u'S':PyJs_LONG_3990_().callprop(u'addRange', Js(65280), Js(1114111)),u'w':var.get(u'regenerate')(Js(95), Js(383), Js(8490)).callprop(u'addRange', Js(48), Js(57)).callprop(u'addRange', Js(65), Js(90)).callprop(u'addRange', Js(97), Js(122)),u'W':var.get(u'regenerate')(Js(75), Js(83), Js(96)).callprop(u'addRange', Js(0), Js(47)).callprop(u'addRange', Js(58), Js(64)).callprop(u'addRange', Js(91), Js(94)).callprop(u'addRange', Js(123), Js(1114111))})
+ var.get(u'exports').put(u'UNICODE_IGNORE_CASE', PyJs_Object_3989_)
+PyJs_anonymous_3984_._set_name(u'anonymous')
+PyJs_Object_3991_ = Js({u'regenerate':Js(501.0)})
+@Js
+def PyJs_anonymous_3992_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_3993_ = Js({u'75':Js(8490.0),u'83':Js(383.0),u'107':Js(8490.0),u'115':Js(383.0),u'181':Js(924.0),u'197':Js(8491.0),u'383':Js(83.0),u'452':Js(453.0),u'453':Js(452.0),u'455':Js(456.0),u'456':Js(455.0),u'458':Js(459.0),u'459':Js(458.0),u'497':Js(498.0),u'498':Js(497.0),u'837':Js(8126.0),u'914':Js(976.0),u'917':Js(1013.0),u'920':Js(1012.0),u'921':Js(8126.0),u'922':Js(1008.0),u'924':Js(181.0),u'928':Js(982.0),u'929':Js(1009.0),u'931':Js(962.0),u'934':Js(981.0),u'937':Js(8486.0),u'962':Js(931.0),u'976':Js(914.0),u'977':Js(1012.0),u'981':Js(934.0),u'982':Js(928.0),u'1008':Js(922.0),u'1009':Js(929.0),u'1012':Js([Js(920.0), Js(977.0)]),u'1013':Js(917.0),u'7776':Js(7835.0),u'7835':Js(7776.0),u'8126':Js([Js(837.0), Js(921.0)]),u'8486':Js(937.0),u'8490':Js(75.0),u'8491':Js(197.0),u'66560':Js(66600.0),u'66561':Js(66601.0),u'66562':Js(66602.0),u'66563':Js(66603.0),u'66564':Js(66604.0),u'66565':Js(66605.0),u'66566':Js(66606.0),u'66567':Js(66607.0),u'66568':Js(66608.0),u'66569':Js(66609.0),u'66570':Js(66610.0),u'66571':Js(66611.0),u'66572':Js(66612.0),u'66573':Js(66613.0),u'66574':Js(66614.0),u'66575':Js(66615.0),u'66576':Js(66616.0),u'66577':Js(66617.0),u'66578':Js(66618.0),u'66579':Js(66619.0),u'66580':Js(66620.0),u'66581':Js(66621.0),u'66582':Js(66622.0),u'66583':Js(66623.0),u'66584':Js(66624.0),u'66585':Js(66625.0),u'66586':Js(66626.0),u'66587':Js(66627.0),u'66588':Js(66628.0),u'66589':Js(66629.0),u'66590':Js(66630.0),u'66591':Js(66631.0),u'66592':Js(66632.0),u'66593':Js(66633.0),u'66594':Js(66634.0),u'66595':Js(66635.0),u'66596':Js(66636.0),u'66597':Js(66637.0),u'66598':Js(66638.0),u'66599':Js(66639.0),u'66600':Js(66560.0),u'66601':Js(66561.0),u'66602':Js(66562.0),u'66603':Js(66563.0),u'66604':Js(66564.0),u'66605':Js(66565.0),u'66606':Js(66566.0),u'66607':Js(66567.0),u'66608':Js(66568.0),u'66609':Js(66569.0),u'66610':Js(66570.0),u'66611':Js(66571.0),u'66612':Js(66572.0),u'66613':Js(66573.0),u'66614':Js(66574.0),u'66615':Js(66575.0),u'66616':Js(66576.0),u'66617':Js(66577.0),u'66618':Js(66578.0),u'66619':Js(66579.0),u'66620':Js(66580.0),u'66621':Js(66581.0),u'66622':Js(66582.0),u'66623':Js(66583.0),u'66624':Js(66584.0),u'66625':Js(66585.0),u'66626':Js(66586.0),u'66627':Js(66587.0),u'66628':Js(66588.0),u'66629':Js(66589.0),u'66630':Js(66590.0),u'66631':Js(66591.0),u'66632':Js(66592.0),u'66633':Js(66593.0),u'66634':Js(66594.0),u'66635':Js(66595.0),u'66636':Js(66596.0),u'66637':Js(66597.0),u'66638':Js(66598.0),u'66639':Js(66599.0),u'68736':Js(68800.0),u'68737':Js(68801.0),u'68738':Js(68802.0),u'68739':Js(68803.0),u'68740':Js(68804.0),u'68741':Js(68805.0),u'68742':Js(68806.0),u'68743':Js(68807.0),u'68744':Js(68808.0),u'68745':Js(68809.0),u'68746':Js(68810.0),u'68747':Js(68811.0),u'68748':Js(68812.0),u'68749':Js(68813.0),u'68750':Js(68814.0),u'68751':Js(68815.0),u'68752':Js(68816.0),u'68753':Js(68817.0),u'68754':Js(68818.0),u'68755':Js(68819.0),u'68756':Js(68820.0),u'68757':Js(68821.0),u'68758':Js(68822.0),u'68759':Js(68823.0),u'68760':Js(68824.0),u'68761':Js(68825.0),u'68762':Js(68826.0),u'68763':Js(68827.0),u'68764':Js(68828.0),u'68765':Js(68829.0),u'68766':Js(68830.0),u'68767':Js(68831.0),u'68768':Js(68832.0),u'68769':Js(68833.0),u'68770':Js(68834.0),u'68771':Js(68835.0),u'68772':Js(68836.0),u'68773':Js(68837.0),u'68774':Js(68838.0),u'68775':Js(68839.0),u'68776':Js(68840.0),u'68777':Js(68841.0),u'68778':Js(68842.0),u'68779':Js(68843.0),u'68780':Js(68844.0),u'68781':Js(68845.0),u'68782':Js(68846.0),u'68783':Js(68847.0),u'68784':Js(68848.0),u'68785':Js(68849.0),u'68786':Js(68850.0),u'68800':Js(68736.0),u'68801':Js(68737.0),u'68802':Js(68738.0),u'68803':Js(68739.0),u'68804':Js(68740.0),u'68805':Js(68741.0),u'68806':Js(68742.0),u'68807':Js(68743.0),u'68808':Js(68744.0),u'68809':Js(68745.0),u'68810':Js(68746.0),u'68811':Js(68747.0),u'68812':Js(68748.0),u'68813':Js(68749.0),u'68814':Js(68750.0),u'68815':Js(68751.0),u'68816':Js(68752.0),u'68817':Js(68753.0),u'68818':Js(68754.0),u'68819':Js(68755.0),u'68820':Js(68756.0),u'68821':Js(68757.0),u'68822':Js(68758.0),u'68823':Js(68759.0),u'68824':Js(68760.0),u'68825':Js(68761.0),u'68826':Js(68762.0),u'68827':Js(68763.0),u'68828':Js(68764.0),u'68829':Js(68765.0),u'68830':Js(68766.0),u'68831':Js(68767.0),u'68832':Js(68768.0),u'68833':Js(68769.0),u'68834':Js(68770.0),u'68835':Js(68771.0),u'68836':Js(68772.0),u'68837':Js(68773.0),u'68838':Js(68774.0),u'68839':Js(68775.0),u'68840':Js(68776.0),u'68841':Js(68777.0),u'68842':Js(68778.0),u'68843':Js(68779.0),u'68844':Js(68780.0),u'68845':Js(68781.0),u'68846':Js(68782.0),u'68847':Js(68783.0),u'68848':Js(68784.0),u'68849':Js(68785.0),u'68850':Js(68786.0),u'71840':Js(71872.0),u'71841':Js(71873.0),u'71842':Js(71874.0),u'71843':Js(71875.0),u'71844':Js(71876.0),u'71845':Js(71877.0),u'71846':Js(71878.0),u'71847':Js(71879.0),u'71848':Js(71880.0),u'71849':Js(71881.0),u'71850':Js(71882.0),u'71851':Js(71883.0),u'71852':Js(71884.0),u'71853':Js(71885.0),u'71854':Js(71886.0),u'71855':Js(71887.0),u'71856':Js(71888.0),u'71857':Js(71889.0),u'71858':Js(71890.0),u'71859':Js(71891.0),u'71860':Js(71892.0),u'71861':Js(71893.0),u'71862':Js(71894.0),u'71863':Js(71895.0),u'71864':Js(71896.0),u'71865':Js(71897.0),u'71866':Js(71898.0),u'71867':Js(71899.0),u'71868':Js(71900.0),u'71869':Js(71901.0),u'71870':Js(71902.0),u'71871':Js(71903.0),u'71872':Js(71840.0),u'71873':Js(71841.0),u'71874':Js(71842.0),u'71875':Js(71843.0),u'71876':Js(71844.0),u'71877':Js(71845.0),u'71878':Js(71846.0),u'71879':Js(71847.0),u'71880':Js(71848.0),u'71881':Js(71849.0),u'71882':Js(71850.0),u'71883':Js(71851.0),u'71884':Js(71852.0),u'71885':Js(71853.0),u'71886':Js(71854.0),u'71887':Js(71855.0),u'71888':Js(71856.0),u'71889':Js(71857.0),u'71890':Js(71858.0),u'71891':Js(71859.0),u'71892':Js(71860.0),u'71893':Js(71861.0),u'71894':Js(71862.0),u'71895':Js(71863.0),u'71896':Js(71864.0),u'71897':Js(71865.0),u'71898':Js(71866.0),u'71899':Js(71867.0),u'71900':Js(71868.0),u'71901':Js(71869.0),u'71902':Js(71870.0),u'71903':Js(71871.0)})
+ var.get(u'module').put(u'exports', PyJs_Object_3993_)
+PyJs_anonymous_3992_._set_name(u'anonymous')
+PyJs_Object_3994_ = Js({})
+@Js
+def PyJs_anonymous_3995_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'iuMappings', u'module', u'parse', u'unicode', u'wrap', u'hasOwnProperty', u'regenerate', u'ignoreCase', u'caseFold', u'has', u'DOT_SET', u'getCharacterClassEscapeSet', u'exports', u'object', u'update', u'processCharacterClass', u'generate', u'ESCAPE_SETS', u'require', u'processTerm', u'BMP_SET', u'UNICODE_SET', u'assign', u'DOT_SET_UNICODE'])
+ @Js
+ def PyJsHoisted_getCharacterClassEscapeSet_(character, this, arguments, var=var):
+ var = Scope({u'this':this, u'character':character, u'arguments':arguments}, var)
+ var.registers([u'character'])
+ if var.get(u'unicode'):
+ if var.get(u'ignoreCase'):
+ return var.get(u'ESCAPE_SETS').get(u'UNICODE_IGNORE_CASE').get(var.get(u'character'))
+ return var.get(u'ESCAPE_SETS').get(u'UNICODE').get(var.get(u'character'))
+ return var.get(u'ESCAPE_SETS').get(u'REGULAR').get(var.get(u'character'))
+ PyJsHoisted_getCharacterClassEscapeSet_.func_name = u'getCharacterClassEscapeSet'
+ var.put(u'getCharacterClassEscapeSet', PyJsHoisted_getCharacterClassEscapeSet_)
+ @Js
+ def PyJsHoisted_update_(item, pattern, this, arguments, var=var):
+ var = Scope({u'this':this, u'item':item, u'arguments':arguments, u'pattern':pattern}, var)
+ var.registers([u'item', u'tree', u'pattern'])
+ if var.get(u'pattern').neg():
+ return var.get('undefined')
+ var.put(u'tree', var.get(u'parse')(var.get(u'pattern'), Js(u'')))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'tree').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'characterClass')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'group')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'value')):
+ SWITCHED = True
+ break
+ if True:
+ SWITCHED = True
+ var.put(u'tree', var.get(u'wrap')(var.get(u'tree'), var.get(u'pattern')))
+ SWITCHED = True
+ break
+ var.get(u'assign')(var.get(u'item'), var.get(u'tree'))
+ PyJsHoisted_update_.func_name = u'update'
+ var.put(u'update', PyJsHoisted_update_)
+ @Js
+ def PyJsHoisted_processTerm_(item, this, arguments, var=var):
+ var = Scope({u'this':this, u'item':item, u'arguments':arguments}, var)
+ var.registers([u'item', u'codePoint', u'set', u'folded'])
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'item').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'dot')):
+ SWITCHED = True
+ var.get(u'update')(var.get(u'item'), (var.get(u'DOT_SET_UNICODE') if var.get(u'unicode') else var.get(u'DOT_SET')).callprop(u'toString'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'characterClass')):
+ SWITCHED = True
+ var.put(u'item', var.get(u'processCharacterClass')(var.get(u'item')))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'characterClassEscape')):
+ SWITCHED = True
+ var.get(u'update')(var.get(u'item'), var.get(u'getCharacterClassEscapeSet')(var.get(u'item').get(u'value')).callprop(u'toString'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'alternative')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'disjunction')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'group')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'quantifier')):
+ SWITCHED = True
+ var.get(u'item').put(u'body', var.get(u'item').get(u'body').callprop(u'map', var.get(u'processTerm')))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'value')):
+ SWITCHED = True
+ var.put(u'codePoint', var.get(u'item').get(u'codePoint'))
+ var.put(u'set', var.get(u'regenerate')(var.get(u'codePoint')))
+ if (var.get(u'ignoreCase') and var.get(u'unicode')):
+ var.put(u'folded', var.get(u'caseFold')(var.get(u'codePoint')))
+ if var.get(u'folded'):
+ var.get(u'set').callprop(u'add', var.get(u'folded'))
+ var.get(u'update')(var.get(u'item'), var.get(u'set').callprop(u'toString'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'anchor')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'empty')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'group')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'reference')):
+ SWITCHED = True
+ break
+ if True:
+ SWITCHED = True
+ PyJsTempException = JsToPyException(var.get(u'Error')((Js(u'Unknown term type: ')+var.get(u'item').get(u'type'))))
+ raise PyJsTempException
+ SWITCHED = True
+ break
+ return var.get(u'item')
+ PyJsHoisted_processTerm_.func_name = u'processTerm'
+ var.put(u'processTerm', PyJsHoisted_processTerm_)
+ @Js
+ def PyJsHoisted_caseFold_(codePoint, this, arguments, var=var):
+ var = Scope({u'this':this, u'codePoint':codePoint, u'arguments':arguments}, var)
+ var.registers([u'codePoint'])
+ return (var.get(u'iuMappings').get(var.get(u'codePoint')) if var.get(u'has')(var.get(u'iuMappings'), var.get(u'codePoint')) else Js(False))
+ PyJsHoisted_caseFold_.func_name = u'caseFold'
+ var.put(u'caseFold', PyJsHoisted_caseFold_)
+ @Js
+ def PyJsHoisted_processCharacterClass_(characterClassItem, this, arguments, var=var):
+ var = Scope({u'this':this, u'characterClassItem':characterClassItem, u'arguments':arguments}, var)
+ var.registers([u'body', u'set', u'characterClassItem'])
+ var.put(u'set', var.get(u'regenerate')())
+ @Js
+ def PyJs_anonymous_3999_(item, this, arguments, var=var):
+ var = Scope({u'this':this, u'item':item, u'arguments':arguments}, var)
+ var.registers([u'max', u'folded', u'item', u'min'])
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'item').get(u'type'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'value')):
+ SWITCHED = True
+ var.get(u'set').callprop(u'add', var.get(u'item').get(u'codePoint'))
+ if (var.get(u'ignoreCase') and var.get(u'unicode')):
+ var.put(u'folded', var.get(u'caseFold')(var.get(u'item').get(u'codePoint')))
+ if var.get(u'folded'):
+ var.get(u'set').callprop(u'add', var.get(u'folded'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'characterClassRange')):
+ SWITCHED = True
+ var.put(u'min', var.get(u'item').get(u'min').get(u'codePoint'))
+ var.put(u'max', var.get(u'item').get(u'max').get(u'codePoint'))
+ var.get(u'set').callprop(u'addRange', var.get(u'min'), var.get(u'max'))
+ if (var.get(u'ignoreCase') and var.get(u'unicode')):
+ var.get(u'set').callprop(u'iuAddRange', var.get(u'min'), var.get(u'max'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'characterClassEscape')):
+ SWITCHED = True
+ var.get(u'set').callprop(u'add', var.get(u'getCharacterClassEscapeSet')(var.get(u'item').get(u'value')))
+ break
+ if True:
+ SWITCHED = True
+ PyJsTempException = JsToPyException(var.get(u'Error')((Js(u'Unknown term type: ')+var.get(u'item').get(u'type'))))
+ raise PyJsTempException
+ SWITCHED = True
+ break
+ PyJs_anonymous_3999_._set_name(u'anonymous')
+ var.put(u'body', var.get(u'characterClassItem').get(u'body').callprop(u'forEach', PyJs_anonymous_3999_))
+ if var.get(u'characterClassItem').get(u'negative'):
+ var.put(u'set', (var.get(u'UNICODE_SET') if var.get(u'unicode') else var.get(u'BMP_SET')).callprop(u'clone').callprop(u'remove', var.get(u'set')))
+ var.get(u'update')(var.get(u'characterClassItem'), var.get(u'set').callprop(u'toString'))
+ return var.get(u'characterClassItem')
+ PyJsHoisted_processCharacterClass_.func_name = u'processCharacterClass'
+ var.put(u'processCharacterClass', PyJsHoisted_processCharacterClass_)
+ @Js
+ def PyJsHoisted_wrap_(tree, pattern, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'tree':tree, u'arguments':arguments}, var)
+ var.registers([u'pattern', u'tree'])
+ PyJs_Object_3998_ = Js({u'type':Js(u'group'),u'behavior':Js(u'ignore'),u'body':Js([var.get(u'tree')]),u'raw':((Js(u'(?:')+var.get(u'pattern'))+Js(u')'))})
+ return PyJs_Object_3998_
+ PyJsHoisted_wrap_.func_name = u'wrap'
+ var.put(u'wrap', PyJsHoisted_wrap_)
+ @Js
+ def PyJsHoisted_has_(object, property, this, arguments, var=var):
+ var = Scope({u'this':this, u'property':property, u'object':object, u'arguments':arguments}, var)
+ var.registers([u'property', u'object'])
+ return var.get(u'hasOwnProperty').callprop(u'call', var.get(u'object'), var.get(u'property'))
+ PyJsHoisted_has_.func_name = u'has'
+ var.put(u'has', PyJsHoisted_has_)
+ @Js
+ def PyJsHoisted_assign_(target, source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'target':target, u'arguments':arguments}, var)
+ var.registers([u'source', u'target', u'key'])
+ for PyJsTemp in var.get(u'source'):
+ var.put(u'key', PyJsTemp)
+ var.get(u'target').put(var.get(u'key'), var.get(u'source').get(var.get(u'key')))
+ PyJsHoisted_assign_.func_name = u'assign'
+ var.put(u'assign', PyJsHoisted_assign_)
+ var.put(u'generate', var.get(u'require')(Js(u'regjsgen')).get(u'generate'))
+ var.put(u'parse', var.get(u'require')(Js(u'regjsparser')).get(u'parse'))
+ var.put(u'regenerate', var.get(u'require')(Js(u'regenerate')))
+ var.put(u'iuMappings', var.get(u'require')(Js(u'./data/iu-mappings.json')))
+ var.put(u'ESCAPE_SETS', var.get(u'require')(Js(u'./data/character-class-escape-sets.js')))
+ pass
+ PyJs_Object_3996_ = Js({})
+ var.put(u'object', PyJs_Object_3996_)
+ var.put(u'hasOwnProperty', var.get(u'object').get(u'hasOwnProperty'))
+ pass
+ var.put(u'UNICODE_SET', var.get(u'regenerate')().callprop(u'addRange', Js(0), Js(1114111)))
+ var.put(u'BMP_SET', var.get(u'regenerate')().callprop(u'addRange', Js(0), Js(65535)))
+ var.put(u'DOT_SET_UNICODE', var.get(u'UNICODE_SET').callprop(u'clone').callprop(u'remove', Js(10), Js(13), Js(8232), Js(8233)))
+ var.put(u'DOT_SET', var.get(u'DOT_SET_UNICODE').callprop(u'clone').callprop(u'intersection', var.get(u'BMP_SET')))
+ @Js
+ def PyJs_anonymous_3997_(min, max, this, arguments, var=var):
+ var = Scope({u'this':this, u'max':max, u'arguments':arguments, u'min':min}, var)
+ var.registers([u'max', u'folded', u'$this', u'min'])
+ var.put(u'$this', var.get(u"this"))
+ while 1:
+ var.put(u'folded', var.get(u'caseFold')(var.get(u'min')))
+ if var.get(u'folded'):
+ var.get(u'$this').callprop(u'add', var.get(u'folded'))
+ if not (var.put(u'min',Js(var.get(u'min').to_number())+Js(1))<=var.get(u'max')):
+ break
+ return var.get(u'$this')
+ PyJs_anonymous_3997_._set_name(u'anonymous')
+ var.get(u'regenerate').get(u'prototype').put(u'iuAddRange', PyJs_anonymous_3997_)
+ pass
+ pass
+ pass
+ pass
+ var.put(u'ignoreCase', Js(False))
+ var.put(u'unicode', Js(False))
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_4000_(pattern, flags, this, arguments, var=var):
+ var = Scope({u'this':this, u'pattern':pattern, u'flags':flags, u'arguments':arguments}, var)
+ var.registers([u'pattern', u'tree', u'flags'])
+ var.put(u'tree', var.get(u'parse')(var.get(u'pattern'), var.get(u'flags')))
+ var.put(u'ignoreCase', ((var.get(u'flags').callprop(u'indexOf', Js(u'i'))>(-Js(1.0))) if var.get(u'flags') else Js(False)))
+ var.put(u'unicode', ((var.get(u'flags').callprop(u'indexOf', Js(u'u'))>(-Js(1.0))) if var.get(u'flags') else Js(False)))
+ var.get(u'assign')(var.get(u'tree'), var.get(u'processTerm')(var.get(u'tree')))
+ return var.get(u'generate')(var.get(u'tree'))
+ PyJs_anonymous_4000_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_4000_)
+PyJs_anonymous_3995_._set_name(u'anonymous')
+PyJs_Object_4001_ = Js({u'./data/character-class-escape-sets.js':Js(502.0),u'./data/iu-mappings.json':Js(503.0),u'regenerate':Js(501.0),u'regjsgen':Js(505.0),u'regjsparser':Js(506.0)})
+@Js
+def PyJs_anonymous_4002_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_4003_ = Js({})
+ @Js
+ def PyJs_anonymous_4004_(PyJsArg_676c6f62616c_, this, arguments, var=var):
+ var = Scope({u'this':this, u'global':PyJsArg_676c6f62616c_, u'arguments':arguments}, var)
+ var.registers([u'global'])
+ pass
+ @Js
+ def PyJs_anonymous_4005_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'freeModule', u'objectTypes', u'freeGlobal', u'generateCharacterClassRange', u'freeExports', u'generateCharacterClassEscape', u'assertType', u'generateReference', u'generateCharacterClass', u'generateAlternative', u'generateClassAtom', u'floor', u'generateDisjunction', u'stringFromCharCode', u'generate', u'generateQuantifier', u'generateDot', u'fromCodePoint', u'generateValue', u'generateAnchor', u'generateAtom', u'oldRoot', u'generateTerm', u'root', u'generateGroup'])
+ @Js
+ def PyJsHoisted_generateQuantifier_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'max', u'quantifier', u'min'])
+ var.get(u'assertType')(var.get(u'node').get(u'type'), Js(u'quantifier'))
+ var.put(u'quantifier', Js(u''))
+ var.put(u'min', var.get(u'node').get(u'min'))
+ var.put(u'max', var.get(u'node').get(u'max'))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'max'))
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u'undefined')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, var.get(u"null")):
+ SWITCHED = True
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'min'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(0.0)):
+ SWITCHED = True
+ var.put(u'quantifier', Js(u'*'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(1.0)):
+ SWITCHED = True
+ var.put(u'quantifier', Js(u'+'))
+ break
+ if True:
+ SWITCHED = True
+ var.put(u'quantifier', ((Js(u'{')+var.get(u'min'))+Js(u',}')))
+ break
+ SWITCHED = True
+ break
+ break
+ if True:
+ SWITCHED = True
+ if (var.get(u'min')==var.get(u'max')):
+ var.put(u'quantifier', ((Js(u'{')+var.get(u'min'))+Js(u'}')))
+ else:
+ if ((var.get(u'min')==Js(0.0)) and (var.get(u'max')==Js(1.0))):
+ var.put(u'quantifier', Js(u'?'))
+ else:
+ var.put(u'quantifier', ((((Js(u'{')+var.get(u'min'))+Js(u','))+var.get(u'max'))+Js(u'}')))
+ break
+ SWITCHED = True
+ break
+ if var.get(u'node').get(u'greedy').neg():
+ var.put(u'quantifier', Js(u'?'), u'+')
+ return (var.get(u'generateAtom')(var.get(u'node').get(u'body').get(u'0'))+var.get(u'quantifier'))
+ PyJsHoisted_generateQuantifier_.func_name = u'generateQuantifier'
+ var.put(u'generateQuantifier', PyJsHoisted_generateQuantifier_)
+ @Js
+ def PyJsHoisted_generateTerm_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u'assertType')(var.get(u'node').get(u'type'), Js(u'anchor|characterClass|characterClassEscape|empty|group|quantifier|reference|value'))
+ return var.get(u'generate')(var.get(u'node'))
+ PyJsHoisted_generateTerm_.func_name = u'generateTerm'
+ var.put(u'generateTerm', PyJsHoisted_generateTerm_)
+ @Js
+ def PyJsHoisted_generateCharacterClass_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'node', u'length', u'classRanges', u'result'])
+ var.get(u'assertType')(var.get(u'node').get(u'type'), Js(u'characterClass'))
+ var.put(u'classRanges', var.get(u'node').get(u'body'))
+ var.put(u'length', (var.get(u'classRanges').get(u'length') if var.get(u'classRanges') else Js(0.0)))
+ var.put(u'i', (-Js(1.0)))
+ var.put(u'result', Js(u'['))
+ if var.get(u'node').get(u'negative'):
+ var.put(u'result', Js(u'^'), u'+')
+ while (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))Js(1114111))) or (var.get(u'floor')(var.get(u'codePoint'))!=var.get(u'codePoint'))):
+ PyJsTempException = JsToPyException(var.get(u'RangeError')((Js(u'Invalid code point: ')+var.get(u'codePoint'))))
+ raise PyJsTempException
+ if (var.get(u'codePoint')<=Js(65535)):
+ var.get(u'codeUnits').callprop(u'push', var.get(u'codePoint'))
+ else:
+ var.put(u'codePoint', Js(65536), u'-')
+ var.put(u'highSurrogate', ((var.get(u'codePoint')>>Js(10.0))+Js(55296)))
+ var.put(u'lowSurrogate', ((var.get(u'codePoint')%Js(1024))+Js(56320)))
+ var.get(u'codeUnits').callprop(u'push', var.get(u'highSurrogate'), var.get(u'lowSurrogate'))
+ if (((var.get(u'index')+Js(1.0))==var.get(u'length')) or (var.get(u'codeUnits').get(u'length')>var.get(u'MAX_SIZE'))):
+ var.put(u'result', var.get(u'stringFromCharCode').callprop(u'apply', var.get(u"null"), var.get(u'codeUnits')), u'+')
+ var.get(u'codeUnits').put(u'length', Js(0.0))
+ return var.get(u'result')
+ PyJsHoisted_fromCodePoint_.func_name = u'fromCodePoint'
+ var.put(u'fromCodePoint', PyJsHoisted_fromCodePoint_)
+ @Js
+ def PyJsHoisted_generateDisjunction_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'body', u'i', u'length', u'node', u'result'])
+ var.get(u'assertType')(var.get(u'node').get(u'type'), Js(u'disjunction'))
+ var.put(u'body', var.get(u'node').get(u'body'))
+ var.put(u'length', (var.get(u'body').get(u'length') if var.get(u'body') else Js(0.0)))
+ if (var.get(u'length')==Js(0.0)):
+ PyJsTempException = JsToPyException(var.get(u'Error')(Js(u'No body')))
+ raise PyJsTempException
+ else:
+ if (var.get(u'length')==Js(1.0)):
+ return var.get(u'generate')(var.get(u'body').get(u'0'))
+ else:
+ var.put(u'i', (-Js(1.0)))
+ var.put(u'result', Js(u''))
+ while (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))var.get(u'max')):
+ var.get(u'bail')(Js(u'numbers out of order in {} quantifier'), Js(u''), var.get(u'from'), var.get(u'pos'))
+ var.put(u'quantifier', var.get(u'createQuantifier')(var.get(u'min'), var.get(u'max'), var.get(u'res').get(u'range').get(u'0'), var.get(u'res').get(u'range').get(u'1')))
+ if var.get(u'quantifier'):
+ if var.get(u'match')(Js(u'?')):
+ var.get(u'quantifier').put(u'greedy', Js(False))
+ var.get(u'quantifier').get(u'range').put(u'1', Js(1.0), u'+')
+ return var.get(u'quantifier')
+ PyJsHoisted_parseQuantifier_.func_name = u'parseQuantifier'
+ var.put(u'parseQuantifier', PyJsHoisted_parseQuantifier_)
+ @Js
+ def PyJsHoisted_parseDisjunction_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res', u'from'])
+ var.put(u'res', Js([]))
+ var.put(u'from', var.get(u'pos'))
+ var.get(u'res').callprop(u'push', var.get(u'parseAlternative')())
+ while var.get(u'match')(Js(u'|')):
+ var.get(u'res').callprop(u'push', var.get(u'parseAlternative')())
+ if PyJsStrictEq(var.get(u'res').get(u'length'),Js(1.0)):
+ return var.get(u'res').get(u'0')
+ return var.get(u'createDisjunction')(var.get(u'res'), var.get(u'from'), var.get(u'pos'))
+ PyJsHoisted_parseDisjunction_.func_name = u'parseDisjunction'
+ var.put(u'parseDisjunction', PyJsHoisted_parseDisjunction_)
+ @Js
+ def PyJsHoisted_flattenBody_(body, this, arguments, var=var):
+ var = Scope({u'body':body, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'body'])
+ if PyJsStrictEq(var.get(u'body').get(u'type'),Js(u'alternative')):
+ return var.get(u'body').get(u'body')
+ else:
+ return Js([var.get(u'body')])
+ PyJsHoisted_flattenBody_.func_name = u'flattenBody'
+ var.put(u'flattenBody', PyJsHoisted_flattenBody_)
+ @Js
+ def PyJsHoisted_skip_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ if var.get(u'match')(var.get(u'value')).neg():
+ var.get(u'bail')(Js(u'character'), var.get(u'value'))
+ PyJsHoisted_skip_.func_name = u'skip'
+ var.put(u'skip', PyJsHoisted_skip_)
+ @Js
+ def PyJsHoisted_matchReg_(regExp, this, arguments, var=var):
+ var = Scope({u'this':this, u'regExp':regExp, u'arguments':arguments}, var)
+ var.registers([u'subStr', u'regExp', u'res'])
+ var.put(u'subStr', var.get(u'str').callprop(u'substring', var.get(u'pos')))
+ var.put(u'res', var.get(u'subStr').callprop(u'match', var.get(u'regExp')))
+ if var.get(u'res'):
+ var.get(u'res').put(u'range', Js([]))
+ var.get(u'res').get(u'range').put(u'0', var.get(u'pos'))
+ var.get(u'incr')(var.get(u'res').get(u'0').get(u'length'))
+ var.get(u'res').get(u'range').put(u'1', var.get(u'pos'))
+ return var.get(u'res')
+ PyJsHoisted_matchReg_.func_name = u'matchReg'
+ var.put(u'matchReg', PyJsHoisted_matchReg_)
+ @Js
+ def PyJsHoisted_addRaw_(node, this, arguments, var=var):
+ var = Scope({u'node':node, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node'])
+ var.get(u'node').put(u'raw', var.get(u'str').callprop(u'substring', var.get(u'node').get(u'range').get(u'0'), var.get(u'node').get(u'range').get(u'1')))
+ return var.get(u'node')
+ PyJsHoisted_addRaw_.func_name = u'addRaw'
+ var.put(u'addRaw', PyJsHoisted_addRaw_)
+ @Js
+ def PyJsHoisted_parseNonemptyClassRanges_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'atom'])
+ var.put(u'atom', var.get(u'parseClassAtom')())
+ if var.get(u'atom').neg():
+ var.get(u'bail')(Js(u'classAtom'))
+ if var.get(u'current')(Js(u']')):
+ return Js([var.get(u'atom')])
+ return var.get(u'parseHelperClassRanges')(var.get(u'atom'))
+ PyJsHoisted_parseNonemptyClassRanges_.func_name = u'parseNonemptyClassRanges'
+ var.put(u'parseNonemptyClassRanges', PyJsHoisted_parseNonemptyClassRanges_)
+ @Js
+ def PyJsHoisted_parseHelperClassRanges_(atom, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'atom':atom}, var)
+ var.registers([u'to', u'atom', u'from', u'classRanges', u'res'])
+ pass
+ if (var.get(u'current')(Js(u'-')) and var.get(u'next')(Js(u']')).neg()):
+ var.get(u'skip')(Js(u'-'))
+ var.put(u'res', var.get(u'parseClassAtom')())
+ if var.get(u'res').neg():
+ var.get(u'bail')(Js(u'classAtom'))
+ var.put(u'to', var.get(u'pos'))
+ var.put(u'classRanges', var.get(u'parseClassRanges')())
+ if var.get(u'classRanges').neg():
+ var.get(u'bail')(Js(u'classRanges'))
+ var.put(u'from', var.get(u'atom').get(u'range').get(u'0'))
+ if PyJsStrictEq(var.get(u'classRanges').get(u'type'),Js(u'empty')):
+ return Js([var.get(u'createClassRange')(var.get(u'atom'), var.get(u'res'), var.get(u'from'), var.get(u'to'))])
+ return Js([var.get(u'createClassRange')(var.get(u'atom'), var.get(u'res'), var.get(u'from'), var.get(u'to'))]).callprop(u'concat', var.get(u'classRanges'))
+ var.put(u'res', var.get(u'parseNonemptyClassRangesNoDash')())
+ if var.get(u'res').neg():
+ var.get(u'bail')(Js(u'nonEmptyClassRangesNoDash'))
+ return Js([var.get(u'atom')]).callprop(u'concat', var.get(u'res'))
+ PyJsHoisted_parseHelperClassRanges_.func_name = u'parseHelperClassRanges'
+ var.put(u'parseHelperClassRanges', PyJsHoisted_parseHelperClassRanges_)
+ @Js
+ def PyJsHoisted_bail_(message, details, PyJsArg_66726f6d_, to, this, arguments, var=var):
+ var = Scope({u'to':to, u'from':PyJsArg_66726f6d_, u'details':details, u'this':this, u'message':message, u'arguments':arguments}, var)
+ var.registers([u'from', u'contextEnd', u'to', u'details', u'context', u'contextStart', u'message', u'pointer'])
+ var.put(u'from', (var.get(u'pos') if (var.get(u'from')==var.get(u"null")) else var.get(u'from')))
+ var.put(u'to', (var.get(u'from') if (var.get(u'to')==var.get(u"null")) else var.get(u'to')))
+ var.put(u'contextStart', var.get(u'Math').callprop(u'max', Js(0.0), (var.get(u'from')-Js(10.0))))
+ var.put(u'contextEnd', var.get(u'Math').callprop(u'min', (var.get(u'to')+Js(10.0)), var.get(u'str').get(u'length')))
+ var.put(u'context', (Js(u' ')+var.get(u'str').callprop(u'substring', var.get(u'contextStart'), var.get(u'contextEnd'))))
+ var.put(u'pointer', ((Js(u' ')+var.get(u'Array').create(((var.get(u'from')-var.get(u'contextStart'))+Js(1.0))).callprop(u'join', Js(u' ')))+Js(u'^')))
+ PyJsTempException = JsToPyException(var.get(u'SyntaxError')((((((((var.get(u'message')+Js(u' at position '))+var.get(u'from'))+((Js(u': ')+var.get(u'details')) if var.get(u'details') else Js(u'')))+Js(u'\n'))+var.get(u'context'))+Js(u'\n'))+var.get(u'pointer'))))
+ raise PyJsTempException
+ PyJsHoisted_bail_.func_name = u'bail'
+ var.put(u'bail', PyJsHoisted_bail_)
+ @Js
+ def PyJsHoisted_parseIdentityEscape_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'tmp', u'ZWNJ', u'ZWJ'])
+ var.put(u'ZWJ', Js(u'\u200c'))
+ var.put(u'ZWNJ', Js(u'\u200d'))
+ pass
+ if var.get(u'isIdentifierPart')(var.get(u'lookahead')()).neg():
+ var.put(u'tmp', var.get(u'incr')())
+ return var.get(u'createEscaped')(Js(u'identifier'), var.get(u'tmp').callprop(u'charCodeAt', Js(0.0)), var.get(u'tmp'), Js(1.0))
+ if var.get(u'match')(var.get(u'ZWJ')):
+ return var.get(u'createEscaped')(Js(u'identifier'), Js(8204), var.get(u'ZWJ'))
+ else:
+ if var.get(u'match')(var.get(u'ZWNJ')):
+ return var.get(u'createEscaped')(Js(u'identifier'), Js(8205), var.get(u'ZWNJ'))
+ return var.get(u"null")
+ PyJsHoisted_parseIdentityEscape_.func_name = u'parseIdentityEscape'
+ var.put(u'parseIdentityEscape', PyJsHoisted_parseIdentityEscape_)
+ @Js
+ def PyJsHoisted_createDot_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ PyJs_Object_4016_ = Js({u'type':Js(u'dot'),u'range':Js([(var.get(u'pos')-Js(1.0)), var.get(u'pos')])})
+ return var.get(u'addRaw')(PyJs_Object_4016_)
+ PyJsHoisted_createDot_.func_name = u'createDot'
+ var.put(u'createDot', PyJsHoisted_createDot_)
+ @Js
+ def PyJsHoisted_incr_(amount, this, arguments, var=var):
+ var = Scope({u'this':this, u'amount':amount, u'arguments':arguments}, var)
+ var.registers([u'res', u'amount'])
+ var.put(u'amount', (var.get(u'amount') or Js(1.0)))
+ var.put(u'res', var.get(u'str').callprop(u'substring', var.get(u'pos'), (var.get(u'pos')+var.get(u'amount'))))
+ var.put(u'pos', (var.get(u'amount') or Js(1.0)), u'+')
+ return var.get(u'res')
+ PyJsHoisted_incr_.func_name = u'incr'
+ var.put(u'incr', PyJsHoisted_incr_)
+ @Js
+ def PyJsHoisted_parseAnchor_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res', u'from'])
+ var.put(u'from', var.get(u'pos'))
+ if var.get(u'match')(Js(u'^')):
+ return var.get(u'createAnchor')(Js(u'start'), Js(1.0))
+ else:
+ if var.get(u'match')(Js(u'$')):
+ return var.get(u'createAnchor')(Js(u'end'), Js(1.0))
+ else:
+ if var.get(u'match')(Js(u'\\b')):
+ return var.get(u'createAnchor')(Js(u'boundary'), Js(2.0))
+ else:
+ if var.get(u'match')(Js(u'\\B')):
+ return var.get(u'createAnchor')(Js(u'not-boundary'), Js(2.0))
+ else:
+ return var.get(u'parseGroup')(Js(u'(?='), Js(u'lookahead'), Js(u'(?!'), Js(u'negativeLookahead'))
+ PyJsHoisted_parseAnchor_.func_name = u'parseAnchor'
+ var.put(u'parseAnchor', PyJsHoisted_parseAnchor_)
+ @Js
+ def PyJsHoisted_parseAtom_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res'])
+ pass
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^[^^$\\\\.*+?(){[|]/'))):
+ return var.get(u'createCharacter')(var.get(u'res'))
+ else:
+ if var.get(u'match')(Js(u'.')):
+ return var.get(u'createDot')()
+ else:
+ if var.get(u'match')(Js(u'\\')):
+ var.put(u'res', var.get(u'parseAtomEscape')())
+ if var.get(u'res').neg():
+ var.get(u'bail')(Js(u'atomEscape'))
+ return var.get(u'res')
+ else:
+ if var.put(u'res', var.get(u'parseCharacterClass')()):
+ return var.get(u'res')
+ else:
+ return var.get(u'parseGroup')(Js(u'(?:'), Js(u'ignore'), Js(u'('), Js(u'normal'))
+ PyJsHoisted_parseAtom_.func_name = u'parseAtom'
+ var.put(u'parseAtom', PyJsHoisted_parseAtom_)
+ @Js
+ def PyJsHoisted_parseAtomEscape_(insideCharacterClass, this, arguments, var=var):
+ var = Scope({u'this':this, u'insideCharacterClass':insideCharacterClass, u'arguments':arguments}, var)
+ var.registers([u'res', u'insideCharacterClass', u'from'])
+ var.put(u'from', var.get(u'pos'))
+ var.put(u'res', var.get(u'parseDecimalEscape')())
+ if var.get(u'res'):
+ return var.get(u'res')
+ if var.get(u'insideCharacterClass'):
+ if var.get(u'match')(Js(u'b')):
+ return var.get(u'createEscaped')(Js(u'singleEscape'), Js(8), Js(u'\\b'))
+ else:
+ if var.get(u'match')(Js(u'B')):
+ var.get(u'bail')(Js(u'\\B not possible inside of CharacterClass'), Js(u''), var.get(u'from'))
+ var.put(u'res', var.get(u'parseCharacterEscape')())
+ return var.get(u'res')
+ PyJsHoisted_parseAtomEscape_.func_name = u'parseAtomEscape'
+ var.put(u'parseAtomEscape', PyJsHoisted_parseAtomEscape_)
+ @Js
+ def PyJsHoisted_next_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return PyJsStrictEq(var.get(u'str').get((var.get(u'pos')+Js(1.0))),var.get(u'value'))
+ PyJsHoisted_next_.func_name = u'next'
+ var.put(u'next', PyJsHoisted_next_)
+ @Js
+ def PyJsHoisted_current_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return PyJsStrictEq(var.get(u'str').callprop(u'indexOf', var.get(u'value'), var.get(u'pos')),var.get(u'pos'))
+ PyJsHoisted_current_.func_name = u'current'
+ var.put(u'current', PyJsHoisted_current_)
+ @Js
+ def PyJsHoisted_updateRawStart_(node, start, this, arguments, var=var):
+ var = Scope({u'node':node, u'start':start, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'node', u'start'])
+ var.get(u'node').get(u'range').put(u'0', var.get(u'start'))
+ return var.get(u'addRaw')(var.get(u'node'))
+ PyJsHoisted_updateRawStart_.func_name = u'updateRawStart'
+ var.put(u'updateRawStart', PyJsHoisted_updateRawStart_)
+ @Js
+ def PyJsHoisted_isEmpty_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ return PyJsStrictEq(var.get(u'obj').get(u'type'),Js(u'empty'))
+ PyJsHoisted_isEmpty_.func_name = u'isEmpty'
+ var.put(u'isEmpty', PyJsHoisted_isEmpty_)
+ @Js
+ def PyJsHoisted_createDisjunction_(alternatives, PyJsArg_66726f6d_, to, this, arguments, var=var):
+ var = Scope({u'this':this, u'from':PyJsArg_66726f6d_, u'alternatives':alternatives, u'arguments':arguments, u'to':to}, var)
+ var.registers([u'from', u'alternatives', u'to'])
+ PyJs_Object_4015_ = Js({u'type':Js(u'disjunction'),u'body':var.get(u'alternatives'),u'range':Js([var.get(u'from'), var.get(u'to')])})
+ return var.get(u'addRaw')(PyJs_Object_4015_)
+ PyJsHoisted_createDisjunction_.func_name = u'createDisjunction'
+ var.put(u'createDisjunction', PyJsHoisted_createDisjunction_)
+ @Js
+ def PyJsHoisted_parseClassEscape_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'parseAtomEscape')(var.get(u'true'))
+ PyJsHoisted_parseClassEscape_.func_name = u'parseClassEscape'
+ var.put(u'parseClassEscape', PyJsHoisted_parseClassEscape_)
+ @Js
+ def PyJsHoisted_parseCharacterEscape_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res', u'codePoint'])
+ pass
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^[fnrtv]/'))):
+ var.put(u'codePoint', Js(0.0))
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'res').get(u'0'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u't')):
+ SWITCHED = True
+ var.put(u'codePoint', Js(9))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'n')):
+ SWITCHED = True
+ var.put(u'codePoint', Js(10))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'v')):
+ SWITCHED = True
+ var.put(u'codePoint', Js(11))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'f')):
+ SWITCHED = True
+ var.put(u'codePoint', Js(12))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'r')):
+ SWITCHED = True
+ var.put(u'codePoint', Js(13))
+ break
+ SWITCHED = True
+ break
+ return var.get(u'createEscaped')(Js(u'singleEscape'), var.get(u'codePoint'), (Js(u'\\')+var.get(u'res').get(u'0')))
+ else:
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^c([a-zA-Z])/'))):
+ return var.get(u'createEscaped')(Js(u'controlLetter'), (var.get(u'res').get(u'1').callprop(u'charCodeAt', Js(0.0))%Js(32.0)), var.get(u'res').get(u'1'), Js(2.0))
+ else:
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^x([0-9a-fA-F]{2})/'))):
+ return var.get(u'createEscaped')(Js(u'hexadecimalEscape'), var.get(u'parseInt')(var.get(u'res').get(u'1'), Js(16.0)), var.get(u'res').get(u'1'), Js(2.0))
+ else:
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^u([0-9a-fA-F]{4})/'))):
+ return var.get(u'parseUnicodeSurrogatePairEscape')(var.get(u'createEscaped')(Js(u'unicodeEscape'), var.get(u'parseInt')(var.get(u'res').get(u'1'), Js(16.0)), var.get(u'res').get(u'1'), Js(2.0)))
+ else:
+ if (var.get(u'hasUnicodeFlag') and var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^u\\{([0-9a-fA-F]+)\\}/')))):
+ return var.get(u'createEscaped')(Js(u'unicodeCodePointEscape'), var.get(u'parseInt')(var.get(u'res').get(u'1'), Js(16.0)), var.get(u'res').get(u'1'), Js(4.0))
+ else:
+ return var.get(u'parseIdentityEscape')()
+ PyJsHoisted_parseCharacterEscape_.func_name = u'parseCharacterEscape'
+ var.put(u'parseCharacterEscape', PyJsHoisted_parseCharacterEscape_)
+ @Js
+ def PyJsHoisted_parseGroup_(matchA, typeA, matchB, typeB, this, arguments, var=var):
+ var = Scope({u'matchB':matchB, u'matchA':matchA, u'this':this, u'arguments':arguments, u'typeA':typeA, u'typeB':typeB}, var)
+ var.registers([u'body', u'from', u'typeA', u'typeB', u'matchB', u'matchA', u'group', u'type'])
+ var.put(u'type', var.get(u"null"))
+ var.put(u'from', var.get(u'pos'))
+ if var.get(u'match')(var.get(u'matchA')):
+ var.put(u'type', var.get(u'typeA'))
+ else:
+ if var.get(u'match')(var.get(u'matchB')):
+ var.put(u'type', var.get(u'typeB'))
+ else:
+ return Js(False)
+ var.put(u'body', var.get(u'parseDisjunction')())
+ if var.get(u'body').neg():
+ var.get(u'bail')(Js(u'Expected disjunction'))
+ var.get(u'skip')(Js(u')'))
+ var.put(u'group', var.get(u'createGroup')(var.get(u'type'), var.get(u'flattenBody')(var.get(u'body')), var.get(u'from'), var.get(u'pos')))
+ if (var.get(u'type')==Js(u'normal')):
+ if var.get(u'firstIteration'):
+ (var.put(u'closedCaptureCounter',Js(var.get(u'closedCaptureCounter').to_number())+Js(1))-Js(1))
+ return var.get(u'group')
+ PyJsHoisted_parseGroup_.func_name = u'parseGroup'
+ var.put(u'parseGroup', PyJsHoisted_parseGroup_)
+ @Js
+ def PyJsHoisted_parseClassAtomNoDash_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res'])
+ pass
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^[^\\\\\\]-]/'))):
+ return var.get(u'createCharacter')(var.get(u'res').get(u'0'))
+ else:
+ if var.get(u'match')(Js(u'\\')):
+ var.put(u'res', var.get(u'parseClassEscape')())
+ if var.get(u'res').neg():
+ var.get(u'bail')(Js(u'classEscape'))
+ return var.get(u'parseUnicodeSurrogatePairEscape')(var.get(u'res'))
+ PyJsHoisted_parseClassAtomNoDash_.func_name = u'parseClassAtomNoDash'
+ var.put(u'parseClassAtomNoDash', PyJsHoisted_parseClassAtomNoDash_)
+ @Js
+ def PyJsHoisted_createAnchor_(kind, rawLength, this, arguments, var=var):
+ var = Scope({u'this':this, u'kind':kind, u'arguments':arguments, u'rawLength':rawLength}, var)
+ var.registers([u'kind', u'rawLength'])
+ PyJs_Object_4013_ = Js({u'type':Js(u'anchor'),u'kind':var.get(u'kind'),u'range':Js([(var.get(u'pos')-var.get(u'rawLength')), var.get(u'pos')])})
+ return var.get(u'addRaw')(PyJs_Object_4013_)
+ PyJsHoisted_createAnchor_.func_name = u'createAnchor'
+ var.put(u'createAnchor', PyJsHoisted_createAnchor_)
+ @Js
+ def PyJsHoisted_match_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ if PyJsStrictEq(var.get(u'str').callprop(u'indexOf', var.get(u'value'), var.get(u'pos')),var.get(u'pos')):
+ return var.get(u'incr')(var.get(u'value').get(u'length'))
+ PyJsHoisted_match_.func_name = u'match'
+ var.put(u'match', PyJsHoisted_match_)
+ @Js
+ def PyJsHoisted_parseCharacterClass_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res', u'from'])
+ var.put(u'from', var.get(u'pos'))
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^\\[\\^/'))):
+ var.put(u'res', var.get(u'parseClassRanges')())
+ var.get(u'skip')(Js(u']'))
+ return var.get(u'createCharacterClass')(var.get(u'res'), var.get(u'true'), var.get(u'from'), var.get(u'pos'))
+ else:
+ if var.get(u'match')(Js(u'[')):
+ var.put(u'res', var.get(u'parseClassRanges')())
+ var.get(u'skip')(Js(u']'))
+ return var.get(u'createCharacterClass')(var.get(u'res'), Js(False), var.get(u'from'), var.get(u'pos'))
+ return var.get(u"null")
+ PyJsHoisted_parseCharacterClass_.func_name = u'parseCharacterClass'
+ var.put(u'parseCharacterClass', PyJsHoisted_parseCharacterClass_)
+ @Js
+ def PyJsHoisted_createValue_(kind, codePoint, PyJsArg_66726f6d_, to, this, arguments, var=var):
+ var = Scope({u'to':to, u'kind':kind, u'from':PyJsArg_66726f6d_, u'arguments':arguments, u'this':this, u'codePoint':codePoint}, var)
+ var.registers([u'to', u'kind', u'from', u'codePoint'])
+ PyJs_Object_4014_ = Js({u'type':Js(u'value'),u'kind':var.get(u'kind'),u'codePoint':var.get(u'codePoint'),u'range':Js([var.get(u'from'), var.get(u'to')])})
+ return var.get(u'addRaw')(PyJs_Object_4014_)
+ PyJsHoisted_createValue_.func_name = u'createValue'
+ var.put(u'createValue', PyJsHoisted_createValue_)
+ @Js
+ def PyJsHoisted_createReference_(matchIndex, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'matchIndex':matchIndex}, var)
+ var.registers([u'matchIndex'])
+ PyJs_Object_4018_ = Js({u'type':Js(u'reference'),u'matchIndex':var.get(u'parseInt')(var.get(u'matchIndex'), Js(10.0)),u'range':Js([((var.get(u'pos')-Js(1.0))-var.get(u'matchIndex').get(u'length')), var.get(u'pos')])})
+ return var.get(u'addRaw')(PyJs_Object_4018_)
+ PyJsHoisted_createReference_.func_name = u'createReference'
+ var.put(u'createReference', PyJsHoisted_createReference_)
+ @Js
+ def PyJsHoisted_parseNonemptyClassRangesNoDash_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res'])
+ var.put(u'res', var.get(u'parseClassAtom')())
+ if var.get(u'res').neg():
+ var.get(u'bail')(Js(u'classAtom'))
+ if var.get(u'current')(Js(u']')):
+ return var.get(u'res')
+ return var.get(u'parseHelperClassRanges')(var.get(u'res'))
+ PyJsHoisted_parseNonemptyClassRangesNoDash_.func_name = u'parseNonemptyClassRangesNoDash'
+ var.put(u'parseNonemptyClassRangesNoDash', PyJsHoisted_parseNonemptyClassRangesNoDash_)
+ @Js
+ def PyJsHoisted_createCharacterClassEscape_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ PyJs_Object_4017_ = Js({u'type':Js(u'characterClassEscape'),u'value':var.get(u'value'),u'range':Js([(var.get(u'pos')-Js(2.0)), var.get(u'pos')])})
+ return var.get(u'addRaw')(PyJs_Object_4017_)
+ PyJsHoisted_createCharacterClassEscape_.func_name = u'createCharacterClassEscape'
+ var.put(u'createCharacterClassEscape', PyJsHoisted_createCharacterClassEscape_)
+ @Js
+ def PyJsHoisted_parseAlternative_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res', u'term', u'from'])
+ var.put(u'res', Js([]))
+ var.put(u'from', var.get(u'pos'))
+ pass
+ while var.put(u'term', var.get(u'parseTerm')()):
+ var.get(u'res').callprop(u'push', var.get(u'term'))
+ if PyJsStrictEq(var.get(u'res').get(u'length'),Js(1.0)):
+ return var.get(u'res').get(u'0')
+ return var.get(u'createAlternative')(var.get(u'res'), var.get(u'from'), var.get(u'pos'))
+ PyJsHoisted_parseAlternative_.func_name = u'parseAlternative'
+ var.put(u'parseAlternative', PyJsHoisted_parseAlternative_)
+ @Js
+ def PyJsHoisted_isIdentifierPart_(ch, this, arguments, var=var):
+ var = Scope({u'this':this, u'ch':ch, u'arguments':arguments}, var)
+ var.registers([u'ch', u'NonAsciiIdentifierPart'])
+ def PyJs_LONG_4024_(var=var):
+ return var.get(u'RegExp').create(Js(u'[\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]'))
+ var.put(u'NonAsciiIdentifierPart', PyJs_LONG_4024_())
+ def PyJs_LONG_4025_(var=var):
+ return ((((((PyJsStrictEq(var.get(u'ch'),Js(36.0)) or PyJsStrictEq(var.get(u'ch'),Js(95.0))) or ((var.get(u'ch')>=Js(65.0)) and (var.get(u'ch')<=Js(90.0)))) or ((var.get(u'ch')>=Js(97.0)) and (var.get(u'ch')<=Js(122.0)))) or ((var.get(u'ch')>=Js(48.0)) and (var.get(u'ch')<=Js(57.0)))) or PyJsStrictEq(var.get(u'ch'),Js(92.0))) or ((var.get(u'ch')>=Js(128)) and var.get(u'NonAsciiIdentifierPart').callprop(u'test', var.get(u'String').callprop(u'fromCharCode', var.get(u'ch')))))
+ return PyJs_LONG_4025_()
+ PyJsHoisted_isIdentifierPart_.func_name = u'isIdentifierPart'
+ var.put(u'isIdentifierPart', PyJsHoisted_isIdentifierPart_)
+ @Js
+ def PyJsHoisted_createQuantifier_(min, max, PyJsArg_66726f6d_, to, this, arguments, var=var):
+ var = Scope({u'to':to, u'from':PyJsArg_66726f6d_, u'arguments':arguments, u'min':min, u'this':this, u'max':max}, var)
+ var.registers([u'max', u'from', u'to', u'min'])
+ if (var.get(u'to')==var.get(u"null")):
+ var.put(u'from', (var.get(u'pos')-Js(1.0)))
+ var.put(u'to', var.get(u'pos'))
+ PyJs_Object_4020_ = Js({u'type':Js(u'quantifier'),u'min':var.get(u'min'),u'max':var.get(u'max'),u'greedy':var.get(u'true'),u'body':var.get(u"null"),u'range':Js([var.get(u'from'), var.get(u'to')])})
+ return var.get(u'addRaw')(PyJs_Object_4020_)
+ PyJsHoisted_createQuantifier_.func_name = u'createQuantifier'
+ var.put(u'createQuantifier', PyJsHoisted_createQuantifier_)
+ @Js
+ def PyJsHoisted_createCharacter_(matches, this, arguments, var=var):
+ var = Scope({u'matches':matches, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'matches', u'_char', u'second', u'first'])
+ var.put(u'_char', var.get(u'matches').get(u'0'))
+ var.put(u'first', var.get(u'_char').callprop(u'charCodeAt', Js(0.0)))
+ if var.get(u'hasUnicodeFlag'):
+ pass
+ if ((PyJsStrictEq(var.get(u'_char').get(u'length'),Js(1.0)) and (var.get(u'first')>=Js(55296))) and (var.get(u'first')<=Js(56319))):
+ var.put(u'second', var.get(u'lookahead')().callprop(u'charCodeAt', Js(0.0)))
+ if ((var.get(u'second')>=Js(56320)) and (var.get(u'second')<=Js(57343))):
+ (var.put(u'pos',Js(var.get(u'pos').to_number())+Js(1))-Js(1))
+ return var.get(u'createValue')(Js(u'symbol'), (((((var.get(u'first')-Js(55296))*Js(1024))+var.get(u'second'))-Js(56320))+Js(65536)), (var.get(u'pos')-Js(2.0)), var.get(u'pos'))
+ return var.get(u'createValue')(Js(u'symbol'), var.get(u'first'), (var.get(u'pos')-Js(1.0)), var.get(u'pos'))
+ PyJsHoisted_createCharacter_.func_name = u'createCharacter'
+ var.put(u'createCharacter', PyJsHoisted_createCharacter_)
+ @Js
+ def PyJsHoisted_lookahead_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ return var.get(u'str').get(var.get(u'pos'))
+ PyJsHoisted_lookahead_.func_name = u'lookahead'
+ var.put(u'lookahead', PyJsHoisted_lookahead_)
+ @Js
+ def PyJsHoisted_createClassRange_(min, max, PyJsArg_66726f6d_, to, this, arguments, var=var):
+ var = Scope({u'to':to, u'from':PyJsArg_66726f6d_, u'arguments':arguments, u'min':min, u'this':this, u'max':max}, var)
+ var.registers([u'max', u'from', u'to', u'min'])
+ if (var.get(u'min').get(u'codePoint')>var.get(u'max').get(u'codePoint')):
+ var.get(u'bail')(Js(u'invalid range in character class'), ((var.get(u'min').get(u'raw')+Js(u'-'))+var.get(u'max').get(u'raw')), var.get(u'from'), var.get(u'to'))
+ PyJs_Object_4023_ = Js({u'type':Js(u'characterClassRange'),u'min':var.get(u'min'),u'max':var.get(u'max'),u'range':Js([var.get(u'from'), var.get(u'to')])})
+ return var.get(u'addRaw')(PyJs_Object_4023_)
+ PyJsHoisted_createClassRange_.func_name = u'createClassRange'
+ var.put(u'createClassRange', PyJsHoisted_createClassRange_)
+ @Js
+ def PyJsHoisted_createAlternative_(terms, PyJsArg_66726f6d_, to, this, arguments, var=var):
+ var = Scope({u'this':this, u'from':PyJsArg_66726f6d_, u'terms':terms, u'arguments':arguments, u'to':to}, var)
+ var.registers([u'from', u'terms', u'to'])
+ PyJs_Object_4021_ = Js({u'type':Js(u'alternative'),u'body':var.get(u'terms'),u'range':Js([var.get(u'from'), var.get(u'to')])})
+ return var.get(u'addRaw')(PyJs_Object_4021_)
+ PyJsHoisted_createAlternative_.func_name = u'createAlternative'
+ var.put(u'createAlternative', PyJsHoisted_createAlternative_)
+ @Js
+ def PyJsHoisted_parseClassRanges_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res'])
+ pass
+ if var.get(u'current')(Js(u']')):
+ return Js([])
+ else:
+ var.put(u'res', var.get(u'parseNonemptyClassRanges')())
+ if var.get(u'res').neg():
+ var.get(u'bail')(Js(u'nonEmptyClassRanges'))
+ return var.get(u'res')
+ PyJsHoisted_parseClassRanges_.func_name = u'parseClassRanges'
+ var.put(u'parseClassRanges', PyJsHoisted_parseClassRanges_)
+ @Js
+ def PyJsHoisted_createEscaped_(kind, codePoint, value, fromOffset, this, arguments, var=var):
+ var = Scope({u'kind':kind, u'arguments':arguments, u'this':this, u'fromOffset':fromOffset, u'codePoint':codePoint, u'value':value}, var)
+ var.registers([u'kind', u'fromOffset', u'codePoint', u'value'])
+ var.put(u'fromOffset', (var.get(u'fromOffset') or Js(0.0)))
+ return var.get(u'createValue')(var.get(u'kind'), var.get(u'codePoint'), (var.get(u'pos')-(var.get(u'value').get(u'length')+var.get(u'fromOffset'))), var.get(u'pos'))
+ PyJsHoisted_createEscaped_.func_name = u'createEscaped'
+ var.put(u'createEscaped', PyJsHoisted_createEscaped_)
+ @Js
+ def PyJsHoisted_parseUnicodeSurrogatePairEscape_(firstEscape, this, arguments, var=var):
+ var = Scope({u'firstEscape':firstEscape, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'firstEscape', u'secondEscape', u'second', u'prevPos', u'first'])
+ if var.get(u'hasUnicodeFlag'):
+ pass
+ if (((((var.get(u'firstEscape').get(u'kind')==Js(u'unicodeEscape')) and (var.put(u'first', var.get(u'firstEscape').get(u'codePoint'))>=Js(55296))) and (var.get(u'first')<=Js(56319))) and var.get(u'current')(Js(u'\\'))) and var.get(u'next')(Js(u'u'))):
+ var.put(u'prevPos', var.get(u'pos'))
+ (var.put(u'pos',Js(var.get(u'pos').to_number())+Js(1))-Js(1))
+ var.put(u'secondEscape', var.get(u'parseClassEscape')())
+ if (((var.get(u'secondEscape').get(u'kind')==Js(u'unicodeEscape')) and (var.put(u'second', var.get(u'secondEscape').get(u'codePoint'))>=Js(56320))) and (var.get(u'second')<=Js(57343))):
+ var.get(u'firstEscape').get(u'range').put(u'1', var.get(u'secondEscape').get(u'range').get(u'1'))
+ var.get(u'firstEscape').put(u'codePoint', (((((var.get(u'first')-Js(55296))*Js(1024))+var.get(u'second'))-Js(56320))+Js(65536)))
+ var.get(u'firstEscape').put(u'type', Js(u'value'))
+ var.get(u'firstEscape').put(u'kind', Js(u'unicodeCodePointEscape'))
+ var.get(u'addRaw')(var.get(u'firstEscape'))
+ else:
+ var.put(u'pos', var.get(u'prevPos'))
+ return var.get(u'firstEscape')
+ PyJsHoisted_parseUnicodeSurrogatePairEscape_.func_name = u'parseUnicodeSurrogatePairEscape'
+ var.put(u'parseUnicodeSurrogatePairEscape', PyJsHoisted_parseUnicodeSurrogatePairEscape_)
+ @Js
+ def PyJsHoisted_parseTerm_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'quantifier', u'anchor', u'atom'])
+ if (((var.get(u'pos')>=var.get(u'str').get(u'length')) or var.get(u'current')(Js(u'|'))) or var.get(u'current')(Js(u')'))):
+ return var.get(u"null")
+ var.put(u'anchor', var.get(u'parseAnchor')())
+ if var.get(u'anchor'):
+ return var.get(u'anchor')
+ var.put(u'atom', var.get(u'parseAtom')())
+ if var.get(u'atom').neg():
+ var.get(u'bail')(Js(u'Expected atom'))
+ var.put(u'quantifier', (var.get(u'parseQuantifier')() or Js(False)))
+ if var.get(u'quantifier'):
+ var.get(u'quantifier').put(u'body', var.get(u'flattenBody')(var.get(u'atom')))
+ var.get(u'updateRawStart')(var.get(u'quantifier'), var.get(u'atom').get(u'range').get(u'0'))
+ return var.get(u'quantifier')
+ return var.get(u'atom')
+ PyJsHoisted_parseTerm_.func_name = u'parseTerm'
+ var.put(u'parseTerm', PyJsHoisted_parseTerm_)
+ @Js
+ def PyJsHoisted_createGroup_(behavior, disjunction, PyJsArg_66726f6d_, to, this, arguments, var=var):
+ var = Scope({u'to':to, u'from':PyJsArg_66726f6d_, u'arguments':arguments, u'behavior':behavior, u'this':this, u'disjunction':disjunction}, var)
+ var.registers([u'to', u'disjunction', u'from', u'behavior'])
+ PyJs_Object_4019_ = Js({u'type':Js(u'group'),u'behavior':var.get(u'behavior'),u'body':var.get(u'disjunction'),u'range':Js([var.get(u'from'), var.get(u'to')])})
+ return var.get(u'addRaw')(PyJs_Object_4019_)
+ PyJsHoisted_createGroup_.func_name = u'createGroup'
+ var.put(u'createGroup', PyJsHoisted_createGroup_)
+ @Js
+ def PyJsHoisted_parseDecimalEscape_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'res', u'refIdx', u'match'])
+ pass
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^(?!0)\\d+/'))):
+ var.put(u'match', var.get(u'res').get(u'0'))
+ var.put(u'refIdx', var.get(u'parseInt')(var.get(u'res').get(u'0'), Js(10.0)))
+ if (var.get(u'refIdx')<=var.get(u'closedCaptureCounter')):
+ return var.get(u'createReference')(var.get(u'res').get(u'0'))
+ else:
+ var.get(u'backrefDenied').callprop(u'push', var.get(u'refIdx'))
+ var.get(u'incr')((-var.get(u'res').get(u'0').get(u'length')))
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^[0-7]{1,3}/'))):
+ return var.get(u'createEscaped')(Js(u'octal'), var.get(u'parseInt')(var.get(u'res').get(u'0'), Js(8.0)), var.get(u'res').get(u'0'), Js(1.0))
+ else:
+ var.put(u'res', var.get(u'createCharacter')(var.get(u'matchReg')(JsRegExp(u'/^[89]/'))))
+ return var.get(u'updateRawStart')(var.get(u'res'), (var.get(u'res').get(u'range').get(u'0')-Js(1.0)))
+ else:
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^[0-7]{1,3}/'))):
+ var.put(u'match', var.get(u'res').get(u'0'))
+ if JsRegExp(u'/^0{1,3}$/').callprop(u'test', var.get(u'match')):
+ return var.get(u'createEscaped')(Js(u'null'), Js(0), Js(u'0'), (var.get(u'match').get(u'length')+Js(1.0)))
+ else:
+ return var.get(u'createEscaped')(Js(u'octal'), var.get(u'parseInt')(var.get(u'match'), Js(8.0)), var.get(u'match'), Js(1.0))
+ else:
+ if var.put(u'res', var.get(u'matchReg')(JsRegExp(u'/^[dDsSwW]/'))):
+ return var.get(u'createCharacterClassEscape')(var.get(u'res').get(u'0'))
+ return Js(False)
+ PyJsHoisted_parseDecimalEscape_.func_name = u'parseDecimalEscape'
+ var.put(u'parseDecimalEscape', PyJsHoisted_parseDecimalEscape_)
+ @Js
+ def PyJsHoisted_parseClassAtom_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u'match')(Js(u'-')):
+ return var.get(u'createCharacter')(Js(u'-'))
+ else:
+ return var.get(u'parseClassAtomNoDash')()
+ PyJsHoisted_parseClassAtom_.func_name = u'parseClassAtom'
+ var.put(u'parseClassAtom', PyJsHoisted_parseClassAtom_)
+ @Js
+ def PyJsHoisted_createCharacterClass_(classRanges, negative, PyJsArg_66726f6d_, to, this, arguments, var=var):
+ var = Scope({u'to':to, u'from':PyJsArg_66726f6d_, u'classRanges':classRanges, u'this':this, u'negative':negative, u'arguments':arguments}, var)
+ var.registers([u'to', u'from', u'classRanges', u'negative'])
+ PyJs_Object_4022_ = Js({u'type':Js(u'characterClass'),u'body':var.get(u'classRanges'),u'negative':var.get(u'negative'),u'range':Js([var.get(u'from'), var.get(u'to')])})
+ return var.get(u'addRaw')(PyJs_Object_4022_)
+ PyJsHoisted_createCharacterClass_.func_name = u'createCharacterClass'
+ var.put(u'createCharacterClass', PyJsHoisted_createCharacterClass_)
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ var.put(u'backrefDenied', Js([]))
+ var.put(u'closedCaptureCounter', Js(0.0))
+ var.put(u'firstIteration', var.get(u'true'))
+ var.put(u'hasUnicodeFlag', PyJsStrictNeq((var.get(u'flags') or Js(u'')).callprop(u'indexOf', Js(u'u')),(-Js(1.0))))
+ var.put(u'pos', Js(0.0))
+ var.put(u'str', var.get(u'String')(var.get(u'str')))
+ if PyJsStrictEq(var.get(u'str'),Js(u'')):
+ var.put(u'str', Js(u'(?:)'))
+ var.put(u'result', var.get(u'parseDisjunction')())
+ if PyJsStrictNeq(var.get(u'result').get(u'range').get(u'1'),var.get(u'str').get(u'length')):
+ var.get(u'bail')(Js(u'Could not parse entire input - got stuck'), Js(u''), var.get(u'result').get(u'range').get(u'1'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')>'):
+ break
+ return var.get(u'ret')
+ PyJs_anonymous_4029_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_4029_)
+PyJs_anonymous_4028_._set_name(u'anonymous')
+PyJs_Object_4030_ = Js({u'is-finite':Js(281.0)})
+@Js
+def PyJs_anonymous_4031_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ Js(u'use strict')
+ @Js
+ def PyJs_anonymous_4032_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'isExtendedLengthPath', u'hasNonAscii', u'str'])
+ var.put(u'isExtendedLengthPath', JsRegExp(u'/^\\\\\\\\\\?\\\\/').callprop(u'test', var.get(u'str')))
+ var.put(u'hasNonAscii', JsRegExp(u'/[^\\x00-\\x80]+/').callprop(u'test', var.get(u'str')))
+ if (var.get(u'isExtendedLengthPath') or var.get(u'hasNonAscii')):
+ return var.get(u'str')
+ return var.get(u'str').callprop(u'replace', JsRegExp(u'/\\\\/g'), Js(u'/'))
+ PyJs_anonymous_4032_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_4032_)
+PyJs_anonymous_4031_._set_name(u'anonymous')
+PyJs_Object_4033_ = Js({})
+@Js
+def PyJs_anonymous_4034_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'require', u'module', u'util', u'ArraySet', u'has'])
+ @Js
+ def PyJsHoisted_ArraySet_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").put(u'_array', Js([]))
+ var.get(u"this").put(u'_set', var.get(u'Object').callprop(u'create', var.get(u"null")))
+ PyJsHoisted_ArraySet_.func_name = u'ArraySet'
+ var.put(u'ArraySet', PyJsHoisted_ArraySet_)
+ var.put(u'util', var.get(u'require')(Js(u'./util')))
+ var.put(u'has', var.get(u'Object').get(u'prototype').get(u'hasOwnProperty'))
+ pass
+ @Js
+ def PyJs_ArraySet_fromArray_4035_(aArray, aAllowDuplicates, this, arguments, var=var):
+ var = Scope({u'this':this, u'ArraySet_fromArray':PyJs_ArraySet_fromArray_4035_, u'aAllowDuplicates':aAllowDuplicates, u'aArray':aArray, u'arguments':arguments}, var)
+ var.registers([u'i', u'aAllowDuplicates', u'set', u'aArray', u'len'])
+ var.put(u'set', var.get(u'ArraySet').create())
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'len', var.get(u'aArray').get(u'length'))
+ while (var.get(u'i')=Js(0.0)) and (var.get(u'aIdx')>Js(1.0)))
+ return ((-var.get(u'shifted')) if var.get(u'isNegative') else var.get(u'shifted'))
+ PyJsHoisted_fromVLQSigned_.func_name = u'fromVLQSigned'
+ var.put(u'fromVLQSigned', PyJsHoisted_fromVLQSigned_)
+ var.put(u'base64', var.get(u'require')(Js(u'./base64')))
+ var.put(u'VLQ_BASE_SHIFT', Js(5.0))
+ var.put(u'VLQ_BASE', (Js(1.0)<>>')
+ if (var.get(u'vlq')>Js(0.0)):
+ var.put(u'digit', var.get(u'VLQ_CONTINUATION_BIT'), u'|')
+ var.put(u'encoded', var.get(u'base64').callprop(u'encode', var.get(u'digit')), u'+')
+ if not (var.get(u'vlq')>Js(0.0)):
+ break
+ return var.get(u'encoded')
+ PyJs_base64VLQ_encode_4044_._set_name(u'base64VLQ_encode')
+ var.get(u'exports').put(u'encode', PyJs_base64VLQ_encode_4044_)
+ @Js
+ def PyJs_base64VLQ_decode_4045_(aStr, aIndex, aOutParam, this, arguments, var=var):
+ var = Scope({u'base64VLQ_decode':PyJs_base64VLQ_decode_4045_, u'this':this, u'arguments':arguments, u'aStr':aStr, u'aOutParam':aOutParam, u'aIndex':aIndex}, var)
+ var.registers([u'digit', u'shift', u'result', u'continuation', u'aStr', u'aOutParam', u'strLen', u'aIndex'])
+ var.put(u'strLen', var.get(u'aStr').get(u'length'))
+ var.put(u'result', Js(0.0))
+ var.put(u'shift', Js(0.0))
+ pass
+ while 1:
+ if (var.get(u'aIndex')>=var.get(u'strLen')):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'Expected more digits in base 64 VLQ value.')))
+ raise PyJsTempException
+ var.put(u'digit', var.get(u'base64').callprop(u'decode', var.get(u'aStr').callprop(u'charCodeAt', (var.put(u'aIndex',Js(var.get(u'aIndex').to_number())+Js(1))-Js(1)))))
+ if PyJsStrictEq(var.get(u'digit'),(-Js(1.0))):
+ PyJsTempException = JsToPyException(var.get(u'Error').create((Js(u'Invalid base64 digit: ')+var.get(u'aStr').callprop(u'charAt', (var.get(u'aIndex')-Js(1.0))))))
+ raise PyJsTempException
+ var.put(u'continuation', (var.get(u'digit')&var.get(u'VLQ_CONTINUATION_BIT')).neg().neg())
+ var.put(u'digit', var.get(u'VLQ_BASE_MASK'), u'&')
+ var.put(u'result', (var.get(u'result')+(var.get(u'digit')<Js(0.0)):
+ if ((var.get(u'aHigh')-var.get(u'mid'))>Js(1.0)):
+ return var.get(u'recursiveSearch')(var.get(u'mid'), var.get(u'aHigh'), var.get(u'aNeedle'), var.get(u'aHaystack'), var.get(u'aCompare'), var.get(u'aBias'))
+ if (var.get(u'aBias')==var.get(u'exports').get(u'LEAST_UPPER_BOUND')):
+ return (var.get(u'aHigh') if (var.get(u'aHigh')Js(1.0)):
+ return var.get(u'recursiveSearch')(var.get(u'aLow'), var.get(u'mid'), var.get(u'aNeedle'), var.get(u'aHaystack'), var.get(u'aCompare'), var.get(u'aBias'))
+ if (var.get(u'aBias')==var.get(u'exports').get(u'LEAST_UPPER_BOUND')):
+ return var.get(u'mid')
+ else:
+ return ((-Js(1.0)) if (var.get(u'aLow')=Js(0.0)):
+ if PyJsStrictNeq(var.get(u'aCompare')(var.get(u'aHaystack').get(var.get(u'index')), var.get(u'aHaystack').get((var.get(u'index')-Js(1.0))), var.get(u'true')),Js(0.0)):
+ break
+ var.put(u'index',Js(var.get(u'index').to_number())-Js(1))
+ return var.get(u'index')
+ PyJs_search_4052_._set_name(u'search')
+ var.get(u'exports').put(u'search', PyJs_search_4052_)
+PyJs_anonymous_4051_._set_name(u'anonymous')
+PyJs_Object_4053_ = Js({})
+@Js
+def PyJs_anonymous_4054_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'generatedPositionAfter', u'require', u'exports', u'module', u'util', u'MappingList'])
+ @Js
+ def PyJsHoisted_generatedPositionAfter_(mappingA, mappingB, this, arguments, var=var):
+ var = Scope({u'this':this, u'mappingB':mappingB, u'arguments':arguments, u'mappingA':mappingA}, var)
+ var.registers([u'columnA', u'columnB', u'mappingB', u'mappingA', u'lineB', u'lineA'])
+ var.put(u'lineA', var.get(u'mappingA').get(u'generatedLine'))
+ var.put(u'lineB', var.get(u'mappingB').get(u'generatedLine'))
+ var.put(u'columnA', var.get(u'mappingA').get(u'generatedColumn'))
+ var.put(u'columnB', var.get(u'mappingB').get(u'generatedColumn'))
+ return (((var.get(u'lineB')>var.get(u'lineA')) or ((var.get(u'lineB')==var.get(u'lineA')) and (var.get(u'columnB')>=var.get(u'columnA')))) or (var.get(u'util').callprop(u'compareByGeneratedPositionsInflated', var.get(u'mappingA'), var.get(u'mappingB'))<=Js(0.0)))
+ PyJsHoisted_generatedPositionAfter_.func_name = u'generatedPositionAfter'
+ var.put(u'generatedPositionAfter', PyJsHoisted_generatedPositionAfter_)
+ @Js
+ def PyJsHoisted_MappingList_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ var.get(u"this").put(u'_array', Js([]))
+ var.get(u"this").put(u'_sorted', var.get(u'true'))
+ PyJs_Object_4055_ = Js({u'generatedLine':(-Js(1.0)),u'generatedColumn':Js(0.0)})
+ var.get(u"this").put(u'_last', PyJs_Object_4055_)
+ PyJsHoisted_MappingList_.func_name = u'MappingList'
+ var.put(u'MappingList', PyJsHoisted_MappingList_)
+ var.put(u'util', var.get(u'require')(Js(u'./util')))
+ pass
+ pass
+ @Js
+ def PyJs_MappingList_forEach_4056_(aCallback, aThisArg, this, arguments, var=var):
+ var = Scope({u'this':this, u'aThisArg':aThisArg, u'aCallback':aCallback, u'MappingList_forEach':PyJs_MappingList_forEach_4056_, u'arguments':arguments}, var)
+ var.registers([u'aThisArg', u'aCallback'])
+ var.get(u"this").get(u'_array').callprop(u'forEach', var.get(u'aCallback'), var.get(u'aThisArg'))
+ PyJs_MappingList_forEach_4056_._set_name(u'MappingList_forEach')
+ var.get(u'MappingList').get(u'prototype').put(u'unsortedForEach', PyJs_MappingList_forEach_4056_)
+ @Js
+ def PyJs_MappingList_add_4057_(aMapping, this, arguments, var=var):
+ var = Scope({u'this':this, u'MappingList_add':PyJs_MappingList_add_4057_, u'aMapping':aMapping, u'arguments':arguments}, var)
+ var.registers([u'aMapping'])
+ if var.get(u'generatedPositionAfter')(var.get(u"this").get(u'_last'), var.get(u'aMapping')):
+ var.get(u"this").put(u'_last', var.get(u'aMapping'))
+ var.get(u"this").get(u'_array').callprop(u'push', var.get(u'aMapping'))
+ else:
+ var.get(u"this").put(u'_sorted', Js(False))
+ var.get(u"this").get(u'_array').callprop(u'push', var.get(u'aMapping'))
+ PyJs_MappingList_add_4057_._set_name(u'MappingList_add')
+ var.get(u'MappingList').get(u'prototype').put(u'add', PyJs_MappingList_add_4057_)
+ @Js
+ def PyJs_MappingList_toArray_4058_(this, arguments, var=var):
+ var = Scope({u'this':this, u'MappingList_toArray':PyJs_MappingList_toArray_4058_, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u"this").get(u'_sorted').neg():
+ var.get(u"this").get(u'_array').callprop(u'sort', var.get(u'util').get(u'compareByGeneratedPositionsInflated'))
+ var.get(u"this").put(u'_sorted', var.get(u'true'))
+ return var.get(u"this").get(u'_array')
+ PyJs_MappingList_toArray_4058_._set_name(u'MappingList_toArray')
+ var.get(u'MappingList').get(u'prototype').put(u'toArray', PyJs_MappingList_toArray_4058_)
+ var.get(u'exports').put(u'MappingList', var.get(u'MappingList'))
+PyJs_anonymous_4054_._set_name(u'anonymous')
+PyJs_Object_4059_ = Js({u'./util':Js(518.0)})
+@Js
+def PyJs_anonymous_4060_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'exports', u'randomIntInRange', u'require', u'module', u'doQuickSort', u'swap'])
+ @Js
+ def PyJsHoisted_randomIntInRange_(low, high, this, arguments, var=var):
+ var = Scope({u'high':high, u'this':this, u'low':low, u'arguments':arguments}, var)
+ var.registers([u'high', u'low'])
+ return var.get(u'Math').callprop(u'round', (var.get(u'low')+(var.get(u'Math').callprop(u'random')*(var.get(u'high')-var.get(u'low')))))
+ PyJsHoisted_randomIntInRange_.func_name = u'randomIntInRange'
+ var.put(u'randomIntInRange', PyJsHoisted_randomIntInRange_)
+ @Js
+ def PyJsHoisted_swap_(ary, x, y, this, arguments, var=var):
+ var = Scope({u'y':y, u'ary':ary, u'this':this, u'arguments':arguments, u'x':x}, var)
+ var.registers([u'y', u'ary', u'temp', u'x'])
+ var.put(u'temp', var.get(u'ary').get(var.get(u'x')))
+ var.get(u'ary').put(var.get(u'x'), var.get(u'ary').get(var.get(u'y')))
+ var.get(u'ary').put(var.get(u'y'), var.get(u'temp'))
+ PyJsHoisted_swap_.func_name = u'swap'
+ var.put(u'swap', PyJsHoisted_swap_)
+ @Js
+ def PyJsHoisted_doQuickSort_(ary, comparator, p, r, this, arguments, var=var):
+ var = Scope({u'p':p, u'r':r, u'arguments':arguments, u'comparator':comparator, u'this':this, u'ary':ary}, var)
+ var.registers([u'comparator', u'i', u'ary', u'pivotIndex', u'j', u'q', u'p', u'r', u'pivot'])
+ if (var.get(u'p')=Js(0.0)):
+ var.put(u'mapping', var.get(u"this").get(u'_originalMappings').get(var.get(u'index')))
+ if PyJsStrictEq(var.get(u'aArgs').get(u'column'),var.get(u'undefined')):
+ var.put(u'originalLine', var.get(u'mapping').get(u'originalLine'))
+ while (var.get(u'mapping') and PyJsStrictEq(var.get(u'mapping').get(u'originalLine'),var.get(u'originalLine'))):
+ PyJs_Object_4076_ = Js({u'line':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'generatedLine'), var.get(u"null")),u'column':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'generatedColumn'), var.get(u"null")),u'lastColumn':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'lastGeneratedColumn'), var.get(u"null"))})
+ var.get(u'mappings').callprop(u'push', PyJs_Object_4076_)
+ var.put(u'mapping', var.get(u"this").get(u'_originalMappings').get(var.put(u'index',Js(var.get(u'index').to_number())+Js(1))))
+ else:
+ var.put(u'originalColumn', var.get(u'mapping').get(u'originalColumn'))
+ while ((var.get(u'mapping') and PyJsStrictEq(var.get(u'mapping').get(u'originalLine'),var.get(u'line'))) and (var.get(u'mapping').get(u'originalColumn')==var.get(u'originalColumn'))):
+ PyJs_Object_4077_ = Js({u'line':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'generatedLine'), var.get(u"null")),u'column':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'generatedColumn'), var.get(u"null")),u'lastColumn':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'lastGeneratedColumn'), var.get(u"null"))})
+ var.get(u'mappings').callprop(u'push', PyJs_Object_4077_)
+ var.put(u'mapping', var.get(u"this").get(u'_originalMappings').get(var.put(u'index',Js(var.get(u'index').to_number())+Js(1))))
+ return var.get(u'mappings')
+ PyJs_SourceMapConsumer_allGeneratedPositionsFor_4074_._set_name(u'SourceMapConsumer_allGeneratedPositionsFor')
+ var.get(u'SourceMapConsumer').get(u'prototype').put(u'allGeneratedPositionsFor', PyJs_SourceMapConsumer_allGeneratedPositionsFor_4074_)
+ var.get(u'exports').put(u'SourceMapConsumer', var.get(u'SourceMapConsumer'))
+ pass
+ var.get(u'BasicSourceMapConsumer').put(u'prototype', var.get(u'Object').callprop(u'create', var.get(u'SourceMapConsumer').get(u'prototype')))
+ var.get(u'BasicSourceMapConsumer').get(u'prototype').put(u'consumer', var.get(u'SourceMapConsumer'))
+ @Js
+ def PyJs_SourceMapConsumer_fromSourceMap_4079_(aSourceMap, this, arguments, var=var):
+ var = Scope({u'this':this, u'aSourceMap':aSourceMap, u'SourceMapConsumer_fromSourceMap':PyJs_SourceMapConsumer_fromSourceMap_4079_, u'arguments':arguments}, var)
+ var.registers([u'i', u'aSourceMap', u'srcMapping', u'destGeneratedMappings', u'destMapping', u'destOriginalMappings', u'sources', u'length', u'generatedMappings', u'names', u'smc'])
+ var.put(u'smc', var.get(u'Object').callprop(u'create', var.get(u'BasicSourceMapConsumer').get(u'prototype')))
+ var.put(u'names', var.get(u'smc').put(u'_names', var.get(u'ArraySet').callprop(u'fromArray', var.get(u'aSourceMap').get(u'_names').callprop(u'toArray'), var.get(u'true'))))
+ var.put(u'sources', var.get(u'smc').put(u'_sources', var.get(u'ArraySet').callprop(u'fromArray', var.get(u'aSourceMap').get(u'_sources').callprop(u'toArray'), var.get(u'true'))))
+ var.get(u'smc').put(u'sourceRoot', var.get(u'aSourceMap').get(u'_sourceRoot'))
+ var.get(u'smc').put(u'sourcesContent', var.get(u'aSourceMap').callprop(u'_generateSourcesContent', var.get(u'smc').get(u'_sources').callprop(u'toArray'), var.get(u'smc').get(u'sourceRoot')))
+ var.get(u'smc').put(u'file', var.get(u'aSourceMap').get(u'_file'))
+ var.put(u'generatedMappings', var.get(u'aSourceMap').get(u'_mappings').callprop(u'toArray').callprop(u'slice'))
+ var.put(u'destGeneratedMappings', var.get(u'smc').put(u'__generatedMappings', Js([])))
+ var.put(u'destOriginalMappings', var.get(u'smc').put(u'__originalMappings', Js([])))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'length', var.get(u'generatedMappings').get(u'length'))
+ while (var.get(u'i')Js(1.0)):
+ var.get(u'mapping').put(u'source', (var.get(u'previousSource')+var.get(u'segment').get(u'1')))
+ var.put(u'previousSource', var.get(u'segment').get(u'1'), u'+')
+ var.get(u'mapping').put(u'originalLine', (var.get(u'previousOriginalLine')+var.get(u'segment').get(u'2')))
+ var.put(u'previousOriginalLine', var.get(u'mapping').get(u'originalLine'))
+ var.get(u'mapping').put(u'originalLine', Js(1.0), u'+')
+ var.get(u'mapping').put(u'originalColumn', (var.get(u'previousOriginalColumn')+var.get(u'segment').get(u'3')))
+ var.put(u'previousOriginalColumn', var.get(u'mapping').get(u'originalColumn'))
+ if (var.get(u'segment').get(u'length')>Js(4.0)):
+ var.get(u'mapping').put(u'name', (var.get(u'previousName')+var.get(u'segment').get(u'4')))
+ var.put(u'previousName', var.get(u'segment').get(u'4'), u'+')
+ var.get(u'generatedMappings').callprop(u'push', var.get(u'mapping'))
+ if PyJsStrictEq(var.get(u'mapping').get(u'originalLine').typeof(),Js(u'number')):
+ var.get(u'originalMappings').callprop(u'push', var.get(u'mapping'))
+ var.get(u'quickSort')(var.get(u'generatedMappings'), var.get(u'util').get(u'compareByGeneratedPositionsDeflated'))
+ var.get(u"this").put(u'__generatedMappings', var.get(u'generatedMappings'))
+ var.get(u'quickSort')(var.get(u'originalMappings'), var.get(u'util').get(u'compareByOriginalPositions'))
+ var.get(u"this").put(u'__originalMappings', var.get(u'originalMappings'))
+ PyJs_SourceMapConsumer_parseMappings_4083_._set_name(u'SourceMapConsumer_parseMappings')
+ var.get(u'BasicSourceMapConsumer').get(u'prototype').put(u'_parseMappings', PyJs_SourceMapConsumer_parseMappings_4083_)
+ @Js
+ def PyJs_SourceMapConsumer_findMapping_4086_(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias, this, arguments, var=var):
+ var = Scope({u'aNeedle':aNeedle, u'SourceMapConsumer_findMapping':PyJs_SourceMapConsumer_findMapping_4086_, u'this':this, u'aBias':aBias, u'aColumnName':aColumnName, u'aComparator':aComparator, u'arguments':arguments, u'aMappings':aMappings, u'aLineName':aLineName}, var)
+ var.registers([u'aNeedle', u'aBias', u'aColumnName', u'aComparator', u'aMappings', u'aLineName'])
+ if (var.get(u'aNeedle').get(var.get(u'aLineName'))<=Js(0.0)):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((Js(u'Line must be greater than or equal to 1, got ')+var.get(u'aNeedle').get(var.get(u'aLineName')))))
+ raise PyJsTempException
+ if (var.get(u'aNeedle').get(var.get(u'aColumnName'))=Js(0.0)):
+ var.put(u'mapping', var.get(u"this").get(u'_generatedMappings').get(var.get(u'index')))
+ if PyJsStrictEq(var.get(u'mapping').get(u'generatedLine'),var.get(u'needle').get(u'generatedLine')):
+ var.put(u'source', var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'source'), var.get(u"null")))
+ if PyJsStrictNeq(var.get(u'source'),var.get(u"null")):
+ var.put(u'source', var.get(u"this").get(u'_sources').callprop(u'at', var.get(u'source')))
+ if (var.get(u"this").get(u'sourceRoot')!=var.get(u"null")):
+ var.put(u'source', var.get(u'util').callprop(u'join', var.get(u"this").get(u'sourceRoot'), var.get(u'source')))
+ var.put(u'name', var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'name'), var.get(u"null")))
+ if PyJsStrictNeq(var.get(u'name'),var.get(u"null")):
+ var.put(u'name', var.get(u"this").get(u'_names').callprop(u'at', var.get(u'name')))
+ PyJs_Object_4090_ = Js({u'source':var.get(u'source'),u'line':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'originalLine'), var.get(u"null")),u'column':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'originalColumn'), var.get(u"null")),u'name':var.get(u'name')})
+ return PyJs_Object_4090_
+ PyJs_Object_4091_ = Js({u'source':var.get(u"null"),u'line':var.get(u"null"),u'column':var.get(u"null"),u'name':var.get(u"null")})
+ return PyJs_Object_4091_
+ PyJs_SourceMapConsumer_originalPositionFor_4088_._set_name(u'SourceMapConsumer_originalPositionFor')
+ var.get(u'BasicSourceMapConsumer').get(u'prototype').put(u'originalPositionFor', PyJs_SourceMapConsumer_originalPositionFor_4088_)
+ @Js
+ def PyJs_BasicSourceMapConsumer_hasContentsOfAllSources_4092_(this, arguments, var=var):
+ var = Scope({u'this':this, u'BasicSourceMapConsumer_hasContentsOfAllSources':PyJs_BasicSourceMapConsumer_hasContentsOfAllSources_4092_, u'arguments':arguments}, var)
+ var.registers([])
+ if var.get(u"this").get(u'sourcesContent').neg():
+ return Js(False)
+ @Js
+ def PyJs_anonymous_4093_(sc, this, arguments, var=var):
+ var = Scope({u'sc':sc, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'sc'])
+ return (var.get(u'sc')==var.get(u"null"))
+ PyJs_anonymous_4093_._set_name(u'anonymous')
+ return ((var.get(u"this").get(u'sourcesContent').get(u'length')>=var.get(u"this").get(u'_sources').callprop(u'size')) and var.get(u"this").get(u'sourcesContent').callprop(u'some', PyJs_anonymous_4093_).neg())
+ PyJs_BasicSourceMapConsumer_hasContentsOfAllSources_4092_._set_name(u'BasicSourceMapConsumer_hasContentsOfAllSources')
+ var.get(u'BasicSourceMapConsumer').get(u'prototype').put(u'hasContentsOfAllSources', PyJs_BasicSourceMapConsumer_hasContentsOfAllSources_4092_)
+ @Js
+ def PyJs_SourceMapConsumer_sourceContentFor_4094_(aSource, nullOnMissing, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'SourceMapConsumer_sourceContentFor':PyJs_SourceMapConsumer_sourceContentFor_4094_, u'aSource':aSource, u'nullOnMissing':nullOnMissing}, var)
+ var.registers([u'url', u'fileUriAbsPath', u'aSource', u'nullOnMissing'])
+ if var.get(u"this").get(u'sourcesContent').neg():
+ return var.get(u"null")
+ if (var.get(u"this").get(u'sourceRoot')!=var.get(u"null")):
+ var.put(u'aSource', var.get(u'util').callprop(u'relative', var.get(u"this").get(u'sourceRoot'), var.get(u'aSource')))
+ if var.get(u"this").get(u'_sources').callprop(u'has', var.get(u'aSource')):
+ return var.get(u"this").get(u'sourcesContent').get(var.get(u"this").get(u'_sources').callprop(u'indexOf', var.get(u'aSource')))
+ pass
+ if ((var.get(u"this").get(u'sourceRoot')!=var.get(u"null")) and var.put(u'url', var.get(u'util').callprop(u'urlParse', var.get(u"this").get(u'sourceRoot')))):
+ var.put(u'fileUriAbsPath', var.get(u'aSource').callprop(u'replace', JsRegExp(u'/^file:\\/\\//'), Js(u'')))
+ if ((var.get(u'url').get(u'scheme')==Js(u'file')) and var.get(u"this").get(u'_sources').callprop(u'has', var.get(u'fileUriAbsPath'))):
+ return var.get(u"this").get(u'sourcesContent').get(var.get(u"this").get(u'_sources').callprop(u'indexOf', var.get(u'fileUriAbsPath')))
+ if ((var.get(u'url').get(u'path').neg() or (var.get(u'url').get(u'path')==Js(u'/'))) and var.get(u"this").get(u'_sources').callprop(u'has', (Js(u'/')+var.get(u'aSource')))):
+ return var.get(u"this").get(u'sourcesContent').get(var.get(u"this").get(u'_sources').callprop(u'indexOf', (Js(u'/')+var.get(u'aSource'))))
+ if var.get(u'nullOnMissing'):
+ return var.get(u"null")
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create(((Js(u'"')+var.get(u'aSource'))+Js(u'" is not in the SourceMap.'))))
+ raise PyJsTempException
+ PyJs_SourceMapConsumer_sourceContentFor_4094_._set_name(u'SourceMapConsumer_sourceContentFor')
+ var.get(u'BasicSourceMapConsumer').get(u'prototype').put(u'sourceContentFor', PyJs_SourceMapConsumer_sourceContentFor_4094_)
+ @Js
+ def PyJs_SourceMapConsumer_generatedPositionFor_4095_(aArgs, this, arguments, var=var):
+ var = Scope({u'this':this, u'SourceMapConsumer_generatedPositionFor':PyJs_SourceMapConsumer_generatedPositionFor_4095_, u'arguments':arguments, u'aArgs':aArgs}, var)
+ var.registers([u'aArgs', u'source', u'needle', u'mapping', u'index'])
+ var.put(u'source', var.get(u'util').callprop(u'getArg', var.get(u'aArgs'), Js(u'source')))
+ if (var.get(u"this").get(u'sourceRoot')!=var.get(u"null")):
+ var.put(u'source', var.get(u'util').callprop(u'relative', var.get(u"this").get(u'sourceRoot'), var.get(u'source')))
+ if var.get(u"this").get(u'_sources').callprop(u'has', var.get(u'source')).neg():
+ PyJs_Object_4096_ = Js({u'line':var.get(u"null"),u'column':var.get(u"null"),u'lastColumn':var.get(u"null")})
+ return PyJs_Object_4096_
+ var.put(u'source', var.get(u"this").get(u'_sources').callprop(u'indexOf', var.get(u'source')))
+ PyJs_Object_4097_ = Js({u'source':var.get(u'source'),u'originalLine':var.get(u'util').callprop(u'getArg', var.get(u'aArgs'), Js(u'line')),u'originalColumn':var.get(u'util').callprop(u'getArg', var.get(u'aArgs'), Js(u'column'))})
+ var.put(u'needle', PyJs_Object_4097_)
+ var.put(u'index', var.get(u"this").callprop(u'_findMapping', var.get(u'needle'), var.get(u"this").get(u'_originalMappings'), Js(u'originalLine'), Js(u'originalColumn'), var.get(u'util').get(u'compareByOriginalPositions'), var.get(u'util').callprop(u'getArg', var.get(u'aArgs'), Js(u'bias'), var.get(u'SourceMapConsumer').get(u'GREATEST_LOWER_BOUND'))))
+ if (var.get(u'index')>=Js(0.0)):
+ var.put(u'mapping', var.get(u"this").get(u'_originalMappings').get(var.get(u'index')))
+ if PyJsStrictEq(var.get(u'mapping').get(u'source'),var.get(u'needle').get(u'source')):
+ PyJs_Object_4098_ = Js({u'line':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'generatedLine'), var.get(u"null")),u'column':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'generatedColumn'), var.get(u"null")),u'lastColumn':var.get(u'util').callprop(u'getArg', var.get(u'mapping'), Js(u'lastGeneratedColumn'), var.get(u"null"))})
+ return PyJs_Object_4098_
+ PyJs_Object_4099_ = Js({u'line':var.get(u"null"),u'column':var.get(u"null"),u'lastColumn':var.get(u"null")})
+ return PyJs_Object_4099_
+ PyJs_SourceMapConsumer_generatedPositionFor_4095_._set_name(u'SourceMapConsumer_generatedPositionFor')
+ var.get(u'BasicSourceMapConsumer').get(u'prototype').put(u'generatedPositionFor', PyJs_SourceMapConsumer_generatedPositionFor_4095_)
+ var.get(u'exports').put(u'BasicSourceMapConsumer', var.get(u'BasicSourceMapConsumer'))
+ pass
+ var.get(u'IndexedSourceMapConsumer').put(u'prototype', var.get(u'Object').callprop(u'create', var.get(u'SourceMapConsumer').get(u'prototype')))
+ var.get(u'IndexedSourceMapConsumer').get(u'prototype').put(u'constructor', var.get(u'SourceMapConsumer'))
+ var.get(u'IndexedSourceMapConsumer').get(u'prototype').put(u'_version', Js(3.0))
+ @Js
+ def PyJs_anonymous_4105_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'sources', u'j'])
+ var.put(u'sources', Js([]))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(0.0))) and (var.get(u'aGenerated').get(u'column')>=Js(0.0))) and var.get(u'aOriginal').neg()) and var.get(u'aSource').neg()) and var.get(u'aName').neg()):
+ return var.get('undefined')
+ else:
+ def PyJs_LONG_4137_(var=var):
+ return ((((((((var.get(u'aGenerated') and var.get(u'aGenerated').contains(Js(u'line'))) and var.get(u'aGenerated').contains(Js(u'column'))) and var.get(u'aOriginal')) and var.get(u'aOriginal').contains(Js(u'line'))) and var.get(u'aOriginal').contains(Js(u'column'))) and (var.get(u'aGenerated').get(u'line')>Js(0.0))) and (var.get(u'aGenerated').get(u'column')>=Js(0.0))) and (var.get(u'aOriginal').get(u'line')>Js(0.0)))
+ if ((PyJs_LONG_4137_() and (var.get(u'aOriginal').get(u'column')>=Js(0.0))) and var.get(u'aSource')):
+ return var.get('undefined')
+ else:
+ PyJs_Object_4138_ = Js({u'generated':var.get(u'aGenerated'),u'source':var.get(u'aSource'),u'original':var.get(u'aOriginal'),u'name':var.get(u'aName')})
+ PyJsTempException = JsToPyException(var.get(u'Error').create((Js(u'Invalid mapping: ')+var.get(u'JSON').callprop(u'stringify', PyJs_Object_4138_))))
+ raise PyJsTempException
+ PyJs_SourceMapGenerator_validateMapping_4136_._set_name(u'SourceMapGenerator_validateMapping')
+ var.get(u'SourceMapGenerator').get(u'prototype').put(u'_validateMapping', PyJs_SourceMapGenerator_validateMapping_4136_)
+ @Js
+ def PyJs_SourceMapGenerator_serializeMappings_4139_(this, arguments, var=var):
+ var = Scope({u'this':this, u'SourceMapGenerator_serializeMappings':PyJs_SourceMapGenerator_serializeMappings_4139_, u'arguments':arguments}, var)
+ var.registers([u'previousOriginalColumn', u'previousOriginalLine', u'previousGeneratedLine', u'previousSource', u'previousGeneratedColumn', u'i', u'mapping', u'previousName', u'next', u'len', u'nameIdx', u'sourceIdx', u'result', u'mappings'])
+ var.put(u'previousGeneratedColumn', Js(0.0))
+ var.put(u'previousGeneratedLine', Js(1.0))
+ var.put(u'previousOriginalColumn', Js(0.0))
+ var.put(u'previousOriginalLine', Js(0.0))
+ var.put(u'previousName', Js(0.0))
+ var.put(u'previousSource', Js(0.0))
+ var.put(u'result', Js(u''))
+ pass
+ pass
+ pass
+ pass
+ var.put(u'mappings', var.get(u"this").get(u'_mappings').callprop(u'toArray'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'len', var.get(u'mappings').get(u'length'))
+ while (var.get(u'i')Js(0.0)):
+ if var.get(u'util').callprop(u'compareByGeneratedPositionsInflated', var.get(u'mapping'), var.get(u'mappings').get((var.get(u'i')-Js(1.0)))).neg():
+ continue
+ var.put(u'next', Js(u','), u'+')
+ var.put(u'next', var.get(u'base64VLQ').callprop(u'encode', (var.get(u'mapping').get(u'generatedColumn')-var.get(u'previousGeneratedColumn'))), u'+')
+ var.put(u'previousGeneratedColumn', var.get(u'mapping').get(u'generatedColumn'))
+ if (var.get(u'mapping').get(u'source')!=var.get(u"null")):
+ var.put(u'sourceIdx', var.get(u"this").get(u'_sources').callprop(u'indexOf', var.get(u'mapping').get(u'source')))
+ var.put(u'next', var.get(u'base64VLQ').callprop(u'encode', (var.get(u'sourceIdx')-var.get(u'previousSource'))), u'+')
+ var.put(u'previousSource', var.get(u'sourceIdx'))
+ var.put(u'next', var.get(u'base64VLQ').callprop(u'encode', ((var.get(u'mapping').get(u'originalLine')-Js(1.0))-var.get(u'previousOriginalLine'))), u'+')
+ var.put(u'previousOriginalLine', (var.get(u'mapping').get(u'originalLine')-Js(1.0)))
+ var.put(u'next', var.get(u'base64VLQ').callprop(u'encode', (var.get(u'mapping').get(u'originalColumn')-var.get(u'previousOriginalColumn'))), u'+')
+ var.put(u'previousOriginalColumn', var.get(u'mapping').get(u'originalColumn'))
+ if (var.get(u'mapping').get(u'name')!=var.get(u"null")):
+ var.put(u'nameIdx', var.get(u"this").get(u'_names').callprop(u'indexOf', var.get(u'mapping').get(u'name')))
+ var.put(u'next', var.get(u'base64VLQ').callprop(u'encode', (var.get(u'nameIdx')-var.get(u'previousName'))), u'+')
+ var.put(u'previousName', var.get(u'nameIdx'))
+ var.put(u'result', var.get(u'next'), u'+')
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ return var.get(u'result')
+ PyJs_SourceMapGenerator_serializeMappings_4139_._set_name(u'SourceMapGenerator_serializeMappings')
+ var.get(u'SourceMapGenerator').get(u'prototype').put(u'_serializeMappings', PyJs_SourceMapGenerator_serializeMappings_4139_)
+ @Js
+ def PyJs_SourceMapGenerator_generateSourcesContent_4140_(aSources, aSourceRoot, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'SourceMapGenerator_generateSourcesContent':PyJs_SourceMapGenerator_generateSourcesContent_4140_, u'aSources':aSources, u'aSourceRoot':aSourceRoot}, var)
+ var.registers([u'aSources', u'aSourceRoot'])
+ @Js
+ def PyJs_anonymous_4141_(source, this, arguments, var=var):
+ var = Scope({u'this':this, u'source':source, u'arguments':arguments}, var)
+ var.registers([u'source', u'key'])
+ if var.get(u"this").get(u'_sourcesContents').neg():
+ return var.get(u"null")
+ if (var.get(u'aSourceRoot')!=var.get(u"null")):
+ var.put(u'source', var.get(u'util').callprop(u'relative', var.get(u'aSourceRoot'), var.get(u'source')))
+ var.put(u'key', var.get(u'util').callprop(u'toSetString', var.get(u'source')))
+ return (var.get(u"this").get(u'_sourcesContents').get(var.get(u'key')) if var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u"this").get(u'_sourcesContents'), var.get(u'key')) else var.get(u"null"))
+ PyJs_anonymous_4141_._set_name(u'anonymous')
+ return var.get(u'aSources').callprop(u'map', PyJs_anonymous_4141_, var.get(u"this"))
+ PyJs_SourceMapGenerator_generateSourcesContent_4140_._set_name(u'SourceMapGenerator_generateSourcesContent')
+ var.get(u'SourceMapGenerator').get(u'prototype').put(u'_generateSourcesContent', PyJs_SourceMapGenerator_generateSourcesContent_4140_)
+ @Js
+ def PyJs_SourceMapGenerator_toJSON_4142_(this, arguments, var=var):
+ var = Scope({u'this':this, u'SourceMapGenerator_toJSON':PyJs_SourceMapGenerator_toJSON_4142_, u'arguments':arguments}, var)
+ var.registers([u'map'])
+ PyJs_Object_4143_ = Js({u'version':var.get(u"this").get(u'_version'),u'sources':var.get(u"this").get(u'_sources').callprop(u'toArray'),u'names':var.get(u"this").get(u'_names').callprop(u'toArray'),u'mappings':var.get(u"this").callprop(u'_serializeMappings')})
+ var.put(u'map', PyJs_Object_4143_)
+ if (var.get(u"this").get(u'_file')!=var.get(u"null")):
+ var.get(u'map').put(u'file', var.get(u"this").get(u'_file'))
+ if (var.get(u"this").get(u'_sourceRoot')!=var.get(u"null")):
+ var.get(u'map').put(u'sourceRoot', var.get(u"this").get(u'_sourceRoot'))
+ if var.get(u"this").get(u'_sourcesContents'):
+ var.get(u'map').put(u'sourcesContent', var.get(u"this").callprop(u'_generateSourcesContent', var.get(u'map').get(u'sources'), var.get(u'map').get(u'sourceRoot')))
+ return var.get(u'map')
+ PyJs_SourceMapGenerator_toJSON_4142_._set_name(u'SourceMapGenerator_toJSON')
+ var.get(u'SourceMapGenerator').get(u'prototype').put(u'toJSON', PyJs_SourceMapGenerator_toJSON_4142_)
+ @Js
+ def PyJs_SourceMapGenerator_toString_4144_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'SourceMapGenerator_toString':PyJs_SourceMapGenerator_toString_4144_}, var)
+ var.registers([])
+ return var.get(u'JSON').callprop(u'stringify', var.get(u"this").callprop(u'toJSON'))
+ PyJs_SourceMapGenerator_toString_4144_._set_name(u'SourceMapGenerator_toString')
+ var.get(u'SourceMapGenerator').get(u'prototype').put(u'toString', PyJs_SourceMapGenerator_toString_4144_)
+ var.get(u'exports').put(u'SourceMapGenerator', var.get(u'SourceMapGenerator'))
+PyJs_anonymous_4120_._set_name(u'anonymous')
+PyJs_Object_4145_ = Js({u'./array-set':Js(509.0),u'./base64-vlq':Js(510.0),u'./mapping-list':Js(513.0),u'./util':Js(518.0)})
+@Js
+def PyJs_anonymous_4146_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'util', u'exports', u'NEWLINE_CODE', u'SourceNode', u'require', u'isSourceNode', u'module', u'SourceMapGenerator', u'REGEX_NEWLINE'])
+ @Js
+ def PyJsHoisted_SourceNode_(aLine, aColumn, aSource, aChunks, aName, this, arguments, var=var):
+ var = Scope({u'aChunks':aChunks, u'aSource':aSource, u'aLine':aLine, u'this':this, u'aColumn':aColumn, u'aName':aName, u'arguments':arguments}, var)
+ var.registers([u'aChunks', u'aColumn', u'aSource', u'aLine', u'aName'])
+ var.get(u"this").put(u'children', Js([]))
+ PyJs_Object_4147_ = Js({})
+ var.get(u"this").put(u'sourceContents', PyJs_Object_4147_)
+ var.get(u"this").put(u'line', (var.get(u"null") if (var.get(u'aLine')==var.get(u"null")) else var.get(u'aLine')))
+ var.get(u"this").put(u'column', (var.get(u"null") if (var.get(u'aColumn')==var.get(u"null")) else var.get(u'aColumn')))
+ var.get(u"this").put(u'source', (var.get(u"null") if (var.get(u'aSource')==var.get(u"null")) else var.get(u'aSource')))
+ var.get(u"this").put(u'name', (var.get(u"null") if (var.get(u'aName')==var.get(u"null")) else var.get(u'aName')))
+ var.get(u"this").put(var.get(u'isSourceNode'), var.get(u'true'))
+ if (var.get(u'aChunks')!=var.get(u"null")):
+ var.get(u"this").callprop(u'add', var.get(u'aChunks'))
+ PyJsHoisted_SourceNode_.func_name = u'SourceNode'
+ var.put(u'SourceNode', PyJsHoisted_SourceNode_)
+ var.put(u'SourceMapGenerator', var.get(u'require')(Js(u'./source-map-generator')).get(u'SourceMapGenerator'))
+ var.put(u'util', var.get(u'require')(Js(u'./util')))
+ var.put(u'REGEX_NEWLINE', JsRegExp(u'/(\\r?\\n)/'))
+ var.put(u'NEWLINE_CODE', Js(10.0))
+ var.put(u'isSourceNode', Js(u'$$$isSourceNode$$$'))
+ pass
+ @Js
+ def PyJs_SourceNode_fromStringWithSourceMap_4148_(aGeneratedCode, aSourceMapConsumer, aRelativePath, this, arguments, var=var):
+ var = Scope({u'aSourceMapConsumer':aSourceMapConsumer, u'this':this, u'aRelativePath':aRelativePath, u'aGeneratedCode':aGeneratedCode, u'SourceNode_fromStringWithSourceMap':PyJs_SourceNode_fromStringWithSourceMap_4148_, u'arguments':arguments}, var)
+ var.registers([u'node', u'lastMapping', u'remainingLines', u'aSourceMapConsumer', u'aGeneratedCode', u'lastGeneratedLine', u'aRelativePath', u'addMappingWithCode', u'shiftNextLine', u'lastGeneratedColumn'])
+ @Js
+ def PyJsHoisted_addMappingWithCode_(mapping, code, this, arguments, var=var):
+ var = Scope({u'this':this, u'code':code, u'mapping':mapping, u'arguments':arguments}, var)
+ var.registers([u'source', u'code', u'mapping'])
+ if (PyJsStrictEq(var.get(u'mapping'),var.get(u"null")) or PyJsStrictEq(var.get(u'mapping').get(u'source'),var.get(u'undefined'))):
+ var.get(u'node').callprop(u'add', var.get(u'code'))
+ else:
+ var.put(u'source', (var.get(u'util').callprop(u'join', var.get(u'aRelativePath'), var.get(u'mapping').get(u'source')) if var.get(u'aRelativePath') else var.get(u'mapping').get(u'source')))
+ var.get(u'node').callprop(u'add', var.get(u'SourceNode').create(var.get(u'mapping').get(u'originalLine'), var.get(u'mapping').get(u'originalColumn'), var.get(u'source'), var.get(u'code'), var.get(u'mapping').get(u'name')))
+ PyJsHoisted_addMappingWithCode_.func_name = u'addMappingWithCode'
+ var.put(u'addMappingWithCode', PyJsHoisted_addMappingWithCode_)
+ var.put(u'node', var.get(u'SourceNode').create())
+ var.put(u'remainingLines', var.get(u'aGeneratedCode').callprop(u'split', var.get(u'REGEX_NEWLINE')))
+ @Js
+ def PyJs_anonymous_4149_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'newLine', u'lineContents'])
+ var.put(u'lineContents', var.get(u'remainingLines').callprop(u'shift'))
+ var.put(u'newLine', (var.get(u'remainingLines').callprop(u'shift') or Js(u'')))
+ return (var.get(u'lineContents')+var.get(u'newLine'))
+ PyJs_anonymous_4149_._set_name(u'anonymous')
+ var.put(u'shiftNextLine', PyJs_anonymous_4149_)
+ var.put(u'lastGeneratedLine', Js(1.0))
+ var.put(u'lastGeneratedColumn', Js(0.0))
+ var.put(u'lastMapping', var.get(u"null"))
+ @Js
+ def PyJs_anonymous_4150_(mapping, this, arguments, var=var):
+ var = Scope({u'this':this, u'mapping':mapping, u'arguments':arguments}, var)
+ var.registers([u'nextLine', u'code', u'mapping'])
+ if PyJsStrictNeq(var.get(u'lastMapping'),var.get(u"null")):
+ if (var.get(u'lastGeneratedLine')Js(0.0)):
+ if var.get(u'lastMapping'):
+ var.get(u'addMappingWithCode')(var.get(u'lastMapping'), var.get(u'shiftNextLine')())
+ var.get(u'node').callprop(u'add', var.get(u'remainingLines').callprop(u'join', Js(u'')))
+ @Js
+ def PyJs_anonymous_4151_(sourceFile, this, arguments, var=var):
+ var = Scope({u'this':this, u'sourceFile':sourceFile, u'arguments':arguments}, var)
+ var.registers([u'content', u'sourceFile'])
+ var.put(u'content', var.get(u'aSourceMapConsumer').callprop(u'sourceContentFor', var.get(u'sourceFile')))
+ if (var.get(u'content')!=var.get(u"null")):
+ if (var.get(u'aRelativePath')!=var.get(u"null")):
+ var.put(u'sourceFile', var.get(u'util').callprop(u'join', var.get(u'aRelativePath'), var.get(u'sourceFile')))
+ var.get(u'node').callprop(u'setSourceContent', var.get(u'sourceFile'), var.get(u'content'))
+ PyJs_anonymous_4151_._set_name(u'anonymous')
+ var.get(u'aSourceMapConsumer').get(u'sources').callprop(u'forEach', PyJs_anonymous_4151_)
+ return var.get(u'node')
+ pass
+ PyJs_SourceNode_fromStringWithSourceMap_4148_._set_name(u'SourceNode_fromStringWithSourceMap')
+ var.get(u'SourceNode').put(u'fromStringWithSourceMap', PyJs_SourceNode_fromStringWithSourceMap_4148_)
+ @Js
+ def PyJs_SourceNode_add_4152_(aChunk, this, arguments, var=var):
+ var = Scope({u'this':this, u'SourceNode_add':PyJs_SourceNode_add_4152_, u'arguments':arguments, u'aChunk':aChunk}, var)
+ var.registers([u'aChunk'])
+ if var.get(u'Array').callprop(u'isArray', var.get(u'aChunk')):
+ @Js
+ def PyJs_anonymous_4153_(chunk, this, arguments, var=var):
+ var = Scope({u'this':this, u'chunk':chunk, u'arguments':arguments}, var)
+ var.registers([u'chunk'])
+ var.get(u"this").callprop(u'add', var.get(u'chunk'))
+ PyJs_anonymous_4153_._set_name(u'anonymous')
+ var.get(u'aChunk').callprop(u'forEach', PyJs_anonymous_4153_, var.get(u"this"))
+ else:
+ if (var.get(u'aChunk').get(var.get(u'isSourceNode')) or PyJsStrictEq(var.get(u'aChunk',throw=False).typeof(),Js(u'string'))):
+ if var.get(u'aChunk'):
+ var.get(u"this").get(u'children').callprop(u'push', var.get(u'aChunk'))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((Js(u'Expected a SourceNode, string, or an array of SourceNodes and strings. Got ')+var.get(u'aChunk'))))
+ raise PyJsTempException
+ return var.get(u"this")
+ PyJs_SourceNode_add_4152_._set_name(u'SourceNode_add')
+ var.get(u'SourceNode').get(u'prototype').put(u'add', PyJs_SourceNode_add_4152_)
+ @Js
+ def PyJs_SourceNode_prepend_4154_(aChunk, this, arguments, var=var):
+ var = Scope({u'this':this, u'SourceNode_prepend':PyJs_SourceNode_prepend_4154_, u'arguments':arguments, u'aChunk':aChunk}, var)
+ var.registers([u'i', u'aChunk'])
+ if var.get(u'Array').callprop(u'isArray', var.get(u'aChunk')):
+ #for JS loop
+ var.put(u'i', (var.get(u'aChunk').get(u'length')-Js(1.0)))
+ while (var.get(u'i')>=Js(0.0)):
+ try:
+ var.get(u"this").callprop(u'prepend', var.get(u'aChunk').get(var.get(u'i')))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ else:
+ if (var.get(u'aChunk').get(var.get(u'isSourceNode')) or PyJsStrictEq(var.get(u'aChunk',throw=False).typeof(),Js(u'string'))):
+ var.get(u"this").get(u'children').callprop(u'unshift', var.get(u'aChunk'))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((Js(u'Expected a SourceNode, string, or an array of SourceNodes and strings. Got ')+var.get(u'aChunk'))))
+ raise PyJsTempException
+ return var.get(u"this")
+ PyJs_SourceNode_prepend_4154_._set_name(u'SourceNode_prepend')
+ var.get(u'SourceNode').get(u'prototype').put(u'prepend', PyJs_SourceNode_prepend_4154_)
+ @Js
+ def PyJs_SourceNode_walk_4155_(aFn, this, arguments, var=var):
+ var = Scope({u'this':this, u'aFn':aFn, u'arguments':arguments, u'SourceNode_walk':PyJs_SourceNode_walk_4155_}, var)
+ var.registers([u'i', u'chunk', u'aFn', u'len'])
+ pass
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'len', var.get(u"this").get(u'children').get(u'length'))
+ while (var.get(u'i')Js(0.0)):
+ var.put(u'newChildren', Js([]))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')<(var.get(u'len')-Js(1.0))):
+ try:
+ var.get(u'newChildren').callprop(u'push', var.get(u"this").get(u'children').get(var.get(u'i')))
+ var.get(u'newChildren').callprop(u'push', var.get(u'aSep'))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ var.get(u'newChildren').callprop(u'push', var.get(u"this").get(u'children').get(var.get(u'i')))
+ var.get(u"this").put(u'children', var.get(u'newChildren'))
+ return var.get(u"this")
+ PyJs_SourceNode_join_4157_._set_name(u'SourceNode_join')
+ var.get(u'SourceNode').get(u'prototype').put(u'join', PyJs_SourceNode_join_4157_)
+ @Js
+ def PyJs_SourceNode_replaceRight_4158_(aPattern, aReplacement, this, arguments, var=var):
+ var = Scope({u'this':this, u'aPattern':aPattern, u'aReplacement':aReplacement, u'arguments':arguments, u'SourceNode_replaceRight':PyJs_SourceNode_replaceRight_4158_}, var)
+ var.registers([u'aPattern', u'lastChild', u'aReplacement'])
+ var.put(u'lastChild', var.get(u"this").get(u'children').get((var.get(u"this").get(u'children').get(u'length')-Js(1.0))))
+ if var.get(u'lastChild').get(var.get(u'isSourceNode')):
+ var.get(u'lastChild').callprop(u'replaceRight', var.get(u'aPattern'), var.get(u'aReplacement'))
+ else:
+ if PyJsStrictEq(var.get(u'lastChild',throw=False).typeof(),Js(u'string')):
+ var.get(u"this").get(u'children').put((var.get(u"this").get(u'children').get(u'length')-Js(1.0)), var.get(u'lastChild').callprop(u'replace', var.get(u'aPattern'), var.get(u'aReplacement')))
+ else:
+ var.get(u"this").get(u'children').callprop(u'push', Js(u'').callprop(u'replace', var.get(u'aPattern'), var.get(u'aReplacement')))
+ return var.get(u"this")
+ PyJs_SourceNode_replaceRight_4158_._set_name(u'SourceNode_replaceRight')
+ var.get(u'SourceNode').get(u'prototype').put(u'replaceRight', PyJs_SourceNode_replaceRight_4158_)
+ @Js
+ def PyJs_SourceNode_setSourceContent_4159_(aSourceFile, aSourceContent, this, arguments, var=var):
+ var = Scope({u'this':this, u'aSourceContent':aSourceContent, u'aSourceFile':aSourceFile, u'arguments':arguments, u'SourceNode_setSourceContent':PyJs_SourceNode_setSourceContent_4159_}, var)
+ var.registers([u'aSourceContent', u'aSourceFile'])
+ var.get(u"this").get(u'sourceContents').put(var.get(u'util').callprop(u'toSetString', var.get(u'aSourceFile')), var.get(u'aSourceContent'))
+ PyJs_SourceNode_setSourceContent_4159_._set_name(u'SourceNode_setSourceContent')
+ var.get(u'SourceNode').get(u'prototype').put(u'setSourceContent', PyJs_SourceNode_setSourceContent_4159_)
+ @Js
+ def PyJs_SourceNode_walkSourceContents_4160_(aFn, this, arguments, var=var):
+ var = Scope({u'this':this, u'aFn':aFn, u'arguments':arguments, u'SourceNode_walkSourceContents':PyJs_SourceNode_walkSourceContents_4160_}, var)
+ var.registers([u'i', u'sources', u'aFn', u'len'])
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'len', var.get(u"this").get(u'children').get(u'length'))
+ while (var.get(u'i')=Js(0.0)):
+ try:
+ var.put(u'part', var.get(u'parts').get(var.get(u'i')))
+ if PyJsStrictEq(var.get(u'part'),Js(u'.')):
+ var.get(u'parts').callprop(u'splice', var.get(u'i'), Js(1.0))
+ else:
+ if PyJsStrictEq(var.get(u'part'),Js(u'..')):
+ (var.put(u'up',Js(var.get(u'up').to_number())+Js(1))-Js(1))
+ else:
+ if (var.get(u'up')>Js(0.0)):
+ if PyJsStrictEq(var.get(u'part'),Js(u'')):
+ var.get(u'parts').callprop(u'splice', (var.get(u'i')+Js(1.0)), var.get(u'up'))
+ var.put(u'up', Js(0.0))
+ else:
+ var.get(u'parts').callprop(u'splice', var.get(u'i'), Js(2.0))
+ (var.put(u'up',Js(var.get(u'up').to_number())-Js(1))+Js(1))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ var.put(u'path', var.get(u'parts').callprop(u'join', Js(u'/')))
+ if PyJsStrictEq(var.get(u'path'),Js(u'')):
+ var.put(u'path', (Js(u'/') if var.get(u'isAbsolute') else Js(u'.')))
+ if var.get(u'url'):
+ var.get(u'url').put(u'path', var.get(u'path'))
+ return var.get(u'urlGenerate')(var.get(u'url'))
+ return var.get(u'path')
+ PyJsHoisted_normalize_.func_name = u'normalize'
+ var.put(u'normalize', PyJsHoisted_normalize_)
+ @Js
+ def PyJsHoisted_urlGenerate_(aParsedUrl, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'aParsedUrl':aParsedUrl}, var)
+ var.registers([u'url', u'aParsedUrl'])
+ var.put(u'url', Js(u''))
+ if var.get(u'aParsedUrl').get(u'scheme'):
+ var.put(u'url', (var.get(u'aParsedUrl').get(u'scheme')+Js(u':')), u'+')
+ var.put(u'url', Js(u'//'), u'+')
+ if var.get(u'aParsedUrl').get(u'auth'):
+ var.put(u'url', (var.get(u'aParsedUrl').get(u'auth')+Js(u'@')), u'+')
+ if var.get(u'aParsedUrl').get(u'host'):
+ var.put(u'url', var.get(u'aParsedUrl').get(u'host'), u'+')
+ if var.get(u'aParsedUrl').get(u'port'):
+ var.put(u'url', (Js(u':')+var.get(u'aParsedUrl').get(u'port')), u'+')
+ if var.get(u'aParsedUrl').get(u'path'):
+ var.put(u'url', var.get(u'aParsedUrl').get(u'path'), u'+')
+ return var.get(u'url')
+ PyJsHoisted_urlGenerate_.func_name = u'urlGenerate'
+ var.put(u'urlGenerate', PyJsHoisted_urlGenerate_)
+ @Js
+ def PyJsHoisted_compareByGeneratedPositionsDeflated_(mappingA, mappingB, onlyCompareGenerated, this, arguments, var=var):
+ var = Scope({u'this':this, u'mappingB':mappingB, u'arguments':arguments, u'onlyCompareGenerated':onlyCompareGenerated, u'mappingA':mappingA}, var)
+ var.registers([u'mappingA', u'mappingB', u'onlyCompareGenerated', u'cmp'])
+ var.put(u'cmp', (var.get(u'mappingA').get(u'generatedLine')-var.get(u'mappingB').get(u'generatedLine')))
+ if PyJsStrictNeq(var.get(u'cmp'),Js(0.0)):
+ return var.get(u'cmp')
+ var.put(u'cmp', (var.get(u'mappingA').get(u'generatedColumn')-var.get(u'mappingB').get(u'generatedColumn')))
+ if (PyJsStrictNeq(var.get(u'cmp'),Js(0.0)) or var.get(u'onlyCompareGenerated')):
+ return var.get(u'cmp')
+ var.put(u'cmp', (var.get(u'mappingA').get(u'source')-var.get(u'mappingB').get(u'source')))
+ if PyJsStrictNeq(var.get(u'cmp'),Js(0.0)):
+ return var.get(u'cmp')
+ var.put(u'cmp', (var.get(u'mappingA').get(u'originalLine')-var.get(u'mappingB').get(u'originalLine')))
+ if PyJsStrictNeq(var.get(u'cmp'),Js(0.0)):
+ return var.get(u'cmp')
+ var.put(u'cmp', (var.get(u'mappingA').get(u'originalColumn')-var.get(u'mappingB').get(u'originalColumn')))
+ if PyJsStrictNeq(var.get(u'cmp'),Js(0.0)):
+ return var.get(u'cmp')
+ return (var.get(u'mappingA').get(u'name')-var.get(u'mappingB').get(u'name'))
+ PyJsHoisted_compareByGeneratedPositionsDeflated_.func_name = u'compareByGeneratedPositionsDeflated'
+ var.put(u'compareByGeneratedPositionsDeflated', PyJsHoisted_compareByGeneratedPositionsDeflated_)
+ @Js
+ def PyJsHoisted_join_(aRoot, aPath, this, arguments, var=var):
+ var = Scope({u'aRoot':aRoot, u'aPath':aPath, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'aRootUrl', u'aRoot', u'aPath', u'joined', u'aPathUrl'])
+ if PyJsStrictEq(var.get(u'aRoot'),Js(u'')):
+ var.put(u'aRoot', Js(u'.'))
+ if PyJsStrictEq(var.get(u'aPath'),Js(u'')):
+ var.put(u'aPath', Js(u'.'))
+ var.put(u'aPathUrl', var.get(u'urlParse')(var.get(u'aPath')))
+ var.put(u'aRootUrl', var.get(u'urlParse')(var.get(u'aRoot')))
+ if var.get(u'aRootUrl'):
+ var.put(u'aRoot', (var.get(u'aRootUrl').get(u'path') or Js(u'/')))
+ if (var.get(u'aPathUrl') and var.get(u'aPathUrl').get(u'scheme').neg()):
+ if var.get(u'aRootUrl'):
+ var.get(u'aPathUrl').put(u'scheme', var.get(u'aRootUrl').get(u'scheme'))
+ return var.get(u'urlGenerate')(var.get(u'aPathUrl'))
+ if (var.get(u'aPathUrl') or var.get(u'aPath').callprop(u'match', var.get(u'dataUrlRegexp'))):
+ return var.get(u'aPath')
+ if ((var.get(u'aRootUrl') and var.get(u'aRootUrl').get(u'host').neg()) and var.get(u'aRootUrl').get(u'path').neg()):
+ var.get(u'aRootUrl').put(u'host', var.get(u'aPath'))
+ return var.get(u'urlGenerate')(var.get(u'aRootUrl'))
+ var.put(u'joined', (var.get(u'aPath') if PyJsStrictEq(var.get(u'aPath').callprop(u'charAt', Js(0.0)),Js(u'/')) else var.get(u'normalize')(((var.get(u'aRoot').callprop(u'replace', JsRegExp(u'/\\/+$/'), Js(u''))+Js(u'/'))+var.get(u'aPath')))))
+ if var.get(u'aRootUrl'):
+ var.get(u'aRootUrl').put(u'path', var.get(u'joined'))
+ return var.get(u'urlGenerate')(var.get(u'aRootUrl'))
+ return var.get(u'joined')
+ PyJsHoisted_join_.func_name = u'join'
+ var.put(u'join', PyJsHoisted_join_)
+ @Js
+ def PyJsHoisted_relative_(aRoot, aPath, this, arguments, var=var):
+ var = Scope({u'aRoot':aRoot, u'aPath':aPath, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'aRoot', u'index', u'aPath', u'level'])
+ if PyJsStrictEq(var.get(u'aRoot'),Js(u'')):
+ var.put(u'aRoot', Js(u'.'))
+ var.put(u'aRoot', var.get(u'aRoot').callprop(u'replace', JsRegExp(u'/\\/$/'), Js(u'')))
+ var.put(u'level', Js(0.0))
+ while PyJsStrictNeq(var.get(u'aPath').callprop(u'indexOf', (var.get(u'aRoot')+Js(u'/'))),Js(0.0)):
+ var.put(u'index', var.get(u'aRoot').callprop(u'lastIndexOf', Js(u'/')))
+ if (var.get(u'index')=Js(0.0)):
+ try:
+ if PyJsStrictNeq(var.get(u's').callprop(u'charCodeAt', var.get(u'i')),Js(36.0)):
+ return Js(False)
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ return var.get(u'true')
+ PyJsHoisted_isProtoString_.func_name = u'isProtoString'
+ var.put(u'isProtoString', PyJsHoisted_isProtoString_)
+ @Js
+ def PyJsHoisted_compareByOriginalPositions_(mappingA, mappingB, onlyCompareOriginal, this, arguments, var=var):
+ var = Scope({u'this':this, u'onlyCompareOriginal':onlyCompareOriginal, u'mappingB':mappingB, u'arguments':arguments, u'mappingA':mappingA}, var)
+ var.registers([u'onlyCompareOriginal', u'mappingA', u'mappingB', u'cmp'])
+ var.put(u'cmp', (var.get(u'mappingA').get(u'source')-var.get(u'mappingB').get(u'source')))
+ if PyJsStrictNeq(var.get(u'cmp'),Js(0.0)):
+ return var.get(u'cmp')
+ var.put(u'cmp', (var.get(u'mappingA').get(u'originalLine')-var.get(u'mappingB').get(u'originalLine')))
+ if PyJsStrictNeq(var.get(u'cmp'),Js(0.0)):
+ return var.get(u'cmp')
+ var.put(u'cmp', (var.get(u'mappingA').get(u'originalColumn')-var.get(u'mappingB').get(u'originalColumn')))
+ if (PyJsStrictNeq(var.get(u'cmp'),Js(0.0)) or var.get(u'onlyCompareOriginal')):
+ return var.get(u'cmp')
+ var.put(u'cmp', (var.get(u'mappingA').get(u'generatedColumn')-var.get(u'mappingB').get(u'generatedColumn')))
+ if PyJsStrictNeq(var.get(u'cmp'),Js(0.0)):
+ return var.get(u'cmp')
+ var.put(u'cmp', (var.get(u'mappingA').get(u'generatedLine')-var.get(u'mappingB').get(u'generatedLine')))
+ if PyJsStrictNeq(var.get(u'cmp'),Js(0.0)):
+ return var.get(u'cmp')
+ return (var.get(u'mappingA').get(u'name')-var.get(u'mappingB').get(u'name'))
+ PyJsHoisted_compareByOriginalPositions_.func_name = u'compareByOriginalPositions'
+ var.put(u'compareByOriginalPositions', PyJsHoisted_compareByOriginalPositions_)
+ @Js
+ def PyJsHoisted_strcmp_(aStr1, aStr2, this, arguments, var=var):
+ var = Scope({u'this':this, u'aStr2':aStr2, u'aStr1':aStr1, u'arguments':arguments}, var)
+ var.registers([u'aStr2', u'aStr1'])
+ if PyJsStrictEq(var.get(u'aStr1'),var.get(u'aStr2')):
+ return Js(0.0)
+ if (var.get(u'aStr1')>var.get(u'aStr2')):
+ return Js(1.0)
+ return (-Js(1.0))
+ PyJsHoisted_strcmp_.func_name = u'strcmp'
+ var.put(u'strcmp', PyJsHoisted_strcmp_)
+ @Js
+ def PyJsHoisted_getArg_(aArgs, aName, aDefaultValue, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'aDefaultValue':aDefaultValue, u'aName':aName, u'aArgs':aArgs}, var)
+ var.registers([u'aDefaultValue', u'aName', u'aArgs'])
+ if var.get(u'aArgs').contains(var.get(u'aName')):
+ return var.get(u'aArgs').get(var.get(u'aName'))
+ else:
+ if PyJsStrictEq(var.get(u'arguments').get(u'length'),Js(3.0)):
+ return var.get(u'aDefaultValue')
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create(((Js(u'"')+var.get(u'aName'))+Js(u'" is a required argument.'))))
+ raise PyJsTempException
+ PyJsHoisted_getArg_.func_name = u'getArg'
+ var.put(u'getArg', PyJsHoisted_getArg_)
+ @Js
+ def PyJsHoisted_toSetString_(aStr, this, arguments, var=var):
+ var = Scope({u'this':this, u'aStr':aStr, u'arguments':arguments}, var)
+ var.registers([u'aStr'])
+ if var.get(u'isProtoString')(var.get(u'aStr')):
+ return (Js(u'$')+var.get(u'aStr'))
+ return var.get(u'aStr')
+ PyJsHoisted_toSetString_.func_name = u'toSetString'
+ var.put(u'toSetString', PyJsHoisted_toSetString_)
+ pass
+ var.get(u'exports').put(u'getArg', var.get(u'getArg'))
+ var.put(u'urlRegexp', JsRegExp(u'/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/'))
+ var.put(u'dataUrlRegexp', JsRegExp(u'/^data:.+\\,.+$/'))
+ pass
+ var.get(u'exports').put(u'urlParse', var.get(u'urlParse'))
+ pass
+ var.get(u'exports').put(u'urlGenerate', var.get(u'urlGenerate'))
+ pass
+ var.get(u'exports').put(u'normalize', var.get(u'normalize'))
+ pass
+ var.get(u'exports').put(u'join', var.get(u'join'))
+ @Js
+ def PyJs_anonymous_4179_(aPath, this, arguments, var=var):
+ var = Scope({u'this':this, u'aPath':aPath, u'arguments':arguments}, var)
+ var.registers([u'aPath'])
+ return (PyJsStrictEq(var.get(u'aPath').callprop(u'charAt', Js(0.0)),Js(u'/')) or var.get(u'aPath').callprop(u'match', var.get(u'urlRegexp')).neg().neg())
+ PyJs_anonymous_4179_._set_name(u'anonymous')
+ var.get(u'exports').put(u'isAbsolute', PyJs_anonymous_4179_)
+ pass
+ var.get(u'exports').put(u'relative', var.get(u'relative'))
+ @Js
+ def PyJs_anonymous_4180_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'obj'])
+ var.put(u'obj', var.get(u'Object').callprop(u'create', var.get(u"null")))
+ return var.get(u'obj').contains(Js(u'__proto__')).neg()
+ PyJs_anonymous_4180_._set_name(u'anonymous')
+ var.put(u'supportsNullProto', PyJs_anonymous_4180_())
+ pass
+ pass
+ var.get(u'exports').put(u'toSetString', (var.get(u'identity') if var.get(u'supportsNullProto') else var.get(u'toSetString')))
+ pass
+ var.get(u'exports').put(u'fromSetString', (var.get(u'identity') if var.get(u'supportsNullProto') else var.get(u'fromSetString')))
+ pass
+ pass
+ var.get(u'exports').put(u'compareByOriginalPositions', var.get(u'compareByOriginalPositions'))
+ pass
+ var.get(u'exports').put(u'compareByGeneratedPositionsDeflated', var.get(u'compareByGeneratedPositionsDeflated'))
+ pass
+ pass
+ var.get(u'exports').put(u'compareByGeneratedPositionsInflated', var.get(u'compareByGeneratedPositionsInflated'))
+PyJs_anonymous_4177_._set_name(u'anonymous')
+PyJs_Object_4183_ = Js({})
+@Js
+def PyJs_anonymous_4184_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ var.get(u'exports').put(u'SourceMapGenerator', var.get(u'require')(Js(u'./lib/source-map-generator')).get(u'SourceMapGenerator'))
+ var.get(u'exports').put(u'SourceMapConsumer', var.get(u'require')(Js(u'./lib/source-map-consumer')).get(u'SourceMapConsumer'))
+ var.get(u'exports').put(u'SourceNode', var.get(u'require')(Js(u'./lib/source-node')).get(u'SourceNode'))
+PyJs_anonymous_4184_._set_name(u'anonymous')
+PyJs_Object_4185_ = Js({u'./lib/source-map-consumer':Js(515.0),u'./lib/source-map-generator':Js(516.0),u'./lib/source-node':Js(517.0)})
+@Js
+def PyJs_anonymous_4186_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'ansiRegex', u'exports', u'module'])
+ Js(u'use strict')
+ var.put(u'ansiRegex', var.get(u'require')(Js(u'ansi-regex'))())
+ @Js
+ def PyJs_anonymous_4187_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ return (var.get(u'str').callprop(u'replace', var.get(u'ansiRegex'), Js(u'')) if PyJsStrictEq(var.get(u'str',throw=False).typeof(),Js(u'string')) else var.get(u'str'))
+ PyJs_anonymous_4187_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', PyJs_anonymous_4187_)
+PyJs_anonymous_4186_._set_name(u'anonymous')
+PyJs_Object_4188_ = Js({u'ansi-regex':Js(2.0)})
+@Js
+def PyJs_anonymous_4189_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_4190_(process, this, arguments, var=var):
+ var = Scope({u'process':process, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'process', u'hasFlag', u'terminator', u'argv'])
+ Js(u'use strict')
+ var.put(u'argv', var.get(u'process').get(u'argv'))
+ var.put(u'terminator', var.get(u'argv').callprop(u'indexOf', Js(u'--')))
+ @Js
+ def PyJs_anonymous_4191_(flag, this, arguments, var=var):
+ var = Scope({u'this':this, u'flag':flag, u'arguments':arguments}, var)
+ var.registers([u'flag', u'pos'])
+ var.put(u'flag', (Js(u'--')+var.get(u'flag')))
+ var.put(u'pos', var.get(u'argv').callprop(u'indexOf', var.get(u'flag')))
+ return (PyJsStrictNeq(var.get(u'pos'),(-Js(1.0))) and ((var.get(u'pos')=Js(0.0)):
+ try:
+ if (var.get(u'ka').get(var.get(u'i'))!=var.get(u'kb').get(var.get(u'i'))):
+ return Js(False)
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ #for JS loop
+ var.put(u'i', (var.get(u'ka').get(u'length')-Js(1.0)))
+ while (var.get(u'i')>=Js(0.0)):
+ try:
+ var.put(u'key', var.get(u'ka').get(var.get(u'i')))
+ if var.get(u'_deepEqual')(var.get(u'a').get(var.get(u'key')), var.get(u'b').get(var.get(u'key'))).neg():
+ return Js(False)
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ return var.get(u'true')
+ PyJsHoisted_objEquiv_.func_name = u'objEquiv'
+ var.put(u'objEquiv', PyJsHoisted_objEquiv_)
+ @Js
+ def PyJsHoisted_isArguments_(object, this, arguments, var=var):
+ var = Scope({u'this':this, u'object':object, u'arguments':arguments}, var)
+ var.registers([u'object'])
+ return (var.get(u'Object').get(u'prototype').get(u'toString').callprop(u'call', var.get(u'object'))==Js(u'[object Arguments]'))
+ PyJsHoisted_isArguments_.func_name = u'isArguments'
+ var.put(u'isArguments', PyJsHoisted_isArguments_)
+ var.put(u'util', var.get(u'require')(Js(u'util/')))
+ var.put(u'pSlice', var.get(u'Array').get(u'prototype').get(u'slice'))
+ var.put(u'hasOwn', var.get(u'Object').get(u'prototype').get(u'hasOwnProperty'))
+ var.put(u'assert', var.get(u'module').put(u'exports', var.get(u'ok')))
+ @Js
+ def PyJs_AssertionError_4200_(options, this, arguments, var=var):
+ var = Scope({u'this':this, u'AssertionError':PyJs_AssertionError_4200_, u'options':options, u'arguments':arguments}, var)
+ var.registers([u'next_line', u'err', u'idx', u'stackStartFunction', u'fn_name', u'options', u'out'])
+ var.get(u"this").put(u'name', Js(u'AssertionError'))
+ var.get(u"this").put(u'actual', var.get(u'options').get(u'actual'))
+ var.get(u"this").put(u'expected', var.get(u'options').get(u'expected'))
+ var.get(u"this").put(u'operator', var.get(u'options').get(u'operator'))
+ if var.get(u'options').get(u'message'):
+ var.get(u"this").put(u'message', var.get(u'options').get(u'message'))
+ var.get(u"this").put(u'generatedMessage', Js(False))
+ else:
+ var.get(u"this").put(u'message', var.get(u'getMessage')(var.get(u"this")))
+ var.get(u"this").put(u'generatedMessage', var.get(u'true'))
+ var.put(u'stackStartFunction', (var.get(u'options').get(u'stackStartFunction') or var.get(u'fail')))
+ if var.get(u'Error').get(u'captureStackTrace'):
+ var.get(u'Error').callprop(u'captureStackTrace', var.get(u"this"), var.get(u'stackStartFunction'))
+ else:
+ var.put(u'err', var.get(u'Error').create())
+ if var.get(u'err').get(u'stack'):
+ var.put(u'out', var.get(u'err').get(u'stack'))
+ var.put(u'fn_name', var.get(u'stackStartFunction').get(u'name'))
+ var.put(u'idx', var.get(u'out').callprop(u'indexOf', (Js(u'\n')+var.get(u'fn_name'))))
+ if (var.get(u'idx')>=Js(0.0)):
+ var.put(u'next_line', var.get(u'out').callprop(u'indexOf', Js(u'\n'), (var.get(u'idx')+Js(1.0))))
+ var.put(u'out', var.get(u'out').callprop(u'substring', (var.get(u'next_line')+Js(1.0))))
+ var.get(u"this").put(u'stack', var.get(u'out'))
+ PyJs_AssertionError_4200_._set_name(u'AssertionError')
+ var.get(u'assert').put(u'AssertionError', PyJs_AssertionError_4200_)
+ var.get(u'util').callprop(u'inherits', var.get(u'assert').get(u'AssertionError'), var.get(u'Error'))
+ pass
+ pass
+ pass
+ pass
+ var.get(u'assert').put(u'fail', var.get(u'fail'))
+ pass
+ var.get(u'assert').put(u'ok', var.get(u'ok'))
+ @Js
+ def PyJs_equal_4202_(actual, expected, message, this, arguments, var=var):
+ var = Scope({u'actual':actual, u'this':this, u'equal':PyJs_equal_4202_, u'arguments':arguments, u'expected':expected, u'message':message}, var)
+ var.registers([u'expected', u'message', u'actual'])
+ if (var.get(u'actual')!=var.get(u'expected')):
+ var.get(u'fail')(var.get(u'actual'), var.get(u'expected'), var.get(u'message'), Js(u'=='), var.get(u'assert').get(u'equal'))
+ PyJs_equal_4202_._set_name(u'equal')
+ var.get(u'assert').put(u'equal', PyJs_equal_4202_)
+ @Js
+ def PyJs_notEqual_4203_(actual, expected, message, this, arguments, var=var):
+ var = Scope({u'notEqual':PyJs_notEqual_4203_, u'actual':actual, u'this':this, u'arguments':arguments, u'expected':expected, u'message':message}, var)
+ var.registers([u'expected', u'message', u'actual'])
+ if (var.get(u'actual')==var.get(u'expected')):
+ var.get(u'fail')(var.get(u'actual'), var.get(u'expected'), var.get(u'message'), Js(u'!='), var.get(u'assert').get(u'notEqual'))
+ PyJs_notEqual_4203_._set_name(u'notEqual')
+ var.get(u'assert').put(u'notEqual', PyJs_notEqual_4203_)
+ @Js
+ def PyJs_deepEqual_4204_(actual, expected, message, this, arguments, var=var):
+ var = Scope({u'actual':actual, u'this':this, u'arguments':arguments, u'expected':expected, u'message':message, u'deepEqual':PyJs_deepEqual_4204_}, var)
+ var.registers([u'expected', u'message', u'actual'])
+ if var.get(u'_deepEqual')(var.get(u'actual'), var.get(u'expected')).neg():
+ var.get(u'fail')(var.get(u'actual'), var.get(u'expected'), var.get(u'message'), Js(u'deepEqual'), var.get(u'assert').get(u'deepEqual'))
+ PyJs_deepEqual_4204_._set_name(u'deepEqual')
+ var.get(u'assert').put(u'deepEqual', PyJs_deepEqual_4204_)
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_notDeepEqual_4206_(actual, expected, message, this, arguments, var=var):
+ var = Scope({u'actual':actual, u'this':this, u'notDeepEqual':PyJs_notDeepEqual_4206_, u'arguments':arguments, u'expected':expected, u'message':message}, var)
+ var.registers([u'expected', u'message', u'actual'])
+ if var.get(u'_deepEqual')(var.get(u'actual'), var.get(u'expected')):
+ var.get(u'fail')(var.get(u'actual'), var.get(u'expected'), var.get(u'message'), Js(u'notDeepEqual'), var.get(u'assert').get(u'notDeepEqual'))
+ PyJs_notDeepEqual_4206_._set_name(u'notDeepEqual')
+ var.get(u'assert').put(u'notDeepEqual', PyJs_notDeepEqual_4206_)
+ @Js
+ def PyJs_strictEqual_4207_(actual, expected, message, this, arguments, var=var):
+ var = Scope({u'actual':actual, u'this':this, u'arguments':arguments, u'expected':expected, u'message':message, u'strictEqual':PyJs_strictEqual_4207_}, var)
+ var.registers([u'expected', u'message', u'actual'])
+ if PyJsStrictNeq(var.get(u'actual'),var.get(u'expected')):
+ var.get(u'fail')(var.get(u'actual'), var.get(u'expected'), var.get(u'message'), Js(u'==='), var.get(u'assert').get(u'strictEqual'))
+ PyJs_strictEqual_4207_._set_name(u'strictEqual')
+ var.get(u'assert').put(u'strictEqual', PyJs_strictEqual_4207_)
+ @Js
+ def PyJs_notStrictEqual_4208_(actual, expected, message, this, arguments, var=var):
+ var = Scope({u'actual':actual, u'this':this, u'arguments':arguments, u'notStrictEqual':PyJs_notStrictEqual_4208_, u'expected':expected, u'message':message}, var)
+ var.registers([u'expected', u'message', u'actual'])
+ if PyJsStrictEq(var.get(u'actual'),var.get(u'expected')):
+ var.get(u'fail')(var.get(u'actual'), var.get(u'expected'), var.get(u'message'), Js(u'!=='), var.get(u'assert').get(u'notStrictEqual'))
+ PyJs_notStrictEqual_4208_._set_name(u'notStrictEqual')
+ var.get(u'assert').put(u'notStrictEqual', PyJs_notStrictEqual_4208_)
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_4210_(block, error, message, this, arguments, var=var):
+ var = Scope({u'this':this, u'message':message, u'arguments':arguments, u'block':block, u'error':error}, var)
+ var.registers([u'message', u'block', u'error'])
+ var.get(u'_throws').callprop(u'apply', var.get(u"this"), Js([var.get(u'true')]).callprop(u'concat', var.get(u'pSlice').callprop(u'call', var.get(u'arguments'))))
+ PyJs_anonymous_4210_._set_name(u'anonymous')
+ var.get(u'assert').put(u'throws', PyJs_anonymous_4210_)
+ @Js
+ def PyJs_anonymous_4211_(block, message, this, arguments, var=var):
+ var = Scope({u'this':this, u'message':message, u'arguments':arguments, u'block':block}, var)
+ var.registers([u'message', u'block'])
+ var.get(u'_throws').callprop(u'apply', var.get(u"this"), Js([Js(False)]).callprop(u'concat', var.get(u'pSlice').callprop(u'call', var.get(u'arguments'))))
+ PyJs_anonymous_4211_._set_name(u'anonymous')
+ var.get(u'assert').put(u'doesNotThrow', PyJs_anonymous_4211_)
+ @Js
+ def PyJs_anonymous_4212_(err, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'err':err}, var)
+ var.registers([u'err'])
+ if var.get(u'err'):
+ PyJsTempException = JsToPyException(var.get(u'err'))
+ raise PyJsTempException
+ PyJs_anonymous_4212_._set_name(u'anonymous')
+ var.get(u'assert').put(u'ifError', PyJs_anonymous_4212_)
+ @Js
+ def PyJs_anonymous_4213_(obj, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments}, var)
+ var.registers([u'keys', u'obj', u'key'])
+ var.put(u'keys', Js([]))
+ for PyJsTemp in var.get(u'obj'):
+ var.put(u'key', PyJsTemp)
+ if var.get(u'hasOwn').callprop(u'call', var.get(u'obj'), var.get(u'key')):
+ var.get(u'keys').callprop(u'push', var.get(u'key'))
+ return var.get(u'keys')
+ PyJs_anonymous_4213_._set_name(u'anonymous')
+ var.put(u'objectKeys', (var.get(u'Object').get(u'keys') or PyJs_anonymous_4213_))
+PyJs_anonymous_4199_._set_name(u'anonymous')
+PyJs_Object_4214_ = Js({u'util/':Js(534.0)})
+@Js
+def PyJs_anonymous_4215_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ PyJs_Object_4216_ = Js({})
+ @Js
+ def PyJs_anonymous_4217_(PyJsArg_676c6f62616c_, this, arguments, var=var):
+ var = Scope({u'this':this, u'global':PyJsArg_676c6f62616c_, u'arguments':arguments}, var)
+ var.registers([u'binarySlice', u'asciiWrite', u'objectWriteUInt16', u'ieee754', u'fromBuffer', u'base64Write', u'fromObject', u'fromString', u'global', u'fromArrayBuffer', u'fromJsonObject', u'asciiToBytes', u'hexSlice', u'slowToString', u'byteLength', u'checked', u'Buffer', u'base64', u'base64ToBytes', u'kMaxLength', u'writeFloat', u'utf8Slice', u'allocate', u'checkInt', u'objectWriteUInt32', u'INVALID_BASE64_RE', u'toHex', u'isArray', u'fromNumber', u'SlowBuffer', u'hexWrite', u'fromArrayLike', u'checkIEEE754', u'utf16leToBytes', u'ucs2Write', u'base64clean', u'asciiSlice', u'checkOffset', u'decodeCodePointsArray', u'fromArray', u'binaryWrite', u'fromTypedArray', u'rootParent', u'utf16leSlice', u'typedArraySupport', u'utf8Write', u'utf8ToBytes', u'writeDouble', u'MAX_ARGUMENTS_LENGTH', u'blitBuffer', u'base64Slice', u'stringtrim'])
+ @Js
+ def PyJsHoisted_binarySlice_(buf, start, end, this, arguments, var=var):
+ var = Scope({u'this':this, u'start':start, u'end':end, u'buf':buf, u'arguments':arguments}, var)
+ var.registers([u'i', u'start', u'end', u'buf', u'ret'])
+ var.put(u'ret', Js(u''))
+ var.put(u'end', var.get(u'Math').callprop(u'min', var.get(u'buf').get(u'length'), var.get(u'end')))
+ #for JS loop
+ var.put(u'i', var.get(u'start'))
+ while (var.get(u'i')var.get(u'len'))):
+ var.put(u'end', var.get(u'len'))
+ var.put(u'out', Js(u''))
+ #for JS loop
+ var.put(u'i', var.get(u'start'))
+ while (var.get(u'i')var.get(u"this").get(u'length')):
+ var.put(u'end', var.get(u"this").get(u'length'))
+ if (var.get(u'end')<=var.get(u'start')):
+ return Js(u'')
+ while var.get(u'true'):
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'encoding'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'hex')):
+ SWITCHED = True
+ return var.get(u'hexSlice')(var.get(u"this"), var.get(u'start'), var.get(u'end'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf8')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf-8')):
+ SWITCHED = True
+ return var.get(u'utf8Slice')(var.get(u"this"), var.get(u'start'), var.get(u'end'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ascii')):
+ SWITCHED = True
+ return var.get(u'asciiSlice')(var.get(u"this"), var.get(u'start'), var.get(u'end'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'binary')):
+ SWITCHED = True
+ return var.get(u'binarySlice')(var.get(u"this"), var.get(u'start'), var.get(u'end'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'base64')):
+ SWITCHED = True
+ return var.get(u'base64Slice')(var.get(u"this"), var.get(u'start'), var.get(u'end'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ucs2')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ucs-2')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf16le')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf-16le')):
+ SWITCHED = True
+ return var.get(u'utf16leSlice')(var.get(u"this"), var.get(u'start'), var.get(u'end'))
+ if True:
+ SWITCHED = True
+ if var.get(u'loweredCase'):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((Js(u'Unknown encoding: ')+var.get(u'encoding'))))
+ raise PyJsTempException
+ var.put(u'encoding', (var.get(u'encoding')+Js(u'')).callprop(u'toLowerCase'))
+ var.put(u'loweredCase', var.get(u'true'))
+ SWITCHED = True
+ break
+ PyJsHoisted_slowToString_.func_name = u'slowToString'
+ var.put(u'slowToString', PyJsHoisted_slowToString_)
+ @Js
+ def PyJsHoisted_byteLength_(string, encoding, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'string':string, u'encoding':encoding}, var)
+ var.registers([u'loweredCase', u'string', u'len', u'encoding'])
+ if PyJsStrictNeq(var.get(u'string',throw=False).typeof(),Js(u'string')):
+ var.put(u'string', (Js(u'')+var.get(u'string')))
+ var.put(u'len', var.get(u'string').get(u'length'))
+ if PyJsStrictEq(var.get(u'len'),Js(0.0)):
+ return Js(0.0)
+ var.put(u'loweredCase', Js(False))
+ #for JS loop
+
+ while 1:
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'encoding'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ascii')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'binary')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'raw')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'raws')):
+ SWITCHED = True
+ return var.get(u'len')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf8')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf-8')):
+ SWITCHED = True
+ return var.get(u'utf8ToBytes')(var.get(u'string')).get(u'length')
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ucs2')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ucs-2')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf16le')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf-16le')):
+ SWITCHED = True
+ return (var.get(u'len')*Js(2.0))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'hex')):
+ SWITCHED = True
+ return PyJsBshift(var.get(u'len'),Js(1.0))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'base64')):
+ SWITCHED = True
+ return var.get(u'base64ToBytes')(var.get(u'string')).get(u'length')
+ if True:
+ SWITCHED = True
+ if var.get(u'loweredCase'):
+ return var.get(u'utf8ToBytes')(var.get(u'string')).get(u'length')
+ var.put(u'encoding', (Js(u'')+var.get(u'encoding')).callprop(u'toLowerCase'))
+ var.put(u'loweredCase', var.get(u'true'))
+ SWITCHED = True
+ break
+
+ PyJsHoisted_byteLength_.func_name = u'byteLength'
+ var.put(u'byteLength', PyJsHoisted_byteLength_)
+ @Js
+ def PyJsHoisted_checked_(length, this, arguments, var=var):
+ var = Scope({u'this':this, u'length':length, u'arguments':arguments}, var)
+ var.registers([u'length'])
+ if (var.get(u'length')>=var.get(u'kMaxLength')()):
+ PyJsTempException = JsToPyException(var.get(u'RangeError').create((((Js(u'Attempt to allocate Buffer larger than maximum ')+Js(u'size: 0x'))+var.get(u'kMaxLength')().callprop(u'toString', Js(16.0)))+Js(u' bytes'))))
+ raise PyJsTempException
+ return (var.get(u'length')|Js(0.0))
+ PyJsHoisted_checked_.func_name = u'checked'
+ var.put(u'checked', PyJsHoisted_checked_)
+ @Js
+ def PyJsHoisted_Buffer_(arg, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'arg':arg}, var)
+ var.registers([u'arg'])
+ if var.get(u"this").instanceof(var.get(u'Buffer')).neg():
+ if (var.get(u'arguments').get(u'length')>Js(1.0)):
+ return var.get(u'Buffer').create(var.get(u'arg'), var.get(u'arguments').get(u'1'))
+ return var.get(u'Buffer').create(var.get(u'arg'))
+ if var.get(u'Buffer').get(u'TYPED_ARRAY_SUPPORT').neg():
+ var.get(u"this").put(u'length', Js(0.0))
+ var.get(u"this").put(u'parent', var.get(u'undefined'))
+ if PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'number')):
+ return var.get(u'fromNumber')(var.get(u"this"), var.get(u'arg'))
+ if PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'string')):
+ return var.get(u'fromString')(var.get(u"this"), var.get(u'arg'), (var.get(u'arguments').get(u'1') if (var.get(u'arguments').get(u'length')>Js(1.0)) else Js(u'utf8')))
+ return var.get(u'fromObject')(var.get(u"this"), var.get(u'arg'))
+ PyJsHoisted_Buffer_.func_name = u'Buffer'
+ var.put(u'Buffer', PyJsHoisted_Buffer_)
+ @Js
+ def PyJsHoisted_asciiSlice_(buf, start, end, this, arguments, var=var):
+ var = Scope({u'this':this, u'start':start, u'end':end, u'buf':buf, u'arguments':arguments}, var)
+ var.registers([u'i', u'start', u'end', u'buf', u'ret'])
+ var.put(u'ret', Js(u''))
+ var.put(u'end', var.get(u'Math').callprop(u'min', var.get(u'buf').get(u'length'), var.get(u'end')))
+ #for JS loop
+ var.put(u'i', var.get(u'start'))
+ while (var.get(u'i')Js(239)) else (Js(3.0) if (var.get(u'firstByte')>Js(223)) else (Js(2.0) if (var.get(u'firstByte')>Js(191)) else Js(1.0)))))
+ if ((var.get(u'i')+var.get(u'bytesPerSequence'))<=var.get(u'end')):
+ pass
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'bytesPerSequence'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(1.0)):
+ SWITCHED = True
+ if (var.get(u'firstByte')Js(127)):
+ var.put(u'codePoint', var.get(u'tempCodePoint'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(3.0)):
+ SWITCHED = True
+ var.put(u'secondByte', var.get(u'buf').get((var.get(u'i')+Js(1.0))))
+ var.put(u'thirdByte', var.get(u'buf').get((var.get(u'i')+Js(2.0))))
+ if (PyJsStrictEq((var.get(u'secondByte')&Js(192)),Js(128)) and PyJsStrictEq((var.get(u'thirdByte')&Js(192)),Js(128))):
+ var.put(u'tempCodePoint', ((((var.get(u'firstByte')&Js(15))<Js(2047)) and ((var.get(u'tempCodePoint')Js(57343)))):
+ var.put(u'codePoint', var.get(u'tempCodePoint'))
+ break
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(4.0)):
+ SWITCHED = True
+ var.put(u'secondByte', var.get(u'buf').get((var.get(u'i')+Js(1.0))))
+ var.put(u'thirdByte', var.get(u'buf').get((var.get(u'i')+Js(2.0))))
+ var.put(u'fourthByte', var.get(u'buf').get((var.get(u'i')+Js(3.0))))
+ if ((PyJsStrictEq((var.get(u'secondByte')&Js(192)),Js(128)) and PyJsStrictEq((var.get(u'thirdByte')&Js(192)),Js(128))) and PyJsStrictEq((var.get(u'fourthByte')&Js(192)),Js(128))):
+ var.put(u'tempCodePoint', (((((var.get(u'firstByte')&Js(15))<Js(65535)) and (var.get(u'tempCodePoint')Js(65535)):
+ var.put(u'codePoint', Js(65536), u'-')
+ var.get(u'res').callprop(u'push', ((PyJsBshift(var.get(u'codePoint'),Js(10.0))&Js(1023))|Js(55296)))
+ var.put(u'codePoint', (Js(56320)|(var.get(u'codePoint')&Js(1023))))
+ var.get(u'res').callprop(u'push', var.get(u'codePoint'))
+ var.put(u'i', var.get(u'bytesPerSequence'), u'+')
+ return var.get(u'decodeCodePointsArray')(var.get(u'res'))
+ PyJsHoisted_utf8Slice_.func_name = u'utf8Slice'
+ var.put(u'utf8Slice', PyJsHoisted_utf8Slice_)
+ @Js
+ def PyJsHoisted_allocate_(that, length, this, arguments, var=var):
+ var = Scope({u'this':this, u'length':length, u'arguments':arguments, u'that':that}, var)
+ var.registers([u'fromPool', u'length', u'that'])
+ if var.get(u'Buffer').get(u'TYPED_ARRAY_SUPPORT'):
+ var.put(u'that', var.get(u'Uint8Array').create(var.get(u'length')))
+ var.get(u'that').put(u'__proto__', var.get(u'Buffer').get(u'prototype'))
+ else:
+ var.get(u'that').put(u'length', var.get(u'length'))
+ var.put(u'fromPool', (PyJsStrictNeq(var.get(u'length'),Js(0.0)) and (var.get(u'length')<=PyJsBshift(var.get(u'Buffer').get(u'poolSize'),Js(1.0)))))
+ if var.get(u'fromPool'):
+ var.get(u'that').put(u'parent', var.get(u'rootParent'))
+ return var.get(u'that')
+ PyJsHoisted_allocate_.func_name = u'allocate'
+ var.put(u'allocate', PyJsHoisted_allocate_)
+ @Js
+ def PyJsHoisted_checkInt_(buf, value, offset, ext, max, min, this, arguments, var=var):
+ var = Scope({u'min':min, u'this':this, u'max':max, u'value':value, u'ext':ext, u'arguments':arguments, u'offset':offset, u'buf':buf}, var)
+ var.registers([u'min', u'max', u'value', u'ext', u'offset', u'buf'])
+ if var.get(u'Buffer').callprop(u'isBuffer', var.get(u'buf')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'buffer must be a Buffer instance')))
+ raise PyJsTempException
+ if ((var.get(u'value')>var.get(u'max')) or (var.get(u'value')var.get(u'buf').get(u'length')):
+ PyJsTempException = JsToPyException(var.get(u'RangeError').create(Js(u'index out of range')))
+ raise PyJsTempException
+ PyJsHoisted_checkInt_.func_name = u'checkInt'
+ var.put(u'checkInt', PyJsHoisted_checkInt_)
+ @Js
+ def PyJsHoisted_objectWriteUInt32_(buf, value, offset, littleEndian, this, arguments, var=var):
+ var = Scope({u'arguments':arguments, u'offset':offset, u'this':this, u'littleEndian':littleEndian, u'buf':buf, u'value':value}, var)
+ var.registers([u'i', u'j', u'value', u'offset', u'littleEndian', u'buf'])
+ if (var.get(u'value')var.get(u'remaining')):
+ var.put(u'length', var.get(u'remaining'))
+ var.put(u'strLen', var.get(u'string').get(u'length'))
+ if PyJsStrictNeq((var.get(u'strLen')%Js(2.0)),Js(0.0)):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'Invalid hex string')))
+ raise PyJsTempException
+ if (var.get(u'length')>(var.get(u'strLen')/Js(2.0))):
+ var.put(u'length', (var.get(u'strLen')/Js(2.0)))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')var.get(u'buf').get(u'length')):
+ PyJsTempException = JsToPyException(var.get(u'RangeError').create(Js(u'index out of range')))
+ raise PyJsTempException
+ if (var.get(u'offset')>Js(8.0)))
+ var.put(u'lo', (var.get(u'c')%Js(256.0)))
+ var.get(u'byteArray').callprop(u'push', var.get(u'lo'))
+ var.get(u'byteArray').callprop(u'push', var.get(u'hi'))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ return var.get(u'byteArray')
+ PyJsHoisted_utf16leToBytes_.func_name = u'utf16leToBytes'
+ var.put(u'utf16leToBytes', PyJsHoisted_utf16leToBytes_)
+ @Js
+ def PyJsHoisted_ucs2Write_(buf, string, offset, length, this, arguments, var=var):
+ var = Scope({u'length':length, u'string':string, u'offset':offset, u'this':this, u'buf':buf, u'arguments':arguments}, var)
+ var.registers([u'length', u'buf', u'string', u'offset'])
+ return var.get(u'blitBuffer')(var.get(u'utf16leToBytes')(var.get(u'string'), (var.get(u'buf').get(u'length')-var.get(u'offset'))), var.get(u'buf'), var.get(u'offset'), var.get(u'length'))
+ PyJsHoisted_ucs2Write_.func_name = u'ucs2Write'
+ var.put(u'ucs2Write', PyJsHoisted_ucs2Write_)
+ @Js
+ def PyJsHoisted_base64clean_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ var.put(u'str', var.get(u'stringtrim')(var.get(u'str')).callprop(u'replace', var.get(u'INVALID_BASE64_RE'), Js(u'')))
+ if (var.get(u'str').get(u'length')var.get(u'length')):
+ PyJsTempException = JsToPyException(var.get(u'RangeError').create(Js(u'Trying to access beyond buffer length')))
+ raise PyJsTempException
+ PyJsHoisted_checkOffset_.func_name = u'checkOffset'
+ var.put(u'checkOffset', PyJsHoisted_checkOffset_)
+ @Js
+ def PyJsHoisted_decodeCodePointsArray_(codePoints, this, arguments, var=var):
+ var = Scope({u'codePoints':codePoints, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'res', u'len', u'codePoints'])
+ var.put(u'len', var.get(u'codePoints').get(u'length'))
+ if (var.get(u'len')<=var.get(u'MAX_ARGUMENTS_LENGTH')):
+ return var.get(u'String').get(u'fromCharCode').callprop(u'apply', var.get(u'String'), var.get(u'codePoints'))
+ var.put(u'res', Js(u''))
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(55295)) and (var.get(u'codePoint')Js(56319)):
+ if (var.put(u'units', Js(3.0), u'-')>(-Js(1.0))):
+ var.get(u'bytes').callprop(u'push', Js(239), Js(191), Js(189))
+ continue
+ else:
+ if PyJsStrictEq((var.get(u'i')+Js(1.0)),var.get(u'length')):
+ if (var.put(u'units', Js(3.0), u'-')>(-Js(1.0))):
+ var.get(u'bytes').callprop(u'push', Js(239), Js(191), Js(189))
+ continue
+ var.put(u'leadSurrogate', var.get(u'codePoint'))
+ continue
+ if (var.get(u'codePoint')(-Js(1.0))):
+ var.get(u'bytes').callprop(u'push', Js(239), Js(191), Js(189))
+ var.put(u'leadSurrogate', var.get(u'codePoint'))
+ continue
+ var.put(u'codePoint', ((((var.get(u'leadSurrogate')-Js(55296))<(-Js(1.0))):
+ var.get(u'bytes').callprop(u'push', Js(239), Js(191), Js(189))
+ var.put(u'leadSurrogate', var.get(u"null"))
+ if (var.get(u'codePoint')>Js(6))|Js(192)), ((var.get(u'codePoint')&Js(63))|Js(128)))
+ else:
+ if (var.get(u'codePoint')>Js(12))|Js(224)), (((var.get(u'codePoint')>>Js(6))&Js(63))|Js(128)), ((var.get(u'codePoint')&Js(63))|Js(128)))
+ else:
+ if (var.get(u'codePoint')>Js(18))|Js(240)), (((var.get(u'codePoint')>>Js(12))&Js(63))|Js(128)), (((var.get(u'codePoint')>>Js(6))&Js(63))|Js(128)), ((var.get(u'codePoint')&Js(63))|Js(128)))
+ else:
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'Invalid code point')))
+ raise PyJsTempException
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ return var.get(u'bytes')
+ PyJsHoisted_utf8ToBytes_.func_name = u'utf8ToBytes'
+ var.put(u'utf8ToBytes', PyJsHoisted_utf8ToBytes_)
+ @Js
+ def PyJsHoisted_writeDouble_(buf, value, offset, littleEndian, noAssert, this, arguments, var=var):
+ var = Scope({u'noAssert':noAssert, u'arguments':arguments, u'offset':offset, u'this':this, u'littleEndian':littleEndian, u'buf':buf, u'value':value}, var)
+ var.registers([u'littleEndian', u'noAssert', u'buf', u'value', u'offset'])
+ if var.get(u'noAssert').neg():
+ var.get(u'checkIEEE754')(var.get(u'buf'), var.get(u'value'), var.get(u'offset'), Js(8.0), Js(1.7976931348623157e+308), (-Js(1.7976931348623157e+308)))
+ var.get(u'ieee754').callprop(u'write', var.get(u'buf'), var.get(u'value'), var.get(u'offset'), var.get(u'littleEndian'), Js(52.0), Js(8.0))
+ return (var.get(u'offset')+Js(8.0))
+ PyJsHoisted_writeDouble_.func_name = u'writeDouble'
+ var.put(u'writeDouble', PyJsHoisted_writeDouble_)
+ @Js
+ def PyJsHoisted_blitBuffer_(src, dst, offset, length, this, arguments, var=var):
+ var = Scope({u'src':src, u'length':length, u'arguments':arguments, u'offset':offset, u'this':this, u'dst':dst}, var)
+ var.registers([u'i', u'src', u'dst', u'length', u'offset'])
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=var.get(u'dst').get(u'length')) or (var.get(u'i')>=var.get(u'src').get(u'length'))):
+ break
+ var.get(u'dst').put((var.get(u'i')+var.get(u'offset')), var.get(u'src').get(var.get(u'i')))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))
+ return var.get(u'i')
+ PyJsHoisted_blitBuffer_.func_name = u'blitBuffer'
+ var.put(u'blitBuffer', PyJsHoisted_blitBuffer_)
+ @Js
+ def PyJsHoisted_base64Slice_(buf, start, end, this, arguments, var=var):
+ var = Scope({u'this':this, u'start':start, u'end':end, u'buf':buf, u'arguments':arguments}, var)
+ var.registers([u'start', u'end', u'buf'])
+ if (PyJsStrictEq(var.get(u'start'),Js(0.0)) and PyJsStrictEq(var.get(u'end'),var.get(u'buf').get(u'length'))):
+ return var.get(u'base64').callprop(u'fromByteArray', var.get(u'buf'))
+ else:
+ return var.get(u'base64').callprop(u'fromByteArray', var.get(u'buf').callprop(u'slice', var.get(u'start'), var.get(u'end')))
+ PyJsHoisted_base64Slice_.func_name = u'base64Slice'
+ var.put(u'base64Slice', PyJsHoisted_base64Slice_)
+ @Js
+ def PyJsHoisted_stringtrim_(str, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'str':str}, var)
+ var.registers([u'str'])
+ if var.get(u'str').get(u'trim'):
+ return var.get(u'str').callprop(u'trim')
+ return var.get(u'str').callprop(u'replace', JsRegExp(u'/^\\s+|\\s+$/g'), Js(u''))
+ PyJsHoisted_stringtrim_.func_name = u'stringtrim'
+ var.put(u'stringtrim', PyJsHoisted_stringtrim_)
+ Js(u'use strict')
+ var.put(u'base64', var.get(u'require')(Js(u'base64-js')))
+ var.put(u'ieee754', var.get(u'require')(Js(u'ieee754')))
+ var.put(u'isArray', var.get(u'require')(Js(u'isarray')))
+ var.get(u'exports').put(u'Buffer', var.get(u'Buffer'))
+ var.get(u'exports').put(u'SlowBuffer', var.get(u'SlowBuffer'))
+ var.get(u'exports').put(u'INSPECT_MAX_BYTES', Js(50.0))
+ var.get(u'Buffer').put(u'poolSize', Js(8192.0))
+ PyJs_Object_4218_ = Js({})
+ var.put(u'rootParent', PyJs_Object_4218_)
+ var.get(u'Buffer').put(u'TYPED_ARRAY_SUPPORT', (var.get(u'global').get(u'TYPED_ARRAY_SUPPORT') if PyJsStrictNeq(var.get(u'global').get(u'TYPED_ARRAY_SUPPORT'),var.get(u'undefined')) else var.get(u'typedArraySupport')()))
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_anonymous_4220_(arr, this, arguments, var=var):
+ var = Scope({u'this':this, u'arr':arr, u'arguments':arguments}, var)
+ var.registers([u'arr'])
+ var.get(u'arr').put(u'__proto__', var.get(u'Buffer').get(u'prototype'))
+ return var.get(u'arr')
+ PyJs_anonymous_4220_._set_name(u'anonymous')
+ var.get(u'Buffer').put(u'_augment', PyJs_anonymous_4220_)
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ pass
+ if var.get(u'Buffer').get(u'TYPED_ARRAY_SUPPORT'):
+ var.get(u'Buffer').get(u'prototype').put(u'__proto__', var.get(u'Uint8Array').get(u'prototype'))
+ var.get(u'Buffer').put(u'__proto__', var.get(u'Uint8Array'))
+ if ((PyJsStrictNeq(var.get(u'Symbol',throw=False).typeof(),Js(u'undefined')) and var.get(u'Symbol').get(u'species')) and PyJsStrictEq(var.get(u'Buffer').get(var.get(u'Symbol').get(u'species')),var.get(u'Buffer'))):
+ PyJs_Object_4221_ = Js({u'value':var.get(u"null"),u'configurable':var.get(u'true')})
+ var.get(u'Object').callprop(u'defineProperty', var.get(u'Buffer'), var.get(u'Symbol').get(u'species'), PyJs_Object_4221_)
+ else:
+ var.get(u'Buffer').get(u'prototype').put(u'length', var.get(u'undefined'))
+ var.get(u'Buffer').get(u'prototype').put(u'parent', var.get(u'undefined'))
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_isBuffer_4222_(b, this, arguments, var=var):
+ var = Scope({u'this':this, u'b':b, u'arguments':arguments, u'isBuffer':PyJs_isBuffer_4222_}, var)
+ var.registers([u'b'])
+ return ((var.get(u'b')!=var.get(u"null")) and var.get(u'b').get(u'_isBuffer')).neg().neg()
+ PyJs_isBuffer_4222_._set_name(u'isBuffer')
+ var.get(u'Buffer').put(u'isBuffer', PyJs_isBuffer_4222_)
+ @Js
+ def PyJs_compare_4223_(a, b, this, arguments, var=var):
+ var = Scope({u'a':a, u'this':this, u'compare':PyJs_compare_4223_, u'b':b, u'arguments':arguments}, var)
+ var.registers([u'a', u'b', u'i', u'len', u'y', u'x'])
+ if (var.get(u'Buffer').callprop(u'isBuffer', var.get(u'a')).neg() or var.get(u'Buffer').callprop(u'isBuffer', var.get(u'b')).neg()):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Arguments must be Buffers')))
+ raise PyJsTempException
+ if PyJsStrictEq(var.get(u'a'),var.get(u'b')):
+ return Js(0.0)
+ var.put(u'x', var.get(u'a').get(u'length'))
+ var.put(u'y', var.get(u'b').get(u'length'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'len', var.get(u'Math').callprop(u'min', var.get(u'x'), var.get(u'y')))
+ while (var.get(u'i')Js(0.0)):
+ var.put(u'str', var.get(u"this").callprop(u'toString', Js(u'hex'), Js(0.0), var.get(u'max')).callprop(u'match', JsRegExp(u'/.{2}/g')).callprop(u'join', Js(u' ')))
+ if (var.get(u"this").get(u'length')>var.get(u'max')):
+ var.put(u'str', Js(u' ... '), u'+')
+ return ((Js(u''))
+ PyJs_inspect_4228_._set_name(u'inspect')
+ var.get(u'Buffer').get(u'prototype').put(u'inspect', PyJs_inspect_4228_)
+ @Js
+ def PyJs_compare_4229_(b, this, arguments, var=var):
+ var = Scope({u'this':this, u'compare':PyJs_compare_4229_, u'b':b, u'arguments':arguments}, var)
+ var.registers([u'b'])
+ if var.get(u'Buffer').callprop(u'isBuffer', var.get(u'b')).neg():
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Argument must be a Buffer')))
+ raise PyJsTempException
+ return var.get(u'Buffer').callprop(u'compare', var.get(u"this"), var.get(u'b'))
+ PyJs_compare_4229_._set_name(u'compare')
+ var.get(u'Buffer').get(u'prototype').put(u'compare', PyJs_compare_4229_)
+ @Js
+ def PyJs_indexOf_4230_(val, byteOffset, this, arguments, var=var):
+ var = Scope({u'this':this, u'indexOf':PyJs_indexOf_4230_, u'byteOffset':byteOffset, u'val':val, u'arguments':arguments}, var)
+ var.registers([u'val', u'arrayIndexOf', u'byteOffset'])
+ @Js
+ def PyJsHoisted_arrayIndexOf_(arr, val, byteOffset, this, arguments, var=var):
+ var = Scope({u'this':this, u'arr':arr, u'byteOffset':byteOffset, u'val':val, u'arguments':arguments}, var)
+ var.registers([u'i', u'foundIndex', u'arr', u'val', u'byteOffset'])
+ var.put(u'foundIndex', (-Js(1.0)))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while ((var.get(u'byteOffset')+var.get(u'i'))Js(2147483647)):
+ var.put(u'byteOffset', Js(2147483647))
+ else:
+ if (var.get(u'byteOffset')<(-Js(2147483648))):
+ var.put(u'byteOffset', (-Js(2147483648)))
+ var.put(u'byteOffset', Js(0.0), u'>>')
+ if PyJsStrictEq(var.get(u"this").get(u'length'),Js(0.0)):
+ return (-Js(1.0))
+ if (var.get(u'byteOffset')>=var.get(u"this").get(u'length')):
+ return (-Js(1.0))
+ if (var.get(u'byteOffset')var.get(u'remaining'))):
+ var.put(u'length', var.get(u'remaining'))
+ if (((var.get(u'string').get(u'length')>Js(0.0)) and ((var.get(u'length')var.get(u"this").get(u'length'))):
+ PyJsTempException = JsToPyException(var.get(u'RangeError').create(Js(u'attempt to write outside buffer bounds')))
+ raise PyJsTempException
+ if var.get(u'encoding').neg():
+ var.put(u'encoding', Js(u'utf8'))
+ var.put(u'loweredCase', Js(False))
+ #for JS loop
+
+ while 1:
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'encoding'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'hex')):
+ SWITCHED = True
+ return var.get(u'hexWrite')(var.get(u"this"), var.get(u'string'), var.get(u'offset'), var.get(u'length'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf8')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf-8')):
+ SWITCHED = True
+ return var.get(u'utf8Write')(var.get(u"this"), var.get(u'string'), var.get(u'offset'), var.get(u'length'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ascii')):
+ SWITCHED = True
+ return var.get(u'asciiWrite')(var.get(u"this"), var.get(u'string'), var.get(u'offset'), var.get(u'length'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'binary')):
+ SWITCHED = True
+ return var.get(u'binaryWrite')(var.get(u"this"), var.get(u'string'), var.get(u'offset'), var.get(u'length'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'base64')):
+ SWITCHED = True
+ return var.get(u'base64Write')(var.get(u"this"), var.get(u'string'), var.get(u'offset'), var.get(u'length'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ucs2')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'ucs-2')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf16le')):
+ SWITCHED = True
+ pass
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'utf-16le')):
+ SWITCHED = True
+ return var.get(u'ucs2Write')(var.get(u"this"), var.get(u'string'), var.get(u'offset'), var.get(u'length'))
+ if True:
+ SWITCHED = True
+ if var.get(u'loweredCase'):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create((Js(u'Unknown encoding: ')+var.get(u'encoding'))))
+ raise PyJsTempException
+ var.put(u'encoding', (Js(u'')+var.get(u'encoding')).callprop(u'toLowerCase'))
+ var.put(u'loweredCase', var.get(u'true'))
+ SWITCHED = True
+ break
+
+ PyJs_write_4231_._set_name(u'write')
+ var.get(u'Buffer').get(u'prototype').put(u'write', PyJs_write_4231_)
+ @Js
+ def PyJs_toJSON_4232_(this, arguments, var=var):
+ var = Scope({u'this':this, u'toJSON':PyJs_toJSON_4232_, u'arguments':arguments}, var)
+ var.registers([])
+ PyJs_Object_4233_ = Js({u'type':Js(u'Buffer'),u'data':var.get(u'Array').get(u'prototype').get(u'slice').callprop(u'call', (var.get(u"this").get(u'_arr') or var.get(u"this")), Js(0.0))})
+ return PyJs_Object_4233_
+ PyJs_toJSON_4232_._set_name(u'toJSON')
+ var.get(u'Buffer').get(u'prototype').put(u'toJSON', PyJs_toJSON_4232_)
+ pass
+ pass
+ var.put(u'MAX_ARGUMENTS_LENGTH', Js(4096))
+ pass
+ pass
+ pass
+ pass
+ pass
+ @Js
+ def PyJs_slice_4234_(start, end, this, arguments, var=var):
+ var = Scope({u'this':this, u'start':start, u'slice':PyJs_slice_4234_, u'end':end, u'arguments':arguments}, var)
+ var.registers([u'end', u'i', u'len', u'start', u'newBuf', u'sliceLen'])
+ var.put(u'len', var.get(u"this").get(u'length'))
+ var.put(u'start', (~(~var.get(u'start'))))
+ var.put(u'end', (var.get(u'len') if PyJsStrictEq(var.get(u'end'),var.get(u'undefined')) else (~(~var.get(u'end')))))
+ if (var.get(u'start')var.get(u'len')):
+ var.put(u'start', var.get(u'len'))
+ if (var.get(u'end')var.get(u'len')):
+ var.put(u'end', var.get(u'len'))
+ if (var.get(u'end')Js(0.0)) and var.put(u'mul', Js(256), u'*')):
+ var.put(u'val', (var.get(u"this").get((var.get(u'offset')+var.put(u'byteLength',Js(var.get(u'byteLength').to_number())-Js(1))))*var.get(u'mul')), u'+')
+ return var.get(u'val')
+ PyJs_readUIntBE_4236_._set_name(u'readUIntBE')
+ var.get(u'Buffer').get(u'prototype').put(u'readUIntBE', PyJs_readUIntBE_4236_)
+ @Js
+ def PyJs_readUInt8_4237_(offset, noAssert, this, arguments, var=var):
+ var = Scope({u'this':this, u'noAssert':noAssert, u'arguments':arguments, u'readUInt8':PyJs_readUInt8_4237_, u'offset':offset}, var)
+ var.registers([u'noAssert', u'offset'])
+ if var.get(u'noAssert').neg():
+ var.get(u'checkOffset')(var.get(u'offset'), Js(1.0), var.get(u"this").get(u'length'))
+ return var.get(u"this").get(var.get(u'offset'))
+ PyJs_readUInt8_4237_._set_name(u'readUInt8')
+ var.get(u'Buffer').get(u'prototype').put(u'readUInt8', PyJs_readUInt8_4237_)
+ @Js
+ def PyJs_readUInt16LE_4238_(offset, noAssert, this, arguments, var=var):
+ var = Scope({u'this':this, u'noAssert':noAssert, u'readUInt16LE':PyJs_readUInt16LE_4238_, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'noAssert', u'offset'])
+ if var.get(u'noAssert').neg():
+ var.get(u'checkOffset')(var.get(u'offset'), Js(2.0), var.get(u"this").get(u'length'))
+ return (var.get(u"this").get(var.get(u'offset'))|(var.get(u"this").get((var.get(u'offset')+Js(1.0)))<=var.get(u'mul')):
+ var.put(u'val', var.get(u'Math').callprop(u'pow', Js(2.0), (Js(8.0)*var.get(u'byteLength'))), u'-')
+ return var.get(u'val')
+ PyJs_readIntLE_4242_._set_name(u'readIntLE')
+ var.get(u'Buffer').get(u'prototype').put(u'readIntLE', PyJs_readIntLE_4242_)
+ @Js
+ def PyJs_readIntBE_4243_(offset, byteLength, noAssert, this, arguments, var=var):
+ var = Scope({u'byteLength':byteLength, u'readIntBE':PyJs_readIntBE_4243_, u'noAssert':noAssert, u'this':this, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'byteLength', u'noAssert', u'val', u'i', u'offset', u'mul'])
+ var.put(u'offset', (var.get(u'offset')|Js(0.0)))
+ var.put(u'byteLength', (var.get(u'byteLength')|Js(0.0)))
+ if var.get(u'noAssert').neg():
+ var.get(u'checkOffset')(var.get(u'offset'), var.get(u'byteLength'), var.get(u"this").get(u'length'))
+ var.put(u'i', var.get(u'byteLength'))
+ var.put(u'mul', Js(1.0))
+ var.put(u'val', var.get(u"this").get((var.get(u'offset')+var.put(u'i',Js(var.get(u'i').to_number())-Js(1)))))
+ while ((var.get(u'i')>Js(0.0)) and var.put(u'mul', Js(256), u'*')):
+ var.put(u'val', (var.get(u"this").get((var.get(u'offset')+var.put(u'i',Js(var.get(u'i').to_number())-Js(1))))*var.get(u'mul')), u'+')
+ var.put(u'mul', Js(128), u'*')
+ if (var.get(u'val')>=var.get(u'mul')):
+ var.put(u'val', var.get(u'Math').callprop(u'pow', Js(2.0), (Js(8.0)*var.get(u'byteLength'))), u'-')
+ return var.get(u'val')
+ PyJs_readIntBE_4243_._set_name(u'readIntBE')
+ var.get(u'Buffer').get(u'prototype').put(u'readIntBE', PyJs_readIntBE_4243_)
+ @Js
+ def PyJs_readInt8_4244_(offset, noAssert, this, arguments, var=var):
+ var = Scope({u'this':this, u'noAssert':noAssert, u'readInt8':PyJs_readInt8_4244_, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'noAssert', u'offset'])
+ if var.get(u'noAssert').neg():
+ var.get(u'checkOffset')(var.get(u'offset'), Js(1.0), var.get(u"this").get(u'length'))
+ if (var.get(u"this").get(var.get(u'offset'))&Js(128)).neg():
+ return var.get(u"this").get(var.get(u'offset'))
+ return (((Js(255)-var.get(u"this").get(var.get(u'offset')))+Js(1.0))*(-Js(1.0)))
+ PyJs_readInt8_4244_._set_name(u'readInt8')
+ var.get(u'Buffer').get(u'prototype').put(u'readInt8', PyJs_readInt8_4244_)
+ @Js
+ def PyJs_readInt16LE_4245_(offset, noAssert, this, arguments, var=var):
+ var = Scope({u'this':this, u'readInt16LE':PyJs_readInt16LE_4245_, u'noAssert':noAssert, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'noAssert', u'val', u'offset'])
+ if var.get(u'noAssert').neg():
+ var.get(u'checkOffset')(var.get(u'offset'), Js(2.0), var.get(u"this").get(u'length'))
+ var.put(u'val', (var.get(u"this").get(var.get(u'offset'))|(var.get(u"this").get((var.get(u'offset')+Js(1.0)))<=Js(0.0)) and var.put(u'mul', Js(256), u'*')):
+ var.get(u"this").put((var.get(u'offset')+var.get(u'i')), ((var.get(u'value')/var.get(u'mul'))&Js(255)))
+ return (var.get(u'offset')+var.get(u'byteLength'))
+ PyJs_writeUIntBE_4254_._set_name(u'writeUIntBE')
+ var.get(u'Buffer').get(u'prototype').put(u'writeUIntBE', PyJs_writeUIntBE_4254_)
+ @Js
+ def PyJs_writeUInt8_4255_(value, offset, noAssert, this, arguments, var=var):
+ var = Scope({u'noAssert':noAssert, u'this':this, u'writeUInt8':PyJs_writeUInt8_4255_, u'value':value, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'noAssert', u'value', u'offset'])
+ var.put(u'value', (+var.get(u'value')))
+ var.put(u'offset', (var.get(u'offset')|Js(0.0)))
+ if var.get(u'noAssert').neg():
+ var.get(u'checkInt')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), Js(1.0), Js(255), Js(0.0))
+ if var.get(u'Buffer').get(u'TYPED_ARRAY_SUPPORT').neg():
+ var.put(u'value', var.get(u'Math').callprop(u'floor', var.get(u'value')))
+ var.get(u"this").put(var.get(u'offset'), (var.get(u'value')&Js(255)))
+ return (var.get(u'offset')+Js(1.0))
+ PyJs_writeUInt8_4255_._set_name(u'writeUInt8')
+ var.get(u'Buffer').get(u'prototype').put(u'writeUInt8', PyJs_writeUInt8_4255_)
+ pass
+ @Js
+ def PyJs_writeUInt16LE_4256_(value, offset, noAssert, this, arguments, var=var):
+ var = Scope({u'writeUInt16LE':PyJs_writeUInt16LE_4256_, u'noAssert':noAssert, u'this':this, u'value':value, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'noAssert', u'value', u'offset'])
+ var.put(u'value', (+var.get(u'value')))
+ var.put(u'offset', (var.get(u'offset')|Js(0.0)))
+ if var.get(u'noAssert').neg():
+ var.get(u'checkInt')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), Js(2.0), Js(65535), Js(0.0))
+ if var.get(u'Buffer').get(u'TYPED_ARRAY_SUPPORT'):
+ var.get(u"this").put(var.get(u'offset'), (var.get(u'value')&Js(255)))
+ var.get(u"this").put((var.get(u'offset')+Js(1.0)), PyJsBshift(var.get(u'value'),Js(8.0)))
+ else:
+ var.get(u'objectWriteUInt16')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), var.get(u'true'))
+ return (var.get(u'offset')+Js(2.0))
+ PyJs_writeUInt16LE_4256_._set_name(u'writeUInt16LE')
+ var.get(u'Buffer').get(u'prototype').put(u'writeUInt16LE', PyJs_writeUInt16LE_4256_)
+ @Js
+ def PyJs_writeUInt16BE_4257_(value, offset, noAssert, this, arguments, var=var):
+ var = Scope({u'noAssert':noAssert, u'this':this, u'writeUInt16BE':PyJs_writeUInt16BE_4257_, u'value':value, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'noAssert', u'value', u'offset'])
+ var.put(u'value', (+var.get(u'value')))
+ var.put(u'offset', (var.get(u'offset')|Js(0.0)))
+ if var.get(u'noAssert').neg():
+ var.get(u'checkInt')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), Js(2.0), Js(65535), Js(0.0))
+ if var.get(u'Buffer').get(u'TYPED_ARRAY_SUPPORT'):
+ var.get(u"this").put(var.get(u'offset'), PyJsBshift(var.get(u'value'),Js(8.0)))
+ var.get(u"this").put((var.get(u'offset')+Js(1.0)), (var.get(u'value')&Js(255)))
+ else:
+ var.get(u'objectWriteUInt16')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), Js(False))
+ return (var.get(u'offset')+Js(2.0))
+ PyJs_writeUInt16BE_4257_._set_name(u'writeUInt16BE')
+ var.get(u'Buffer').get(u'prototype').put(u'writeUInt16BE', PyJs_writeUInt16BE_4257_)
+ pass
+ @Js
+ def PyJs_writeUInt32LE_4258_(value, offset, noAssert, this, arguments, var=var):
+ var = Scope({u'writeUInt32LE':PyJs_writeUInt32LE_4258_, u'noAssert':noAssert, u'this':this, u'value':value, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'noAssert', u'value', u'offset'])
+ var.put(u'value', (+var.get(u'value')))
+ var.put(u'offset', (var.get(u'offset')|Js(0.0)))
+ if var.get(u'noAssert').neg():
+ var.get(u'checkInt')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), Js(4.0), Js(4294967295), Js(0.0))
+ if var.get(u'Buffer').get(u'TYPED_ARRAY_SUPPORT'):
+ var.get(u"this").put((var.get(u'offset')+Js(3.0)), PyJsBshift(var.get(u'value'),Js(24.0)))
+ var.get(u"this").put((var.get(u'offset')+Js(2.0)), PyJsBshift(var.get(u'value'),Js(16.0)))
+ var.get(u"this").put((var.get(u'offset')+Js(1.0)), PyJsBshift(var.get(u'value'),Js(8.0)))
+ var.get(u"this").put(var.get(u'offset'), (var.get(u'value')&Js(255)))
+ else:
+ var.get(u'objectWriteUInt32')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), var.get(u'true'))
+ return (var.get(u'offset')+Js(4.0))
+ PyJs_writeUInt32LE_4258_._set_name(u'writeUInt32LE')
+ var.get(u'Buffer').get(u'prototype').put(u'writeUInt32LE', PyJs_writeUInt32LE_4258_)
+ @Js
+ def PyJs_writeUInt32BE_4259_(value, offset, noAssert, this, arguments, var=var):
+ var = Scope({u'noAssert':noAssert, u'this':this, u'value':value, u'writeUInt32BE':PyJs_writeUInt32BE_4259_, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'noAssert', u'value', u'offset'])
+ var.put(u'value', (+var.get(u'value')))
+ var.put(u'offset', (var.get(u'offset')|Js(0.0)))
+ if var.get(u'noAssert').neg():
+ var.get(u'checkInt')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), Js(4.0), Js(4294967295), Js(0.0))
+ if var.get(u'Buffer').get(u'TYPED_ARRAY_SUPPORT'):
+ var.get(u"this").put(var.get(u'offset'), PyJsBshift(var.get(u'value'),Js(24.0)))
+ var.get(u"this").put((var.get(u'offset')+Js(1.0)), PyJsBshift(var.get(u'value'),Js(16.0)))
+ var.get(u"this").put((var.get(u'offset')+Js(2.0)), PyJsBshift(var.get(u'value'),Js(8.0)))
+ var.get(u"this").put((var.get(u'offset')+Js(3.0)), (var.get(u'value')&Js(255)))
+ else:
+ var.get(u'objectWriteUInt32')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), Js(False))
+ return (var.get(u'offset')+Js(4.0))
+ PyJs_writeUInt32BE_4259_._set_name(u'writeUInt32BE')
+ var.get(u'Buffer').get(u'prototype').put(u'writeUInt32BE', PyJs_writeUInt32BE_4259_)
+ @Js
+ def PyJs_writeIntLE_4260_(value, offset, byteLength, noAssert, this, arguments, var=var):
+ var = Scope({u'byteLength':byteLength, u'noAssert':noAssert, u'arguments':arguments, u'offset':offset, u'this':this, u'writeIntLE':PyJs_writeIntLE_4260_, u'value':value}, var)
+ var.registers([u'byteLength', u'noAssert', u'sub', u'i', u'value', u'limit', u'offset', u'mul'])
+ var.put(u'value', (+var.get(u'value')))
+ var.put(u'offset', (var.get(u'offset')|Js(0.0)))
+ if var.get(u'noAssert').neg():
+ var.put(u'limit', var.get(u'Math').callprop(u'pow', Js(2.0), ((Js(8.0)*var.get(u'byteLength'))-Js(1.0))))
+ var.get(u'checkInt')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), var.get(u'byteLength'), (var.get(u'limit')-Js(1.0)), (-var.get(u'limit')))
+ var.put(u'i', Js(0.0))
+ var.put(u'mul', Js(1.0))
+ var.put(u'sub', (Js(1.0) if (var.get(u'value')>Js(0.0))-var.get(u'sub'))&Js(255)))
+ return (var.get(u'offset')+var.get(u'byteLength'))
+ PyJs_writeIntLE_4260_._set_name(u'writeIntLE')
+ var.get(u'Buffer').get(u'prototype').put(u'writeIntLE', PyJs_writeIntLE_4260_)
+ @Js
+ def PyJs_writeIntBE_4261_(value, offset, byteLength, noAssert, this, arguments, var=var):
+ var = Scope({u'byteLength':byteLength, u'noAssert':noAssert, u'arguments':arguments, u'offset':offset, u'this':this, u'writeIntBE':PyJs_writeIntBE_4261_, u'value':value}, var)
+ var.registers([u'byteLength', u'noAssert', u'sub', u'i', u'value', u'limit', u'offset', u'mul'])
+ var.put(u'value', (+var.get(u'value')))
+ var.put(u'offset', (var.get(u'offset')|Js(0.0)))
+ if var.get(u'noAssert').neg():
+ var.put(u'limit', var.get(u'Math').callprop(u'pow', Js(2.0), ((Js(8.0)*var.get(u'byteLength'))-Js(1.0))))
+ var.get(u'checkInt')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), var.get(u'byteLength'), (var.get(u'limit')-Js(1.0)), (-var.get(u'limit')))
+ var.put(u'i', (var.get(u'byteLength')-Js(1.0)))
+ var.put(u'mul', Js(1.0))
+ var.put(u'sub', (Js(1.0) if (var.get(u'value')=Js(0.0)) and var.put(u'mul', Js(256), u'*')):
+ var.get(u"this").put((var.get(u'offset')+var.get(u'i')), ((((var.get(u'value')/var.get(u'mul'))>>Js(0.0))-var.get(u'sub'))&Js(255)))
+ return (var.get(u'offset')+var.get(u'byteLength'))
+ PyJs_writeIntBE_4261_._set_name(u'writeIntBE')
+ var.get(u'Buffer').get(u'prototype').put(u'writeIntBE', PyJs_writeIntBE_4261_)
+ @Js
+ def PyJs_writeInt8_4262_(value, offset, noAssert, this, arguments, var=var):
+ var = Scope({u'writeInt8':PyJs_writeInt8_4262_, u'noAssert':noAssert, u'this':this, u'value':value, u'arguments':arguments, u'offset':offset}, var)
+ var.registers([u'noAssert', u'value', u'offset'])
+ var.put(u'value', (+var.get(u'value')))
+ var.put(u'offset', (var.get(u'offset')|Js(0.0)))
+ if var.get(u'noAssert').neg():
+ var.get(u'checkInt')(var.get(u"this"), var.get(u'value'), var.get(u'offset'), Js(1.0), Js(127), (-Js(128)))
+ if var.get(u'Buffer').get(u'TYPED_ARRAY_SUPPORT').neg():
+ var.put(u'value', var.get(u'Math').callprop(u'floor', var.get(u'value')))
+ if (var.get(u'value')=var.get(u'target').get(u'length')):
+ var.put(u'targetStart', var.get(u'target').get(u'length'))
+ if var.get(u'targetStart').neg():
+ var.put(u'targetStart', Js(0.0))
+ if ((var.get(u'end')>Js(0.0)) and (var.get(u'end')=var.get(u"this").get(u'length'))):
+ PyJsTempException = JsToPyException(var.get(u'RangeError').create(Js(u'sourceStart out of bounds')))
+ raise PyJsTempException
+ if (var.get(u'end')var.get(u"this").get(u'length')):
+ var.put(u'end', var.get(u"this").get(u'length'))
+ if ((var.get(u'target').get(u'length')-var.get(u'targetStart'))<(var.get(u'end')-var.get(u'start'))):
+ var.put(u'end', ((var.get(u'target').get(u'length')-var.get(u'targetStart'))+var.get(u'start')))
+ var.put(u'len', (var.get(u'end')-var.get(u'start')))
+ pass
+ if ((PyJsStrictEq(var.get(u"this"),var.get(u'target')) and (var.get(u'start')=Js(0.0)):
+ try:
+ var.get(u'target').put((var.get(u'i')+var.get(u'targetStart')), var.get(u"this").get((var.get(u'i')+var.get(u'start'))))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ else:
+ if ((var.get(u'len')=var.get(u"this").get(u'length'))):
+ PyJsTempException = JsToPyException(var.get(u'RangeError').create(Js(u'start out of bounds')))
+ raise PyJsTempException
+ if ((var.get(u'end')var.get(u"this").get(u'length'))):
+ PyJsTempException = JsToPyException(var.get(u'RangeError').create(Js(u'end out of bounds')))
+ raise PyJsTempException
+ pass
+ if PyJsStrictEq(var.get(u'value',throw=False).typeof(),Js(u'number')):
+ #for JS loop
+ var.put(u'i', var.get(u'start'))
+ while (var.get(u'i')>Js(18.0))&Js(63)))+var.get(u'lookup').get(((var.get(u'num')>>Js(12.0))&Js(63))))+var.get(u'lookup').get(((var.get(u'num')>>Js(6.0))&Js(63))))+var.get(u'lookup').get((var.get(u'num')&Js(63))))
+ PyJsHoisted_tripletToBase64_.func_name = u'tripletToBase64'
+ var.put(u'tripletToBase64', PyJsHoisted_tripletToBase64_)
+ @Js
+ def PyJsHoisted_init_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'code', u'len'])
+ var.put(u'code', Js(u'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'len', var.get(u'code').get(u'length'))
+ while (var.get(u'i')Js(0.0)):
+ PyJsTempException = JsToPyException(var.get(u'Error').create(Js(u'Invalid string. Length must be a multiple of 4')))
+ raise PyJsTempException
+ var.put(u'placeHolders', (Js(2.0) if PyJsStrictEq(var.get(u'b64').get((var.get(u'len')-Js(2.0))),Js(u'=')) else (Js(1.0) if PyJsStrictEq(var.get(u'b64').get((var.get(u'len')-Js(1.0))),Js(u'=')) else Js(0.0))))
+ var.put(u'arr', var.get(u'Arr').create((((var.get(u'len')*Js(3.0))/Js(4.0))-var.get(u'placeHolders'))))
+ var.put(u'l', ((var.get(u'len')-Js(4.0)) if (var.get(u'placeHolders')>Js(0.0)) else var.get(u'len')))
+ var.put(u'L', Js(0.0))
+ #for JS loop
+ PyJsComma(var.put(u'i', Js(0.0)),var.put(u'j', Js(0.0)))
+ while (var.get(u'i')>Js(16.0))&Js(255)))
+ var.get(u'arr').put((var.put(u'L',Js(var.get(u'L').to_number())+Js(1))-Js(1)), ((var.get(u'tmp')>>Js(8.0))&Js(255)))
+ var.get(u'arr').put((var.put(u'L',Js(var.get(u'L').to_number())+Js(1))-Js(1)), (var.get(u'tmp')&Js(255)))
+ finally:
+ PyJsComma(var.put(u'i', Js(4.0), u'+'),var.put(u'j', Js(3.0), u'+'))
+ if PyJsStrictEq(var.get(u'placeHolders'),Js(2.0)):
+ var.put(u'tmp', ((var.get(u'revLookup').get(var.get(u'b64').callprop(u'charCodeAt', var.get(u'i')))<>Js(4.0))))
+ var.get(u'arr').put((var.put(u'L',Js(var.get(u'L').to_number())+Js(1))-Js(1)), (var.get(u'tmp')&Js(255)))
+ else:
+ if PyJsStrictEq(var.get(u'placeHolders'),Js(1.0)):
+ var.put(u'tmp', (((var.get(u'revLookup').get(var.get(u'b64').callprop(u'charCodeAt', var.get(u'i')))<>Js(2.0))))
+ var.get(u'arr').put((var.put(u'L',Js(var.get(u'L').to_number())+Js(1))-Js(1)), ((var.get(u'tmp')>>Js(8.0))&Js(255)))
+ var.get(u'arr').put((var.put(u'L',Js(var.get(u'L').to_number())+Js(1))-Js(1)), (var.get(u'tmp')&Js(255)))
+ return var.get(u'arr')
+ PyJsHoisted_toByteArray_.func_name = u'toByteArray'
+ var.put(u'toByteArray', PyJsHoisted_toByteArray_)
+ @Js
+ def PyJsHoisted_fromByteArray_(uint8, this, arguments, var=var):
+ var = Scope({u'this':this, u'uint8':uint8, u'arguments':arguments}, var)
+ var.registers([u'tmp', u'i', u'uint8', u'len', u'len2', u'parts', u'extraBytes', u'output', u'maxChunkLength'])
+ pass
+ var.put(u'len', var.get(u'uint8').get(u'length'))
+ var.put(u'extraBytes', (var.get(u'len')%Js(3.0)))
+ var.put(u'output', Js(u''))
+ var.put(u'parts', Js([]))
+ var.put(u'maxChunkLength', Js(16383.0))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'len2', (var.get(u'len')-var.get(u'extraBytes')))
+ while (var.get(u'i')var.get(u'len2')) else (var.get(u'i')+var.get(u'maxChunkLength')))))
+ finally:
+ var.put(u'i', var.get(u'maxChunkLength'), u'+')
+ if PyJsStrictEq(var.get(u'extraBytes'),Js(1.0)):
+ var.put(u'tmp', var.get(u'uint8').get((var.get(u'len')-Js(1.0))))
+ var.put(u'output', var.get(u'lookup').get((var.get(u'tmp')>>Js(2.0))), u'+')
+ var.put(u'output', var.get(u'lookup').get(((var.get(u'tmp')<>Js(10.0))), u'+')
+ var.put(u'output', var.get(u'lookup').get(((var.get(u'tmp')>>Js(4.0))&Js(63))), u'+')
+ var.put(u'output', var.get(u'lookup').get(((var.get(u'tmp')<>Js(1.0)))
+ var.put(u'nBits', (-Js(7.0)))
+ var.put(u'i', ((var.get(u'nBytes')-Js(1.0)) if var.get(u'isLE') else Js(0.0)))
+ var.put(u'd', ((-Js(1.0)) if var.get(u'isLE') else Js(1.0)))
+ var.put(u's', var.get(u'buffer').get((var.get(u'offset')+var.get(u'i'))))
+ var.put(u'i', var.get(u'd'), u'+')
+ var.put(u'e', (var.get(u's')&((Js(1.0)<<(-var.get(u'nBits')))-Js(1.0))))
+ var.put(u's', (-var.get(u'nBits')), u'>>')
+ var.put(u'nBits', var.get(u'eLen'), u'+')
+ #for JS loop
+
+ while (var.get(u'nBits')>Js(0.0)):
+ try:
+ pass
+ finally:
+ PyJsComma(PyJsComma(var.put(u'e', ((var.get(u'e')*Js(256.0))+var.get(u'buffer').get((var.get(u'offset')+var.get(u'i'))))),var.put(u'i', var.get(u'd'), u'+')),var.put(u'nBits', Js(8.0), u'-'))
+ var.put(u'm', (var.get(u'e')&((Js(1.0)<<(-var.get(u'nBits')))-Js(1.0))))
+ var.put(u'e', (-var.get(u'nBits')), u'>>')
+ var.put(u'nBits', var.get(u'mLen'), u'+')
+ #for JS loop
+
+ while (var.get(u'nBits')>Js(0.0)):
+ try:
+ pass
+ finally:
+ PyJsComma(PyJsComma(var.put(u'm', ((var.get(u'm')*Js(256.0))+var.get(u'buffer').get((var.get(u'offset')+var.get(u'i'))))),var.put(u'i', var.get(u'd'), u'+')),var.put(u'nBits', Js(8.0), u'-'))
+ if PyJsStrictEq(var.get(u'e'),Js(0.0)):
+ var.put(u'e', (Js(1.0)-var.get(u'eBias')))
+ else:
+ if PyJsStrictEq(var.get(u'e'),var.get(u'eMax')):
+ return (var.get(u'NaN') if var.get(u'm') else (((-Js(1.0)) if var.get(u's') else Js(1.0))*var.get(u'Infinity')))
+ else:
+ var.put(u'm', (var.get(u'm')+var.get(u'Math').callprop(u'pow', Js(2.0), var.get(u'mLen'))))
+ var.put(u'e', (var.get(u'e')-var.get(u'eBias')))
+ return ((((-Js(1.0)) if var.get(u's') else Js(1.0))*var.get(u'm'))*var.get(u'Math').callprop(u'pow', Js(2.0), (var.get(u'e')-var.get(u'mLen'))))
+ PyJs_anonymous_4278_._set_name(u'anonymous')
+ var.get(u'exports').put(u'read', PyJs_anonymous_4278_)
+ @Js
+ def PyJs_anonymous_4279_(buffer, value, offset, isLE, mLen, nBytes, this, arguments, var=var):
+ var = Scope({u'mLen':mLen, u'buffer':buffer, u'value':value, u'this':this, u'nBytes':nBytes, u'offset':offset, u'isLE':isLE, u'arguments':arguments}, var)
+ var.registers([u'rt', u'c', u'e', u'd', u'mLen', u'i', u'eMax', u'offset', u'm', u'eLen', u'buffer', u's', u'value', u'eBias', u'isLE', u'nBytes'])
+ pass
+ var.put(u'eLen', (((var.get(u'nBytes')*Js(8.0))-var.get(u'mLen'))-Js(1.0)))
+ var.put(u'eMax', ((Js(1.0)<>Js(1.0)))
+ var.put(u'rt', ((var.get(u'Math').callprop(u'pow', Js(2.0), (-Js(24.0)))-var.get(u'Math').callprop(u'pow', Js(2.0), (-Js(77.0)))) if PyJsStrictEq(var.get(u'mLen'),Js(23.0)) else Js(0.0)))
+ var.put(u'i', (Js(0.0) if var.get(u'isLE') else (var.get(u'nBytes')-Js(1.0))))
+ var.put(u'd', (Js(1.0) if var.get(u'isLE') else (-Js(1.0))))
+ var.put(u's', (Js(1.0) if ((var.get(u'value')=Js(1.0)):
+ var.put(u'value', (var.get(u'rt')/var.get(u'c')), u'+')
+ else:
+ var.put(u'value', (var.get(u'rt')*var.get(u'Math').callprop(u'pow', Js(2.0), (Js(1.0)-var.get(u'eBias')))), u'+')
+ if ((var.get(u'value')*var.get(u'c'))>=Js(2.0)):
+ (var.put(u'e',Js(var.get(u'e').to_number())+Js(1))-Js(1))
+ var.put(u'c', Js(2.0), u'/')
+ if ((var.get(u'e')+var.get(u'eBias'))>=var.get(u'eMax')):
+ var.put(u'm', Js(0.0))
+ var.put(u'e', var.get(u'eMax'))
+ else:
+ if ((var.get(u'e')+var.get(u'eBias'))>=Js(1.0)):
+ var.put(u'm', (((var.get(u'value')*var.get(u'c'))-Js(1.0))*var.get(u'Math').callprop(u'pow', Js(2.0), var.get(u'mLen'))))
+ var.put(u'e', (var.get(u'e')+var.get(u'eBias')))
+ else:
+ var.put(u'm', ((var.get(u'value')*var.get(u'Math').callprop(u'pow', Js(2.0), (var.get(u'eBias')-Js(1.0))))*var.get(u'Math').callprop(u'pow', Js(2.0), var.get(u'mLen'))))
+ var.put(u'e', Js(0.0))
+ #for JS loop
+
+ while (var.get(u'mLen')>=Js(8.0)):
+ try:
+ pass
+ finally:
+ PyJsComma(PyJsComma(PyJsComma(var.get(u'buffer').put((var.get(u'offset')+var.get(u'i')), (var.get(u'm')&Js(255))),var.put(u'i', var.get(u'd'), u'+')),var.put(u'm', Js(256.0), u'/')),var.put(u'mLen', Js(8.0), u'-'))
+ var.put(u'e', ((var.get(u'e')<Js(0.0)):
+ try:
+ pass
+ finally:
+ PyJsComma(PyJsComma(PyJsComma(var.get(u'buffer').put((var.get(u'offset')+var.get(u'i')), (var.get(u'e')&Js(255))),var.put(u'i', var.get(u'd'), u'+')),var.put(u'e', Js(256.0), u'/')),var.put(u'eLen', Js(8.0), u'-'))
+ var.get(u'buffer').put(((var.get(u'offset')+var.get(u'i'))-var.get(u'd')), (var.get(u's')*Js(128.0)), u'|')
+ PyJs_anonymous_4279_._set_name(u'anonymous')
+ var.get(u'exports').put(u'write', PyJs_anonymous_4279_)
+PyJs_anonymous_4277_._set_name(u'anonymous')
+PyJs_Object_4280_ = Js({})
+@Js
+def PyJs_anonymous_4281_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'toString', u'exports', u'module'])
+ PyJs_Object_4282_ = Js({})
+ var.put(u'toString', PyJs_Object_4282_.get(u'toString'))
+ @Js
+ def PyJs_anonymous_4283_(arr, this, arguments, var=var):
+ var = Scope({u'this':this, u'arr':arr, u'arguments':arguments}, var)
+ var.registers([u'arr'])
+ return (var.get(u'toString').callprop(u'call', var.get(u'arr'))==Js(u'[object Array]'))
+ PyJs_anonymous_4283_._set_name(u'anonymous')
+ var.get(u'module').put(u'exports', (var.get(u'Array').get(u'isArray') or PyJs_anonymous_4283_))
+PyJs_anonymous_4281_._set_name(u'anonymous')
+PyJs_Object_4284_ = Js({})
+@Js
+def PyJs_anonymous_4285_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ if PyJsStrictEq(var.get(u'Object').get(u'create').typeof(),Js(u'function')):
+ @Js
+ def PyJs_inherits_4286_(ctor, superCtor, this, arguments, var=var):
+ var = Scope({u'this':this, u'inherits':PyJs_inherits_4286_, u'superCtor':superCtor, u'arguments':arguments, u'ctor':ctor}, var)
+ var.registers([u'superCtor', u'ctor'])
+ var.get(u'ctor').put(u'super_', var.get(u'superCtor'))
+ PyJs_Object_4288_ = Js({u'value':var.get(u'ctor'),u'enumerable':Js(False),u'writable':var.get(u'true'),u'configurable':var.get(u'true')})
+ PyJs_Object_4287_ = Js({u'constructor':PyJs_Object_4288_})
+ var.get(u'ctor').put(u'prototype', var.get(u'Object').callprop(u'create', var.get(u'superCtor').get(u'prototype'), PyJs_Object_4287_))
+ PyJs_inherits_4286_._set_name(u'inherits')
+ var.get(u'module').put(u'exports', PyJs_inherits_4286_)
+ else:
+ @Js
+ def PyJs_inherits_4289_(ctor, superCtor, this, arguments, var=var):
+ var = Scope({u'this':this, u'inherits':PyJs_inherits_4289_, u'superCtor':superCtor, u'arguments':arguments, u'ctor':ctor}, var)
+ var.registers([u'TempCtor', u'superCtor', u'ctor'])
+ var.get(u'ctor').put(u'super_', var.get(u'superCtor'))
+ @Js
+ def PyJs_anonymous_4290_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([])
+ pass
+ PyJs_anonymous_4290_._set_name(u'anonymous')
+ var.put(u'TempCtor', PyJs_anonymous_4290_)
+ var.get(u'TempCtor').put(u'prototype', var.get(u'superCtor').get(u'prototype'))
+ var.get(u'ctor').put(u'prototype', var.get(u'TempCtor').create())
+ var.get(u'ctor').get(u'prototype').put(u'constructor', var.get(u'ctor'))
+ PyJs_inherits_4289_._set_name(u'inherits')
+ var.get(u'module').put(u'exports', PyJs_inherits_4289_)
+PyJs_anonymous_4285_._set_name(u'anonymous')
+PyJs_Object_4291_ = Js({})
+@Js
+def PyJs_anonymous_4292_(require, module, exports, this, arguments, var=var):
+ var = Scope({u'this':this, u'require':require, u'exports':exports, u'module':module, u'arguments':arguments}, var)
+ var.registers([u'require', u'exports', u'module'])
+ @Js
+ def PyJs_anonymous_4293_(process, this, arguments, var=var):
+ var = Scope({u'process':process, u'this':this, u'arguments':arguments}, var)
+ var.registers([u'splitPath', u'substr', u'process', u'normalizeArray', u'filter', u'splitPathRe'])
+ @Js
+ def PyJsHoisted_filter_(xs, f, this, arguments, var=var):
+ var = Scope({u'this':this, u'xs':xs, u'arguments':arguments, u'f':f}, var)
+ var.registers([u'i', u'res', u'f', u'xs'])
+ if var.get(u'xs').get(u'filter'):
+ return var.get(u'xs').callprop(u'filter', var.get(u'f'))
+ var.put(u'res', Js([]))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')=Js(0.0)):
+ try:
+ var.put(u'last', var.get(u'parts').get(var.get(u'i')))
+ if PyJsStrictEq(var.get(u'last'),Js(u'.')):
+ var.get(u'parts').callprop(u'splice', var.get(u'i'), Js(1.0))
+ else:
+ if PyJsStrictEq(var.get(u'last'),Js(u'..')):
+ var.get(u'parts').callprop(u'splice', var.get(u'i'), Js(1.0))
+ (var.put(u'up',Js(var.get(u'up').to_number())+Js(1))-Js(1))
+ else:
+ if var.get(u'up'):
+ var.get(u'parts').callprop(u'splice', var.get(u'i'), Js(1.0))
+ (var.put(u'up',Js(var.get(u'up').to_number())-Js(1))+Js(1))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ if var.get(u'allowAboveRoot'):
+ #for JS loop
+
+ while (var.put(u'up',Js(var.get(u'up').to_number())-Js(1))+Js(1)):
+ try:
+ var.get(u'parts').callprop(u'unshift', Js(u'..'))
+ finally:
+ var.get(u'up')
+ return var.get(u'parts')
+ PyJsHoisted_normalizeArray_.func_name = u'normalizeArray'
+ var.put(u'normalizeArray', PyJsHoisted_normalizeArray_)
+ pass
+ var.put(u'splitPathRe', JsRegExp(u'/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/'))
+ @Js
+ def PyJs_anonymous_4294_(filename, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'filename':filename}, var)
+ var.registers([u'filename'])
+ return var.get(u'splitPathRe').callprop(u'exec', var.get(u'filename')).callprop(u'slice', Js(1.0))
+ PyJs_anonymous_4294_._set_name(u'anonymous')
+ var.put(u'splitPath', PyJs_anonymous_4294_)
+ @Js
+ def PyJs_anonymous_4295_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'i', u'resolvedPath', u'path', u'resolvedAbsolute'])
+ var.put(u'resolvedPath', Js(u''))
+ var.put(u'resolvedAbsolute', Js(False))
+ #for JS loop
+ var.put(u'i', (var.get(u'arguments').get(u'length')-Js(1.0)))
+ while ((var.get(u'i')>=(-Js(1.0))) and var.get(u'resolvedAbsolute').neg()):
+ try:
+ var.put(u'path', (var.get(u'arguments').get(var.get(u'i')) if (var.get(u'i')>=Js(0.0)) else var.get(u'process').callprop(u'cwd')))
+ if PyJsStrictNeq(var.get(u'path',throw=False).typeof(),Js(u'string')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Arguments to path.resolve must be strings')))
+ raise PyJsTempException
+ else:
+ if var.get(u'path').neg():
+ continue
+ var.put(u'resolvedPath', ((var.get(u'path')+Js(u'/'))+var.get(u'resolvedPath')))
+ var.put(u'resolvedAbsolute', PyJsStrictEq(var.get(u'path').callprop(u'charAt', Js(0.0)),Js(u'/')))
+ finally:
+ (var.put(u'i',Js(var.get(u'i').to_number())-Js(1))+Js(1))
+ @Js
+ def PyJs_anonymous_4296_(p, this, arguments, var=var):
+ var = Scope({u'this':this, u'p':p, u'arguments':arguments}, var)
+ var.registers([u'p'])
+ return var.get(u'p').neg().neg()
+ PyJs_anonymous_4296_._set_name(u'anonymous')
+ var.put(u'resolvedPath', var.get(u'normalizeArray')(var.get(u'filter')(var.get(u'resolvedPath').callprop(u'split', Js(u'/')), PyJs_anonymous_4296_), var.get(u'resolvedAbsolute').neg()).callprop(u'join', Js(u'/')))
+ return (((Js(u'/') if var.get(u'resolvedAbsolute') else Js(u''))+var.get(u'resolvedPath')) or Js(u'.'))
+ PyJs_anonymous_4295_._set_name(u'anonymous')
+ var.get(u'exports').put(u'resolve', PyJs_anonymous_4295_)
+ @Js
+ def PyJs_anonymous_4297_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path', u'trailingSlash', u'isAbsolute'])
+ var.put(u'isAbsolute', var.get(u'exports').callprop(u'isAbsolute', var.get(u'path')))
+ var.put(u'trailingSlash', PyJsStrictEq(var.get(u'substr')(var.get(u'path'), (-Js(1.0))),Js(u'/')))
+ @Js
+ def PyJs_anonymous_4298_(p, this, arguments, var=var):
+ var = Scope({u'this':this, u'p':p, u'arguments':arguments}, var)
+ var.registers([u'p'])
+ return var.get(u'p').neg().neg()
+ PyJs_anonymous_4298_._set_name(u'anonymous')
+ var.put(u'path', var.get(u'normalizeArray')(var.get(u'filter')(var.get(u'path').callprop(u'split', Js(u'/')), PyJs_anonymous_4298_), var.get(u'isAbsolute').neg()).callprop(u'join', Js(u'/')))
+ if (var.get(u'path').neg() and var.get(u'isAbsolute').neg()):
+ var.put(u'path', Js(u'.'))
+ if (var.get(u'path') and var.get(u'trailingSlash')):
+ var.put(u'path', Js(u'/'), u'+')
+ return ((Js(u'/') if var.get(u'isAbsolute') else Js(u''))+var.get(u'path'))
+ PyJs_anonymous_4297_._set_name(u'anonymous')
+ var.get(u'exports').put(u'normalize', PyJs_anonymous_4297_)
+ @Js
+ def PyJs_anonymous_4299_(path, this, arguments, var=var):
+ var = Scope({u'this':this, u'path':path, u'arguments':arguments}, var)
+ var.registers([u'path'])
+ return PyJsStrictEq(var.get(u'path').callprop(u'charAt', Js(0.0)),Js(u'/'))
+ PyJs_anonymous_4299_._set_name(u'anonymous')
+ var.get(u'exports').put(u'isAbsolute', PyJs_anonymous_4299_)
+ @Js
+ def PyJs_anonymous_4300_(this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments}, var)
+ var.registers([u'paths'])
+ var.put(u'paths', var.get(u'Array').get(u'prototype').get(u'slice').callprop(u'call', var.get(u'arguments'), Js(0.0)))
+ @Js
+ def PyJs_anonymous_4301_(p, index, this, arguments, var=var):
+ var = Scope({u'this':this, u'p':p, u'arguments':arguments, u'index':index}, var)
+ var.registers([u'p', u'index'])
+ if PyJsStrictNeq(var.get(u'p',throw=False).typeof(),Js(u'string')):
+ PyJsTempException = JsToPyException(var.get(u'TypeError').create(Js(u'Arguments to path.join must be strings')))
+ raise PyJsTempException
+ return var.get(u'p')
+ PyJs_anonymous_4301_._set_name(u'anonymous')
+ return var.get(u'exports').callprop(u'normalize', var.get(u'filter')(var.get(u'paths'), PyJs_anonymous_4301_).callprop(u'join', Js(u'/')))
+ PyJs_anonymous_4300_._set_name(u'anonymous')
+ var.get(u'exports').put(u'join', PyJs_anonymous_4300_)
+ @Js
+ def PyJs_anonymous_4302_(PyJsArg_66726f6d_, to, this, arguments, var=var):
+ var = Scope({u'this':this, u'to':to, u'from':PyJsArg_66726f6d_, u'arguments':arguments}, var)
+ var.registers([u'trim', u'outputParts', u'i', u'to', u'length', u'toParts', u'from', u'fromParts', u'samePartsLength'])
+ @Js
+ def PyJsHoisted_trim_(arr, this, arguments, var=var):
+ var = Scope({u'this':this, u'arr':arr, u'arguments':arguments}, var)
+ var.registers([u'start', u'arr', u'end'])
+ var.put(u'start', Js(0.0))
+ #for JS loop
+
+ while (var.get(u'start')=Js(0.0)):
+ try:
+ if PyJsStrictNeq(var.get(u'arr').get(var.get(u'end')),Js(u'')):
+ break
+ finally:
+ (var.put(u'end',Js(var.get(u'end').to_number())-Js(1))+Js(1))
+ if (var.get(u'start')>var.get(u'end')):
+ return Js([])
+ return var.get(u'arr').callprop(u'slice', var.get(u'start'), ((var.get(u'end')-var.get(u'start'))+Js(1.0)))
+ PyJsHoisted_trim_.func_name = u'trim'
+ var.put(u'trim', PyJsHoisted_trim_)
+ var.put(u'from', var.get(u'exports').callprop(u'resolve', var.get(u'from')).callprop(u'substr', Js(1.0)))
+ var.put(u'to', var.get(u'exports').callprop(u'resolve', var.get(u'to')).callprop(u'substr', Js(1.0)))
+ pass
+ var.put(u'fromParts', var.get(u'trim')(var.get(u'from').callprop(u'split', Js(u'/'))))
+ var.put(u'toParts', var.get(u'trim')(var.get(u'to').callprop(u'split', Js(u'/'))))
+ var.put(u'length', var.get(u'Math').callprop(u'min', var.get(u'fromParts').get(u'length'), var.get(u'toParts').get(u'length')))
+ var.put(u'samePartsLength', var.get(u'length'))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ while (var.get(u'i')Js(1.0)):
+ #for JS loop
+ var.put(u'i', Js(1.0))
+ while (var.get(u'i')(-Js(1.0))):
+ if var.get(u'array'):
+ @Js
+ def PyJs_anonymous_4345_(line, this, arguments, var=var):
+ var = Scope({u'this':this, u'line':line, u'arguments':arguments}, var)
+ var.registers([u'line'])
+ return (Js(u' ')+var.get(u'line'))
+ PyJs_anonymous_4345_._set_name(u'anonymous')
+ var.put(u'str', var.get(u'str').callprop(u'split', Js(u'\n')).callprop(u'map', PyJs_anonymous_4345_).callprop(u'join', Js(u'\n')).callprop(u'substr', Js(2.0)))
+ else:
+ @Js
+ def PyJs_anonymous_4346_(line, this, arguments, var=var):
+ var = Scope({u'this':this, u'line':line, u'arguments':arguments}, var)
+ var.registers([u'line'])
+ return (Js(u' ')+var.get(u'line'))
+ PyJs_anonymous_4346_._set_name(u'anonymous')
+ var.put(u'str', (Js(u'\n')+var.get(u'str').callprop(u'split', Js(u'\n')).callprop(u'map', PyJs_anonymous_4346_).callprop(u'join', Js(u'\n'))))
+ else:
+ var.put(u'str', var.get(u'ctx').callprop(u'stylize', Js(u'[Circular]'), Js(u'special')))
+ if var.get(u'isUndefined')(var.get(u'name')):
+ if (var.get(u'array') and var.get(u'key').callprop(u'match', JsRegExp(u'/^\\d+$/'))):
+ return var.get(u'str')
+ var.put(u'name', var.get(u'JSON').callprop(u'stringify', (Js(u'')+var.get(u'key'))))
+ if var.get(u'name').callprop(u'match', JsRegExp(u'/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/')):
+ var.put(u'name', var.get(u'name').callprop(u'substr', Js(1.0), (var.get(u'name').get(u'length')-Js(2.0))))
+ var.put(u'name', var.get(u'ctx').callprop(u'stylize', var.get(u'name'), Js(u'name')))
+ else:
+ var.put(u'name', var.get(u'name').callprop(u'replace', JsRegExp(u"/'/g"), Js(u"\\'")).callprop(u'replace', JsRegExp(u'/\\\\"/g'), Js(u'"')).callprop(u'replace', JsRegExp(u'/(^"|"$)/g'), Js(u"'")))
+ var.put(u'name', var.get(u'ctx').callprop(u'stylize', var.get(u'name'), Js(u'string')))
+ return ((var.get(u'name')+Js(u': '))+var.get(u'str'))
+ PyJsHoisted_formatProperty_.func_name = u'formatProperty'
+ var.put(u'formatProperty', PyJsHoisted_formatProperty_)
+ @Js
+ def PyJsHoisted_formatError_(value, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'value'])
+ return ((Js(u'[')+var.get(u'Error').get(u'prototype').get(u'toString').callprop(u'call', var.get(u'value')))+Js(u']'))
+ PyJsHoisted_formatError_.func_name = u'formatError'
+ var.put(u'formatError', PyJsHoisted_formatError_)
+ @Js
+ def PyJsHoisted_formatArray_(ctx, value, recurseTimes, visibleKeys, keys, this, arguments, var=var):
+ var = Scope({u'this':this, u'visibleKeys':visibleKeys, u'arguments':arguments, u'recurseTimes':recurseTimes, u'keys':keys, u'ctx':ctx, u'value':value}, var)
+ var.registers([u'keys', u'recurseTimes', u'i', u'ctx', u'l', u'value', u'visibleKeys', u'output'])
+ var.put(u'output', Js([]))
+ #for JS loop
+ var.put(u'i', Js(0.0))
+ var.put(u'l', var.get(u'value').get(u'length'))
+ while (var.get(u'i')=Js(3.0)):
+ var.get(u'ctx').put(u'depth', var.get(u'arguments').get(u'2'))
+ if (var.get(u'arguments').get(u'length')>=Js(4.0)):
+ var.get(u'ctx').put(u'colors', var.get(u'arguments').get(u'3'))
+ if var.get(u'isBoolean')(var.get(u'opts')):
+ var.get(u'ctx').put(u'showHidden', var.get(u'opts'))
+ else:
+ if var.get(u'opts'):
+ var.get(u'exports').callprop(u'_extend', var.get(u'ctx'), var.get(u'opts'))
+ if var.get(u'isUndefined')(var.get(u'ctx').get(u'showHidden')):
+ var.get(u'ctx').put(u'showHidden', Js(False))
+ if var.get(u'isUndefined')(var.get(u'ctx').get(u'depth')):
+ var.get(u'ctx').put(u'depth', Js(2.0))
+ if var.get(u'isUndefined')(var.get(u'ctx').get(u'colors')):
+ var.get(u'ctx').put(u'colors', Js(False))
+ if var.get(u'isUndefined')(var.get(u'ctx').get(u'customInspect')):
+ var.get(u'ctx').put(u'customInspect', var.get(u'true'))
+ if var.get(u'ctx').get(u'colors'):
+ var.get(u'ctx').put(u'stylize', var.get(u'stylizeWithColor'))
+ return var.get(u'formatValue')(var.get(u'ctx'), var.get(u'obj'), var.get(u'ctx').get(u'depth'))
+ PyJsHoisted_inspect_.func_name = u'inspect'
+ var.put(u'inspect', PyJsHoisted_inspect_)
+ @Js
+ def PyJsHoisted_formatPrimitive_(ctx, value, this, arguments, var=var):
+ var = Scope({u'this':this, u'ctx':ctx, u'arguments':arguments, u'value':value}, var)
+ var.registers([u'simple', u'ctx', u'value'])
+ if var.get(u'isUndefined')(var.get(u'value')):
+ return var.get(u'ctx').callprop(u'stylize', Js(u'undefined'), Js(u'undefined'))
+ if var.get(u'isString')(var.get(u'value')):
+ var.put(u'simple', ((Js(u"'")+var.get(u'JSON').callprop(u'stringify', var.get(u'value')).callprop(u'replace', JsRegExp(u'/^"|"$/g'), Js(u'')).callprop(u'replace', JsRegExp(u"/'/g"), Js(u"\\'")).callprop(u'replace', JsRegExp(u'/\\\\"/g'), Js(u'"')))+Js(u"'")))
+ return var.get(u'ctx').callprop(u'stylize', var.get(u'simple'), Js(u'string'))
+ if var.get(u'isNumber')(var.get(u'value')):
+ return var.get(u'ctx').callprop(u'stylize', (Js(u'')+var.get(u'value')), Js(u'number'))
+ if var.get(u'isBoolean')(var.get(u'value')):
+ return var.get(u'ctx').callprop(u'stylize', (Js(u'')+var.get(u'value')), Js(u'boolean'))
+ if var.get(u'isNull')(var.get(u'value')):
+ return var.get(u'ctx').callprop(u'stylize', Js(u'null'), Js(u'null'))
+ PyJsHoisted_formatPrimitive_.func_name = u'formatPrimitive'
+ var.put(u'formatPrimitive', PyJsHoisted_formatPrimitive_)
+ @Js
+ def PyJsHoisted_hasOwnProperty_(obj, prop, this, arguments, var=var):
+ var = Scope({u'this':this, u'obj':obj, u'arguments':arguments, u'prop':prop}, var)
+ var.registers([u'obj', u'prop'])
+ return var.get(u'Object').get(u'prototype').get(u'hasOwnProperty').callprop(u'call', var.get(u'obj'), var.get(u'prop'))
+ PyJsHoisted_hasOwnProperty_.func_name = u'hasOwnProperty'
+ var.put(u'hasOwnProperty', PyJsHoisted_hasOwnProperty_)
+ @Js
+ def PyJsHoisted_isNumber_(arg, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'arg':arg}, var)
+ var.registers([u'arg'])
+ return PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'number'))
+ PyJsHoisted_isNumber_.func_name = u'isNumber'
+ var.put(u'isNumber', PyJsHoisted_isNumber_)
+ @Js
+ def PyJsHoisted_isError_(e, this, arguments, var=var):
+ var = Scope({u'this':this, u'e':e, u'arguments':arguments}, var)
+ var.registers([u'e'])
+ return (var.get(u'isObject')(var.get(u'e')) and (PyJsStrictEq(var.get(u'objectToString')(var.get(u'e')),Js(u'[object Error]')) or var.get(u'e').instanceof(var.get(u'Error'))))
+ PyJsHoisted_isError_.func_name = u'isError'
+ var.put(u'isError', PyJsHoisted_isError_)
+ @Js
+ def PyJsHoisted_reduceToSingleString_(output, base, braces, this, arguments, var=var):
+ var = Scope({u'this':this, u'output':output, u'base':base, u'arguments':arguments, u'braces':braces}, var)
+ var.registers([u'output', u'length', u'base', u'numLinesEst', u'braces'])
+ var.put(u'numLinesEst', Js(0.0))
+ @Js
+ def PyJs_anonymous_4347_(prev, cur, this, arguments, var=var):
+ var = Scope({u'this':this, u'prev':prev, u'cur':cur, u'arguments':arguments}, var)
+ var.registers([u'prev', u'cur'])
+ (var.put(u'numLinesEst',Js(var.get(u'numLinesEst').to_number())+Js(1))-Js(1))
+ if (var.get(u'cur').callprop(u'indexOf', Js(u'\n'))>=Js(0.0)):
+ (var.put(u'numLinesEst',Js(var.get(u'numLinesEst').to_number())+Js(1))-Js(1))
+ return ((var.get(u'prev')+var.get(u'cur').callprop(u'replace', JsRegExp(u'/\\u001b\\[\\d\\d?m/g'), Js(u'')).get(u'length'))+Js(1.0))
+ PyJs_anonymous_4347_._set_name(u'anonymous')
+ var.put(u'length', var.get(u'output').callprop(u'reduce', PyJs_anonymous_4347_, Js(0.0)))
+ if (var.get(u'length')>Js(60.0)):
+ return (((((var.get(u'braces').get(u'0')+(Js(u'') if PyJsStrictEq(var.get(u'base'),Js(u'')) else (var.get(u'base')+Js(u'\n '))))+Js(u' '))+var.get(u'output').callprop(u'join', Js(u',\n ')))+Js(u' '))+var.get(u'braces').get(u'1'))
+ return (((((var.get(u'braces').get(u'0')+var.get(u'base'))+Js(u' '))+var.get(u'output').callprop(u'join', Js(u', ')))+Js(u' '))+var.get(u'braces').get(u'1'))
+ PyJsHoisted_reduceToSingleString_.func_name = u'reduceToSingleString'
+ var.put(u'reduceToSingleString', PyJsHoisted_reduceToSingleString_)
+ @Js
+ def PyJsHoisted_isNullOrUndefined_(arg, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'arg':arg}, var)
+ var.registers([u'arg'])
+ return (var.get(u'arg')==var.get(u"null"))
+ PyJsHoisted_isNullOrUndefined_.func_name = u'isNullOrUndefined'
+ var.put(u'isNullOrUndefined', PyJsHoisted_isNullOrUndefined_)
+ @Js
+ def PyJsHoisted_isDate_(d, this, arguments, var=var):
+ var = Scope({u'this':this, u'd':d, u'arguments':arguments}, var)
+ var.registers([u'd'])
+ return (var.get(u'isObject')(var.get(u'd')) and PyJsStrictEq(var.get(u'objectToString')(var.get(u'd')),Js(u'[object Date]')))
+ PyJsHoisted_isDate_.func_name = u'isDate'
+ var.put(u'isDate', PyJsHoisted_isDate_)
+ @Js
+ def PyJsHoisted_isString_(arg, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'arg':arg}, var)
+ var.registers([u'arg'])
+ return PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'string'))
+ PyJsHoisted_isString_.func_name = u'isString'
+ var.put(u'isString', PyJsHoisted_isString_)
+ @Js
+ def PyJsHoisted_isPrimitive_(arg, this, arguments, var=var):
+ var = Scope({u'this':this, u'arguments':arguments, u'arg':arg}, var)
+ var.registers([u'arg'])
+ return (((((PyJsStrictEq(var.get(u'arg'),var.get(u"null")) or PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'boolean'))) or PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'number'))) or PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'string'))) or PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'symbol'))) or PyJsStrictEq(var.get(u'arg',throw=False).typeof(),Js(u'undefined')))
+ PyJsHoisted_isPrimitive_.func_name = u'isPrimitive'
+ var.put(u'isPrimitive', PyJsHoisted_isPrimitive_)
+ @Js
+ def PyJsHoisted_formatValue_(ctx, value, recurseTimes, this, arguments, var=var):
+ var = Scope({u'this':this, u'ctx':ctx, u'arguments':arguments, u'value':value, u'recurseTimes':recurseTimes}, var)
+ var.registers([u'primitive', u'name', u'recurseTimes', u'keys', u'ctx', u'ret', u'n', u'visibleKeys', u'base', u'value', u'output', u'array', u'braces'])
+ if ((((var.get(u'ctx').get(u'customInspect') and var.get(u'value')) and var.get(u'isFunction')(var.get(u'value').get(u'inspect'))) and PyJsStrictNeq(var.get(u'value').get(u'inspect'),var.get(u'exports').get(u'inspect'))) and (var.get(u'value').get(u'constructor') and PyJsStrictEq(var.get(u'value').get(u'constructor').get(u'prototype'),var.get(u'value'))).neg()):
+ var.put(u'ret', var.get(u'value').callprop(u'inspect', var.get(u'recurseTimes'), var.get(u'ctx')))
+ if var.get(u'isString')(var.get(u'ret')).neg():
+ var.put(u'ret', var.get(u'formatValue')(var.get(u'ctx'), var.get(u'ret'), var.get(u'recurseTimes')))
+ return var.get(u'ret')
+ var.put(u'primitive', var.get(u'formatPrimitive')(var.get(u'ctx'), var.get(u'value')))
+ if var.get(u'primitive'):
+ return var.get(u'primitive')
+ var.put(u'keys', var.get(u'Object').callprop(u'keys', var.get(u'value')))
+ var.put(u'visibleKeys', var.get(u'arrayToHash')(var.get(u'keys')))
+ if var.get(u'ctx').get(u'showHidden'):
+ var.put(u'keys', var.get(u'Object').callprop(u'getOwnPropertyNames', var.get(u'value')))
+ if (var.get(u'isError')(var.get(u'value')) and ((var.get(u'keys').callprop(u'indexOf', Js(u'message'))>=Js(0.0)) or (var.get(u'keys').callprop(u'indexOf', Js(u'description'))>=Js(0.0)))):
+ return var.get(u'formatError')(var.get(u'value'))
+ if PyJsStrictEq(var.get(u'keys').get(u'length'),Js(0.0)):
+ if var.get(u'isFunction')(var.get(u'value')):
+ var.put(u'name', ((Js(u': ')+var.get(u'value').get(u'name')) if var.get(u'value').get(u'name') else Js(u'')))
+ return var.get(u'ctx').callprop(u'stylize', ((Js(u'[Function')+var.get(u'name'))+Js(u']')), Js(u'special'))
+ if var.get(u'isRegExp')(var.get(u'value')):
+ return var.get(u'ctx').callprop(u'stylize', var.get(u'RegExp').get(u'prototype').get(u'toString').callprop(u'call', var.get(u'value')), Js(u'regexp'))
+ if var.get(u'isDate')(var.get(u'value')):
+ return var.get(u'ctx').callprop(u'stylize', var.get(u'Date').get(u'prototype').get(u'toString').callprop(u'call', var.get(u'value')), Js(u'date'))
+ if var.get(u'isError')(var.get(u'value')):
+ return var.get(u'formatError')(var.get(u'value'))
+ var.put(u'base', Js(u''))
+ var.put(u'array', Js(False))
+ var.put(u'braces', Js([Js(u'{'), Js(u'}')]))
+ if var.get(u'isArray')(var.get(u'value')):
+ var.put(u'array', var.get(u'true'))
+ var.put(u'braces', Js([Js(u'['), Js(u']')]))
+ if var.get(u'isFunction')(var.get(u'value')):
+ var.put(u'n', ((Js(u': ')+var.get(u'value').get(u'name')) if var.get(u'value').get(u'name') else Js(u'')))
+ var.put(u'base', ((Js(u' [Function')+var.get(u'n'))+Js(u']')))
+ if var.get(u'isRegExp')(var.get(u'value')):
+ var.put(u'base', (Js(u' ')+var.get(u'RegExp').get(u'prototype').get(u'toString').callprop(u'call', var.get(u'value'))))
+ if var.get(u'isDate')(var.get(u'value')):
+ var.put(u'base', (Js(u' ')+var.get(u'Date').get(u'prototype').get(u'toUTCString').callprop(u'call', var.get(u'value'))))
+ if var.get(u'isError')(var.get(u'value')):
+ var.put(u'base', (Js(u' ')+var.get(u'formatError')(var.get(u'value'))))
+ if (PyJsStrictEq(var.get(u'keys').get(u'length'),Js(0.0)) and (var.get(u'array').neg() or (var.get(u'value').get(u'length')==Js(0.0)))):
+ return ((var.get(u'braces').get(u'0')+var.get(u'base'))+var.get(u'braces').get(u'1'))
+ if (var.get(u'recurseTimes')=var.get(u'len')):
+ return var.get(u'x')
+ while 1:
+ SWITCHED = False
+ CONDITION = (var.get(u'x'))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'%s')):
+ SWITCHED = True
+ return var.get(u'String')(var.get(u'args').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'%d')):
+ SWITCHED = True
+ return var.get(u'Number')(var.get(u'args').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))
+ if SWITCHED or PyJsStrictEq(CONDITION, Js(u'%j')):
+ SWITCHED = True
+ try:
+ return var.get(u'JSON').callprop(u'stringify', var.get(u'args').get((var.put(u'i',Js(var.get(u'i').to_number())+Js(1))-Js(1))))
+ except PyJsException as PyJsTempException:
+ PyJsHolder_5f_51919926 = var.own.get(u'_')
+ var.force_own_put(u'_', PyExceptionToJs(PyJsTempException))
+ try:
+ return Js(u'[Circular]')
+ finally:
+ if PyJsHolder_5f_51919926 is not None:
+ var.own[u'_'] = PyJsHolder_5f_51919926
+ else:
+ del var.own[u'_']
+ del PyJsHolder_5f_51919926
+ if True:
+ SWITCHED = True
+ return var.get(u'x')
+ SWITCHED = True
+ break
+ PyJs_anonymous_4330_._set_name(u'anonymous')
+ var.put(u'str', var.get(u'String')(var.get(u'f')).callprop(u'replace', var.get(u'formatRegExp'), PyJs_anonymous_4330_))
+ #for JS loop
+ var.put(u'x', var.get(u'args').get(var.get(u'i')))
+ while (var.get(u'i') generates babel.py
+echo "Generating babel.py..."
+python -c "import js2py;js2py.translate_file('babel_bundle.js', 'babel.py');"
+rm babel_bundle.js
+
diff --git a/Contents/Libraries/Shared/js2py/evaljs.py b/Contents/Libraries/Shared/js2py/evaljs.py
new file mode 100644
index 000000000..64eea5c4c
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/evaljs.py
@@ -0,0 +1,267 @@
+# coding=utf-8
+from .translators import translate_js, DEFAULT_HEADER
+from .es6 import js6_to_js5
+import sys
+import time
+import json
+import six
+import os
+import hashlib
+import codecs
+
+__all__ = [
+ 'EvalJs', 'translate_js', 'import_js', 'eval_js', 'translate_file',
+ 'eval_js6', 'translate_js6', 'run_file', 'disable_pyimport',
+ 'get_file_contents', 'write_file_contents'
+]
+DEBUG = False
+
+
+def disable_pyimport():
+ import pyjsparser.parser
+ pyjsparser.parser.ENABLE_PYIMPORT = False
+
+
+def path_as_local(path):
+ if os.path.isabs(path):
+ return path
+ # relative to cwd
+ return os.path.join(os.getcwd(), path)
+
+
+def import_js(path, lib_name, globals):
+ """Imports from javascript source file.
+ globals is your globals()"""
+ with codecs.open(path_as_local(path), "r", "utf-8") as f:
+ js = f.read()
+ e = EvalJs()
+ e.execute(js)
+ var = e.context['var']
+ globals[lib_name] = var.to_python()
+
+
+def get_file_contents(path_or_file):
+ if hasattr(path_or_file, 'read'):
+ js = path_or_file.read()
+ else:
+ with codecs.open(path_as_local(path_or_file), "r", "utf-8") as f:
+ js = f.read()
+ return js
+
+
+def write_file_contents(path_or_file, contents):
+ if hasattr(path_or_file, 'write'):
+ path_or_file.write(contents)
+ else:
+ with open(path_as_local(path_or_file), 'w') as f:
+ f.write(contents)
+
+
+def translate_file(input_path, output_path):
+ '''
+ Translates input JS file to python and saves the it to the output path.
+ It appends some convenience code at the end so that it is easy to import JS objects.
+
+ For example we have a file 'example.js' with: var a = function(x) {return x}
+ translate_file('example.js', 'example.py')
+
+ Now example.py can be easily importend and used:
+ >>> from example import example
+ >>> example.a(30)
+ 30
+ '''
+ js = get_file_contents(input_path)
+
+ py_code = translate_js(js)
+ lib_name = os.path.basename(output_path).split('.')[0]
+ head = '__all__ = [%s]\n\n# Don\'t look below, you will not understand this Python code :) I don\'t.\n\n' % repr(
+ lib_name)
+ tail = '\n\n# Add lib to the module scope\n%s = var.to_python()' % lib_name
+ out = head + py_code + tail
+ write_file_contents(output_path, out)
+
+
+def run_file(path_or_file, context=None):
+ ''' Context must be EvalJS object. Runs given path as a JS program. Returns (eval_value, context).
+ '''
+ if context is None:
+ context = EvalJs()
+ if not isinstance(context, EvalJs):
+ raise TypeError('context must be the instance of EvalJs')
+ eval_value = context.eval(get_file_contents(path_or_file))
+ return eval_value, context
+
+
+def eval_js(js):
+ """Just like javascript eval. Translates javascript to python,
+ executes and returns python object.
+ js is javascript source code
+
+ EXAMPLE:
+ >>> import js2py
+ >>> add = js2py.eval_js('function add(a, b) {return a + b}')
+ >>> add(1, 2) + 3
+ 6
+ >>> add('1', 2, 3)
+ u'12'
+ >>> add.constructor
+ function Function() { [python code] }
+
+ NOTE: For Js Number, String, Boolean and other base types returns appropriate python BUILTIN type.
+ For Js functions and objects, returns Python wrapper - basically behaves like normal python object.
+ If you really want to convert object to python dict you can use to_dict method.
+ """
+ e = EvalJs()
+ return e.eval(js)
+
+
+def eval_js6(js):
+ """Just like eval_js but with experimental support for js6 via babel."""
+ return eval_js(js6_to_js5(js))
+
+
+def translate_js6(js):
+ """Just like translate_js but with experimental support for js6 via babel."""
+ return translate_js(js6_to_js5(js))
+
+
+class EvalJs(object):
+ """This class supports continuous execution of javascript under same context.
+
+ >>> js = EvalJs()
+ >>> js.execute('var a = 10;function f(x) {return x*x};')
+ >>> js.f(9)
+ 81
+ >>> js.a
+ 10
+
+ context is a python dict or object that contains python variables that should be available to JavaScript
+ For example:
+ >>> js = EvalJs({'a': 30})
+ >>> js.execute('var x = a')
+ >>> js.x
+ 30
+
+ You can run interactive javascript console with console method!"""
+
+ def __init__(self, context={}):
+ self.__dict__['_context'] = {}
+ exec (DEFAULT_HEADER, self._context)
+ self.__dict__['_var'] = self._context['var'].to_python()
+ if not isinstance(context, dict):
+ try:
+ context = context.__dict__
+ except:
+ raise TypeError(
+ 'context has to be either a dict or have __dict__ attr')
+ for k, v in six.iteritems(context):
+ setattr(self._var, k, v)
+
+ def execute(self, js=None, use_compilation_plan=False):
+ """executes javascript js in current context
+
+ During initial execute() the converted js is cached for re-use. That means next time you
+ run the same javascript snippet you save many instructions needed to parse and convert the
+ js code to python code.
+
+ This cache causes minor overhead (a cache dicts is updated) but the Js=>Py conversion process
+ is typically expensive compared to actually running the generated python code.
+
+ Note that the cache is just a dict, it has no expiration or cleanup so when running this
+ in automated situations with vast amounts of snippets it might increase memory usage.
+ """
+ try:
+ cache = self.__dict__['cache']
+ except KeyError:
+ cache = self.__dict__['cache'] = {}
+ hashkey = hashlib.md5(js.encode('utf-8')).digest()
+ try:
+ compiled = cache[hashkey]
+ except KeyError:
+ code = translate_js(
+ js, '', use_compilation_plan=use_compilation_plan)
+ compiled = cache[hashkey] = compile(code, '',
+ 'exec')
+ exec (compiled, self._context)
+
+ def eval(self, expression, use_compilation_plan=False):
+ """evaluates expression in current context and returns its value"""
+ code = 'PyJsEvalResult = eval(%s)' % json.dumps(expression)
+ self.execute(code, use_compilation_plan=use_compilation_plan)
+ return self['PyJsEvalResult']
+
+ def execute_debug(self, js):
+ """executes javascript js in current context
+ as opposed to the (faster) self.execute method, you can use your regular debugger
+ to set breakpoints and inspect the generated python code
+ """
+ code = translate_js(js, '')
+ # make sure you have a temp folder:
+ filename = 'temp' + os.sep + '_' + hashlib.md5(
+ code.encode("utf-8")).hexdigest() + '.py'
+ try:
+ with open(filename, mode='w') as f:
+ f.write(code)
+ with open(filename, "r") as f:
+ pyCode = compile(f.read(), filename, 'exec')
+ exec(pyCode, self._context)
+
+ except Exception as err:
+ raise err
+ finally:
+ os.remove(filename)
+ try:
+ os.remove(filename + 'c')
+ except:
+ pass
+
+ def eval_debug(self, expression):
+ """evaluates expression in current context and returns its value
+ as opposed to the (faster) self.execute method, you can use your regular debugger
+ to set breakpoints and inspect the generated python code
+ """
+ code = 'PyJsEvalResult = eval(%s)' % json.dumps(expression)
+ self.execute_debug(code)
+ return self['PyJsEvalResult']
+
+ def __getattr__(self, var):
+ return getattr(self._var, var)
+
+ def __getitem__(self, var):
+ return getattr(self._var, var)
+
+ def __setattr__(self, var, val):
+ return setattr(self._var, var, val)
+
+ def __setitem__(self, var, val):
+ return setattr(self._var, var, val)
+
+ def console(self):
+ """starts to interact (starts interactive console) Something like code.InteractiveConsole"""
+ while True:
+ if six.PY2:
+ code = raw_input('>>> ')
+ else:
+ code = input('>>>')
+ try:
+ print(self.eval(code))
+ except KeyboardInterrupt:
+ break
+ except Exception as e:
+ import traceback
+ if DEBUG:
+ sys.stderr.write(traceback.format_exc())
+ else:
+ sys.stderr.write('EXCEPTION: ' + str(e) + '\n')
+ time.sleep(0.01)
+
+
+#print x
+
+if __name__ == '__main__':
+ #with open('C:\Users\Piotrek\Desktop\esprima.js', 'rb') as f:
+ # x = f.read()
+ e = EvalJs()
+ e.execute('square(x)')
+ #e.execute(x)
+ e.console()
diff --git a/Contents/Libraries/Shared/requests/packages/urllib3/contrib/__init__.py b/Contents/Libraries/Shared/js2py/host/__init__.py
similarity index 100%
rename from Contents/Libraries/Shared/requests/packages/urllib3/contrib/__init__.py
rename to Contents/Libraries/Shared/js2py/host/__init__.py
diff --git a/Contents/Libraries/Shared/js2py/host/console.py b/Contents/Libraries/Shared/js2py/host/console.py
new file mode 100644
index 000000000..50a08632a
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/host/console.py
@@ -0,0 +1,15 @@
+from ..base import *
+
+@Js
+def console():
+ pass
+
+@Js
+def log():
+ print(arguments[0])
+
+console.put('log', log)
+console.put('debug', log)
+console.put('info', log)
+console.put('warn', log)
+console.put('error', log)
diff --git a/Contents/Libraries/Shared/requests/packages/urllib3/packages/backports/__init__.py b/Contents/Libraries/Shared/js2py/host/dom/__init__.py
similarity index 100%
rename from Contents/Libraries/Shared/requests/packages/urllib3/packages/backports/__init__.py
rename to Contents/Libraries/Shared/js2py/host/dom/__init__.py
diff --git a/Contents/Libraries/Shared/js2py/host/jseval.py b/Contents/Libraries/Shared/js2py/host/jseval.py
new file mode 100644
index 000000000..13140d2d5
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/host/jseval.py
@@ -0,0 +1,51 @@
+from ..base import *
+import inspect
+try:
+ from js2py.translators.translator import translate_js
+except:
+ pass
+
+
+@Js
+def Eval(code):
+ local_scope = inspect.stack()[3][0].f_locals['var']
+ global_scope = this.GlobalObject
+ # todo fix scope - we have to behave differently if called through variable other than eval
+ # we will use local scope (default)
+ globals()['var'] = local_scope
+ try:
+ py_code = translate_js(code.to_string().value, '')
+ except SyntaxError as syn_err:
+ raise MakeError('SyntaxError', str(syn_err))
+ lines = py_code.split('\n')
+ # a simple way to return value from eval. Will not work in complex cases.
+ has_return = False
+ for n in xrange(len(lines)):
+ line = lines[len(lines) - n - 1]
+ if line.strip():
+ if line.startswith(' '):
+ break
+ elif line.strip() == 'pass':
+ continue
+ elif any(
+ line.startswith(e)
+ for e in ['return ', 'continue ', 'break', 'raise ']):
+ break
+ else:
+ has_return = True
+ cand = 'EVAL_RESULT = (%s)\n' % line
+ try:
+ compile(cand, '', 'exec')
+ except SyntaxError:
+ break
+ lines[len(lines) - n - 1] = cand
+ py_code = '\n'.join(lines)
+ break
+ #print py_code
+ executor(py_code)
+ if has_return:
+ return globals()['EVAL_RESULT']
+
+
+def executor(code):
+ exec (code, globals())
diff --git a/Contents/Libraries/Shared/js2py/host/jsfunctions.py b/Contents/Libraries/Shared/js2py/host/jsfunctions.py
new file mode 100644
index 000000000..2360fee86
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/host/jsfunctions.py
@@ -0,0 +1,176 @@
+from ..base import *
+from six.moves.urllib.parse import quote, unquote
+
+RADIX_CHARS = {
+ '1': 1,
+ '0': 0,
+ '3': 3,
+ '2': 2,
+ '5': 5,
+ '4': 4,
+ '7': 7,
+ '6': 6,
+ '9': 9,
+ '8': 8,
+ 'a': 10,
+ 'c': 12,
+ 'b': 11,
+ 'e': 14,
+ 'd': 13,
+ 'g': 16,
+ 'f': 15,
+ 'i': 18,
+ 'h': 17,
+ 'k': 20,
+ 'j': 19,
+ 'm': 22,
+ 'l': 21,
+ 'o': 24,
+ 'n': 23,
+ 'q': 26,
+ 'p': 25,
+ 's': 28,
+ 'r': 27,
+ 'u': 30,
+ 't': 29,
+ 'w': 32,
+ 'v': 31,
+ 'y': 34,
+ 'x': 33,
+ 'z': 35,
+ 'A': 10,
+ 'C': 12,
+ 'B': 11,
+ 'E': 14,
+ 'D': 13,
+ 'G': 16,
+ 'F': 15,
+ 'I': 18,
+ 'H': 17,
+ 'K': 20,
+ 'J': 19,
+ 'M': 22,
+ 'L': 21,
+ 'O': 24,
+ 'N': 23,
+ 'Q': 26,
+ 'P': 25,
+ 'S': 28,
+ 'R': 27,
+ 'U': 30,
+ 'T': 29,
+ 'W': 32,
+ 'V': 31,
+ 'Y': 34,
+ 'X': 33,
+ 'Z': 35
+}
+
+
+@Js
+def parseInt(string, radix):
+ string = string.to_string().value.lstrip()
+ sign = 1
+ if string and string[0] in ('+', '-'):
+ if string[0] == '-':
+ sign = -1
+ string = string[1:]
+ r = radix.to_int32()
+ strip_prefix = True
+ if r:
+ if r < 2 or r > 36:
+ return NaN
+ if r != 16:
+ strip_prefix = False
+ else:
+ r = 10
+ if strip_prefix:
+ if len(string) >= 2 and string[:2] in ('0x', '0X'):
+ string = string[2:]
+ r = 16
+ n = 0
+ num = 0
+ while n < len(string):
+ cand = RADIX_CHARS.get(string[n])
+ if cand is None or not cand < r:
+ break
+ num = cand + num * r
+ n += 1
+ if not n:
+ return NaN
+ return sign * num
+
+
+@Js
+def parseFloat(string):
+ string = string.to_string().value.strip()
+ sign = 1
+ if string and string[0] in ('+', '-'):
+ if string[0] == '-':
+ sign = -1
+ string = string[1:]
+ num = None
+ length = 1
+ max_len = None
+ failed = 0
+ while length <= len(string):
+ try:
+ num = float(string[:length])
+ max_len = length
+ failed = 0
+ except:
+ failed += 1
+ if failed > 4: # cant be a number anymore
+ break
+ length += 1
+ if num is None:
+ return NaN
+ return sign * float(string[:max_len])
+
+
+@Js
+def isNaN(number):
+ if number.to_number().is_nan():
+ return true
+ return false
+
+
+@Js
+def isFinite(number):
+ num = number.to_number()
+ if num.is_nan() or num.is_infinity():
+ return false
+ return true
+
+
+# todo test them properly
+
+
+@Js
+def escape(text):
+ return quote(text.to_string().value)
+
+
+@Js
+def unescape(text):
+ return unquote(text.to_string().value)
+
+
+@Js
+def encodeURI(text):
+ return quote(text.to_string().value, safe='~@#$&()*!+=:;,.?/\'')
+
+
+@Js
+def decodeURI(text):
+ return unquote(text.to_string().value)
+
+
+@Js
+def encodeURIComponent(text):
+ return quote(text.to_string().value, safe='~()*!.\'')
+
+
+@Js
+def decodeURIComponent(text):
+ return unquote(text.to_string().value)
diff --git a/Contents/Libraries/Shared/js2py/internals/__init__.py b/Contents/Libraries/Shared/js2py/internals/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/Contents/Libraries/Shared/js2py/internals/base.py b/Contents/Libraries/Shared/js2py/internals/base.py
new file mode 100644
index 000000000..a02a21229
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/base.py
@@ -0,0 +1,929 @@
+from __future__ import unicode_literals
+import re
+
+import datetime
+
+from .desc import *
+from .simplex import *
+from .conversions import *
+
+from pyjsparser import PyJsParser
+
+import six
+if six.PY2:
+ from itertools import izip
+else:
+ izip = zip
+
+
+
+
+def Type(obj):
+ return obj.TYPE
+
+
+# 8.6.2
+class PyJs(object):
+ TYPE = 'Object'
+ IS_CONSTRUCTOR = False
+
+ prototype = None
+ Class = None
+ extensible = True
+ value = None
+
+ own = {}
+
+ def get_member(self, unconverted_prop):
+ return self.get(to_string(unconverted_prop))
+
+ def put_member(self, unconverted_prop, val):
+ return self.put(to_string(unconverted_prop), val)
+
+ def get(self, prop):
+ assert type(prop) == unicode
+ cand = self.get_property(prop)
+ if cand is None:
+ return undefined
+ if is_data_descriptor(cand):
+ return cand['value']
+ if is_undefined(cand['get']):
+ return undefined
+ return cand['get'].call(self)
+
+ def get_own_property(self, prop):
+ assert type(prop) == unicode
+ # takes py returns py
+ return self.own.get(prop)
+
+ def get_property(self, prop):
+ assert type(prop) == unicode
+ # take py returns py
+ cand = self.get_own_property(prop)
+ if cand:
+ return cand
+ if self.prototype is not None:
+ return self.prototype.get_property(prop)
+
+ def put(self, prop, val, throw=False):
+ assert type(prop) == unicode
+ # takes py, returns none
+ if not self.can_put(prop):
+ if throw:
+ raise MakeError('TypeError', 'Could not define own property')
+ return
+ own_desc = self.get_own_property(prop)
+ if is_data_descriptor(own_desc):
+ self.own[prop]['value'] = val
+ return
+ desc = self.get_property(prop)
+ if is_accessor_descriptor(desc):
+ desc['set'].call(
+ self, (val, )) # calling setter on own or inherited element
+ else: # new property
+ self.own[prop] = {
+ 'value': val,
+ 'writable': True,
+ 'configurable': True,
+ 'enumerable': True
+ }
+
+ def can_put(self, prop): # to check
+ assert type(prop) == unicode, type(prop)
+ # takes py returns py
+ desc = self.get_own_property(prop)
+ if desc: # if we have this property
+ if is_accessor_descriptor(desc):
+ return is_callable(
+ desc['set']) # Check if setter method is defined
+ else: # data desc
+ return desc['writable']
+ if self.prototype is None:
+ return self.extensible
+ inherited = self.prototype.get_property(prop)
+ if inherited is None:
+ return self.extensible
+ if is_accessor_descriptor(inherited):
+ return not is_undefined(inherited['set'])
+ elif self.extensible:
+ return inherited['writable'] # weird...
+ return False
+
+ def has_property(self, prop):
+ assert type(prop) == unicode
+ # takes py returns Py
+ return self.get_property(prop) is not None
+
+ def delete(self, prop, throw=False):
+ assert type(prop) == unicode
+ # takes py, returns py
+ desc = self.get_own_property(prop)
+ if desc is None:
+ return True
+ if desc['configurable']:
+ del self.own[prop]
+ return True
+ if throw:
+ raise MakeError('TypeError', 'Could not define own property')
+ return False
+
+ def default_value(self, hint=None):
+ order = ('valueOf', 'toString')
+ if hint == 'String' or (hint is None and self.Class == 'Date'):
+ order = ('toString', 'valueOf')
+ for meth_name in order:
+ method = self.get(meth_name)
+ if method is not None and is_callable(method):
+ cand = method.call(self, ())
+ if is_primitive(cand):
+ return cand
+ raise MakeError('TypeError',
+ 'Cannot convert object to primitive value')
+
+ def define_own_property(
+ self, prop, desc,
+ throw): # Internal use only. External through Object
+ assert type(prop) == unicode
+ # takes Py, returns Py
+ # prop must be a Py string. Desc is either a descriptor or accessor.
+ # Messy method - raw translation from Ecma spec to prevent any bugs. # todo check this
+ current = self.get_own_property(prop)
+
+ extensible = self.extensible
+ if not current: # We are creating a new OWN property
+ if not extensible:
+ if throw:
+ raise MakeError('TypeError',
+ 'Could not define own property')
+ return False
+ # extensible must be True
+ if is_data_descriptor(desc) or is_generic_descriptor(desc):
+ DEFAULT_DATA_DESC = {
+ 'value': undefined, # undefined
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ DEFAULT_DATA_DESC.update(desc)
+ self.own[prop] = DEFAULT_DATA_DESC
+ else:
+ DEFAULT_ACCESSOR_DESC = {
+ 'get': undefined, # undefined
+ 'set': undefined, # undefined
+ 'enumerable': False,
+ 'configurable': False
+ }
+ DEFAULT_ACCESSOR_DESC.update(desc)
+ self.own[prop] = DEFAULT_ACCESSOR_DESC
+ return True
+ # therefore current exists!
+ if not desc or desc == current: # We don't need to change anything.
+ return True
+ configurable = current['configurable']
+ if not configurable: # Prevent changing params
+ if desc.get('configurable'):
+ if throw:
+ raise MakeError('TypeError',
+ 'Could not define own property')
+ return False
+ if 'enumerable' in desc and desc['enumerable'] != current[
+ 'enumerable']:
+ if throw:
+ raise MakeError('TypeError',
+ 'Could not define own property')
+ return False
+ if is_generic_descriptor(desc):
+ pass
+ elif is_data_descriptor(current) != is_data_descriptor(desc):
+ # we want to change the current type of property
+ if not configurable:
+ if throw:
+ raise MakeError('TypeError',
+ 'Could not define own property')
+ return False
+ if is_data_descriptor(current): # from data to setter
+ del current['value']
+ del current['writable']
+ current['set'] = undefined # undefined
+ current['get'] = undefined # undefined
+ else: # from setter to data
+ del current['set']
+ del current['get']
+ current['value'] = undefined # undefined
+ current['writable'] = False
+ elif is_data_descriptor(current) and is_data_descriptor(desc):
+ if not configurable:
+ if not current['writable'] and desc.get('writable'):
+ if throw:
+ raise MakeError('TypeError',
+ 'Could not define own property')
+ return False
+ if not current['writable'] and 'value' in desc and current[
+ 'value'] != desc['value']:
+ if throw:
+ raise MakeError('TypeError',
+ 'Could not define own property')
+ return False
+ elif is_accessor_descriptor(current) and is_accessor_descriptor(desc):
+ if not configurable:
+ if 'set' in desc and desc['set'] != current['set']:
+ if throw:
+ raise MakeError('TypeError',
+ 'Could not define own property')
+ return False
+ if 'get' in desc and desc['get'] != current['get']:
+ if throw:
+ raise MakeError('TypeError',
+ 'Could not define own property')
+ return False
+ current.update(desc)
+ return True
+
+ def create(self, args, space):
+ '''Generally not a constructor, raise an error'''
+ raise MakeError('TypeError', '%s is not a constructor' % self.Class)
+
+
+def get_member(
+ self, prop, space
+): # general member getter, prop has to be unconverted prop. it is it can be any value
+ typ = type(self)
+ if typ not in PRIMITIVES: # most likely getter for object
+ return self.get_member(
+ prop
+ ) # <- object can implement this to support faster prop getting. ex array.
+ elif typ == unicode: # then probably a String
+ if type(prop) == float and is_finite(prop):
+ index = int(prop)
+ if index == prop and 0 <= index < len(self):
+ return self[index]
+ s_prop = to_string(prop)
+ if s_prop == 'length':
+ return float(len(self))
+ elif s_prop.isdigit():
+ index = int(s_prop)
+ if 0 <= index < len(self):
+ return self[index]
+ # use standard string prototype
+ return space.StringPrototype.get(s_prop)
+ # maybe an index
+ elif typ == float:
+ # use standard number prototype
+ return space.NumberPrototype.get(to_string(prop))
+ elif typ == bool:
+ return space.BooleanPrototype.get(to_string(prop))
+ elif typ is UNDEFINED_TYPE:
+ raise MakeError('TypeError',
+ "Cannot read property '%s' of undefined" % prop)
+ elif typ is NULL_TYPE:
+ raise MakeError('TypeError',
+ "Cannot read property '%s' of null" % prop)
+ else:
+ raise RuntimeError('Unknown type! - ' + repr(typ))
+
+
+def get_member_dot(self, prop, space):
+ # dot member getter, prop has to be unicode
+ typ = type(self)
+ if typ not in PRIMITIVES: # most likely getter for object
+ return self.get(prop)
+ elif typ == unicode: # then probably a String
+ if prop == 'length':
+ return float(len(self))
+ elif prop.isdigit():
+ index = int(prop)
+ if 0 <= index < len(self):
+ return self[index]
+ else:
+ # use standard string prototype
+ return space.StringPrototype.get(prop)
+ # maybe an index
+ elif typ == float:
+ # use standard number prototype
+ return space.NumberPrototype.get(prop)
+ elif typ == bool:
+ return space.BooleanPrototype.get(prop)
+ elif typ in (UNDEFINED_TYPE, NULL_TYPE):
+ raise MakeError('TypeError',
+ "Cannot read property '%s' of undefined" % prop)
+ else:
+ raise RuntimeError('Unknown type! - ' + repr(typ))
+
+
+# Object
+
+
+class PyJsObject(PyJs):
+ TYPE = 'Object'
+ Class = 'Object'
+
+ def __init__(self, prototype=None):
+ self.prototype = prototype
+ self.own = {}
+
+ def _init(self, props, vals):
+ i = 0
+ for prop, kind in props:
+ if prop in self.own: # just check... probably will not happen very often.
+ if is_data_descriptor(self.own[prop]):
+ if kind != 'i':
+ raise MakeError(
+ 'SyntaxError',
+ 'Invalid object initializer! Duplicate property name "%s"'
+ % prop)
+ else:
+ if kind == 'i' or (kind == 'g' and 'get' in self.own[prop]
+ ) or (kind == 's'
+ and 'set' in self.own[prop]):
+ raise MakeError(
+ 'SyntaxError',
+ 'Invalid object initializer! Duplicate setter/getter of prop: "%s"'
+ % prop)
+
+ if kind == 'i': # init
+ self.own[prop] = {
+ 'value': vals[i],
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ }
+ elif kind == 'g': # get
+ self.define_own_property(prop, {
+ 'get': vals[i],
+ 'enumerable': True,
+ 'configurable': True
+ }, False)
+ elif kind == 's': # get
+ self.define_own_property(prop, {
+ 'get': vals[i],
+ 'enumerable': True,
+ 'configurable': True
+ }, False)
+ else:
+ raise RuntimeError(
+ 'Invalid property kind - %s. Expected one of i, g, s.' %
+ repr(kind))
+ i += 1
+
+ def _set_props(self, prop_descs):
+ for prop, desc in six.iteritems(prop_descs):
+ self.define_own_property(prop, desc)
+
+
+# Array
+
+
+# todo Optimise Array - extremely slow due to index conversions from str to int and back etc.
+# solution - make get and put methods callable with any type of prop and handle conversions from inside
+# if not array then use to_string(prop). In array if prop is integer then just use it
+# also consider removal of these stupid writable, enumerable etc for ints.
+class PyJsArray(PyJs):
+ Class = 'Array'
+
+ def __init__(self, length, prototype=None):
+ self.prototype = prototype
+ self.own = {
+ 'length': {
+ 'value': float(length),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ }
+
+ def _init(self, elements):
+ for i, ele in enumerate(elements):
+ if ele is None: continue
+ self.own[unicode(i)] = {
+ 'value': ele,
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ }
+
+ def put(self, prop, val, throw=False):
+ assert type(val) != int
+ # takes py, returns none
+ if not self.can_put(prop):
+ if throw:
+ raise MakeError('TypeError', 'Could not define own property')
+ return
+ own_desc = self.get_own_property(prop)
+ if is_data_descriptor(own_desc):
+ self.define_own_property(prop, {'value': val}, False)
+ return
+ desc = self.get_property(prop)
+ if is_accessor_descriptor(desc):
+ desc['set'].call(
+ self, (val, )) # calling setter on own or inherited element
+ else: # new property
+ self.define_own_property(
+ prop, {
+ 'value': val,
+ 'writable': True,
+ 'configurable': True,
+ 'enumerable': True
+ }, False)
+
+ def define_own_property(self, prop, desc, throw):
+ assert type(desc.get('value')) != int
+ old_len_desc = self.get_own_property('length')
+ old_len = old_len_desc['value'] # value is js type so convert to py.
+ if prop == 'length':
+ if 'value' not in desc:
+ return PyJs.define_own_property(self, prop, desc, False)
+ new_len = to_uint32(desc['value'])
+ if new_len != to_number(desc['value']):
+ raise MakeError('RangeError', 'Invalid range!')
+ new_desc = dict((k, v) for k, v in six.iteritems(desc))
+ new_desc['value'] = float(new_len)
+ if new_len >= old_len:
+ return PyJs.define_own_property(self, prop, new_desc, False)
+ if not old_len_desc['writable']:
+ return False
+ if 'writable' not in new_desc or new_desc['writable'] == True:
+ new_writable = True
+ else:
+ new_writable = False
+ new_desc['writable'] = True
+ if not PyJs.define_own_property(self, prop, new_desc, False):
+ return False
+ if new_len < old_len:
+ # not very efficient for sparse arrays, so using different method for sparse:
+ if old_len > 30 * len(self.own):
+ for ele in self.own.keys():
+ if ele.isdigit() and int(ele) >= new_len:
+ if not self.delete(
+ ele
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = old_len + 1.
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(
+ self, prop, new_desc, False)
+ return False
+ old_len = new_len
+ else: # standard method
+ while new_len < old_len:
+ old_len -= 1
+ if not self.delete(
+ unicode(int(old_len))
+ ): # if failed to delete set len to current len and reject.
+ new_desc['value'] = old_len + 1.
+ if not new_writable:
+ new_desc['writable'] = False
+ PyJs.define_own_property(self, prop, new_desc,
+ False)
+ return False
+ if not new_writable:
+ self.own['length']['writable'] = False
+ return True
+
+ elif prop.isdigit():
+ index = to_uint32(prop)
+ if index >= old_len and not old_len_desc['writable']:
+ return False
+ if not PyJs.define_own_property(self, prop, desc, False):
+ return False
+ if index >= old_len:
+ old_len_desc['value'] = index + 1.
+ return True
+ else:
+ return PyJs.define_own_property(self, prop, desc, False)
+
+ def to_list(self):
+ return [
+ self.get(str(e)) for e in xrange(self.get('length').to_uint32())
+ ]
+
+
+# database with compiled patterns. Js pattern -> Py pattern.
+REGEXP_DB = {}
+
+
+class PyJsRegExp(PyJs):
+ Class = 'RegExp'
+
+ def __init__(self, body, flags, prototype=None):
+ self.prototype = prototype
+ self.glob = True if 'g' in flags else False
+ self.ignore_case = re.IGNORECASE if 'i' in flags else 0
+ self.multiline = re.MULTILINE if 'm' in flags else 0
+ self.value = body
+
+ if (body, flags) in REGEXP_DB:
+ self.pat = REGEXP_DB[body, flags]
+ else:
+ comp = None
+ try:
+ # converting JS regexp pattern to Py pattern.
+ possible_fixes = [(u'[]', u'[\0]'), (u'[^]', u'[^\0]'),
+ (u'nofix1791', u'nofix1791')]
+ reg = self.value
+ for fix, rep in possible_fixes:
+ comp = PyJsParser()._interpret_regexp(reg, flags)
+ #print 'reg -> comp', reg, '->', comp
+ try:
+ self.pat = re.compile(
+ comp, self.ignore_case | self.multiline)
+ #print reg, '->', comp
+ break
+ except:
+ reg = reg.replace(fix, rep)
+ # print 'Fix', fix, '->', rep, '=', reg
+ else:
+ raise Exception()
+ REGEXP_DB[body, flags] = self.pat
+ except:
+ #print 'Invalid pattern...', self.value, comp
+ raise MakeError(
+ 'SyntaxError',
+ 'Invalid RegExp pattern: %s -> %s' % (repr(self.value),
+ repr(comp)))
+ # now set own properties:
+ self.own = {
+ 'source': {
+ 'value': self.value,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ },
+ 'global': {
+ 'value': self.glob,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ },
+ 'ignoreCase': {
+ 'value': bool(self.ignore_case),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ },
+ 'multiline': {
+ 'value': bool(self.multiline),
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ },
+ 'lastIndex': {
+ 'value': 0.,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': False
+ }
+ }
+
+ def match(self, string, pos):
+ '''string is of course a py string'''
+ return self.pat.match(string, int(pos))
+
+
+class PyJsError(PyJs):
+ Class = 'Error'
+ extensible = True
+
+ def __init__(self, message=None, prototype=None):
+ self.prototype = prototype
+ self.own = {}
+ if message is not None:
+ self.put('message', to_string(message))
+ self.own['message']['enumerable'] = False
+
+
+class PyJsDate(PyJs):
+ Class = 'Date'
+ UTCToLocal = None # todo UTC to local should be imported!
+
+ def __init__(self, value, prototype=None):
+ self.value = value
+ self.own = {}
+ self.prototype = prototype
+
+ # todo fix this problematic datetime part
+ def to_local_dt(self):
+ return datetime.datetime.utcfromtimestamp(
+ self.UTCToLocal(self.value) // 1000)
+
+ def to_utc_dt(self):
+ return datetime.datetime.utcfromtimestamp(self.value // 1000)
+
+ def local_strftime(self, pattern):
+ if self.value is NaN:
+ return 'Invalid Date'
+ try:
+ dt = self.to_local_dt()
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'unsupported date range. Will fix in future versions')
+ try:
+ return dt.strftime(pattern)
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'Could not generate date string from this date (limitations of python.datetime)'
+ )
+
+ def utc_strftime(self, pattern):
+ if self.value is NaN:
+ return 'Invalid Date'
+ try:
+ dt = self.to_utc_dt()
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'unsupported date range. Will fix in future versions')
+ try:
+ return dt.strftime(pattern)
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'Could not generate date string from this date (limitations of python.datetime)'
+ )
+
+
+# Scope class it will hold all the variables accessible to user
+class Scope(PyJs):
+ Class = 'Global'
+ extensible = True
+ IS_CHILD_SCOPE = True
+ THIS_BINDING = None
+ space = None
+ exe = None
+
+ # todo speed up!
+ # in order to speed up this very important class the top scope should behave differently than
+ # child scopes, child scope should not have this property descriptor thing because they cant be changed anyway
+ # they are all confugurable= False
+
+ def __init__(self, scope, space, parent=None):
+ """Doc"""
+ self.space = space
+ self.prototype = parent
+ if type(scope) is not dict:
+ assert parent is not None, 'You initialised the WITH_SCOPE without a parent scope.'
+ self.own = scope
+ self.is_with_scope = True
+ else:
+ self.is_with_scope = False
+ if parent is None:
+ # global, top level scope
+ self.own = {}
+ for k, v in six.iteritems(scope):
+ # set all the global items
+ self.define_own_property(
+ k, {
+ 'value': v,
+ 'configurable': False,
+ 'writable': False,
+ 'enumerable': False
+ }, False)
+ else:
+ # not global, less powerful but faster closure.
+ self.own = scope # simple dictionary which maps name directly to js object.
+
+ self.par = super(Scope, self)
+ self.stack = []
+
+ def register(self, var):
+ # registered keeps only global registered variables
+ if self.prototype is None:
+ # define in global scope
+ if var in self.own:
+ self.own[var]['configurable'] = False
+ else:
+ self.define_own_property(
+ var, {
+ 'value': undefined,
+ 'configurable': False,
+ 'writable': True,
+ 'enumerable': True
+ }, False)
+ elif var not in self.own:
+ # define in local scope since it has not been defined yet
+ self.own[var] = undefined # default value
+
+ def registers(self, vars):
+ """register multiple variables"""
+ for var in vars:
+ self.register(var)
+
+ def put(self, var, val, throw=False):
+ if self.prototype is None:
+ desc = self.own.get(var) # global scope
+ if desc is None:
+ self.par.put(var, val, False)
+ else:
+ if desc['writable']: # todo consider getters/setters
+ desc['value'] = val
+ else:
+ if self.is_with_scope:
+ if self.own.has_property(var):
+ return self.own.put(var, val, throw=throw)
+ else:
+ return self.prototype.put(var, val)
+ # trying to put in local scope
+ # we dont know yet in which scope we should place this var
+ elif var in self.own:
+ self.own[var] = val
+ return val
+ else:
+ # try to put in the lower scope since we cant put in this one (var wasn't registered)
+ return self.prototype.put(var, val)
+
+ def get(self, var, throw=False):
+ if self.prototype is not None:
+ if self.is_with_scope:
+ cand = None if not self.own.has_property(
+ var) else self.own.get(var)
+ else:
+ # fast local scope
+ cand = self.own.get(var)
+ if cand is None:
+ return self.prototype.get(var, throw)
+ return cand
+ # slow, global scope
+ if var not in self.own:
+ # try in ObjectPrototype...
+ if var in self.space.ObjectPrototype.own:
+ return self.space.ObjectPrototype.get(var)
+ if throw:
+ raise MakeError('ReferenceError', '%s is not defined' % var)
+ return undefined
+ cand = self.own[var].get('value')
+ return cand if cand is not None else self.own[var]['get'].call(self)
+
+ def delete(self, var, throw=False):
+ if self.prototype is not None:
+ if self.is_with_scope:
+ if self.own.has_property(var):
+ return self.own.delete(var)
+ elif var in self.own:
+ return False
+ return self.prototype.delete(var)
+ # we are in global scope here. Must exist and be configurable to delete
+ if var not in self.own:
+ # this var does not exist, why do you want to delete it???
+ return True
+ if self.own[var]['configurable']:
+ del self.own[var]
+ return True
+ # not configurable, cant delete
+ return False
+
+
+def get_new_arguments_obj(args, space):
+ obj = space.NewObject()
+ obj.Class = 'Arguments'
+ obj.define_own_property(
+ 'length', {
+ 'value': float(len(args)),
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': True
+ }, False)
+ for i, e in enumerate(args):
+ obj.put(unicode(i), e)
+ return obj
+
+
+#Function
+class PyJsFunction(PyJs):
+ Class = 'Function'
+ source = '{ [native code] }'
+ IS_CONSTRUCTOR = True
+
+ def __init__(self,
+ code,
+ ctx,
+ params,
+ name,
+ space,
+ is_declaration,
+ definitions,
+ prototype=None):
+ self.prototype = prototype
+ self.own = {}
+
+ self.code = code
+ if type(
+ self.code
+ ) == int: # just a label pointing to the beginning of the code.
+ self.is_native = False
+ else:
+ self.is_native = True # python function
+
+ self.ctx = ctx
+
+ self.params = params
+ self.arguments_in_params = 'arguments' in params
+ self.definitions = definitions
+
+ # todo remove this check later
+ for p in params:
+ assert p in self.definitions
+
+ self.name = name
+ self.space = space
+ self.is_declaration = is_declaration
+
+ #set own property length to the number of arguments
+ self.own['length'] = {
+ 'value': float(len(params)),
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': False
+ }
+
+ if name:
+ self.own['name'] = {
+ 'value': name,
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': True
+ }
+
+ if not self.is_native: # set prototype for user defined functions
+ # constructor points to this function
+ proto = space.NewObject()
+ proto.own['constructor'] = {
+ 'value': self,
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': True
+ }
+ self.own['prototype'] = {
+ 'value': proto,
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': False
+ }
+ # todo set up throwers on callee and arguments if in strict mode
+
+ def call(self, this, args=()):
+ ''' Dont use this method from inside bytecode to call other bytecode. '''
+ if self.is_native:
+ _args = SpaceTuple(
+ args
+ ) # we have to do that unfortunately to pass all the necessary info to the funcs
+ _args.space = self.space
+ return self.code(
+ this, _args
+ ) # must return valid js object - undefined, null, float, unicode, bool, or PyJs
+ else:
+ return self.space.exe._call(self, this,
+ args) # will run inside bytecode
+
+ def has_instance(self, other):
+ # I am not sure here so instanceof may not work lol.
+ if not is_object(other):
+ return False
+ proto = self.get('prototype')
+ if not is_object(proto):
+ raise MakeError(
+ 'TypeError',
+ 'Function has non-object prototype in instanceof check')
+ while True:
+ other = other.prototype
+ if not other: # todo make sure that the condition is not None or null
+ return False
+ if other is proto:
+ return True
+
+ def create(self, args, space):
+ proto = self.get('prototype')
+ if not is_object(proto):
+ proto = space.ObjectPrototype
+ new = PyJsObject(prototype=proto)
+ res = self.call(new, args)
+ if is_object(res):
+ return res
+ return new
+
+ def _generate_my_context(self, this, args):
+ my_ctx = Scope(
+ dict(izip(self.params, args)), self.space, parent=self.ctx)
+ my_ctx.registers(self.definitions)
+ my_ctx.THIS_BINDING = this
+ if not self.arguments_in_params:
+ my_ctx.own['arguments'] = get_new_arguments_obj(args, self.space)
+ if not self.is_declaration and self.name and self.name not in my_ctx.own:
+ my_ctx.own[
+ self.
+ name] = self # this should be immutable binding but come on!
+ return my_ctx
+
+
+class SpaceTuple:
+ def __init__(self, tup):
+ self.tup = tup
+
+ def __len__(self):
+ return len(self.tup)
+
+ def __getitem__(self, item):
+ return self.tup[item]
+
+ def __iter__(self):
+ return iter(self.tup)
diff --git a/Contents/Libraries/Shared/js2py/internals/byte_trans.py b/Contents/Libraries/Shared/js2py/internals/byte_trans.py
new file mode 100644
index 000000000..e32bcb1e2
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/byte_trans.py
@@ -0,0 +1,753 @@
+from .code import Code
+from .simplex import MakeError
+from .opcodes import *
+from .operations import *
+from .trans_utils import *
+
+SPECIAL_IDENTIFIERS = {'true', 'false', 'this'}
+
+
+class ByteCodeGenerator:
+ def __init__(self, exe):
+ self.exe = exe
+
+ self.declared_continue_labels = {}
+ self.declared_break_labels = {}
+
+ self.implicit_breaks = []
+ self.implicit_continues = []
+
+ self.declared_vars = []
+
+ self.function_declaration_tape = []
+
+ self.states = []
+
+ def record_state(self):
+ self.states.append(
+ (self.declared_continue_labels, self.declared_break_labels,
+ self.implicit_breaks, self.implicit_continues, self.declared_vars,
+ self.function_declaration_tape))
+ self.declared_continue_labels, self.declared_break_labels, \
+ self.implicit_breaks, self.implicit_continues, \
+ self.declared_vars, self.function_declaration_tape = {}, {}, [], [], [], []
+
+ def restore_state(self):
+ self.declared_continue_labels, self.declared_break_labels, \
+ self.implicit_breaks, self.implicit_continues, \
+ self.declared_vars, self.function_declaration_tape = self.states.pop()
+
+ def ArrayExpression(self, elements, **kwargs):
+ for e in elements:
+ if e is None:
+ self.emit('LOAD_NONE')
+ else:
+ self.emit(e)
+ self.emit('LOAD_ARRAY', len(elements))
+
+ def AssignmentExpression(self, operator, left, right, **kwargs):
+ operator = operator[:-1]
+ if left['type'] == 'MemberExpression':
+ self.emit(left['object'])
+ if left['computed']:
+ self.emit(left['property'])
+ self.emit(right)
+ if operator:
+ self.emit('STORE_MEMBER_OP', operator)
+ else:
+ self.emit('STORE_MEMBER')
+ else:
+ self.emit(right)
+ if operator:
+ self.emit('STORE_MEMBER_DOT_OP', left['property']['name'],
+ operator)
+ else:
+ self.emit('STORE_MEMBER_DOT', left['property']['name'])
+ elif left['type'] == 'Identifier':
+ if left['name'] in SPECIAL_IDENTIFIERS:
+ raise MakeError('SyntaxError',
+ 'Invalid left-hand side in assignment')
+ self.emit(right)
+ if operator:
+ self.emit('STORE_OP', left['name'], operator)
+ else:
+ self.emit('STORE', left['name'])
+ else:
+ raise MakeError('SyntaxError',
+ 'Invalid left-hand side in assignment')
+
+ def BinaryExpression(self, operator, left, right, **kwargs):
+ self.emit(left)
+ self.emit(right)
+ self.emit('BINARY_OP', operator)
+
+ def BlockStatement(self, body, **kwargs):
+ self._emit_statement_list(body)
+
+ def BreakStatement(self, label, **kwargs):
+ if label is None:
+ self.emit('JUMP', self.implicit_breaks[-1])
+ else:
+ label = label.get('name')
+ if label not in self.declared_break_labels:
+ raise MakeError('SyntaxError',
+ 'Undefined label \'%s\'' % label)
+ else:
+ self.emit('JUMP', self.declared_break_labels[label])
+
+ def CallExpression(self, callee, arguments, **kwargs):
+ if callee['type'] == 'MemberExpression':
+ self.emit(callee['object'])
+ if callee['computed']:
+ self.emit(callee['property'])
+ if arguments:
+ for e in arguments:
+ self.emit(e)
+ self.emit('LOAD_N_TUPLE', len(arguments))
+ self.emit('CALL_METHOD')
+ else:
+ self.emit('CALL_METHOD_NO_ARGS')
+ else:
+ prop_name = to_key(callee['property'])
+ if arguments:
+ for e in arguments:
+ self.emit(e)
+ self.emit('LOAD_N_TUPLE', len(arguments))
+ self.emit('CALL_METHOD_DOT', prop_name)
+ else:
+ self.emit('CALL_METHOD_DOT_NO_ARGS', prop_name)
+ else:
+ self.emit(callee)
+ if arguments:
+ for e in arguments:
+ self.emit(e)
+ self.emit('LOAD_N_TUPLE', len(arguments))
+ self.emit('CALL')
+ else:
+ self.emit('CALL_NO_ARGS')
+
+ def ClassBody(self, body, **kwargs):
+ raise NotImplementedError('Not available in ECMA 5.1')
+
+ def ClassDeclaration(self, id, superClass, body, **kwargs):
+ raise NotImplementedError('Not available in ECMA 5.1')
+
+ def ClassExpression(self, id, superClass, body, **kwargs):
+ raise NotImplementedError('Classes not available in ECMA 5.1')
+
+ def ConditionalExpression(self, test, consequent, alternate, **kwargs):
+ alt = self.exe.get_new_label()
+ end = self.exe.get_new_label()
+ # ?
+ self.emit(test)
+ self.emit('JUMP_IF_FALSE', alt)
+ # first val
+ self.emit(consequent)
+ self.emit('JUMP', end)
+ # second val
+ self.emit('LABEL', alt)
+ self.emit(alternate)
+ # end of ?: statement
+ self.emit('LABEL', end)
+
+ def ContinueStatement(self, label, **kwargs):
+ if label is None:
+ self.emit('JUMP', self.implicit_continues[-1])
+ else:
+ label = label.get('name')
+ if label not in self.declared_continue_labels:
+ raise MakeError('SyntaxError',
+ 'Undefined label \'%s\'' % label)
+ else:
+ self.emit('JUMP', self.declared_continue_labels[label])
+
+ def DebuggerStatement(self, **kwargs):
+ self.EmptyStatement(**kwargs)
+
+ def DoWhileStatement(self, body, test, **kwargs):
+ continue_label = self.exe.get_new_label()
+ break_label = self.exe.get_new_label()
+ initial_do = self.exe.get_new_label()
+
+ self.emit('JUMP', initial_do)
+ self.emit('LABEL', continue_label)
+ self.emit(test)
+ self.emit('JUMP_IF_FALSE', break_label)
+ self.emit('LABEL', initial_do)
+
+ # translate the body, remember to add and afterwards remove implicit break/continue labels
+
+ self.implicit_continues.append(continue_label)
+ self.implicit_breaks.append(break_label)
+ self.emit(body)
+ self.implicit_continues.pop()
+ self.implicit_breaks.pop()
+
+ self.emit('JUMP', continue_label) # loop back
+ self.emit('LABEL', break_label)
+
+ def EmptyStatement(self, **kwargs):
+ # do nothing
+ pass
+
+ def ExpressionStatement(self, expression, **kwargs):
+ # change the final stack value
+ # pop the previous value and execute expression
+ self.emit('POP')
+ self.emit(expression)
+
+ def ForStatement(self, init, test, update, body, **kwargs):
+ continue_label = self.exe.get_new_label()
+ break_label = self.exe.get_new_label()
+ first_start = self.exe.get_new_label()
+
+ if init is not None:
+ self.emit(init)
+ if init['type'] != 'VariableDeclaration':
+ self.emit('POP')
+
+ # skip first update and go straight to test
+ self.emit('JUMP', first_start)
+
+ self.emit('LABEL', continue_label)
+ if update:
+ self.emit(update)
+ self.emit('POP')
+ self.emit('LABEL', first_start)
+ if test:
+ self.emit(test)
+ self.emit('JUMP_IF_FALSE', break_label)
+
+ # translate the body, remember to add and afterwards to remove implicit break/continue labels
+
+ self.implicit_continues.append(continue_label)
+ self.implicit_breaks.append(break_label)
+ self.emit(body)
+ self.implicit_continues.pop()
+ self.implicit_breaks.pop()
+
+ self.emit('JUMP', continue_label) # loop back
+ self.emit('LABEL', break_label)
+
+ def ForInStatement(self, left, right, body, **kwargs):
+ # prepare the needed labels
+ body_start_label = self.exe.get_new_label()
+ continue_label = self.exe.get_new_label()
+ break_label = self.exe.get_new_label()
+
+ # prepare the name
+ if left['type'] == 'VariableDeclaration':
+ if len(left['declarations']) != 1:
+ raise MakeError(
+ 'SyntaxError',
+ ' Invalid left-hand side in for-in loop: Must have a single binding.'
+ )
+ self.emit(left)
+ name = left['declarations'][0]['id']['name']
+ elif left['type'] == 'Identifier':
+ name = left['name']
+ else:
+ raise MakeError('SyntaxError',
+ 'Invalid left-hand side in for-loop')
+
+ # prepare the iterable
+ self.emit(right)
+
+ # emit ForIn Opcode
+ self.emit('FOR_IN', name, body_start_label, continue_label,
+ break_label)
+
+ # a special continue position
+ self.emit('LABEL', continue_label)
+ self.emit('NOP')
+
+ self.emit('LABEL', body_start_label)
+ self.implicit_continues.append(continue_label)
+ self.implicit_breaks.append(break_label)
+ self.emit('LOAD_UNDEFINED')
+ self.emit(body)
+ self.implicit_continues.pop()
+ self.implicit_breaks.pop()
+ self.emit('NOP')
+ self.emit('LABEL', break_label)
+ self.emit('NOP')
+
+ def FunctionDeclaration(self, id, params, defaults, body, **kwargs):
+ if defaults:
+ raise NotImplementedError('Defaults not available in ECMA 5.1')
+
+ # compile function
+ self.record_state(
+ ) # cleans translator state and appends it to the stack so that it can be later restored
+ function_start = self.exe.get_new_label()
+ function_declarations = self.exe.get_new_label()
+ declarations_done = self.exe.get_new_label(
+ ) # put jump to this place at the and of function tape!
+ function_end = self.exe.get_new_label()
+
+ # skip the function if encountered externally
+ self.emit('JUMP', function_end)
+
+ self.emit('LABEL', function_start)
+ # call is made with empty stack so load undefined to fill it
+ self.emit('LOAD_UNDEFINED')
+ # declare all functions
+ self.emit('JUMP', function_declarations)
+ self.emit('LABEL', declarations_done)
+ self.function_declaration_tape.append(LABEL(function_declarations))
+
+ self.emit(body)
+ self.ReturnStatement(None)
+
+ self.function_declaration_tape.append(JUMP(declarations_done))
+ self.exe.tape.extend(self.function_declaration_tape)
+
+ self.emit('LABEL', function_end)
+ declared_vars = self.declared_vars
+ self.restore_state()
+
+ # create function object and append to stack
+ name = id.get('name')
+ assert name is not None
+ self.declared_vars.append(name)
+ self.function_declaration_tape.append(
+ LOAD_FUNCTION(function_start, tuple(p['name'] for p in params),
+ name, True, tuple(declared_vars)))
+ self.function_declaration_tape.append(STORE(name))
+ self.function_declaration_tape.append(POP())
+
+ def FunctionExpression(self, id, params, defaults, body, **kwargs):
+ if defaults:
+ raise NotImplementedError('Defaults not available in ECMA 5.1')
+
+ # compile function
+ self.record_state(
+ ) # cleans translator state and appends it to the stack so that it can be later restored
+ function_start = self.exe.get_new_label()
+ function_declarations = self.exe.get_new_label()
+ declarations_done = self.exe.get_new_label(
+ ) # put jump to this place at the and of function tape!
+ function_end = self.exe.get_new_label()
+
+ # skip the function if encountered externally
+ self.emit('JUMP', function_end)
+
+ self.emit('LABEL', function_start)
+ # call is made with empty stack so load undefined to fill it
+ self.emit('LOAD_UNDEFINED')
+ # declare all functions
+ self.emit('JUMP', function_declarations)
+ self.emit('LABEL', declarations_done)
+ self.function_declaration_tape.append(LABEL(function_declarations))
+
+ self.emit(body)
+ self.ReturnStatement(None)
+
+ self.function_declaration_tape.append(JUMP(declarations_done))
+ self.exe.tape.extend(self.function_declaration_tape)
+
+ self.emit('LABEL', function_end)
+ declared_vars = self.declared_vars
+ self.restore_state()
+
+ # create function object and append to stack
+ name = id.get('name') if id else None
+ self.emit('LOAD_FUNCTION', function_start,
+ tuple(p['name'] for p in params), name, False,
+ tuple(declared_vars))
+
+ def Identifier(self, name, **kwargs):
+ if name == 'true':
+ self.emit('LOAD_BOOLEAN', 1)
+ elif name == 'false':
+ self.emit('LOAD_BOOLEAN', 0)
+ elif name == 'undefined':
+ self.emit('LOAD_UNDEFINED')
+ else:
+ self.emit('LOAD', name)
+
+ def IfStatement(self, test, consequent, alternate, **kwargs):
+ alt = self.exe.get_new_label()
+ end = self.exe.get_new_label()
+ # if
+ self.emit(test)
+ self.emit('JUMP_IF_FALSE', alt)
+ # consequent
+ self.emit(consequent)
+ self.emit('JUMP', end)
+ # alternate
+ self.emit('LABEL', alt)
+ if alternate is not None:
+ self.emit(alternate)
+ # end of if statement
+ self.emit('LABEL', end)
+
+ def LabeledStatement(self, label, body, **kwargs):
+ label = label['name']
+ if body['type'] in ('WhileStatement', 'DoWhileStatement',
+ 'ForStatement', 'ForInStatement'):
+ # Continue label available... Simply take labels defined by the loop.
+ # It is important that they request continue label first
+ self.declared_continue_labels[label] = self.exe._label_count + 1
+ self.declared_break_labels[label] = self.exe._label_count + 2
+ self.emit(body)
+ del self.declared_break_labels[label]
+ del self.declared_continue_labels[label]
+ else:
+ # only break label available
+ lbl = self.exe.get_new_label()
+ self.declared_break_labels[label] = lbl
+ self.emit(body)
+ self.emit('LABEL', lbl)
+ del self.declared_break_labels[label]
+
+ def Literal(self, value, **kwargs):
+ if value is None:
+ self.emit('LOAD_NULL')
+ elif isinstance(value, bool):
+ self.emit('LOAD_BOOLEAN', int(value))
+ elif isinstance(value, basestring):
+ self.emit('LOAD_STRING', unicode(value))
+ elif isinstance(value, (float, int, long)):
+ self.emit('LOAD_NUMBER', float(value))
+ elif isinstance(value, tuple):
+ self.emit('LOAD_REGEXP', *value)
+ else:
+ raise RuntimeError('Unsupported literal')
+
+ def LogicalExpression(self, left, right, operator, **kwargs):
+ end = self.exe.get_new_label()
+ if operator == '&&':
+ # AND
+ self.emit(left)
+ self.emit('JUMP_IF_FALSE_WITHOUT_POP', end)
+ self.emit('POP')
+ self.emit(right)
+ self.emit('LABEL', end)
+ elif operator == '||':
+ # OR
+ self.emit(left)
+ self.emit('JUMP_IF_TRUE_WITHOUT_POP', end)
+ self.emit('POP')
+ self.emit(right)
+ self.emit('LABEL', end)
+ else:
+ raise RuntimeError("Unknown logical expression: %s" % operator)
+
+ def MemberExpression(self, computed, object, property, **kwargs):
+ if computed:
+ self.emit(object)
+ self.emit(property)
+ self.emit('LOAD_MEMBER')
+ else:
+ self.emit(object)
+ self.emit('LOAD_MEMBER_DOT', property['name'])
+
+ def NewExpression(self, callee, arguments, **kwargs):
+ self.emit(callee)
+ if arguments:
+ n = len(arguments)
+ for e in arguments:
+ self.emit(e)
+ self.emit('LOAD_N_TUPLE', n)
+ self.emit('NEW')
+ else:
+ self.emit('NEW_NO_ARGS')
+
+ def ObjectExpression(self, properties, **kwargs):
+ data = []
+ for prop in properties:
+ self.emit(prop['value'])
+ if prop['computed']:
+ raise NotImplementedError(
+ 'ECMA 5.1 does not support computed object properties!')
+ data.append((to_key(prop['key']), prop['kind'][0]))
+ self.emit('LOAD_OBJECT', tuple(data))
+
+ def Program(self, body, **kwargs):
+ old_tape_len = len(self.exe.tape)
+ self.emit('LOAD_UNDEFINED')
+ self.emit(body)
+ # add function tape !
+ self.exe.tape = self.exe.tape[:old_tape_len] + self.function_declaration_tape + self.exe.tape[old_tape_len:]
+
+ def Pyimport(self, imp, **kwargs):
+ raise NotImplementedError(
+ 'Not available for bytecode interpreter yet, use the Js2Py translator.'
+ )
+
+ def Property(self, kind, key, computed, value, method, shorthand,
+ **kwargs):
+ raise NotImplementedError('Not available in ECMA 5.1')
+
+ def RestElement(self, argument, **kwargs):
+ raise NotImplementedError('Not available in ECMA 5.1')
+
+ def ReturnStatement(self, argument, **kwargs):
+ self.emit('POP') # pop result of expression statements
+ if argument is None:
+ self.emit('LOAD_UNDEFINED')
+ else:
+ self.emit(argument)
+ self.emit('RETURN')
+
+ def SequenceExpression(self, expressions, **kwargs):
+ for e in expressions:
+ self.emit(e)
+ self.emit('POP')
+ del self.exe.tape[-1]
+
+ def SwitchCase(self, test, consequent, **kwargs):
+ raise NotImplementedError('Already implemented in SwitchStatement')
+
+ def SwitchStatement(self, discriminant, cases, **kwargs):
+ self.emit(discriminant)
+ labels = [self.exe.get_new_label() for case in cases]
+ tests = [case['test'] for case in cases]
+ consequents = [case['consequent'] for case in cases]
+ end_of_switch = self.exe.get_new_label()
+
+ # translate test cases
+ for test, label in zip(tests, labels):
+ if test is not None:
+ self.emit(test)
+ self.emit('JUMP_IF_EQ', label)
+ else:
+ self.emit('POP')
+ self.emit('JUMP', label)
+ # this will be executed if none of the cases worked
+ self.emit('POP')
+ self.emit('JUMP', end_of_switch)
+
+ # translate consequents
+ self.implicit_breaks.append(end_of_switch)
+ for consequent, label in zip(consequents, labels):
+ self.emit('LABEL', label)
+ self._emit_statement_list(consequent)
+ self.implicit_breaks.pop()
+
+ self.emit('LABEL', end_of_switch)
+
+ def ThisExpression(self, **kwargs):
+ self.emit('LOAD_THIS')
+
+ def ThrowStatement(self, argument, **kwargs):
+ # throw with the empty stack
+ self.emit('POP')
+ self.emit(argument)
+ self.emit('THROW')
+
+ def TryStatement(self, block, handler, finalizer, **kwargs):
+ try_label = self.exe.get_new_label()
+ catch_label = self.exe.get_new_label()
+ finally_label = self.exe.get_new_label()
+ end_label = self.exe.get_new_label()
+
+ self.emit('JUMP', end_label)
+
+ # try block
+ self.emit('LABEL', try_label)
+ self.emit('LOAD_UNDEFINED')
+ self.emit(block)
+ self.emit(
+ 'NOP'
+ ) # needed to distinguish from break/continue vs some internal jumps
+
+ # catch block
+ self.emit('LABEL', catch_label)
+ self.emit('LOAD_UNDEFINED')
+ if handler:
+ self.emit(handler['body'])
+ self.emit('NOP')
+
+ # finally block
+ self.emit('LABEL', finally_label)
+ self.emit('LOAD_UNDEFINED')
+ if finalizer:
+ self.emit(finalizer)
+ self.emit('NOP')
+
+ self.emit('LABEL', end_label)
+
+ # give life to the code
+ self.emit('TRY_CATCH_FINALLY', try_label, catch_label,
+ handler['param']['name'] if handler else None, finally_label,
+ bool(finalizer), end_label)
+
+ def UnaryExpression(self, operator, argument, **kwargs):
+ if operator == 'typeof' and argument[
+ 'type'] == 'Identifier': # todo fix typeof
+ self.emit('TYPEOF', argument['name'])
+ elif operator == 'delete':
+ if argument['type'] == 'MemberExpression':
+ self.emit(argument['object'])
+ if argument['property']['type'] == 'Identifier':
+ self.emit('LOAD_STRING',
+ unicode(argument['property']['name']))
+ else:
+ self.emit(argument['property'])
+ self.emit('DELETE_MEMBER')
+ elif argument['type'] == 'Identifier':
+ self.emit('DELETE', argument['name'])
+ else:
+ self.emit('LOAD_BOOLEAN', 1)
+ elif operator in UNARY_OPERATIONS:
+ self.emit(argument)
+ self.emit('UNARY_OP', operator)
+ else:
+ raise MakeError('SyntaxError',
+ 'Unknown unary operator %s' % operator)
+
+ def UpdateExpression(self, operator, argument, prefix, **kwargs):
+ incr = int(operator == "++")
+ post = int(not prefix)
+ if argument['type'] == 'MemberExpression':
+ if argument['computed']:
+ self.emit(argument['object'])
+ self.emit(argument['property'])
+ self.emit('POSTFIX_MEMBER', post, incr)
+ else:
+ self.emit(argument['object'])
+ name = to_key(argument['property'])
+ self.emit('POSTFIX_MEMBER_DOT', post, incr, name)
+ elif argument['type'] == 'Identifier':
+ name = to_key(argument)
+ self.emit('POSTFIX', post, incr, name)
+ else:
+ raise MakeError('SyntaxError',
+ 'Invalid left-hand side in assignment')
+
+ def VariableDeclaration(self, declarations, kind, **kwargs):
+ if kind != 'var':
+ raise NotImplementedError(
+ 'Only var variable declaration is supported by ECMA 5.1')
+ for d in declarations:
+ self.emit(d)
+
+ def LexicalDeclaration(self, declarations, kind, **kwargs):
+ raise NotImplementedError('Not supported by ECMA 5.1')
+
+ def VariableDeclarator(self, id, init, **kwargs):
+ name = id['name']
+ if name in SPECIAL_IDENTIFIERS:
+ raise MakeError('Invalid left-hand side in assignment')
+ self.declared_vars.append(name)
+ if init is not None:
+ self.emit(init)
+ self.emit('STORE', name)
+ self.emit('POP')
+
+ def WhileStatement(self, test, body, **kwargs):
+ continue_label = self.exe.get_new_label()
+ break_label = self.exe.get_new_label()
+
+ self.emit('LABEL', continue_label)
+ self.emit(test)
+ self.emit('JUMP_IF_FALSE', break_label)
+
+ # translate the body, remember to add and afterwards remove implicit break/continue labels
+
+ self.implicit_continues.append(continue_label)
+ self.implicit_breaks.append(break_label)
+ self.emit(body)
+ self.implicit_continues.pop()
+ self.implicit_breaks.pop()
+
+ self.emit('JUMP', continue_label) # loop back
+ self.emit('LABEL', break_label)
+
+ def WithStatement(self, object, body, **kwargs):
+ beg_label = self.exe.get_new_label()
+ end_label = self.exe.get_new_label()
+ # scope
+ self.emit(object)
+
+ # now the body
+ self.emit('JUMP', end_label)
+ self.emit('LABEL', beg_label)
+ self.emit('LOAD_UNDEFINED')
+ self.emit(body)
+ self.emit('NOP')
+ self.emit('LABEL', end_label)
+
+ # with statement implementation
+ self.emit('WITH', beg_label, end_label)
+
+ def _emit_statement_list(self, statements):
+ for statement in statements:
+ self.emit(statement)
+
+ def emit(self, what, *args):
+ ''' what can be either name of the op, or node, or a list of statements.'''
+ if isinstance(what, basestring):
+ return self.exe.emit(what, *args)
+ elif isinstance(what, list):
+ self._emit_statement_list(what)
+ else:
+ return getattr(self, what['type'])(**what)
+
+
+import os, codecs
+
+
+def path_as_local(path):
+ if os.path.isabs(path):
+ return path
+ # relative to cwd
+ return os.path.join(os.getcwd(), path)
+
+
+def get_file_contents(path_or_file):
+ if hasattr(path_or_file, 'read'):
+ js = path_or_file.read()
+ else:
+ with codecs.open(path_as_local(path_or_file), "r", "utf-8") as f:
+ js = f.read()
+ return js
+
+
+def main():
+ from space import Space
+ import fill_space
+
+ from pyjsparser import parse
+ import json
+ a = ByteCodeGenerator(Code())
+
+ s = Space()
+ fill_space.fill_space(s, a)
+
+ a.exe.space = s
+ s.exe = a.exe
+ con = get_file_contents('internals/esprima.js')
+ d = parse(con + (
+ ''';JSON.stringify(exports.parse(%s), 4, 4)''' % json.dumps(con)))
+ # d = parse('''
+ # function x(n) {
+ # log(n)
+ # return x(n+1)
+ # }
+ # x(0)
+ # ''')
+
+ # var v = 333333;
+ # while (v) {
+ # v--
+ #
+ # }
+ a.emit(d)
+ print(a.declared_vars)
+ print(a.exe.tape)
+ print(len(a.exe.tape))
+
+ a.exe.compile()
+
+ def log(this, args):
+ print(args[0])
+ return 999
+
+ print(a.exe.run(a.exe.space.GlobalObj))
+
+
+if __name__ == '__main__':
+ main()
diff --git a/Contents/Libraries/Shared/js2py/internals/code.py b/Contents/Libraries/Shared/js2py/internals/code.py
new file mode 100644
index 000000000..9af0e602b
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/code.py
@@ -0,0 +1,227 @@
+from .opcodes import *
+from .space import *
+from .base import *
+
+
+class Code:
+ '''Can generate, store and run sequence of ops representing js code'''
+
+ def __init__(self, is_strict=False, debug_mode=False):
+ self.tape = []
+ self.compiled = False
+ self.label_locs = None
+ self.is_strict = is_strict
+ self.debug_mode = debug_mode
+
+ self.contexts = []
+ self.current_ctx = None
+ self.return_locs = []
+ self._label_count = 0
+ self.label_locs = None
+
+ # useful references
+ self.GLOBAL_THIS = None
+ self.space = None
+
+ # dbg
+ self.ctx_depth = 0
+
+
+ def get_new_label(self):
+ self._label_count += 1
+ return self._label_count
+
+ def emit(self, op_code, *args):
+ ''' Adds op_code with specified args to tape '''
+ self.tape.append(OP_CODES[op_code](*args))
+
+ def compile(self, start_loc=0):
+ ''' Records locations of labels and compiles the code '''
+ self.label_locs = {} if self.label_locs is None else self.label_locs
+ loc = start_loc
+ while loc < len(self.tape):
+ if type(self.tape[loc]) == LABEL:
+ self.label_locs[self.tape[loc].num] = loc
+ del self.tape[loc]
+ continue
+ loc += 1
+ self.compiled = True
+
+ def _call(self, func, this, args):
+ ''' Calls a bytecode function func
+ NOTE: use !ONLY! when calling functions from native methods! '''
+ assert not func.is_native
+ # fake call - the the runner to return to the end of the file
+ old_contexts = self.contexts
+ old_return_locs = self.return_locs
+ old_curr_ctx = self.current_ctx
+
+ self.contexts = [FakeCtx()]
+ self.return_locs = [len(self.tape)] # target line after return
+
+ # prepare my ctx
+ my_ctx = func._generate_my_context(this, args)
+ self.current_ctx = my_ctx
+
+ # execute dunction
+ ret = self.run(my_ctx, starting_loc=self.label_locs[func.code])
+
+ # bring back old execution
+ self.current_ctx = old_curr_ctx
+ self.contexts = old_contexts
+ self.return_locs = old_return_locs
+
+ return ret
+
+ def execute_fragment_under_context(self, ctx, start_label, end_label):
+ ''' just like run but returns if moved outside of the specified fragment
+ # 4 different exectution results
+ # 0=normal, 1=return, 2=jump_outside, 3=errors
+ # execute_fragment_under_context returns:
+ # (return_value, typ, return_value/jump_loc/py_error)
+ # IMPARTANT: It is guaranteed that the length of the ctx.stack is unchanged.
+ '''
+ old_curr_ctx = self.current_ctx
+ self.ctx_depth += 1
+ old_stack_len = len(ctx.stack)
+ old_ret_len = len(self.return_locs)
+ old_ctx_len = len(self.contexts)
+ try:
+ self.current_ctx = ctx
+ return self._execute_fragment_under_context(
+ ctx, start_label, end_label)
+ except JsException as err:
+ if self.debug_mode:
+ self._on_fragment_exit("js errors")
+ # undo the things that were put on the stack (if any) to ensure a proper error recovery
+ del ctx.stack[old_stack_len:]
+ del self.return_locs[old_ret_len:]
+ del self.contexts[old_ctx_len :]
+ return undefined, 3, err
+ finally:
+ self.ctx_depth -= 1
+ self.current_ctx = old_curr_ctx
+ assert old_stack_len == len(ctx.stack)
+
+ def _get_dbg_indent(self):
+ return self.ctx_depth * ' '
+
+ def _on_fragment_exit(self, mode):
+ print(self._get_dbg_indent() + 'ctx exit (%s)' % mode)
+
+ def _execute_fragment_under_context(self, ctx, start_label, end_label):
+ start, end = self.label_locs[start_label], self.label_locs[end_label]
+ initial_len = len(ctx.stack)
+ loc = start
+ entry_level = len(self.contexts)
+ # for e in self.tape[start:end]:
+ # print e
+ if self.debug_mode:
+ print(self._get_dbg_indent() + 'ctx entry (from:%d, to:%d)' % (start, end))
+ while loc < len(self.tape):
+ if len(self.contexts) == entry_level and loc >= end:
+ if self.debug_mode:
+ self._on_fragment_exit('normal')
+ assert loc == end
+ delta_stack = len(ctx.stack) - initial_len
+ assert delta_stack == +1, 'Stack change must be equal to +1! got %d' % delta_stack
+ return ctx.stack.pop(), 0, None # means normal return
+
+ # execute instruction
+ if self.debug_mode:
+ print(self._get_dbg_indent() + str(loc), self.tape[loc])
+ status = self.tape[loc].eval(ctx)
+
+ # check status for special actions
+ if status is not None:
+ if type(status) == int: # jump to label
+ loc = self.label_locs[status]
+ if len(self.contexts) == entry_level:
+ # check if jumped outside of the fragment and break if so
+ if not start <= loc < end:
+ if self.debug_mode:
+ self._on_fragment_exit('jump outside loc:%d label:%d' % (loc, status))
+ delta_stack = len(ctx.stack) - initial_len
+ assert delta_stack == +1, 'Stack change must be equal to +1! got %d' % delta_stack
+ return ctx.stack.pop(), 2, status # jump outside
+ continue
+
+ elif len(status) == 2: # a call or a return!
+ # call: (new_ctx, func_loc_label_num)
+ if status[0] is not None:
+ # append old state to the stack
+ self.contexts.append(ctx)
+ self.return_locs.append(loc + 1)
+ # set new state
+ loc = self.label_locs[status[1]]
+ ctx = status[0]
+ self.current_ctx = ctx
+ continue
+
+ # return: (None, None)
+ else:
+ if len(self.contexts) == entry_level:
+ if self.debug_mode:
+ self._on_fragment_exit('return')
+ delta_stack = len(ctx.stack) - initial_len
+ assert delta_stack == +1, 'Stack change must be equal to +1! got %d' % delta_stack
+ return undefined, 1, ctx.stack.pop(
+ ) # return signal
+ return_value = ctx.stack.pop()
+ ctx = self.contexts.pop()
+ self.current_ctx = ctx
+ ctx.stack.append(return_value)
+
+ loc = self.return_locs.pop()
+ continue
+ # next instruction
+ loc += 1
+ if self.debug_mode:
+ self._on_fragment_exit('internal error - unexpected end of tape, will crash')
+ assert False, 'Remember to add NOP at the end!'
+
+ def run(self, ctx, starting_loc=0):
+ loc = starting_loc
+ self.current_ctx = ctx
+ while loc < len(self.tape):
+ # execute instruction
+ if self.debug_mode:
+ print(loc, self.tape[loc])
+ status = self.tape[loc].eval(ctx)
+
+ # check status for special actions
+ if status is not None:
+ if type(status) == int: # jump to label
+ loc = self.label_locs[status]
+ continue
+
+ elif len(status) == 2: # a call or a return!
+ # call: (new_ctx, func_loc_label_num)
+ if status[0] is not None:
+ # append old state to the stack
+ self.contexts.append(ctx)
+ self.return_locs.append(loc + 1)
+ # set new state
+ loc = self.label_locs[status[1]]
+ ctx = status[0]
+ self.current_ctx = ctx
+ continue
+
+ # return: (None, None)
+ else:
+ return_value = ctx.stack.pop()
+ ctx = self.contexts.pop()
+ self.current_ctx = ctx
+ ctx.stack.append(return_value)
+
+ loc = self.return_locs.pop()
+ continue
+ # next instruction
+ loc += 1
+ assert len(ctx.stack) == 1, ctx.stack
+ return ctx.stack.pop()
+
+
+class FakeCtx(object):
+ def __init__(self):
+ self.stack = []
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/__init__.py b/Contents/Libraries/Shared/js2py/internals/constructors/__init__.py
new file mode 100644
index 000000000..4bf956237
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/__init__.py
@@ -0,0 +1 @@
+__author__ = 'Piotr Dabkowski'
\ No newline at end of file
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsarray.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsarray.py
new file mode 100644
index 000000000..23364ce48
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsarray.py
@@ -0,0 +1,28 @@
+from ..conversions import *
+from ..func_utils import *
+
+
+def Array(this, args):
+ return ArrayConstructor(args, args.space)
+
+
+def ArrayConstructor(args, space):
+ if len(args) == 1:
+ l = get_arg(args, 0)
+ if type(l) == float:
+ if to_uint32(l) == l:
+ return space.NewArray(l)
+ else:
+ raise MakeError(
+ 'RangeError',
+ 'Invalid length specified for Array constructor (must be uint32)'
+ )
+ else:
+ return space.ConstructArray([l])
+ else:
+ return space.ConstructArray(list(args))
+
+
+def isArray(this, args):
+ x = get_arg(args, 0)
+ return is_object(x) and x.Class == u'Array'
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsboolean.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsboolean.py
new file mode 100644
index 000000000..17025d9f5
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsboolean.py
@@ -0,0 +1,14 @@
+from ..conversions import *
+from ..func_utils import *
+
+
+def Boolean(this, args):
+ return to_boolean(get_arg(args, 0))
+
+
+def BooleanConstructor(args, space):
+ temp = space.NewObject()
+ temp.prototype = space.BooleanPrototype
+ temp.Class = 'Boolean'
+ temp.value = to_boolean(get_arg(args, 0))
+ return temp
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsconsole.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsconsole.py
new file mode 100644
index 000000000..6840ba708
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsconsole.py
@@ -0,0 +1,11 @@
+from __future__ import unicode_literals
+
+from js2py.internals.conversions import *
+from js2py.internals.func_utils import *
+
+
+class ConsoleMethods:
+ def log(this, args):
+ x = ' '.join(to_string(e) for e in args)
+ print(x)
+ return undefined
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsdate.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsdate.py
new file mode 100644
index 000000000..98de64319
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsdate.py
@@ -0,0 +1,405 @@
+from ..base import *
+from .time_helpers import *
+
+TZ_OFFSET = (time.altzone // 3600)
+ABS_OFFSET = abs(TZ_OFFSET)
+TZ_NAME = time.tzname[1]
+ISO_FORMAT = '%s-%s-%sT%s:%s:%s.%sZ'
+
+
+@Js
+def Date(year, month, date, hours, minutes, seconds, ms):
+ return now().to_string()
+
+
+Date.Class = 'Date'
+
+
+def now():
+ return PyJsDate(int(time.time() * 1000), prototype=DatePrototype)
+
+
+@Js
+def UTC(year, month, date, hours, minutes, seconds, ms): # todo complete this
+ args = arguments
+ y = args[0].to_number()
+ m = args[1].to_number()
+ l = len(args)
+ dt = args[2].to_number() if l > 2 else Js(1)
+ h = args[3].to_number() if l > 3 else Js(0)
+ mi = args[4].to_number() if l > 4 else Js(0)
+ sec = args[5].to_number() if l > 5 else Js(0)
+ mili = args[6].to_number() if l > 6 else Js(0)
+ if not y.is_nan() and 0 <= y.value <= 99:
+ y = y + Js(1900)
+ t = TimeClip(MakeDate(MakeDay(y, m, dt), MakeTime(h, mi, sec, mili)))
+ return PyJsDate(t, prototype=DatePrototype)
+
+
+@Js
+def parse(string):
+ return PyJsDate(
+ TimeClip(parse_date(string.to_string().value)),
+ prototype=DatePrototype)
+
+
+Date.define_own_property('now', {
+ 'value': Js(now),
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
+
+Date.define_own_property('parse', {
+ 'value': parse,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
+
+Date.define_own_property('UTC', {
+ 'value': UTC,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
+
+
+class PyJsDate(PyJs):
+ Class = 'Date'
+ extensible = True
+
+ def __init__(self, value, prototype=None):
+ self.value = value
+ self.own = {}
+ self.prototype = prototype
+
+ # todo fix this problematic datetime part
+ def to_local_dt(self):
+ return datetime.datetime.utcfromtimestamp(
+ UTCToLocal(self.value) // 1000)
+
+ def to_utc_dt(self):
+ return datetime.datetime.utcfromtimestamp(self.value // 1000)
+
+ def local_strftime(self, pattern):
+ if self.value is NaN:
+ return 'Invalid Date'
+ try:
+ dt = self.to_local_dt()
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'unsupported date range. Will fix in future versions')
+ try:
+ return dt.strftime(pattern)
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'Could not generate date string from this date (limitations of python.datetime)'
+ )
+
+ def utc_strftime(self, pattern):
+ if self.value is NaN:
+ return 'Invalid Date'
+ try:
+ dt = self.to_utc_dt()
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'unsupported date range. Will fix in future versions')
+ try:
+ return dt.strftime(pattern)
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'Could not generate date string from this date (limitations of python.datetime)'
+ )
+
+
+def parse_date(py_string): # todo support all date string formats
+ try:
+ try:
+ dt = datetime.datetime.strptime(py_string, "%Y-%m-%dT%H:%M:%S.%fZ")
+ except:
+ dt = datetime.datetime.strptime(py_string, "%Y-%m-%dT%H:%M:%SZ")
+ return MakeDate(
+ MakeDay(Js(dt.year), Js(dt.month - 1), Js(dt.day)),
+ MakeTime(
+ Js(dt.hour), Js(dt.minute), Js(dt.second),
+ Js(dt.microsecond // 1000)))
+ except:
+ raise MakeError(
+ 'TypeError',
+ 'Could not parse date %s - unsupported date format. Currently only supported format is RFC3339 utc. Sorry!'
+ % py_string)
+
+
+def date_constructor(*args):
+ if len(args) >= 2:
+ return date_constructor2(*args)
+ elif len(args) == 1:
+ return date_constructor1(args[0])
+ else:
+ return date_constructor0()
+
+
+def date_constructor0():
+ return now()
+
+
+def date_constructor1(value):
+ v = value.to_primitive()
+ if v._type() == 'String':
+ v = parse_date(v.value)
+ else:
+ v = v.to_int()
+ return PyJsDate(TimeClip(v), prototype=DatePrototype)
+
+
+def date_constructor2(*args):
+ y = args[0].to_number()
+ m = args[1].to_number()
+ l = len(args)
+ dt = args[2].to_number() if l > 2 else Js(1)
+ h = args[3].to_number() if l > 3 else Js(0)
+ mi = args[4].to_number() if l > 4 else Js(0)
+ sec = args[5].to_number() if l > 5 else Js(0)
+ mili = args[6].to_number() if l > 6 else Js(0)
+ if not y.is_nan() and 0 <= y.value <= 99:
+ y = y + Js(1900)
+ t = TimeClip(
+ LocalToUTC(MakeDate(MakeDay(y, m, dt), MakeTime(h, mi, sec, mili))))
+ return PyJsDate(t, prototype=DatePrototype)
+
+
+Date.create = date_constructor
+
+DatePrototype = PyJsDate(float('nan'), prototype=ObjectPrototype)
+
+
+def check_date(obj):
+ if obj.Class != 'Date':
+ raise MakeError('TypeError', 'this is not a Date object')
+
+
+class DateProto:
+ def toString():
+ check_date(this)
+ if this.value is NaN:
+ return 'Invalid Date'
+ offset = (UTCToLocal(this.value) - this.value) // msPerHour
+ return this.local_strftime(
+ '%a %b %d %Y %H:%M:%S GMT') + '%s00 (%s)' % (pad(
+ offset, 2, True), GetTimeZoneName(this.value))
+
+ def toDateString():
+ check_date(this)
+ return this.local_strftime('%d %B %Y')
+
+ def toTimeString():
+ check_date(this)
+ return this.local_strftime('%H:%M:%S')
+
+ def toLocaleString():
+ check_date(this)
+ return this.local_strftime('%d %B %Y %H:%M:%S')
+
+ def toLocaleDateString():
+ check_date(this)
+ return this.local_strftime('%d %B %Y')
+
+ def toLocaleTimeString():
+ check_date(this)
+ return this.local_strftime('%H:%M:%S')
+
+ def valueOf():
+ check_date(this)
+ return this.value
+
+ def getTime():
+ check_date(this)
+ return this.value
+
+ def getFullYear():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return YearFromTime(UTCToLocal(this.value))
+
+ def getUTCFullYear():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return YearFromTime(this.value)
+
+ def getMonth():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return MonthFromTime(UTCToLocal(this.value))
+
+ def getDate():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return DateFromTime(UTCToLocal(this.value))
+
+ def getUTCMonth():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return MonthFromTime(this.value)
+
+ def getUTCDate():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return DateFromTime(this.value)
+
+ def getDay():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return WeekDay(UTCToLocal(this.value))
+
+ def getUTCDay():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return WeekDay(this.value)
+
+ def getHours():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return HourFromTime(UTCToLocal(this.value))
+
+ def getUTCHours():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return HourFromTime(this.value)
+
+ def getMinutes():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return MinFromTime(UTCToLocal(this.value))
+
+ def getUTCMinutes():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return MinFromTime(this.value)
+
+ def getSeconds():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return SecFromTime(UTCToLocal(this.value))
+
+ def getUTCSeconds():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return SecFromTime(this.value)
+
+ def getMilliseconds():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return msFromTime(UTCToLocal(this.value))
+
+ def getUTCMilliseconds():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return msFromTime(this.value)
+
+ def getTimezoneOffset():
+ check_date(this)
+ if this.value is NaN:
+ return NaN
+ return (this.value - UTCToLocal(this.value)) // 60000
+
+ def setTime(time):
+ check_date(this)
+ this.value = TimeClip(time.to_number().to_int())
+ return this.value
+
+ def setMilliseconds(ms):
+ check_date(this)
+ t = UTCToLocal(this.value)
+ tim = MakeTime(
+ HourFromTime(t), MinFromTime(t), SecFromTime(t), ms.to_int())
+ u = TimeClip(LocalToUTC(MakeDate(Day(t), tim)))
+ this.value = u
+ return u
+
+ def setUTCMilliseconds(ms):
+ check_date(this)
+ t = this.value
+ tim = MakeTime(
+ HourFromTime(t), MinFromTime(t), SecFromTime(t), ms.to_int())
+ u = TimeClip(MakeDate(Day(t), tim))
+ this.value = u
+ return u
+
+ # todo Complete all setters!
+
+ def toUTCString():
+ check_date(this)
+ return this.utc_strftime('%d %B %Y %H:%M:%S')
+
+ def toISOString():
+ check_date(this)
+ t = this.value
+ year = YearFromTime(t)
+ month, day, hour, minute, second, milli = pad(
+ MonthFromTime(t) + 1), pad(DateFromTime(t)), pad(
+ HourFromTime(t)), pad(MinFromTime(t)), pad(
+ SecFromTime(t)), pad(msFromTime(t))
+ return ISO_FORMAT % (unicode(year) if 0 <= year <= 9999 else pad(
+ year, 6, True), month, day, hour, minute, second, milli)
+
+ def toJSON(key):
+ o = this.to_object()
+ tv = o.to_primitive('Number')
+ if tv.Class == 'Number' and not tv.is_finite():
+ return this.null
+ toISO = o.get('toISOString')
+ if not toISO.is_callable():
+ raise this.MakeError('TypeError', 'toISOString is not callable')
+ return toISO.call(o, ())
+
+
+def pad(num, n=2, sign=False):
+ '''returns n digit string representation of the num'''
+ s = unicode(abs(num))
+ if len(s) < n:
+ s = '0' * (n - len(s)) + s
+ if not sign:
+ return s
+ if num >= 0:
+ return '+' + s
+ else:
+ return '-' + s
+
+
+fill_prototype(DatePrototype, DateProto, default_attrs)
+
+Date.define_own_property(
+ 'prototype', {
+ 'value': DatePrototype,
+ 'enumerable': False,
+ 'writable': False,
+ 'configurable': False
+ })
+
+DatePrototype.define_own_property('constructor', {
+ 'value': Date,
+ 'enumerable': False,
+ 'writable': True,
+ 'configurable': True
+})
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsfunction.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsfunction.py
new file mode 100644
index 000000000..d62731ac3
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsfunction.py
@@ -0,0 +1,76 @@
+from ..base import *
+from ..conversions import *
+from ..func_utils import *
+from pyjsparser import parse
+from ..byte_trans import ByteCodeGenerator, Code
+
+
+def Function(this, args):
+ # convert arguments to python list of strings
+ a = map(to_string, tuple(args))
+ _body = u';'
+ _args = ()
+ if len(a):
+ _body = u'%s;' % a[-1]
+ _args = a[:-1]
+ return executable_function(_body, _args, args.space, global_context=True)
+
+
+def executable_function(_body, _args, space, global_context=True):
+ func_str = u'(function (%s) { ; %s ; });' % (u', '.join(_args), _body)
+
+ co = executable_code(
+ code_str=func_str, space=space, global_context=global_context)
+ return co()
+
+
+# you can use this one lovely piece of function to compile and execute code on the fly! Watch out though as it may generate lots of code.
+# todo tape cleanup? we dont know which pieces are needed and which are not so rather impossible without smarter machinery something like GC,
+# a one solution would be to have a separate tape for functions
+def executable_code(code_str, space, global_context=True):
+ # parse first to check if any SyntaxErrors
+ parsed = parse(code_str)
+
+ old_tape_len = len(space.byte_generator.exe.tape)
+ space.byte_generator.record_state()
+ start = space.byte_generator.exe.get_new_label()
+ skip = space.byte_generator.exe.get_new_label()
+ space.byte_generator.emit('JUMP', skip)
+ space.byte_generator.emit('LABEL', start)
+ space.byte_generator.emit(parsed)
+ space.byte_generator.emit('NOP')
+ space.byte_generator.emit('LABEL', skip)
+ space.byte_generator.emit('NOP')
+ space.byte_generator.restore_state()
+
+ space.byte_generator.exe.compile(
+ start_loc=old_tape_len
+ ) # dont read the code from the beginning, dont be stupid!
+
+ ctx = space.GlobalObj if global_context else space.exe.current_ctx
+
+ def ex_code():
+ ret, status, token = space.byte_generator.exe.execute_fragment_under_context(
+ ctx, start, skip)
+ # todo Clean up the tape!
+ # this is NOT a way to do that because the fragment may contain the executable code! We dont want to remove it
+ #del space.byte_generator.exe.tape[old_tape_len:]
+ if status == 0:
+ return ret
+ elif status == 3:
+ raise token
+ else:
+ raise RuntimeError(
+ 'Unexpected return status during JIT execution: %d' % status)
+
+ return ex_code
+
+
+def _eval(this, args):
+ code_str = to_string(get_arg(args, 0))
+ return executable_code(code_str, args.space, global_context=True)()
+
+
+def log(this, args):
+ print(' '.join(map(to_string, args)))
+ return undefined
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsmath.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsmath.py
new file mode 100644
index 000000000..3eb44616b
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsmath.py
@@ -0,0 +1,157 @@
+from __future__ import unicode_literals
+
+from ..conversions import *
+from ..func_utils import *
+
+import math
+import random
+
+CONSTANTS = {
+ 'E': 2.7182818284590452354,
+ 'LN10': 2.302585092994046,
+ 'LN2': 0.6931471805599453,
+ 'LOG2E': 1.4426950408889634,
+ 'LOG10E': 0.4342944819032518,
+ 'PI': 3.1415926535897932,
+ 'SQRT1_2': 0.7071067811865476,
+ 'SQRT2': 1.4142135623730951
+}
+
+
+class MathFunctions:
+ def abs(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ return abs(a)
+
+ def acos(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ try:
+ return math.acos(a)
+ except:
+ return NaN
+
+ def asin(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ try:
+ return math.asin(a)
+ except:
+ return NaN
+
+ def atan(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ return math.atan(a)
+
+ def atan2(this, args):
+ x = get_arg(args, 0)
+ y = get_arg(args, 1)
+ a = to_number(x)
+ b = to_number(y)
+ if a != a or b != b: # it must be a nan
+ return NaN
+ return math.atan2(a, b)
+
+ def ceil(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ return float(math.ceil(a))
+
+ def floor(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ return float(math.floor(a))
+
+ def round(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ return float(round(a))
+
+ def sin(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if not is_finite(a): # it must be a nan
+ return NaN
+ return math.sin(a)
+
+ def cos(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if not is_finite(a): # it must be a nan
+ return NaN
+ return math.cos(a)
+
+ def tan(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if not is_finite(a): # it must be a nan
+ return NaN
+ return math.tan(a)
+
+ def log(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ try:
+ return math.log(a)
+ except:
+ return NaN
+
+ def exp(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ return math.exp(a)
+
+ def pow(this, args):
+ x = get_arg(args, 0)
+ y = get_arg(args, 1)
+ a = to_number(x)
+ b = to_number(y)
+ if a != a or b != b: # it must be a nan
+ return NaN
+ try:
+ return a**b
+ except:
+ return NaN
+
+ def sqrt(this, args):
+ x = get_arg(args, 0)
+ a = to_number(x)
+ if a != a: # it must be a nan
+ return NaN
+ try:
+ return a**0.5
+ except:
+ return NaN
+
+ def min(this, args):
+ if len(args) == 0:
+ return Infinity
+ return min(map(to_number, tuple(args)))
+
+ def max(this, args):
+ if len(args) == 0:
+ return -Infinity
+ return max(map(to_number, tuple(args)))
+
+ def random(this, args):
+ return random.random()
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsnumber.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsnumber.py
new file mode 100644
index 000000000..276b7cfad
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsnumber.py
@@ -0,0 +1,27 @@
+from __future__ import unicode_literals
+
+from ..conversions import *
+from ..func_utils import *
+
+
+def Number(this, args):
+ if len(args) == 0:
+ return 0.
+ return to_number(args[0])
+
+
+def NumberConstructor(args, space):
+ temp = space.NewObject()
+ temp.prototype = space.NumberPrototype
+ temp.Class = 'Number'
+ temp.value = float(to_number(get_arg(args, 0)) if len(args) > 0 else 0.)
+ return temp
+
+
+CONSTS = {
+ 'MAX_VALUE': 1.7976931348623157e308,
+ 'MIN_VALUE': 5.0e-324,
+ 'NaN': NaN,
+ 'NEGATIVE_INFINITY': Infinity,
+ 'POSITIVE_INFINITY': -Infinity
+}
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsobject.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsobject.py
new file mode 100644
index 000000000..06fdbbb05
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsobject.py
@@ -0,0 +1,204 @@
+from __future__ import unicode_literals
+from ..conversions import *
+from ..func_utils import *
+from ..base import is_data_descriptor
+import six
+
+
+def Object(this, args):
+ val = get_arg(args, 0)
+ if is_null(val) or is_undefined(val):
+ return args.space.NewObject()
+ return to_object(val, args.space)
+
+
+def ObjectCreate(args, space):
+ if len(args):
+ val = get_arg(args, 0)
+ if is_object(val):
+ # Implementation dependent, but my will simply return :)
+ return val
+ elif type(val) in (NUMBER_TYPE, STRING_TYPE, BOOLEAN_TYPE):
+ return to_object(val, space)
+ return space.NewObject()
+
+
+class ObjectMethods:
+ def getPrototypeOf(this, args):
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ raise MakeError('TypeError',
+ 'Object.getPrototypeOf called on non-object')
+ return null if obj.prototype is None else obj.prototype
+
+ def getOwnPropertyDescriptor(this, args):
+ obj = get_arg(args, 0)
+ prop = get_arg(args, 1)
+ if not is_object(obj):
+ raise MakeError(
+ 'TypeError',
+ 'Object.getOwnPropertyDescriptor called on non-object')
+ desc = obj.own.get(to_string(prop))
+ return convert_to_js_type(desc, args.space)
+
+ def getOwnPropertyNames(this, args):
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ raise MakeError(
+ 'TypeError',
+ 'Object.getOwnPropertyDescriptor called on non-object')
+ return args.space.ConstructArray(obj.own.keys())
+
+ def create(this, args):
+ obj = get_arg(args, 0)
+ if not (is_object(obj) or is_null(obj)):
+ raise MakeError('TypeError',
+ 'Object prototype may only be an Object or null')
+ temp = args.space.NewObject()
+ temp.prototype = None if is_null(obj) else obj
+ if len(args) > 1 and not is_undefined(args[1]):
+ if six.PY2:
+ args.tup = (args[1], )
+ ObjectMethods.defineProperties.__func__(temp, args)
+ else:
+ args.tup = (args[1], )
+ ObjectMethods.defineProperties(temp, args)
+ return temp
+
+ def defineProperty(this, args):
+ obj = get_arg(args, 0)
+ prop = get_arg(args, 1)
+ attrs = get_arg(args, 2)
+ if not is_object(obj):
+ raise MakeError('TypeError',
+ 'Object.defineProperty called on non-object')
+ name = to_string(prop)
+ if not obj.define_own_property(name, ToPropertyDescriptor(attrs),
+ False):
+ raise MakeError('TypeError', 'Cannot redefine property: %s' % name)
+ return obj
+
+ def defineProperties(this, args):
+ obj = get_arg(args, 0)
+ properties = get_arg(args, 1)
+ if not is_object(obj):
+ raise MakeError('TypeError',
+ 'Object.defineProperties called on non-object')
+ props = to_object(properties, args.space)
+ for k, v in props.own.items():
+ if not v.get('enumerable'):
+ continue
+ desc = ToPropertyDescriptor(props.get(unicode(k)))
+ if not obj.define_own_property(unicode(k), desc, False):
+ raise MakeError('TypeError',
+ 'Failed to define own property: %s' % k)
+ return obj
+
+ def seal(this, args):
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ raise MakeError('TypeError', 'Object.seal called on non-object')
+ for desc in obj.own.values():
+ desc['configurable'] = False
+ obj.extensible = False
+ return obj
+
+ def freeze(this, args):
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ raise MakeError('TypeError', 'Object.freeze called on non-object')
+ for desc in obj.own.values():
+ desc['configurable'] = False
+ if is_data_descriptor(desc):
+ desc['writable'] = False
+ obj.extensible = False
+ return obj
+
+ def preventExtensions(this, args):
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ raise MakeError('TypeError',
+ 'Object.preventExtensions on non-object')
+ obj.extensible = False
+ return obj
+
+ def isSealed(this, args):
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ raise MakeError('TypeError',
+ 'Object.isSealed called on non-object')
+ if obj.extensible:
+ return False
+ for desc in obj.own.values():
+ if desc.get('configurable'):
+ return False
+ return True
+
+ def isFrozen(this, args):
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ raise MakeError('TypeError',
+ 'Object.isFrozen called on non-object')
+ if obj.extensible:
+ return False
+ for desc in obj.own.values():
+ if desc.get('configurable'):
+ return False
+ if is_data_descriptor(desc) and desc.get('writable'):
+ return False
+ return True
+
+ def isExtensible(this, args):
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ raise MakeError('TypeError',
+ 'Object.isExtensible called on non-object')
+ return obj.extensible
+
+ def keys(this, args):
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ raise MakeError('TypeError', 'Object.keys called on non-object')
+ return args.space.ConstructArray([
+ unicode(e) for e, d in six.iteritems(obj.own)
+ if d.get('enumerable')
+ ])
+
+
+# some utility functions:
+
+
+def ToPropertyDescriptor(obj): # page 38 (50 absolute)
+ if not is_object(obj):
+ raise MakeError('TypeError',
+ 'Can\'t convert non-object to property descriptor')
+ desc = {}
+ if obj.has_property('enumerable'):
+ desc['enumerable'] = to_boolean(obj.get('enumerable'))
+ if obj.has_property('configurable'):
+ desc['configurable'] = to_boolean(obj.get('configurable'))
+ if obj.has_property('value'):
+ desc['value'] = obj.get('value')
+ if obj.has_property('writable'):
+ desc['writable'] = to_boolean(obj.get('writable'))
+ if obj.has_property('get'):
+ cand = obj.get('get')
+ if not (is_undefined(cand) or is_callable(cand)):
+ raise MakeError(
+ 'TypeError',
+ 'Invalid getter (it has to be a function or undefined)')
+ desc['get'] = cand
+ if obj.has_property('set'):
+ cand = obj.get('set')
+ if not (is_undefined(cand) or is_callable(cand)):
+ raise MakeError(
+ 'TypeError',
+ 'Invalid setter (it has to be a function or undefined)')
+ desc['set'] = cand
+ if ('get' in desc or 'set' in desc) and ('value' in desc
+ or 'writable' in desc):
+ raise MakeError(
+ 'TypeError',
+ 'Invalid property. A property cannot both have accessors and be writable or have a value.'
+ )
+ return desc
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsregexp.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsregexp.py
new file mode 100644
index 000000000..7b264fdb6
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsregexp.py
@@ -0,0 +1,41 @@
+from __future__ import unicode_literals
+from ..conversions import *
+from ..func_utils import *
+from ..base import SpaceTuple
+
+REG_EXP_FLAGS = ('g', 'i', 'm')
+
+
+def RegExp(this, args):
+ pattern = get_arg(args, 0)
+ flags = get_arg(args, 1)
+ if GetClass(pattern) == 'RegExp':
+ if not is_undefined(flags):
+ raise MakeError(
+ 'TypeError',
+ 'Cannot supply flags when constructing one RegExp from another'
+ )
+ # return unchanged
+ return pattern
+ #pattern is not a regexp
+ if is_undefined(pattern):
+ pattern = u''
+ else:
+ pattern = to_string(pattern)
+ flags = to_string(flags) if not is_undefined(flags) else u''
+ for flag in flags:
+ if flag not in REG_EXP_FLAGS:
+ raise MakeError(
+ 'SyntaxError',
+ 'Invalid flags supplied to RegExp constructor "%s"' % flag)
+ if len(set(flags)) != len(flags):
+ raise MakeError(
+ 'SyntaxError',
+ 'Invalid flags supplied to RegExp constructor "%s"' % flags)
+ return args.space.NewRegExp(pattern, flags)
+
+
+def RegExpCreate(args, space):
+ _args = SpaceTuple(args)
+ _args.space = space
+ return RegExp(undefined, _args)
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/jsstring.py b/Contents/Libraries/Shared/js2py/internals/constructors/jsstring.py
new file mode 100644
index 000000000..f2b43831b
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/jsstring.py
@@ -0,0 +1,23 @@
+from ..conversions import *
+from ..func_utils import *
+
+
+def fromCharCode(this, args):
+ res = u''
+ for e in args:
+ res += unichr(to_uint16(e))
+ return res
+
+
+def String(this, args):
+ if len(args) == 0:
+ return u''
+ return to_string(args[0])
+
+
+def StringConstructor(args, space):
+ temp = space.NewObject()
+ temp.prototype = space.StringPrototype
+ temp.Class = 'String'
+ temp.value = to_string(get_arg(args, 0)) if len(args) > 0 else u''
+ return temp
diff --git a/Contents/Libraries/Shared/js2py/internals/constructors/time_helpers.py b/Contents/Libraries/Shared/js2py/internals/constructors/time_helpers.py
new file mode 100644
index 000000000..eda95fb60
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/constructors/time_helpers.py
@@ -0,0 +1,209 @@
+from __future__ import unicode_literals
+
+# NOTE: t must be INT!!!
+import time
+import datetime
+import warnings
+
+try:
+ from tzlocal import get_localzone
+ LOCAL_ZONE = get_localzone()
+except: # except all problems...
+ warnings.warn(
+ 'Please install or fix tzlocal library (pip install tzlocal) in order to make Date object work better. Otherwise I will assume DST is in effect all the time'
+ )
+
+ class LOCAL_ZONE:
+ @staticmethod
+ def dst(*args):
+ return 1
+
+
+from js2py.base import MakeError
+CUM = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365)
+msPerDay = 86400000
+msPerYear = int(86400000 * 365.242)
+msPerSecond = 1000
+msPerMinute = 60000
+msPerHour = 3600000
+HoursPerDay = 24
+MinutesPerHour = 60
+SecondsPerMinute = 60
+NaN = float('nan')
+LocalTZA = -time.timezone * msPerSecond
+
+
+def DaylightSavingTA(t):
+ if t is NaN:
+ return t
+ try:
+ return int(
+ LOCAL_ZONE.dst(datetime.datetime.utcfromtimestamp(
+ t // 1000)).seconds) * 1000
+ except:
+ warnings.warn(
+ 'Invalid datetime date, assumed DST time, may be inaccurate...',
+ Warning)
+ return 1
+ #raise MakeError('TypeError', 'date not supported by python.datetime. I will solve it in future versions')
+
+
+def GetTimeZoneName(t):
+ return time.tzname[DaylightSavingTA(t) > 0]
+
+
+def LocalToUTC(t):
+ return t - LocalTZA - DaylightSavingTA(t - LocalTZA)
+
+
+def UTCToLocal(t):
+ return t + LocalTZA + DaylightSavingTA(t)
+
+
+def Day(t):
+ return t // 86400000
+
+
+def TimeWithinDay(t):
+ return t % 86400000
+
+
+def DaysInYear(y):
+ if y % 4:
+ return 365
+ elif y % 100:
+ return 366
+ elif y % 400:
+ return 365
+ else:
+ return 366
+
+
+def DayFromYear(y):
+ return 365 * (y - 1970) + (y - 1969) // 4 - (y - 1901) // 100 + (
+ y - 1601) // 400
+
+
+def TimeFromYear(y):
+ return 86400000 * DayFromYear(y)
+
+
+def YearFromTime(t):
+ guess = 1970 - t // 31556908800 # msPerYear
+ gt = TimeFromYear(guess)
+ if gt <= t:
+ while gt <= t:
+ guess += 1
+ gt = TimeFromYear(guess)
+ return guess - 1
+ else:
+ while gt > t:
+ guess -= 1
+ gt = TimeFromYear(guess)
+ return guess
+
+
+def DayWithinYear(t):
+ return Day(t) - DayFromYear(YearFromTime(t))
+
+
+def InLeapYear(t):
+ y = YearFromTime(t)
+ if y % 4:
+ return 0
+ elif y % 100:
+ return 1
+ elif y % 400:
+ return 0
+ else:
+ return 1
+
+
+def MonthFromTime(t):
+ day = DayWithinYear(t)
+ leap = InLeapYear(t)
+ if day < 31:
+ return 0
+ day -= leap
+ if day < 59:
+ return 1
+ elif day < 90:
+ return 2
+ elif day < 120:
+ return 3
+ elif day < 151:
+ return 4
+ elif day < 181:
+ return 5
+ elif day < 212:
+ return 6
+ elif day < 243:
+ return 7
+ elif day < 273:
+ return 8
+ elif day < 304:
+ return 9
+ elif day < 334:
+ return 10
+ else:
+ return 11
+
+
+def DateFromTime(t):
+ mon = MonthFromTime(t)
+ day = DayWithinYear(t)
+ return day - CUM[mon] - (1 if InLeapYear(t) and mon >= 2 else 0) + 1
+
+
+def WeekDay(t):
+ # 0 == sunday
+ return (Day(t) + 4) % 7
+
+
+def msFromTime(t):
+ return t % 1000
+
+
+def SecFromTime(t):
+ return (t // 1000) % 60
+
+
+def MinFromTime(t):
+ return (t // 60000) % 60
+
+
+def HourFromTime(t):
+ return (t // 3600000) % 24
+
+
+def MakeTime(hour, Min, sec, ms):
+ # takes PyJs objects and returns t
+ if not (hour.is_finite() and Min.is_finite() and sec.is_finite()
+ and ms.is_finite()):
+ return NaN
+ h, m, s, milli = hour.to_int(), Min.to_int(), sec.to_int(), ms.to_int()
+ return h * 3600000 + m * 60000 + s * 1000 + milli
+
+
+def MakeDay(year, month, date):
+ # takes PyJs objects and returns t
+ if not (year.is_finite() and month.is_finite() and date.is_finite()):
+ return NaN
+ y, m, dt = year.to_int(), month.to_int(), date.to_int()
+ y += m // 12
+ mn = m % 12
+ d = DayFromYear(y) + CUM[mn] + dt - 1 + (1 if DaysInYear(y) == 366
+ and mn >= 2 else 0)
+ return d # ms per day
+
+
+def MakeDate(day, time):
+ return 86400000 * day + time
+
+
+def TimeClip(t):
+ if t != t or abs(t) == float('inf'):
+ return NaN
+ if abs(t) > 8.64 * 10**15:
+ return NaN
+ return int(t)
diff --git a/Contents/Libraries/Shared/js2py/internals/conversions.py b/Contents/Libraries/Shared/js2py/internals/conversions.py
new file mode 100644
index 000000000..8b2c7c308
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/conversions.py
@@ -0,0 +1,141 @@
+from __future__ import unicode_literals
+# Type Conversions. to_type. All must return PyJs subclass instance
+from .simplex import *
+
+
+def to_primitive(self, hint=None):
+ if is_primitive(self):
+ return self
+ if hint is None and (self.Class == 'Number' or self.Class == 'Boolean'):
+ # favour number for Class== Number or Boolean default = String
+ hint = 'Number'
+ return self.default_value(hint)
+
+
+def to_boolean(self):
+ typ = Type(self)
+ if typ == 'Boolean': # no need to convert
+ return self
+ elif typ == 'Null' or typ == 'Undefined': # they are both always false
+ return False
+ elif typ == 'Number': # false only for 0, and NaN
+ return self and self == self # test for nan (nan -> flase)
+ elif typ == 'String':
+ return bool(self)
+ else: # object - always True
+ return True
+
+
+def to_number(self):
+ typ = Type(self)
+ if typ == 'Number': # or self.Class=='Number': # no need to convert
+ return self
+ elif typ == 'Null': # null is 0
+ return 0.
+ elif typ == 'Undefined': # undefined is NaN
+ return NaN
+ elif typ == 'Boolean': # 1 for True 0 for false
+ return float(self)
+ elif typ == 'String':
+ s = self.strip() # Strip white space
+ if not s: # '' is simply 0
+ return 0.
+ if 'x' in s or 'X' in s[:3]: # hex (positive only)
+ try: # try to convert
+ num = int(s, 16)
+ except ValueError: # could not convert -> NaN
+ return NaN
+ return float(num)
+ sign = 1 # get sign
+ if s[0] in '+-':
+ if s[0] == '-':
+ sign = -1
+ s = s[1:]
+ if s == 'Infinity': # Check for infinity keyword. 'NaN' will be NaN anyway.
+ return sign * Infinity
+ try: # decimal try
+ num = sign * float(s) # Converted
+ except ValueError:
+ return NaN # could not convert to decimal > return NaN
+ return float(num)
+ else: # object - most likely it will be NaN.
+ return to_number(to_primitive(self, 'Number'))
+
+
+def to_string(self):
+ typ = Type(self)
+ if typ == 'String':
+ return self
+ elif typ == 'Null':
+ return 'null'
+ elif typ == 'Undefined':
+ return 'undefined'
+ elif typ == 'Boolean':
+ return 'true' if self else 'false'
+ elif typ == 'Number': # or self.Class=='Number':
+ return js_dtoa(self)
+ else: # object
+ return to_string(to_primitive(self, 'String'))
+
+
+def to_object(self, space):
+ typ = Type(self)
+ if typ == 'Object':
+ return self
+ elif typ == 'Boolean': # Unsure ... todo check here
+ return space.Boolean.create((self, ), space)
+ elif typ == 'Number': # ?
+ return space.Number.create((self, ), space)
+ elif typ == 'String': # ?
+ return space.String.create((self, ), space)
+ elif typ == 'Null' or typ == 'Undefined':
+ raise MakeError('TypeError',
+ 'undefined or null can\'t be converted to object')
+ else:
+ raise RuntimeError()
+
+
+def to_int32(self):
+ num = to_number(self)
+ if is_nan(num) or is_infinity(num):
+ return 0
+ int32 = int(num) % 2**32
+ return int(int32 - 2**32 if int32 >= 2**31 else int32)
+
+
+def to_int(self):
+ num = to_number(self)
+ if is_nan(num):
+ return 0
+ elif is_infinity(num):
+ return 10**20 if num > 0 else -10**20
+ return int(num)
+
+
+def to_uint32(self):
+ num = to_number(self)
+ if is_nan(num) or is_infinity(num):
+ return 0
+ return int(num) % 2**32
+
+
+def to_uint16(self):
+ num = to_number(self)
+ if is_nan(num) or is_infinity(num):
+ return 0
+ return int(num) % 2**16
+
+
+def to_int16(self):
+ num = to_number(self)
+ if is_nan(num) or is_infinity(num):
+ return 0
+ int16 = int(num) % 2**16
+ return int(int16 - 2**16 if int16 >= 2**15 else int16)
+
+
+def cok(self):
+ """Check object coercible"""
+ if type(self) in (UNDEFINED_TYPE, NULL_TYPE):
+ raise MakeError('TypeError',
+ 'undefined or null can\'t be converted to object')
diff --git a/Contents/Libraries/Shared/js2py/internals/desc.py b/Contents/Libraries/Shared/js2py/internals/desc.py
new file mode 100644
index 000000000..e81179c28
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/desc.py
@@ -0,0 +1,90 @@
+# todo make sure what they mean by desc undefined? None or empty? Answer: None :) it can never be empty but None is sometimes returned.
+
+# I am implementing everything as dicts to speed up property creation
+
+# Warning: value, get, set props of dest are PyJs types. Rest is Py!
+
+
+def is_data_descriptor(desc):
+ return desc and ('value' in desc or 'writable' in desc)
+
+
+def is_accessor_descriptor(desc):
+ return desc and ('get' in desc or 'set' in desc)
+
+
+def is_generic_descriptor(
+ desc
+): # generic means not the data and not the setter - therefore it must be one that changes only enum and conf
+ return desc and not (is_data_descriptor(desc)
+ or is_accessor_descriptor(desc))
+
+
+def from_property_descriptor(desc, space):
+ if not desc:
+ return {}
+ obj = space.NewObject()
+ if is_data_descriptor(desc):
+ obj.define_own_property(
+ 'value', {
+ 'value': desc['value'],
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ }, False)
+ obj.define_own_property(
+ 'writable', {
+ 'value': desc['writable'],
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ }, False)
+ else:
+ obj.define_own_property(
+ 'get', {
+ 'value': desc['get'],
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ }, False)
+ obj.define_own_property(
+ 'set', {
+ 'value': desc['set'],
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ }, False)
+ obj.define_own_property(
+ 'writable', {
+ 'value': desc['writable'],
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ }, False)
+ obj.define_own_property(
+ 'enumerable', {
+ 'value': desc['enumerable'],
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ }, False)
+ return obj
+
+
+def to_property_descriptor(obj):
+ if obj._type() != 'Object':
+ raise TypeError()
+ desc = {}
+ for e in ('enumerable', 'configurable', 'writable'):
+ if obj.has_property(e):
+ desc[e] = obj.get(e).to_boolean().value
+ if obj.has_property('value'):
+ desc['value'] = obj.get('value')
+ for e in ('get', 'set'):
+ if obj.has_property(e):
+ cand = obj.get(e)
+ if not (cand.is_callable() or cand.is_undefined()):
+ raise TypeError()
+ if ('get' in desc or 'set' in desc) and ('value' in desc
+ or 'writable' in desc):
+ raise TypeError()
diff --git a/Contents/Libraries/Shared/js2py/internals/fill_space.py b/Contents/Libraries/Shared/js2py/internals/fill_space.py
new file mode 100644
index 000000000..329c8b28f
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/fill_space.py
@@ -0,0 +1,281 @@
+from __future__ import unicode_literals
+
+from .base import Scope
+from .func_utils import *
+from .conversions import *
+import six
+from .prototypes.jsboolean import BooleanPrototype
+from .prototypes.jserror import ErrorPrototype
+from .prototypes.jsfunction import FunctionPrototype
+from .prototypes.jsnumber import NumberPrototype
+from .prototypes.jsobject import ObjectPrototype
+from .prototypes.jsregexp import RegExpPrototype
+from .prototypes.jsstring import StringPrototype
+from .prototypes.jsarray import ArrayPrototype
+from .prototypes import jsjson
+from .prototypes import jsutils
+
+from .constructors import jsnumber, jsstring, jsarray, jsboolean, jsregexp, jsmath, jsobject, jsfunction, jsconsole
+
+
+
+def fill_proto(proto, proto_class, space):
+ for i in dir(proto_class):
+ e = getattr(proto_class, i)
+ if six.PY2:
+ if hasattr(e, '__func__'):
+ meth = e.__func__
+ else:
+ continue
+ else:
+ if hasattr(e, '__call__') and not i.startswith('__'):
+ meth = e
+ else:
+ continue
+ meth_name = meth.__name__.strip('_') # RexExp._exec -> RegExp.exec
+ js_meth = space.NewFunction(meth, space.ctx, (), meth_name, False, ())
+ set_non_enumerable(proto, meth_name, js_meth)
+ return proto
+
+
+def easy_func(f, space):
+ return space.NewFunction(f, space.ctx, (), f.__name__, False, ())
+
+
+def Empty(this, args):
+ return undefined
+
+
+def set_non_enumerable(obj, name, prop):
+ obj.define_own_property(
+ unicode(name), {
+ 'value': prop,
+ 'writable': True,
+ 'enumerable': False,
+ 'configurable': True
+ }, True)
+
+
+def set_protected(obj, name, prop):
+ obj.define_own_property(
+ unicode(name), {
+ 'value': prop,
+ 'writable': False,
+ 'enumerable': False,
+ 'configurable': False
+ }, True)
+
+
+def fill_space(space, byte_generator):
+ # set global scope
+ global_scope = Scope({}, space, parent=None)
+ global_scope.THIS_BINDING = global_scope
+ global_scope.registers(byte_generator.declared_vars)
+ space.GlobalObj = global_scope
+
+ space.byte_generator = byte_generator
+
+ # first init all protos, later take care of constructors and details
+
+ # Function must be first obviously, we have to use a small trick to do that...
+ function_proto = space.NewFunction(Empty, space.ctx, (), 'Empty', False,
+ ())
+ space.FunctionPrototype = function_proto # this will fill the prototypes of the methods!
+ fill_proto(function_proto, FunctionPrototype, space)
+
+ # Object next
+ object_proto = space.NewObject() # no proto
+ fill_proto(object_proto, ObjectPrototype, space)
+ space.ObjectPrototype = object_proto
+ function_proto.prototype = object_proto
+
+ # Number
+ number_proto = space.NewObject()
+ number_proto.prototype = object_proto
+ fill_proto(number_proto, NumberPrototype, space)
+ number_proto.value = 0.
+ number_proto.Class = 'Number'
+ space.NumberPrototype = number_proto
+
+ # String
+ string_proto = space.NewObject()
+ string_proto.prototype = object_proto
+ fill_proto(string_proto, StringPrototype, space)
+ string_proto.value = u''
+ string_proto.Class = 'String'
+ space.StringPrototype = string_proto
+
+ # Boolean
+ boolean_proto = space.NewObject()
+ boolean_proto.prototype = object_proto
+ fill_proto(boolean_proto, BooleanPrototype, space)
+ boolean_proto.value = False
+ boolean_proto.Class = 'Boolean'
+ space.BooleanPrototype = boolean_proto
+
+ # Array
+ array_proto = space.NewArray(0)
+ array_proto.prototype = object_proto
+ fill_proto(array_proto, ArrayPrototype, space)
+ space.ArrayPrototype = array_proto
+
+ # JSON
+ json = space.NewObject()
+ json.put(u'stringify', easy_func(jsjson.stringify, space))
+ json.put(u'parse', easy_func(jsjson.parse, space))
+
+ # Utils
+ parseFloat = easy_func(jsutils.parseFloat, space)
+ parseInt = easy_func(jsutils.parseInt, space)
+ isNaN = easy_func(jsutils.isNaN, space)
+ isFinite = easy_func(jsutils.isFinite, space)
+
+ # Error
+ error_proto = space.NewError(u'Error', u'')
+ error_proto.prototype = object_proto
+ error_proto.put(u'name', u'Error')
+ fill_proto(error_proto, ErrorPrototype, space)
+ space.ErrorPrototype = error_proto
+
+ def construct_constructor(typ):
+ def creator(this, args):
+ message = get_arg(args, 0)
+ if not is_undefined(message):
+ msg = to_string(message)
+ else:
+ msg = u''
+ return space.NewError(typ, msg)
+
+ j = easy_func(creator, space)
+ j.name = unicode(typ)
+
+ set_protected(j, 'prototype', space.ERROR_TYPES[typ])
+
+ set_non_enumerable(space.ERROR_TYPES[typ], 'constructor', j)
+
+ def new_create(args, space):
+ message = get_arg(args, 0)
+ if not is_undefined(message):
+ msg = to_string(message)
+ else:
+ msg = u''
+ return space.NewError(typ, msg)
+
+ j.create = new_create
+ return j
+
+ # fill remaining error types
+ error_constructors = {}
+ for err_type_name in (u'Error', u'EvalError', u'RangeError',
+ u'ReferenceError', u'SyntaxError', u'TypeError',
+ u'URIError'):
+ extra_err = space.NewError(u'Error', u'')
+ extra_err.put(u'name', err_type_name)
+ setattr(space, err_type_name + u'Prototype', extra_err)
+ error_constructors[err_type_name] = construct_constructor(
+ err_type_name)
+
+ assert space.TypeErrorPrototype is not None
+
+ # RegExp
+ regexp_proto = space.NewRegExp(u'(?:)', u'')
+ regexp_proto.prototype = object_proto
+ fill_proto(regexp_proto, RegExpPrototype, space)
+ space.RegExpPrototype = regexp_proto
+
+ # Json
+
+ # now all these boring constructors...
+
+ # Number
+ number = easy_func(jsnumber.Number, space)
+ space.Number = number
+ number.create = jsnumber.NumberConstructor
+ set_non_enumerable(number_proto, 'constructor', number)
+ set_protected(number, 'prototype', number_proto)
+ # number has some extra constants
+ for k, v in jsnumber.CONSTS.items():
+ set_protected(number, k, v)
+
+ # String
+ string = easy_func(jsstring.String, space)
+ space.String = string
+ string.create = jsstring.StringConstructor
+ set_non_enumerable(string_proto, 'constructor', string)
+ set_protected(string, 'prototype', string_proto)
+ # string has an extra function
+ set_non_enumerable(string, 'fromCharCode',
+ easy_func(jsstring.fromCharCode, space))
+
+ # Boolean
+ boolean = easy_func(jsboolean.Boolean, space)
+ space.Boolean = boolean
+ boolean.create = jsboolean.BooleanConstructor
+ set_non_enumerable(boolean_proto, 'constructor', boolean)
+ set_protected(boolean, 'prototype', boolean_proto)
+
+ # Array
+ array = easy_func(jsarray.Array, space)
+ space.Array = array
+ array.create = jsarray.ArrayConstructor
+ set_non_enumerable(array_proto, 'constructor', array)
+ set_protected(array, 'prototype', array_proto)
+ array.put(u'isArray', easy_func(jsarray.isArray, space))
+
+ # RegExp
+ regexp = easy_func(jsregexp.RegExp, space)
+ space.RegExp = regexp
+ regexp.create = jsregexp.RegExpCreate
+ set_non_enumerable(regexp_proto, 'constructor', regexp)
+ set_protected(regexp, 'prototype', regexp_proto)
+
+ # Object
+ _object = easy_func(jsobject.Object, space)
+ space.Object = _object
+ _object.create = jsobject.ObjectCreate
+ set_non_enumerable(object_proto, 'constructor', _object)
+ set_protected(_object, 'prototype', object_proto)
+ fill_proto(_object, jsobject.ObjectMethods, space)
+
+ # Function
+ function = easy_func(jsfunction.Function, space)
+ space.Function = function
+
+ # Math
+ math = space.NewObject()
+ math.Class = 'Math'
+ fill_proto(math, jsmath.MathFunctions, space)
+ for k, v in jsmath.CONSTANTS.items():
+ set_protected(math, k, v)
+
+ console = space.NewObject()
+ fill_proto(console, jsconsole.ConsoleMethods, space)
+
+ # set global object
+ builtins = {
+ 'String': string,
+ 'Number': number,
+ 'Boolean': boolean,
+ 'RegExp': regexp,
+ 'exports': convert_to_js_type({}, space),
+ 'Math': math,
+ #'Date',
+ 'Object': _object,
+ 'Function': function,
+ 'JSON': json,
+ 'Array': array,
+ 'parseFloat': parseFloat,
+ 'parseInt': parseInt,
+ 'isFinite': isFinite,
+ 'isNaN': isNaN,
+ 'eval': easy_func(jsfunction._eval, space),
+ 'console': console,
+ 'log': console.get(u'log'),
+ }
+
+ builtins.update(error_constructors)
+
+ set_protected(global_scope, 'NaN', NaN)
+ set_protected(global_scope, 'Infinity', Infinity)
+ for k, v in builtins.items():
+ set_non_enumerable(global_scope, k, v)
diff --git a/Contents/Libraries/Shared/js2py/internals/func_utils.py b/Contents/Libraries/Shared/js2py/internals/func_utils.py
new file mode 100644
index 000000000..58dfef9ee
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/func_utils.py
@@ -0,0 +1,73 @@
+from .simplex import *
+from .conversions import *
+
+import six
+if six.PY3:
+ basestring = str
+ long = int
+ xrange = range
+ unicode = str
+
+
+def get_arg(arguments, n):
+ if len(arguments) <= n:
+ return undefined
+ return arguments[n]
+
+
+def ensure_js_types(args, space=None):
+ return tuple(convert_to_js_type(e, space=space) for e in args)
+
+
+def convert_to_js_type(e, space=None):
+ t = type(e)
+ if is_js_type(e):
+ return e
+ if t in (int, long, float):
+ return float(e)
+ elif isinstance(t, basestring):
+ return unicode(t)
+ elif t in (list, tuple):
+ if space is None:
+ raise MakeError(
+ 'TypeError',
+ 'Actually an internal error, could not convert to js type because space not specified'
+ )
+ return space.ConstructArray(ensure_js_types(e, space=space))
+ elif t == dict:
+ if space is None:
+ raise MakeError(
+ 'TypeError',
+ 'Actually an internal error, could not convert to js type because space not specified'
+ )
+ new = {}
+ for k, v in e.items():
+ new[to_string(convert_to_js_type(k, space))] = convert_to_js_type(
+ v, space)
+ return space.ConstructObject(new)
+ else:
+ raise MakeError('TypeError', 'Could not convert to js type!')
+
+
+def is_js_type(e):
+ if type(e) in PRIMITIVES:
+ return True
+ elif hasattr(e, 'Class') and hasattr(e, 'value'): # not perfect but works
+ return True
+ else:
+ return False
+
+
+# todo optimise these 2!
+def js_array_to_tuple(arr):
+ length = to_uint32(arr.get(u'length'))
+ return tuple(arr.get(unicode(e)) for e in xrange(length))
+
+
+def js_array_to_list(arr):
+ length = to_uint32(arr.get(u'length'))
+ return [arr.get(unicode(e)) for e in xrange(length)]
+
+
+def js_arr_length(arr):
+ return to_uint32(arr.get(u'length'))
diff --git a/Contents/Libraries/Shared/js2py/internals/gen.py b/Contents/Libraries/Shared/js2py/internals/gen.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/Contents/Libraries/Shared/js2py/internals/opcodes.py b/Contents/Libraries/Shared/js2py/internals/opcodes.py
new file mode 100644
index 000000000..15c57ccd1
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/opcodes.py
@@ -0,0 +1,805 @@
+from .operations import *
+from .base import get_member, get_member_dot, PyJsFunction, Scope
+
+
+class OP_CODE(object):
+ _params = []
+
+ # def eval(self, ctx):
+ # raise
+
+ def __repr__(self):
+ return self.__class__.__name__ + str(
+ tuple([getattr(self, e) for e in self._params]))
+
+
+# --------------------- UNARY ----------------------
+
+
+class UNARY_OP(OP_CODE):
+ _params = ['operator']
+
+ def __init__(self, operator):
+ self.operator = operator
+
+ def eval(self, ctx):
+ val = ctx.stack.pop()
+ ctx.stack.append(UNARY_OPERATIONS[self.operator](val))
+
+
+# special unary operations
+
+
+class TYPEOF(OP_CODE):
+ _params = ['identifier']
+
+ def __init__(self, identifier):
+ self.identifier = identifier
+
+ def eval(self, ctx):
+ # typeof something_undefined does not throw reference error
+ val = ctx.get(self.identifier,
+ False) # <= this makes it slightly different!
+ ctx.stack.append(typeof_uop(val))
+
+
+class POSTFIX(OP_CODE):
+ _params = ['cb', 'ca', 'identifier']
+
+ def __init__(self, post, incr, identifier):
+ self.identifier = identifier
+ self.cb = 1 if incr else -1
+ self.ca = -self.cb if post else 0
+
+ def eval(self, ctx):
+ target = to_number(ctx.get(self.identifier)) + self.cb
+ ctx.put(self.identifier, target)
+ ctx.stack.append(target + self.ca)
+
+
+class POSTFIX_MEMBER(OP_CODE):
+ _params = ['cb', 'ca']
+
+ def __init__(self, post, incr):
+ self.cb = 1 if incr else -1
+ self.ca = -self.cb if post else 0
+
+ def eval(self, ctx):
+ name = ctx.stack.pop()
+ left = ctx.stack.pop()
+
+ target = to_number(get_member(left, name, ctx.space)) + self.cb
+ if type(left) not in PRIMITIVES:
+ left.put_member(name, target)
+
+ ctx.stack.append(target + self.ca)
+
+
+class POSTFIX_MEMBER_DOT(OP_CODE):
+ _params = ['cb', 'ca', 'prop']
+
+ def __init__(self, post, incr, prop):
+ self.cb = 1 if incr else -1
+ self.ca = -self.cb if post else 0
+ self.prop = prop
+
+ def eval(self, ctx):
+ left = ctx.stack.pop()
+
+ target = to_number(get_member_dot(left, self.prop,
+ ctx.space)) + self.cb
+ if type(left) not in PRIMITIVES:
+ left.put(self.prop, target)
+
+ ctx.stack.append(target + self.ca)
+
+
+class DELETE(OP_CODE):
+ _params = ['name']
+
+ def __init__(self, name):
+ self.name = name
+
+ def eval(self, ctx):
+ ctx.stack.append(ctx.delete(self.name))
+
+
+class DELETE_MEMBER(OP_CODE):
+ def eval(self, ctx):
+ prop = to_string(ctx.stack.pop())
+ obj = to_object(ctx.stack.pop(), ctx)
+ ctx.stack.append(obj.delete(prop, False))
+
+
+# --------------------- BITWISE ----------------------
+
+
+class BINARY_OP(OP_CODE):
+ _params = ['operator']
+
+ def __init__(self, operator):
+ self.operator = operator
+
+ def eval(self, ctx):
+ right = ctx.stack.pop()
+ left = ctx.stack.pop()
+ ctx.stack.append(BINARY_OPERATIONS[self.operator](left, right))
+
+
+# &&, || and conditional are implemented in bytecode
+
+# --------------------- JUMPS ----------------------
+
+
+# simple label that will be removed from code after compilation. labels ID will be translated
+# to source code position.
+class LABEL(OP_CODE):
+ _params = ['num']
+
+ def __init__(self, num):
+ self.num = num
+
+
+# I implemented interpreter in the way that when an integer is returned by eval operation the execution will jump
+# to the location of the label (it is loc = label_locations[label])
+
+
+class BASE_JUMP(OP_CODE):
+ _params = ['label']
+
+ def __init__(self, label):
+ self.label = label
+
+
+class JUMP(BASE_JUMP):
+ def eval(self, ctx):
+ return self.label
+
+
+class JUMP_IF_TRUE(BASE_JUMP):
+ def eval(self, ctx):
+ val = ctx.stack.pop()
+ if to_boolean(val):
+ return self.label
+
+
+class JUMP_IF_EQ(BASE_JUMP):
+ # this one is used in switch statement - compares last 2 values using === operator and jumps popping both if true else pops last.
+ def eval(self, ctx):
+ cmp = ctx.stack.pop()
+ if strict_equality_op(ctx.stack[-1], cmp):
+ ctx.stack.pop()
+ return self.label
+
+
+class JUMP_IF_TRUE_WITHOUT_POP(BASE_JUMP):
+ def eval(self, ctx):
+ val = ctx.stack[-1]
+ if to_boolean(val):
+ return self.label
+
+
+class JUMP_IF_FALSE(BASE_JUMP):
+ def eval(self, ctx):
+ val = ctx.stack.pop()
+ if not to_boolean(val):
+ return self.label
+
+
+class JUMP_IF_FALSE_WITHOUT_POP(BASE_JUMP):
+ def eval(self, ctx):
+ val = ctx.stack[-1]
+ if not to_boolean(val):
+ return self.label
+
+
+class POP(OP_CODE):
+ def eval(self, ctx):
+ # todo remove this check later
+ assert len(ctx.stack), 'Popped from empty stack!'
+ del ctx.stack[-1]
+
+
+# class REDUCE(OP_CODE):
+# def eval(self, ctx):
+# assert len(ctx.stack)==2
+# ctx.stack[0] = ctx.stack[1]
+# del ctx.stack[1]
+
+# --------------- LOADING --------------
+
+
+class LOAD_NONE(OP_CODE): # be careful with this :)
+ _params = []
+
+ def eval(self, ctx):
+ ctx.stack.append(None)
+
+
+class LOAD_N_TUPLE(
+ OP_CODE
+): # loads the tuple composed of n last elements on stack. elements are popped.
+ _params = ['n']
+
+ def __init__(self, n):
+ self.n = n
+
+ def eval(self, ctx):
+ tup = tuple(ctx.stack[-self.n:])
+ del ctx.stack[-self.n:]
+ ctx.stack.append(tup)
+
+
+class LOAD_UNDEFINED(OP_CODE):
+ def eval(self, ctx):
+ ctx.stack.append(undefined)
+
+
+class LOAD_NULL(OP_CODE):
+ def eval(self, ctx):
+ ctx.stack.append(null)
+
+
+class LOAD_BOOLEAN(OP_CODE):
+ _params = ['val']
+
+ def __init__(self, val):
+ assert val in (0, 1)
+ self.val = bool(val)
+
+ def eval(self, ctx):
+ ctx.stack.append(self.val)
+
+
+class LOAD_STRING(OP_CODE):
+ _params = ['val']
+
+ def __init__(self, val):
+ assert isinstance(val, basestring)
+ self.val = unicode(val)
+
+ def eval(self, ctx):
+ ctx.stack.append(self.val)
+
+
+class LOAD_NUMBER(OP_CODE):
+ _params = ['val']
+
+ def __init__(self, val):
+ assert isinstance(val, (float, int, long))
+ self.val = float(val)
+
+ def eval(self, ctx):
+ ctx.stack.append(self.val)
+
+
+class LOAD_REGEXP(OP_CODE):
+ _params = ['body', 'flags']
+
+ def __init__(self, body, flags):
+ self.body = body
+ self.flags = flags
+
+ def eval(self, ctx):
+ # we have to generate a new regexp - they are mutable
+ ctx.stack.append(ctx.space.NewRegExp(self.body, self.flags))
+
+
+class LOAD_FUNCTION(OP_CODE):
+ _params = ['start', 'params', 'name', 'is_declaration', 'definitions']
+
+ def __init__(self, start, params, name, is_declaration, definitions):
+ assert type(start) == int
+ self.start = start # its an ID of label pointing to the beginning of the function bytecode
+ self.params = params
+ self.name = name
+ self.is_declaration = bool(is_declaration)
+ self.definitions = tuple(set(definitions + params))
+
+ def eval(self, ctx):
+ ctx.stack.append(
+ ctx.space.NewFunction(self.start, ctx, self.params, self.name,
+ self.is_declaration, self.definitions))
+
+
+class LOAD_OBJECT(OP_CODE):
+ _params = [
+ 'props'
+ ] # props are py string pairs (prop_name, kind): kind can be either i, g or s. (init, get, set)
+
+ def __init__(self, props):
+ self.num = len(props)
+ self.props = props
+
+ def eval(self, ctx):
+ obj = ctx.space.NewObject()
+ if self.num:
+ obj._init(self.props, ctx.stack[-self.num:])
+ del ctx.stack[-self.num:]
+
+ ctx.stack.append(obj)
+
+
+class LOAD_ARRAY(OP_CODE):
+ _params = ['num']
+
+ def __init__(self, num):
+ self.num = num
+
+ def eval(self, ctx):
+ arr = ctx.space.NewArray(self.num)
+ if self.num:
+ arr._init(ctx.stack[-self.num:])
+ del ctx.stack[-self.num:]
+ ctx.stack.append(arr)
+
+
+class LOAD_THIS(OP_CODE):
+ def eval(self, ctx):
+ ctx.stack.append(ctx.THIS_BINDING)
+
+
+class LOAD(OP_CODE): # todo check!
+ _params = ['identifier']
+
+ def __init__(self, identifier):
+ self.identifier = identifier
+
+ # 11.1.2
+ def eval(self, ctx):
+ ctx.stack.append(ctx.get(self.identifier, throw=True))
+
+
+class LOAD_MEMBER(OP_CODE):
+ def eval(self, ctx):
+ prop = ctx.stack.pop()
+ obj = ctx.stack.pop()
+ ctx.stack.append(get_member(obj, prop, ctx.space))
+
+
+class LOAD_MEMBER_DOT(OP_CODE):
+ _params = ['prop']
+
+ def __init__(self, prop):
+ self.prop = prop
+
+ def eval(self, ctx):
+ obj = ctx.stack.pop()
+ ctx.stack.append(get_member_dot(obj, self.prop, ctx.space))
+
+
+# --------------- STORING --------------
+
+
+class STORE(OP_CODE):
+ _params = ['identifier']
+
+ def __init__(self, identifier):
+ self.identifier = identifier
+
+ def eval(self, ctx):
+ value = ctx.stack[-1] # don't pop
+ ctx.put(self.identifier, value)
+
+
+class STORE_MEMBER(OP_CODE):
+ def eval(self, ctx):
+ value = ctx.stack.pop()
+ name = ctx.stack.pop()
+ left = ctx.stack.pop()
+
+ typ = type(left)
+ if typ in PRIMITIVES:
+ prop = to_string(name)
+ if typ == NULL_TYPE:
+ raise MakeError('TypeError',
+ "Cannot set property '%s' of null" % prop)
+ elif typ == UNDEFINED_TYPE:
+ raise MakeError('TypeError',
+ "Cannot set property '%s' of undefined" % prop)
+ # just ignore...
+ else:
+ left.put_member(name, value)
+
+ ctx.stack.append(value)
+
+
+class STORE_MEMBER_DOT(OP_CODE):
+ _params = ['prop']
+
+ def __init__(self, prop):
+ self.prop = prop
+
+ def eval(self, ctx):
+ value = ctx.stack.pop()
+ left = ctx.stack.pop()
+
+ typ = type(left)
+ if typ in PRIMITIVES:
+ if typ == NULL_TYPE:
+ raise MakeError('TypeError',
+ "Cannot set property '%s' of null" % self.prop)
+ elif typ == UNDEFINED_TYPE:
+ raise MakeError(
+ 'TypeError',
+ "Cannot set property '%s' of undefined" % self.prop)
+ # just ignore...
+ else:
+ left.put(self.prop, value)
+ ctx.stack.append(value)
+
+
+class STORE_OP(OP_CODE):
+ _params = ['identifier', 'op']
+
+ def __init__(self, identifier, op):
+ self.identifier = identifier
+ self.op = op
+
+ def eval(self, ctx):
+ value = ctx.stack.pop()
+ new_value = BINARY_OPERATIONS[self.op](ctx.get(self.identifier), value)
+ ctx.put(self.identifier, new_value)
+ ctx.stack.append(new_value)
+
+
+class STORE_MEMBER_OP(OP_CODE):
+ _params = ['op']
+
+ def __init__(self, op):
+ self.op = op
+
+ def eval(self, ctx):
+ value = ctx.stack.pop()
+ name = ctx.stack.pop()
+ left = ctx.stack.pop()
+
+ typ = type(left)
+ if typ in PRIMITIVES:
+ if typ is NULL_TYPE:
+ raise MakeError(
+ 'TypeError',
+ "Cannot set property '%s' of null" % to_string(name))
+ elif typ is UNDEFINED_TYPE:
+ raise MakeError(
+ 'TypeError',
+ "Cannot set property '%s' of undefined" % to_string(name))
+ ctx.stack.append(BINARY_OPERATIONS[self.op](get_member(
+ left, name, ctx.space), value))
+ return
+ else:
+ ctx.stack.append(BINARY_OPERATIONS[self.op](get_member(
+ left, name, ctx.space), value))
+ left.put_member(name, ctx.stack[-1])
+
+
+class STORE_MEMBER_DOT_OP(OP_CODE):
+ _params = ['prop', 'op']
+
+ def __init__(self, prop, op):
+ self.prop = prop
+ self.op = op
+
+ def eval(self, ctx):
+ value = ctx.stack.pop()
+ left = ctx.stack.pop()
+
+ typ = type(left)
+ if typ in PRIMITIVES:
+ if typ == NULL_TYPE:
+ raise MakeError('TypeError',
+ "Cannot set property '%s' of null" % self.prop)
+ elif typ == UNDEFINED_TYPE:
+ raise MakeError(
+ 'TypeError',
+ "Cannot set property '%s' of undefined" % self.prop)
+ ctx.stack.append(BINARY_OPERATIONS[self.op](get_member_dot(
+ left, self.prop, ctx.space), value))
+ return
+ else:
+ ctx.stack.append(BINARY_OPERATIONS[self.op](get_member_dot(
+ left, self.prop, ctx.space), value))
+ left.put(self.prop, ctx.stack[-1])
+
+
+# --------------- CALLS --------------
+
+
+def bytecode_call(ctx, func, this, args):
+ if type(func) is not PyJsFunction:
+ raise MakeError('TypeError', "%s is not a function" % Type(func))
+ if func.is_native: # call to built-in function or method
+ ctx.stack.append(func.call(this, args))
+ return None
+
+ # therefore not native. we have to return (new_context, function_label) to instruct interpreter to call
+ return func._generate_my_context(this, args), func.code
+
+
+class CALL(OP_CODE):
+ def eval(self, ctx):
+ args = ctx.stack.pop()
+ func = ctx.stack.pop()
+
+ return bytecode_call(ctx, func, ctx.space.GlobalObj, args)
+
+
+class CALL_METHOD(OP_CODE):
+ def eval(self, ctx):
+ args = ctx.stack.pop()
+ prop = ctx.stack.pop()
+ base = ctx.stack.pop()
+
+ func = get_member(base, prop, ctx.space)
+
+ return bytecode_call(ctx, func, base, args)
+
+
+class CALL_METHOD_DOT(OP_CODE):
+ _params = ['prop']
+
+ def __init__(self, prop):
+ self.prop = prop
+
+ def eval(self, ctx):
+ args = ctx.stack.pop()
+ base = ctx.stack.pop()
+
+ func = get_member_dot(base, self.prop, ctx.space)
+
+ return bytecode_call(ctx, func, base, args)
+
+
+class CALL_NO_ARGS(OP_CODE):
+ def eval(self, ctx):
+ func = ctx.stack.pop()
+
+ return bytecode_call(ctx, func, ctx.space.GlobalObj, ())
+
+
+class CALL_METHOD_NO_ARGS(OP_CODE):
+ def eval(self, ctx):
+ prop = ctx.stack.pop()
+ base = ctx.stack.pop()
+
+ func = get_member(base, prop, ctx.space)
+
+ return bytecode_call(ctx, func, base, ())
+
+
+class CALL_METHOD_DOT_NO_ARGS(OP_CODE):
+ _params = ['prop']
+
+ def __init__(self, prop):
+ self.prop = prop
+
+ def eval(self, ctx):
+ base = ctx.stack.pop()
+
+ func = get_member_dot(base, self.prop, ctx.space)
+
+ return bytecode_call(ctx, func, base, ())
+
+
+class NOP(OP_CODE):
+ def eval(self, ctx):
+ pass
+
+
+class RETURN(OP_CODE):
+ def eval(
+ self, ctx
+ ): # remember to load the return value on stack before using RETURN op.
+ return (None, None)
+
+
+class NEW(OP_CODE):
+ def eval(self, ctx):
+ args = ctx.stack.pop()
+ constructor = ctx.stack.pop()
+ if type(constructor) in PRIMITIVES or not hasattr(
+ constructor, 'create'):
+ raise MakeError('TypeError',
+ '%s is not a constructor' % Type(constructor))
+ ctx.stack.append(constructor.create(args, space=ctx.space))
+
+
+class NEW_NO_ARGS(OP_CODE):
+ def eval(self, ctx):
+ constructor = ctx.stack.pop()
+ if type(constructor) in PRIMITIVES or not hasattr(
+ constructor, 'create'):
+ raise MakeError('TypeError',
+ '%s is not a constructor' % Type(constructor))
+ ctx.stack.append(constructor.create((), space=ctx.space))
+
+
+# --------------- EXCEPTIONS --------------
+
+
+class THROW(OP_CODE):
+ def eval(self, ctx):
+ raise MakeError(None, None, ctx.stack.pop())
+
+
+class TRY_CATCH_FINALLY(OP_CODE):
+ _params = [
+ 'try_label', 'catch_label', 'catch_variable', 'finally_label',
+ 'finally_present', 'end_label'
+ ]
+
+ def __init__(self, try_label, catch_label, catch_variable, finally_label,
+ finally_present, end_label):
+ self.try_label = try_label
+ self.catch_label = catch_label
+ self.catch_variable = catch_variable
+ self.finally_label = finally_label
+ self.finally_present = finally_present
+ self.end_label = end_label
+
+ def eval(self, ctx):
+ # 4 different exectution results
+ # 0=normal, 1=return, 2=jump_outside, 3=errors
+ # execute_fragment_under_context returns:
+ # (return_value, typ, jump_loc/error)
+
+ ctx.stack.pop()
+
+ # execute try statement
+ try_status = ctx.space.exe.execute_fragment_under_context(
+ ctx, self.try_label, self.catch_label)
+
+ errors = try_status[1] == 3
+
+ # catch
+ if errors and self.catch_variable is not None:
+ # generate catch block context...
+ catch_context = Scope({
+ self.catch_variable:
+ try_status[2].get_thrown_value(ctx.space)
+ }, ctx.space, ctx)
+ catch_context.THIS_BINDING = ctx.THIS_BINDING
+ catch_status = ctx.space.exe.execute_fragment_under_context(
+ catch_context, self.catch_label, self.finally_label)
+ else:
+ catch_status = None
+
+ # finally
+ if self.finally_present:
+ finally_status = ctx.space.exe.execute_fragment_under_context(
+ ctx, self.finally_label, self.end_label)
+ else:
+ finally_status = None
+
+ # now return controls
+ other_status = catch_status or try_status
+ if finally_status is None or (finally_status[1] == 0
+ and other_status[1] != 0):
+ winning_status = other_status
+ else:
+ winning_status = finally_status
+
+ val, typ, spec = winning_status
+ if typ == 0: # normal
+ ctx.stack.append(val)
+ return
+ elif typ == 1: # return
+ ctx.stack.append(spec)
+ return None, None # send return signal
+ elif typ == 2: # jump outside
+ ctx.stack.append(val)
+ return spec
+ elif typ == 3:
+ # throw is made with empty stack as usual
+ raise spec
+ else:
+ raise RuntimeError('Invalid return code')
+
+
+# ------------ WITH + ITERATORS ----------
+
+
+class WITH(OP_CODE):
+ _params = ['beg_label', 'end_label']
+
+ def __init__(self, beg_label, end_label):
+ self.beg_label = beg_label
+ self.end_label = end_label
+
+ def eval(self, ctx):
+ obj = to_object(ctx.stack.pop(), ctx.space)
+
+ with_context = Scope(
+ obj, ctx.space, ctx) # todo actually use the obj to modify the ctx
+ with_context.THIS_BINDING = ctx.THIS_BINDING
+ status = ctx.space.exe.execute_fragment_under_context(
+ with_context, self.beg_label, self.end_label)
+
+ val, typ, spec = status
+
+ if typ != 3: # exception
+ ctx.stack.pop()
+
+ if typ == 0: # normal
+ ctx.stack.append(val)
+ return
+ elif typ == 1: # return
+ ctx.stack.append(spec)
+ return None, None # send return signal
+ elif typ == 2: # jump outside
+ ctx.stack.append(val)
+ return spec
+ elif typ == 3: # exception
+ # throw is made with empty stack as usual
+ raise spec
+ else:
+ raise RuntimeError('Invalid return code')
+
+
+class FOR_IN(OP_CODE):
+ _params = ['name', 'body_start_label', 'continue_label', 'break_label']
+
+ def __init__(self, name, body_start_label, continue_label, break_label):
+ self.name = name
+ self.body_start_label = body_start_label
+ self.continue_label = continue_label
+ self.break_label = break_label
+
+ def eval(self, ctx):
+ iterable = ctx.stack.pop()
+ if is_null(iterable) or is_undefined(iterable):
+ ctx.stack.pop()
+ ctx.stack.append(undefined)
+ return self.break_label
+
+ obj = to_object(iterable, ctx.space)
+
+ for e in sorted(obj.own):
+ if not obj.own[e]['enumerable']:
+ continue
+
+ ctx.put(
+ self.name, e
+ ) # JS would have been so much nicer if this was ctx.space.put(self.name, obj.get(e))
+
+ # evaluate the body
+ status = ctx.space.exe.execute_fragment_under_context(
+ ctx, self.body_start_label, self.break_label)
+
+ val, typ, spec = status
+
+ if typ != 3: # exception
+ ctx.stack.pop()
+
+ if typ == 0: # normal
+ ctx.stack.append(val)
+ continue
+ elif typ == 1: # return
+ ctx.stack.append(spec)
+ return None, None # send return signal
+ elif typ == 2: # jump outside
+ # now have to figure out whether this is a continue or something else...
+ ctx.stack.append(val)
+ if spec == self.continue_label:
+ # just a continue, perform next iteration as normal
+ continue
+ return spec # break or smth, go there and finish the iteration
+ elif typ == 3: # exception
+ # throw is made with empty stack as usual
+ raise spec
+ else:
+ raise RuntimeError('Invalid return code')
+
+ return self.break_label
+
+
+# all opcodes...
+OP_CODES = {}
+g = ''
+for g in globals():
+ try:
+ if not issubclass(globals()[g], OP_CODE) or g is 'OP_CODE':
+ continue
+ except:
+ continue
+ OP_CODES[g] = globals()[g]
diff --git a/Contents/Libraries/Shared/js2py/internals/operations.py b/Contents/Libraries/Shared/js2py/internals/operations.py
new file mode 100644
index 000000000..35b901794
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/operations.py
@@ -0,0 +1,314 @@
+from __future__ import unicode_literals
+from .simplex import *
+from .conversions import *
+
+# ------------------------------------------------------------------------------
+# Unary operations
+
+
+# -x
+def minus_uop(self):
+ return -to_number(self)
+
+
+# +x
+def plus_uop(self): # +u
+ return to_number(self)
+
+
+# !x
+def logical_negation_uop(self): # !u cant do 'not u' :(
+ return not to_boolean(self)
+
+
+# typeof x
+def typeof_uop(self):
+ if is_callable(self):
+ return u'function'
+ typ = Type(self).lower()
+ if typ == u'null':
+ typ = u'object' # absolutely idiotic...
+ return typ
+
+
+# ~u
+def bit_invert_uop(self):
+ return float(to_int32(float(~to_int32(self))))
+
+
+# void
+def void_op(self):
+ return undefined
+
+
+UNARY_OPERATIONS = {
+ '+': plus_uop,
+ '-': minus_uop,
+ '!': logical_negation_uop,
+ '~': bit_invert_uop,
+ 'void': void_op,
+ 'typeof':
+ typeof_uop, # this one only for member expressions! for identifiers its slightly different...
+}
+
+# ------------------------------------------------------------------------------
+# ----- binary ops -------
+
+# Bitwise operators
+# <<, >>, &, ^, |, ~
+
+
+# <<
+def bit_lshift_op(self, other):
+ lnum = to_int32(self)
+ rnum = to_uint32(other)
+ shiftCount = rnum & 0x1F
+ return float(to_int32(float(lnum << shiftCount)))
+
+
+# >>
+def bit_rshift_op(self, other):
+ lnum = to_int32(self)
+ rnum = to_uint32(other)
+ shiftCount = rnum & 0x1F
+ return float(to_int32(float(lnum >> shiftCount)))
+
+
+# >>>
+def bit_bshift_op(self, other):
+ lnum = to_uint32(self)
+ rnum = to_uint32(other)
+ shiftCount = rnum & 0x1F
+ return float(to_uint32(float(lnum >> shiftCount)))
+
+
+# &
+def bit_and_op(self, other):
+ lnum = to_int32(self)
+ rnum = to_int32(other)
+ return float(to_int32(float(lnum & rnum)))
+
+
+# ^
+def bit_xor_op(self, other):
+ lnum = to_int32(self)
+ rnum = to_int32(other)
+ return float(to_int32(float(lnum ^ rnum)))
+
+
+# |
+def bit_or_op(self, other):
+ lnum = to_int32(self)
+ rnum = to_int32(other)
+ return float(to_int32(float(lnum | rnum)))
+
+
+# Additive operators
+# + and - are implemented here
+
+
+# +
+def add_op(self, other):
+ if type(self) is float and type(other) is float:
+ return self + other
+ if type(self) is unicode and type(other) is unicode:
+ return self + other
+ # standard way...
+ a = to_primitive(self)
+ b = to_primitive(other)
+ if type(a) is unicode or type(b) is unicode: # string wins hehe
+ return to_string(a) + to_string(b)
+ return to_number(a) + to_number(b)
+
+
+# -
+def sub_op(self, other):
+ return to_number(self) - to_number(other)
+
+
+# Multiplicative operators
+# *, / and % are implemented here
+
+
+# *
+def mul_op(self, other):
+ return to_number(self) * to_number(other)
+
+
+# /
+def div_op(self, other):
+ a = to_number(self)
+ b = to_number(other)
+ if b:
+ return a / float(b) # ensure at least one is a float.
+ if not a or a != a:
+ return NaN
+ return Infinity if a > 0 else -Infinity
+
+
+# %
+def mod_op(self, other):
+ a = to_number(self)
+ b = to_number(other)
+ if abs(a) == Infinity or not b:
+ return NaN
+ if abs(b) == Infinity:
+ return a
+ pyres = a % b # different signs in python and javascript
+ # python has the same sign as b and js has the same
+ # sign as a.
+ if a < 0 and pyres > 0:
+ pyres -= abs(b)
+ elif a > 0 and pyres < 0:
+ pyres += abs(b)
+ return float(pyres)
+
+
+# Comparisons
+# <, <=, !=, ==, >=, > are implemented here.
+def abstract_relational_comparison(self, other,
+ self_first=True): # todo speed up!
+ ''' self=
+def greater_eq_op(self, other):
+ res = abstract_relational_comparison(self, other, True)
+ if res is None:
+ return False
+ return not res
+
+
+# >
+def greater_op(self, other):
+ res = abstract_relational_comparison(self, other, False)
+ if res is None:
+ return False
+ return res
+
+
+# equality
+
+
+def abstract_equality_op(self, other):
+ ''' returns the result of JS == compare.
+ result is PyJs type: bool'''
+ tx, ty = Type(self), Type(other)
+ if tx == ty:
+ if tx == 'Undefined' or tx == 'Null':
+ return True
+ if tx == 'Number' or tx == 'String' or tx == 'Boolean':
+ return self == other
+ return self is other # Object
+ elif (tx == 'Undefined' and ty == 'Null') or (ty == 'Undefined'
+ and tx == 'Null'):
+ return True
+ elif tx == 'Number' and ty == 'String':
+ return abstract_equality_op(self, to_number(other))
+ elif tx == 'String' and ty == 'Number':
+ return abstract_equality_op(to_number(self), other)
+ elif tx == 'Boolean':
+ return abstract_equality_op(to_number(self), other)
+ elif ty == 'Boolean':
+ return abstract_equality_op(self, to_number(other))
+ elif (tx == 'String' or tx == 'Number') and is_object(other):
+ return abstract_equality_op(self, to_primitive(other))
+ elif (ty == 'String' or ty == 'Number') and is_object(self):
+ return abstract_equality_op(to_primitive(self), other)
+ else:
+ return False
+
+
+def abstract_inequality_op(self, other):
+ return not abstract_equality_op(self, other)
+
+
+def strict_equality_op(self, other):
+ typ = Type(self)
+ if typ != Type(other):
+ return False
+ if typ == 'Undefined' or typ == 'Null':
+ return True
+ if typ == 'Boolean' or typ == 'String' or typ == 'Number':
+ return self == other
+ else: # object
+ return self is other # Id compare.
+
+
+def strict_inequality_op(self, other):
+ return not strict_equality_op(self, other)
+
+
+def instanceof_op(self, other):
+ '''checks if self is instance of other'''
+ if not hasattr(other, 'has_instance'):
+ return False
+ return other.has_instance(self)
+
+
+def in_op(self, other):
+ '''checks if self is in other'''
+ if not is_object(other):
+ raise MakeError(
+ 'TypeError',
+ "You can\'t use 'in' operator to search in non-objects")
+ return other.has_property(to_string(self))
+
+
+BINARY_OPERATIONS = {
+ '+': add_op,
+ '-': sub_op,
+ '*': mul_op,
+ '/': div_op,
+ '%': mod_op,
+ '<<': bit_lshift_op,
+ '>>': bit_rshift_op,
+ '>>>': bit_bshift_op,
+ '|': bit_or_op,
+ '&': bit_and_op,
+ '^': bit_xor_op,
+ '==': abstract_equality_op,
+ '!=': abstract_inequality_op,
+ '===': strict_equality_op,
+ '!==': strict_inequality_op,
+ '<': less_op,
+ '<=': less_eq_op,
+ '>': greater_op,
+ '>=': greater_eq_op,
+ 'in': in_op,
+ 'instanceof': instanceof_op,
+}
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/__init__.py b/Contents/Libraries/Shared/js2py/internals/prototypes/__init__.py
new file mode 100644
index 000000000..8de79cb9d
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/__init__.py
@@ -0,0 +1 @@
+__author__ = 'Piotr Dabkowski'
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jsarray.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jsarray.py
new file mode 100644
index 000000000..ace774ece
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jsarray.py
@@ -0,0 +1,489 @@
+from __future__ import unicode_literals
+from ..conversions import *
+from ..func_utils import *
+from ..operations import strict_equality_op
+
+import six
+
+if six.PY3:
+ xrange = range
+ import functools
+
+ARR_STACK = set({})
+
+
+class ArrayPrototype:
+ def toString(this, args):
+ arr = to_object(this, args.space)
+ func = arr.get('join')
+ if not is_callable(func):
+ return u'[object %s]' % GetClass(arr)
+ return func.call(this, ())
+
+ def toLocaleString(this, args):
+ array = to_object(this, args.space)
+ arr_len = js_arr_length(array)
+ # separator is simply a comma ','
+ if not arr_len:
+ return ''
+ res = []
+ for i in xrange(arr_len):
+ element = array.get(unicode(i))
+ if is_undefined(element) or is_null(element):
+ res.append('')
+ else:
+ cand = to_object(element, args.space)
+ str_func = cand.get('toLocaleString')
+ if not is_callable(str_func):
+ raise MakeError(
+ 'TypeError',
+ 'toLocaleString method of item at index %d is not callable'
+ % i)
+ res.append(to_string(str_func.call(cand, ())))
+ return ','.join(res)
+
+ def concat(this, args):
+ array = to_object(this, args.space)
+ items = [array]
+ items.extend(tuple(args))
+ A = []
+ for E in items:
+ if GetClass(E) == 'Array':
+ k = 0
+ e_len = js_arr_length(E)
+ while k < e_len:
+ if E.has_property(unicode(k)):
+ A.append(E.get(unicode(k)))
+ k += 1
+ else:
+ A.append(E)
+ return args.space.ConstructArray(A)
+
+ def join(this, args):
+ ARR_STACK.add(this)
+ array = to_object(this, args.space)
+ separator = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ separator = ',' if is_undefined(separator) else to_string(separator)
+ elems = []
+ for e in xrange(arr_len):
+ elem = array.get(unicode(e))
+ if elem in ARR_STACK:
+ s = ''
+ else:
+ s = to_string(elem)
+ elems.append(
+ s if not (is_undefined(elem) or is_null(elem)) else '')
+ res = separator.join(elems)
+ ARR_STACK.remove(this)
+ return res
+
+ def pop(this, args): #todo check
+ array = to_object(this, args.space)
+ arr_len = js_arr_length(array)
+ if not arr_len:
+ array.put('length', float(arr_len))
+ return undefined
+ ind = unicode(arr_len - 1)
+ element = array.get(ind)
+ array.delete(ind)
+ array.put('length', float(arr_len - 1))
+ return element
+
+ def push(this, args):
+ array = to_object(this, args.space)
+ arr_len = js_arr_length(array)
+ to_put = tuple(args)
+ i = arr_len
+ for i, e in enumerate(to_put, arr_len):
+ array.put(unicode(i), e, True)
+ array.put('length', float(arr_len + len(to_put)), True)
+ return float(i)
+
+ def reverse(this, args):
+ array = to_object(this, args.space)
+ vals = js_array_to_list(array)
+ has_props = [
+ array.has_property(unicode(e))
+ for e in xrange(js_arr_length(array))
+ ]
+ vals.reverse()
+ has_props.reverse()
+ for i, val in enumerate(vals):
+ if has_props[i]:
+ array.put(unicode(i), val)
+ else:
+ array.delete(unicode(i))
+ return array
+
+ def shift(this, args):
+ array = to_object(this, args.space)
+ arr_len = js_arr_length(array)
+ if not arr_len:
+ array.put('length', 0.)
+ return undefined
+ first = array.get('0')
+ for k in xrange(1, arr_len):
+ from_s, to_s = unicode(k), unicode(k - 1)
+ if array.has_property(from_s):
+ array.put(to_s, array.get(from_s))
+ else:
+ array.delete(to_s)
+ array.delete(unicode(arr_len - 1))
+ array.put('length', float(arr_len - 1))
+ return first
+
+ def slice(this, args): # todo check
+ array = to_object(this, args.space)
+ start = get_arg(args, 0)
+ end = get_arg(args, 1)
+ arr_len = js_arr_length(array)
+ relative_start = to_int(start)
+ k = max((arr_len + relative_start), 0) if relative_start < 0 else min(
+ relative_start, arr_len)
+ relative_end = arr_len if is_undefined(end) else to_int(end)
+ final = max((arr_len + relative_end), 0) if relative_end < 0 else min(
+ relative_end, arr_len)
+ res = []
+ n = 0
+ while k < final:
+ pk = unicode(k)
+ if array.has_property(pk):
+ res.append(array.get(pk))
+ k += 1
+ n += 1
+ return args.space.ConstructArray(res)
+
+ def sort(
+ this, args
+ ): # todo: this assumes array continous (not sparse) - fix for sparse arrays
+ cmpfn = get_arg(args, 0)
+ if not GetClass(this) in ('Array', 'Arguments'):
+ return to_object(this, args.space) # do nothing
+ arr_len = js_arr_length(this)
+ if not arr_len:
+ return this
+ arr = [
+ (this.get(unicode(e)) if this.has_property(unicode(e)) else None)
+ for e in xrange(arr_len)
+ ]
+ if not is_callable(cmpfn):
+ cmpfn = None
+ cmp = lambda a, b: sort_compare(a, b, cmpfn)
+ if six.PY3:
+ key = functools.cmp_to_key(cmp)
+ arr.sort(key=key)
+ else:
+ arr.sort(cmp=cmp)
+ for i in xrange(arr_len):
+ if arr[i] is None:
+ this.delete(unicode(i))
+ else:
+ this.put(unicode(i), arr[i])
+ return this
+
+ def splice(this, args):
+ # 1-8
+ array = to_object(this, args.space)
+ start = get_arg(args, 0)
+ deleteCount = get_arg(args, 1)
+ arr_len = js_arr_length(this)
+ relative_start = to_int(start)
+ actual_start = max(
+ (arr_len + relative_start), 0) if relative_start < 0 else min(
+ relative_start, arr_len)
+ actual_delete_count = min(
+ max(to_int(deleteCount), 0), arr_len - actual_start)
+ k = 0
+ A = args.space.NewArray(0)
+ # 9
+ while k < actual_delete_count:
+ if array.has_property(unicode(actual_start + k)):
+ A.put(unicode(k), array.get(unicode(actual_start + k)))
+ k += 1
+ # 10-11
+ items = list(args)[2:]
+ items_len = len(items)
+ # 12
+ if items_len < actual_delete_count:
+ k = actual_start
+ while k < (arr_len - actual_delete_count):
+ fr = unicode(k + actual_delete_count)
+ to = unicode(k + items_len)
+ if array.has_property(fr):
+ array.put(to, array.get(fr))
+ else:
+ array.delete(to)
+ k += 1
+ k = arr_len
+ while k > (arr_len - actual_delete_count + items_len):
+ array.delete(unicode(k - 1))
+ k -= 1
+ # 13
+ elif items_len > actual_delete_count:
+ k = arr_len - actual_delete_count
+ while k > actual_start:
+ fr = unicode(k + actual_delete_count - 1)
+ to = unicode(k + items_len - 1)
+ if array.has_property(fr):
+ array.put(to, array.get(fr))
+ else:
+ array.delete(to)
+ k -= 1
+ # 14-17
+ k = actual_start
+ while items:
+ E = items.pop(0)
+ array.put(unicode(k), E)
+ k += 1
+ array.put('length', float(arr_len - actual_delete_count + items_len))
+ return A
+
+ def unshift(this, args):
+ array = to_object(this, args.space)
+ arr_len = js_arr_length(array)
+ argCount = len(args)
+ k = arr_len
+ while k > 0:
+ fr = unicode(k - 1)
+ to = unicode(k + argCount - 1)
+ if array.has_property(fr):
+ array.put(to, array.get(fr))
+ else:
+ array.delete(to)
+ k -= 1
+ items = tuple(args)
+ for j, e in enumerate(items):
+ array.put(unicode(j), e)
+ array.put('length', float(arr_len + argCount))
+ return float(arr_len + argCount)
+
+ def indexOf(this, args):
+ array = to_object(this, args.space)
+ searchElement = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ if arr_len == 0:
+ return -1.
+ if len(args) > 1:
+ n = to_int(args[1])
+ else:
+ n = 0
+ if n >= arr_len:
+ return -1.
+ if n >= 0:
+ k = n
+ else:
+ k = arr_len - abs(n)
+ if k < 0:
+ k = 0
+ while k < arr_len:
+ if array.has_property(unicode(k)):
+ elementK = array.get(unicode(k))
+ if strict_equality_op(searchElement, elementK):
+ return float(k)
+ k += 1
+ return -1.
+
+ def lastIndexOf(this, args):
+ array = to_object(this, args.space)
+ searchElement = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ if arr_len == 0:
+ return -1.
+ if len(args) > 1:
+ n = to_int(args[1])
+ else:
+ n = arr_len - 1
+ if n >= 0:
+ k = min(n, arr_len - 1)
+ else:
+ k = arr_len - abs(n)
+ while k >= 0:
+ if array.has_property(unicode(k)):
+ elementK = array.get(unicode(k))
+ if strict_equality_op(searchElement, elementK):
+ return float(k)
+ k -= 1
+ return -1.
+
+ def every(this, args):
+ array = to_object(this, args.space)
+ callbackfn = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ if not is_callable(callbackfn):
+ raise MakeError('TypeError', 'callbackfn must be a function')
+ T = get_arg(args, 1)
+ k = 0
+ while k < arr_len:
+ if array.has_property(unicode(k)):
+ kValue = array.get(unicode(k))
+ if not to_boolean(
+ callbackfn.call(T, (kValue, float(k), array))):
+ return False
+ k += 1
+ return True
+
+ def some(this, args):
+ array = to_object(this, args.space)
+ callbackfn = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ if not is_callable(callbackfn):
+ raise MakeError('TypeError', 'callbackfn must be a function')
+ T = get_arg(args, 1)
+ k = 0
+ while k < arr_len:
+ if array.has_property(unicode(k)):
+ kValue = array.get(unicode(k))
+ if to_boolean(callbackfn.call(T, (kValue, float(k), array))):
+ return True
+ k += 1
+ return False
+
+ def forEach(this, args):
+ array = to_object(this, args.space)
+ callbackfn = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ if not is_callable(callbackfn):
+ raise MakeError('TypeError', 'callbackfn must be a function')
+ _this = get_arg(args, 1)
+ k = 0
+ while k < arr_len:
+ sk = unicode(k)
+ if array.has_property(sk):
+ kValue = array.get(sk)
+ callbackfn.call(_this, (kValue, float(k), array))
+ k += 1
+ return undefined
+
+ def map(this, args):
+ array = to_object(this, args.space)
+ callbackfn = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ if not is_callable(callbackfn):
+ raise MakeError('TypeError', 'callbackfn must be a function')
+ _this = get_arg(args, 1)
+ k = 0
+ A = args.space.NewArray(0)
+ while k < arr_len:
+ Pk = unicode(k)
+ if array.has_property(Pk):
+ kValue = array.get(Pk)
+ mappedValue = callbackfn.call(_this, (kValue, float(k), array))
+ A.define_own_property(
+ Pk, {
+ 'value': mappedValue,
+ 'writable': True,
+ 'enumerable': True,
+ 'configurable': True
+ }, False)
+ k += 1
+ return A
+
+ def filter(this, args):
+ array = to_object(this, args.space)
+ callbackfn = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ if not is_callable(callbackfn):
+ raise MakeError('TypeError', 'callbackfn must be a function')
+ _this = get_arg(args, 1)
+ k = 0
+ res = []
+ while k < arr_len:
+ if array.has_property(unicode(k)):
+ kValue = array.get(unicode(k))
+ if to_boolean(
+ callbackfn.call(_this, (kValue, float(k), array))):
+ res.append(kValue)
+ k += 1
+ return args.space.ConstructArray(res)
+
+ def reduce(this, args):
+ array = to_object(this, args.space)
+ callbackfn = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ if not is_callable(callbackfn):
+ raise MakeError('TypeError', 'callbackfn must be a function')
+ if not arr_len and len(args) < 2:
+ raise MakeError('TypeError',
+ 'Reduce of empty array with no initial value')
+ k = 0
+ accumulator = undefined
+ if len(args) > 1: # initial value present
+ accumulator = args[1]
+ else:
+ kPresent = False
+ while not kPresent and k < arr_len:
+ kPresent = array.has_property(unicode(k))
+ if kPresent:
+ accumulator = array.get(unicode(k))
+ k += 1
+ if not kPresent:
+ raise MakeError('TypeError',
+ 'Reduce of empty array with no initial value')
+ while k < arr_len:
+ if array.has_property(unicode(k)):
+ kValue = array.get(unicode(k))
+ accumulator = callbackfn.call(
+ undefined, (accumulator, kValue, float(k), array))
+ k += 1
+ return accumulator
+
+ def reduceRight(this, args):
+ array = to_object(this, args.space)
+ callbackfn = get_arg(args, 0)
+ arr_len = js_arr_length(array)
+ if not is_callable(callbackfn):
+ raise MakeError('TypeError', 'callbackfn must be a function')
+ if not arr_len and len(args) < 2:
+ raise MakeError('TypeError',
+ 'Reduce of empty array with no initial value')
+ k = arr_len - 1
+ accumulator = undefined
+
+ if len(args) > 1: # initial value present
+ accumulator = args[1]
+ else:
+ kPresent = False
+ while not kPresent and k >= 0:
+ kPresent = array.has_property(unicode(k))
+ if kPresent:
+ accumulator = array.get(unicode(k))
+ k -= 1
+ if not kPresent:
+ raise MakeError('TypeError',
+ 'Reduce of empty array with no initial value')
+ while k >= 0:
+ if array.has_property(unicode(k)):
+ kValue = array.get(unicode(k))
+ accumulator = callbackfn.call(
+ undefined, (accumulator, kValue, float(k), array))
+ k -= 1
+ return accumulator
+
+
+def sort_compare(a, b, comp):
+ if a is None:
+ if b is None:
+ return 0
+ return 1
+ if b is None:
+ if a is None:
+ return 0
+ return -1
+ if is_undefined(a):
+ if is_undefined(b):
+ return 0
+ return 1
+ if is_undefined(b):
+ if is_undefined(a):
+ return 0
+ return -1
+ if comp is not None:
+ res = comp.call(undefined, (a, b))
+ return to_int(res)
+ x, y = to_string(a), to_string(b)
+ if x < y:
+ return -1
+ elif x > y:
+ return 1
+ return 0
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jsboolean.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jsboolean.py
new file mode 100644
index 000000000..9aff9d2e8
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jsboolean.py
@@ -0,0 +1,22 @@
+from __future__ import unicode_literals
+
+from ..conversions import *
+from ..func_utils import *
+
+
+class BooleanPrototype:
+ def toString(this, args):
+ if GetClass(this) != 'Boolean':
+ raise MakeError('TypeError',
+ 'Boolean.prototype.toString is not generic')
+ if is_object(this):
+ this = this.value
+ return u'true' if this else u'false'
+
+ def valueOf(this, args):
+ if GetClass(this) != 'Boolean':
+ raise MakeError('TypeError',
+ 'Boolean.prototype.valueOf is not generic')
+ if is_object(this):
+ this = this.value
+ return this
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jserror.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jserror.py
new file mode 100644
index 000000000..c58dec498
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jserror.py
@@ -0,0 +1,15 @@
+from __future__ import unicode_literals
+from ..conversions import *
+from ..func_utils import *
+
+
+class ErrorPrototype:
+ def toString(this, args):
+ if Type(this) != 'Object':
+ raise MakeError('TypeError',
+ 'Error.prototype.toString called on non-object')
+ name = this.get('name')
+ name = u'Error' if is_undefined(name) else to_string(name)
+ msg = this.get('message')
+ msg = '' if is_undefined(msg) else to_string(msg)
+ return name + (name and msg and ': ') + msg
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jsfunction.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jsfunction.py
new file mode 100644
index 000000000..06ec68014
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jsfunction.py
@@ -0,0 +1,61 @@
+from __future__ import unicode_literals
+
+from ..conversions import *
+from ..func_utils import *
+
+# python 3 support
+import six
+if six.PY3:
+ basestring = str
+ long = int
+ xrange = range
+ unicode = str
+
+# todo fix apply and bind
+
+
+class FunctionPrototype:
+ def toString(this, args):
+ if not is_callable(this):
+ raise MakeError('TypeError',
+ 'Function.prototype.toString is not generic')
+
+ args = u', '.join(map(unicode, this.params))
+ return u'function %s(%s) { [native code] }' % (this.name if this.name
+ else u'', args)
+
+ def call(this, args):
+ if not is_callable(this):
+ raise MakeError('TypeError',
+ 'Function.prototype.call is not generic')
+ _this = get_arg(args, 0)
+ _args = tuple(args)[1:]
+ return this.call(_this, _args)
+
+ def apply(this, args):
+ if not is_callable(this):
+ raise MakeError('TypeError',
+ 'Function.prototype.apply is not generic')
+ _args = get_arg(args, 1)
+ if not is_object(_args):
+ raise MakeError(
+ 'TypeError',
+ 'argList argument to Function.prototype.apply must an Object')
+ _this = get_arg(args, 0)
+ return this.call(_this, js_array_to_tuple(_args))
+
+ def bind(this, args):
+ if not is_callable(this):
+ raise MakeError('TypeError',
+ 'Function.prototype.bind is not generic')
+ bound_this = get_arg(args, 0)
+ bound_args = tuple(args)[1:]
+
+ def bound(dummy_this, extra_args):
+ return this.call(bound_this, bound_args + tuple(extra_args))
+
+ js_bound = args.space.NewFunction(bound, this.ctx, (), u'', False, ())
+ js_bound.put(u'length',
+ float(max(len(this.params) - len(bound_args), 0.)))
+ js_bound.put(u'name', u'boundFunc')
+ return js_bound
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jsjson.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jsjson.py
new file mode 100644
index 000000000..87dc5f389
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jsjson.py
@@ -0,0 +1,205 @@
+from __future__ import unicode_literals
+from ..conversions import *
+from ..func_utils import *
+from ..operations import strict_equality_op
+import json
+
+indent = ''
+# python 3 support
+import six
+if six.PY3:
+ basestring = str
+ long = int
+ xrange = range
+ unicode = str
+
+
+def parse(this, args):
+ text, reviver = get_arg(args, 0), get_arg(args, 1)
+ s = to_string(text)
+ try:
+ unfiltered = json.loads(s)
+ except:
+ raise MakeError(
+ 'SyntaxError',
+ 'JSON.parse could not parse JSON string - Invalid syntax')
+ unfiltered = to_js(unfiltered, args.space)
+ if is_callable(reviver):
+ root = args.space.ConstructObject({'': unfiltered})
+ return walk(root, '', reviver)
+ else:
+ return unfiltered
+
+
+def stringify(this, args):
+ global indent
+ value, replacer, space = get_arg(args, 0), get_arg(args, 1), get_arg(
+ args, 2)
+ stack = set([])
+ indent = ''
+ property_list = replacer_function = undefined
+ if is_object(replacer):
+ if is_callable(replacer):
+ replacer_function = replacer
+ elif replacer.Class == 'Array':
+ property_list = []
+ for e in replacer:
+ v = replacer[e]
+ item = undefined
+ typ = Type(v)
+ if typ == 'Number':
+ item = to_string(v)
+ elif typ == 'String':
+ item = v
+ elif typ == 'Object':
+ if GetClass(v) in ('String', 'Number'):
+ item = to_string(v)
+ if not is_undefined(item) and item not in property_list:
+ property_list.append(item)
+ if is_object(space):
+ if GetClass(space) == 'Number':
+ space = to_number(space)
+ elif GetClass(space) == 'String':
+ space = to_string(space)
+ if Type(space) == 'Number':
+ space = min(10, to_int(space))
+ gap = max(int(space), 0) * ' '
+ elif Type(space) == 'String':
+ gap = space[:10]
+ else:
+ gap = ''
+ return Str('', args.space.ConstructObject({
+ '': value
+ }), replacer_function, property_list, gap, stack, space)
+
+
+def Str(key, holder, replacer_function, property_list, gap, stack, space):
+ value = holder.get(key)
+ if is_object(value):
+ to_json = value.get('toJSON')
+ if is_callable(to_json):
+ value = to_json.call(value, (key, ))
+ if not is_undefined(replacer_function):
+ value = replacer_function.call(holder, (key, value))
+
+ if is_object(value):
+ if value.Class == 'String':
+ value = to_string(value)
+ elif value.Class == 'Number':
+ value = to_number(value)
+ elif value.Class == 'Boolean':
+ value = to_boolean(value)
+ typ = Type(value)
+ if is_null(value):
+ return 'null'
+ elif typ == 'Boolean':
+ return 'true' if value else 'false'
+ elif typ == 'String':
+ return Quote(value)
+ elif typ == 'Number':
+ if not is_infinity(value):
+ return to_string(value)
+ return 'null'
+ if is_object(value) and not is_callable(value):
+ if value.Class == 'Array':
+ return ja(value, stack, gap, property_list, replacer_function,
+ space)
+ else:
+ return jo(value, stack, gap, property_list, replacer_function,
+ space)
+ return undefined
+
+
+def jo(value, stack, gap, property_list, replacer_function, space):
+ global indent
+ if value in stack:
+ raise MakeError('TypeError', 'Converting circular structure to JSON')
+ stack.add(value)
+ stepback = indent
+ indent += gap
+ if not is_undefined(property_list):
+ k = property_list
+ else:
+ k = [unicode(e) for e, d in value.own.items() if d.get('enumerable')]
+ partial = []
+ for p in k:
+ str_p = Str(p, value, replacer_function, property_list, gap, stack,
+ space)
+ if not is_undefined(str_p):
+ member = json.dumps(p) + ':' + (
+ ' ' if gap else
+ '') + str_p # todo not sure here - what space character?
+ partial.append(member)
+ if not partial:
+ final = '{}'
+ else:
+ if not gap:
+ final = '{%s}' % ','.join(partial)
+ else:
+ sep = ',\n' + indent
+ properties = sep.join(partial)
+ final = '{\n' + indent + properties + '\n' + stepback + '}'
+ stack.remove(value)
+ indent = stepback
+ return final
+
+
+def ja(value, stack, gap, property_list, replacer_function, space):
+ global indent
+ if value in stack:
+ raise MakeError('TypeError', 'Converting circular structure to JSON')
+ stack.add(value)
+ stepback = indent
+ indent += gap
+ partial = []
+ length = js_arr_length(value)
+ for index in xrange(length):
+ index = unicode(index)
+ str_index = Str(index, value, replacer_function, property_list, gap,
+ stack, space)
+ if is_undefined(str_index):
+ partial.append('null')
+ else:
+ partial.append(str_index)
+ if not partial:
+ final = '[]'
+ else:
+ if not gap:
+ final = '[%s]' % ','.join(partial)
+ else:
+ sep = ',\n' + indent
+ properties = sep.join(partial)
+ final = '[\n' + indent + properties + '\n' + stepback + ']'
+ stack.remove(value)
+ indent = stepback
+ return final
+
+
+def Quote(string):
+ return json.dumps(string)
+
+
+def to_js(d, _args_space):
+ return convert_to_js_type(d, _args_space)
+
+
+def walk(holder, name, reviver):
+ val = holder.get(name)
+ if GetClass(val) == 'Array':
+ for i in xrange(js_arr_length(val)):
+ i = unicode(i)
+ new_element = walk(val, i, reviver)
+ if is_undefined(new_element):
+ val.delete(i)
+ else:
+ new_element.put(i, new_element)
+ elif is_object(val):
+ for key in [
+ unicode(e) for e, d in val.own.items() if d.get('enumerable')
+ ]:
+ new_element = walk(val, key, reviver)
+ if is_undefined(new_element):
+ val.delete(key)
+ else:
+ val.put(key, new_element)
+ return reviver.call(holder, (name, val))
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jsnumber.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jsnumber.py
new file mode 100644
index 000000000..d099eabd3
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jsnumber.py
@@ -0,0 +1,163 @@
+from __future__ import unicode_literals
+from ..conversions import *
+from ..func_utils import *
+
+import six
+if six.PY3:
+ basestring = str
+ long = int
+ xrange = range
+ unicode = str
+
+RADIX_SYMBOLS = {
+ 0: '0',
+ 1: '1',
+ 2: '2',
+ 3: '3',
+ 4: '4',
+ 5: '5',
+ 6: '6',
+ 7: '7',
+ 8: '8',
+ 9: '9',
+ 10: 'a',
+ 11: 'b',
+ 12: 'c',
+ 13: 'd',
+ 14: 'e',
+ 15: 'f',
+ 16: 'g',
+ 17: 'h',
+ 18: 'i',
+ 19: 'j',
+ 20: 'k',
+ 21: 'l',
+ 22: 'm',
+ 23: 'n',
+ 24: 'o',
+ 25: 'p',
+ 26: 'q',
+ 27: 'r',
+ 28: 's',
+ 29: 't',
+ 30: 'u',
+ 31: 'v',
+ 32: 'w',
+ 33: 'x',
+ 34: 'y',
+ 35: 'z'
+}
+
+
+def to_str_rep(num):
+ if is_nan(num):
+ return 'NaN'
+ elif is_infinity(num):
+ sign = '-' if num < 0 else ''
+ return sign + 'Infinity'
+ elif int(num) == num: # dont print .0
+ return unicode(int(num))
+ return unicode(num) # todo: Make it 100% consistent with Node
+
+
+class NumberPrototype:
+ def toString(this, args):
+ if GetClass(this) != 'Number':
+ raise MakeError('TypeError',
+ 'Number.prototype.valueOf is not generic')
+ if type(this) != float:
+ this = this.value
+ radix = get_arg(args, 0)
+ if is_undefined(radix):
+ return to_str_rep(this)
+ r = to_int(radix)
+ if r == 10:
+ return to_str_rep(this)
+ if r not in xrange(2, 37) or radix != r:
+ raise MakeError(
+ 'RangeError',
+ 'Number.prototype.toString() radix argument must be an integer between 2 and 36'
+ )
+ num = to_int(this)
+ if num < 0:
+ num = -num
+ sign = '-'
+ else:
+ sign = ''
+ res = ''
+ while num:
+ s = RADIX_SYMBOLS[num % r]
+ num = num // r
+ res = s + res
+ return sign + (res if res else '0')
+
+ def valueOf(this, args):
+ if GetClass(this) != 'Number':
+ raise MakeError('TypeError',
+ 'Number.prototype.valueOf is not generic')
+ if type(this) != float:
+ this = this.value
+ return this
+
+ def toFixed(this, args):
+ if GetClass(this) != 'Number':
+ raise MakeError(
+ 'TypeError',
+ 'Number.prototype.toFixed called on incompatible receiver')
+ if type(this) != float:
+ this = this.value
+ fractionDigits = get_arg(args, 0)
+ digs = to_int(fractionDigits)
+ if digs < 0 or digs > 20:
+ raise MakeError(
+ 'RangeError',
+ 'toFixed() digits argument must be between 0 and 20')
+ elif is_infinity(this):
+ return 'Infinity' if this > 0 else '-Infinity'
+ elif is_nan(this):
+ return 'NaN'
+ return format(this, '-.%df' % digs)
+
+ def toExponential(this, args):
+ if GetClass(this) != 'Number':
+ raise MakeError(
+ 'TypeError',
+ 'Number.prototype.toExponential called on incompatible receiver'
+ )
+ if type(this) != float:
+ this = this.value
+ fractionDigits = get_arg(args, 0)
+ digs = to_int(fractionDigits)
+ if digs < 0 or digs > 20:
+ raise MakeError(
+ 'RangeError',
+ 'toFixed() digits argument must be between 0 and 20')
+ elif is_infinity(this):
+ return 'Infinity' if this > 0 else '-Infinity'
+ elif is_nan(this):
+ return 'NaN'
+ return format(this, '-.%de' % digs)
+
+ def toPrecision(this, args):
+ if GetClass(this) != 'Number':
+ raise MakeError(
+ 'TypeError',
+ 'Number.prototype.toPrecision called on incompatible receiver')
+ if type(this) != float:
+ this = this.value
+ precision = get_arg(args, 0)
+ if is_undefined(precision):
+ return to_string(this)
+ prec = to_int(precision)
+ if is_nan(this):
+ return 'NaN'
+ elif is_infinity(this):
+ return 'Infinity' if this > 0 else '-Infinity'
+ digs = prec - len(str(int(this)))
+ if digs >= 0:
+ return format(this, '-.%df' % digs)
+ else:
+ return format(this, '-.%df' % (prec - 1))
+
+
+NumberPrototype.toLocaleString = NumberPrototype.toString
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jsobject.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jsobject.py
new file mode 100644
index 000000000..cdda6baba
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jsobject.py
@@ -0,0 +1,48 @@
+from __future__ import unicode_literals
+from ..conversions import *
+from ..func_utils import *
+
+
+class ObjectPrototype:
+ def toString(this, args):
+ if type(this) == UNDEFINED_TYPE:
+ return u'[object Undefined]'
+ elif type(this) == NULL_TYPE:
+ return u'[object Null]'
+ return u'[object %s]' % GetClass(to_object(this, args.space))
+
+ def valueOf(this, args):
+ return to_object(this, args.space)
+
+ def toLocaleString(this, args):
+ o = to_object(this, args.space)
+ toString = o.get(u'toString')
+ if not is_callable(toString):
+ raise MakeError('TypeError', 'toString of this is not callcable')
+ else:
+ return toString.call(this, args)
+
+ def hasOwnProperty(this, args):
+ prop = get_arg(args, 0)
+ o = to_object(this, args.space)
+ return o.get_own_property(to_string(prop)) is not None
+
+ def isPrototypeOf(this, args):
+ # a bit stupid specification because of object conversion that will cause invalid values for primitives
+ # for example Object.prototype.isPrototypeOf.call((5).__proto__, 5) gives false
+ obj = get_arg(args, 0)
+ if not is_object(obj):
+ return False
+ o = to_object(this, args.space)
+ while 1:
+ obj = obj.prototype
+ if obj is None or is_null(obj):
+ return False
+ if obj is o:
+ return True
+
+ def propertyIsEnumerable(this, args):
+ prop = get_arg(args, 0)
+ o = to_object(this, args.space)
+ cand = o.own.get(to_string(prop))
+ return cand is not None and cand.get('enumerable')
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jsregexp.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jsregexp.py
new file mode 100644
index 000000000..54aba3274
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jsregexp.py
@@ -0,0 +1,56 @@
+from __future__ import unicode_literals
+
+from ..conversions import *
+from ..func_utils import *
+
+
+class RegExpPrototype:
+ def toString(this, args):
+ flags = u''
+ try:
+ if this.glob:
+ flags += u'g'
+ if this.ignore_case:
+ flags += u'i'
+ if this.multiline:
+ flags += u'm'
+ except:
+ pass
+ try:
+ v = this.value if this.value else u'(?:)'
+ except:
+ v = u'(?:)'
+ return u'/%s/' % v + flags
+
+ def test(this, args):
+ string = get_arg(args, 0)
+ return RegExpExec(this, string, args.space) is not null
+
+ def _exec(
+ this, args
+ ): # will be changed to exec in base.py. cant name it exec here...
+ string = get_arg(args, 0)
+ return RegExpExec(this, string, args.space)
+
+
+def RegExpExec(this, string, space):
+ if GetClass(this) != 'RegExp':
+ raise MakeError('TypeError', 'RegExp.prototype.exec is not generic!')
+ string = to_string(string)
+ length = len(string)
+ i = to_int(this.get('lastIndex')) if this.glob else 0
+ matched = False
+ while not matched:
+ if i < 0 or i > length:
+ this.put('lastIndex', 0.)
+ return null
+ matched = this.match(string, i)
+ i += 1
+ start, end = matched.span() #[0]+i-1, matched.span()[1]+i-1
+ if this.glob:
+ this.put('lastIndex', float(end))
+ arr = convert_to_js_type(
+ [matched.group()] + list(matched.groups()), space=space)
+ arr.put('index', float(start))
+ arr.put('input', unicode(string))
+ return arr
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jsstring.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jsstring.py
new file mode 100644
index 000000000..be38802ef
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jsstring.py
@@ -0,0 +1,323 @@
+from __future__ import unicode_literals
+
+# -*- coding: utf-8 -*-
+import re
+from ..conversions import *
+from ..func_utils import *
+from .jsregexp import RegExpExec
+
+DIGS = set(u'0123456789')
+WHITE = u"\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF"
+
+
+def replacement_template(rep, source, span, npar):
+ """Takes the replacement template and some info about the match and returns filled template
+ """
+ n = 0
+ res = ''
+ while n < len(rep) - 1:
+ char = rep[n]
+ if char == '$':
+ if rep[n + 1] == '$':
+ res += '$'
+ n += 2
+ continue
+ elif rep[n + 1] == '`':
+ # replace with string that is BEFORE match
+ res += source[:span[0]]
+ n += 2
+ continue
+ elif rep[n + 1] == '\'':
+ # replace with string that is AFTER match
+ res += source[span[1]:]
+ n += 2
+ continue
+ elif rep[n + 1] in DIGS:
+ dig = rep[n + 1]
+ if n + 2 < len(rep) and rep[n + 2] in DIGS:
+ dig += rep[n + 2]
+ num = int(dig)
+ # we will not do any replacements if we dont have this npar or dig is 0
+ if not num or num > len(npar):
+ res += '$' + dig
+ else:
+ # None - undefined has to be replaced with ''
+ res += npar[num - 1] if npar[num - 1] else ''
+ n += 1 + len(dig)
+ continue
+ res += char
+ n += 1
+ if n < len(rep):
+ res += rep[-1]
+ return res
+
+
+###################################################
+
+
+class StringPrototype:
+ def toString(this, args):
+ if GetClass(this) != 'String':
+ raise MakeError('TypeError',
+ 'String.prototype.toString is not generic')
+ if type(this) == unicode:
+ return this
+ assert type(this.value) == unicode
+ return this.value
+
+ def valueOf(this, args):
+ if GetClass(this) != 'String':
+ raise MakeError('TypeError',
+ 'String.prototype.valueOf is not generic')
+ if type(this) == unicode:
+ return this
+ assert type(this.value) == unicode
+ return this.value
+
+ def charAt(this, args):
+ cok(this)
+ pos = to_int(get_arg(args, 0))
+ s = to_string(this)
+ if 0 <= pos < len(s):
+ return s[pos]
+ return u''
+
+ def charCodeAt(this, args):
+ cok(this)
+ pos = to_int(get_arg(args, 0))
+ s = to_string(this)
+ if 0 <= pos < len(s):
+ return float(ord(s[pos]))
+ return NaN
+
+ def concat(this, args):
+ cok(this)
+ return to_string(this) + u''.join(map(to_string, args))
+
+ def indexOf(this, args):
+ cok(this)
+ search = to_string(get_arg(args, 0))
+ pos = to_int(get_arg(args, 1))
+ s = to_string(this)
+ return float(s.find(search, min(max(pos, 0), len(s))))
+
+ def lastIndexOf(this, args):
+ cok(this)
+ search = to_string(get_arg(args, 0))
+ pos = get_arg(args, 1)
+ s = to_string(this)
+ pos = 10**12 if is_nan(pos) else to_int(pos)
+ return float(s.rfind(search, 0, min(max(pos, 0) + 1, len(s))))
+
+ def localeCompare(this, args):
+ cok(this)
+ s = to_string(this)
+ that = to_string(get_arg(args, 0))
+ if s < that:
+ return -1.
+ elif s > that:
+ return 1.
+ return 0.
+
+ def match(this, args):
+ cok(this)
+ s = to_string(this)
+ regexp = get_arg(args, 0)
+ r = args.space.NewRegExp(
+ regexp, '') if GetClass(regexp) != 'RegExp' else regexp
+ if not r.glob:
+ return RegExpExec(r, s, space=args.space)
+ r.put('lastIndex', float(0))
+ found = []
+ previous_last_index = 0
+ last_match = True
+ while last_match:
+ result = RegExpExec(r, s, space=args.space)
+ if is_null(result):
+ last_match = False
+ else:
+ this_index = r.get('lastIndex')
+ if this_index == previous_last_index:
+ r.put('lastIndex', float(this_index + 1))
+ previous_last_index += 1
+ else:
+ previous_last_index = this_index
+ matchStr = result.get('0')
+ found.append(matchStr)
+ if not found:
+ return null
+ return args.space.ConstructArray(found)
+
+ def replace(this, args):
+ # VERY COMPLICATED. to check again.
+ cok(this)
+ s = to_string(this)
+ searchValue = get_arg(args, 0)
+ replaceValue = get_arg(args, 1)
+ res = ''
+ if not is_callable(replaceValue):
+ replaceValue = to_string(replaceValue)
+ func = False
+ else:
+ func = True
+ # Replace all ( global )
+ if GetClass(searchValue) == 'RegExp' and searchValue.glob:
+ last = 0
+ for e in re.finditer(searchValue.pat, s):
+ res += s[last:e.span()[0]]
+ if func:
+ # prepare arguments for custom func (replaceValue)
+ call_args = (e.group(), ) + e.groups() + (e.span()[1], s)
+ # convert all types to JS before Js bytecode call...
+ res += to_string(
+ replaceValue.call(
+ this, ensure_js_types(call_args,
+ space=args.space)))
+ else:
+ res += replacement_template(replaceValue, s, e.span(),
+ e.groups())
+ last = e.span()[1]
+ res += s[last:]
+ return res
+ elif GetClass(searchValue) == 'RegExp':
+ e = re.search(searchValue.pat, s)
+ if e is None:
+ return s
+ span = e.span()
+ pars = e.groups()
+ match = e.group()
+ else:
+ match = to_string(searchValue)
+ ind = s.find(match)
+ if ind == -1:
+ return s
+ span = ind, ind + len(match)
+ pars = ()
+ res = s[:span[0]]
+ if func:
+ call_args = (match, ) + pars + (span[1], s)
+ # convert all types to JS before Js bytecode call...
+ res += to_string(
+ replaceValue.call(this,
+ ensure_js_types(call_args,
+ space=args.space)))
+ else:
+ res += replacement_template(replaceValue, s, span, pars)
+ res += s[span[1]:]
+ return res
+
+ def search(this, args):
+ cok(this)
+ string = to_string(this)
+ regexp = get_arg(args, 0)
+ if GetClass(regexp) == 'RegExp':
+ rx = regexp
+ else:
+ rx = args.space.NewRegExp(regexp, '')
+ res = re.search(rx.pat, string)
+ if res is not None:
+ return float(res.span()[0])
+ return -1.
+
+ def slice(this, args):
+ cok(this)
+ s = to_string(this)
+ start = to_int(get_arg(args, 0))
+ length = len(s)
+ end = get_arg(args, 1)
+ end = length if is_undefined(end) else to_int(end)
+ #From = max(length+start, 0) if start<0 else min(length, start)
+ #To = max(length+end, 0) if end<0 else min(length, end)
+ return s[start:end]
+
+ def split(this, args):
+ # its a bit different from re.split!
+ cok(this)
+ s = to_string(this)
+ separator = get_arg(args, 0)
+ limit = get_arg(args, 1)
+ lim = 2**32 - 1 if is_undefined(limit) else to_uint32(limit)
+ if not lim:
+ return args.space.ConstructArray([])
+ if is_undefined(separator):
+ return args.space.ConstructArray([s])
+ len_s = len(s)
+ res = []
+ R = separator if GetClass(separator) == 'RegExp' else to_string(
+ separator)
+ if not len_s:
+ if SplitMatch(s, 0, R) is None:
+ return args.space.ConstructArray([s])
+ return args.space.ConstructArray([])
+ p = q = 0
+ while q != len_s:
+ e, cap = SplitMatch(s, q, R)
+ if e is None or e == p:
+ q += 1
+ continue
+ res.append(s[p:q])
+ p = q = e
+ if len(res) == lim:
+ return args.space.ConstructArray(res)
+ for element in cap:
+ res.append(element)
+ if len(res) == lim:
+ return args.space.ConstructArray(res)
+ res.append(s[p:])
+ return args.space.ConstructArray(res)
+
+ def substring(this, args):
+ cok(this)
+ s = to_string(this)
+ start = to_int(get_arg(args, 0))
+ length = len(s)
+ end = get_arg(args, 1)
+ end = length if is_undefined(end) else to_int(end)
+ fstart = min(max(start, 0), length)
+ fend = min(max(end, 0), length)
+ return s[min(fstart, fend):max(fstart, fend)]
+
+ def substr(this, args):
+ cok(this)
+ #I hate this function and its description in specification
+ r1 = to_string(this)
+ r2 = to_int(get_arg(args, 0))
+ length = get_arg(args, 1)
+ r3 = 10**20 if is_undefined(length) else to_int(length)
+ r4 = len(r1)
+ r5 = r2 if r2 >= 0 else max(0, r2 + r4)
+ r6 = min(max(r3, 0), r4 - r5)
+ if r6 <= 0:
+ return ''
+ return r1[r5:r5 + r6]
+
+ def toLowerCase(this, args):
+ cok(this)
+ return to_string(this).lower()
+
+ def toLocaleLowerCase(this, args):
+ cok(this)
+ return to_string(this).lower()
+
+ def toUpperCase(this, args):
+ cok(this)
+ return to_string(this).upper()
+
+ def toLocaleUpperCase(this, args):
+ cok(this)
+ return to_string(this).upper()
+
+ def trim(this, args):
+ cok(this)
+ return to_string(this).strip(WHITE)
+
+
+def SplitMatch(s, q, R):
+ # s is Py String to match, q is the py int match start and R is Js RegExp or String.
+ if GetClass(R) == 'RegExp':
+ res = R.match(s, q)
+ return (None, ()) if res is None else (res.span()[1], res.groups())
+ # R is just a string
+ if s[q:].startswith(R):
+ return q + len(R), ()
+ return None, ()
diff --git a/Contents/Libraries/Shared/js2py/internals/prototypes/jsutils.py b/Contents/Libraries/Shared/js2py/internals/prototypes/jsutils.py
new file mode 100644
index 000000000..85f5bd44b
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/prototypes/jsutils.py
@@ -0,0 +1,149 @@
+from __future__ import unicode_literals
+from ..conversions import *
+from ..func_utils import *
+
+RADIX_CHARS = {
+ '1': 1,
+ '0': 0,
+ '3': 3,
+ '2': 2,
+ '5': 5,
+ '4': 4,
+ '7': 7,
+ '6': 6,
+ '9': 9,
+ '8': 8,
+ 'a': 10,
+ 'c': 12,
+ 'b': 11,
+ 'e': 14,
+ 'd': 13,
+ 'g': 16,
+ 'f': 15,
+ 'i': 18,
+ 'h': 17,
+ 'k': 20,
+ 'j': 19,
+ 'm': 22,
+ 'l': 21,
+ 'o': 24,
+ 'n': 23,
+ 'q': 26,
+ 'p': 25,
+ 's': 28,
+ 'r': 27,
+ 'u': 30,
+ 't': 29,
+ 'w': 32,
+ 'v': 31,
+ 'y': 34,
+ 'x': 33,
+ 'z': 35,
+ 'A': 10,
+ 'C': 12,
+ 'B': 11,
+ 'E': 14,
+ 'D': 13,
+ 'G': 16,
+ 'F': 15,
+ 'I': 18,
+ 'H': 17,
+ 'K': 20,
+ 'J': 19,
+ 'M': 22,
+ 'L': 21,
+ 'O': 24,
+ 'N': 23,
+ 'Q': 26,
+ 'P': 25,
+ 'S': 28,
+ 'R': 27,
+ 'U': 30,
+ 'T': 29,
+ 'W': 32,
+ 'V': 31,
+ 'Y': 34,
+ 'X': 33,
+ 'Z': 35
+}
+
+# parseFloat
+# parseInt
+# isFinite
+# isNaN
+
+
+def parseInt(this, args):
+ string, radix = get_arg(args, 0), get_arg(args, 1)
+ string = to_string(string).lstrip()
+ sign = 1
+ if string and string[0] in ('+', '-'):
+ if string[0] == '-':
+ sign = -1
+ string = string[1:]
+ r = to_int32(radix)
+ strip_prefix = True
+ if r:
+ if r < 2 or r > 36:
+ return NaN
+ if r != 16:
+ strip_prefix = False
+ else:
+ r = 10
+ if strip_prefix:
+ if len(string) >= 2 and string[:2] in ('0x', '0X'):
+ string = string[2:]
+ r = 16
+ n = 0
+ num = 0
+ while n < len(string):
+ cand = RADIX_CHARS.get(string[n])
+ if cand is None or not cand < r:
+ break
+ num = cand + num * r
+ n += 1
+ if not n:
+ return NaN
+ return float(sign * num)
+
+
+def parseFloat(this, args):
+ string = get_arg(args, 0)
+ string = to_string(string).strip()
+ sign = 1
+ if string and string[0] in ('+', '-'):
+ if string[0] == '-':
+ sign = -1
+ string = string[1:]
+ num = None
+ length = 1
+ max_len = None
+ failed = 0
+ while length <= len(string):
+ try:
+ num = float(string[:length])
+ max_len = length
+ failed = 0
+ except:
+ failed += 1
+ if failed > 4: # cant be a number anymore
+ break
+ length += 1
+ if num is None:
+ return NaN
+ return sign * float(string[:max_len])
+
+
+def isNaN(this, args):
+ number = get_arg(args, 0)
+ if is_nan(to_number(number)):
+ return True
+ return False
+
+
+def isFinite(this, args):
+ number = get_arg(args, 0)
+ num = to_number(number)
+ if is_nan(num) or is_infinity(num):
+ return False
+ return True
diff --git a/Contents/Libraries/Shared/js2py/internals/seval.py b/Contents/Libraries/Shared/js2py/internals/seval.py
new file mode 100644
index 000000000..cd8ea50fa
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/seval.py
@@ -0,0 +1,33 @@
+import pyjsparser
+from .space import Space
+from . import fill_space
+from .byte_trans import ByteCodeGenerator
+from .code import Code
+from .simplex import *
+
+
+pyjsparser.parser.ENABLE_JS2PY_ERRORS = lambda msg: MakeError(u'SyntaxError', unicode(msg))
+
+def get_js_bytecode(js):
+ a = ByteCodeGenerator(Code())
+ d = pyjsparser.parse(js)
+ a.emit(d)
+ return a.exe.tape
+
+def eval_js_vm(js, debug=False):
+ a = ByteCodeGenerator(Code(debug_mode=debug))
+ s = Space()
+ a.exe.space = s
+ s.exe = a.exe
+
+ d = pyjsparser.parse(js)
+
+ a.emit(d)
+ fill_space.fill_space(s, a)
+ if debug:
+ from pprint import pprint
+ pprint(a.exe.tape)
+ print()
+ a.exe.compile()
+
+ return a.exe.run(a.exe.space.GlobalObj)
diff --git a/Contents/Libraries/Shared/js2py/internals/simplex.py b/Contents/Libraries/Shared/js2py/internals/simplex.py
new file mode 100644
index 000000000..4cd247eb2
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/simplex.py
@@ -0,0 +1,160 @@
+from __future__ import unicode_literals
+import six
+if six.PY3:
+ basestring = str
+ long = int
+ xrange = range
+ unicode = str
+
+#Undefined
+class PyJsUndefined(object):
+ TYPE = 'Undefined'
+ Class = 'Undefined'
+
+
+undefined = PyJsUndefined()
+
+
+#Null
+class PyJsNull(object):
+ TYPE = 'Null'
+ Class = 'Null'
+
+
+null = PyJsNull()
+
+Infinity = float('inf')
+NaN = float('nan')
+
+UNDEFINED_TYPE = PyJsUndefined
+NULL_TYPE = PyJsNull
+STRING_TYPE = unicode if six.PY2 else str
+NUMBER_TYPE = float
+BOOLEAN_TYPE = bool
+
+# exactly 5 simplexes!
+PRIMITIVES = frozenset(
+ [UNDEFINED_TYPE, NULL_TYPE, STRING_TYPE, NUMBER_TYPE, BOOLEAN_TYPE])
+
+TYPE_NAMES = {
+ UNDEFINED_TYPE: 'Undefined',
+ NULL_TYPE: 'Null',
+ STRING_TYPE: 'String',
+ NUMBER_TYPE: 'Number',
+ BOOLEAN_TYPE: 'Boolean',
+}
+
+
+def Type(x):
+ # Any -> Str
+ return TYPE_NAMES.get(type(x), 'Object')
+
+
+def GetClass(x):
+ # Any -> Str
+ cand = TYPE_NAMES.get(type(x))
+ if cand is None:
+ return x.Class
+ return cand
+
+
+def is_undefined(self):
+ return self is undefined
+
+
+def is_null(self):
+ return self is null
+
+
+def is_primitive(self):
+ return type(self) in PRIMITIVES
+
+
+def is_object(self):
+ return not is_primitive(self)
+
+
+def is_callable(self):
+ return hasattr(self, 'call')
+
+
+def is_infinity(self):
+ return self == Infinity or self == -Infinity
+
+
+def is_nan(self):
+ return self != self # nan!=nan evaluates to True
+
+
+def is_finite(self):
+ return not (is_nan(self) or is_infinity(self))
+
+
+class JsException(Exception):
+ def __init__(self, typ=None, message=None, throw=None):
+ if typ is None and message is None and throw is None:
+ # it means its the trasnlator based error (old format), do nothing
+ self._translator_based = True
+ else:
+ assert throw is None or (typ is None
+ and message is None), (throw, typ,
+ message)
+ self._translator_based = False
+ self.typ = typ
+ self.message = message
+ self.throw = throw
+
+ def get_thrown_value(self, space):
+ if self.throw is not None:
+ return self.throw
+ else:
+ return space.NewError(self.typ, self.message)
+
+ def __str__(self):
+ if self._translator_based:
+ if self.mes.Class == 'Error':
+ return self.mes.callprop('toString').value
+ else:
+ return self.mes.to_string().value
+ else:
+ if self.throw is not None:
+ from .conversions import to_string
+ return to_string(self.throw)
+ else:
+ return self.typ + ': ' + self.message
+
+
+def MakeError(typ, message=u'no info', throw=None):
+ return JsException(typ,
+ unicode(message) if message is not None else message,
+ throw)
+
+
+def value_from_js_exception(js_exception, space):
+ if js_exception.throw is not None:
+ return js_exception.throw
+ else:
+ return space.NewError(js_exception.typ, js_exception.message)
+
+
+def js_dtoa(number):
+ if is_nan(number):
+ return u'NaN'
+ elif is_infinity(number):
+ if number > 0:
+ return u'Infinity'
+ return u'-Infinity'
+ elif number == 0.:
+ return u'0'
+ elif abs(number) < 1e-6 or abs(number) >= 1e21:
+ frac, exponent = unicode(repr(float(number))).split('e')
+ # Remove leading zeros from the exponent.
+ exponent = int(exponent)
+ return frac + ('e' if exponent < 0 else 'e+') + unicode(exponent)
+ elif abs(number) < 1e-4: # python starts to return exp notation while we still want the prec
+ frac, exponent = unicode(repr(float(number))).split('e-')
+ base = u'0.' + u'0' * (int(exponent) - 1) + frac.lstrip('-').replace('.', '')
+ return base if number > 0. else u'-' + base
+ elif isinstance(number, long) or number.is_integer(): # dont print .0
+ return unicode(int(number))
+ return unicode(repr(number)) # python representation should be equivalent.
diff --git a/Contents/Libraries/Shared/js2py/internals/space.py b/Contents/Libraries/Shared/js2py/internals/space.py
new file mode 100644
index 000000000..cb2e77ae0
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/space.py
@@ -0,0 +1,92 @@
+from .base import *
+from .simplex import *
+
+
+class Space(object):
+ def __init__(self):
+ self.GlobalObj = None
+ self.ctx = None
+ self.byte_generator = None
+
+ self.Number = None
+ self.String = None
+ self.Boolean = None
+ self.RegExp = None
+ self.Object = None
+ self.Array = None
+ self.Function = None
+
+ self.BooleanPrototype = None
+ self.NumberPrototype = None
+ self.StringPrototype = None
+
+ self.FunctionPrototype = None
+ self.ArrayPrototype = None
+ self.RegExpPrototype = None
+ self.DatePrototype = None
+ self.ObjectPrototype = None
+
+ self.ErrorPrototype = None
+ self.EvalErrorPrototype = None
+ self.RangeErrorPrototype = None
+ self.ReferenceErrorPrototype = None
+ self.SyntaxErrorPrototype = None
+ self.TypeErrorPrototype = None
+ self.URIErrorPrototype = None
+
+ self.interpreter = None
+
+ @property
+ def ERROR_TYPES(self):
+ return {
+ 'Error': self.ErrorPrototype,
+ 'EvalError': self.EvalErrorPrototype,
+ 'RangeError': self.RangeErrorPrototype,
+ 'ReferenceError': self.ReferenceErrorPrototype,
+ 'SyntaxError': self.SyntaxErrorPrototype,
+ 'TypeError': self.TypeErrorPrototype,
+ 'URIError': self.URIErrorPrototype,
+ }
+
+ def get_global_environment(self):
+ return self.GlobalCtx.variable_environment()
+
+ def NewObject(self):
+ return PyJsObject(self.ObjectPrototype)
+
+ def NewFunction(self, code, ctx, params, name, is_declaration,
+ definitions):
+ return PyJsFunction(
+ code,
+ ctx,
+ params,
+ name,
+ self,
+ is_declaration,
+ definitions,
+ prototype=self.FunctionPrototype)
+
+ def NewDate(self, value):
+ return PyJsDate(value, self.DatePrototype)
+
+ def NewArray(self, length=0):
+ return PyJsArray(length, self.ArrayPrototype)
+
+ def NewError(self, typ, message):
+ return PyJsError(message, self.ERROR_TYPES[typ])
+
+ def NewRegExp(self, body, flags):
+ return PyJsRegExp(body, flags, self.RegExpPrototype)
+
+ def ConstructArray(self, py_arr):
+ ''' note py_arr elems are NOT converted to PyJs types!'''
+ arr = self.NewArray(len(py_arr))
+ arr._init(py_arr)
+ return arr
+
+ def ConstructObject(self, py_obj):
+ ''' note py_obj items are NOT converted to PyJs types! '''
+ obj = self.NewObject()
+ for k, v in py_obj.items():
+ obj.put(unicode(k), v)
+ return obj
diff --git a/Contents/Libraries/Shared/js2py/internals/speed.py b/Contents/Libraries/Shared/js2py/internals/speed.py
new file mode 100644
index 000000000..3ca4079e7
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/speed.py
@@ -0,0 +1,62 @@
+from timeit import timeit
+from collections import namedtuple
+from array import array
+from itertools import izip
+from collections import deque
+
+
+class Y(object):
+ UUU = 88
+
+ def __init__(self, x):
+ self.x = x
+
+ def s(self, x):
+ return self.x + 1
+
+
+class X(Y):
+ A = 10
+ B = 2
+ C = 4
+ D = 9
+
+ def __init__(self, x):
+ self.x = x
+ self.stack = []
+ self.par = super(X, self)
+
+ def s(self, x):
+ pass
+
+ def __add__(self, other):
+ return self.x + other.x
+
+ def another(self):
+ return Y.s(self, 1)
+
+ def yet_another(self):
+ return self.par.s(1)
+
+
+def add(a, b):
+ return a.x + b.x
+
+
+t = []
+
+Type = None
+try:
+ print timeit(
+ """
+
+t.append(4)
+t.pop()
+
+
+
+""",
+ "from __main__ import X,Y,namedtuple,array,t,add,Type, izip",
+ number=1000000)
+except:
+ raise
diff --git a/Contents/Libraries/Shared/js2py/internals/trans_utils.py b/Contents/Libraries/Shared/js2py/internals/trans_utils.py
new file mode 100644
index 000000000..f99c09945
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/internals/trans_utils.py
@@ -0,0 +1,35 @@
+import six
+if six.PY3:
+ basestring = str
+ long = int
+ xrange = range
+ unicode = str
+
+def to_key(literal_or_identifier):
+ ''' returns string representation of this object'''
+ if literal_or_identifier['type'] == 'Identifier':
+ return literal_or_identifier['name']
+ elif literal_or_identifier['type'] == 'Literal':
+ k = literal_or_identifier['value']
+ if isinstance(k, float):
+ return unicode(float_repr(k))
+ elif 'regex' in literal_or_identifier:
+ return compose_regex(k)
+ elif isinstance(k, bool):
+ return u'true' if k else u'false'
+ elif k is None:
+ return u'null'
+ else:
+ return unicode(k)
+
+
+def compose_regex(val):
+ reg, flags = val
+ # reg = REGEXP_CONVERTER._unescape_string(reg)
+ return u'/%s/%s' % (reg, flags)
+
+
+def float_repr(f):
+ if int(f) == f:
+ return unicode(repr(int(f)))
+ return unicode(repr(f))
diff --git a/Contents/Libraries/Shared/js2py/legecy_translators/__init__.py b/Contents/Libraries/Shared/js2py/legecy_translators/__init__.py
new file mode 100644
index 000000000..d01e0f5fd
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/legecy_translators/__init__.py
@@ -0,0 +1 @@
+__author__ = 'Piotrek'
diff --git a/Contents/Libraries/Shared/js2py/legecy_translators/constants.py b/Contents/Libraries/Shared/js2py/legecy_translators/constants.py
new file mode 100644
index 000000000..ea048f128
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/legecy_translators/constants.py
@@ -0,0 +1,308 @@
+from string import ascii_lowercase, digits
+##################################
+StringName = u'PyJsConstantString%d_'
+NumberName = u'PyJsConstantNumber%d_'
+RegExpName = u'PyJsConstantRegExp%d_'
+##################################
+ALPHAS = set(ascii_lowercase + ascii_lowercase.upper())
+NUMS = set(digits)
+IDENTIFIER_START = ALPHAS.union(NUMS)
+ESCAPE_CHARS = {'n', '0', 'b', 'f', 'r', 't', 'v', '"', "'", '\\'}
+OCTAL = {'0', '1', '2', '3', '4', '5', '6', '7'}
+HEX = set('0123456789abcdefABCDEF')
+from utils import *
+IDENTIFIER_PART = IDENTIFIER_PART.union({'.'})
+
+
+def _is_cancelled(source, n):
+ cancelled = False
+ k = 0
+ while True:
+ k += 1
+ if source[n - k] != '\\':
+ break
+ cancelled = not cancelled
+ return cancelled
+
+
+def _ensure_regexp(source, n): #<- this function has to be improved
+ '''returns True if regexp starts at n else returns False
+ checks whether it is not a division '''
+ markers = '(+~"\'=[%:?!*^|&-,;/\\'
+ k = 0
+ while True:
+ k += 1
+ if n - k < 0:
+ return True
+ char = source[n - k]
+ if char in markers:
+ return True
+ if char != ' ' and char != '\n':
+ break
+ return False
+
+
+def parse_num(source, start, charset):
+ """Returns a first index>=start of chat not in charset"""
+ while start < len(source) and source[start] in charset:
+ start += 1
+ return start
+
+
+def parse_exponent(source, start):
+ """returns end of exponential, raises SyntaxError if failed"""
+ if not source[start] in {'e', 'E'}:
+ if source[start] in IDENTIFIER_PART:
+ raise SyntaxError('Invalid number literal!')
+ return start
+ start += 1
+ if source[start] in {'-', '+'}:
+ start += 1
+ FOUND = False
+ # we need at least one dig after exponent
+ while source[start] in NUMS:
+ FOUND = True
+ start += 1
+ if not FOUND or source[start] in IDENTIFIER_PART:
+ raise SyntaxError('Invalid number literal!')
+ return start
+
+
+def remove_constants(source):
+ '''Replaces Strings and Regexp literals in the source code with
+ identifiers and *removes comments*. Identifier is of the format:
+
+ PyJsStringConst(String const number)_ - for Strings
+ PyJsRegExpConst(RegExp const number)_ - for RegExps
+
+ Returns dict which relates identifier and replaced constant.
+
+ Removes single line and multiline comments from JavaScript source code
+ Pseudo comments (inside strings) will not be removed.
+
+ For example this line:
+ var x = "/*PSEUDO COMMENT*/ TEXT //ANOTHER PSEUDO COMMENT"
+ will be unaltered'''
+ source = ' ' + source + '\n'
+ comments = []
+ inside_comment, single_comment = False, False
+ inside_single, inside_double = False, False
+ inside_regexp = False
+ regexp_class_count = 0
+ n = 0
+ while n < len(source):
+ char = source[n]
+ if char == '"' and not (inside_comment or inside_single
+ or inside_regexp):
+ if not _is_cancelled(source, n):
+ if inside_double:
+ inside_double[1] = n + 1
+ comments.append(inside_double)
+ inside_double = False
+ else:
+ inside_double = [n, None, 0]
+ elif char == "'" and not (inside_comment or inside_double
+ or inside_regexp):
+ if not _is_cancelled(source, n):
+ if inside_single:
+ inside_single[1] = n + 1
+ comments.append(inside_single)
+ inside_single = False
+ else:
+ inside_single = [n, None, 0]
+ elif (inside_single or inside_double):
+ if char in LINE_TERMINATOR:
+ if _is_cancelled(source, n):
+ if char == CR and source[n + 1] == LF:
+ n += 1
+ n += 1
+ continue
+ else:
+ raise SyntaxError(
+ 'Invalid string literal. Line terminators must be escaped!'
+ )
+ else:
+ if inside_comment:
+ if single_comment:
+ if char in LINE_TERMINATOR:
+ inside_comment[1] = n
+ comments.append(inside_comment)
+ inside_comment = False
+ single_comment = False
+ else: # Multiline
+ if char == '/' and source[n - 1] == '*':
+ inside_comment[1] = n + 1
+ comments.append(inside_comment)
+ inside_comment = False
+ elif inside_regexp:
+ if not quiting_regexp:
+ if char in LINE_TERMINATOR:
+ raise SyntaxError(
+ 'Invalid regexp literal. Line terminators cant appear!'
+ )
+ if _is_cancelled(source, n):
+ n += 1
+ continue
+ if char == '[':
+ regexp_class_count += 1
+ elif char == ']':
+ regexp_class_count = max(regexp_class_count - 1, 0)
+ elif char == '/' and not regexp_class_count:
+ quiting_regexp = True
+ else:
+ if char not in IDENTIFIER_START:
+ inside_regexp[1] = n
+ comments.append(inside_regexp)
+ inside_regexp = False
+ elif char == '/' and source[n - 1] == '/':
+ single_comment = True
+ inside_comment = [n - 1, None, 1]
+ elif char == '*' and source[n - 1] == '/':
+ inside_comment = [n - 1, None, 1]
+ elif char == '/' and source[n + 1] not in ('/', '*'):
+ if not _ensure_regexp(source, n): #<- improve this one
+ n += 1
+ continue #Probably just a division
+ quiting_regexp = False
+ inside_regexp = [n, None, 2]
+ elif not (inside_comment or inside_regexp):
+ if (char in NUMS and
+ source[n - 1] not in IDENTIFIER_PART) or char == '.':
+ if char == '.':
+ k = parse_num(source, n + 1, NUMS)
+ if k == n + 1: # just a stupid dot...
+ n += 1
+ continue
+ k = parse_exponent(source, k)
+ elif char == '0' and source[n + 1] in {
+ 'x', 'X'
+ }: #Hex number probably
+ k = parse_num(source, n + 2, HEX)
+ if k == n + 2 or source[k] in IDENTIFIER_PART:
+ raise SyntaxError('Invalid hex literal!')
+ else: #int or exp or flot or exp flot
+ k = parse_num(source, n + 1, NUMS)
+ if source[k] == '.':
+ k = parse_num(source, k + 1, NUMS)
+ k = parse_exponent(source, k)
+ comments.append((n, k, 3))
+ n = k
+ continue
+ n += 1
+ res = ''
+ start = 0
+ count = 0
+ constants = {}
+ for end, next_start, typ in comments:
+ res += source[start:end]
+ start = next_start
+ if typ == 0: # String
+ name = StringName
+ elif typ == 1: # comment
+ continue
+ elif typ == 2: # regexp
+ name = RegExpName
+ elif typ == 3: # number
+ name = NumberName
+ else:
+ raise RuntimeError()
+ res += ' ' + name % count + ' '
+ constants[name % count] = source[end:next_start]
+ count += 1
+ res += source[start:]
+ # remove this stupid white space
+ for e in WHITE:
+ res = res.replace(e, ' ')
+ res = res.replace(CR + LF, '\n')
+ for e in LINE_TERMINATOR:
+ res = res.replace(e, '\n')
+ return res.strip(), constants
+
+
+def recover_constants(py_source,
+ replacements): #now has n^2 complexity. improve to n
+ '''Converts identifiers representing Js constants to the PyJs constants
+ PyJsNumberConst_1_ which has the true value of 5 will be converted to PyJsNumber(5)'''
+ for identifier, value in replacements.iteritems():
+ if identifier.startswith('PyJsConstantRegExp'):
+ py_source = py_source.replace(identifier,
+ 'JsRegExp(%s)' % repr(value))
+ elif identifier.startswith('PyJsConstantString'):
+ py_source = py_source.replace(
+ identifier, 'Js(u%s)' % unify_string_literals(value))
+ else:
+ py_source = py_source.replace(identifier, 'Js(%s)' % value)
+ return py_source
+
+
+def unify_string_literals(js_string):
+ """this function parses the string just like javascript
+ for example literal '\d' in JavaScript would be interpreted
+ as 'd' - backslash would be ignored and in Pyhon this
+ would be interpreted as '\\d' This function fixes this problem."""
+ n = 0
+ res = ''
+ limit = len(js_string)
+ while n < limit:
+ char = js_string[n]
+ if char == '\\':
+ new, n = do_escape(js_string, n)
+ res += new
+ else:
+ res += char
+ n += 1
+ return res
+
+
+def unify_regexp_literals(js):
+ pass
+
+
+def do_escape(source, n):
+ """Its actually quite complicated to cover every case :)
+ http://www.javascriptkit.com/jsref/escapesequence.shtml"""
+ if not n + 1 < len(source):
+ return '' # not possible here but can be possible in general case.
+ if source[n + 1] in LINE_TERMINATOR:
+ if source[n + 1] == CR and n + 2 < len(source) and source[n + 2] == LF:
+ return source[n:n + 3], n + 3
+ return source[n:n + 2], n + 2
+ if source[n + 1] in ESCAPE_CHARS:
+ return source[n:n + 2], n + 2
+ if source[n + 1] in {'x', 'u'}:
+ char, length = ('u', 4) if source[n + 1] == 'u' else ('x', 2)
+ n += 2
+ end = parse_num(source, n, HEX)
+ if end - n < length:
+ raise SyntaxError('Invalid escape sequence!')
+ #if length==4:
+ # return unichr(int(source[n:n+4], 16)), n+4 # <- this was a very bad way of solving this problem :)
+ return source[n - 2:n + length], n + length
+ if source[n + 1] in OCTAL:
+ n += 1
+ end = parse_num(source, n, OCTAL)
+ end = min(end, n + 3) # cant be longer than 3
+ # now the max allowed is 377 ( in octal) and 255 in decimal
+ max_num = 255
+ num = 0
+ len_parsed = 0
+ for e in source[n:end]:
+ cand = 8 * num + int(e)
+ if cand > max_num:
+ break
+ num = cand
+ len_parsed += 1
+ # we have to return in a different form because python may want to parse more...
+ # for example '\777' will be parsed by python as a whole while js will use only \77
+ return '\\' + hex(num)[1:], n + len_parsed
+ return source[n + 1], n + 2
+
+
+#####TEST######
+
+if __name__ == '__main__':
+ test = ('''
+ ''')
+
+ t, d = remove_constants(test)
+ print t, d
diff --git a/Contents/Libraries/Shared/js2py/legecy_translators/exps.py b/Contents/Libraries/Shared/js2py/legecy_translators/exps.py
new file mode 100644
index 000000000..3c8f793cd
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/legecy_translators/exps.py
@@ -0,0 +1,83 @@
+"""
+exp_translate routine:
+It takes a single line of JS code and returns a SINGLE line of Python code.
+Note var is not present here because it was removed in previous stages. Also remove this useless void keyword
+If case of parsing errors it must return a pos of error.
+1. Convert all assignment operations to put operations, this may be hard :( DONE, wasn't that bad
+2. Convert all gets and calls to get and callprop.
+3. Convert unary operators like typeof, new, !, delete, ++, --
+ Delete can be handled by replacing last get method with delete.
+4. Convert remaining operators that are not handled by python:
+ &&, || <= these should be easy simply replace && by and and || by or
+ === and !==
+ comma operator , in, instanceof and finally :?
+
+
+NOTES:
+Strings and other literals are not present so each = means assignment
+"""
+from utils import *
+from jsparser import *
+
+
+def exps_translator(js):
+ #Check () {} and [] nums
+ ass = assignment_translator(js)
+
+
+# Step 1
+def assignment_translator(js):
+ sep = js.split(',')
+ res = sep[:]
+ for i, e in enumerate(sep):
+ if '=' not in e: # no need to convert
+ continue
+ res[i] = bass_translator(e)
+ return ','.join(res)
+
+
+def bass_translator(s):
+ # I hope that I will not have to fix any bugs here because it will be terrible
+ if '(' in s or '[' in s:
+ converted = ''
+ for e in bracket_split(s, ['()', '[]'], strip=False):
+ if e[0] == '(':
+ converted += '(' + bass_translator(e[1:-1]) + ')'
+ elif e[0] == '[':
+ converted += '[' + bass_translator(e[1:-1]) + ']'
+ else:
+ converted += e
+ s = converted
+ if '=' not in s:
+ return s
+ ass = reversed(s.split('='))
+ last = ass.next()
+ res = last
+ for e in ass:
+ op = ''
+ if e[-1] in OP_METHODS: #increment assign like +=
+ op = ', "' + e[-1] + '"'
+ e = e[:-1]
+ cand = e.strip(
+ '() ') # (a) = 40 is valid so we need to transform '(a) ' to 'a'
+ if not is_property_accessor(cand): # it is not a property assignment
+ if not is_lval(cand) or is_internal(cand):
+ raise SyntaxError('Invalid left-hand side in assignment')
+ res = 'var.put(%s, %s%s)' % (cand.__repr__(), res, op)
+ elif cand[-1] == ']': # property assignment via []
+ c = list(bracket_split(cand, ['[]'], strip=False))
+ meth, prop = ''.join(c[:-1]).strip(), c[-1][1:-1].strip(
+ ) #this does not have to be a string so dont remove
+ #() because it can be a call
+ res = '%s.put(%s, %s%s)' % (meth, prop, res, op)
+ else: # Prop set via '.'
+ c = cand.rfind('.')
+ meth, prop = cand[:c].strip(), cand[c + 1:].strip('() ')
+ if not is_lval(prop):
+ raise SyntaxError('Invalid left-hand side in assignment')
+ res = '%s.put(%s, %s%s)' % (meth, prop.__repr__(), res, op)
+ return res
+
+
+if __name__ == '__main__':
+ print bass_translator('3.ddsd = 40')
diff --git a/Contents/Libraries/Shared/js2py/legecy_translators/flow.py b/Contents/Libraries/Shared/js2py/legecy_translators/flow.py
new file mode 100644
index 000000000..9e2bb0fa7
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/legecy_translators/flow.py
@@ -0,0 +1,480 @@
+"""This module translates JS flow into PY flow.
+
+Translates:
+IF ELSE
+
+DO WHILE
+WHILE
+FOR 123
+FOR iter
+CONTINUE, BREAK, RETURN, LABEL, THROW, TRY, SWITCH
+"""
+from utils import *
+from jsparser import *
+from nodevisitor import exp_translator
+import random
+
+TO_REGISTER = []
+CONTINUE_LABEL = 'JS_CONTINUE_LABEL_%s'
+BREAK_LABEL = 'JS_BREAK_LABEL_%s'
+
+PREPARE = '''HOLDER = var.own.get(NAME)\nvar.force_own_put(NAME, PyExceptionToJs(PyJsTempException))\n'''
+RESTORE = '''if HOLDER is not None:\n var.own[NAME] = HOLDER\nelse:\n del var.own[NAME]\ndel HOLDER\n'''
+TRY_CATCH = '''%stry:\nBLOCKfinally:\n%s''' % (PREPARE, indent(RESTORE))
+
+
+def get_continue_label(label):
+ return CONTINUE_LABEL % label.encode('hex')
+
+
+def get_break_label(label):
+ return BREAK_LABEL % label.encode('hex')
+
+
+def pass_until(source, start, tokens=(';', )):
+ while start < len(source) and source[start] not in tokens:
+ start += 1
+ return start + 1
+
+
+def do_bracket_exp(source, start, throw=True):
+ bra, cand = pass_bracket(source, start, '()')
+ if throw and not bra:
+ raise SyntaxError('Missing bracket expression')
+ bra = exp_translator(bra[1:-1])
+ if throw and not bra:
+ raise SyntaxError('Empty bracket condition')
+ return bra, cand if bra else start
+
+
+def do_if(source, start):
+ start += 2 # pass this if
+ bra, start = do_bracket_exp(source, start, throw=True)
+ statement, start = do_statement(source, start)
+ if statement is None:
+ raise SyntaxError('Invalid if statement')
+ translated = 'if %s:\n' % bra + indent(statement)
+
+ elseif = except_keyword(source, start, 'else')
+ is_elseif = False
+ if elseif:
+ start = elseif
+ if except_keyword(source, start, 'if'):
+ is_elseif = True
+ elseif, start = do_statement(source, start)
+ if elseif is None:
+ raise SyntaxError('Invalid if statement)')
+ if is_elseif:
+ translated += 'el' + elseif
+ else:
+ translated += 'else:\n' + indent(elseif)
+ return translated, start
+
+
+def do_statement(source, start):
+ """returns none if not found other functions that begin with 'do_' raise
+ also this do_ type function passes white space"""
+ start = pass_white(source, start)
+ # start is the fist position after initial start that is not a white space or \n
+ if not start < len(source): #if finished parsing return None
+ return None, start
+ if any(startswith_keyword(source[start:], e) for e in {'case', 'default'}):
+ return None, start
+ rest = source[start:]
+ for key, meth in KEYWORD_METHODS.iteritems(
+ ): # check for statements that are uniquely defined by their keywords
+ if rest.startswith(key):
+ # has to startwith this keyword and the next letter after keyword must be either EOF or not in IDENTIFIER_PART
+ if len(key) == len(rest) or rest[len(key)] not in IDENTIFIER_PART:
+ return meth(source, start)
+ if rest[0] == '{': #Block
+ return do_block(source, start)
+ # Now only label and expression left
+ cand = parse_identifier(source, start, False)
+ if cand is not None: # it can mean that its a label
+ label, cand_start = cand
+ cand_start = pass_white(source, cand_start)
+ if source[cand_start] == ':':
+ return do_label(source, start)
+ return do_expression(source, start)
+
+
+def do_while(source, start):
+ start += 5 # pass while
+ bra, start = do_bracket_exp(source, start, throw=True)
+ statement, start = do_statement(source, start)
+ if statement is None:
+ raise SyntaxError('Missing statement to execute in while loop!')
+ return 'while %s:\n' % bra + indent(statement), start
+
+
+def do_dowhile(source, start):
+ start += 2 # pass do
+ statement, start = do_statement(source, start)
+ if statement is None:
+ raise SyntaxError('Missing statement to execute in do while loop!')
+ start = except_keyword(source, start, 'while')
+ if not start:
+ raise SyntaxError('Missing while keyword in do-while loop')
+ bra, start = do_bracket_exp(source, start, throw=True)
+ statement += 'if not %s:\n' % bra + indent('break\n')
+ return 'while 1:\n' + indent(statement), start
+
+
+def do_block(source, start):
+ bra, start = pass_bracket(source, start, '{}')
+ #print source[start:], bra
+ #return bra +'\n', start
+ if bra is None:
+ raise SyntaxError('Missing block ( {code} )')
+ code = ''
+ bra = bra[1:-1] + ';'
+ bra_pos = 0
+ while bra_pos < len(bra):
+ st, bra_pos = do_statement(bra, bra_pos)
+ if st is None:
+ break
+ code += st
+ bra_pos = pass_white(bra, bra_pos)
+ if bra_pos < len(bra):
+ raise SyntaxError('Block has more code that could not be parsed:\n' +
+ bra[bra_pos:])
+ return code, start
+
+
+def do_empty(source, start):
+ return 'pass\n', start + 1
+
+
+def do_expression(source, start):
+ start = pass_white(source, start)
+ end = pass_until(source, start, tokens=(';', ))
+ if end == start + 1: #empty statement
+ return 'pass\n', end
+ # AUTOMATIC SEMICOLON INSERTION FOLLOWS
+ # Without ASI this function would end with: return exp_translator(source[start:end].rstrip(';'))+'\n', end
+ # ASI makes things a bit more complicated:
+ # we will try to parse as much as possible, inserting ; in place of last new line in case of error
+ rev = False
+ rpos = 0
+ while True:
+ try:
+ code = source[start:end].rstrip(';')
+ cand = exp_translator(code) + '\n', end
+ just_to_test = compile(cand[0], '', 'exec')
+ return cand
+ except Exception as e:
+ if not rev:
+ rev = source[start:end][::-1]
+ lpos = rpos
+ while True:
+ rpos = pass_until(rev, rpos, LINE_TERMINATOR)
+ if rpos >= len(rev):
+ raise
+ if filter(lambda x: x not in SPACE, rev[lpos:rpos]):
+ break
+ end = start + len(rev) - rpos + 1
+
+
+def do_var(source, start):
+ #todo auto ; insertion
+ start += 3 #pass var
+ end = pass_until(source, start, tokens=(';', ))
+ defs = argsplit(
+ source[start:end - 1]
+ ) # defs is the list of defined vars with optional initializer
+ code = ''
+ for de in defs:
+ var, var_end = parse_identifier(de, 0, True)
+ TO_REGISTER.append(var)
+ var_end = pass_white(de, var_end)
+ if var_end < len(
+ de
+ ): # we have something more to parse... It has to start with =
+ if de[var_end] != '=':
+ raise SyntaxError(
+ 'Unexpected initializer in var statement. Expected "=", got "%s"'
+ % de[var_end])
+ code += exp_translator(de) + '\n'
+ if not code.strip():
+ code = 'pass\n'
+ return code, end
+
+
+def do_label(source, start):
+ label, end = parse_identifier(source, start)
+ end = pass_white(source, end)
+ #now source[end] must be :
+ assert source[end] == ':'
+ end += 1
+ inside, end = do_statement(source, end)
+ if inside is None:
+ raise SyntaxError('Missing statement after label')
+ defs = ''
+ if inside.startswith('while ') or inside.startswith(
+ 'for ') or inside.startswith('#for'):
+ # we have to add contine label as well...
+ # 3 or 1 since #for loop type has more lines before real for.
+ sep = 1 if not inside.startswith('#for') else 3
+ cont_label = get_continue_label(label)
+ temp = inside.split('\n')
+ injected = 'try:\n' + '\n'.join(temp[sep:])
+ injected += 'except %s:\n pass\n' % cont_label
+ inside = '\n'.join(temp[:sep]) + '\n' + indent(injected)
+ defs += 'class %s(Exception): pass\n' % cont_label
+ break_label = get_break_label(label)
+ inside = 'try:\n%sexcept %s:\n pass\n' % (indent(inside), break_label)
+ defs += 'class %s(Exception): pass\n' % break_label
+ return defs + inside, end
+
+
+def do_for(source, start):
+ start += 3 # pass for
+ entered = start
+ bra, start = pass_bracket(source, start, '()')
+ inside, start = do_statement(source, start)
+ if inside is None:
+ raise SyntaxError('Missing statement after for')
+ bra = bra[1:-1]
+ if ';' in bra:
+ init = argsplit(bra, ';')
+ if len(init) != 3:
+ raise SyntaxError('Invalid for statement')
+ args = []
+ for i, item in enumerate(init):
+ end = pass_white(item, 0)
+ if end == len(item):
+ args.append('' if i != 1 else '1')
+ continue
+ if not i and except_keyword(item, end, 'var') is not None:
+ # var statement
+ args.append(do_var(item, end)[0])
+ continue
+ args.append(do_expression(item, end)[0])
+ return '#for JS loop\n%swhile %s:\n%s%s\n' % (
+ args[0], args[1].strip(), indent(inside), indent(args[2])), start
+ # iteration
+ end = pass_white(bra, 0)
+ register = False
+ if bra[end:].startswith('var '):
+ end += 3
+ end = pass_white(bra, end)
+ register = True
+ name, end = parse_identifier(bra, end)
+ if register:
+ TO_REGISTER.append(name)
+ end = pass_white(bra, end)
+ if bra[end:end + 2] != 'in' or bra[end + 2] in IDENTIFIER_PART:
+ #print source[entered-10:entered+50]
+ raise SyntaxError('Invalid "for x in y" statement')
+ end += 2 # pass in
+ exp = exp_translator(bra[end:])
+ res = 'for temp in %s:\n' % exp
+ res += indent('var.put(%s, temp)\n' % name.__repr__()) + indent(inside)
+ return res, start
+
+
+# todo - IMPORTANT
+def do_continue(source, start, name='continue'):
+ start += len(name) #pass continue
+ start = pass_white(source, start)
+ if start < len(source) and source[start] == ';':
+ return '%s\n' % name, start + 1
+ # labeled statement or error
+ label, start = parse_identifier(source, start)
+ start = pass_white(source, start)
+ if start < len(source) and source[start] != ';':
+ raise SyntaxError('Missing ; after label name in %s statement' % name)
+ return 'raise %s("%s")\n' % (get_continue_label(label)
+ if name == 'continue' else
+ get_break_label(label), name), start + 1
+
+
+def do_break(source, start):
+ return do_continue(source, start, 'break')
+
+
+def do_return(source, start):
+ start += 6 # pass return
+ end = source.find(';', start) + 1
+ if end == -1:
+ end = len(source)
+ trans = exp_translator(source[start:end].rstrip(';'))
+ return 'return %s\n' % (trans if trans else "var.get('undefined')"), end
+
+
+# todo later?- Also important
+def do_throw(source, start):
+ start += 5 # pass throw
+ end = source.find(';', start) + 1
+ if not end:
+ end = len(source)
+ trans = exp_translator(source[start:end].rstrip(';'))
+ if not trans:
+ raise SyntaxError('Invalid throw statement: nothing to throw')
+ res = 'PyJsTempException = JsToPyException(%s)\nraise PyJsTempException\n' % trans
+ return res, end
+
+
+def do_try(source, start):
+ start += 3 # pass try
+ block, start = do_block(source, start)
+ result = 'try:\n%s' % indent(block)
+ catch = except_keyword(source, start, 'catch')
+ if catch:
+ bra, catch = pass_bracket(source, catch, '()')
+ bra = bra[1:-1]
+ identifier, bra_end = parse_identifier(bra, 0)
+ holder = 'PyJsHolder_%s_%d' % (identifier.encode('hex'),
+ random.randrange(1e8))
+ identifier = identifier.__repr__()
+ bra_end = pass_white(bra, bra_end)
+ if bra_end < len(bra):
+ raise SyntaxError('Invalid content of catch statement')
+ result += 'except PyJsException as PyJsTempException:\n'
+ block, catch = do_block(source, catch)
+ # fill in except ( catch ) block and remember to recover holder variable to its previous state
+ result += indent(
+ TRY_CATCH.replace('HOLDER', holder).replace('NAME',
+ identifier).replace(
+ 'BLOCK',
+ indent(block)))
+ start = max(catch, start)
+ final = except_keyword(source, start, 'finally')
+ if not (final or catch):
+ raise SyntaxError(
+ 'Try statement has to be followed by catch or finally')
+ if not final:
+ return result, start
+ # translate finally statement
+ block, start = do_block(source, final)
+ return result + 'finally:\n%s' % indent(block), start
+
+
+def do_debugger(source, start):
+ start += 8 # pass debugger
+ end = pass_white(source, start)
+ if end < len(source) and source[end] == ';':
+ end += 1
+ return 'pass\n', end #ignore errors...
+
+
+# todo automatic ; insertion. fuck this crappy feature
+
+# Least important
+
+
+def do_switch(source, start):
+ start += 6 # pass switch
+ code = 'while 1:\n' + indent('SWITCHED = False\nCONDITION = (%s)\n')
+ # parse value of check
+ val, start = pass_bracket(source, start, '()')
+ if val is None:
+ raise SyntaxError('Missing () after switch statement')
+ if not val.strip():
+ raise SyntaxError('Missing content inside () after switch statement')
+ code = code % exp_translator(val)
+ bra, start = pass_bracket(source, start, '{}')
+ if bra is None:
+ raise SyntaxError('Missing block {} after switch statement')
+ bra_pos = 0
+ bra = bra[1:-1] + ';'
+ while True:
+ case = except_keyword(bra, bra_pos, 'case')
+ default = except_keyword(bra, bra_pos, 'default')
+ assert not (case and default)
+ if case or default: # this ?: expression makes things much harder....
+ case_code = None
+ if case:
+ case_code = 'if SWITCHED or PyJsStrictEq(CONDITION, %s):\n'
+ # we are looking for a first : with count 1. ? gives -1 and : gives +1.
+ count = 0
+ for pos, e in enumerate(bra[case:], case):
+ if e == '?':
+ count -= 1
+ elif e == ':':
+ count += 1
+ if count == 1:
+ break
+ else:
+ raise SyntaxError(
+ 'Missing : token after case in switch statement')
+ case_condition = exp_translator(
+ bra[case:pos]) # switch {case CONDITION: statements}
+ case_code = case_code % case_condition
+ case = pos + 1
+ if default:
+ case = except_token(bra, default, ':')
+ case_code = 'if True:\n'
+ # now parse case statements (things after ':' )
+ cand, case = do_statement(bra, case)
+ while cand:
+ case_code += indent(cand)
+ cand, case = do_statement(bra, case)
+ case_code += indent('SWITCHED = True\n')
+ code += indent(case_code)
+ bra_pos = case
+ else:
+ break
+ # prevent infinite loop :)
+ code += indent('break\n')
+ return code, start
+
+
+def do_pyimport(source, start):
+ start += 8
+ lib, start = parse_identifier(source, start)
+ jlib = 'PyImport_%s' % lib
+ code = 'import %s as %s\n' % (lib, jlib)
+ #check whether valid lib name...
+ try:
+ compile(code, '', 'exec')
+ except:
+ raise SyntaxError(
+ 'Invalid Python module name (%s) in pyimport statement' % lib)
+ # var.pyimport will handle module conversion to PyJs object
+ code += 'var.pyimport(%s, %s)\n' % (repr(lib), jlib)
+ return code, start
+
+
+def do_with(source, start):
+ raise NotImplementedError('With statement is not implemented yet :(')
+
+
+KEYWORD_METHODS = {
+ 'do': do_dowhile,
+ 'while': do_while,
+ 'if': do_if,
+ 'throw': do_throw,
+ 'return': do_return,
+ 'continue': do_continue,
+ 'break': do_break,
+ 'try': do_try,
+ 'for': do_for,
+ 'switch': do_switch,
+ 'var': do_var,
+ 'debugger': do_debugger, # this one does not do anything
+ 'with': do_with,
+ 'pyimport': do_pyimport
+}
+
+#Also not specific statements (harder to detect)
+# Block {}
+# Expression or Empty Statement
+# Label
+#
+# Its easy to recognize block but harder to distinguish between label and expression statement
+
+
+def translate_flow(source):
+ """Source cant have arrays, object, constant or function literals.
+ Returns PySource and variables to register"""
+ global TO_REGISTER
+ TO_REGISTER = []
+ return do_block('{%s}' % source, 0)[0], TO_REGISTER
+
+
+if __name__ == '__main__':
+ #print do_dowhile('do {} while(k+f)', 0)[0]
+ #print 'e: "%s"'%do_expression('++(c?g:h); mj', 0)[0]
+ print translate_flow('a; yimport test')[0]
diff --git a/Contents/Libraries/Shared/js2py/legecy_translators/functions.py b/Contents/Libraries/Shared/js2py/legecy_translators/functions.py
new file mode 100644
index 000000000..4825eee0f
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/legecy_translators/functions.py
@@ -0,0 +1,98 @@
+"""This module removes JS functions from source code"""
+from jsparser import *
+from utils import *
+
+INLINE_NAME = 'PyJsLvalInline%d_'
+INLINE_COUNT = 0
+PRE_EXP_STARTS = {
+ 'return', 'new', 'void', 'throw', 'typeof', 'in', 'instanceof'
+}
+PRE_ALLOWED = IDENTIFIER_PART.union({';', '{', '}', ']', ')', ':'})
+INCREMENTS = {'++', '--'}
+
+
+def reset_inline_count():
+ global INLINE_COUNT
+ INLINE_COUNT = 0
+
+
+def remove_functions(source, all_inline=False):
+ """removes functions and returns new source, and 2 dicts.
+ first dict with removed hoisted(global) functions and second with replaced inline functions"""
+ global INLINE_COUNT
+ inline = {}
+ hoisted = {}
+ n = 0
+ limit = len(source) - 9 # 8 is length of 'function'
+ res = ''
+ last = 0
+ while n < limit:
+ if n and source[n - 1] in IDENTIFIER_PART:
+ n += 1
+ continue
+ if source[n:n + 8] == 'function' and source[n +
+ 8] not in IDENTIFIER_PART:
+ if source[:n].rstrip().endswith(
+ '.'): # allow function as a property name :)
+ n += 1
+ continue
+ if source[n + 8:].lstrip().startswith(
+ ':'): # allow functions inside objects...
+ n += 1
+ continue
+ entered = n
+ res += source[last:n]
+ name = ''
+ n = pass_white(source, n + 8)
+ if source[n] in IDENTIFIER_START: # hoisted function
+ name, n = parse_identifier(source, n)
+ args, n = pass_bracket(source, n, '()')
+ if not args:
+ raise SyntaxError('Function misses bracket with argnames ()')
+ args = args.strip('() \n')
+ args = tuple(parse_identifier(e, 0)[0]
+ for e in argsplit(args)) if args else ()
+ if len(args) - len(set(args)):
+ # I know its legal in JS but python does not allow duplicate argnames
+ # I will not work around it
+ raise SyntaxError(
+ 'Function has duplicate argument names. Its not legal in this implementation. Sorry.'
+ )
+ block, n = pass_bracket(source, n, '{}')
+ if not block:
+ raise SyntaxError(
+ 'Function does not have any code block to execute')
+ mixed = False # named function expression flag
+ if name and not all_inline:
+ # Here I will distinguish between named function expression (mixed) and a function statement
+ before = source[:entered].rstrip()
+ if any(endswith_keyword(before, e) for e in PRE_EXP_STARTS):
+ #print 'Ended ith keyword'
+ mixed = True
+ elif before and before[-1] not in PRE_ALLOWED and not before[
+ -2:] in INCREMENTS:
+ #print 'Ended with'+repr(before[-1]), before[-1]=='}'
+ mixed = True
+ else:
+ #print 'FUNCTION STATEMENT'
+ #its a function statement.
+ # todo remove fucking label if present!
+ hoisted[name] = block, args
+ if not name or mixed or all_inline: # its a function expression (can be both named and not named)
+ #print 'FUNCTION EXPRESSION'
+ INLINE_COUNT += 1
+ iname = INLINE_NAME % INLINE_COUNT # inline name
+ res += ' ' + iname
+ inline['%s@%s' % (
+ iname, name
+ )] = block, args #here added real name at the end because it has to be added to the func scope
+ last = n
+ else:
+ n += 1
+ res += source[last:]
+ return res, hoisted, inline
+
+
+if __name__ == '__main__':
+ print remove_functions(
+ '5+5 function n (functiona ,functionaj) {dsd s, dsdd}')
diff --git a/Contents/Libraries/Shared/js2py/legecy_translators/jsparser.py b/Contents/Libraries/Shared/js2py/legecy_translators/jsparser.py
new file mode 100644
index 000000000..a09537d31
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/legecy_translators/jsparser.py
@@ -0,0 +1,326 @@
+"""
+The process of translating JS will go like that: # TOP = 'imports and scope set'
+
+1. Remove all the comments
+2. Replace number, string and regexp literals with markers
+4. Remove global Functions and move their translation to the TOP. Also add register code there.
+5. Replace inline functions with lvals
+6. Remove List and Object literals and replace them with lvals
+7. Find and remove var declarations, generate python register code that would go on TOP.
+
+Here we should be left with global code only where 1 line of js code = 1 line of python code.
+Routine translating this code should be called glob_translate:
+1. Search for outer structures and translate them using glob and inside using exps_translate
+
+
+exps_translate routine:
+1. Remove outer {}
+2. Split lines at ;
+3. Convert line by line using exp_translate
+4. In case of error in 3 try to insert ; according to ECMA rules and repeat 3.
+
+exp_translate routine:
+It takes a single line of JS code and returns a SINGLE line of Python code.
+Note var is not present here because it was removed in previous stages.
+If case of parsing errors it must return a pos of error.
+1. Convert all assignment operations to put operations, this may be hard :(
+2. Convert all gets and calls to get and callprop.
+3. Convert unary operators like typeof, new, !, delete.
+ Delete can be handled by replacing last get method with delete.
+4. Convert remaining operators that are not handled by python eg: === and ,
+
+
+
+
+
+lval format PyJsLvalNR
+marker PyJs(TYPE_NAME)(NR)
+
+TODO
+1. Number literal replacement
+2. Array literal replacement
+3. Object literal replacement
+5. Function replacement
+4. Literal replacement translators
+
+
+"""
+
+from utils import *
+
+OP_METHODS = {
+ '*': '__mul__',
+ '/': '__div__',
+ '%': '__mod__',
+ '+': '__add__',
+ '-': '__sub__',
+ '<<': '__lshift__',
+ '>>': '__rshift__',
+ '&': '__and__',
+ '^': '__xor__',
+ '|': '__or__'
+}
+
+
+def dbg(source):
+ try:
+ with open('C:\Users\Piotrek\Desktop\dbg.py', 'w') as f:
+ f.write(source)
+ except:
+ pass
+
+
+def indent(lines, ind=4):
+ return ind * ' ' + lines.replace('\n', '\n' + ind * ' ').rstrip(' ')
+
+
+def inject_before_lval(source, lval, code):
+ if source.count(lval) > 1:
+ dbg(source)
+ print
+ print lval
+ raise RuntimeError('To many lvals (%s)' % lval)
+ elif not source.count(lval):
+ dbg(source)
+ print
+ print lval
+ assert lval not in source
+ raise RuntimeError('No lval found "%s"' % lval)
+ end = source.index(lval)
+ inj = source.rfind('\n', 0, end)
+ ind = inj
+ while source[ind + 1] == ' ':
+ ind += 1
+ ind -= inj
+ return source[:inj + 1] + indent(code, ind) + source[inj + 1:]
+
+
+def bracket_split(source, brackets=('()', '{}', '[]'), strip=False):
+ """DOES NOT RETURN EMPTY STRINGS (can only return empty bracket content if strip=True)"""
+ starts = [e[0] for e in brackets]
+ in_bracket = 0
+ n = 0
+ last = 0
+ while n < len(source):
+ e = source[n]
+ if not in_bracket and e in starts:
+ in_bracket = 1
+ start = n
+ b_start, b_end = brackets[starts.index(e)]
+ elif in_bracket:
+ if e == b_start:
+ in_bracket += 1
+ elif e == b_end:
+ in_bracket -= 1
+ if not in_bracket:
+ if source[last:start]:
+ yield source[last:start]
+ last = n + 1
+ yield source[start + strip:n + 1 - strip]
+ n += 1
+ if source[last:]:
+ yield source[last:]
+
+
+def pass_bracket(source, start, bracket='()'):
+ """Returns content of brackets with brackets and first pos after brackets
+ if source[start] is followed by some optional white space and brackets.
+ Otherwise None"""
+ e = bracket_split(source[start:], [bracket], False)
+ try:
+ cand = e.next()
+ except StopIteration:
+ return None, None
+ if not cand.strip(): #white space...
+ try:
+ res = e.next()
+ return res, start + len(cand) + len(res)
+ except StopIteration:
+ return None, None
+ elif cand[-1] == bracket[1]:
+ return cand, start + len(cand)
+ else:
+ return None, None
+
+
+def startswith_keyword(start, keyword):
+ start = start.lstrip()
+ if start.startswith(keyword):
+ if len(keyword) < len(start):
+ if start[len(keyword)] in IDENTIFIER_PART:
+ return False
+ return True
+ return False
+
+
+def endswith_keyword(ending, keyword):
+ ending = ending.rstrip()
+ if ending.endswith(keyword):
+ if len(keyword) < len(ending):
+ if ending[len(ending) - len(keyword) - 1] in IDENTIFIER_PART:
+ return False
+ return True
+ return False
+
+
+def pass_white(source, start):
+ n = start
+ while n < len(source):
+ if source[n] in SPACE:
+ n += 1
+ else:
+ break
+ return n
+
+
+def except_token(source, start, token, throw=True):
+ """Token can be only a single char. Returns position after token if found. Otherwise raises syntax error if throw
+ otherwise returns None"""
+ start = pass_white(source, start)
+ if start < len(source) and source[start] == token:
+ return start + 1
+ if throw:
+ raise SyntaxError('Missing token. Expected %s' % token)
+ return None
+
+
+def except_keyword(source, start, keyword):
+ """ Returns position after keyword if found else None
+ Note: skips white space"""
+ start = pass_white(source, start)
+ kl = len(keyword) #keyword len
+ if kl + start > len(source):
+ return None
+ if source[start:start + kl] != keyword:
+ return None
+ if kl + start < len(source) and source[start + kl] in IDENTIFIER_PART:
+ return None
+ return start + kl
+
+
+def parse_identifier(source, start, throw=True):
+ """passes white space from start and returns first identifier,
+ if identifier invalid and throw raises SyntaxError otherwise returns None"""
+ start = pass_white(source, start)
+ end = start
+ if not end < len(source):
+ if throw:
+ raise SyntaxError('Missing identifier!')
+ return None
+ if source[end] not in IDENTIFIER_START:
+ if throw:
+ raise SyntaxError('Invalid identifier start: "%s"' % source[end])
+ return None
+ end += 1
+ while end < len(source) and source[end] in IDENTIFIER_PART:
+ end += 1
+ if not is_valid_lval(source[start:end]):
+ if throw:
+ raise SyntaxError(
+ 'Invalid identifier name: "%s"' % source[start:end])
+ return None
+ return source[start:end], end
+
+
+def argsplit(args, sep=','):
+ """used to split JS args (it is not that simple as it seems because
+ sep can be inside brackets).
+
+ pass args *without* brackets!
+
+ Used also to parse array and object elements, and more"""
+ parsed_len = 0
+ last = 0
+ splits = []
+ for e in bracket_split(args, brackets=['()', '[]', '{}']):
+ if e[0] not in {'(', '[', '{'}:
+ for i, char in enumerate(e):
+ if char == sep:
+ splits.append(args[last:parsed_len + i])
+ last = parsed_len + i + 1
+ parsed_len += len(e)
+ splits.append(args[last:])
+ return splits
+
+
+def split_add_ops(text):
+ """Specialized function splitting text at add/sub operators.
+ Operands are *not* translated. Example result ['op1', '+', 'op2', '-', 'op3']"""
+ n = 0
+ text = text.replace('++', '##').replace(
+ '--', '@@') #text does not normally contain any of these
+ spotted = False # set to true if noticed anything other than +- or white space
+ last = 0
+ while n < len(text):
+ e = text[n]
+ if e == '+' or e == '-':
+ if spotted:
+ yield text[last:n].replace('##', '++').replace('@@', '--')
+ yield e
+ last = n + 1
+ spotted = False
+ elif e == '/' or e == '*' or e == '%':
+ spotted = False
+ elif e != ' ':
+ spotted = True
+ n += 1
+ yield text[last:n].replace('##', '++').replace('@@', '--')
+
+
+def split_at_any(text,
+ lis,
+ translate=False,
+ not_before=[],
+ not_after=[],
+ validitate=None):
+ """ doc """
+ lis.sort(key=lambda x: len(x), reverse=True)
+ last = 0
+ n = 0
+ text_len = len(text)
+ while n < text_len:
+ if any(text[:n].endswith(e)
+ for e in not_before): #Cant end with end before
+ n += 1
+ continue
+ for e in lis:
+ s = len(e)
+ if s + n > text_len:
+ continue
+ if validitate and not validitate(e, text[:n], text[n + s:]):
+ continue
+ if any(text[n + s:].startswith(e)
+ for e in not_after): #Cant end with end before
+ n += 1
+ break
+ if e == text[n:n + s]:
+ yield text[last:n] if not translate else translate(
+ text[last:n])
+ yield e
+ n += s
+ last = n
+ break
+ else:
+ n += 1
+ yield text[last:n] if not translate else translate(text[last:n])
+
+
+def split_at_single(text, sep, not_before=[], not_after=[]):
+ """Works like text.split(sep) but separated fragments
+ cant end with not_before or start with not_after"""
+ n = 0
+ lt, s = len(text), len(sep)
+ last = 0
+ while n < lt:
+ if not s + n > lt:
+ if sep == text[n:n + s]:
+ if any(text[last:n].endswith(e) for e in not_before):
+ pass
+ elif any(text[n + s:].startswith(e) for e in not_after):
+ pass
+ else:
+ yield text[last:n]
+ last = n + s
+ n += s - 1
+ n += 1
+ yield text[last:]
diff --git a/Contents/Libraries/Shared/js2py/legecy_translators/nodevisitor.py b/Contents/Libraries/Shared/js2py/legecy_translators/nodevisitor.py
new file mode 100644
index 000000000..4d50545c9
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/legecy_translators/nodevisitor.py
@@ -0,0 +1,562 @@
+from jsparser import *
+from utils import *
+import re
+from utils import *
+
+#Note all white space sent to this module must be ' ' so no '\n'
+REPL = {}
+
+#PROBLEMS
+# <<=, >>=, >>>=
+# they are unusual so I will not fix that now. a++ +b works fine and a+++++b (a++ + ++b) does not work even in V8
+ASSIGNMENT_MATCH = '(?)=(?!=)'
+
+
+def unary_validitator(keyword, before, after):
+ if keyword[-1] in IDENTIFIER_PART:
+ if not after or after[0] in IDENTIFIER_PART:
+ return False
+ if before and before[-1] in IDENTIFIER_PART: # I am not sure here...
+ return False
+ return True
+
+
+def comb_validitator(keyword, before, after):
+ if keyword == 'instanceof' or keyword == 'in':
+ if before and before[-1] in IDENTIFIER_PART:
+ return False
+ elif after and after[0] in IDENTIFIER_PART:
+ return False
+ return True
+
+
+def bracket_replace(code):
+ new = ''
+ for e in bracket_split(code, ['()', '[]'], False):
+ if e[0] == '[':
+ name = '#PYJSREPL' + str(len(REPL)) + '{'
+ new += name
+ REPL[name] = e
+ elif e[0] == '(': # can be a function call
+ name = '@PYJSREPL' + str(len(REPL)) + '}'
+ new += name
+ REPL[name] = e
+ else:
+ new += e
+ return new
+
+
+class NodeVisitor:
+ def __init__(self, code):
+ self.code = code
+
+ def rl(self, lis, op):
+ """performs this operation on a list from *right to left*
+ op must take 2 args
+ a,b,c => op(a, op(b, c))"""
+ it = reversed(lis)
+ res = trans(it.next())
+ for e in it:
+ e = trans(e)
+ res = op(e, res)
+ return res
+
+ def lr(self, lis, op):
+ """performs this operation on a list from *left to right*
+ op must take 2 args
+ a,b,c => op(op(a, b), c)"""
+ it = iter(lis)
+ res = trans(it.next())
+ for e in it:
+ e = trans(e)
+ res = op(res, e)
+ return res
+
+ def translate(self):
+ """Translates outer operation and calls translate on inner operation.
+ Returns fully translated code."""
+ if not self.code:
+ return ''
+ new = bracket_replace(self.code)
+ #Check comma operator:
+ cand = new.split(',') #every comma in new must be an operator
+ if len(cand) > 1: #LR
+ return self.lr(cand, js_comma)
+ #Check = operator:
+ # dont split at != or !== or == or === or <= or >=
+ #note <<=, >>= or this >>> will NOT be supported
+ # maybe I will change my mind later
+ # Find this crappy ?:
+ if '?' in new:
+ cond_ind = new.find('?')
+ tenary_start = 0
+ for ass in re.finditer(ASSIGNMENT_MATCH, new):
+ cand = ass.span()[1]
+ if cand < cond_ind:
+ tenary_start = cand
+ else:
+ break
+ actual_tenary = new[tenary_start:]
+ spl = ''.join(split_at_any(new, [':', '?'], translate=trans))
+ tenary_translation = transform_crap(spl)
+ assignment = new[:tenary_start] + ' PyJsConstantTENARY'
+ return trans(assignment).replace('PyJsConstantTENARY',
+ tenary_translation)
+ cand = list(split_at_single(new, '=', ['!', '=', '<', '>'], ['=']))
+ if len(cand) > 1: # RL
+ it = reversed(cand)
+ res = trans(it.next())
+ for e in it:
+ e = e.strip()
+ if not e:
+ raise SyntaxError('Missing left-hand in assignment!')
+ op = ''
+ if e[-2:] in OP_METHODS:
+ op = ',' + e[-2:].__repr__()
+ e = e[:-2]
+ elif e[-1:] in OP_METHODS:
+ op = ',' + e[-1].__repr__()
+ e = e[:-1]
+ e = trans(e)
+ #Now replace last get method with put and change args
+ c = list(bracket_split(e, ['()']))
+ beg, arglist = ''.join(c[:-1]).strip(), c[-1].strip(
+ ) #strips just to make sure... I will remove it later
+ if beg[-4:] != '.get':
+ raise SyntaxError('Invalid left-hand side in assignment')
+ beg = beg[0:-3] + 'put'
+ arglist = arglist[0:-1] + ', ' + res + op + ')'
+ res = beg + arglist
+ return res
+ #Now check remaining 2 arg operators that are not handled by python
+ #They all have Left to Right (LR) associativity
+ order = [OR, AND, BOR, BXOR, BAND, EQS, COMPS, BSHIFTS, ADDS, MULTS]
+ # actually we dont need OR and AND because they can be handled easier. But just for fun
+ dangerous = ['<', '>']
+ for typ in order:
+ #we have to use special method for ADDS since they can be also unary operation +/++ or -/-- FUCK
+ if '+' in typ:
+ cand = list(split_add_ops(new))
+ else:
+ #dont translate. cant start or end on dangerous op.
+ cand = list(
+ split_at_any(
+ new,
+ typ.keys(),
+ False,
+ dangerous,
+ dangerous,
+ validitate=comb_validitator))
+ if not len(cand) > 1:
+ continue
+ n = 1
+ res = trans(cand[0])
+ if not res:
+ raise SyntaxError("Missing operand!")
+ while n < len(cand):
+ e = cand[n]
+ if not e:
+ raise SyntaxError("Missing operand!")
+ if n % 2:
+ op = typ[e]
+ else:
+ res = op(res, trans(e))
+ n += 1
+ return res
+ #Now replace unary operators - only they are left
+ cand = list(
+ split_at_any(
+ new, UNARY.keys(), False, validitate=unary_validitator))
+ if len(cand) > 1: #contains unary operators
+ if '++' in cand or '--' in cand: #it cant contain both ++ and --
+ if '--' in cand:
+ op = '--'
+ meths = js_post_dec, js_pre_dec
+ else:
+ op = '++'
+ meths = js_post_inc, js_pre_inc
+ pos = cand.index(op)
+ if cand[pos - 1].strip(): # post increment
+ a = cand[pos - 1]
+ meth = meths[0]
+ elif cand[pos + 1].strip(): #pre increment
+ a = cand[pos + 1]
+ meth = meths[1]
+ else:
+ raise SyntaxError('Invalid use of ++ operator')
+ if cand[pos + 2:]:
+ raise SyntaxError('Too many operands')
+ operand = meth(trans(a))
+ cand = cand[:pos - 1]
+ # now last cand should be operand and every other odd element should be empty
+ else:
+ operand = trans(cand[-1])
+ del cand[-1]
+ for i, e in enumerate(reversed(cand)):
+ if i % 2:
+ if e.strip():
+ raise SyntaxError('Too many operands')
+ else:
+ operand = UNARY[e](operand)
+ return operand
+ #Replace brackets
+ if new[0] == '@' or new[0] == '#':
+ if len(
+ list(bracket_split(new, ('#{', '@}')))
+ ) == 1: # we have only one bracket, otherwise pseudobracket like @@....
+ assert new in REPL
+ if new[0] == '#':
+ raise SyntaxError(
+ '[] cant be used as brackets! Use () instead.')
+ return '(' + trans(REPL[new][1:-1]) + ')'
+ #Replace function calls and prop getters
+ # 'now' must be a reference like: a or b.c.d but it can have also calls or getters ( for example a["b"](3))
+ #From here @@ means a function call and ## means get operation (note they dont have to present)
+ it = bracket_split(new, ('#{', '@}'))
+ res = []
+ for e in it:
+ if e[0] != '#' and e[0] != '@':
+ res += [x.strip() for x in e.split('.')]
+ else:
+ res += [e.strip()]
+ # res[0] can be inside @@ (name)...
+ res = filter(lambda x: x, res)
+ if is_internal(res[0]):
+ out = res[0]
+ elif res[0][0] in {'#', '@'}:
+ out = '(' + trans(REPL[res[0]][1:-1]) + ')'
+ elif is_valid_lval(
+ res[0]) or res[0] in {'this', 'false', 'true', 'null'}:
+ out = 'var.get(' + res[0].__repr__() + ')'
+ else:
+ if is_reserved(res[0]):
+ raise SyntaxError('Unexpected reserved word: "%s"' % res[0])
+ raise SyntaxError('Invalid identifier: "%s"' % res[0])
+ if len(res) == 1:
+ return out
+ n = 1
+ while n < len(res): #now every func call is a prop call
+ e = res[n]
+ if e[0] == '@': # direct call
+ out += trans_args(REPL[e])
+ n += 1
+ continue
+ args = False #assume not prop call
+ if n + 1 < len(res) and res[n + 1][0] == '@': #prop call
+ args = trans_args(REPL[res[n + 1]])[1:]
+ if args != ')':
+ args = ',' + args
+ if e[0] == '#':
+ prop = trans(REPL[e][1:-1])
+ else:
+ if not is_lval(e):
+ raise SyntaxError('Invalid identifier: "%s"' % e)
+ prop = e.__repr__()
+ if args: # prop call
+ n += 1
+ out += '.callprop(' + prop + args
+ else: #prop get
+ out += '.get(' + prop + ')'
+ n += 1
+ return out
+
+
+def js_comma(a, b):
+ return 'PyJsComma(' + a + ',' + b + ')'
+
+
+def js_or(a, b):
+ return '(' + a + ' or ' + b + ')'
+
+
+def js_bor(a, b):
+ return '(' + a + '|' + b + ')'
+
+
+def js_bxor(a, b):
+ return '(' + a + '^' + b + ')'
+
+
+def js_band(a, b):
+ return '(' + a + '&' + b + ')'
+
+
+def js_and(a, b):
+ return '(' + a + ' and ' + b + ')'
+
+
+def js_strict_eq(a, b):
+
+ return 'PyJsStrictEq(' + a + ',' + b + ')'
+
+
+def js_strict_neq(a, b):
+ return 'PyJsStrictNeq(' + a + ',' + b + ')'
+
+
+#Not handled by python in the same way like JS. For example 2==2==True returns false.
+# In JS above would return true so we need brackets.
+def js_abstract_eq(a, b):
+ return '(' + a + '==' + b + ')'
+
+
+#just like ==
+def js_abstract_neq(a, b):
+ return '(' + a + '!=' + b + ')'
+
+
+def js_lt(a, b):
+ return '(' + a + '<' + b + ')'
+
+
+def js_le(a, b):
+ return '(' + a + '<=' + b + ')'
+
+
+def js_ge(a, b):
+ return '(' + a + '>=' + b + ')'
+
+
+def js_gt(a, b):
+ return '(' + a + '>' + b + ')'
+
+
+def js_in(a, b):
+ return b + '.contains(' + a + ')'
+
+
+def js_instanceof(a, b):
+ return a + '.instanceof(' + b + ')'
+
+
+def js_lshift(a, b):
+ return '(' + a + '<<' + b + ')'
+
+
+def js_rshift(a, b):
+ return '(' + a + '>>' + b + ')'
+
+
+def js_shit(a, b):
+ return 'PyJsBshift(' + a + ',' + b + ')'
+
+
+def js_add(
+ a,
+ b): # To simplify later process of converting unary operators + and ++
+ return '(%s+%s)' % (a, b)
+
+
+def js_sub(a, b): # To simplify
+ return '(%s-%s)' % (a, b)
+
+
+def js_mul(a, b):
+ return '(' + a + '*' + b + ')'
+
+
+def js_div(a, b):
+ return '(' + a + '/' + b + ')'
+
+
+def js_mod(a, b):
+ return '(' + a + '%' + b + ')'
+
+
+def js_typeof(a):
+ cand = list(bracket_split(a, ('()', )))
+ if len(cand) == 2 and cand[0] == 'var.get':
+ return cand[0] + cand[1][:-1] + ',throw=False).typeof()'
+ return a + '.typeof()'
+
+
+def js_void(a):
+ return '(' + a + ')'
+
+
+def js_new(a):
+ cands = list(bracket_split(a, ('()', )))
+ lim = len(cands)
+ if lim < 2:
+ return a + '.create()'
+ n = 0
+ while n < lim:
+ c = cands[n]
+ if c[0] == '(':
+ if cands[n - 1].endswith(
+ '.get') and n + 1 >= lim: # last get operation.
+ return a + '.create()'
+ elif cands[n - 1][0] == '(':
+ return ''.join(cands[:n]) + '.create' + c + ''.join(
+ cands[n + 1:])
+ elif cands[n - 1] == '.callprop':
+ beg = ''.join(cands[:n - 1])
+ args = argsplit(c[1:-1], ',')
+ prop = args[0]
+ new_args = ','.join(args[1:])
+ create = '.get(%s).create(%s)' % (prop, new_args)
+ return beg + create + ''.join(cands[n + 1:])
+ n += 1
+ return a + '.create()'
+
+
+def js_delete(a):
+ #replace last get with delete.
+ c = list(bracket_split(a, ['()']))
+ beg, arglist = ''.join(c[:-1]).strip(), c[-1].strip(
+ ) #strips just to make sure... I will remove it later
+ if beg[-4:] != '.get':
+ raise SyntaxError('Invalid delete operation')
+ return beg[:-3] + 'delete' + arglist
+
+
+def js_neg(a):
+ return '(-' + a + ')'
+
+
+def js_pos(a):
+ return '(+' + a + ')'
+
+
+def js_inv(a):
+ return '(~' + a + ')'
+
+
+def js_not(a):
+ return a + '.neg()'
+
+
+def postfix(a, inc, post):
+ bra = list(bracket_split(a, ('()', )))
+ meth = bra[-2]
+ if not meth.endswith('get'):
+ raise SyntaxError('Invalid ++ or -- operation.')
+ bra[-2] = bra[-2][:-3] + 'put'
+ bra[-1] = '(%s,%s%sJs(1))' % (bra[-1][1:-1], a, '+' if inc else '-')
+ res = ''.join(bra)
+ return res if not post else '(%s%sJs(1))' % (res, '-' if inc else '+')
+
+
+def js_pre_inc(a):
+ return postfix(a, True, False)
+
+
+def js_post_inc(a):
+ return postfix(a, True, True)
+
+
+def js_pre_dec(a):
+ return postfix(a, False, False)
+
+
+def js_post_dec(a):
+ return postfix(a, False, True)
+
+
+OR = {'||': js_or}
+AND = {'&&': js_and}
+BOR = {'|': js_bor}
+BXOR = {'^': js_bxor}
+BAND = {'&': js_band}
+
+EQS = {
+ '===': js_strict_eq,
+ '!==': js_strict_neq,
+ '==': js_abstract_eq, # we need == and != too. Read a note above method
+ '!=': js_abstract_neq
+}
+
+#Since JS does not have chained comparisons we need to implement all cmp methods.
+COMPS = {
+ '<': js_lt,
+ '<=': js_le,
+ '>=': js_ge,
+ '>': js_gt,
+ 'instanceof': js_instanceof, #todo change to validitate
+ 'in': js_in
+}
+
+BSHIFTS = {'<<': js_lshift, '>>': js_rshift, '>>>': js_shit}
+
+ADDS = {'+': js_add, '-': js_sub}
+
+MULTS = {'*': js_mul, '/': js_div, '%': js_mod}
+
+#Note they dont contain ++ and -- methods because they both have 2 different methods
+# correct method will be found automatically in translate function
+UNARY = {
+ 'typeof': js_typeof,
+ 'void': js_void,
+ 'new': js_new,
+ 'delete': js_delete,
+ '!': js_not,
+ '-': js_neg,
+ '+': js_pos,
+ '~': js_inv,
+ '++': None,
+ '--': None
+}
+
+
+def transform_crap(code): #needs some more tests
+ """Transforms this ?: crap into if else python syntax"""
+ ind = code.rfind('?')
+ if ind == -1:
+ return code
+ sep = code.find(':', ind)
+ if sep == -1:
+ raise SyntaxError('Invalid ?: syntax (probably missing ":" )')
+ beg = max(code.rfind(':', 0, ind), code.find('?', 0, ind)) + 1
+ end = code.find(':', sep + 1)
+ end = len(code) if end == -1 else end
+ formula = '(' + code[ind + 1:sep] + ' if ' + code[
+ beg:ind] + ' else ' + code[sep + 1:end] + ')'
+ return transform_crap(code[:beg] + formula + code[end:])
+
+
+from code import InteractiveConsole
+
+#e = InteractiveConsole(globals()).interact()
+import traceback
+
+
+def trans(code):
+ return NodeVisitor(code.strip()).translate().strip()
+
+
+#todo finish this trans args
+def trans_args(code):
+ new = bracket_replace(code.strip()[1:-1])
+ args = ','.join(trans(e) for e in new.split(','))
+ return '(%s)' % args
+
+
+EXP = 0
+
+
+def exp_translator(code):
+ global REPL, EXP
+ EXP += 1
+ REPL = {}
+ #print EXP, code
+ code = code.replace('\n', ' ')
+ assert '@' not in code
+ assert ';' not in code
+ assert '#' not in code
+ #if not code.strip(): #?
+ # return 'var.get("undefined")'
+ try:
+ return trans(code)
+ except:
+ #print '\n\ntrans failed on \n\n' + code
+ #raw_input('\n\npress enter')
+ raise
+
+
+if __name__ == '__main__':
+ #print 'Here', trans('(eee ) . ii [ PyJsMarker ] [ jkj ] ( j , j ) .
+ # jiji (h , ji , i)(non )( )()()()')
+ for e in xrange(3):
+ print exp_translator('jk = kk.ik++')
+ #First line translated with PyJs: PyJsStrictEq(PyJsAdd((Js(100)*Js(50)),Js(30)), Js("5030")), yay!
+ print exp_translator('delete a.f')
diff --git a/Contents/Libraries/Shared/js2py/legecy_translators/nparser.py b/Contents/Libraries/Shared/js2py/legecy_translators/nparser.py
new file mode 100644
index 000000000..a9c97c9ae
--- /dev/null
+++ b/Contents/Libraries/Shared/js2py/legecy_translators/nparser.py
@@ -0,0 +1,3209 @@
+# JUST FOR NOW, later I will write my own - much faster and better.
+
+# Copyright (C) 2013 Ariya Hidayat
+# Copyright (C) 2013 Thaddee Tyl
+# Copyright (C) 2012 Ariya Hidayat
+# Copyright (C) 2012 Mathias Bynens
+# Copyright (C) 2012 Joost-Wim Boekesteijn
+# Copyright (C) 2012 Kris Kowal
+# Copyright (C) 2012 Yusuke Suzuki
+# Copyright (C) 2012 Arpad Borsos