[gnome-shell] jsParse: Unnest functions
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] jsParse: Unnest functions
- Date: Mon, 11 Nov 2019 20:53:54 +0000 (UTC)
commit bef50431356c75813d4c9738aa464543990dd67c
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Aug 20 02:24:28 2019 +0200
jsParse: Unnest functions
Nesting functions can be helpful for private helper functions, but
here they are accessing some variables from the outer scope and
shadowing others. Split them out to avoid any ambiguity.
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/805
js/misc/jsParse.js | 69 +++++++++++++++++++++++++++---------------------------
1 file changed, 35 insertions(+), 34 deletions(-)
---
diff --git a/js/misc/jsParse.js b/js/misc/jsParse.js
index 8cfff1659a..de8f66f82b 100644
--- a/js/misc/jsParse.js
+++ b/js/misc/jsParse.js
@@ -84,29 +84,28 @@ function findMatchingBrace(expr, offset) {
let closeBrace = expr.charAt(offset);
let openBrace = ({ ')': '(', ']': '[' })[closeBrace];
- function findTheBrace(expr, offset) {
- if (offset < 0) {
- return -1;
- }
+ return findTheBrace(expr, offset - 1, openBrace, closeBrace);
+}
- if (expr.charAt(offset) == openBrace) {
- return offset;
- }
- if (expr.charAt(offset).match(/['"]/)) {
- return findTheBrace(expr, findMatchingQuote(expr, offset) - 1);
- }
- if (expr.charAt(offset) == '/') {
- return findTheBrace(expr, findMatchingSlash(expr, offset) - 1);
- }
- if (expr.charAt(offset) == closeBrace) {
- return findTheBrace(expr, findTheBrace(expr, offset - 1) - 1);
- }
+function findTheBrace(expr, offset, ...braces) {
+ let [openBrace, closeBrace] = braces;
- return findTheBrace(expr, offset - 1);
+ if (offset < 0)
+ return -1;
- }
+ if (expr.charAt(offset) == openBrace)
+ return offset;
+
+ if (expr.charAt(offset).match(/['"]/))
+ return findTheBrace(expr, findMatchingQuote(expr, offset) - 1, ...braces);
+
+ if (expr.charAt(offset) == '/')
+ return findTheBrace(expr, findMatchingSlash(expr, offset) - 1, ...braces);
+
+ if (expr.charAt(offset) == closeBrace)
+ return findTheBrace(expr, findTheBrace(expr, offset - 1, ...braces) - 1, ...braces);
- return findTheBrace(expr, offset - 1);
+ return findTheBrace(expr, offset - 1, ...braces);
}
// Walk expr backwards from offset looking for the beginning of an
@@ -189,24 +188,26 @@ function getCommonPrefix(words) {
return word;
}
+// Remove any blocks that are quoted or are in a regex
+function removeLiterals(str) {
+ if (str.length == 0)
+ return '';
+
+ let currChar = str.charAt(str.length - 1);
+ if (currChar == '"' || currChar == '\'') {
+ return removeLiterals(
+ str.slice(0, findMatchingQuote(str, str.length - 1)));
+ } else if (currChar == '/') {
+ return removeLiterals(
+ str.slice(0, findMatchingSlash(str, str.length - 1)));
+ }
+
+ return removeLiterals(str.slice(0, str.length - 1)) + currChar;
+}
+
// Returns true if there is reason to think that eval(str)
// will modify the global scope
function isUnsafeExpression(str) {
- // Remove any blocks that are quoted or are in a regex
- function removeLiterals(str) {
- if (str.length == 0) {
- return '';
- }
-
- let currChar = str.charAt(str.length - 1);
- if (currChar == '"' || currChar == '\'') {
- return removeLiterals(str.slice(0, findMatchingQuote(str, str.length - 1)));
- } else if (currChar == '/') {
- return removeLiterals(str.slice(0, findMatchingSlash(str, str.length - 1)));
- }
-
- return removeLiterals(str.slice(0, str.length - 1)) + currChar;
- }
// Check for any sort of assignment
// The strategy used is dumb: remove any quotes
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]