public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/wschmidt/heads/builtins10)] rs6000: Add functions for matching types, part 2 of 3
@ 2021-06-25 16:15 William Schmidt
0 siblings, 0 replies; 6+ messages in thread
From: William Schmidt @ 2021-06-25 16:15 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:a8c3b8a294106d3f85bf4780f8deb58c64e252c6
commit a8c3b8a294106d3f85bf4780f8deb58c64e252c6
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date: Fri Apr 2 16:31:38 2021 -0500
rs6000: Add functions for matching types, part 2 of 3
2021-04-02 Bill Schmidt <wschmidt@linux.ibm.com>
gcc/
* config/rs6000/rs6000-gen-builtins.c (match_basetype): Implement.
Diff:
---
gcc/config/rs6000/rs6000-gen-builtins.c | 64 +++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 38363f034d3..f850ea86a39 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -386,6 +386,70 @@ handle_pointer (typeinfo *typedata)
static int
match_basetype (typeinfo *typedata)
{
+ consume_whitespace ();
+ int oldpos = pos;
+ char *token = match_identifier ();
+ if (!token)
+ {
+ (*diag) ("missing base type in return type at column %d\n", pos + 1);
+ return 0;
+ }
+
+ if (!strcmp (token, "char"))
+ typedata->base = BT_CHAR;
+ else if (!strcmp (token, "short"))
+ typedata->base = BT_SHORT;
+ else if (!strcmp (token, "int"))
+ typedata->base = BT_INT;
+ else if (!strcmp (token, "long"))
+ {
+ consume_whitespace ();
+ oldpos = pos;
+ char *mustbelongordbl = match_identifier ();
+ if (!mustbelongordbl)
+ typedata->base = BT_LONG;
+ else if (!strcmp (mustbelongordbl, "long"))
+ typedata->base = BT_LONGLONG;
+ else if (!strcmp (mustbelongordbl, "double"))
+ typedata->base = BT_LONGDOUBLE;
+ else
+ /* Speculatively accept "long" here and push back the token.
+ This occurs when "long" is a return type and the next token
+ is the function name. */
+ {
+ typedata->base = BT_LONG;
+ pos = oldpos;
+ }
+ }
+ else if (!strcmp (token, "float"))
+ typedata->base = BT_FLOAT;
+ else if (!strcmp (token, "double"))
+ typedata->base = BT_DOUBLE;
+ else if (!strcmp (token, "__int128"))
+ typedata->base = BT_INT128;
+ else if (!strcmp (token, "_Float128"))
+ typedata->base = BT_FLOAT128;
+ else if (!strcmp (token, "bool"))
+ typedata->base = BT_BOOL;
+ /* A "string" is a special "const char *" -- we need it because it
+ cannot match either signed or unsigned char *. */
+ else if (!strcmp (token, "string"))
+ typedata->base = BT_STRING;
+ else if (!strcmp (token, "_Decimal32"))
+ typedata->base = BT_DECIMAL32;
+ else if (!strcmp (token, "_Decimal64"))
+ typedata->base = BT_DECIMAL64;
+ else if (!strcmp (token, "_Decimal128"))
+ typedata->base = BT_DECIMAL128;
+ else if (!strcmp (token, "__ibm128"))
+ typedata->base = BT_IBM128;
+ else
+ {
+ (*diag) ("unrecognized base type at column %d\n", oldpos + 1);
+ return 0;
+ }
+
+ handle_pointer (typedata);
return 1;
}
^ permalink raw reply [flat|nested] 6+ messages in thread
* [gcc(refs/users/wschmidt/heads/builtins10)] rs6000: Add functions for matching types, part 2 of 3
@ 2021-06-15 17:16 William Schmidt
0 siblings, 0 replies; 6+ messages in thread
From: William Schmidt @ 2021-06-15 17:16 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:d1be2a9c59ebd8b453ec111271ecc3a65d166054
commit d1be2a9c59ebd8b453ec111271ecc3a65d166054
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date: Fri Apr 2 16:31:38 2021 -0500
rs6000: Add functions for matching types, part 2 of 3
2021-04-02 Bill Schmidt <wschmidt@linux.ibm.com>
gcc/
* config/rs6000/rs6000-gen-builtins.c (match_basetype): Implement.
Diff:
---
gcc/config/rs6000/rs6000-gen-builtins.c | 64 +++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 38363f034d3..f850ea86a39 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -386,6 +386,70 @@ handle_pointer (typeinfo *typedata)
static int
match_basetype (typeinfo *typedata)
{
+ consume_whitespace ();
+ int oldpos = pos;
+ char *token = match_identifier ();
+ if (!token)
+ {
+ (*diag) ("missing base type in return type at column %d\n", pos + 1);
+ return 0;
+ }
+
+ if (!strcmp (token, "char"))
+ typedata->base = BT_CHAR;
+ else if (!strcmp (token, "short"))
+ typedata->base = BT_SHORT;
+ else if (!strcmp (token, "int"))
+ typedata->base = BT_INT;
+ else if (!strcmp (token, "long"))
+ {
+ consume_whitespace ();
+ oldpos = pos;
+ char *mustbelongordbl = match_identifier ();
+ if (!mustbelongordbl)
+ typedata->base = BT_LONG;
+ else if (!strcmp (mustbelongordbl, "long"))
+ typedata->base = BT_LONGLONG;
+ else if (!strcmp (mustbelongordbl, "double"))
+ typedata->base = BT_LONGDOUBLE;
+ else
+ /* Speculatively accept "long" here and push back the token.
+ This occurs when "long" is a return type and the next token
+ is the function name. */
+ {
+ typedata->base = BT_LONG;
+ pos = oldpos;
+ }
+ }
+ else if (!strcmp (token, "float"))
+ typedata->base = BT_FLOAT;
+ else if (!strcmp (token, "double"))
+ typedata->base = BT_DOUBLE;
+ else if (!strcmp (token, "__int128"))
+ typedata->base = BT_INT128;
+ else if (!strcmp (token, "_Float128"))
+ typedata->base = BT_FLOAT128;
+ else if (!strcmp (token, "bool"))
+ typedata->base = BT_BOOL;
+ /* A "string" is a special "const char *" -- we need it because it
+ cannot match either signed or unsigned char *. */
+ else if (!strcmp (token, "string"))
+ typedata->base = BT_STRING;
+ else if (!strcmp (token, "_Decimal32"))
+ typedata->base = BT_DECIMAL32;
+ else if (!strcmp (token, "_Decimal64"))
+ typedata->base = BT_DECIMAL64;
+ else if (!strcmp (token, "_Decimal128"))
+ typedata->base = BT_DECIMAL128;
+ else if (!strcmp (token, "__ibm128"))
+ typedata->base = BT_IBM128;
+ else
+ {
+ (*diag) ("unrecognized base type at column %d\n", oldpos + 1);
+ return 0;
+ }
+
+ handle_pointer (typedata);
return 1;
}
^ permalink raw reply [flat|nested] 6+ messages in thread
* [gcc(refs/users/wschmidt/heads/builtins10)] rs6000: Add functions for matching types, part 2 of 3
@ 2021-04-26 20:48 William Schmidt
0 siblings, 0 replies; 6+ messages in thread
From: William Schmidt @ 2021-04-26 20:48 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:eaa651085191c2c955b8a2aedf3b7f0ad303e652
commit eaa651085191c2c955b8a2aedf3b7f0ad303e652
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date: Fri Apr 2 16:31:38 2021 -0500
rs6000: Add functions for matching types, part 2 of 3
2021-04-02 Bill Schmidt <wschmidt@linux.ibm.com>
gcc/
* config/rs6000/rs6000-gen-builtins.c (match_basetype): Implement.
Diff:
---
gcc/config/rs6000/rs6000-gen-builtins.c | 64 +++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index ac061d092e7..96e74e6048a 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -393,6 +393,70 @@ handle_pointer (typeinfo *typedata)
static int
match_basetype (typeinfo *typedata)
{
+ consume_whitespace ();
+ int oldpos = pos;
+ char *token = match_identifier ();
+ if (!token)
+ {
+ (*diag) ("missing base type in return type at column %d\n", pos + 1);
+ return 0;
+ }
+
+ if (!strcmp (token, "char"))
+ typedata->base = BT_CHAR;
+ else if (!strcmp (token, "short"))
+ typedata->base = BT_SHORT;
+ else if (!strcmp (token, "int"))
+ typedata->base = BT_INT;
+ else if (!strcmp (token, "long"))
+ {
+ consume_whitespace ();
+ oldpos = pos;
+ char *mustbelongordbl = match_identifier ();
+ if (!mustbelongordbl)
+ typedata->base = BT_LONG;
+ else if (!strcmp (mustbelongordbl, "long"))
+ typedata->base = BT_LONGLONG;
+ else if (!strcmp (mustbelongordbl, "double"))
+ typedata->base = BT_LONGDOUBLE;
+ else
+ /* Speculatively accept "long" here and push back the token.
+ This occurs when "long" is a return type and the next token
+ is the function name. */
+ {
+ typedata->base = BT_LONG;
+ pos = oldpos;
+ }
+ }
+ else if (!strcmp (token, "float"))
+ typedata->base = BT_FLOAT;
+ else if (!strcmp (token, "double"))
+ typedata->base = BT_DOUBLE;
+ else if (!strcmp (token, "__int128"))
+ typedata->base = BT_INT128;
+ else if (!strcmp (token, "_Float128"))
+ typedata->base = BT_FLOAT128;
+ else if (!strcmp (token, "bool"))
+ typedata->base = BT_BOOL;
+ /* A "string" is a special "const char *" -- we need it because it
+ cannot match either signed or unsigned char *. */
+ else if (!strcmp (token, "string"))
+ typedata->base = BT_STRING;
+ else if (!strcmp (token, "_Decimal32"))
+ typedata->base = BT_DECIMAL32;
+ else if (!strcmp (token, "_Decimal64"))
+ typedata->base = BT_DECIMAL64;
+ else if (!strcmp (token, "_Decimal128"))
+ typedata->base = BT_DECIMAL128;
+ else if (!strcmp (token, "__ibm128"))
+ typedata->base = BT_IBM128;
+ else
+ {
+ (*diag) ("unrecognized base type at column %d\n", oldpos + 1);
+ return 0;
+ }
+
+ handle_pointer (typedata);
return 1;
}
^ permalink raw reply [flat|nested] 6+ messages in thread
* [gcc(refs/users/wschmidt/heads/builtins10)] rs6000: Add functions for matching types, part 2 of 3
@ 2021-04-02 22:09 William Schmidt
0 siblings, 0 replies; 6+ messages in thread
From: William Schmidt @ 2021-04-02 22:09 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:b9ad54e2a0a3f4d7d80df5adf63fb6b11fd71104
commit b9ad54e2a0a3f4d7d80df5adf63fb6b11fd71104
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date: Fri Apr 2 16:31:38 2021 -0500
rs6000: Add functions for matching types, part 2 of 3
2021-04-02 Bill Schmidt <wschmidt@linux.ibm.com>
gcc/
* config/rs6000/rs6000-gen-builtins.c (match_basetype): Implement.
Diff:
---
gcc/config/rs6000/rs6000-gen-builtins.c | 64 +++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index ac061d092e7..96e74e6048a 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -393,6 +393,70 @@ handle_pointer (typeinfo *typedata)
static int
match_basetype (typeinfo *typedata)
{
+ consume_whitespace ();
+ int oldpos = pos;
+ char *token = match_identifier ();
+ if (!token)
+ {
+ (*diag) ("missing base type in return type at column %d\n", pos + 1);
+ return 0;
+ }
+
+ if (!strcmp (token, "char"))
+ typedata->base = BT_CHAR;
+ else if (!strcmp (token, "short"))
+ typedata->base = BT_SHORT;
+ else if (!strcmp (token, "int"))
+ typedata->base = BT_INT;
+ else if (!strcmp (token, "long"))
+ {
+ consume_whitespace ();
+ oldpos = pos;
+ char *mustbelongordbl = match_identifier ();
+ if (!mustbelongordbl)
+ typedata->base = BT_LONG;
+ else if (!strcmp (mustbelongordbl, "long"))
+ typedata->base = BT_LONGLONG;
+ else if (!strcmp (mustbelongordbl, "double"))
+ typedata->base = BT_LONGDOUBLE;
+ else
+ /* Speculatively accept "long" here and push back the token.
+ This occurs when "long" is a return type and the next token
+ is the function name. */
+ {
+ typedata->base = BT_LONG;
+ pos = oldpos;
+ }
+ }
+ else if (!strcmp (token, "float"))
+ typedata->base = BT_FLOAT;
+ else if (!strcmp (token, "double"))
+ typedata->base = BT_DOUBLE;
+ else if (!strcmp (token, "__int128"))
+ typedata->base = BT_INT128;
+ else if (!strcmp (token, "_Float128"))
+ typedata->base = BT_FLOAT128;
+ else if (!strcmp (token, "bool"))
+ typedata->base = BT_BOOL;
+ /* A "string" is a special "const char *" -- we need it because it
+ cannot match either signed or unsigned char *. */
+ else if (!strcmp (token, "string"))
+ typedata->base = BT_STRING;
+ else if (!strcmp (token, "_Decimal32"))
+ typedata->base = BT_DECIMAL32;
+ else if (!strcmp (token, "_Decimal64"))
+ typedata->base = BT_DECIMAL64;
+ else if (!strcmp (token, "_Decimal128"))
+ typedata->base = BT_DECIMAL128;
+ else if (!strcmp (token, "__ibm128"))
+ typedata->base = BT_IBM128;
+ else
+ {
+ (*diag) ("unrecognized base type at column %d\n", oldpos + 1);
+ return 0;
+ }
+
+ handle_pointer (typedata);
return 1;
}
^ permalink raw reply [flat|nested] 6+ messages in thread
* [gcc(refs/users/wschmidt/heads/builtins10)] rs6000: Add functions for matching types, part 2 of 3
@ 2021-04-01 19:47 William Schmidt
0 siblings, 0 replies; 6+ messages in thread
From: William Schmidt @ 2021-04-01 19:47 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:714be7f0b297be9c546c0a72209402e71f53a806
commit 714be7f0b297be9c546c0a72209402e71f53a806
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date: Wed Mar 24 13:07:22 2021 -0500
rs6000: Add functions for matching types, part 2 of 3
2021-03-24 Bill Schmidt <wschmidt@linux.ibm.com>
gcc/
* config/rs6000/rs6000-gen-builtins.c (match_basetype): Implement.
Diff:
---
gcc/config/rs6000/rs6000-gen-builtins.c | 68 +++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 5ce1707d84e..ec40ad4c25e 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -392,6 +392,74 @@ handle_pointer (typeinfo *typedata)
static int
match_basetype (typeinfo *typedata)
{
+ consume_whitespace ();
+ int oldpos = pos;
+ char *token = match_identifier ();
+ if (!token)
+ {
+ (*diag) ("missing base type in return type at column %d\n", pos + 1);
+ return 0;
+ }
+
+ if (!strcmp (token, "char"))
+ typedata->base = BT_CHAR;
+ else if (!strcmp (token, "short"))
+ typedata->base = BT_SHORT;
+ else if (!strcmp (token, "int"))
+ typedata->base = BT_INT;
+ else if (!strcmp (token, "long"))
+ {
+ consume_whitespace ();
+ oldpos = pos;
+ char *mustbelongordbl = match_identifier ();
+ /* We rarely permit just "long". There are a couple of builtins
+ for which an argument or return type is 32 bits in 32-bit mode
+ and 64 bits in 64-bit mode. This is the only time that "long"
+ should be used instead of "int" or "long long". */
+ if (!mustbelongordbl)
+ typedata->base = BT_LONG;
+ else if (!strcmp (mustbelongordbl, "long"))
+ typedata->base = BT_LONGLONG;
+ else if (!strcmp (mustbelongordbl, "double"))
+ typedata->base = BT_LONGDOUBLE;
+ else
+ /* Speculatively accept "long" here and push back the token.
+ This occurs when "long" is a return type and the next token
+ is the function name. */
+ {
+ typedata->base = BT_LONG;
+ pos = oldpos;
+ }
+ }
+ else if (!strcmp (token, "float"))
+ typedata->base = BT_FLOAT;
+ else if (!strcmp (token, "double"))
+ typedata->base = BT_DOUBLE;
+ else if (!strcmp (token, "__int128"))
+ typedata->base = BT_INT128;
+ else if (!strcmp (token, "_Float128"))
+ typedata->base = BT_FLOAT128;
+ else if (!strcmp (token, "bool"))
+ typedata->base = BT_BOOL;
+ /* A "string" is a special "const char *" -- we need it because it
+ cannot match either signed or unsigned char *. */
+ else if (!strcmp (token, "string"))
+ typedata->base = BT_STRING;
+ else if (!strcmp (token, "_Decimal32"))
+ typedata->base = BT_DECIMAL32;
+ else if (!strcmp (token, "_Decimal64"))
+ typedata->base = BT_DECIMAL64;
+ else if (!strcmp (token, "_Decimal128"))
+ typedata->base = BT_DECIMAL128;
+ else if (!strcmp (token, "__ibm128"))
+ typedata->base = BT_IBM128;
+ else
+ {
+ (*diag) ("unrecognized base type at column %d\n", oldpos + 1);
+ return 0;
+ }
+
+ handle_pointer (typedata);
return 1;
}
^ permalink raw reply [flat|nested] 6+ messages in thread
* [gcc(refs/users/wschmidt/heads/builtins10)] rs6000: Add functions for matching types, part 2 of 3
@ 2021-03-25 15:44 William Schmidt
0 siblings, 0 replies; 6+ messages in thread
From: William Schmidt @ 2021-03-25 15:44 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:91efadca2a7c71b940a16e39ae33eecaf37f2552
commit 91efadca2a7c71b940a16e39ae33eecaf37f2552
Author: Bill Schmidt <wschmidt@linux.ibm.com>
Date: Wed Mar 24 13:07:22 2021 -0500
rs6000: Add functions for matching types, part 2 of 3
2021-03-24 Bill Schmidt <wschmidt@linux.ibm.com>
gcc/
* config/rs6000/rs6000-gen-builtins.c (match_basetype): Implement.
Diff:
---
gcc/config/rs6000/rs6000-gen-builtins.c | 68 +++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c
index 5ce1707d84e..ec40ad4c25e 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.c
+++ b/gcc/config/rs6000/rs6000-gen-builtins.c
@@ -392,6 +392,74 @@ handle_pointer (typeinfo *typedata)
static int
match_basetype (typeinfo *typedata)
{
+ consume_whitespace ();
+ int oldpos = pos;
+ char *token = match_identifier ();
+ if (!token)
+ {
+ (*diag) ("missing base type in return type at column %d\n", pos + 1);
+ return 0;
+ }
+
+ if (!strcmp (token, "char"))
+ typedata->base = BT_CHAR;
+ else if (!strcmp (token, "short"))
+ typedata->base = BT_SHORT;
+ else if (!strcmp (token, "int"))
+ typedata->base = BT_INT;
+ else if (!strcmp (token, "long"))
+ {
+ consume_whitespace ();
+ oldpos = pos;
+ char *mustbelongordbl = match_identifier ();
+ /* We rarely permit just "long". There are a couple of builtins
+ for which an argument or return type is 32 bits in 32-bit mode
+ and 64 bits in 64-bit mode. This is the only time that "long"
+ should be used instead of "int" or "long long". */
+ if (!mustbelongordbl)
+ typedata->base = BT_LONG;
+ else if (!strcmp (mustbelongordbl, "long"))
+ typedata->base = BT_LONGLONG;
+ else if (!strcmp (mustbelongordbl, "double"))
+ typedata->base = BT_LONGDOUBLE;
+ else
+ /* Speculatively accept "long" here and push back the token.
+ This occurs when "long" is a return type and the next token
+ is the function name. */
+ {
+ typedata->base = BT_LONG;
+ pos = oldpos;
+ }
+ }
+ else if (!strcmp (token, "float"))
+ typedata->base = BT_FLOAT;
+ else if (!strcmp (token, "double"))
+ typedata->base = BT_DOUBLE;
+ else if (!strcmp (token, "__int128"))
+ typedata->base = BT_INT128;
+ else if (!strcmp (token, "_Float128"))
+ typedata->base = BT_FLOAT128;
+ else if (!strcmp (token, "bool"))
+ typedata->base = BT_BOOL;
+ /* A "string" is a special "const char *" -- we need it because it
+ cannot match either signed or unsigned char *. */
+ else if (!strcmp (token, "string"))
+ typedata->base = BT_STRING;
+ else if (!strcmp (token, "_Decimal32"))
+ typedata->base = BT_DECIMAL32;
+ else if (!strcmp (token, "_Decimal64"))
+ typedata->base = BT_DECIMAL64;
+ else if (!strcmp (token, "_Decimal128"))
+ typedata->base = BT_DECIMAL128;
+ else if (!strcmp (token, "__ibm128"))
+ typedata->base = BT_IBM128;
+ else
+ {
+ (*diag) ("unrecognized base type at column %d\n", oldpos + 1);
+ return 0;
+ }
+
+ handle_pointer (typedata);
return 1;
}
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-06-25 16:15 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-25 16:15 [gcc(refs/users/wschmidt/heads/builtins10)] rs6000: Add functions for matching types, part 2 of 3 William Schmidt
-- strict thread matches above, loose matches on Subject: below --
2021-06-15 17:16 William Schmidt
2021-04-26 20:48 William Schmidt
2021-04-02 22:09 William Schmidt
2021-04-01 19:47 William Schmidt
2021-03-25 15:44 William Schmidt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).