I think you're right.  According to the AVM2 doc (avm2overview.pdf), for
coerce_s ("Coerce a value to a string"):

"If value is null or undefined, then stringvalue is set to null"

and

"This opcode is very similar to the convert_s opcode. The difference is
that convert_s will convert a null or undefined value to the string
"null" or "undefined" whereas coerce_s will convert those values to the
null value."



On 11/13/2021 3:49 PM, Greg Dove wrote:
> I am pretty sure Language.string is behaving correctly.
>
> Here's a very simple example of what you get in flash player.
>
> var something:* //undefined by default
>
> var str1:String = something;
> var str2:String = something as String;
> var str3:String = String(something);
>
> trace((str1===null),(str2===null),(str3==='undefined'))
> //true true true
>
> here is what the same code compiles to in Royale:
>
>   var /** @type {*} */ something;
>   var /** @type {string} */ str1 =
> org.apache.royale.utils.Language.string(something);
>   var /** @type {string} */ str2 =
> org.apache.royale.utils.Language.as(something,
> String);
>   var /** @type {string} */ str3 = String(something);
>
> And the results, when tested, are the same. Whether or not 'something as
> String' should be transpiled to Language.string instead of Language.as is
> 'something' that could perhaps be investigated, but I suspect the explicit
> use of that is quite rare in code, relative to the implicit coercions that
> take place.
>
>
>
>
> On Sun, Nov 14, 2021 at 8:23 AM Harbs wrote:
>
>> Of course and JS works the same way. But Language.string is used for
>> implicit coercions where it might have an initial value of undefined. In
>> that case, I don’t think you’d usually want to be using “undefined”. You
>> probably want “” instead.
>>
>> I don’t remember all the discussions we had around this in the past.
>>
>> If anyone remembers better, please jog my memory…
>>
>> Harbs
>>
>>> On Nov 12, 2021, at 8:08 PM, Edward Stangler 
>> wrote:
>>>
>>> In Flex, both String(null) == "null" and ""+null == "null" (the string
>>> "null", not the null value).
>>>
>>> Don't know if that's the equivalent of Language.string().
>>>
>>>
>>> On 11/12/2021 4:05 AM, Harbs wrote:
>>>> I wonder if Language.string() should return “” for undefined. It
>> currently returns null. I think “” would generally be a more expected
>> result.
>>

Reply via email to