57 lines
2.3 KiB
Plaintext
57 lines
2.3 KiB
Plaintext
|
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.
|