UNPKG

@awayfl/avm2

Version:

Virtual machine for executing AS3 code

22 lines (21 loc) 923 B
import { release } from '@awayfl/swf-loader'; import { assert } from '@awayjs/graphics'; import { isXMLCollection, ASXMLList } from '../natives/xml'; /** * ActionScript 3 has different behaviour when deciding whether to call toString or valueOf * when one operand is a string. Unlike JavaScript, it calls toString if one operand is a * string and valueOf otherwise. This sucks, but we have to emulate this behaviour because * YouTube depends on it. * * AS3 also overloads the `+` operator to concatenate XMLs/XMLLists instead of stringifying them. */ export function axAdd(l, r, sec) { release || assert(!(typeof l === 'number' && typeof r === 'number'), 'Inline number addition.'); if (typeof l === 'string' || typeof r === 'string') { return String(l) + String(r); } if (isXMLCollection(sec, l) && isXMLCollection(sec, r)) { return ASXMLList.addXML(l, r); } return l + r; }