Johannes Martinsson created THRIFT-2955:
-------------------------------------------

             Summary: Using list of typedefs does not compile
                 Key: THRIFT-2955
                 URL: https://issues.apache.org/jira/browse/THRIFT-2955
             Project: Thrift
          Issue Type: Bug
          Components: Go - Compiler
    Affects Versions: 0.9.2
         Environment: Using golang 1.4 on linux/amd64
            Reporter: Johannes Martinsson


Using a list with a typedefed value in a struct does not generate compilable
Go code.

Here is a small example definition which generates uncompilable code on at
least 0.9.2 and git master (as of the reporting of this issue).

{code:thrift}
namespace go poc
typedef i64 X
struct Y {
        1: list<X> xs
}
{code}

I've extracted some of the relevant snippets of code from the generated Go
code.

{code:go}
type X int64

type Y struct {
        Xs []int64 `thrift:"xs,1" json:"xs"`
}

func (p *Y) ReadField1(ipot thrift.TProtocol) error {
        tSlice := make([]int64, 0, size)
        for i := 0; i < size; i++ {
                var _elem0 X
                // _elem0 declared as X above
                // [...]
                        temp := X(v)
                        _elem0 = temp
                // [...]
                // Trying to append _elem0 (of type X) to p.Xs of type []int64
                p.Xs = append(p.Xs, _elem0)
        }
}
{code}

The issue is that the code is trying to append the typedefed type to a list of
the underlying type. I.e. appending {{X}} to a list of {{int64}}.

Smallest code change to make the generated code work is to cast {{_elem0}} to
{{int64}} in the {{append}} operation. However it might be better to actually
have {{p.Xs}} be of type {{[]X}} rather than {{[]int64}}.

(Currently I'm manually patching my generated Go code with type casts before 
appending to these lists.)




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to