| 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. |