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