@@ -296,6 +296,7 @@ public IEnumerable<CompiledFile> GenerateCode(ICompilerConfiguration job, Scope
296
296
_commands = [ ] ;
297
297
_globalScope = globalScope ;
298
298
BuildDependencies ( globalScope ) ;
299
+ PopulateSpecHandlers ( ( from m in _globalScope . AllDecls . OfType < Machine > ( ) where m . IsSpec select m ) . ToList ( ) ) ;
299
300
var filenamePrefix = $ "{ job . ProjectName } _";
300
301
List < CompiledFile > files = [ ] ;
301
302
// if there are no proof commands, then create two:
@@ -358,6 +359,26 @@ bool emitCode (ProofCommand cmd) => job.TargetProofBlocks.Count == 0 ||
358
359
return files ;
359
360
}
360
361
362
+ private void PopulateSpecHandlers ( IEnumerable < Machine > specs )
363
+ {
364
+ foreach ( var spec in specs )
365
+ {
366
+ var events = spec . Observes . Events ;
367
+ foreach ( var e in events )
368
+ {
369
+ var procedureName = $ "{ SpecPrefix } { spec . Name } _{ e . Name } ";
370
+ if ( _specListenMap . ContainsKey ( e ) )
371
+ {
372
+ _specListenMap [ e ] . Add ( procedureName ) ;
373
+ }
374
+ else
375
+ {
376
+ _specListenMap . Add ( e , [ procedureName ] ) ;
377
+ }
378
+ }
379
+ }
380
+ }
381
+
361
382
private CompiledFile GenerateCompiledFile ( ProofCommand cmd , string name , Machine m , State s , Event e )
362
383
{
363
384
var filename = name ;
@@ -979,14 +1000,8 @@ private void GenerateSpecHandlers(List<Machine> specs)
979
1000
foreach ( var e in events )
980
1001
{
981
1002
var procedureName = $ "{ SpecPrefix } { spec . Name } _{ e . Name } ";
982
- if ( _specListenMap . ContainsKey ( e ) )
983
- {
984
- _specListenMap [ e ] . Add ( procedureName ) ;
985
- }
986
- else
987
- {
988
- _specListenMap . Add ( e , [ procedureName ] ) ;
989
- }
1003
+ Trace . Assert ( _specListenMap . ContainsKey ( e ) && _specListenMap [ e ] . Contains ( procedureName ) ,
1004
+ $ "Procedure { procedureName } is not generated for Spec { spec . Name } that listens to { e . Name } ") ;
990
1005
991
1006
EmitLine ( $ "procedure [inline] { procedureName } ({ SpecPrefix } Payload: { TypeToString ( e . PayloadType ) } )") ;
992
1007
EmitLine ( "{" ) ;
0 commit comments