This file documents the changes made in version 2.2 of M3TK. All of the packages with interface changes have had their version number increased. m3tk-ast.2.2 ------------ The major change is the addition of a "SCOPE" class to the semantic view, M3AST_SM. This class is "multiply inherited" by designated AST nodes, e.g. a "Block". The scope class carries the "DEF_ID" nodes that this scope introduces, plus a reference to the outer level scope(s). There is a new interface M3ASTScope which is intended to be used in conjunction with the tree walker to maintain the "current" scope. It provides a "Lookup" procedure to resolve a "USED_ID" in a scope. One use for this is in resolving identifier occurrences in pragmas. Some of the interface names have been rationalised. In particular there are now "operation" views where methods are added to the AST nodes. M3ASTOp_AS adds the overrides for the standard tree-walk, iterate, display. etc methods. This used to be named M3AST_AS_M which was wrong because the "_M" suffix is supposed to be used when access to the attributes is via methods rather than directly via object fields. A new interface M3ASTOp_SM defines some methods applicable to semantic analysis and represents a first step in making this part of the toolkit more object oriented. m3tk-sem.2.3 ------------ The pragma store is now copied during a generic instantiation. A couple of obscure bugs have been fixed. m3tk-toolmisc.2.2 ----------------- An "M3Context.T" is now defined to be a subtype of a "Property.Set", which permits the association of context specific data. "M3Error" now provides for any number of callbacks to receive a notification that an error has been reported, and these are object types, not procedure variables. The code in "M3CUnit" that checks for timestamps being in the future has been changed to report a warning rather than an error. m3tk-fe.2.2 ----------- "M3CGoList" supports any number of callbacks notifying that a unit is being compiled, and these are object types, not procedure variables. A significant change is the addition of a "pathNames" list to "CompileUnitsInContext". The "interfaces" and "modules" arguments are now expected to be unit names to be looked up on the search path; specific files can be compiled via the "pathNames" list. "M3CFETool" has been updated to support a "PathNames" keyword and this has been designated the optional keyword argument rather than "Modules". The net effect of this is that "-Modules Foo.i3" will now generate an error and "-PathNames dir/Foo.i3" will compile "dir/Foo.i3", regardless of whether "dir" exists on the seach path. In particular, "m3tool Foo" will do nothing, since "Foo" is assumed to be a pathname and does not have an M3 extension. To get the old effect, use "m3tool -Modules Foo". m3tk-toolframe.2.2 ------------------ The AST cache tool has an additional argument to remove (discard) MODULE ASTs from a context, after semantic analysis (and any registered compiler extensions) have executed. This uses the notification callback mechanism of "M3CGoList". m3tk-warn.2.1 ------------- There is a new unit, "M3CChkObsolete", which warns about the use of declarations marked <*OBSOLETE*>. The exception warning code now supports the <*FATAL*> pragma (made straightforward owing to the "SCOPE" class). m3tk-pl.2.2 ----------- The interface to "M3LTypeCodes" has alter to optionally allow all TYPE_SPEC nodes to participate in the algorithm, instead of just the types reachable from the references types. The generation of canonical TEXTs representing TYPE_SPECs and their associated fingerprints has been made optional. m3tk-chartool.2.2 ----------------- A new tool contributed by Mike Spreitzer of Xerox PARC CSL, with a little help from me. It warns about code that might be dependent on the number of elements in the CHAR enumeration. There is documentation in the "doc" subdirectory. The tool is included in the "m3fe" and "m3check" applications. m3tk-chkusatool.2.2 ------------------- This is really a debugging aid for tool implementors. It reports on "unset" attributes in an AST, where "unset" is typically an AST-view specific notion, captured by the "checkUnset" method defined in "M3ASTOp_SM". In a legal M3 program. m3tk-app-*.2.2 -------------- All the applications have had their manual entries modified so that they "include" the relevant sections from the tool library packages. This results in a more consistency and makes it easier to create an accurate manual page for a new tool. Since all the applications are built against the 2.2 library, the user interface changes with respect the "Interfaces", "Modules" and "PathNames" keywords discussed in m3tk-fe.2.2 apply. Mick Jordan, October 21 1992