Allow .js preference files to set locked prefs with lockPref()
authorMike Hommey <glandium@debian.org>
Sat, 21 Jun 2008 00:48:46 +0000 (02:48 +0200)
committerCarsten Schoenert <c.schoenert@t-online.de>
Thu, 3 Dec 2020 04:35:04 +0000 (04:35 +0000)
Gbp-Pq: Topic fixes
Gbp-Pq: Name Allow-.js-preference-files-to-set-locked-prefs-with-lockP.patch

modules/libpref/parser/src/lib.rs

index a8c5b6b317a6984f2cd008e047edefab42883c77..aceacf3159ea1aa8fd6298b98cb7bfde8803f218 100644 (file)
@@ -10,7 +10,7 @@
 //!
 //! <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-name>   = <string-literal>
 //! <pref-value>  = <string-literal> | "true" | "false" | <int-value>
@@ -169,6 +169,7 @@ enum Token {
     // Keywords
     Pref,       // pref
     StickyPref, // sticky_pref
+    LockPref,   // lockPref
     UserPref,   // user_pref
     True,       // true
     False,      // false
@@ -291,7 +292,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 +322,10 @@ const KEYWORD_INFOS: [KeywordInfo; 7] = [
         string: b"sticky_pref",
         token: Token::StickyPref,
     },
+    KeywordInfo {
+        string: b"lock_pref",
+        token: Token::LockPref,
+    },
 ];
 
 struct Parser<'t> {
@@ -373,14 +378,11 @@ 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 {
-                Token::Pref if self.kind == PrefValueKind::Default => {
-                    (PrefValueKind::Default, false)
-                }
-                Token::StickyPref if self.kind == PrefValueKind::Default => {
-                    (PrefValueKind::Default, true)
-                }
-                Token::UserPref => (PrefValueKind::User, false),
+            let (pref_value_kind, mut is_sticky, mut is_locked) = match token {
+                Token::Pref => (PrefValueKind::Default, false, false),
+                Token::StickyPref => (PrefValueKind::Default, true, 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 +492,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 {