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)
committerMike Hommey <glandium@debian.org>
Fri, 3 Apr 2020 21:41:17 +0000 (22:41 +0100)
Gbp-Pq: Topic fixes
Gbp-Pq: Name Allow-.js-preference-files-to-set-locked-prefs-with-.patch

modules/libpref/parser/src/lib.rs

index ca253e2b019042d7600fe3a11e1e6702e75c58e8..35bdaed67491400a0d67ecccf4296aa9adda7756 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"
+//! <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>
@@ -153,6 +153,7 @@ enum Token {
     // Keywords
     Pref,       // pref
     StickyPref, // sticky_pref
+    LockPref,   // lockPref
     UserPref,   // user_pref
     True,       // true
     False,      // false
@@ -273,7 +274,7 @@ struct KeywordInfo {
   token: Token,
 }
 
-const KEYWORD_INFOS: [KeywordInfo; 7] = [
+const KEYWORD_INFOS: [KeywordInfo; 8] = [
   // These are ordered by frequency.
   KeywordInfo { string: b"pref",        token: Token::Pref },
   KeywordInfo { string: b"true",        token: Token::True },
@@ -282,6 +283,7 @@ const KEYWORD_INFOS: [KeywordInfo; 7] = [
   KeywordInfo { string: b"sticky",      token: Token::Sticky },
   KeywordInfo { string: b"locked",      token: Token::Locked },
   KeywordInfo { string: b"sticky_pref", token: Token::StickyPref },
+  KeywordInfo { string: b"lockPref",    token: Token::LockPref },
 ];
 
 struct Parser<'t> {
@@ -329,10 +331,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 => (PrefValueKind::Default, false),
-                Token::StickyPref => (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(
@@ -431,7 +434,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 {