You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/05/06 21:24:29 UTC

[1/2] lucy-clownfish git commit: Modify Go proof-of-concept design.

Repository: lucy-clownfish
Updated Branches:
  refs/heads/master c911cd66b -> f26da1edf


Modify Go proof-of-concept design.

*   Make structs public: `FooIMP` instead of `implFoo`.
*   Embed parent structs.
*   Make `ref` a `uintptr` instead of a pointer to a C type.
*   Add the INITOBJ method to ObjIMP.
*   Use one finalizer and call SetFinalizer from only one location.
*   Implement TOPTR() only once.


Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/6bacb27e
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/6bacb27e
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/6bacb27e

Branch: refs/heads/master
Commit: 6bacb27eb9f5f0cd0ac9aaa8c7cedc5336560c17
Parents: aab0146
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Mon Apr 27 18:51:10 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Fri May 1 18:41:29 2015 -0700

----------------------------------------------------------------------
 runtime/go/clownfish/clownfish.go | 79 ++++++++++++++++------------------
 1 file changed, 38 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/6bacb27e/runtime/go/clownfish/clownfish.go
----------------------------------------------------------------------
diff --git a/runtime/go/clownfish/clownfish.go b/runtime/go/clownfish/clownfish.go
index 626633f..d4b61e7 100644
--- a/runtime/go/clownfish/clownfish.go
+++ b/runtime/go/clownfish/clownfish.go
@@ -72,8 +72,8 @@ type Obj interface {
 	TOPTR() uintptr
 }
 
-type implObj struct {
-	ref *C.cfish_Obj
+type ObjIMP struct {
+	ref uintptr
 }
 
 type Err interface {
@@ -81,40 +81,40 @@ type Err interface {
 	Error() string
 }
 
-type implErr struct {
-	ref *C.cfish_Err
+type ErrIMP struct {
+	ObjIMP
 }
 
 type String interface {
 	Obj
 }
 
-type implString struct {
-	ref *C.cfish_String
+type StringIMP struct {
+	ObjIMP
 }
 
-type implByteBuf struct {
-	ref *C.cfish_ByteBuf
+type ByteBufIMP struct {
+	ObjIMP
 }
 
-type implHash struct {
-	ref *C.cfish_Hash
+type HashIMP struct {
+	ObjIMP
 }
 
-type implVector struct {
-	ref *C.cfish_Vector
+type VectorIMP struct {
+	ObjIMP
 }
 
-type implClass struct {
-	ref *C.cfish_Class
+type ClassIMP struct {
+	ObjIMP
 }
 
-type implMethod struct {
-	ref *C.cfish_Method
+type MethodIMP struct {
+	ObjIMP
 }
 
-type implLockFreeRegistry struct {
-	ref *C.cfish_LockFreeRegistry
+type LockFreeRegistryIMP struct {
+	ObjIMP
 }
 
 func NewString(goString string) String {
@@ -124,19 +124,24 @@ func NewString(goString string) String {
 	return WRAPString(unsafe.Pointer(cfObj))
 }
 
-func WRAPString(ptr unsafe.Pointer) String {
-	obj := &implString{((*C.cfish_String)(ptr))}
-	runtime.SetFinalizer(obj, (*implString).finalize)
-	return obj
+func (o *ObjIMP) INITOBJ(ptr unsafe.Pointer) {
+	o.ref = uintptr(ptr)
+	runtime.SetFinalizer(o, ClearRef)
+}
+
+func ClearRef (o *ObjIMP) {
+	C.cfish_dec_refcount(unsafe.Pointer(o.ref))
+	o.ref = 0
 }
 
-func (obj *implString) finalize() {
-	C.cfish_dec_refcount(unsafe.Pointer(obj.ref))
-	obj.ref = nil
+func (o *ObjIMP) TOPTR() uintptr {
+	return o.ref
 }
 
-func (obj *implString) TOPTR() uintptr {
-	return uintptr(unsafe.Pointer(obj.ref))
+func WRAPString(ptr unsafe.Pointer) String {
+	s := &StringIMP{}
+	s.INITOBJ(ptr)
+	return s
 }
 
 func CFStringToGo(ptr unsafe.Pointer) string {
@@ -162,22 +167,14 @@ func NewErr(mess string) Err {
 }
 
 func WRAPErr(ptr unsafe.Pointer) Err {
-	obj := &implErr{((*C.cfish_Err)(ptr))}
-	runtime.SetFinalizer(obj, (*implErr).finalize)
-	return obj
-}
-
-func (obj *implErr) finalize() {
-	C.cfish_dec_refcount(unsafe.Pointer(obj.ref))
-	obj.ref = nil
-}
-
-func (obj *implErr) TOPTR() uintptr {
-	return uintptr(unsafe.Pointer(obj.ref))
+	e := &ErrIMP{}
+	e.INITOBJ(ptr)
+	return e
 }
 
-func (obj *implErr) Error() string {
-	return CFStringToGo(unsafe.Pointer(C.CFISH_Err_Get_Mess(obj.ref)))
+func (e *ErrIMP) Error() string {
+	mess := C.CFISH_Err_Get_Mess((*C.cfish_Err)(unsafe.Pointer(e.ref)))
+	return CFStringToGo(unsafe.Pointer(mess))
 }
 
 //export GoCfish_PanicErr_internal


[2/2] lucy-clownfish git commit: Merge branch 'CLOWNFISH-28-POC-Go-v4'.

Posted by ma...@apache.org.
Merge branch 'CLOWNFISH-28-POC-Go-v4'.

Modify the proof-of-concept Go bindings to facilitate an implementation
with better code generation.

This closes #13.


Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/f26da1ed
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/f26da1ed
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/f26da1ed

Branch: refs/heads/master
Commit: f26da1edf2dc26d22f9dd130408ff5ba9f65cecd
Parents: c911cd6 6bacb27
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Wed May 6 12:15:58 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Wed May 6 12:15:58 2015 -0700

----------------------------------------------------------------------
 runtime/go/clownfish/clownfish.go | 79 ++++++++++++++++------------------
 1 file changed, 38 insertions(+), 41 deletions(-)
----------------------------------------------------------------------