lookingGlass: Stop using eval()

Its use is not only strongly discouraged[0], we also rely on it injecting
variables into the global scope to get command-line-like behavior. That
behavior is incompatible with strict mode[1], and in extension with ES6
classes (which imply strict mode).

So to prepare for porting to ES6 classes, replace it with a somewhat less
evil construct that is compatible with strict mode.

[0] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Do_not_ever_use_eval!
[1]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode#Simplifying_variable_uses

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/350
This commit is contained in:
Florian Müllner 2018-11-30 16:57:47 +01:00 committed by Florian Müllner
parent 97963a1ca8
commit 467b7c1bca

View File

@ -1003,11 +1003,14 @@ var LookingGlass = new Lang.Class({
_evaluate(command) { _evaluate(command) {
this._history.addItem(command); this._history.addItem(command);
let fullCmd = commandHeader + command; let lines = command.split(';');
lines.push(`return ${lines.pop()}`);
let fullCmd = commandHeader + lines.join(';');
let resultObj; let resultObj;
try { try {
resultObj = eval(fullCmd); resultObj = Function(fullCmd)();
} catch (e) { } catch (e) {
resultObj = '<exception ' + e + '>'; resultObj = '<exception ' + e + '>';
} }