Esempio n. 1
0
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')
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
 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
     }