Skip to content

Commit b29c3a8

Browse files
committed
added Symbols in ES6
1 parent 659e15b commit b29c3a8

3 files changed

Lines changed: 215 additions & 2 deletions

File tree

v4-cokapi/backends/javascript/jslogger.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
JS logger backend for Online Python Tutor runtime visualizer
44
55
First version created on: 2015-01-02 by Philip Guo
6-
- originally made for Node v0.10.25 (Jan 2015)
7-
- on 2016-05-01, ported over to also work on Node v6.0.0
6+
- originally made for Node v0.10.25, which supports ES5 (Jan 2015)
7+
- on 2016-05-01, ported over to also work on Node v6.0.0, which supports ES6
88
99
Run as:
1010
node --expose-debug-as=Debug jslogger.js
@@ -300,6 +300,9 @@ function encodeObject(o) {
300300
return o;
301301
} else if (_.isBoolean(o) || _.isNull(o) || _.isUndefined(o)) {
302302
return ['JS_SPECIAL_VAL', String(o)];
303+
} else if (typeof o === 'symbol') {
304+
// ES6 symbol
305+
return ['JS_SPECIAL_VAL', String(o)];
303306
} else {
304307
// render these as heap objects
305308

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
{ code: '// adapted from http://es6-features.org/#SymbolType\nvar x = Symbol("xxx")\nvar y = Symbol("yyy");\nconsole.log(x !== y);\nconst foo = Symbol(\'foo\');\nconst bar = Symbol(\'bar\');\nconsole.log(typeof foo === "symbol");\nconsole.log(typeof bar === "symbol");\nlet obj = {};\nobj[foo] = "foo";\nobj[bar] = "bar";\nconsole.log(JSON.stringify(obj)); // {}\nconsole.log(Object.keys(obj)); // []\nconsole.log(Object.getOwnPropertyNames(obj)); // []\nconsole.log(Object.getOwnPropertySymbols(obj)); // [ foo, bar ]',
2+
trace:
3+
[ { stdout: '',
4+
func_name: '',
5+
stack_to_render: [],
6+
globals:
7+
{ x: [ 'JS_SPECIAL_VAL', 'undefined' ],
8+
y: [ 'JS_SPECIAL_VAL', 'undefined' ] },
9+
ordered_globals: [ 'x', 'y' ],
10+
line: 2,
11+
col: 0,
12+
event: 'step_line',
13+
heap: {} },
14+
{ stdout: '',
15+
func_name: '',
16+
stack_to_render: [],
17+
globals:
18+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
19+
y: [ 'JS_SPECIAL_VAL', 'undefined' ] },
20+
ordered_globals: [ 'x', 'y' ],
21+
line: 3,
22+
col: 0,
23+
event: 'step_line',
24+
heap: {} },
25+
{ stdout: '',
26+
func_name: '',
27+
stack_to_render: [],
28+
globals:
29+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
30+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ] },
31+
ordered_globals: [ 'x', 'y' ],
32+
line: 4,
33+
col: 0,
34+
event: 'step_line',
35+
heap: {} },
36+
{ stdout: 'true\n',
37+
func_name: '',
38+
stack_to_render: [],
39+
globals:
40+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
41+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ] },
42+
ordered_globals: [ 'x', 'y' ],
43+
line: 5,
44+
col: 0,
45+
event: 'step_line',
46+
heap: {} },
47+
{ stdout: 'true\n',
48+
func_name: '',
49+
stack_to_render: [],
50+
globals:
51+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
52+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
53+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ] },
54+
ordered_globals: [ 'x', 'y', 'foo' ],
55+
line: 6,
56+
col: 0,
57+
event: 'step_line',
58+
heap: {} },
59+
{ stdout: 'true\n',
60+
func_name: '',
61+
stack_to_render: [],
62+
globals:
63+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
64+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
65+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
66+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ] },
67+
ordered_globals: [ 'x', 'y', 'foo', 'bar' ],
68+
line: 7,
69+
col: 0,
70+
event: 'step_line',
71+
heap: {} },
72+
{ stdout: 'true\ntrue\n',
73+
func_name: '',
74+
stack_to_render: [],
75+
globals:
76+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
77+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
78+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
79+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ] },
80+
ordered_globals: [ 'x', 'y', 'foo', 'bar' ],
81+
line: 8,
82+
col: 0,
83+
event: 'step_line',
84+
heap: {} },
85+
{ stdout: 'true\ntrue\ntrue\n',
86+
func_name: '',
87+
stack_to_render: [],
88+
globals:
89+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
90+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
91+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
92+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ] },
93+
ordered_globals: [ 'x', 'y', 'foo', 'bar' ],
94+
line: 9,
95+
col: 0,
96+
event: 'step_line',
97+
heap: {} },
98+
{ stdout: 'true\ntrue\ntrue\n',
99+
func_name: '',
100+
stack_to_render: [],
101+
globals:
102+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
103+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
104+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
105+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ],
106+
obj: [ 'REF', 1 ] },
107+
ordered_globals: [ 'x', 'y', 'foo', 'bar', 'obj' ],
108+
line: 10,
109+
col: 0,
110+
event: 'step_line',
111+
heap: { '1': [ 'INSTANCE', '' ] } },
112+
{ stdout: 'true\ntrue\ntrue\n',
113+
func_name: '',
114+
stack_to_render: [],
115+
globals:
116+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
117+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
118+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
119+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ],
120+
obj: [ 'REF', 1 ] },
121+
ordered_globals: [ 'x', 'y', 'foo', 'bar', 'obj' ],
122+
line: 11,
123+
col: 0,
124+
event: 'step_line',
125+
heap: { '1': [ 'INSTANCE', '' ] } },
126+
{ stdout: 'true\ntrue\ntrue\n',
127+
func_name: '',
128+
stack_to_render: [],
129+
globals:
130+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
131+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
132+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
133+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ],
134+
obj: [ 'REF', 1 ] },
135+
ordered_globals: [ 'x', 'y', 'foo', 'bar', 'obj' ],
136+
line: 12,
137+
col: 0,
138+
event: 'step_line',
139+
heap: { '1': [ 'INSTANCE', '' ] } },
140+
{ stdout: 'true\ntrue\ntrue\n{}\n',
141+
func_name: '',
142+
stack_to_render: [],
143+
globals:
144+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
145+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
146+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
147+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ],
148+
obj: [ 'REF', 1 ] },
149+
ordered_globals: [ 'x', 'y', 'foo', 'bar', 'obj' ],
150+
line: 13,
151+
col: 0,
152+
event: 'step_line',
153+
heap: { '1': [ 'INSTANCE', '' ] } },
154+
{ stdout: 'true\ntrue\ntrue\n{}\n[]\n',
155+
func_name: '',
156+
stack_to_render: [],
157+
globals:
158+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
159+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
160+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
161+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ],
162+
obj: [ 'REF', 1 ] },
163+
ordered_globals: [ 'x', 'y', 'foo', 'bar', 'obj' ],
164+
line: 14,
165+
col: 0,
166+
event: 'step_line',
167+
heap: { '1': [ 'INSTANCE', '' ] } },
168+
{ stdout: 'true\ntrue\ntrue\n{}\n[]\n[ \'smallObjId_hidden_\' ]\n',
169+
func_name: '',
170+
stack_to_render: [],
171+
globals:
172+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
173+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
174+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
175+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ],
176+
obj: [ 'REF', 1 ] },
177+
ordered_globals: [ 'x', 'y', 'foo', 'bar', 'obj' ],
178+
line: 15,
179+
col: 0,
180+
event: 'step_line',
181+
heap: { '1': [ 'INSTANCE', '' ] } },
182+
{ stdout: 'true\ntrue\ntrue\n{}\n[]\n[ \'smallObjId_hidden_\' ]\n[ Symbol(foo), Symbol(bar) ]\n',
183+
func_name: '',
184+
stack_to_render: [],
185+
globals:
186+
{ x: [ 'JS_SPECIAL_VAL', 'Symbol(xxx)' ],
187+
y: [ 'JS_SPECIAL_VAL', 'Symbol(yyy)' ],
188+
foo: [ 'JS_SPECIAL_VAL', 'Symbol(foo)' ],
189+
bar: [ 'JS_SPECIAL_VAL', 'Symbol(bar)' ],
190+
obj: [ 'REF', 1 ] },
191+
ordered_globals: [ 'x', 'y', 'foo', 'bar', 'obj' ],
192+
line: 15,
193+
col: 63,
194+
event: 'step_line',
195+
heap: { '1': [ 'INSTANCE', '' ] } } ] }
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// adapted from http://es6-features.org/#SymbolType
2+
var x = Symbol("xxx")
3+
var y = Symbol("yyy");
4+
console.log(x !== y);
5+
const foo = Symbol('foo');
6+
const bar = Symbol('bar');
7+
console.log(typeof foo === "symbol");
8+
console.log(typeof bar === "symbol");
9+
let obj = {};
10+
obj[foo] = "foo";
11+
obj[bar] = "bar";
12+
console.log(JSON.stringify(obj)); // {}
13+
console.log(Object.keys(obj)); // []
14+
console.log(Object.getOwnPropertyNames(obj)); // []
15+
console.log(Object.getOwnPropertySymbols(obj)); // [ foo, bar ]

0 commit comments

Comments
 (0)