2016-12-05 16:53:06 +00:00
|
|
|
// bin/syndicatec compiler/demo-bad-this.js | node
|
|
|
|
//
|
|
|
|
// Bug with this-ness. Symptomatic output:
|
|
|
|
//
|
|
|
|
// + render one false
|
|
|
|
// + render two false
|
|
|
|
// present one
|
|
|
|
// - render one false
|
|
|
|
// - render two false
|
|
|
|
// + render one one
|
|
|
|
// + render two one
|
|
|
|
//
|
|
|
|
// Good output:
|
|
|
|
//
|
|
|
|
// + render one false
|
|
|
|
// + render two false
|
|
|
|
// present one
|
|
|
|
// - render one false
|
|
|
|
// + render one one
|
|
|
|
|
|
|
|
var Syndicate = require('./src/main.js');
|
|
|
|
|
|
|
|
assertion type user(who);
|
|
|
|
assertion type present(who);
|
|
|
|
assertion type rendered(who, isPresent);
|
|
|
|
|
|
|
|
ground dataspace {
|
2017-02-16 19:38:56 +00:00
|
|
|
spawn {
|
2016-12-05 16:53:06 +00:00
|
|
|
assert user('one');
|
|
|
|
assert present('one');
|
|
|
|
}
|
|
|
|
|
2017-02-16 19:38:56 +00:00
|
|
|
spawn {
|
2016-12-05 16:53:06 +00:00
|
|
|
assert user('two');
|
|
|
|
// assert present('two');
|
|
|
|
}
|
|
|
|
|
2017-02-16 19:38:56 +00:00
|
|
|
spawn {
|
2016-12-05 16:53:06 +00:00
|
|
|
during user($who) {
|
|
|
|
field this.isPresent = false;
|
|
|
|
on asserted present(who) {
|
|
|
|
console.log('present', who);
|
|
|
|
this.isPresent = who;
|
|
|
|
}
|
|
|
|
on retracted present(who) {
|
|
|
|
console.log('absent', who);
|
|
|
|
this.isPresent = false;
|
|
|
|
}
|
|
|
|
assert rendered(who, this.isPresent);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-02-16 19:38:56 +00:00
|
|
|
spawn {
|
2016-12-05 16:53:06 +00:00
|
|
|
during rendered($who, $isPresent) {
|
|
|
|
on start { console.log('+ render', who, isPresent); }
|
|
|
|
on stop { console.log('- render', who, isPresent); }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|