tree 9a16e11faef2ab517841d0725898cbce8d3073d9
parent 1ea144a99d3b42f63f68643bca5aa230eade9114
author Todd Wang <toddw@google.com> 1418896354 -0800
committer Todd Wang <toddw@google.com> 1418896360 -0800

veyron2/vdl: Change vdl error syntax, and rename oneof to union.

The old vdl error syntax made errors look like return args:
  type Arith interface {
    Add(x, y int32) (int32, error)
  }

While this is natural for Go, this is unnatural for languages
that use exceptions for error-handling, e.g. Java{,script}.  In
the languages that use exceptions, an even more troubling issue
is that the exception and return args are exclusive; you can only
have one or the other.  The Go-style errors allow both return
args and a non-nil error.

This is step 1 of the change to remedy the situation.  In this
step we change the syntax of VDL errors.  Here are some examples:
  type Arith interface {
    One(x int32) error
    Two(x int32) (string | error)
    Three(x int32) (a, b string | error)
  }

The rule is that every method must have an "error clause".  If
you have no return args, this looks just like it used to look.
If you have one or more return args, you use "|" to separate the
return args from the error clause.  The error clause may not be
named; it's always just "error".

The compiled output and code-generation remains the same for now;
we'll fix those in more focused follow-on CLs.

Since we're already messing with VDL syntax, this CL also renames
"oneof" to "union" in the VDL type system.  Only the Go code has
been updated; the Java and Javascript code will be updated
separately.

Change-Id: Ib373661ffd77585f9e9573a6cf484011d3a42935
MultiPart: 1/8
