Polyglot Change Log
===================

This file documents changes between releases of Polyglot.

Jul 5, 2005: Polyglot 1.3.2
===========================
  What's new since Polyglot 1.3.1:
  --------------------------------
    Miscellaneous bug fixes with method lookup.

    Changed implementation of polyglot.util.Base64 to allow relicensing.

    Certain files in the distribution are now licensed under the Eclipse Public 
    License as well as LGPL.  See the README for more details.


Mar 24, 2005: Polyglot 1.3.1
============================
  What's new since Polyglot 1.3.0:
  --------------------------------
    Miscellaneous bug fixes with operator precedence, lexing,
    pass scheduling, data flow, class loading.

    Added -j to jlc script to allow options to be passed to the VM.
    For example, 'jlc -j -Xmx512m -ext pao' will pass -Xmx512m to the VM.
  
    Added method Position.compilerGenerated(), which creates a Position
    object for the line number in the compiler that called
    Position.compilerGenerated().  
 
    TypeSystem.packageForName can now throw a SemanticException.
    TypeSystem.createPackage implements the old behavior.


Jul 30, 2004: Polyglot 1.3.0
============================
  What's new since Polyglot 1.2.0:
  --------------------------------
    Miscellaneous bug fixes in data flow, class loading, constant folding,
    and other areas.

    Faster data flow analysis.

    Improved error recovery in the Java parser and in ErrorHandlingVisitor.

    Added some simple statistics reporting enabled from the command-line
    with "jlc -report time=1".

    Improvements to the Polyglot Test Harness (PTH): results are saved
    after each file, permitting a test run to be aborted and resumed
    later more easily.

    Language extensions can now compile files with different file
    extensions, e.g., ".jl" and ".java".

    Rewrote the Java lexer to avoid licensing problems.


Apr 9, 2004: Polyglot 1.2.0
============================
  What's new since Polyglot 1.1.1:
  --------------------------------
    Miscellaneous bug fixes. 

    The class polyglot.util.Position can now record end column and
    line numbers. The CUP or PPG grammar file is responsible for
    setting the position for AST nodes correctly (for an example, see
    the file src/polyglot/ext/jl/parse/java12.cup). Support is however
    required from the lexer. If your extension uses a PPG file that
    extends the file java12.cup, you should be able to take advantage
    of the end positions by modifying your JFlex file to record end
    positions, as done in src/polyglot/ext/jl/parse/java.flex. The
    changes are backwards compatible: if your JFlex file does not
    record end positions, the functionality of Positions will be the
    same as in the previous release. Thanks to Ondrej Lhotak and
    Jennifer Lhotak for suggesting this change, and providing the code
    for it.

    pth (Polyglot Test Harness) is a small tool to assist in automated
    regression testing of Polyglot extensions. See the file
    tools/pth/README for more information.

    Illegal forward references now detected.

    Control flow graph for binary and unary operators is now more
    precise, permitting more precise dataflow analyses.

    The signature for the methods findMethod, findConstructor, and
    findMemberClass, in polyglot.types.TypeSystem have changed; old
    versions of these methods are still present but deprecated.


Dec 18, 2003: Polyglot 1.1.1
============================
  What's new since Polyglot 1.1.0:
  --------------------------------
    Bug fixes in initialization checking.
    
    Refactored data flow slightly to allow subclasses to have more control of
    the confluence operation.  Legacy behavior is maintained, so no
    subclass will be invalidated by this change.

    Made Term_c.acceptCFG() abstract to force new Terms to implement
    it rather than using the default implementation.

    Added some accessors for private/protected fields.  Made some
    package-scoped fields protected.



Nov 19, 2003: Polyglot 1.1.0
============================
  What's new since Polyglot 1.0.1:
  --------------------------------
    Numerous changes have been made to improve the performance of
    Polyglot.  It is now more efficient, especially when compiling
    large code bases.

    The scheduling of passes run on source files has been modified to
    take advantage of more precise dependencies between source files.
    This allows for more efficient scheduling.  See
    polyglot.frontend.AbstractExtensionInfo for more details.

    A global barrier pass has been added to facilitate whole program
    analyses.  See polyglot.frontend.GlobalBarrierPass for more
    information.

    The dataflow framework (polyglot.visit.DataFlow) has been modified
    to allow dataflow upon either entering or leaving a code
    declaration.  This allows the results of dataflow analyses to be
    available when visiting the AST nodes inside a code
    declaration.  The default (and legacy) behavior is to perform
    dataflow upon leaving a code declaration.

    The serialized type information that Polyglot produces in output
    files is now encoded in base 64, which reduces the size and improves
    the readability of the Java output files.  Class files compiled with
    previous versions of Polyglot are not readable with Polyglot 1.1.

    Serialized type information for member classes is now stored as a
    field in the member class itself, instead of as part of the
    serialized type information of the top level class that contains
    the nested class.  This resolves a circular dependency bug in
    class loading.

    Terms record whether or not they are reachable, as this
    information is useful in later passes.  The ReachChecker visitor
    sets this information.

    The reachability pass is now performed before the exception
    checking pass, making exception checking more precise.

    A utility class PolyglotAntTask (in $POLYGLOT/tools) facilitates
    the compilation of language extensions in the ANT framework.

    PPG now passes through precedence modifiers to JavaCUP.

    Numerous bug fixes, including:
      - numeric conversions of short, int, etc.
      - constant folding
      - nested classes
      - imported class lookup
      - code generation


  Converting existing extensions:
  -------------------------------
    Terms must now have methods to access and record reachability
    information.  If you have defined AST nodes that do not extend
    polyglot.ext.jl.ast.Term_c, you may need to modify them.  See
    polyglot.ast.Term and polyglot.ext.jl.ast.Term_c for
    information/examples.
 
    ParsedClassTypes now record from which source they were parsed
    from, if they were parsed during the current compilation.  If you
    have defined ParsedClassTypes that do not extend
    polyglot.ext.jl.types.ParsedClassType_c, you may need to modify
    them.

    The signature for the class polyglot.types.TypeSystem has changed.
      * void initialize(LoadedClassResolver loadedResolver)
        has changed to
        void initialize(LoadedClassResolver loadedResolver,
                        ExtensionInfo extInfo)

      * ParsedClassType createClassType(LazyClassInitializer init)
        has changed to
        ParsedClassType createClassType(LazyClassInitializer init,
                        Source fromSource)

      If you have overridden these methods in a subclass of
      polyglot.ext.jl.types.TypeSystem_c, you should change your
      method signatures.



Aug 18, 2003: Polyglot 1.0.1
============================
  What's new since Polyglot 1.0.0:
  --------------------------------
    Bug fixes:
      - "import" declarations now import member classes.
      - Detect uses of "this" in a static context.
      - Detect multiply-defined local variables.
      - Detect circular constructor invocations.
      - Fixed bugs with Node.childExpectedType for arithmetic expressions.
      - Fixed bugs with data-flow analysis through local and anonymous
        classes.
      - Renamed some protected methods in Context_c to avoid some
        confusion.



Jul 8, 2003: Polyglot 1.0.0
===========================
  What's new since Polyglot 0.9.5:
  --------------------------------
    We have changed the license from GPL to LGPL.  This should allow
    more flexibility in licensing extensions to Java.

    Many bugs in the base compiler have been fixed.

    Node factories have been redesigned to be more extensible.
    Existing subclasses of the base compiler node and extension
    factories may need to be modified.

    The quasiquoting interface has been changed to be easier to use.

    New AST node types for local, field, and array assignment were
    added.  Distinguishing the type of the left-hand-side permits
    easier implementation of data-flow analyses.

    The data-flow analysis framework was reworked to permit more
    precise analyses.
