I have most of it working:
public function testEmptyListCoercion():void{
var node:XML = <type type="without name
attribute"><val>2</val></type>;
var list:XMLList = node.@name;
var str:String = list;
assertTrue(str == '');
str = 'test'+list;
assertTrue(str == 'test');
var n:Number = Number(list); //WIP
assertTrue(n == 0);
n = 1+list;
assertTrue(n == 1);
var b:Boolean = Boolean(list);
assertTrue(b === true);
b = list || false;
assertTrue(b === true);
//non-empty coercion example
list = node.val;
n = 1+list; // this should be string concatentation ultimately
coerced to Number
assertTrue(n === 12);
}
Everything is passing there except for the
var n:Number = Number(list);
marked WIP and I am close with that also. There was no need to use
XMLList.plus, but so far I am coercing xmlish and non-xmlish concatenation
with String(xmlish) (and not with Language.string which triggers valueOf).
I guess I need to check more complex concatenations with 3 or more elements
being added as well.
I will try to get it in tomorrow before I start my normal work hours.
On Tue, Jul 5, 2022 at 8:49 AM Greg Dove <[email protected]> wrote:
>
> I will look into it today.
>
> Unfortunately the instance level 'plus' method is not suitable for the
> general case, because an XMLList reference can also be null which would
> cause an error in the generated js code that would not be present in AVM,
> although this is an edge case. But it does mean that for the general case,
> if there is not native support via valueOf or toString etc, then it is
> better to route things through a static method that covers the edge cases.
>
>
>
>
>
>
>
>
> On Tue, Jul 5, 2022 at 8:26 AM Harbs <[email protected]> wrote:
>
>> It looks like BinaryOperatorEmitter is supposed to be emitting .plus(),
>> but it doesn’t seem to be doing so…
>>
>> Harbs
>>
>> > On Jul 4, 2022, at 6:32 PM, Harbs <[email protected]> wrote:
>> >
>> > The logic should be something like this in pseudocode:
>> >
>> > if(isPlus && (isXMLish(righthand) || isXMLish(leftHand){
>> > if(isXM<Lish(leftHand){
>> > //output lefthand.plus(righthand)
>> > }else{
>> > // output righthand.plus(lefthand)
>> > }
>> >
>> >> On Jul 4, 2022, at 6:25 PM, Harbs <[email protected] <mailto:
>> [email protected]>> wrote:
>> >>
>> >> I think the compiler should be using the “plus” XML method for string
>> concatenation of XML.
>> >>
>> >>> On Jul 4, 2022, at 5:36 PM, Greg Dove <[email protected] <mailto:
>> [email protected]>> wrote:
>> >>>
>> >>> (it does equal undefined), but it
>> >>> seems it does concatenate as an empty string.
>> >>
>> >
>>
>>