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(-)
----------------------------------------------------------------------