()
| 3589 | } |
| 3590 | |
| 3591 | function scanTemplate() { |
| 3592 | var cooked = '', ch, start, terminated, tail, restore, unescaped, code, octal; |
| 3593 | |
| 3594 | terminated = false; |
| 3595 | tail = false; |
| 3596 | start = index; |
| 3597 | |
| 3598 | ++index; |
| 3599 | |
| 3600 | while (index < length) { |
| 3601 | ch = source[index++]; |
| 3602 | if (ch === '`') { |
| 3603 | tail = true; |
| 3604 | terminated = true; |
| 3605 | break; |
| 3606 | } else if (ch === '$') { |
| 3607 | if (source[index] === '{') { |
| 3608 | ++index; |
| 3609 | terminated = true; |
| 3610 | break; |
| 3611 | } |
| 3612 | cooked += ch; |
| 3613 | } else if (ch === '\\') { |
| 3614 | ch = source[index++]; |
| 3615 | if (!isLineTerminator(ch.charCodeAt(0))) { |
| 3616 | switch (ch) { |
| 3617 | case 'n': |
| 3618 | cooked += '\n'; |
| 3619 | break; |
| 3620 | case 'r': |
| 3621 | cooked += '\r'; |
| 3622 | break; |
| 3623 | case 't': |
| 3624 | cooked += '\t'; |
| 3625 | break; |
| 3626 | case 'u': |
| 3627 | case 'x': |
| 3628 | if (source[index] === '{') { |
| 3629 | ++index; |
| 3630 | cooked += scanUnicodeCodePointEscape(); |
| 3631 | } else { |
| 3632 | restore = index; |
| 3633 | unescaped = scanHexEscape(ch); |
| 3634 | if (unescaped) { |
| 3635 | cooked += unescaped; |
| 3636 | } else { |
| 3637 | index = restore; |
| 3638 | cooked += ch; |
| 3639 | } |
| 3640 | } |
| 3641 | break; |
| 3642 | case 'b': |
| 3643 | cooked += '\b'; |
| 3644 | break; |
| 3645 | case 'f': |
| 3646 | cooked += '\f'; |
| 3647 | break; |
| 3648 | case 'v': |
no test coverage detected