forked from NeilFraser/JS-Interpreter
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.html
134 lines (123 loc) · 4.16 KB
/
index.html
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
129
130
131
132
133
134
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS-Interpreter Demo</title>
<link href="demos/style.css" rel="stylesheet" type="text/css">
<script>
// Depending on the URL argument, test the compressed or uncompressed version.
var compressed = (document.location.search == '?compressed')
, required = (document.location.search == '?required');
if (required) {
document.write('<scr'+'ipt src="lib/acorn.js"></scr'+'ipt>');
document.write('<scr'+'ipt src="lib/require.js"></scr'+'ipt>');
} else if (compressed) {
document.write('<scr'+'ipt src="dist/acorn_interpreter.js"></scr'+'ipt>');
} else {
document.write('<scr'+'ipt src="lib/acorn.js"></scr'+'ipt>');
document.write('<scr'+'ipt src="dist/interpreter.global.js"></scr'+'ipt>');
}
var myInterpreter;
function initAlert(interpreter, scope) {
var wrapper = function(text) {
return alert(arguments.length ? text : '');
};
interpreter.setProperty(scope, 'alert',
interpreter.createNativeFunction(wrapper));
};
function parseButton() {
var code = document.getElementById('code').value
if (typeof Interpreter === 'undefined') {
requirejs(['dist/interpreter'], function (Interpreter) {
myInterpreter = new Interpreter(code, initAlert);
disable('');
});
return;
}
myInterpreter = new Interpreter(code, initAlert);
disable('');
}
function stepButton() {
if (myInterpreter.stateStack.length) {
var node =
myInterpreter.stateStack[myInterpreter.stateStack.length - 1].node;
var start = node.start;
var end = node.end;
} else {
var start = 0;
var end = 0;
}
createSelection(start, end);
try {
var ok = myInterpreter.step();
} finally {
if (!ok) {
disable('disabled');
}
}
}
function runButton() {
disable('disabled');
myInterpreter.run();
}
function disable(disabled) {
document.getElementById('stepButton').disabled = disabled;
document.getElementById('runButton').disabled = disabled;
}
function createSelection(start, end) {
var field = document.getElementById('code')
if (field.createTextRange) {
var selRange = field.createTextRange();
selRange.collapse(true);
selRange.moveStart('character', start);
selRange.moveEnd('character', end);
selRange.select();
} else if (field.setSelectionRange) {
field.setSelectionRange(start, end);
} else if (field.selectionStart) {
field.selectionStart = start;
field.selectionEnd = end;
}
field.focus();
}
</script>
</head>
<body>
<h1>JS-Interpreter Demo</h1>
<p>Enter JavaScript code below, then click <em>Parse</em>. To execute, either
click <em>Step</em> repeatedly, or click <em>Run</em> once.
Open your browser's console for errors.</p>
<p><textarea id="code">
var result = [];
function fibonacci(n, output) {
var a = 1, b = 1, sum;
for (var i = 0; i < n; i++) {
output.push(a);
sum = a + b;
a = b;
b = sum;
}
}
fibonacci(16, result);
alert(result.join(', '));
</textarea><br>
<button onclick="parseButton()">Parse</button>
<button onclick="stepButton()" id="stepButton" disabled="disabled">Step</button>
<button onclick="runButton()" id="runButton" disabled="disabled">Run</button>
</p>
<p><small>
<script>
if (required) {
document.write('[ Running AMD bundled library dynamically loaded with RequireJS. Switch to <A HREF="?uncompressed">raw sources</A>. ]');
} else if (compressed) {
document.write('[ Running compressed bundle. Switch to <A HREF="?uncompressed">raw sources</A>. ]');
} else {
document.write('[ Running raw sources. Switch to <A HREF="?compressed">compressed bundle</A> or <A HREF="?required">dynamically loaded library</A>. ]');
}
disable('disabled');
</script>
</small></p>
<p>Read the <a href="docs.html">JS-Interpreter documentation</a>.</p>
<p>Get the <a href="https://github.com/arcatdmz/JS-Interpreter">source code</a>.</p>
</body>
</html>