def update_rapydscript(): vm_js = ''' exports.createContext = function(x) { x.AST_Node = {}; return x; } exports.runInContext = function() { return null; } ''' fs_js = ''' exports.realpathSync = function(x) { return x; } exports.readFileSync = function() { return ""; } ''' path_js = ''' exports.join = function(x, y) { return x + '/' + y; } exports.dirname = function(x) { return x; } exports.resolve = function(x) { return x; } ''' d = os.path.dirname base = d(d(d(d(d(abspath(__file__)))))) base = os.path.join(base, 'rapydscript') ctx = Context(base_dirs=(base, ), builtin_modules={ 'path': path_js, 'fs': fs_js, 'vm': vm_js }) ctx.g.require.id = 'rapydscript/bin' try: ctx.eval('RapydScript = require("../tools/compiler")', fname='bin/rapydscript') except JSError as e: raise SystemExit('%s:%s:%s' % (e.fileName, e.lineNumber, e.message)) data = b'\n\n'.join( open(os.path.join(base, 'lib', x + '.js'), 'rb').read() for x in ctx.g.RapydScript.FILENAMES) package = json.load(open(os.path.join(base, 'package.json'))) baselib = parse_baselib( open(os.path.join(base, 'src', 'baselib.pyj'), 'rb').read().decode('utf-8')) ctx = Context() ctx.eval(data.decode('utf-8')) baselib = { 'beautifed': compile_baselib(ctx, baselib), 'minified': compile_baselib(ctx, baselib, False) } repl = open(os.path.join(base, 'tools', 'repl.js'), 'rb').read() with open(P(COMPILER_PATH, allow_user_override=False), 'wb') as f: f.write(data) f.write(b'\n\nrs_baselib_pyj = ' + json.dumps(baselib) + b';') f.write(b'\n\nrs_repl_js = ' + json.dumps(repl) + b';') f.write(b'\n\nrs_package_version = ' + json.dumps(package['version']) + b';\n')
def compiler(): ans = getattr(tls, 'compiler', None) if ans is None: from duktape import Context c = tls.compiler = Context() c.eval(P('coffee-script.js', data=True).decode('utf-8')) return tls.compiler
def compiler(): c = getattr(tls, 'compiler', None) if c is None: c = tls.compiler = Context() c.eval('exports = {}; sha1sum = Duktape.sha1sum;', noreturn=True) buf = BytesIO() decompress(P(COMPILER_PATH, data=True, allow_user_override=False), buf) c.eval(buf.getvalue(), fname=COMPILER_PATH, noreturn=True) return c
def compiler(): c = getattr(tls, 'compiler', None) if c is None: c = tls.compiler = Context( base_dirs=(P('rapydscript', allow_user_override=False), )) c.eval(P(COMPILER_PATH, data=True, allow_user_override=False).decode('utf-8'), fname='rapydscript-compiler.js') c.g.current_output_options = {} return c
def init_ctx(self): cc = ''' exports.AST_Node = AST_Node; exports.ALL_KEYWORDS = ALL_KEYWORDS; exports.tokenizer = tokenizer; exports.parse = parse; exports.OutputStream = OutputStream; exports.IDENTIFIER_PAT = IDENTIFIER_PAT; ''' self.prompt = self.ps1 readline = ''' exports.createInterface = function(options) { rl.completer = options.completer; return rl; } ''' self.ctx = Context(builtin_modules={ 'readline': readline, 'compiler': cc }) self.ctx.g.Duktape.write = self.output.write self.ctx.eval( r'''console = { log: function() { Duktape.write(Array.prototype.slice.call(arguments).join(' ') + '\n');}}; console['error'] = console['log'];''') cc = P(COMPILER_PATH, data=True, allow_user_override=False) self.ctx.eval(cc) baselib = dict(dict(self.ctx.g.rs_baselib_pyj)['beautifed']) baselib = '\n\n'.join(baselib.itervalues()) self.ctx.eval('module = {}') self.ctx.eval(self.ctx.g.rs_repl_js, fname='repl.js') self.ctx.g.repl_options = { 'baselib': baselib, 'show_js': self.show_js, 'histfile': False, 'input': True, 'output': True, 'ps1': self.ps1, 'ps2': self.ps2, 'terminal': self.output.isatty, 'enum_global': 'Object.keys(this)', 'lib_path': self.libdir or os.path.dirname( P(COMPILER_PATH )) # TODO: Change this to load pyj files from the src code }