The flag idea sounds promising.

As far as XMLQName goes, I was thinking that it would subclass Name and the 
method signatures would still use Name. I don’t think it’s very common to 
actually create a QName, so that would likely work.

Of course having the overhead of a subclass every time a QName is constructed 
is not ideal.

My $0.02,
Harbs

> On Dec 29, 2018, at 9:26 AM, Alex Harui <aha...@adobe.com.INVALID> wrote:
> 
> Well, I don't think we want to require folks to use XMLQName in their code.  
> However, your idea of ClassQName made me think that maybe we can have the 
> compiler set a flag on the QName whenever it is used in bracket syntax on 
> non-XML.  I will try to remember to try that next week.
> 
> -Alex
> 
> On 12/28/18, 2:17 AM, "Harbs" <harbs.li...@gmail.com> wrote:
> 
>    Gotcha.
> 
>    I think the simplest solution is to replace Name with XMLQName for XML. 
> The other similar option is to create a ClassQName that the compiler would 
> use instead of QName for namespaces in classes.
> 
>> On Dec 28, 2018, at 10:32 AM, Alex Harui <aha...@adobe.com.INVALID> wrote:
>> 
>> Most URIs in QNames have something like: 
>> "library://ns.adobe.com/mx/core/internal".  That is not a legal JavaScript 
>> property name.  IOW, you can't run:
>> 
>>   someObject.library://ns.adobe.com/mx/core/internal::foo = 1;
>> 
>> So, we used to output bracket syntax:
>> 
>>   someObject["library://ns.adobe.com/mx/core/internal::foo"] = 1;
>> 
>> For getter/setters, this meant that the Object.defineProperties had entries 
>> like:
>> 
>>  { "library://ns.adobe.com/mx/core/internal::foo": {get: ... }}
>> 
>> And Closure started choking on it, so now we replace the "/", "." and ":" 
>> with "$" or "_" to make it a legal JavaScript property name so we don't have 
>> to use quotes and brackets.
>> 
>> But if you use a QName in property access outside of XML, the JavaScript 
>> runtime calls QName.toString(), so it also has to return a string with the 
>> same character replacements so it matches.  So what are the implications of 
>> doing that?  I think inside of XML, we could test for QName and use 
>> QName.match and/or use the unmodified URI.  Currently, the QName stores the 
>> original URI, only toString() does the character replacements.  But if 
>> someone has expectations on what QName.toString() returns, then that might 
>> cause issues.
>> 
>> -Alex
>> 
>> On 12/27/18, 11:28 PM, "Harbs" <harbs.li...@gmail.com> wrote:
>> 
>>   What are we modifying with the URI?
>> 
>>> On Dec 28, 2018, at 2:33 AM, Alex Harui <aha...@adobe.com.INVALID> wrote:
>>> 
>>> Yeah, that's the sort of thing I was concerned about.  XML does call 
>>> QName.toString() but it doesn't seem to actually care too much about what 
>>> comes back.  In toXMLName it takes whatever name is and calls toString() on 
>>> it.  The QName.toString() is different between SWF and JS.  It is only in 
>>> JS that we modify the uri to be a valid JS property name.  We used to use 
>>> bracket syntax, but that's what ClosureCompiler is choking on.
>>> 
>>> The question is what does someone do with myXML.name().toString()?  Are 
>>> they matching it up against a URI?  They should be calling QName.match().
>>> 
>>> I couldn't immediately think of a way for QName to know it is being used 
>>> for XML vs other properties.  We could create an XMLQName class for JS to 
>>> return from name() that doesn't modify the URI.
>>> 
>>> -Alex
>>> 
>>> On 12/27/18, 1:04 PM, "Harbs" <harbs.li...@gmail.com> wrote:
>>> 
>>>  I don’t think we’re using toString() anywhere ourselves, but what happens 
>>> if someone has myXML.name().toString()? (Or an implicit cast) Will this 
>>> break their Flash code?
>>> 
>>>> On Dec 27, 2018, at 7:36 PM, Alex Harui <aha...@adobe.com.INVALID> wrote:
>>>> 
>>>> Harbs,
>>>> 
>>>> I just changed QName.toString() to match the new namespace format the 
>>>> compiler is outputting in order to make Google Closure Compiler happy.  
>>>> Now I'm wondering if QName.toString() is used in Royale XML.
>>>> 
>>>> Thoughts?
>>>> -Alex
>>>> 
>>> 
>>> 
>>> 
>> 
>> 
>> 
> 
> 
> 

Reply via email to