Package fabric.ast

New AST nodes for the Fabric language extension.

See:
          Description

Interface Summary
AbortStmt  
AmbNewFabricArray  
Atomic  
FabricArrayInit  
FabricArrayTypeNode  
FabricBranch  
FabricCall  
FabricDelFactory Factory for delegates for all of the AST nodes in the Fabric language.
FabricExtFactory Factory for extensions for all of the AST nodes in the Fabric language.
FabricNodeFactory NodeFactory for fabric extension.
NewFabricArray  
RemoteWorkerGetter  
RetryStmt  
Worker  
 

Class Summary
AbortStmt_c  
AbstractFabExtFactory_c This class serves the same purpose as AbstractJifExtFactory_c and its parent class polyglot.ast.AbstractExtFactory_c: it provides a default implementation of the factory method for each fabric extension class that delegates to the factory method for its parent class's extension.
AmbNewFabricArray_c  
Atomic_c  
ClassDecl_c  
FabricAmbPrincipalNode_c In Fabric, objects of Worker and RemoteWorker are treated as principals automatically.
FabricArrayInit_c  
FabricArrayTypeNode_c  
FabricCall_c  
FabricDelFactory_c Factory class for creating delegates for fabric types.
FabricFabExtFactory_c This class constructs FabricExt objects for the Fabric language constructs.
FabricJifExtFactory_c This class extends the Jif Extension factory to provide Jif extension objects for atomic sections.
FabricNew_c  
FabricNodeFactory_c NodeFactory for fabric extension.
FabricUtil  
NewFabricArray_c  
NewFabricArrayJifExt_c  
RemoteWorkerGetter_c  
RetryStmt_c  
Worker_c  
 

Package fabric.ast Description

New AST nodes for the Fabric language extension. This package also includes with all of the node, extension, and delegate factories.

Extension Factory Classes

There are a number of factory classes associated with building the extension objects. As documented in the CC'03 Polyglot paper, there should be a separate extension object for each language extension. In the case of Fabric (which is an extension of Jif), a properly constructed fabric node should look as follows:

The node itself will be created by a FabricNodeFactory_c object, and the delegate will be created by a FabricDelFactory_c object, but the extension class factories are a little more complicated.

All of the extension factories implement the FabricExtFactory interface, even those that produce Jif extensions rather than FabricExt extensions. The FabricExtFactory interface simply designates a factory that is able to create extensions for all of the Fabric AST nodes.

The FabricJifExtFactory_c class is responsible for creating all of the Jif extensions in the diagram above. It is a simple extension of the JifExtFactory_c that is able to construct Jif extensions for atomic sections (and any other new AST nodes we may add).

The AbstractFabExtFactory_c class is a skeleton implementation of the FabricExtFactory interface that takes care of chaining extension objects together (much like the polyglot.ast.AbstractExtFactory_c and the jif.ast.AbstractJifExtFactory_c classes). It delegates the actual creation of the extension objects to extFooImpl() methods, which by default simply call the parent factory methods.

Finally, the FabricFabExtFactory_c class creates all of the FabricExt classes in the above diagram. It extends the AbstractFabExtFactory_c class and overrides some of the extFooImpl methods to create the actual extension objects used by fabric.

Here is a diagram showing how it all fits together: