FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
node/lib/vm.js at master · anchnk/node · GitHub
anchnk
/
node
Public
forked from
nodejs/node
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
node
/
lib
/
vm.js
Copy path
More file actions
More file actions
Latest commit
History
History
History
128 lines (109 loc) · 4.17 KB
Breadcrumbs
node
/
lib
/
vm.js
Copy path
File metadata and controls
128 lines (109 loc) · 4.17 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict'
;
const
binding
=
process
.
binding
(
'contextify'
)
;
const
Script
=
binding
.
ContextifyScript
;
// The binding provides a few useful primitives:
// - Script(code, { filename = "evalmachine.anonymous",
// displayErrors
= true
} = {})
// with methods:
// - runInThisContext({ displayErrors = true } = {})
// - runInContext(sandbox, { displayErrors = true, timeout = undefined } = {})
// - makeContext(sandbox)
// - isContext(sandbox)
// From this we build the entire documented API.
const
realRunInThisContext
=
Script
.
prototype
.
runInThisContext
;
const
realRunInContext
=
Script
.
prototype
.
runInContext
;
Script
.
prototype
.
runInThisContext
=
function
(
options
)
{
if
(
options
&&
options
.
breakOnSigint
&&
process
.
_events
.
SIGINT
)
{
return
sigintHandlersWrap
(
realRunInThisContext
,
this
,
[
options
]
)
;
}
else
{
return
realRunInThisContext
.
call
(
this
,
options
)
;
}
}
;
Script
.
prototype
.
runInContext
=
function
(
contextifiedSandbox
,
options
)
{
if
(
options
&&
options
.
breakOnSigint
&&
process
.
_events
.
SIGINT
)
{
return
sigintHandlersWrap
(
realRunInContext
,
this
,
[
contextifiedSandbox
,
options
]
)
;
}
else
{
return
realRunInContext
.
call
(
this
,
contextifiedSandbox
,
options
)
;
}
}
;
Script
.
prototype
.
runInNewContext
=
function
(
sandbox
,
options
)
{
var
context
=
createContext
(
sandbox
)
;
return
this
.
runInContext
(
context
,
options
)
;
}
;
function
createContext
(
sandbox
)
{
if
(
sandbox
===
undefined
)
{
sandbox
=
{
}
;
}
else
if
(
binding
.
isContext
(
sandbox
)
)
{
return
sandbox
;
}
binding
.
makeContext
(
sandbox
)
;
return
sandbox
;
}
function
createScript
(
code
,
options
)
{
return
new
Script
(
code
,
options
)
;
}
// Remove all SIGINT listeners and re-attach them after the wrapped function
// has executed, so that caught SIGINT are handled by the listeners again.
function
sigintHandlersWrap
(
fn
,
thisArg
,
argsArray
)
{
// Using the internal list here to make sure `.once()` wrappers are used,
// not the original ones.
let
sigintListeners
=
process
.
_events
.
SIGINT
;
if
(
Array
.
isArray
(
sigintListeners
)
)
sigintListeners
=
sigintListeners
.
slice
(
)
;
else
sigintListeners
=
[
sigintListeners
]
;
process
.
removeAllListeners
(
'SIGINT'
)
;
try
{
return
fn
.
apply
(
thisArg
,
argsArray
)
;
}
finally
{
// Add using the public methods so that the `newListener` handler of
// process can re-attach the listeners.
for
(
const
listener
of
sigintListeners
)
{
process
.
addListener
(
'SIGINT'
,
listener
)
;
}
}
}
function
runInDebugContext
(
code
)
{
return
binding
.
runInDebugContext
(
code
)
;
}
function
runInContext
(
code
,
contextifiedSandbox
,
options
)
{
return
createScript
(
code
,
options
)
.
runInContext
(
contextifiedSandbox
,
options
)
;
}
function
runInNewContext
(
code
,
sandbox
,
options
)
{
return
createScript
(
code
,
options
)
.
runInNewContext
(
sandbox
,
options
)
;
}
function
runInThisContext
(
code
,
options
)
{
return
createScript
(
code
,
options
)
.
runInThisContext
(
options
)
;
}
module
.
exports
=
{
Script
,
createContext
,
createScript
,
runInDebugContext
,
runInContext
,
runInNewContext
,
runInThisContext
,
isContext
:
binding
.
isContext
}
;
Back
|
FazBrowse Home
|
New Git URL