- From: Cameron McCormack <cam@mcc.id.au>
- Date: Mon, 05 Mar 2012 14:04:44 +1100
- To: Anne van Kesteren <annevk@opera.com>
- CC: public-script-coord@w3.org
Anne van Kesteren:
> It would be nice if argument names were not identifiers, so "callback"
> can be used as in:
>
> foo(optional Listener? callback)
>
> Argument names should mean nothing whatsoever and as far as I can tell
> you can disambiguate them already. Both DOM and HTML ran into this problem.
First, escaping exists exactly so that you can use any keyword as an
identifier. Although it doesn't seem to be that important for an
argument name, so you could easily change what you use there. :)
But if we are going to relax the need to escape keywords to use them as
identifiers for arguments, I think we should look to do it in all places
where it's no ambiguous to do so.
Let's first assume that we disallow the keywords for the built-in types
("long", "any", "object", etc.).
Then let's say we group usage of identifiers as follows, and have the
escaping rules be consistent in each group:
1. named definitions (interface, partial interface, dictionary,
exception, enum, callback and typedef)
2. members (operations, const, attribute, exception field, dictionary
member)
3. operation arguments
4. extended attributes
Everything in the first group can be used as a type, so we should
probably have the escaping rules for them be the same at the point of
definition as they are when you reference them as a type. So they can't
be "const", because of
interface const { };
exception A {
const x;
};
(is the "const" introducing a const or an exception field?).
It also can't be "optional", because of
interface optional { };
void f(optional x); -- is "optional" the interface type?
In the second group, we can't use "readonly", "attribute", "inherit",
"const", "static", "getter", "setter", "creator", "deleter",
"stringifier", or the keywords for built-in types. All other keywords work:
interface A {
attribute Function callback;
};
In the third and fourth groups, there aren't any restrictions on what
keywords we could allow.
However, it complicates parsing, is not obvious when you need to escape
and when you do not, and may look confusing to people reading the IDL.
I'm not at all sure that we should do this.
I wonder if the "_" that performs identifier escaping should be "\".
Then it doesn't look like it could be a normal identifier if you don't
know what the escaping rules are.
Received on Monday, 5 March 2012 03:05:20 UTC