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" <[email protected]> wrote:
What are we modifying with the URI?
> On Dec 28, 2018, at 2:33 AM, Alex Harui <[email protected]> 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" <[email protected]> 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 <[email protected]> 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
>>
>
>
>