syndicate-2017/js/compiler/demo-bankaccount.js

44 lines
773 B
JavaScript

// node src/compiler.js src/demo-bankaccount.js | node
var Syndicate = require('./src/main.js');
assertion type account(balance);
assertion type deposit(amount);
ground network {
actor {
this.balance = 0;
forever {
assert account(this.balance);
on message deposit($amount) {
this.balance += amount;
}
}
}
actor {
forever {
on asserted account($balance) {
console.log("Balance is now", balance);
}
}
}
actor {
state {
init {
console.log("Waiting for account.");
}
done {
console.log("Account became ready.");
}
} until {
case asserted Syndicate.observe(deposit(_)) {
:: deposit(+100);
:: deposit(-30);
}
}
}
}