blob: 2ecdee2189a5d33ed8eeec7505fbaae518f62ae0 (
plain)
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
//#OPTIONS: CPP
/* platform-specific setup */
/*
if browser mode is active (GHCJS_BROWSER is defined), all the runtime platform
detection code should be removed by the preprocessor. The h$isPlatform variables
are undeclared.
in non-browser mode, use h$isNode, h$isJsShell, h$isBrowser to find the current
platform.
more platforms should be added here in the future
*/
#ifndef GHCJS_BROWSER
var h$isNode_ = false; // runtime is node.js
var h$isJvm_ = false; // runtime is JVM
var h$isJsShell_ = false; // runtime is SpiderMonkey jsshell
var h$isJsCore_ = false; // runtime is JavaScriptCore jsc
var h$isBrowser_ = false; // running in browser or everything else
var h$isGHCJSi_ = false; // Code is GHCJSi (browser or node)
function h$isNode() {
return h$isNode_;
}
function h$isJvm() {
return h$isJvm_;
}
function h$isJsShell() {
return h$isJsShell_;
}
function h$isJsCore() {
return h$isJsCore_;
}
function h$isBrowser() {
return h$isBrowser_;
}
function h$isGHCJSi() {
return h$isGHCJSi_;
}
// load all required node.js modules
if(typeof process !== 'undefined' && (typeof h$TH !== 'undefined' || (typeof require !== 'undefined' && typeof module !== 'undefined' && module.exports))) {
h$isNode_ = true;
// we have to use these names for the closure compiler externs to work
var fs = require('fs');
var path = require('path');
var os = require('os');
var child_process = require('child_process');
var h$fs = fs;
var h$path = path;
var h$os = os;
var h$child = child_process;
var h$process = process;
function h$getProcessConstants() {
// this is a non-public API, but we need these values for things like file access modes
var cs = process['binding']('constants');
if(typeof cs.os === 'object' && typeof cs.fs === 'object') {
return cs;
} else {
// earlier node.js versions (4.x and older) have all constants directly in the constants object
// construct something that resembles the hierarchy of the object in new versions:
return { 'fs': cs
, 'crypto': cs
, 'os': { 'UV_UDP_REUSEADDR': cs['UV_UDP_REUSEADDR']
, 'errno': cs
, 'signals': cs
}
};
}
}
var h$processConstants = h$getProcessConstants();
} else if(typeof Java !== 'undefined') {
h$isJvm_ = true;
this.console = {
log: function(s) {
java.lang.System.out.print(s);
}
};
} else if(typeof snarf !== 'undefined' && typeof print !== 'undefined' && typeof quit !== 'undefined') {
h$isJsShell_ = true;
this.console = { log: this.print };
} else if(typeof numberOfDFGCompiles !== 'undefined' && typeof jscStack !== 'undefined') {
h$isJsCore_ = true;
} else {
h$isBrowser_ = true;
}
if(typeof global !== 'undefined' && global.h$GHCJSi) {
h$isGHCJSi_ = true;
}
#endif
function h$getGlobal(that) {
if(typeof global !== 'undefined') return global;
return that;
}
#ifdef GHCJS_BROWSER
// IE 8 doesn't support Date.now(), shim it
if (!Date.now) {
Date.now = function now() {
return +(new Date);
};
}
#endif
|