| /* |
| 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; |
| } |
| |
| |