swh:1:snp:3af1a03cd091600016317ad7197cfc7dfd1319c7
Raw File
Tip revision: 8f67f41233c7a10d79cd9dc8e221fb1adda20a46 authored by Andreas Stuhlmüller on 21 October 2016, 20:37:42 UTC
0.9.5
Tip revision: 8f67f41
browser.js
// Entry point for browserify.

'use strict';

var _ = require('underscore');
var fs = require('fs');
var esprima = require('esprima');
var escodegen = require('escodegen');
var webppl = require('./main');
var optimize = require('./transforms/optimize').optimize;
var naming = require('./transforms/naming').naming;
var thunkify = require('./syntax').thunkify;
var cps = require('./transforms/cps').cps;
var errors = require('./errors/browser');
var util = require('./util');

// These are populated by the bundle.js browserify transform.
var version = '';
var packages = [];

var load = _.once(function() {
  // Load JS and headers from packages.
  packages.forEach(function(pkg) {
    if (pkg.js) { global[pkg.js.identifier] = pkg.js.path; }
    pkg.headers.forEach(webppl.requireHeaderWrapper);
  });
  var bundles = webppl.parsePackageCode(packages);
  return bundles;
});

function prepare(codeAndAssets, k, options) {
  options = util.mergeDefaults(options, {
    filename: 'webppl:program',
    errorHandlers: []
  });
  var extraHandlers = options.debug ? [errors.debugHandler(options.filename)] : [];
  options.errorHandlers = extraHandlers.concat(options.errorHandlers);
  return webppl.prepare(codeAndAssets, k, options);
}

function run(code, k, options) {
  var codeAndAssets = compile(code, options);
  prepare(codeAndAssets, k, options).run();
}

function compile(code, options) {
  options = options || {};
  var optionsExtended = _.extend({bundles: load()}, options);
  return webppl.compile(code, optionsExtended);
}

function webpplCPS(code) {
  var programAst = esprima.parse(code);
  var newProgramAst = optimize(cps(thunkify(programAst)));
  return escodegen.generate(newProgramAst);
}

function webpplNaming(code) {
  var programAst = esprima.parse(code);
  var newProgramAst = naming(thunkify(programAst)).ast;
  return escodegen.generate(newProgramAst);
}

global.webppl = {
  prepare: prepare,
  run: run,
  compile: compile,
  cps: webpplCPS,
  naming: webpplNaming,
  version: version,
  packages: packages
};
back to top