111
|
1 See ../README.
|
|
2
|
145
|
3 The frontend is written in C++. It can only be used in conjunction
|
|
4 with a full compiler backend. Currently the backend interface has
|
|
5 been implemented with GCC (known as gccgo) and with LLVM (known as
|
|
6 GoLLVM).
|
111
|
7
|
|
8 The frontend lexes and parses the input into an IR specific to this
|
|
9 frontend known as gogo. It then runs a series of passes over the
|
|
10 code.
|
|
11
|
145
|
12 Finally it converts gogo to the backend IR. This is done via the
|
|
13 interface described in backend.h. The backend must implement that
|
|
14 interface. When used with GCC, the interface is implemented in
|
|
15 gcc/go/go-gcc.cc.
|
111
|
16
|
145
|
17 Source locations are represented using the interface described in
|
|
18 go-linemap.h. The backend is expected to provide a header file
|
|
19 go-location.h that defines a Location type.
|
111
|
20
|
145
|
21 The frontend does not start by itself. It expects something to call
|
|
22 go_create_gogo passing in a Backend and a Linemap, as well as other
|
|
23 options. Then it expects something to call go_parse_input_files
|
|
24 passing in the input files. Finally, a call to go_write_globals will
|
|
25 cause all global definitions to be written out via the Backend
|
|
26 interface.
|
111
|
27
|
145
|
28 The backend is expected to provide the functions defined at the
|
|
29 bottom of go-diagnostics.h: go_be_error_at, etc. These will be used
|
|
30 for error messages.
|
|
31
|
|
32 This compiler works, but the code is a work in progress. The frontend
|
|
33 pays little attention to its memory usage and rarely frees any memory.
|
|
34 The code could use a general cleanup which we have not had time to do.
|
111
|
35
|
|
36 Contributing
|
|
37 =============
|
|
38
|
|
39 To contribute patches to the files in this directory, please see
|
145
|
40 https://golang.org/doc/gccgo_contribute.html .
|
111
|
41
|
|
42 The master copy of these files is hosted at
|
145
|
43 https://go.googlesource.com/gofrontend . There is a mirror at
|
|
44 https://github.com/golang/gofrontend . Changes to these files require
|
111
|
45 signing a Google contributor license agreement. If you are the
|
|
46 copyright holder, you will need to agree to the individual contributor
|
145
|
47 https://cla.developers.google.com/about/google-individual . This
|
|
48 agreement can be completed online.
|
111
|
49
|
|
50 If your organization is the copyright holder, the organization will
|
|
51 need to agree to the corporate contributor license agreement at
|
145
|
52 https://cla.developers.google.com/about/google-corporate .
|
111
|
53
|
|
54 If the copyright holder for your code has already completed the
|
|
55 agreement in connection with another Google open source project, it
|
|
56 does not need to be completed again.
|