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 2011/02/03 20:48:55 UTC
[lucy-commits] svn commit: r1066927 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs
lib/Clownfish/Symbol.pm src/CFCSymbol.c src/CFCSymbol.h
Author: marvin
Date: Thu Feb 3 19:48:55 2011
New Revision: 1066927
URL: http://svn.apache.org/viewvc?rev=1066927&view=rev
Log:
Now that Clownfish::Parcel is largely functional within C, start using Parcel
objects directly within CFCSymbol.c instead of storing them within opaque Perl
scalars. One wrinkle: since there's no refcounting for Parcel without an SV
wrapper, this commit causes us to leak Parcel objects.
Modified:
incubator/lucy/trunk/clownfish/lib/Clownfish.xs
incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm
incubator/lucy/trunk/clownfish/src/CFCSymbol.c
incubator/lucy/trunk/clownfish/src/CFCSymbol.h
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1066927&r1=1066926&r2=1066927&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Thu Feb 3 19:48:55 2011
@@ -242,7 +242,7 @@ MODULE = Clownfish PACKAGE = Clownfis
SV*
_new(klass, parcel, exposure, class_name_sv, class_cnick_sv, micro_sym_sv)
const char *klass;
- SV *parcel;
+ CFCParcel *parcel;
const char *exposure;
SV *class_name_sv;
SV *class_cnick_sv;
@@ -275,11 +275,16 @@ ALIAS:
get_class_cnick = 6
get_exposure = 8
micro_sym = 10
+ get_prefix = 12
+ get_Prefix = 14
+ get_PREFIX = 16
PPCODE:
{
START_SET_OR_GET_SWITCH
- case 2:
- retval = newSVsv((SV*)CFCSymbol_get_parcel(self));
+ case 2: {
+ struct CFCParcel *parcel = CFCSymbol_get_parcel(self);
+ retval = newSVsv((SV*)CFCParcel_get_perl_object(parcel));
+ }
break;
case 4: {
const char *class_name = CFCSymbol_get_class_name(self);
@@ -305,6 +310,21 @@ PPCODE:
retval = newSVpvn(micro_sym, strlen(micro_sym));
}
break;
+ case 12: {
+ const char *value = CFCSymbol_get_prefix(self);
+ retval = newSVpvn(value, strlen(value));
+ }
+ break;
+ case 14: {
+ const char *value = CFCSymbol_get_Prefix(self);
+ retval = newSVpvn(value, strlen(value));
+ }
+ break;
+ case 16: {
+ const char *value = CFCSymbol_get_PREFIX(self);
+ retval = newSVpvn(value, strlen(value));
+ }
+ break;
END_SET_OR_GET_SWITCH
}
Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm?rev=1066927&r1=1066926&r2=1066927&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Symbol.pm Thu Feb 3 19:48:55 2011
@@ -61,10 +61,6 @@ sub new {
$micro_sym );
}
-sub get_prefix { shift->get_parcel->get_prefix; }
-sub get_Prefix { shift->get_parcel->get_Prefix; }
-sub get_PREFIX { shift->get_parcel->get_PREFIX; }
-
sub public { shift->get_exposure eq 'public' }
sub private { shift->get_exposure eq 'private' }
sub parcel { shift->get_exposure eq 'parcel' }
Modified: incubator/lucy/trunk/clownfish/src/CFCSymbol.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCSymbol.c?rev=1066927&r1=1066926&r2=1066927&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCSymbol.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCSymbol.c Thu Feb 3 19:48:55 2011
@@ -28,14 +28,12 @@
#define CFC_NEED_SYMBOL_STRUCT_DEF
#include "CFCSymbol.h"
+#include "CFCParcel.h"
CFCSymbol*
-CFCSymbol_new(void *parcel, const char *exposure, const char *class_name,
- const char *class_cnick, const char *micro_sym);
-
-CFCSymbol*
-CFCSymbol_new(void *parcel, const char *exposure, const char *class_name,
- const char *class_cnick, const char *micro_sym)
+CFCSymbol_new(struct CFCParcel *parcel, const char *exposure,
+ const char *class_name, const char *class_cnick,
+ const char *micro_sym)
{
CFCSymbol *self = (CFCSymbol*)malloc(sizeof(CFCSymbol));
if (!self) { croak("malloc failed"); }
@@ -122,11 +120,11 @@ S_validate_identifier(const char *identi
}
CFCSymbol*
-CFCSymbol_init(CFCSymbol *self, void *parcel, const char *exposure,
- const char *class_name, const char *class_cnick,
- const char *micro_sym)
+CFCSymbol_init(CFCSymbol *self, struct CFCParcel *parcel,
+ const char *exposure, const char *class_name,
+ const char *class_cnick, const char *micro_sym)
{
- self->parcel = newSVsv((SV*)parcel);
+ self->parcel = parcel;
// Validate exposure.
if (!S_validate_exposure(exposure)) {
@@ -173,7 +171,7 @@ CFCSymbol_init(CFCSymbol *self, void *pa
void
CFCSymbol_destroy(CFCSymbol *self)
{
- SvREFCNT_dec((SV*)self->parcel);
+ // SvREFCNT_dec((SV*)self->parcel);
Safefree(self->exposure);
Safefree(self->class_name);
Safefree(self->class_cnick);
@@ -181,7 +179,7 @@ CFCSymbol_destroy(CFCSymbol *self)
free(self);
}
-void*
+struct CFCParcel*
CFCSymbol_get_parcel(CFCSymbol *self)
{
return self->parcel;
@@ -211,3 +209,21 @@ CFCSymbol_micro_sym(CFCSymbol *self)
return self->micro_sym;
}
+const char*
+CFCSymbol_get_prefix(CFCSymbol *self)
+{
+ return CFCParcel_get_prefix(self->parcel);
+}
+
+const char*
+CFCSymbol_get_Prefix(CFCSymbol *self)
+{
+ return CFCParcel_get_Prefix(self->parcel);
+}
+
+const char*
+CFCSymbol_get_PREFIX(CFCSymbol *self)
+{
+ return CFCParcel_get_PREFIX(self->parcel);
+}
+
Modified: incubator/lucy/trunk/clownfish/src/CFCSymbol.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCSymbol.h?rev=1066927&r1=1066926&r2=1066927&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCSymbol.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCSymbol.h Thu Feb 3 19:48:55 2011
@@ -15,10 +15,11 @@
*/
typedef struct CFCSymbol CFCSymbol;
+struct CFCParcel;
#ifdef CFC_NEED_SYMBOL_STRUCT_DEF
struct CFCSymbol {
- void *parcel;
+ struct CFCParcel *parcel;
const char *exposure;
const char *class_name;
const char *class_cnick;
@@ -27,18 +28,18 @@ struct CFCSymbol {
#endif
CFCSymbol*
-CFCSymbol_new(void *parcel, const char *exposure, const char *class_name,
+CFCSymbol_new(struct CFCParcel *parcel, const char *exposure, const char *class_name,
const char *class_cnick, const char *micro_sym);
CFCSymbol*
-CFCSymbol_init(CFCSymbol *self, void *parcel, const char *exposure,
+CFCSymbol_init(CFCSymbol *self, struct CFCParcel *parcel, const char *exposure,
const char *class_name, const char *class_cnick,
const char *micro_sym);
void
CFCSymbol_destroy(CFCSymbol *self);
-void*
+struct CFCParcel*
CFCSymbol_get_parcel(CFCSymbol *self);
// May be NULL.
@@ -55,3 +56,12 @@ CFCSymbol_get_exposure(CFCSymbol *self);
const char*
CFCSymbol_micro_sym(CFCSymbol *self);
+const char*
+CFCSymbol_get_prefix(CFCSymbol *self);
+
+const char*
+CFCSymbol_get_Prefix(CFCSymbol *self);
+
+const char*
+CFCSymbol_get_PREFIX(CFCSymbol *self);
+