See ../README.

The frontend is written in C++.

The frontend lexes and parses the input into an IR specific to this
frontend known as gogo.  It then runs a series of passes over the
code.

Finally it converts gogo to gcc's GENERIC.  A goal is to move the gcc
support code into a gcc-interface subdirectory.  The gcc code will be
put under the GPL.  The rest of the frontend will not include any gcc
header files.

Issues to be faced in this transition:

* Representation of source locations.
  + Currently the frontend uses gcc's source_location codes, using the
    interface in libcpp/line-map.h.

* Handling of error messages.
  + Currently the frontend uses gcc's error_at and warning_at
    functions.
  + Currently the frontend uses gcc's diagnostic formatter, using
    features such as %<%> for appropriate quoting.
  + Localization may be an issue.

This compiler works, but the code is a work in progress.  Notably, the
support for garbage collection is ineffective and needs a complete
rethinking.  The frontend pays little attention to its memory usage
and rarely frees any memory.  The code could use a general cleanup
which we have not had time to do.

Contributing
=============

To contribute patches to the files in this directory, please see
http://golang.org/doc/gccgo_contribute.html .

The master copy of these files is hosted at
http://code.google.com/p/gofrontend .  Changes to these files require
signing a Google contributor license agreement.  If you are the
copyright holder, you will need to agree to the individual contributor
license agreement at
http://code.google.com/legal/individual-cla-v1.0.html.  This agreement
can be completed online.

If your organization is the copyright holder, the organization will
need to agree to the corporate contributor license agreement at
http://code.google.com/legal/corporate-cla-v1.0.html.

If the copyright holder for your code has already completed the
agreement in connection with another Google open source project, it
does not need to be completed again.
