(toName, fromName string, t types.Type, mode varMode)
| 923 | } |
| 924 | |
| 925 | func (g *JavaGen) genCToJava(toName, fromName string, t types.Type, mode varMode) { |
| 926 | switch t := types.Unalias(t).(type) { |
| 927 | case *types.Basic: |
| 928 | switch t.Kind() { |
| 929 | case types.String: |
| 930 | g.Printf("jstring %s = go_seq_to_java_string(env, %s);\n", toName, fromName) |
| 931 | case types.Bool: |
| 932 | g.Printf("jboolean %s = %s ? JNI_TRUE : JNI_FALSE;\n", toName, fromName) |
| 933 | default: |
| 934 | g.Printf("%s %s = (%s)%s;\n", g.jniType(t), toName, g.jniType(t), fromName) |
| 935 | } |
| 936 | case *types.Slice: |
| 937 | if isBytesSlice(t) { |
| 938 | g.Printf("jbyteArray %s = go_seq_to_java_bytearray(env, %s, %d);\n", toName, fromName, toCFlag(mode == modeRetained)) |
| 939 | return |
| 940 | } |
| 941 | g.errorf("unsupported type: %s", t) |
| 942 | case *types.Pointer: |
| 943 | // TODO(crawshaw): test *int |
| 944 | // TODO(crawshaw): test **Generator |
| 945 | switch t := types.Unalias(t.Elem()).(type) { |
| 946 | case *types.Named: |
| 947 | g.genFromRefnum(toName, fromName, t, t.Obj()) |
| 948 | default: |
| 949 | g.errorf("unsupported type %s", t) |
| 950 | } |
| 951 | case *types.Named: |
| 952 | switch t.Underlying().(type) { |
| 953 | case *types.Interface, *types.Pointer: |
| 954 | g.genFromRefnum(toName, fromName, t, t.Obj()) |
| 955 | default: |
| 956 | g.errorf("unsupported, direct named type %s", t) |
| 957 | } |
| 958 | default: |
| 959 | g.Printf("%s %s = (%s)%s;\n", g.jniType(t), toName, g.jniType(t), fromName) |
| 960 | } |
| 961 | } |
| 962 | |
| 963 | func (g *JavaGen) genFromRefnum(toName, fromName string, t types.Type, o *types.TypeName) { |
| 964 | oPkg := o.Pkg() |
no test coverage detected