annotate src/context.cpp @ 126:8371983fee63

Added support for weakrefs to contexts.
author Atul Varma <varmaa@toolness.com>
date Sun, 23 Aug 2009 17:07:45 -0700
parents 05e18059b5c4
children 4179d1e1a75c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
48
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
1 /* ***** BEGIN LICENSE BLOCK *****
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
3 *
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
4 * The contents of this file are subject to the Mozilla Public License Version
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
5 * 1.1 (the "License"); you may not use this file except in compliance with
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
6 * the License. You may obtain a copy of the License at
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
7 * http://www.mozilla.org/MPL/
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
8 *
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
9 * Software distributed under the License is distributed on an "AS IS" basis,
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
11 * for the specific language governing rights and limitations under the
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
12 * License.
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
13 *
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
14 * The Original Code is Pymonkey.
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
15 *
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
16 * The Initial Developer of the Original Code is Mozilla.
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
17 * Portions created by the Initial Developer are Copyright (C) 2007
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
18 * the Initial Developer. All Rights Reserved.
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
19 *
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
20 * Contributor(s):
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
21 * Atul Varma <atul@mozilla.com>
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
22 *
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
23 * Alternatively, the contents of this file may be used under the terms of
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
24 * either the GNU General Public License Version 2 or later (the "GPL"), or
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
25 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
26 * in which case the provisions of the GPL or the LGPL are applicable instead
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
27 * of those above. If you wish to allow use of your version of this file only
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
28 * under the terms of either the GPL or the LGPL, and not to allow others to
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
29 * use your version of this file under the terms of the MPL, indicate your
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
30 * decision by deleting the provisions above and replace them with the notice
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
31 * and other provisions required by the GPL or the LGPL. If you do not delete
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
32 * the provisions above, a recipient may use your version of this file under
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
33 * the terms of any one of the MPL, the GPL or the LGPL.
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
34 *
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
35 * ***** END LICENSE BLOCK ***** */
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
36
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
37 #include "context.h"
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
38 #include "object.h"
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
39 #include "function.h"
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
40 #include "utils.h"
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
41
67
b5160c82be65 Added comments.
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
42 // This is the default JSOperationCallback for pymonkey-owned JS contexts,
b5160c82be65 Added comments.
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
43 // when they've defined one in Python.
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
44 static JSBool
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
45 PYM_operationCallback(JSContext *cx)
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
46 {
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
47 PYM_PyAutoEnsureGIL gil;
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
48 PYM_JSContextObject *context = (PYM_JSContextObject *)
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
49 JS_GetContextPrivate(cx);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
50
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
51 PyObject *callable = context->opCallback;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
52 PyObject *args = PyTuple_Pack(1, (PyObject *) context);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
53 if (args == NULL) {
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
54 JS_ReportOutOfMemory(cx);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
55 return JS_FALSE;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
56 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
57 PyObject *result = PyObject_Call(callable, args, NULL);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
58 Py_DECREF(args);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
59 if (result == NULL) {
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
60 PYM_pythonExceptionToJs(context);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
61 return JS_FALSE;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
62 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
63
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
64 Py_DECREF(result);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
65 return JS_TRUE;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
66 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
67
48
bc4263c6ae82 Added license blocks to all .c/.h files.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
68 // This is the default JSErrorReporter for pymonkey-owned JS contexts.
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
69 static void
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
70 PYM_reportError(JSContext *cx, const char *message, JSErrorReport *report)
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
71 {
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
72 PYM_PyAutoEnsureGIL gil;
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
73
47
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
74 // Convert JS warnings into Python warnings.
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
75 if (JSREPORT_IS_WARNING(report->flags)) {
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
76 if (report->filename)
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
77 PyErr_WarnExplicit(NULL, message, report->filename, report->lineno,
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
78 NULL, NULL);
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
79 else
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
80 PyErr_Warn(NULL, message);
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
81 } else
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
82 // TODO: Not sure if this will ever get called, but we should know
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
83 // if it is.
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
84 PyErr_Warn(NULL, "A JS error was reported.");
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
85 }
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
86
125
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
87 static int
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
88 PYM_traverse(PYM_JSContextObject *self, visitproc visit, void *arg)
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
89 {
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
90 Py_VISIT(self->opCallback);
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
91 Py_VISIT(self->runtime);
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
92 return 0;
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
93 }
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
94
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
95 static int
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
96 PYM_clear(PYM_JSContextObject *self)
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
97 {
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
98 Py_CLEAR(self->opCallback);
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
99 Py_CLEAR(self->runtime);
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
100 return 0;
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
101 }
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
102
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
103 static void
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
104 PYM_JSContextDealloc(PYM_JSContextObject *self)
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
105 {
126
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 125
diff changeset
106 if (self->weakrefs)
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 125
diff changeset
107 PyObject_ClearWeakRefs((PyObject *) self);
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
108 if (self->cx) {
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
109 JS_DestroyContext(self->cx);
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
110 self->cx = NULL;
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
111 }
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
112
125
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
113 PYM_clear(self);
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
114 self->ob_type->tp_free((PyObject *) self);
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
115 }
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
116
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
117 static PyObject *
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
118 PYM_getRuntime(PYM_JSContextObject *self, PyObject *args)
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
119 {
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
120 Py_INCREF(self->runtime);
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
121 return (PyObject *) self->runtime;
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
122 }
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
123
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
124 static PyObject *
71
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
125 PYM_getObjectPrivate(PYM_JSContextObject *self, PyObject *args)
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
126 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
127 PYM_SANITY_CHECK(self->runtime);
71
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
128 PYM_JSObject *object;
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
129
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
130 if (!PyArg_ParseTuple(args, "O!", &PYM_JSObjectType, &object))
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
131 return NULL;
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
132
89
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
133 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime);
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
134
84
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
135 JSObject *obj = object->obj;
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
136
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
137 if (JS_ObjectIsFunction(self->cx, obj)) {
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
138 jsval functionHolder;
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
139 if (!JS_GetReservedSlot(self->cx, obj, 0, &functionHolder)) {
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
140 JS_ClearPendingException(self->cx);
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
141 Py_RETURN_NONE;
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
142 }
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
143 if (!JSVAL_IS_OBJECT(functionHolder))
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
144 Py_RETURN_NONE;
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
145 obj = JSVAL_TO_OBJECT(functionHolder);
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
146 }
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
147
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
148 JSClass *klass = JS_GET_CLASS(self->cx, obj);
71
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
149 if (klass != &PYM_JS_ObjectClass)
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
150 Py_RETURN_NONE;
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
151
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
152 PyObject *pyObject;
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
153
84
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
154 if (!PYM_JS_getPrivatePyObject(self->cx, obj, &pyObject)) {
73
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 72
diff changeset
155 PYM_jsExceptionToPython(self);
71
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
156 return NULL;
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
157 }
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
158
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
159 if (pyObject == NULL)
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
160 pyObject = Py_None;
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
161
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
162 Py_INCREF(pyObject);
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
163 return pyObject;
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
164 }
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
165
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
166 static PyObject *
81
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
167 PYM_clearObjectPrivate(PYM_JSContextObject *self, PyObject *args)
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
168 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
169 PYM_SANITY_CHECK(self->runtime);
81
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
170 PYM_JSObject *object;
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
171
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
172 if (!PyArg_ParseTuple(args, "O!", &PYM_JSObjectType, &object))
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
173 return NULL;
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
174
89
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
175 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime);
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
176
84
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
177 JSObject *obj = object->obj;
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
178
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
179 if (JS_ObjectIsFunction(self->cx, obj)) {
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
180 jsval functionHolder;
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
181 if (!JS_GetReservedSlot(self->cx, obj, 0, &functionHolder)) {
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
182 JS_ClearPendingException(self->cx);
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
183 Py_RETURN_NONE;
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
184 }
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
185 if (!JSVAL_IS_OBJECT(functionHolder))
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
186 Py_RETURN_NONE;
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
187 obj = JSVAL_TO_OBJECT(functionHolder);
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
188 }
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
189
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
190 JSClass *klass = JS_GET_CLASS(self->cx, obj);
81
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
191 if (klass != &PYM_JS_ObjectClass)
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
192 Py_RETURN_NONE;
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
193
84
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 83
diff changeset
194 if (!PYM_JS_setPrivatePyObject(self->cx, obj, Py_None)) {
81
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
195 PYM_jsExceptionToPython(self);
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
196 return NULL;
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
197 }
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
198
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
199 Py_RETURN_NONE;
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
200 }
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
201
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
202 static PyObject *
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
203 PYM_newObject(PYM_JSContextObject *self, PyObject *args)
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
204 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
205 PYM_SANITY_CHECK(self->runtime);
71
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
206 PyObject *privateObj = NULL;
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
207
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
208 if (!PyArg_ParseTuple(args, "|O", &privateObj))
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
209 return NULL;
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
210
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
211 JSObject *obj = PYM_JS_newObject(self->cx, privateObj);
18
f3223debd70b Refactoring; moved PYM_JSObject creation code into a new public function in object.c.
Atul Varma <varmaa@toolness.com>
parents: 17
diff changeset
212 if (obj == NULL) {
70
b0360c0ed546 Factored the JS FunctionHolder class into the JS PymonkeyObject class, so that any PymonkeyObject can contain a private Python object if it needs to.
Atul Varma <varmaa@toolness.com>
parents: 67
diff changeset
213 PyErr_SetString(PYM_error, "PYM_JS_newObject() failed");
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
214 return NULL;
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
215 }
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
216
19
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
217 // If this fails, we don't need to worry about cleaning up
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
218 // obj because it'll get cleaned up at the next GC.
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
219 return (PyObject *) PYM_newJSObject(self, obj, NULL);
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
220 }
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
221
14
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
222 static PyObject *
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
223 PYM_getProperty(PYM_JSContextObject *self, PyObject *args)
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
224 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
225 PYM_SANITY_CHECK(self->runtime);
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
226 PYM_JSObject *object;
91
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
227 char *buffer = NULL;
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
228 int size;
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
229
91
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
230 if (!PyArg_ParseTuple(args, "O!es#", &PYM_JSObjectType, &object,
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
231 "utf-16", &buffer, &size))
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
232 return NULL;
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
233
91
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
234 if (self->runtime != object->runtime) {
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
235 PyMem_Free(buffer);
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
236 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime);
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
237 }
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
238
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
239 jsval val;
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
240 JSBool result;
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
241 Py_BEGIN_ALLOW_THREADS;
91
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
242 // Note that we're manipulating buffer and size here to get rid of
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
243 // the BOM.
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
244 result = JS_GetUCProperty(self->cx, object->obj, (jschar *) (buffer + 2),
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
245 (size / 2) - 1, &val);
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
246 Py_END_ALLOW_THREADS;
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
247
91
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
248 PyMem_Free(buffer);
97d1faf02460 Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
249
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
250 if (!result) {
73
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 72
diff changeset
251 PYM_jsExceptionToPython(self);
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
252 return NULL;
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
253 }
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
254
21
fc04e5f1c675 Changed object constructor to take a context instead of a runtime.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
255 return PYM_jsvalToPyObject(self, val);
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
256 }
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
257
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
258 static PyObject *
60
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
259 PYM_gc(PYM_JSContextObject *self, PyObject *args)
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
260 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
261 PYM_SANITY_CHECK(self->runtime);
60
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
262 JS_GC(self->cx);
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
263 Py_RETURN_NONE;
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
264 }
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
265
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
266 static PyObject *
14
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
267 PYM_initStandardClasses(PYM_JSContextObject *self, PyObject *args)
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
268 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
269 PYM_SANITY_CHECK(self->runtime);
14
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
270 PYM_JSObject *object;
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
271
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
272 if (!PyArg_ParseTuple(args, "O!", &PYM_JSObjectType, &object))
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
273 return NULL;
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
274
89
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
275 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime);
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
276
14
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
277 if (!JS_InitStandardClasses(self->cx, object->obj)) {
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
278 PyErr_SetString(PYM_error, "JS_InitStandardClasses() failed");
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
279 return NULL;
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
280 }
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
281
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
282 Py_RETURN_NONE;
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
283 }
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
284
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
285 static PyObject *
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
286 PYM_evaluateScript(PYM_JSContextObject *self, PyObject *args)
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
287 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
288 PYM_SANITY_CHECK(self->runtime);
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
289 PYM_JSObject *object;
122
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
290 char *source = NULL;
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
291 int sourceLen;
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
292 const char *filename;
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
293 int lineNo;
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
294
122
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
295 if (!PyArg_ParseTuple(args, "O!es#si", &PYM_JSObjectType, &object,
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
296 "utf-16", &source, &sourceLen, &filename, &lineNo))
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
297 return NULL;
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
298
122
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
299 if (self->runtime != object->runtime) {
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
300 PyMem_Free(source);
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
301 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime);
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
302 }
89
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
303
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
304 jsval rval;
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
305 JSBool result;
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
306 Py_BEGIN_ALLOW_THREADS;
122
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
307 // Note that we're manipulating buffer and size here to get rid of
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
308 // the BOM.
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
309 result = JS_EvaluateUCScript(self->cx, object->obj, (jschar *) (source + 2),
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
310 (sourceLen / 2) - 1, filename, lineNo, &rval);
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
311 Py_END_ALLOW_THREADS;
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
312
122
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
313 PyMem_Free(source);
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
314
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
315 if (!result) {
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
316 PYM_jsExceptionToPython(self);
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
317 return NULL;
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
318 }
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
319
21
fc04e5f1c675 Changed object constructor to take a context instead of a runtime.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
320 PyObject *pyRval = PYM_jsvalToPyObject(self, rval);
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
321 return pyRval;
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
322 }
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
323
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
324 static PyObject *
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
325 PYM_defineProperty(PYM_JSContextObject *self, PyObject *args)
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
326 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
327 PYM_SANITY_CHECK(self->runtime);
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
328 PYM_JSObject *object;
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
329 PyObject *value;
104
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
330 char *name = NULL;
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
331 int namelen;
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
332
104
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
333 if (!PyArg_ParseTuple(args, "O!es#O", &PYM_JSObjectType, &object,
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
334 "utf-16", &name, &namelen, &value))
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
335 return NULL;
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
336
104
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
337 if (self->runtime != object->runtime) {
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
338 PyMem_Free(name);
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
339 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime);
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
340 }
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
341
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
342 jsval jsValue;
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
343
104
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
344 if (PYM_pyObjectToJsval(self, value, &jsValue) == -1) {
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
345 PyMem_Free(name);
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
346 return NULL;
104
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
347 }
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
348
104
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
349 // Note that we're manipulating buffer and size here to get rid of
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
350 // the BOM.
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
351 if (!JS_DefineUCProperty(self->cx, object->obj, (jschar *) (name + 2),
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
352 (namelen / 2) - 1, jsValue, NULL, NULL,
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
353 JSPROP_ENUMERATE)) {
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
354 // TODO: There's probably an exception pending on self->cx,
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
355 // what should we do about it?
104
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
356 PyMem_Free(name);
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
357 PyErr_SetString(PYM_error, "JS_DefineProperty() failed");
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
358 return NULL;
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
359 }
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
360
104
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 100
diff changeset
361 PyMem_Free(name);
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
362 Py_RETURN_NONE;
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
363 }
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
364
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
365 static PyObject *
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
366 PYM_callFunction(PYM_JSContextObject *self, PyObject *args)
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
367 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
368 PYM_SANITY_CHECK(self->runtime);
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
369 PYM_JSObject *obj;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
370 PYM_JSFunction *fun;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
371 PyObject *funcArgs;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
372
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
373 if (!PyArg_ParseTuple(args, "O!O!O!", &PYM_JSObjectType, &obj,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
374 &PYM_JSFunctionType, &fun,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
375 &PyTuple_Type, &funcArgs))
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
376 return NULL;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
377
89
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
378 PYM_ENSURE_RUNTIME_MATCH(self->runtime, obj->runtime);
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
379 PYM_ENSURE_RUNTIME_MATCH(self->runtime, fun->base.runtime);
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
380
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
381 uintN argc = PyTuple_Size(funcArgs);
100
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
382
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
383 jsval *argv = (jsval *) PyMem_Malloc(sizeof(jsval) * argc);
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
384 if (argv == NULL)
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
385 return PyErr_NoMemory();
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
386
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
387 jsval *currArg = argv;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
388
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
389 for (unsigned int i = 0; i < argc; i++) {
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
390 PyObject *item = PyTuple_GET_ITEM(funcArgs, i);
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
391 if (item == NULL ||
100
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
392 PYM_pyObjectToJsval(self, item, currArg) == -1) {
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
393 PyMem_Free(argv);
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
394 return NULL;
100
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
395 }
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
396 currArg++;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
397 }
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
398
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
399 jsval rval;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
400
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
401 // TODO: This assumes that a JSFunction * is actually a subclass of
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
402 // a JSObject *, which may or may not be regarded as an implementation
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
403 // detail.
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
404 JSBool result;
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
405 Py_BEGIN_ALLOW_THREADS;
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
406 result = JS_CallFunction(self->cx, obj->obj,
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
407 (JSFunction *) fun->base.obj,
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
408 argc, argv, &rval);
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
409 Py_END_ALLOW_THREADS;
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
410
100
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
411 PyMem_Free(argv);
b3cc704c035e PYM_callFunction() now uses PyMem_Malloc() to dynamically allocate space for arguments on the heap, since MSVC doesn't seem to support dynamically-sized arrays on the stack.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
412
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
413 if (!result) {
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
414 PYM_jsExceptionToPython(self);
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
415 return NULL;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
416 }
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
417
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
418 return PYM_jsvalToPyObject(self, rval);
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
419 }
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
420
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
421 static PyObject *
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
422 PYM_newFunction(PYM_JSContextObject *self, PyObject *args)
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
423 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
424 PYM_SANITY_CHECK(self->runtime);
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
425 PyObject *callable;
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
426 const char *name;
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
427
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
428 if (!PyArg_ParseTuple(args, "Os", &callable, &name))
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
429 return NULL;
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
430
40
8a7abd0bb48d Renamed PYM_newJSFunction() to PYM_newJSFunctionFromCallable(). PYM_newJSObject() now returns objects of type PYM_JSFunctionType as needed.
Atul Varma <varmaa@toolness.com>
parents: 38
diff changeset
431 return (PyObject *) PYM_newJSFunctionFromCallable(self, callable, name);
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
432 }
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
433
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
434 static PyObject *
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
435 PYM_setOperationCallback(PYM_JSContextObject *self, PyObject *args)
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
436 {
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
437 PYM_SANITY_CHECK(self->runtime);
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
438 PyObject *callable;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
439
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
440 if (!PyArg_ParseTuple(args, "O", &callable))
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
441 return NULL;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
442
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
443 if (!PyCallable_Check(callable)) {
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
444 PyErr_SetString(PyExc_TypeError, "Callable must be callable");
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
445 return NULL;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
446 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
447
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
448 JS_SetOperationCallback(self->cx, PYM_operationCallback);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
449
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
450 Py_INCREF(callable);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
451 if (self->opCallback)
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
452 Py_DECREF(self->opCallback);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
453 self->opCallback = callable;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
454
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
455 Py_RETURN_NONE;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
456 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
457
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
458 static PyObject *
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
459 PYM_triggerOperationCallback(PYM_JSContextObject *self, PyObject *args)
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
460 {
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
461 JS_TriggerOperationCallback(self->cx);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
462 Py_RETURN_NONE;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
463 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
464
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
465 static PyMethodDef PYM_JSContextMethods[] = {
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
466 {"get_runtime", (PyCFunction) PYM_getRuntime, METH_VARARGS,
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
467 "Get the JavaScript runtime associated with this context."},
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
468 {"new_object", (PyCFunction) PYM_newObject, METH_VARARGS,
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
469 "Create a new JavaScript object."},
14
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
470 {"init_standard_classes",
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
471 (PyCFunction) PYM_initStandardClasses, METH_VARARGS,
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
472 "Add standard classes and functions to the given object."},
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
473 {"evaluate_script",
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
474 (PyCFunction) PYM_evaluateScript, METH_VARARGS,
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
475 "Evaluate the given JavaScript code in the context of the given "
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
476 "global object, using the given filename"
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 15
diff changeset
477 "and line number information."},
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
478 {"call_function",
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
479 (PyCFunction) PYM_callFunction, METH_VARARGS,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
480 "Calls a JS function."},
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
481 {"new_function",
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
482 (PyCFunction) PYM_newFunction, METH_VARARGS,
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
483 "Creates a new function callable from JS."},
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
484 {"define_property",
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
485 (PyCFunction) PYM_defineProperty, METH_VARARGS,
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
486 "Defines a property on an object."},
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
487 {"get_property", (PyCFunction) PYM_getProperty, METH_VARARGS,
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
488 "Gets the given property for the given JavaScript object."},
60
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
489 {"gc", (PyCFunction) PYM_gc, METH_VARARGS,
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
490 "Performs garbage collection on the context's runtime."},
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
491 {"set_operation_callback", (PyCFunction) PYM_setOperationCallback,
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
492 METH_VARARGS,
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
493 "Sets the operation callback for the context."},
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
494 {"trigger_operation_callback", (PyCFunction) PYM_triggerOperationCallback,
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
495 METH_VARARGS,
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
496 "Triggers the operation callback for the context."},
71
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
497 {"get_object_private", (PyCFunction) PYM_getObjectPrivate, METH_VARARGS,
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 70
diff changeset
498 "Returns the private Python object stored in the JavaScript object."},
81
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
499 {"clear_object_private", (PyCFunction) PYM_clearObjectPrivate, METH_VARARGS,
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
500 "Clears any private Python object stored in the JavaScript object."},
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
501 {NULL, NULL, 0, NULL}
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
502 };
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
503
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
504 PyTypeObject PYM_JSContextType = {
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
505 PyObject_HEAD_INIT(NULL)
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
506 0, /*ob_size*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
507 "pymonkey.Context", /*tp_name*/
12
6d95cfaa1e0b Fixed a code typo.
Atul Varma <varmaa@toolness.com>
parents: 11
diff changeset
508 sizeof(PYM_JSContextObject), /*tp_basicsize*/
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
509 0, /*tp_itemsize*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
510 /*tp_dealloc*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
511 (destructor) PYM_JSContextDealloc,
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
512 0, /*tp_print*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
513 0, /*tp_getattr*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
514 0, /*tp_setattr*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
515 0, /*tp_compare*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
516 0, /*tp_repr*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
517 0, /*tp_as_number*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
518 0, /*tp_as_sequence*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
519 0, /*tp_as_mapping*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
520 0, /*tp_hash */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
521 0, /*tp_call*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
522 0, /*tp_str*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
523 0, /*tp_getattro*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
524 0, /*tp_setattro*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
525 0, /*tp_as_buffer*/
125
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
526 /*tp_flags*/
126
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 125
diff changeset
527 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_WEAKREFS,
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
528 /* tp_doc */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
529 "JavaScript Context.",
125
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
530 (traverseproc) PYM_traverse, /* tp_traverse */
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
531 (inquiry) PYM_clear, /* tp_clear */
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
532 0, /* tp_richcompare */
126
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 125
diff changeset
533 /* tp_weaklistoffset */
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 125
diff changeset
534 offsetof(PYM_JSContextObject, weakrefs),
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
535 0, /* tp_iter */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
536 0, /* tp_iternext */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
537 PYM_JSContextMethods, /* tp_methods */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
538 0, /* tp_members */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
539 0, /* tp_getset */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
540 0, /* tp_base */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
541 0, /* tp_dict */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
542 0, /* tp_descr_get */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
543 0, /* tp_descr_set */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
544 0, /* tp_dictoffset */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
545 0, /* tp_init */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
546 0, /* tp_alloc */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
547 0, /* tp_new */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
548 };
19
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
549
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
550 extern PYM_JSContextObject *
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
551 PYM_newJSContextObject(PYM_JSRuntimeObject *runtime, JSContext *cx)
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
552 {
125
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
553 PYM_JSContextObject *context = PyObject_GC_New(PYM_JSContextObject,
05e18059b5c4 Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
554 &PYM_JSContextType);
19
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
555 if (context == NULL)
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
556 return NULL;
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
557
126
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 125
diff changeset
558 context->weakrefs = NULL;
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
559 context->opCallback = NULL;
19
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
560 context->runtime = runtime;
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
561 Py_INCREF(runtime);
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
562
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
563 context->cx = cx;
43
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 42
diff changeset
564 JS_SetContextPrivate(cx, context);
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 44
diff changeset
565 JS_SetErrorReporter(cx, PYM_reportError);
19
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
566
38
6cd870a2b81e If the JS engine supports GC zeal setting, we enable it automatically to help find any memory management bugs.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
567 #ifdef JS_GC_ZEAL
6cd870a2b81e If the JS engine supports GC zeal setting, we enable it automatically to help find any memory management bugs.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
568 // TODO: Consider exposing JS_SetGCZeal() to Python instead of
6cd870a2b81e If the JS engine supports GC zeal setting, we enable it automatically to help find any memory management bugs.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
569 // hard-coding it here.
6cd870a2b81e If the JS engine supports GC zeal setting, we enable it automatically to help find any memory management bugs.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
570 JS_SetGCZeal(cx, 2);
6cd870a2b81e If the JS engine supports GC zeal setting, we enable it automatically to help find any memory management bugs.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
571 #endif
6cd870a2b81e If the JS engine supports GC zeal setting, we enable it automatically to help find any memory management bugs.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
572
19
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
573 return context;
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
574 }