79 lines
2.4 KiB
JavaScript
79 lines
2.4 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2006, The Dojo Foundation
|
|
All Rights Reserved.
|
|
|
|
Licensed under the Academic Free License version 2.1 or above OR the
|
|
modified BSD license. For more information on Dojo licensing, see:
|
|
|
|
http://dojotoolkit.org/community/licensing.shtml
|
|
*/
|
|
|
|
/*
|
|
* SpiderMonkey host environment
|
|
*/
|
|
|
|
dojo.hostenv.name_ = 'spidermonkey';
|
|
|
|
dojo.hostenv.println = print;
|
|
dojo.hostenv.exit = function(exitcode){
|
|
quit(exitcode);
|
|
}
|
|
|
|
// version() returns 0, sigh. and build() returns nothing but just prints.
|
|
dojo.hostenv.getVersion = function(){ return version(); }
|
|
|
|
// make jsc shut up (so we can use jsc for sanity checking)
|
|
/*@cc_on
|
|
@if (@_jscript_version >= 7)
|
|
var line2pc; var print; var load; var quit;
|
|
@end
|
|
@*/
|
|
|
|
if(typeof line2pc == 'undefined'){
|
|
dojo.raise("attempt to use SpiderMonkey host environment when no 'line2pc' global");
|
|
}
|
|
|
|
/*
|
|
* This is a hack that determines the current script file by parsing a generated
|
|
* stack trace (relying on the non-standard "stack" member variable of the
|
|
* SpiderMonkey Error object).
|
|
* If param depth is passed in, it'll return the script file which is that far down
|
|
* the stack, but that does require that you know how deep your stack is when you are
|
|
* calling.
|
|
*/
|
|
function dj_spidermonkey_current_file(depth){
|
|
var s = '';
|
|
try{
|
|
throw Error("whatever");
|
|
}catch(e){
|
|
s = e.stack;
|
|
}
|
|
// lines are like: bu_getCurrentScriptURI_spidermonkey("ScriptLoader.js")@burst/Runtime.js:101
|
|
var matches = s.match(/[^@]*\.js/gi);
|
|
if(!matches){
|
|
dojo.raise("could not parse stack string: '" + s + "'");
|
|
}
|
|
var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1];
|
|
if(!fname){
|
|
dojo.raise("could not find file name in stack string '" + s + "'");
|
|
}
|
|
//print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'");
|
|
return fname;
|
|
}
|
|
|
|
// call this now because later we may not be on the top of the stack
|
|
if(!dojo.hostenv.library_script_uri_){
|
|
dojo.hostenv.library_script_uri_ = dj_spidermonkey_current_file(0);
|
|
}
|
|
|
|
dojo.hostenv.loadUri = function(uri){
|
|
// spidermonkey load() evaluates the contents into the global scope (which
|
|
// is what we want).
|
|
// TODO: sigh, load() does not return a useful value.
|
|
// Perhaps it is returning the value of the last thing evaluated?
|
|
var ok = load(uri);
|
|
// dojo.debug("spidermonkey load(", uri, ") returned ", ok);
|
|
return 1;
|
|
}
|
|
|
|
|