bind: support exported variables

basic types, struct*, interface.

TODO: error, non-pointer struct, pointer basic types, slice of bytes.

Update golang/go#12475.

Change-Id: I5ff91059b1f963b0cadb6f76cb0e12f7b6b98718
Reviewed-on: https://go-review.googlesource.com/15340
Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
Hyang-Ah (Hana) Kim
2015-10-07 20:48:45 +00:00
committed by Hyang-Ah Hana Kim
parent 7fe809f8e0
commit 45ed283c80
16 changed files with 1166 additions and 6 deletions
+28
View File
@@ -33,6 +33,34 @@ public class SeqTest extends AndroidTestCase {
assertEquals("const MaxFloat32", 3.40282346638528859811704183484516925440e+38, Testpkg.MaxFloat32, 0.0001);
assertEquals("const Log2E", 1/0.693147180559945309417232121458176568075500134360255254120680009, Testpkg.Log2E, 0.0001);
}
public void testVar() {
assertEquals("var StringVar", "a string var", Testpkg.getStringVar());
String newStringVar = "a new string var";
Testpkg.setStringVar(newStringVar);
assertEquals("var StringVar", newStringVar, Testpkg.getStringVar());
assertEquals("var IntVar", 77, Testpkg.getIntVar());
long newIntVar = 777;
Testpkg.setIntVar(newIntVar);
assertEquals("var IntVar", newIntVar, Testpkg.getIntVar());
Testpkg.S s0 = Testpkg.getStructVar();
assertEquals("var StructVar", "a struct var", s0.String());
Testpkg.S s1 = Testpkg.New();
Testpkg.setStructVar(s1);
assertEquals("var StructVar", s1.String(), Testpkg.getStructVar().String());
// TODO(hyangah): handle nil return value (translate to null)
AnI obj = new AnI();
obj.name = "this is an I";
Testpkg.setInterfaceVar(obj);
assertEquals("var InterfaceVar", obj.String(), Testpkg.getInterfaceVar().String());
}
public void testAssets() {
String want = "Hello, Assets.\n";
String got = Testpkg.ReadAsset();
+10 -1
View File
@@ -39,6 +39,13 @@ const (
Log2E = math.Log2E
)
var (
StringVar = "a string var"
IntVar = 77
StructVar = &S{name: "a struct var"}
InterfaceVar I
)
type I interface {
F()
@@ -104,8 +111,10 @@ func finalizeInner(a *int) {
numSCollected++
}
var seq = 0
func New() *S {
s := &S{innerObj: new(int), name: "new"}
s := &S{innerObj: new(int), name: fmt.Sprintf("new%d", seq)}
runtime.SetFinalizer(s.innerObj, finalizeInner)
return s
}