summaryrefslogtreecommitdiffstats
path: root/debian/patches/debian-hacks/Allow-.js-preference-files-to-set-locked-prefs-with-.patch
blob: 39908b6e81d3c475d3f77e37ac8fa5d49f634531 (plain)
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
From: Mike Hommey <glandium@debian.org>
Date: Sat, 21 Jun 2008 02:48:46 +0200
Subject: Allow .js preference files to set locked prefs with lockPref()

Upstream now supports locked prefs, but with a different syntax from
the syntax we had supported for a while.
---
 modules/libpref/parser/src/lib.rs | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/modules/libpref/parser/src/lib.rs b/modules/libpref/parser/src/lib.rs
index 3a0ad2c..c6e34be 100644
--- a/modules/libpref/parser/src/lib.rs
+++ b/modules/libpref/parser/src/lib.rs
@@ -11,8 +11,9 @@
 //! ```text
 //! <pref-file>   = <pref>*
 //! <pref>        = <pref-spec> "(" <pref-name> "," <pref-value> <pref-attrs> ")" ";"
-//! <pref-spec>   = "user_pref" | "pref" | "sticky_pref" // in default pref files
+//! <pref-spec>   = "user_pref" | "pref" | "sticky_pref" | "lockPref" // in default pref files
 //! <pref-spec>   = "user_pref"                          // in user pref files
+//! <pref-spec>   = "user_pref" | "pref" | "sticky_pref | lockPref"
 //! <pref-name>   = <string-literal>
 //! <pref-value>  = <string-literal> | "true" | "false" | <int-value>
 //! <int-value>   = <sign>? <int-literal>
@@ -169,6 +170,7 @@ enum Token {
     // Keywords
     Pref,       // pref
     StickyPref, // sticky_pref
+    LockPref,   // lockPref
     UserPref,   // user_pref
     True,       // true
     False,      // false
@@ -291,7 +293,7 @@ struct KeywordInfo {
     token: Token,
 }
 
-const KEYWORD_INFOS: [KeywordInfo; 7] = [
+const KEYWORD_INFOS: [KeywordInfo; 8] = [
     // These are ordered by frequency.
     KeywordInfo {
         string: b"pref",
@@ -321,6 +323,10 @@ const KEYWORD_INFOS: [KeywordInfo; 7] = [
         string: b"sticky_pref",
         token: Token::StickyPref,
     },
+    KeywordInfo {
+        string: b"lockPref",
+        token: Token::LockPref,
+    },
 ];
 
 struct Parser<'t> {
@@ -373,14 +379,15 @@ impl<'t> Parser<'t> {
         // this will be either the first token of a new pref, or EOF.
         loop {
             // <pref-spec>
-            let (pref_value_kind, mut is_sticky) = match token {
+            let (pref_value_kind, mut is_sticky, mut is_locked) = match token {
                 Token::Pref if self.kind == PrefValueKind::Default => {
-                    (PrefValueKind::Default, false)
+                    (PrefValueKind::Default, false, false)
                 }
                 Token::StickyPref if self.kind == PrefValueKind::Default => {
-                    (PrefValueKind::Default, true)
+                    (PrefValueKind::Default, true, false)
                 }
-                Token::UserPref => (PrefValueKind::User, false),
+                Token::LockPref => (PrefValueKind::Default, false, true),
+                Token::UserPref => (PrefValueKind::User, false, false),
                 Token::SingleChar(EOF) => return !self.has_errors,
                 _ => {
                     token = self.error_and_recover(
@@ -490,7 +497,6 @@ impl<'t> Parser<'t> {
             };
 
             // ("," <pref-attr>)*   // default pref files only
-            let mut is_locked = false;
             let mut has_attrs = false;
             if self.kind == PrefValueKind::Default {
                 let ok = loop {