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.