45 lines
862 B
JavaScript

// Options: --block-binding
{
let i = 0, log = [];
this.logger = function(...e) {
log.push(e.join(' '));
}
// https://crbug.com/450942
assert.equal(typeof new Function`logger('a')`, 'object');
assert.deepEqual(log, ['a']);
log.length = 0;
function tag(...e) {
var text = e[0] && String.raw(...e);
if (this instanceof tag) {
log.push('new;' + text);
} else {
log.push('tag;' + text);
return tag;
}
}
assert.equal(typeof new tag`a``b``c`, 'object');
assert.deepEqual(log, [
'tag;a',
'tag;b',
'tag;c',
'new;undefined'
]);
log.length = 0;
function C(cs) {
log.push(cs[0]);
if (this instanceof C) {
this.name = cs;
} else {
return C;
}
}
assert.deepEqual(new C`a``b``c`('test'), { name: 'test' });
assert.deepEqual(log, ['a', 'b', 'c', 't']);
}