[fidl][go] Add support for recursive types in go. [1/2]

Next: Iacde292e443d2a0e2211a2cfc08d4d048134f3da

In order to do this, all marshalers are converted to references, so that
they may be included in recursive definitions (structs, xunions, etc),
and so that they can be stored in a single, global store to cut down on
memory usage (this store will be added in a future CL).

Additionally, the mStructUnsafeCopy marshaler is removed.  This is
because the marshaler type must now be finally decided before recursive
descent through the definition begins, otherwise nested recursive
definitions may end up pointing to different marshalers than their
parents.  Because mStructUnsafeCopy could only be allocated once all of
a structs fields have been visited, it will never be used in this new
setup.  Instead, the mStruct marshaler gets a new useUnsafeCopy field,
similar to mVector, which can be checked during calls to [un]marshal()
to confirm that an unsafe copy can be performed.

Bug: 38191
Test: fidldev test go (w/ next CL on fuchsia.git included)
Change-Id: I89863ed0f975d7c190a0281cfcf71e7de9834d9c
Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/go/+/461074
Reviewed-by: Pascal Perez <pascallouis@google.com>
Commit-Queue: Alex Zaslavsky <azaslavsky@google.com>
4 files changed
tree: ce96a2ab8539b5e0a46dde5f92eeddfcd6e1210f
  1. .github/
  2. api/
  3. doc/
  4. lib/
  5. makefuchsia/
  6. makeroot/
  7. meta/
  8. misc/
  9. src/
  10. test/
  11. .gitattributes
  12. .gitignore
  13. AUTHORS
  14. BUILD.gn
  15. CONTRIBUTING.md
  16. CONTRIBUTORS
  17. favicon.ico
  18. LICENSE
  19. PATENTS
  20. README.md
  21. regen-fidl
  22. regen-syscalls
  23. robots.txt
  24. SECURITY.md
  25. VERSION
README.md

The Go Programming Language

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

Gopher image Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.

Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.

Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.

Download and Install

Binary Distributions

Official binary distributions are available at https://golang.org/dl/.

After downloading a binary release, visit https://golang.org/doc/install or load doc/install.html in your web browser for installation instructions.

Install From Source

If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source or load doc/install-source.html in your web browser for source installation instructions.

Contributing

Go is the work of thousands of contributors. We appreciate your help!

To contribute, please read the contribution guidelines: https://golang.org/doc/contribute.html

Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.