yzt
2023-05-26 2f70f6727314edd84d8ec2bfe3ce832803f1ea77
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// TODO: this file needs to be converted to the v1.7 loader
 
// module:
//      configSpidermonkey
// summary:
//       SpiderMonkey host environment
 
if(dojo.config["baseUrl"]){
    dojo.baseUrl = dojo.config["baseUrl"];
}else{
    dojo.baseUrl = "./";
}
 
dojo._name = 'spidermonkey';
 
 
 
dojo.isSpidermonkey = true;
dojo.exit = function(exitcode){
    quit(exitcode);
};
 
if(typeof print == "function"){
    console.debug = print;
}
 
if(typeof line2pc == 'undefined'){
    throw new Error("attempt to use SpiderMonkey host environment when no 'line2pc' global");
}
 
dojo._spidermonkeyCurrentFile = function(depth){
    //
    //  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.
    //
    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){
        throw Error("could not parse stack string: '" + s + "'");
    }
    var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1];
    if(!fname){
        throw Error("could not find file name in stack string '" + s + "'");
    }
    //print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'");
    return fname;
};
 
// print(dojo._spidermonkeyCurrentFile(0));
 
dojo._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);
    // console.log("spidermonkey load(", uri, ") returned ", ok);
    return 1;
};
 
//Register any module paths set up in djConfig. Need to do this
//in the hostenvs since hostenv_browser can read djConfig from a
//script tag's attribute.
if(dojo.config["modulePaths"]){
    for(var param in dojo.config["modulePaths"]){
        dojo.registerModulePath(param, dojo.config["modulePaths"][param]);
    }
}