package com.sun.tools.javac.comp; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ElementVisitor; import javax.lang.model.element.RPLElementElement; import javax.lang.model.util.ElementScanner6; import javax.lang.model.util.SimpleElementVisitor6; import com.sun.source.tree.RegionTree; import com.sun.source.tree.Tree; import com.sun.source.tree.TreeVisitor; import com.sun.source.util.SimpleTreeVisitor; import com.sun.tools.javac.code.Flags; import com.sun.tools.javac.code.Kinds; import com.sun.tools.javac.code.RPL; import com.sun.tools.javac.code.RPLElement; import com.sun.tools.javac.code.Symtab; import com.sun.tools.javac.code.Symbol.RegionNameSymbol; import com.sun.tools.javac.code.Symbol.VarSymbol; import com.sun.tools.javac.parser.Lexer; import com.sun.tools.javac.parser.Parser; import com.sun.tools.javac.parser.Token; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.Pretty; import com.sun.tools.javac.tree.TreeCopier; import com.sun.tools.javac.tree.TreeMaker; import com.sun.tools.javac.tree.TreeTranslator; import com.sun.tools.javac.tree.JCTree.DPJParamInfo; import com.sun.tools.javac.tree.JCTree.DPJRegionPathListElt; import com.sun.tools.javac.tree.JCTree.JCIdent; import com.sun.tools.javac.tree.JCTree.DPJRegionDecl; import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.util.Name; /** * <h1>DPJ Change Log</h1> * * <i>This is a comprehensive list of changes made to implement Deterministic * Parallel Java on javac. Note that adding or modifying AST nodes requires * changing many other classes, such as {@link TreeCopier} and {@link Pretty}, * which are not listed here since the changes are uninteresting.</i> * * <h1>Spring, 2008</h1> * * <h2>Field region declarations (4/1/2008, 4/8)</h2> * <ul> * <li> Reserved "region" and "under" as keywords: * {@link Token#REGION}, * {@link Token#UNDER} * <li> Modified parser: * {@link Parser#classOrInterfaceBodyDeclaration}, * descends to {@link Parser#regionDeclaration} and {@link Parser#singleRegionPhrase} * <li> New AST node: * {@link RegionTree}, * {@link Tree.Kind#REGION}, * {@link TreeVisitor#visitRegion(RegionTree, Object)}, * {@link SimpleTreeVisitor#visitRegion(RegionTree, Object)}, * {@link com.sun.source.util.TreeScanner#visitRegion(RegionTree, Object)}, * {@link JCTree#REGIONDEF}, * {@link DPJRegionDecl}, * {@link JCTree.Visitor#visitRegionDecl}, * {@link Pretty#visitRegionDecl(DPJRegionDecl)}, * {@link TreeCopier#visitRegion(RegionTree, Object)}, * {@link TreeMaker#RegionDecl(com.sun.tools.javac.tree.JCTree.JCModifiers, com.sun.tools.javac.util.Name, com.sun.tools.javac.tree.JCTree.JCIdent)}, * {@link TreeTranslator#visitRegionDecl(DPJRegionDecl)} * {@link Attr#visitRegionDecl(DPJRegionDecl)} * <li> New symbol table entry type: * {@link RegionNameSymbol}, * {@link Kinds#RPL_ELT}, * {@link Kinds#ABSENT_REGION}, * {@link MemberEnter#visitRegionDecl(DPJRegionDecl)}, * {@link ElementKind#FIELD_RPL_ELEMENT}, * {@link ElementKind#LOCAL_RPL_ELEMENT}, * {@link RPLElementElement}, * {@link ElementVisitor#visitRPLElement(javax.lang.model.element.RPLElementElement, Object)}, * {@link ElementScanner6#visitRPLElement(RPLElementElement, Object)}, * {@link SimpleElementVisitor6#visitRPLElement(RPLElementElement, Object)} * <ul><li>The ordering in {@link Kinds} matters; every value greater than * {@link Kinds#ERRONEOUS} is treated as an erroneous value.</ul> * <li> Region symbol lookup: * {@link Attr#checkId(JCTree, com.sun.tools.javac.code.Type, com.sun.tools.javac.code.Symbol, Env, int, com.sun.tools.javac.code.Type, boolean)}, * {@link Resolve#regionNotFound}, * {@link Resolve#findFieldRegion(Env, com.sun.tools.javac.code.Type, com.sun.tools.javac.util.Name, com.sun.tools.javac.code.Symbol.TypeSymbol)}, * {@link Resolve#findRegion(Env, com.sun.tools.javac.util.Name)}, * {@link Resolve#absentKindName(int)}, * added "region" kind name string to compiler.properties/compiler_ja.properties/compiler_zh_CN.properties, * {@link Resolve.ResolveError#exists()} * <li> Set modifiers permitted on field region declarations: * {@link Flags#RegionFlags}, * {@link Flags#InterfaceRegionFlags}, * {@link Flags#LocalRegionFlags}, * {@link Check#checkFlags(com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition, long, com.sun.tools.javac.code.Symbol, JCTree)} * <li> Check for no cyclic region nesting: * {@link Check#checkNonCyclic(com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition, com.sun.tools.javac.code.Symbol.RegionNameSymbol)}, * added error message to compiler.properties/compiler_ja.properties/compiler_zh_CN.properties * </ul> * * <h2>Region annotations on field/variable declarations (4/8)</h2> * <ul> * <li> Modified parser: * {@link Parser#variableDeclaratorRest}, * {@link Parser#variableDeclaratorId}; * both descend to {@link Parser#regionOpt} * <li> Modified AST node for variables: * {@link JCVariableDecl#rgn}, * {@link JCTree.Factory#VarDef}, * {@link Pretty#visitVarDef(JCVariableDecl)}, * {@link TreeCopier#visitVariable(com.sun.source.tree.VariableTree, Object)}, * {@link TreeMaker#VarDef(com.sun.tools.javac.tree.JCTree.JCModifiers, com.sun.tools.javac.util.Name, com.sun.tools.javac.tree.JCTree.JCIdent, com.sun.tools.javac.tree.JCTree.JCExpression, com.sun.tools.javac.tree.JCTree.JCExpression)}, * {@link com.sun.tools.javac.tree.TreeScanner#visitVarDef(JCVariableDecl)} * <li> Added region field to variables in symbol table: * {@link VarSymbol#rgn}, * {@link Attr#visitVarDef(com.sun.tools.javac.tree.JCTree.JCVariableDecl)} * <li> Added declaration of Root region - {@link Symtab#rootRegion} * and declared it in the predefined class (see {@link Symtab} ctor) * </ul> * * <h2>Effect declarations</h2> * <ul> * <li> Reserved "reads" and "writes" as keywords: * {@link Token#READS}, * {@link Token#WRITES} * </ul> * * <h2>Effect checking</h2> * <ul> * <li> Replaced {@link Attr} singleton with DPJAttr: * {@link Attr#instance(com.sun.tools.javac.util.Context)} * </ul> * * <hr></hr> * * <h1>Fall, 2008</h1> * * <h2>Region/effect checking (9/11-12/08)</h2> * <ul> * <li> Renamed RegionSymbol to {@link RegionNameSymbol} * <li> Created {@link RPL} and {@link RPLElement} and created {@link RPLElement} hierarchy * <li> Changed {@link DPJRegionPathListElt} to store {@link JCIdent}s instead of {@link Name}s * (to facilitate idiomatic usage of {@link Attr#attribTree(JCTree, Env, int, com.sun.tools.javac.code.Type)} * <li> Similarly changed {@link DPJParamInfo} to use {@link JCIdent} * <li> Implemented {@link Enter#visitRegionParameter(com.sun.tools.javac.tree.JCTree.DPJRegionParameter)} * <li> Augmented {@link Enter#visitClassDef(com.sun.tools.javac.tree.JCTree.JCClassDecl)} to enter region parameters * <li> Modified {@link Attr#check(JCTree, com.sun.tools.javac.code.Type, int, int, com.sun.tools.javac.code.Type)} * to correctly treat REGION_PARAM as a sub-kind of REGION * <li> Added declaration of Local region - {@link Symtab#localElement} * and declared it in the predefined class (see {@link Symtab} ctor) * <li> Added region parameter handling to * {@link MemberEnter#complete(com.sun.tools.javac.code.Symbol)} * and {@link MemberEnter#signature(com.sun.tools.javac.util.List, com.sun.tools.javac.util.List, JCTree, com.sun.tools.javac.util.List, com.sun.tools.javac.tree.JCTree.DPJMethodEffects, Env)} * <li> Modified MemberEnter#baseEnv to include region parameters so that extends and implements clauses will validate * </ul> * * @author Jeff Overbey */ public class DPJChanges { // DPJ private DPJChanges() { } }