This commit is contained in:
Tony Garnock-Jones 2016-05-19 13:15:06 -04:00
parent 63235074c9
commit 5c634044c4
4 changed files with 78 additions and 33 deletions

83
dist/syndicate.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -10,7 +10,7 @@ var path = require('path');
var ohm = require('ohm-js');
var ES5 = require('./es5.js');
var grammarSource = Buffer("Ly8gLSotIGphdmFzY3JpcHQgLSotCi8vIFN5bnRhY3RpYyBleHRlbnNpb25zIHRvIEVTNSBmb3IgU3luZGljYXRlL2pzLiBTZWUgY29tcGlsZXIuanMgZm9yCi8vIHRoZSByZXN0IG9mIHRoZSB0cmFuc2xhdG9yLgoKU3luZGljYXRlIDw6IEVTNSB7CiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBFeHRlbnNpb25zIHRvIGV4cHJlc3Npb25zLgoKICBTdGF0ZW1lbnQKICAgICs9IEFjdG9yU3RhdGVtZW50CiAgICB8IERhdGFzcGFjZVN0YXRlbWVudAogICAgfCBBY3RvckZhY2V0U3RhdGVtZW50CiAgICB8IEFzc2VydGlvblR5cGVEZWNsYXJhdGlvblN0YXRlbWVudAogICAgfCBTZW5kTWVzc2FnZVN0YXRlbWVudAoKICBGdW5jdGlvbkJvZHlCbG9jayA9ICJ7IiBGdW5jdGlvbkJvZHkgIn0iICAgLy8gb2RkIHRoYXQgdGhpcyBpc24ndCBpbiBlczUub2htIHNvbWV3aGVyZQoKICBBY3RvclN0YXRlbWVudAogICAgPSBhY3RvciBDYWxsRXhwcmVzc2lvbiBGdW5jdGlvbkJvZHlCbG9jayAtLSB3aXRoQ29uc3RydWN0b3IKICAgIHwgYWN0b3IgRnVuY3Rpb25Cb2R5QmxvY2sgICAgICAgICAgICAgICAgLS0gbm9Db25zdHJ1Y3RvcgoKICBEYXRhc3BhY2VTdGF0ZW1lbnQKICAgID0gZ3JvdW5kIGRhdGFzcGFjZSBpZGVudGlmaWVyPyBGdW5jdGlvbkJvZHlCbG9jayAtLSBncm91bmQKICAgIHwgZGF0YXNwYWNlIEZ1bmN0aW9uQm9keUJsb2NrICAgICAgICAgICAgICAgICAgICAtLSBub3JtYWwKCiAgQWN0b3JGYWNldFN0YXRlbWVudAogICAgPSByZWFjdCBGYWNldEJsb2NrIHVudGlsIEZhY2V0U3RhdGVUcmFuc2l0aW9uQmxvY2sgICAtLSBzdGF0ZQogICAgfCByZWFjdCB1bnRpbCBGYWNldFN0YXRlVHJhbnNpdGlvbkJsb2NrICAgICAgICAgICAgICAtLSB1bnRpbAogICAgfCByZWFjdCBGYWNldEJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBmb3JldmVyCgogIEFzc2VydGlvblR5cGVEZWNsYXJhdGlvblN0YXRlbWVudAogICAgPSAoYXNzZXJ0aW9uIHwgbWVzc2FnZSkgdHlwZSBpZGVudGlmaWVyICIoIiBGb3JtYWxQYXJhbWV0ZXJMaXN0ICIpIiAoIj0iIHN0cmluZ0xpdGVyYWwpPyAjKHNjKQoKICBTZW5kTWVzc2FnZVN0YXRlbWVudCA9ICI6OiIgRXhwcmVzc2lvbjx3aXRoSW4+ICMoc2MpCgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gT25nb2luZyBldmVudCBoYW5kbGVycy4KCiAgRmFjZXRCbG9jayA9ICJ7IiBGYWNldEluaXRCbG9jaz8gRmFjZXRTaXR1YXRpb24qIEZhY2V0RG9uZUJsb2NrPyAifSIKICBGYWNldFN0YXRlVHJhbnNpdGlvbkJsb2NrID0gInsiIEZhY2V0U3RhdGVUcmFuc2l0aW9uKiAifSIKCiAgRmFjZXRJbml0QmxvY2sgPSBkbyBGdW5jdGlvbkJvZHlCbG9jawogIEZhY2V0RG9uZUJsb2NrID0gZmluYWxseSBGdW5jdGlvbkJvZHlCbG9jawoKICBGYWNldFNpdHVhdGlvbgogICAgPSBhc3NlcnQgRmFjZXRQYXR0ZXJuIEFzc2VydFdoZW5DbGF1c2U/ICMoc2MpIC0tIGFzc2VydAogICAgfCBvbiBGYWNldEV2ZW50UGF0dGVybiBGdW5jdGlvbkJvZHlCbG9jayAgICAgIC0tIGV2ZW50CiAgICB8IG9uIGV2ZW50IGlkZW50aWZpZXIgRnVuY3Rpb25Cb2R5QmxvY2sgICAgICAgLS0gb25FdmVudAogICAgfCBkdXJpbmcgRmFjZXRQYXR0ZXJuIEZhY2V0QmxvY2sgICAgICAgICAgICAgIC0tIGR1cmluZwoKICBBc3NlcnRXaGVuQ2xhdXNlID0gd2hlbiAiKCIgRXhwcmVzc2lvbjx3aXRoSW4+ICIpIgoKICBGYWNldEV2ZW50UGF0dGVybgogICAgPSBtZXNzYWdlIEZhY2V0UGF0dGVybiAgIC0tIG1lc3NhZ2VFdmVudAogICAgfCBhc3NlcnRlZCBGYWNldFBhdHRlcm4gIC0tIGFzc2VydGVkRXZlbnQKICAgIHwgcmV0cmFjdGVkIEZhY2V0UGF0dGVybiAtLSByZXRyYWN0ZWRFdmVudAoKICBGYWNldFRyYW5zaXRpb25FdmVudFBhdHRlcm4KICAgID0gRmFjZXRFdmVudFBhdHRlcm4gICAgICAgICAgLS0gZmFjZXRFdmVudAogICAgfCAiKCIgRXhwcmVzc2lvbjx3aXRoSW4+ICIpIiAtLSByaXNpbmdFZGdlCgogIEZhY2V0U3RhdGVUcmFuc2l0aW9uCiAgICA9IGNhc2UgRmFjZXRUcmFuc2l0aW9uRXZlbnRQYXR0ZXJuIEZ1bmN0aW9uQm9keUJsb2NrIC0tIHdpdGhDb250aW51YXRpb24KICAgIHwgY2FzZSBGYWNldFRyYW5zaXRpb25FdmVudFBhdHRlcm4gIyhzYykgICAgICAgICAgICAgLS0gbm9Db250aW51YXRpb24KCiAgRmFjZXRQYXR0ZXJuCiAgICA9IExlZnRIYW5kU2lkZUV4cHJlc3Npb24gbWV0YWxldmVsIGRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCAtLSB3aXRoTWV0YWxldmVsCiAgICB8IExlZnRIYW5kU2lkZUV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBub01ldGFsZXZlbAoKICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIEtleXdvcmRzLiBXZSBkb24ndCBhZGQgdGhlbSB0byB0aGUgImtleXdvcmQiIHByb2R1Y3Rpb24gYmVjYXVzZQogIC8vIHdlIGRvbid0IHdhbnQgdG8gbWFrZSB0aGVtIHVuYXZhaWxhYmxlIHRvIHByb2dyYW1zIGFzCiAgLy8gaWRlbnRpZmllcnMuCgogIGFjdG9yID0gImFjdG9yIiB+aWRlbnRpZmllclBhcnQKICBhc3NlcnQgPSAiYXNzZXJ0IiB+aWRlbnRpZmllclBhcnQKICBhc3NlcnRlZCA9ICJhc3NlcnRlZCIgfmlkZW50aWZpZXJQYXJ0CiAgYXNzZXJ0aW9uID0gImFzc2VydGlvbiIgfmlkZW50aWZpZXJQYXJ0CiAgZGF0YXNwYWNlID0gImRhdGFzcGFjZSIgfmlkZW50aWZpZXJQYXJ0CiAgZHVyaW5nID0gImR1cmluZyIgfmlkZW50aWZpZXJQYXJ0CiAgZXZlbnQgPSAiZXZlbnQiIH5pZGVudGlmaWVyUGFydAogIGdyb3VuZCA9ICJncm91bmQiIH5pZGVudGlmaWVyUGFydAogIG1lc3NhZ2UgPSAibWVzc2FnZSIgfmlkZW50aWZpZXJQYXJ0CiAgbWV0YWxldmVsID0gIm1ldGFsZXZlbCIgfmlkZW50aWZpZXJQYXJ0CiAgb24gPSAib24iIH5pZGVudGlmaWVyUGFydAogIHJlYWN0ID0gInJlYWN0IiB+aWRlbnRpZmllclBhcnQKICByZXRyYWN0ZWQgPSAicmV0cmFjdGVkIiB+aWRlbnRpZmllclBhcnQKICB0eXBlID0gInR5cGUiIH5pZGVudGlmaWVyUGFydAogIHVudGlsID0gInVudGlsIiB+aWRlbnRpZmllclBhcnQKICB3aGVuID0gIndoZW4iIH5pZGVudGlmaWVyUGFydAp9Cg==","base64").toString();
var grammarSource = Buffer("Ly8gLSotIGphdmFzY3JpcHQgLSotCi8vIFN5bnRhY3RpYyBleHRlbnNpb25zIHRvIEVTNSBmb3IgU3luZGljYXRlL2pzLiBTZWUgY29tcGlsZXIuanMgZm9yCi8vIHRoZSByZXN0IG9mIHRoZSB0cmFuc2xhdG9yLgoKU3luZGljYXRlIDw6IEVTNSB7CiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBFeHRlbnNpb25zIHRvIGV4cHJlc3Npb25zLgoKICBTdGF0ZW1lbnQKICAgICs9IEFjdG9yU3RhdGVtZW50CiAgICB8IERhdGFzcGFjZVN0YXRlbWVudAogICAgfCBBY3RvckZhY2V0U3RhdGVtZW50CiAgICB8IEFzc2VydGlvblR5cGVEZWNsYXJhdGlvblN0YXRlbWVudAogICAgfCBTZW5kTWVzc2FnZVN0YXRlbWVudAoKICBGdW5jdGlvbkJvZHlCbG9jayA9ICJ7IiBGdW5jdGlvbkJvZHkgIn0iICAgLy8gb2RkIHRoYXQgdGhpcyBpc24ndCBpbiBlczUub2htIHNvbWV3aGVyZQoKICBBY3RvclN0YXRlbWVudAogICAgPSBhY3RvciB+bmFtZWQgQ2FsbEV4cHJlc3Npb24gKG5hbWVkIEV4cHJlc3Npb248d2l0aEluPik/IEZ1bmN0aW9uQm9keUJsb2NrIC0tIHdpdGhDb25zdHJ1Y3RvcgogICAgfCBhY3RvciAobmFtZWQgRXhwcmVzc2lvbjx3aXRoSW4+KT8gRnVuY3Rpb25Cb2R5QmxvY2sgICAgICAgICAgICAgICAgICAgICAgIC0tIG5vQ29uc3RydWN0b3IKCiAgRGF0YXNwYWNlU3RhdGVtZW50CiAgICA9IGdyb3VuZCBkYXRhc3BhY2UgaWRlbnRpZmllcj8gRnVuY3Rpb25Cb2R5QmxvY2sgLS0gZ3JvdW5kCiAgICB8IGRhdGFzcGFjZSBGdW5jdGlvbkJvZHlCbG9jayAgICAgICAgICAgICAgICAgICAgLS0gbm9ybWFsCgogIEFjdG9yRmFjZXRTdGF0ZW1lbnQKICAgID0gcmVhY3QgRmFjZXRCbG9jayB1bnRpbCBGYWNldFN0YXRlVHJhbnNpdGlvbkJsb2NrICAgLS0gc3RhdGUKICAgIHwgcmVhY3QgdW50aWwgRmFjZXRTdGF0ZVRyYW5zaXRpb25CbG9jayAgICAgICAgICAgICAgLS0gdW50aWwKICAgIHwgcmVhY3QgRmFjZXRCbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZm9yZXZlcgoKICBBc3NlcnRpb25UeXBlRGVjbGFyYXRpb25TdGF0ZW1lbnQKICAgID0gKGFzc2VydGlvbiB8IG1lc3NhZ2UpIHR5cGUgaWRlbnRpZmllciAiKCIgRm9ybWFsUGFyYW1ldGVyTGlzdCAiKSIgKCI9IiBzdHJpbmdMaXRlcmFsKT8gIyhzYykKCiAgU2VuZE1lc3NhZ2VTdGF0ZW1lbnQgPSAiOjoiIEV4cHJlc3Npb248d2l0aEluPiAjKHNjKQoKICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIE9uZ29pbmcgZXZlbnQgaGFuZGxlcnMuCgogIEZhY2V0QmxvY2sgPSAieyIgRmFjZXRJbml0QmxvY2s/IEZhY2V0U2l0dWF0aW9uKiBGYWNldERvbmVCbG9jaz8gIn0iCiAgRmFjZXRTdGF0ZVRyYW5zaXRpb25CbG9jayA9ICJ7IiBGYWNldFN0YXRlVHJhbnNpdGlvbiogIn0iCgogIEZhY2V0SW5pdEJsb2NrID0gZG8gRnVuY3Rpb25Cb2R5QmxvY2sKICBGYWNldERvbmVCbG9jayA9IGZpbmFsbHkgRnVuY3Rpb25Cb2R5QmxvY2sKCiAgRmFjZXRTaXR1YXRpb24KICAgID0gYXNzZXJ0IEZhY2V0UGF0dGVybiBBc3NlcnRXaGVuQ2xhdXNlPyAjKHNjKSAtLSBhc3NlcnQKICAgIHwgb24gRmFjZXRFdmVudFBhdHRlcm4gRnVuY3Rpb25Cb2R5QmxvY2sgICAgICAtLSBldmVudAogICAgfCBvbiBldmVudCBpZGVudGlmaWVyIEZ1bmN0aW9uQm9keUJsb2NrICAgICAgIC0tIG9uRXZlbnQKICAgIHwgZHVyaW5nIEZhY2V0UGF0dGVybiBGYWNldEJsb2NrICAgICAgICAgICAgICAtLSBkdXJpbmcKCiAgQXNzZXJ0V2hlbkNsYXVzZSA9IHdoZW4gIigiIEV4cHJlc3Npb248d2l0aEluPiAiKSIKCiAgRmFjZXRFdmVudFBhdHRlcm4KICAgID0gbWVzc2FnZSBGYWNldFBhdHRlcm4gICAtLSBtZXNzYWdlRXZlbnQKICAgIHwgYXNzZXJ0ZWQgRmFjZXRQYXR0ZXJuICAtLSBhc3NlcnRlZEV2ZW50CiAgICB8IHJldHJhY3RlZCBGYWNldFBhdHRlcm4gLS0gcmV0cmFjdGVkRXZlbnQKCiAgRmFjZXRUcmFuc2l0aW9uRXZlbnRQYXR0ZXJuCiAgICA9IEZhY2V0RXZlbnRQYXR0ZXJuICAgICAgICAgIC0tIGZhY2V0RXZlbnQKICAgIHwgIigiIEV4cHJlc3Npb248d2l0aEluPiAiKSIgLS0gcmlzaW5nRWRnZQoKICBGYWNldFN0YXRlVHJhbnNpdGlvbgogICAgPSBjYXNlIEZhY2V0VHJhbnNpdGlvbkV2ZW50UGF0dGVybiBGdW5jdGlvbkJvZHlCbG9jayAtLSB3aXRoQ29udGludWF0aW9uCiAgICB8IGNhc2UgRmFjZXRUcmFuc2l0aW9uRXZlbnRQYXR0ZXJuICMoc2MpICAgICAgICAgICAgIC0tIG5vQ29udGludWF0aW9uCgogIEZhY2V0UGF0dGVybgogICAgPSBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uIG1ldGFsZXZlbCBkZWNpbWFsSW50ZWdlckxpdGVyYWwgLS0gd2l0aE1ldGFsZXZlbAogICAgfCBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gbm9NZXRhbGV2ZWwKCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBLZXl3b3Jkcy4gV2UgZG9uJ3QgYWRkIHRoZW0gdG8gdGhlICJrZXl3b3JkIiBwcm9kdWN0aW9uIGJlY2F1c2UKICAvLyB3ZSBkb24ndCB3YW50IHRvIG1ha2UgdGhlbSB1bmF2YWlsYWJsZSB0byBwcm9ncmFtcyBhcwogIC8vIGlkZW50aWZpZXJzLgoKICBhY3RvciA9ICJhY3RvciIgfmlkZW50aWZpZXJQYXJ0CiAgYXNzZXJ0ID0gImFzc2VydCIgfmlkZW50aWZpZXJQYXJ0CiAgYXNzZXJ0ZWQgPSAiYXNzZXJ0ZWQiIH5pZGVudGlmaWVyUGFydAogIGFzc2VydGlvbiA9ICJhc3NlcnRpb24iIH5pZGVudGlmaWVyUGFydAogIGRhdGFzcGFjZSA9ICJkYXRhc3BhY2UiIH5pZGVudGlmaWVyUGFydAogIGR1cmluZyA9ICJkdXJpbmciIH5pZGVudGlmaWVyUGFydAogIGV2ZW50ID0gImV2ZW50IiB+aWRlbnRpZmllclBhcnQKICBncm91bmQgPSAiZ3JvdW5kIiB+aWRlbnRpZmllclBhcnQKICBtZXNzYWdlID0gIm1lc3NhZ2UiIH5pZGVudGlmaWVyUGFydAogIG1ldGFsZXZlbCA9ICJtZXRhbGV2ZWwiIH5pZGVudGlmaWVyUGFydAogIG5hbWVkID0gIm5hbWVkIiB+aWRlbnRpZmllclBhcnQKICBvbiA9ICJvbiIgfmlkZW50aWZpZXJQYXJ0CiAgcmVhY3QgPSAicmVhY3QiIH5pZGVudGlmaWVyUGFydAogIHJldHJhY3RlZCA9ICJyZXRyYWN0ZWQiIH5pZGVudGlmaWVyUGFydAogIHR5cGUgPSAidHlwZSIgfmlkZW50aWZpZXJQYXJ0CiAgdW50aWwgPSAidW50aWwiIH5pZGVudGlmaWVyUGFydAogIHdoZW4gPSAid2hlbiIgfmlkZW50aWZpZXJQYXJ0Cn0K","base64").toString();
var grammar = ohm.grammar(grammarSource, { ES5: ES5.grammar });
var semantics = grammar.extendSemantics(ES5.semantics);
@ -44,9 +44,15 @@ var forEachChild = (function () {
return forEachChild;
})();
function buildActor(constructorES5, block) {
function buildActor(constructorES5, nameExpOpt, block) {
var nameExpStr;
if (nameExpOpt.numChildren === 1) {
nameExpStr = ', ' + nameExpOpt.asES5;
} else {
nameExpStr = '';
}
return 'Syndicate.Actor.spawnActor(new '+constructorES5+', '+
'function() ' + block.asES5 + ');';
'function() ' + block.asES5 + nameExpStr + ');';
}
function buildFacet(facetBlock, transitionBlock) {
@ -81,11 +87,11 @@ function buildCaseEvent(eventPattern, body) {
}
var modifiedSourceActions = {
ActorStatement_noConstructor: function(_actor, block) {
return buildActor('Object()', block);
ActorStatement_noConstructor: function(_actor, _namedOpt, nameExpOpt, block) {
return buildActor('Object()', nameExpOpt, block);
},
ActorStatement_withConstructor: function(_actor, ctorExp, block) {
return buildActor(ctorExp.asES5, block);
ActorStatement_withConstructor: function(_actor, ctorExp, _namedOpt, nameExpOpt, block) {
return buildActor(ctorExp.asES5, nameExpOpt, block);
},
DataspaceStatement_ground: function(_ground, _dataspace, maybeId, block) {

File diff suppressed because one or more lines are too long