Support var decls in facet blocks

This commit is contained in:
Tony Garnock-Jones 2016-06-05 13:14:48 -04:00
parent 9af4e88681
commit f8116ee8eb
2 changed files with 13 additions and 5 deletions

View File

@ -54,10 +54,11 @@ function buildActor(constructorES5, nameExpOpt, block) {
} }
function buildFacet(facetBlock, transitionBlock) { function buildFacet(facetBlock, transitionBlock) {
return 'Syndicate.Actor.createFacet()' + return '(function () { ' + (facetBlock ? facetBlock.facetVarDecls : '') +
'\nSyndicate.Actor.createFacet()' +
(facetBlock ? facetBlock.asES5 : '') + (facetBlock ? facetBlock.asES5 : '') +
(transitionBlock ? transitionBlock.asES5 : '') + (transitionBlock ? transitionBlock.asES5 : '') +
'.completeBuild();'; '.completeBuild(); })();';
} }
function buildOnEvent(isTerminal, eventType, subscription, projection, bindings, body) { function buildOnEvent(isTerminal, eventType, subscription, projection, bindings, body) {
@ -136,7 +137,7 @@ var modifiedSourceActions = {
return 'Syndicate.Dataspace.send(' + expr.asES5 + ')' + sc.interval.contents; return 'Syndicate.Dataspace.send(' + expr.asES5 + ')' + sc.interval.contents;
}, },
FacetBlock: function(_leftParen, init, situations, done, _rightParen) { FacetBlock: function(_leftParen, _varStmts, init, situations, done, _rightParen) {
return (init ? init.asES5 : '') + situations.asES5.join('') + (done ? done.asES5 : ''); return (init ? init.asES5 : '') + situations.asES5.join('') + (done ? done.asES5 : '');
}, },
FacetStateTransitionBlock: function(_leftParen, transitions, _rightParen) { FacetStateTransitionBlock: function(_leftParen, transitions, _rightParen) {
@ -170,7 +171,8 @@ var modifiedSourceActions = {
pattern.subscription, pattern.subscription,
pattern.projection, pattern.projection,
pattern.bindings, pattern.bindings,
'{ Syndicate.Actor.createFacet()' + '{ ' + facetBlock.facetVarDecls +
'\nSyndicate.Actor.createFacet()' +
facetBlock.asES5 + facetBlock.asES5 +
buildOnEvent(true, buildOnEvent(true,
'retracted', 'retracted',
@ -195,6 +197,12 @@ var modifiedSourceActions = {
semantics.extendAttribute('modifiedSource', modifiedSourceActions); semantics.extendAttribute('modifiedSource', modifiedSourceActions);
semantics.addAttribute('facetVarDecls', {
FacetBlock: function (_leftParen, varDecls, _init, _situations, _done, _rightParen) {
return varDecls.asES5;
}
});
semantics.addAttribute('asSyndicateStructureArguments', { semantics.addAttribute('asSyndicateStructureArguments', {
FormalParameterList: function(formals) { FormalParameterList: function(formals) {
return formals.asIteration().asSyndicateStructureArguments; return formals.asIteration().asSyndicateStructureArguments;

View File

@ -36,7 +36,7 @@ Syndicate <: ES5 {
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Ongoing event handlers. // Ongoing event handlers.
FacetBlock = "{" FacetInitBlock? FacetSituation* FacetDoneBlock? "}" FacetBlock = "{" VariableStatement* FacetInitBlock? FacetSituation* FacetDoneBlock? "}"
FacetStateTransitionBlock = "{" FacetStateTransition* "}" FacetStateTransitionBlock = "{" FacetStateTransition* "}"
FacetInitBlock = do FunctionBodyBlock FacetInitBlock = do FunctionBodyBlock