<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>build-tar</filename>
    </added>
    <added>
      <filename>nps/nps.py</filename>
    </added>
    <added>
      <filename>nps/run_sums.sh</filename>
    </added>
    <added>
      <filename>nps/sum.js</filename>
    </added>
    <added>
      <filename>nps/sum.py</filename>
    </added>
    <added>
      <filename>nps/test_1.js</filename>
    </added>
    <added>
      <filename>nps/test_2.js</filename>
    </added>
    <added>
      <filename>nps/test_3.js</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,3 @@
 #!/bin/sh
-
+cd `dirname $0`
 epydoc --config=epydoc.ini</diff>
      <filename>doc/build-doc</filename>
    </modified>
    <modified>
      <diff>@@ -46,14 +46,19 @@ pre, xmp {
 
 /*-----------------------------------------------------------------*/
 h1,h2,h3 {
-    padding-left:         2em;
-    padding-right:      0.3em;
-    padding-top:        0.3em;
-    padding-bottom:     0.3em;
-    border-width:       0;
-    background:         #227;
-    color:              #FFF;
-    text-shadow:        2px 2px 2px #777;
+    padding-left:          2em;
+    padding-right:         0.3em;
+    padding-top:           0.3em;
+    padding-bottom:        0.3em;
+    border-style:          solid;
+    border-width:          1;
+    border-color:          #000;
+    background:            #227;
+    color:                 #FFF;
+    text-shadow:           2px 2px 2px #777;
+    -moz-border-radius:    10px;
+    -webkit-border-radius: 10px;    
+    
 }
 
 /*-----------------------------------------------------------------*/
@@ -196,7 +201,7 @@ function body_onload() {
 
 &lt;h3&gt;History&lt;/h3&gt;
 &lt;ul&gt;
-&lt;li&gt;2009-04-21 - Patrick Mueller - initial write-up&lt;/li&gt;
+&lt;li&gt;2009-04-22 - Patrick Mueller - version 0.5&lt;/li&gt;
 &lt;/ul&gt;
 
 &lt;!-- ====================================================== --&gt;
@@ -219,7 +224,8 @@ You may want to get familiarity with this framework before using
 this package in anger.  In lieu of that, examine the test cases.
 
 &lt;p&gt;Note that the &lt;code&gt;nitro_pie&lt;/code&gt; module does not currently expose
-all of the WebKit APIs.
+all of the WebKit APIs.  It does expose enough to do some interesting
+things.
 
 &lt;!-- ====================================================== --&gt;
 &lt;h2&gt;Installation&lt;/h2&gt;
@@ -232,13 +238,79 @@ an appropriate directory to use with other Python code.
 &lt;p&gt;The module makes extensive use of the 
 &lt;code&gt;&lt;a href=&quot;http://docs.python.org/library/ctypes.html#module-ctypes&quot;&gt;ctypes&lt;/a&gt;&lt;/code&gt;
 module, which is included in Python distributions starting with version 2.5.
-This module has currently only be tested or used on Mac OS X, and will likely
+The &lt;code&gt;nitro_pie&lt;/code&gt; module has currently only be tested and used on Mac OS X, and will likely
 need some changes to run on other operating systems.  Along with finding/building
 a copy of JavaScriptCore for those operating systems.
 
 &lt;!-- ====================================================== --&gt;
 &lt;h2&gt;Usage&lt;/h2&gt;
 
+&lt;p&gt;There are test cases available in the &lt;code&gt;test&lt;/code&gt; subdirectory,
+and a shell example available in the &lt;code&gt;nps&lt;/code&gt; directory, to see
+some real life usage.
+
+&lt;p&gt;All usages of &lt;code&gt;nitro_pie&lt;/code&gt; start with obtaining a
+&lt;code&gt;JSContext&lt;/code&gt; object, via the following invocation:
+
+&lt;pre&gt;
+context = JSContext()
+&lt;/pre&gt;
+
+&lt;p&gt;Once a context has been obtained, you can execute a script using
+&lt;code&gt;JSContext&lt;/code&gt;'s &lt;code&gt;eval()&lt;/code&gt; method:
+
+&lt;pre&gt;
+result = context.eval(script, None, script_file_name, 1)
+&lt;/pre&gt;
+
+&lt;p&gt;The &lt;code&gt;eval()&lt;/code&gt; method will return the result of evaluating
+JavaScript code, perhaps returning a &lt;code&gt;JSObject&lt;/code&gt; instance
+that you can further noodle on.
+
+&lt;p&gt;To add a new function to a context that a script executes in,
+use the &lt;code&gt;JSContext&lt;/code&gt; &lt;code&gt;makeFunctionWithCallback()&lt;/code&gt; method,
+and then add it to the 'global' object of the context:
+
+&lt;pre&gt;
+function     = context.makeFunctionWithCallback(&quot;print&quot;, callback_print)
+globalObject = context.getGlobalObject()
+globalObject.setProperty(&quot;print&quot;, function)&lt;/pre&gt;
+&lt;/pre&gt;
+
+&lt;p&gt;The second argument to the &lt;code&gt;makeFunctionWithCallback()&lt;/code&gt; method
+is a Python callable, which should have the following signature:
+
+&lt;pre&gt;
+def callback_print(context, function, thisObject, args)
+&lt;/pre&gt;
+
+&lt;p&gt;The &lt;code&gt;context&lt;/code&gt; parameter is the context that the function
+was invoked within.
+The &lt;code&gt;function&lt;/code&gt; parameter is the JavaScript function that is
+currently executing.
+The &lt;code&gt;thisObject&lt;/code&gt; parameter is the &lt;code&gt;'this'&lt;/code&gt; value
+for the invocation.
+The &lt;code&gt;args&lt;/code&gt; parameter is the array of parameters passed
+to the function.  
+
+&lt;p&gt;The function should return whatever value it needs to return.  Here's
+an example of a function which prints it's arguments:
+
+&lt;pre&gt;
+def callback_print(context, function, thisObject, args):
+    line = &quot;&quot;
+    
+    for arg in args:
+        if JSObject.isJSObject(arg):
+            printable = arg.toString()
+        else:
+            printable = str(arg)
+    
+        line = line + printable
+        
+    print line
+&lt;/pre&gt;
+
 &lt;!-- ====================================================== --&gt;
 &lt;h2&gt;Data conversions&lt;/h2&gt;
 
@@ -316,6 +388,35 @@ such an object in Python.
 
 &lt;/table&gt;
 
+&lt;h3&gt;Notes&lt;/h3&gt;
+
+&lt;p&gt;Because JavaScript values returned from the APIs may be either
+natural Python types (given the mapping above), or instances of 
+&lt;code&gt;JSObject&lt;/code&gt;, you will likely need to be able to sniff to see
+if instances are &lt;code&gt;JSObject&lt;/code&gt;'s at times.  You can use the
+function &lt;code&gt;JSObject.isJSObject()&lt;/code&gt; to test for this, or just use
+the more natural Python test of 
+&lt;code&gt;isInstance(object,JSObject)&lt;/code&gt;.
+
+&lt;p&gt;There is currently no direct way of creating JavaScript objects or
+arrays other than the 'primitive' values specified in the table above.
+To do this indirectly, use &lt;code&gt;JSContext.eval()&lt;/code&gt;.  For instance,
+to create a new empty object, use:
+
+&lt;pre&gt;
+object = context.eval(&quot;({})&quot;)
+&lt;/pre&gt;
+
+&lt;p&gt;To create an array, use:
+
+&lt;pre&gt;
+object = context.eval(&quot;[]&quot;)
+&lt;/pre&gt;
+
+&lt;p&gt;All JavaScript objects besides the primitives specified in the table
+above can be accessed and manipulated as instances of 
+&lt;code&gt;JSObject&lt;/code&gt;.
+
 &lt;!-- ====================================================== --&gt;
 &lt;h2&gt;nitro_pie Module Reference&lt;/h2&gt;
 
@@ -325,8 +426,8 @@ at the
 &lt;a href=&quot;http://developer.apple.com/documentation/Carbon/Reference/WebKit_JavaScriptCore_Ref/index.html#//apple_ref/doc/framework/javascriptcore_fw&quot;&gt;JavaScriptCore Framework Reference&lt;/a&gt;
 available at the ADC.
 
-&lt;p&gt;&lt;a href=&quot;api/index.html&quot;&gt;API doc&lt;/a&gt;
-
+&lt;p&gt;Some &lt;a href=&quot;api/index.html&quot;&gt;Epydoc generated documentation&lt;/a&gt; for the module
+is also available.
 
 &lt;/body&gt;
 </diff>
      <filename>doc/nitro_pie.html</filename>
    </modified>
    <modified>
      <diff>@@ -32,8 +32,8 @@
 #--------------------------------------------------------------------
 
 __author__  = &quot;Patrick Mueller &lt;pmuellr@yahoo.com&gt;&quot;
-__date__    = &quot;2009-03-25&quot;
-__version__ = &quot;0.1&quot;
+__date__    = &quot;2009-04-22&quot;
+__version__ = &quot;0.5&quot;
 
 import ctypes
 import ctypes.util
@@ -63,19 +63,13 @@ JSUndefined = &quot;{{undefined}}&quot;
 
 #-------------------------------------------------------------------
 JSPropertyAttributeNone       = 0
-&quot;&quot;&quot;Constant used when setting property values&quot;&quot;&quot;
+&quot;&quot;&quot;Constant used when setting property values with JSObject::setProperty()&quot;&quot;&quot;
 JSPropertyAttributeReadOnly   = 1 &lt;&lt; 1
-&quot;&quot;&quot;Constant used when setting property values&quot;&quot;&quot;
+&quot;&quot;&quot;Constant used when setting property values with JSObject::setProperty()&quot;&quot;&quot;
 JSPropertyAttributeDontEnum   = 1 &lt;&lt; 2 
-&quot;&quot;&quot;Constant used when setting property values&quot;&quot;&quot;
+&quot;&quot;&quot;Constant used when setting property values with JSObject::setProperty()&quot;&quot;&quot;
 JSPropertyAttributeDontDelete = 1 &lt;&lt; 3 
-&quot;&quot;&quot;Constant used when setting property values&quot;&quot;&quot;
-
-#-------------------------------------------------------------------
-#_JSClassAttributeNone                 = 0
-#&quot;&quot;&quot;JSClassAttribute&quot;&quot;&quot;
-#_JSClassAttributeNoAutomaticPrototype = 1 &lt;&lt; 1 
-#&quot;&quot;&quot;JSClassAttribute&quot;&quot;&quot;
+&quot;&quot;&quot;Constant used when setting property values with JSObject::setProperty()&quot;&quot;&quot;
 
 #--------------------------------------------------------------------
 def _string2jsString(string):
@@ -118,23 +112,30 @@ def _jsString2string(jsString):
 
 #--------------------------------------------------------------------
 class JSContext:
-    &quot;&quot;&quot;Models a Context&quot;&quot;&quot;
+    &quot;&quot;&quot;Models a Context
+    
+    A context maintains the variables and environment that a
+    script runs in.&quot;&quot;&quot;
 
     #----------------------------------------------------------------
     @staticmethod
     def gc():
-        &quot;&quot;&quot;A veneer over JSGarbageCollect()&quot;&quot;&quot;
+        &quot;&quot;&quot;Performs a garbage collection
+        
+        You do not need to call this to run
+        the garbage collector, but you can call if if you
+        explicitly want to run it.
+        &quot;&quot;&quot;
         _log()
         
         _JSGarbageCollect(None)
     
     #----------------------------------------------------------------
     def __init__(self, ctx=None):
-        &quot;&quot;&quot;A veneer over JSGlobalContextCreate().
-        
-        Creates a new JSContext which does not need to be
-        retain()'d, but does need to be release()'d.
+        &quot;&quot;&quot;Creates a new JSContext object
         
+        @type    ctx:  JSContext
+        @param   ctx:  an existing JSContext to base this on; for internal use only
         @rtype:  JSContext
         @return: the new JSContext created
         &quot;&quot;&quot;
@@ -150,14 +151,18 @@ class JSContext:
         
     #----------------------------------------------------------------
     def __del__(self):
-        &quot;&quot;&quot;Intended for internal use only.&quot;&quot;&quot;
+        &quot;&quot;&quot;Intended for internal use only&quot;&quot;&quot;
         _log(&quot;JSContext() - ctx: %s&quot; % (str(self.ctx)))
         
         while self.ctx: self.release()
     
     #----------------------------------------------------------------
     def __str__(self):
-        &quot;&quot;&quot;Intended for internal use only.&quot;&quot;&quot;
+        &quot;&quot;&quot;Intended for internal use only
+        
+        @rtype:  str
+        @return: a string representation of this object
+        &quot;&quot;&quot;
         
         return &quot;JSContext{ctx=%s, ref=%d}&quot; % (str(self.ctx), self.ref)
     
@@ -171,15 +176,8 @@ class JSContext:
         raise Exception, &quot;JSContext has been released&quot;
     
     #----------------------------------------------------------------
-    def retain(self):
-        &quot;&quot;&quot;A veneer over JSGlobalContextRetain()
-        
-        Returns a new JSContext which should be release()'d
-        when you are finished with it.
-        
-        @rtype:  JSContext
-        @return: the new retained JSContext 
-        &quot;&quot;&quot;
+    def _retain(self):
+        &quot;&quot;&quot;Intended for internal use only&quot;&quot;&quot;
         _log()
         
         self._checkAllocated()
@@ -189,7 +187,10 @@ class JSContext:
         
     #----------------------------------------------------------------
     def release(self):
-        &quot;&quot;&quot;A veneer over JSGlobalContextRelease()&quot;&quot;&quot;
+        &quot;&quot;&quot;Releases the context
+        
+        You should release the context when you are finished
+        with it.&quot;&quot;&quot;
         _log()
         
         if self.ref &lt;= 0: 
@@ -208,15 +209,15 @@ class JSContext:
         sourceURL=None, 
         startingLineNumber=1
         ):
-        &quot;&quot;&quot;A veneer over JSCheckScriptSyntax()
-
+        &quot;&quot;&quot;Checks a script for validity without running it
+        
         @rtype:                    boolean
         @return:                   whether the script is syntactically correct
         @type  script:             str | unicode
         @param script:             the source code for the script to check
         @type  sourceURL:          str | unicode
         @param sourceURL:          the URL of the source code
-        @type  startingLineNumber: number
+        @type  startingLineNumber: int
         @param startingLineNumber: the line number of the script
         &quot;&quot;&quot;
         _log()
@@ -255,7 +256,12 @@ class JSContext:
         sourceURL=None, 
         startingLineNumber=1
         ):
-        &quot;&quot;&quot;A veneer over JSEvaluateScript()
+        &quot;&quot;&quot;Execute a script
+        
+        Executes a script, and returns the result.  For scripts
+        which are expressions, this returns the expression value.
+        For scripts which contain statements, returns the value of
+        executing the final statement.
         
         @rtype:                    JSObject
         @return:                   result of evaluating the script
@@ -265,7 +271,7 @@ class JSContext:
         @param thisObject:         the global object when executing the script
         @type  sourceURL:          str | unicode
         @param sourceURL:          the URL of the source code
-        @type  startingLineNumber: number
+        @type  startingLineNumber: int
         @param startingLineNumber: the line number of the script
         &quot;&quot;&quot;
         _log()
@@ -300,7 +306,7 @@ class JSContext:
 
     #----------------------------------------------------------------
     def getGlobalObject(self):
-        &quot;&quot;&quot;A veneer over JSContextGetGlobalObject()
+        &quot;&quot;&quot;Returns the 'global' object associated with a context
         
         @rtype:   JSObject
         @return:  the global object for this context
@@ -313,7 +319,10 @@ class JSContext:
         
     #----------------------------------------------------------------
     def makeConstructorWithCallback(self, callback):
-        &quot;&quot;&quot;A veneer over JSObjectMakeConstructor()
+        &quot;&quot;&quot;Create a new JavaScript constructor
+        
+        Create a JavaScript constructor implemented with a Python
+        function.
         
         @rtype:           JSObject
         @return:          the constructor created
@@ -348,7 +357,10 @@ class JSContext:
         
     #----------------------------------------------------------------
     def makeFunctionWithCallback(self, name, callback):
-        &quot;&quot;&quot;A veneer over JSObjectMakeFunctionWithCallback()
+        &quot;&quot;&quot;Create a new JavaScript function
+        
+        Create a JavaScript function implemented with a Python
+        function.
         
         @rtype:           JSObject
         @return:          the constructor created
@@ -430,11 +442,32 @@ class JSContext:
         
 #--------------------------------------------------------------------
 class JSObject:
-    &quot;&quot;&quot;Models a JavaScript object &quot;&quot;&quot;
+    &quot;&quot;&quot;Models a JavaScript object
+    
+    This class is used to represent non-primitive JavaScript
+    values such as objects, arrays, and functions.  Primitive
+    values including strings, booleans, numbers, null and undefined
+    are represented as native Python values.
+    
+    Most methods of this class take an optional context value
+    parameter.  If specified, the operation will occur against that
+    context, else it will occur against the context the object was
+    created in.
+    &quot;&quot;&quot;
 
     #--------------------------------------------------------------------
     @staticmethod
     def isJSObject(o):
+        &quot;&quot;&quot;Returns an indication of whether this is a JavaScript object.
+        
+        Typically used to test a result to see if it's a complex or 
+        primitive JavaScript object.
+        
+        @rtype:    boolean
+        @return:   whether the specified object is a JSObject
+        @type  o:  any
+        @param o:  the object to test to see if it's a JSObject
+        &quot;&quot;&quot;
         return isinstance(o,JSObject)
 
     #--------------------------------------------------------------------
@@ -458,7 +491,10 @@ class JSObject:
     
     #----------------------------------------------------------------
     def __init__(self, jsRef, ctx):
-        &quot;&quot;&quot;Intended for internal use only.&quot;&quot;&quot;
+        &quot;&quot;&quot;Creates a new JSObject.
+        
+        Intended for internal use only.
+        &quot;&quot;&quot;
         _log(&quot;JSObject() - ctx: %s; jsRef: %s&quot; % (str(ctx), str(jsRef)))
         
         self.ctx   = ctx
@@ -506,7 +542,13 @@ class JSObject:
 
     #----------------------------------------------------------------
     def isEqual(self, jsObject, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSValueIsEqual()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns whether the current JSObject is equal to the specified JSObject
+        
+        @rtype:   boolean
+        @return:  whether the specified object is equal to this JSObject
+        @type  jsObject:  JSObject
+        @param jsObject:  the object to compare against
+        &quot;&quot;&quot;
         
         ctx = jsContext.ctx if jsContext else self.ctx
         self._checkAllocated(ctx)
@@ -515,7 +557,13 @@ class JSObject:
         
     #----------------------------------------------------------------
     def isStrictEqual(self, jsObject, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSValueisStrictEqual()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns whether the current JSObject is strictly equal to the specified JSObject
+        
+        @rtype:   boolean
+        @return:  whether the specified object is strictly equal to this JSObject
+        @type  jsObject:  JSObject
+        @param jsObject:  the object to compare against
+        &quot;&quot;&quot;
         
         ctx = jsContext.ctx if jsContext else self.ctx
         self._checkAllocated(ctx)
@@ -524,7 +572,13 @@ class JSObject:
 
     #----------------------------------------------------------------
     def isInstanceOf(self, jsConstructor, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSValueIsInstanceOfConstructor()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns whether the current JSObject is an instance of the specified JSObject
+        
+        @rtype:  boolean
+        @return: whether the current JSObject is an instance of the specified JSObject, which should be a constructor
+        @type  jsConstructor:  JSObject
+        @param jsConstructor:  the constructor to test against
+        &quot;&quot;&quot;
         
         ctx = jsContext.ctx if jsContext else self.ctx
         self._checkAllocated(ctx)
@@ -533,7 +587,11 @@ class JSObject:
 
     #----------------------------------------------------------------
     def toBoolean(self, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSValueToBoolean()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns the value of the current JSObject, converted to a boolean
+        
+        @rtype:  boolean
+        @return: the object converted to a boolean value
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -543,7 +601,11 @@ class JSObject:
 
     #----------------------------------------------------------------
     def toNumber(self, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSValueToBoolean()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns the value of the current JSObject, converted to a number
+        
+        @rtype:  float
+        @return: the object converted to a number
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -561,7 +623,11 @@ class JSObject:
 
     #----------------------------------------------------------------
     def toString(self, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSValueToStringCopy()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns the value of the current JSObject, converted to a string
+        
+        @rtype:  str
+        @return: the object converted to a string
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -578,7 +644,11 @@ class JSObject:
         
     #----------------------------------------------------------------
     def getPropertyNames(self, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectCopyPropertyNames()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns the names of the properties of this object
+        
+        @rtype:  list of str
+        @return: the enumerable property names of this object
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -596,7 +666,13 @@ class JSObject:
 
     #----------------------------------------------------------------
     def deleteProperty(self, propertyName, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectDeleteProperty()&quot;&quot;&quot;
+        &quot;&quot;&quot;Deletes the specified property
+        
+        @rtype:  boolean
+        @return: whether the property could be deleted
+        @type  propertyName:  str|unicode
+        @param propertyName:  the name of the property to delete
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -617,7 +693,13 @@ class JSObject:
 
     #----------------------------------------------------------------
     def getProperty(self, propertyName, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectGetProperty()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns the specified property value
+        
+        @rtype:  any
+        @return: the value of the specified property
+        @type  propertyName:  str|unicode
+        @param propertyName:  the name of the property to retrieve
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -639,7 +721,13 @@ class JSObject:
 
     #----------------------------------------------------------------
     def getPropertyAtIndex(self, propertyIndex, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSGetPropertyAtIndex()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns the specified array element
+
+        @rtype:  any
+        @return: the value of the specified array index
+        @type  propertyIndex:  int
+        @param propertyIndex:  the index of the array element to retrieve
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -657,7 +745,11 @@ class JSObject:
  
     #----------------------------------------------------------------
     def getPrototype(self, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectGetPrototype()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns the prototype of this JSObject
+        
+        @rtype:  any
+        @return: the prototype of this JSObject
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -669,7 +761,13 @@ class JSObject:
 
     #----------------------------------------------------------------
     def hasProperty(self, propertyName, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectHasProperty()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns whether this JSObject contains the specified property
+
+        @rtype:  boolean
+        @return: whether this JSObject has this property
+        @type  propertyName:  str|unicode
+        @param propertyName:  the name of the property to delete
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -684,7 +782,11 @@ class JSObject:
 
     #----------------------------------------------------------------
     def isConstructor(self, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectIsConstructor()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns whether this JSObject is a constructor
+
+        @rtype:  boolean
+        @return: whether this JSObject is a constructor
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -694,7 +796,11 @@ class JSObject:
 
     #----------------------------------------------------------------
     def isFunction(self, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectIsFunction()&quot;&quot;&quot;
+        &quot;&quot;&quot;Returns whether this JSObject is a function
+
+        @rtype:  boolean
+        @return: whether this JSObject is a function
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -704,7 +810,15 @@ class JSObject:
 
     #----------------------------------------------------------------
     def setProperty(self, propertyName, value, attributes=JSPropertyAttributeNone, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectSetProperty()&quot;&quot;&quot;
+        &quot;&quot;&quot;Set the specified property to the specified value
+        
+        @type  propertyName:  str|unicode
+        @param propertyName:  the name of the property to create/set
+        @type  value:         any
+        @param value:         the value of the property
+        @type  attributes:    int
+        @param attributes:    attribute values for the property.  Values is a bit ORing of the JSPropertyAttribute* properties of this module.
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -725,7 +839,13 @@ class JSObject:
         
     #----------------------------------------------------------------
     def setPropertyAtIndex(self, propertyIndex, value, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectSetPropertyAtIndex()&quot;&quot;&quot;
+        &quot;&quot;&quot;Set the specified element of this array to the specified value
+        
+        @type  propertyIndex:  int
+        @param propertyIndex:  the array index of the element to set
+        @type  value:          any
+        @param value:          the value of the array element
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -742,7 +862,11 @@ class JSObject:
 
     #----------------------------------------------------------------
     def setPrototype(self, value, jsContext=None):
-        &quot;&quot;&quot;A veneer over JSObjectSetPrototype()&quot;&quot;&quot;
+        &quot;&quot;&quot;Set the prototype of this JSObjecto the specified value
+        
+        @type  value:         any
+        @param value:         the new value of the prototype
+        &quot;&quot;&quot;
         _log()
         
         ctx = jsContext.ctx if jsContext else self.ctx
@@ -964,14 +1088,22 @@ class JSLibrary:
     system defined method.&quot;&quot;&quot;
     
     libraryPath = None
-    &quot;&quot;&quot;Holds the fully qualified name of the JavaScriptCore library&quot;&quot;&quot;
+    &quot;&quot;&quot;Holds the fully qualified name of the JavaScriptCore library
+    
+    If this library is set, it overrides the libraryName variable
+    setting and is used as the complete name of the library.
+    &quot;&quot;&quot;
     
     _library    = None
     
     #----------------------------------------------------------------
     @staticmethod
     def getLibrary():
-        &quot;&quot;&quot;Return the JavaScriptCore library as a CDLL or equivalent&quot;&quot;&quot;
+        &quot;&quot;&quot;Return the JavaScriptCore library as a CDLL or equivalent
+        
+        @rtype:  ctypes.CDLL
+        @return: the JavaScriptCore library
+        &quot;&quot;&quot;
 
         if JSLibrary._library: return JSLibrary._library
         </diff>
      <filename>lib/nitro_pie.py</filename>
    </modified>
    <modified>
      <filename>test/test_iss.py</filename>
    </modified>
    <modified>
      <filename>test/test_properties.py</filename>
    </modified>
    <modified>
      <filename>test/test_prototype.py</filename>
    </modified>
    <modified>
      <filename>test/test_tos.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>38f25e2498a13f0495037413ffb33a9261f71e27</id>
    </parent>
  </parents>
  <author>
    <name>Patrick Mueller</name>
    <email>pmuellr@yahoo.com</email>
  </author>
  <url>http://github.com/pmuellr/nitro_pie/commit/55efaee97fde3a93451d5cbce8c66b68bf2bb610</url>
  <id>55efaee97fde3a93451d5cbce8c66b68bf2bb610</id>
  <committed-date>2009-04-22T08:58:11-07:00</committed-date>
  <authored-date>2009-04-22T08:58:11-07:00</authored-date>
  <message>added nps (shell), fixed doc, labeled 0.5</message>
  <tree>71adc56b94e25baa9d1c51a70b6fb2432f35db1b</tree>
  <committer>
    <name>Patrick Mueller</name>
    <email>pmuellr@yahoo.com</email>
  </committer>
</commit>
