From 2e1d6f24121b329909a77bc354ffd668bd76f009 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Tue, 19 Jan 2010 15:26:18 -0800 Subject: [PATCH] Migrate to use INTERPRETER.Context --- Tools/press/main.j | 13 +++--- Tools/press/objj-analysis-tools.j | 71 +++++++++++-------------------- 2 files changed, 31 insertions(+), 53 deletions(-) diff --git a/Tools/press/main.j b/Tools/press/main.j index 2b9e57f13..f92270a50 100644 --- a/Tools/press/main.j +++ b/Tools/press/main.j @@ -13,6 +13,7 @@ var ARGS = require("args"); var FILE = require("file"); var OS = require("os"); var DOM = require("browser/dom"); +var INTERPRETER = require("interpreter"); var serializer = new DOM.XMLSerializer(); @@ -148,8 +149,8 @@ function pressEnvironment(rootPath, outputFiles, environment, options) { CPLog.info("Environment: " + environment); // get a Rhino context - var ctx = Packages.org.mozilla.javascript.Context.getCurrentContext(); - var scope = makeObjjScope(ctx); // "scope" is the same as require("objective-j").window; + var context = new INTERPRETER.Context(); + var scope = setupObjectiveJ(context); scope.OBJJ_INCLUDE_PATHS = frameworks; scope.OBJJ_ENVIRONMENTS = [environment, "ObjJ"]; @@ -178,11 +179,9 @@ function pressEnvironment(rootPath, outputFiles, environment, options) { exectuableResponses.push(aResponse); }); - var context = { - ctx : ctx, - scope : scope, - rootPath : rootPath - }; + // lets just use the Context object as our con + context.rootPath = rootPath; + context.scope = scope; // phase 1: get global defines CPLog.error("PHASE 1: Loading application..."); diff --git a/Tools/press/objj-analysis-tools.j b/Tools/press/objj-analysis-tools.j index 4dec8c8c5..344148bc8 100644 --- a/Tools/press/objj-analysis-tools.j +++ b/Tools/press/objj-analysis-tools.j @@ -2,8 +2,7 @@ var FILE = require("file"); /* param context includes - scope: a global variable containing objj_files hash - ctx: js context + scope: the objective-j scope dependencies: hash mapping from paths to an array of global variables defined by that file [importCallback]: callback function that is called for each imported file (takes importing file path, and imported file path parameters) [referencedCallback]: callback function that is called for each referenced file (takes referencing file path, referenced file path parameters, and list of tokens) @@ -267,27 +266,27 @@ function findGlobalDefines(context, mainPath, evaledFragments, bundleCallback) var bundleDelegate = [[PressBundleDelgate alloc] initWithCallback:bundleCallback]; var bundlePaths = []; - runWithScope(context, function(mainPath, bundleDelegate, bundlePaths) { - // ************************************************** - objj_import(mainPath, true, function() { - print("bundleDelegate="+bundleDelegate) - [bundleDelegate bundleDidFinishLoading:"foo"]; + (context.eval("("+(function(mainPath, bundleDelegate, bundlePaths) { + with (require("objective-j").window) { + objj_import(mainPath, true, function() { + bundlePaths = bundlePaths || []; - bundlePaths = bundlePaths || []; + // load default theme bundle + var themePath = [[CPBundle bundleForClass:[CPApplication class]] pathForResource:[CPApplication defaultThemeName]]; + var themeBundle = [[CPBundle alloc] initWithPath:themePath + "/Info.plist"]; + [themeBundle loadWithDelegate:bundleDelegate]; - // load default theme bundle - var themePath = [[CPBundle bundleForClass:[CPApplication class]] pathForResource:[CPApplication defaultThemeName]]; - var themeBundle = [[CPBundle alloc] initWithPath:themePath + "/Info.plist"]; - [themeBundle loadWithDelegate:bundleDelegate]; + // load additional bundles + bundlePaths.forEach(function(bundlePath) { + var bundle = [[CPBundle alloc] initWithPath:bundlePath]; + [bundle loadWithDelegate:bundleDelegate]; + }); + }); + } + })+")"))(mainPath, bundleDelegate, bundlePaths); - // load additional bundles - bundlePaths.forEach(function(bundlePath) { - var bundle = [[CPBundle alloc] initWithPath:bundlePath]; - [bundle loadWithDelegate:bundleDelegate]; - }) - }); - // ************************************************** - }, [mainPath, bundleDelegate, bundlePaths]); + // run the "event loop" + context.scope.require('browser/timeout').serviceTimeouts(); return dependencies; } @@ -314,26 +313,18 @@ function coalesceGlobalDefines(globals) } // create a new scope loaded with Narwhal and Objective-J -function makeObjjScope(ctx, debug) +function setupObjectiveJ(context, debug) { - // init standard JS scope objects - var scope = ctx.initStandardObjects(); - // set these properties required for Narwhal bootstrapping - scope.NARWHAL_HOME = system.prefix; - scope.NARWHAL_ENGINE_HOME = FILE.join(system.prefix, "engines", "rhino"); + context.global.NARWHAL_HOME = system.prefix; + context.global.NARWHAL_ENGINE_HOME = FILE.join(system.prefix, "engines", "rhino"); // load the bootstrap.js for narwhal-rhino - var bootstrapPath = FILE.join(scope.NARWHAL_ENGINE_HOME, "bootstrap.js"); - ctx.evaluateReader(scope, - new Packages.java.io.FileReader(bootstrapPath), - "bootstrap.js", - 1, - null - ); + var bootstrapPath = FILE.join(context.global.NARWHAL_ENGINE_HOME, "bootstrap.js"); + context.evalFile(bootstrapPath); // get the Objective-J module from this scope, return the window object. - var OBJJ = scope.require("objective-j"); + var OBJJ = context.global.require("objective-j"); addMockBrowserEnvironment(OBJJ.window); @@ -367,18 +358,6 @@ function addMockBrowserEnvironment(scope) } } -// run a function within the given scope (func can be a function object if the source of the function is returned by toString() as it is by default) -function runWithScope(context, func, args) -{ - var functionInScope = context.ctx.compileFunction(context.scope, String(func), "", 1, null); - - var result = functionInScope.apply(context.scope, args); - - context.scope.require('browser/timeout').serviceTimeouts(); - - return result; -} - // does a shallow copy of an object. if onlyList is true, it sets each property to "true" instead of the actual value function cloneProperties(object, onlyList) {