r53405 - in /trunk/libjavascript-perl: Changes JavaScript.xs META.yml PJS_Class.c PJS_Context.c PJS_TypeConversion.c debian/changelog lib/JavaScript.pm lib/JavaScript/Context.pm lib/JavaScript/Generator.pm

jawnsy-guest at users.alioth.debian.org jawnsy-guest at users.alioth.debian.org
Sun Feb 28 17:18:33 UTC 2010


Author: jawnsy-guest
Date: Sun Feb 28 17:18:23 2010
New Revision: 53405

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=53405
Log:
* New upstream release
  + Fixes several memory leaks

Modified:
    trunk/libjavascript-perl/Changes
    trunk/libjavascript-perl/JavaScript.xs
    trunk/libjavascript-perl/META.yml
    trunk/libjavascript-perl/PJS_Class.c
    trunk/libjavascript-perl/PJS_Context.c
    trunk/libjavascript-perl/PJS_TypeConversion.c
    trunk/libjavascript-perl/debian/changelog
    trunk/libjavascript-perl/lib/JavaScript.pm
    trunk/libjavascript-perl/lib/JavaScript/Context.pm
    trunk/libjavascript-perl/lib/JavaScript/Generator.pm

Modified: trunk/libjavascript-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/Changes?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/Changes (original)
+++ trunk/libjavascript-perl/Changes Sun Feb 28 17:18:23 2010
@@ -1,5 +1,9 @@
 Revision history for Perl extension JavaScript.
 
+1.16  2010-02-20
+	- Fixed a bunch of memory leaks (Scott++ for reporting them)
+	- Added some missing private docs for jsc_set_pending_exception
+	
 1.15  2010-01-04
 	- It's now possible to set a pending exception in the context from Perl space (Scott McWhirter)
 	- can now set JS_LIB_NAME in environment prior to running perl Makefile.PL 

Modified: trunk/libjavascript-perl/JavaScript.xs
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/JavaScript.xs?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/JavaScript.xs (original)
+++ trunk/libjavascript-perl/JavaScript.xs Sun Feb 28 17:18:23 2010
@@ -10,7 +10,7 @@
 
 typedef PJS_PerlArray * JavaScript__PerlArray;
 typedef PJS_PerlHash *  JavaScript__PerlHash;
-typedef PJS_PerlSub *   Javascript__PerlSub;
+typedef PJS_PerlSub *   JavaScript__PerlSub;
 typedef PJS_Class *     JavaScript__PerlClass;
 typedef PJS_Function *  JavaScript__PerlFunction;
 typedef PJS_Context *   JavaScript__Context;
@@ -541,7 +541,7 @@
     JavaScript::PerlArray obj;
     CODE:
         if (obj->av != NULL) {
-            av_undef(obj->av);
+            SvREFCNT_dec(obj->av);
         }
         obj->av = NULL;
         Safefree(obj);
@@ -572,11 +572,19 @@
     JavaScript::PerlHash obj;
     CODE:
         if (obj->hv != NULL) {
-            hv_undef(obj->hv);
+            SvREFCNT_dec(obj->hv);
         }
         obj->hv = NULL;
         Safefree(obj);
 
+MODULE = JavaScript     PACKAGE = JavaScript::PerlSub
+
+void
+DESTROY(obj)
+    JavaScript::PerlSub obj;
+    CODE:
+      Safefree(obj);
+
 MODULE = JavaScript     PACKAGE = JavaScript::PerlClass
 
 void

Modified: trunk/libjavascript-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/META.yml?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/META.yml (original)
+++ trunk/libjavascript-perl/META.yml Sun Feb 28 17:18:23 2010
@@ -1,6 +1,6 @@
 --- #YAML:1.0
 name:               JavaScript
-version:            1.15
+version:            1.16
 abstract:           Perl extension for executing embedded JavaScript
 author:
     - Claes Jakobsson <claesjac at cpan.org>

Modified: trunk/libjavascript-perl/PJS_Class.c
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/PJS_Class.c?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/PJS_Class.c (original)
+++ trunk/libjavascript-perl/PJS_Class.c Sun Feb 28 17:18:23 2010
@@ -49,7 +49,6 @@
 void PJS_free_class(PJS_Class *pcls) {
     PJS_Function *method;
     PJS_Property *property;
-    
     if (pcls == NULL) {
         return;
     }
@@ -61,7 +60,7 @@
     if (pcls->pkg != NULL) {
         Safefree(pcls->pkg);
     }
-
+    
     method = pcls->methods;
     while (method != NULL) {
         PJS_Function *next = method->_next;
@@ -80,10 +79,11 @@
     PJS_free_JSPropertySpec(pcls->ps);
     PJS_free_JSPropertySpec(pcls->static_ps);
     
-    if (pcls->flags & PJS_FREE_JSCLASS) {
+    /* Seems like SM handles this part for us */
+/*    if (pcls->flags & PJS_FREE_JSCLASS) {
         Safefree(pcls->clasp->name);
         Safefree(pcls->clasp);
-    }
+    }  */
     
     Safefree(pcls);
 }
@@ -159,7 +159,7 @@
                                PJS_construct_perl_object, 0,
                                pcls->ps /* ps */, pcls->fs,
                                pcls->static_ps /* static_ps */, pcls->static_fs /* static_fs */);
-
+                                                   
     if (pcls->proto == NULL) {
         PJS_free_class(pcls);
         croak("Failed to initialize class in context");
@@ -175,16 +175,19 @@
 void PJS_store_class(PJS_Context *pcx, PJS_Class *cls) {
     /* Add class to list of classes in contexts */
     SV *sv = newSV(0);
-	sv_setref_pv(sv, "JavaScript::PerlClass", (void*) cls);
+    sv_setref_pv(sv, "JavaScript::PerlClass", (void*) cls);
 	
     if (cls->clasp->name != NULL) {
-        SvREFCNT_inc(sv);
-        hv_store(pcx->class_by_name, cls->clasp->name, strlen(cls->clasp->name), sv, 0);
+      if(hv_store(pcx->class_by_name, cls->clasp->name, strlen(cls->clasp->name), sv, 0) == NULL) {
+        /* TODO: better error here */
+        croak("Failed to store class: %s in class_by_name in context", cls->clasp->name);
+        return;
+      }
     }
     
     if (cls->pkg != NULL) {
-        SvREFCNT_inc(sv);
-        hv_store(pcx->class_by_package, cls->pkg, strlen(cls->pkg), sv, 0);
+      SvREFCNT_inc(sv);
+      hv_store(pcx->class_by_package, cls->pkg, strlen(cls->pkg), sv, 0);
     }
 }
 
@@ -218,7 +221,7 @@
     }
 
     /* Check if we are allowed to instanciate this class */
-    if ((pcls->flags & PJS_CLASS_NO_INSTANCE)) {
+    if (pcls->flags & PJS_CLASS_NO_INSTANCE) {
         JS_ReportError(cx, "Class '%s' can't be instanciated", pcls->clasp->name);
         return JS_FALSE;
     }
@@ -233,7 +236,7 @@
                 
         JS_SetPrivate(cx, obj, (void *) rsv); 
     }
-
+    
     return JS_TRUE;
 }
 

Modified: trunk/libjavascript-perl/PJS_Context.c
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/PJS_Context.c?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/PJS_Context.c (original)
+++ trunk/libjavascript-perl/PJS_Context.c Sun Feb 28 17:18:23 2010
@@ -142,18 +142,18 @@
     }
 
     if (pcx->function_by_name) {
-        hv_undef(pcx->function_by_name);
+        SvREFCNT_dec(pcx->function_by_name);
         pcx->function_by_name = NULL;
     }
         
     if (pcx->class_by_name) {
-        hv_undef(pcx->class_by_name);
+        SvREFCNT_dec(pcx->class_by_name);
         pcx->class_by_name = NULL;
     }
     
     if (pcx->class_by_package) {
-        hv_undef(pcx->class_by_package);
-        pcx->class_by_package = NULL;
+        SvREFCNT_dec(pcx->class_by_package);
+        pcx->class_by_package = NULL;   
     }
     
     /* Destory context */

Modified: trunk/libjavascript-perl/PJS_TypeConversion.c
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/PJS_TypeConversion.c?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/PJS_TypeConversion.c (original)
+++ trunk/libjavascript-perl/PJS_TypeConversion.c Sun Feb 28 17:18:23 2010
@@ -381,7 +381,7 @@
 	      SV *content = sv_2mortal(newRV_noinc(newSViv(PTR2IV(object))));
 	      SV *pcx = sv_2mortal(newSViv(PTR2IV(PJS_GET_CONTEXT(cx))));
 	      jsval *x;
-                
+               
 	      Newz(1, x, 1, jsval);
 	      if (x == NULL) {
 		croak("Failed to allocate memory for jsval");
@@ -395,7 +395,7 @@
 						 sv_2mortal(newSViv(PTR2IV(x))), NULL));
 	      return JS_TRUE;	      
 	    }
-            
+
             destroy_hv = 0;
             if (!seen) {
                 seen = newHV();
@@ -420,7 +420,7 @@
             }
             
             if (destroy_hv) {
-                hv_undef(seen);
+              SvREFCNT_dec(seen);
             }
         }
         else {
@@ -483,7 +483,7 @@
             jsval value;
             SV *val_sv;
             
-            SV *js_key_sv = newSV(0);
+            SV *js_key_sv = sv_newmortal();
             char *js_key = JS_GetStringBytes(JSVAL_TO_STRING(key));
             sv_setpv(js_key_sv, js_key);
 

Modified: trunk/libjavascript-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/debian/changelog?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/debian/changelog (original)
+++ trunk/libjavascript-perl/debian/changelog Sun Feb 28 17:18:23 2010
@@ -1,3 +1,10 @@
+libjavascript-perl (1.16-1) UNRELEASED; urgency=low
+
+  * New upstream release
+    + Fixes several memory leaks
+
+ -- Jonathan Yu <jawnsy at cpan.org>  Sun, 28 Feb 2010 12:38:04 -0500
+
 libjavascript-perl (1.15-1) unstable; urgency=low
 
   * New upstream release

Modified: trunk/libjavascript-perl/lib/JavaScript.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/lib/JavaScript.pm?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/lib/JavaScript.pm (original)
+++ trunk/libjavascript-perl/lib/JavaScript.pm Sun Feb 28 17:18:23 2010
@@ -23,7 +23,7 @@
 
 our %EXPORT_TAGS = ( all => [@EXPORT_OK] );
 
-our $VERSION = "1.15";
+our $VERSION = "1.16";
 
 our $MAXBYTES = 1024 ** 2;
 

Modified: trunk/libjavascript-perl/lib/JavaScript/Context.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/lib/JavaScript/Context.pm?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/lib/JavaScript/Context.pm (original)
+++ trunk/libjavascript-perl/lib/JavaScript/Context.pm Sun Feb 28 17:18:23 2010
@@ -559,6 +559,10 @@
 
 The handler is called when a script branches backwards during execution, when a function returns and the end of the script. To continue execution the handler must return a true value. To abort execution either throw an exception or return a false value.
 
+=item set_pending_exception ( $value )
+
+Converts the I<$value> to JavaScript and sets it as the pending exception for the context. 
+
 =item get_version ( )
 
 Returns the runtime version of the context as a string, for exmaple C<1.7> or or C<ECMAv3>.
@@ -686,6 +690,10 @@
 
 Return the address of the context for identification purposes.
 
+=item jsc_set_pending_exception ( PJS_Context *context, SV *exception )
+
+Set a pending exception on the context
+
 =back
 
 =end PRIVATE

Modified: trunk/libjavascript-perl/lib/JavaScript/Generator.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libjavascript-perl/lib/JavaScript/Generator.pm?rev=53405&op=diff
==============================================================================
--- trunk/libjavascript-perl/lib/JavaScript/Generator.pm (original)
+++ trunk/libjavascript-perl/lib/JavaScript/Generator.pm Sun Feb 28 17:18:23 2010
@@ -16,5 +16,45 @@
   return $NF->( $self );
 }
 
+1;
+__END__
 
-1;
+=head1 NAME
+
+JavaScript::Generator - Boxed Perl object of a JavaScript generator
+
+=head1 DESCRIPTION
+
+Generators were introduced in JavaScript 1.7. When you 'yield' from JS you'll be returned 
+an instance of this class that you can use to retrieve the next value from the generator.
+
+For example
+
+  function fib() {  
+    var i = 0, j = 1;  
+    while (true) {  
+      yield i;  
+      var t = i;  
+      i = j;  
+      j += t;  
+    }  
+  }  
+  
+  var g = fib();  
+  for (var i = 0; i < 10; i++) {  
+    document.write(g.next() + "<br>\n");  
+  }  
+
+=head1 INTERFACE
+
+=head2 INSTANCE METHODS
+
+=over 4
+
+=item next
+
+Retrieve the next value.
+
+=back
+
+=cut




More information about the Pkg-perl-cvs-commits mailing list