See ../README.

The frontend is written in C++.  It can only be used in conjunction
with a full compiler backend.  Currently the backend interface has
been implemented with GCC (known as gccgo) and with LLVM (known as
GoLLVM).

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 the backend IR.  This is done via the
interface described in backend.h.  The backend must implement that
interface.  When used with GCC, the interface is implemented in
gcc/go/go-gcc.cc.

Source locations are represented using the interface described in
go-linemap.h.  The backend is expected to provide a header file
go-location.h that defines a Location type.

The frontend does not start by itself.  It expects something to call
go_create_gogo passing in a Backend and a Linemap, as well as other
options.  Then it expects something to call go_parse_input_files
passing in the input files.  Finally, a call to go_write_globals will
cause all global definitions to be written out via the Backend
interface.

The backend is expected to provide the functions defined at the
bottom of go-diagnostics.h: go_be_error_at, etc.  These will be used
for error messages.

This compiler works, but the code is a work in progress.  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
https://golang.org/doc/gccgo_contribute.html .

The master copy of these files is hosted at
https://go.googlesource.com/gofrontend .  There is a mirror at
https://github.com/golang/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
https://cla.developers.google.com/about/google-individual .  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
https://cla.developers.google.com/about/google-corporate .

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.
