annotate context.c @ 72:cd545c03eeef

Got rid of our one call to JS_BeginRequest()/JS_EndRequest(), since we're not really paying attention to it at the moment anyways.
author Atul Varma <varmaa@toolness.com>
date Mon, 27 Jul 2009 21:53:43 -0700
parents 9b3f4e53e365
children efa0cfe6fc03
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
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
87 static void
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
88 PYM_JSContextDealloc(PYM_JSContextObject *self)
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
89 {
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
90 if (self->opCallback) {
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
91 Py_DECREF(self->opCallback);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
92 self->opCallback = NULL;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
93 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
94
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
95 if (self->cx) {
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
96 JS_DestroyContext(self->cx);
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
97 self->cx = NULL;
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
98 }
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
99
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
100 Py_DECREF(self->runtime);
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
101 self->runtime = NULL;
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
102
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
103 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
104 }
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
105
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
106 static PyObject *
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
107 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
108 {
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
109 Py_INCREF(self->runtime);
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
110 return (PyObject *) self->runtime;
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
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
113 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
114 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
115 {
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
116 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
117
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
118 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
119 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
120
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
121 JSClass *klass = JS_GET_CLASS(cx, object->obj);
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
122 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
123 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
124
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 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
126
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
127 if (!PYM_JS_getPrivatePyObject(self->cx, object->obj, &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
128 // TODO: Get the actual JS exception. Any exception that exists
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 // here will probably still be pending on the JS context.
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 PyErr_SetString(PYM_error, "Getting private failed.");
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 }
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
133
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
134 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
135 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
136
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
137 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
138 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
139 }
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
140
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
141 static PyObject *
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
142 PYM_newObject(PYM_JSContextObject *self, PyObject *args)
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
143 {
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
144 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
145
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
146 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
147 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
148
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 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
150 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
151 PyErr_SetString(PYM_error, "PYM_JS_newObject() failed");
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
152 return NULL;
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
153 }
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
154
19
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
155 // 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
156 // 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
157 return (PyObject *) PYM_newJSObject(self, obj, NULL);
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
158 }
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
159
14
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
160 static PyObject *
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
161 PYM_getProperty(PYM_JSContextObject *self, PyObject *args)
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
162 {
29
608d086d12e3 Added a new PYM_pyObjectToJsval() function that only supports unicode for the moment. Also, whereever we're assuming that Py_UNICODE is UCS-2, we're surrounding such code with #ifndef Py_UNICODE_WIDE.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
163 #ifndef Py_UNICODE_WIDE
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
164 PYM_JSObject *object;
27
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
165 Py_UNICODE *string;
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
166
27
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
167 if (!PyArg_ParseTuple(args, "O!u", &PYM_JSObjectType, &object,
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
168 &string))
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
169 return NULL;
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
170
27
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
171 JSString *jsString = JS_NewUCStringCopyZ(self->cx,
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
172 (const jschar *) string);
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
173 if (jsString == NULL) {
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
174 PyErr_SetString(PYM_error, "JS_NewStringCopyZ() failed");
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
175 return NULL;
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
176 }
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
177
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
178 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
179 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
180 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
181 result = JS_GetUCProperty(self->cx, object->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
182 JS_GetStringChars(jsString),
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
183 JS_GetStringLength(jsString), &val);
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
184 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
185
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
186 if (!result) {
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
187 // TODO: Get the actual JS exception. Any exception that exists
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
188 // here will probably still be pending on the JS context.
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
189 PyErr_SetString(PYM_error, "Getting property failed.");
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
190 return NULL;
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
191 }
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
192
21
fc04e5f1c675 Changed object constructor to take a context instead of a runtime.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
193 return PYM_jsvalToPyObject(self, val);
29
608d086d12e3 Added a new PYM_pyObjectToJsval() function that only supports unicode for the moment. Also, whereever we're assuming that Py_UNICODE is UCS-2, we're surrounding such code with #ifndef Py_UNICODE_WIDE.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
194 #else
608d086d12e3 Added a new PYM_pyObjectToJsval() function that only supports unicode for the moment. Also, whereever we're assuming that Py_UNICODE is UCS-2, we're surrounding such code with #ifndef Py_UNICODE_WIDE.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
195 PyErr_SetString(PyExc_NotImplementedError,
608d086d12e3 Added a new PYM_pyObjectToJsval() function that only supports unicode for the moment. Also, whereever we're assuming that Py_UNICODE is UCS-2, we're surrounding such code with #ifndef Py_UNICODE_WIDE.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
196 "This function is not yet implemented for wide "
608d086d12e3 Added a new PYM_pyObjectToJsval() function that only supports unicode for the moment. Also, whereever we're assuming that Py_UNICODE is UCS-2, we're surrounding such code with #ifndef Py_UNICODE_WIDE.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
197 "unicode builds of Python.");
608d086d12e3 Added a new PYM_pyObjectToJsval() function that only supports unicode for the moment. Also, whereever we're assuming that Py_UNICODE is UCS-2, we're surrounding such code with #ifndef Py_UNICODE_WIDE.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
198 return NULL;
608d086d12e3 Added a new PYM_pyObjectToJsval() function that only supports unicode for the moment. Also, whereever we're assuming that Py_UNICODE is UCS-2, we're surrounding such code with #ifndef Py_UNICODE_WIDE.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
199 #endif
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
200 }
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
201
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
202 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
203 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
204 {
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
205 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
206 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
207 }
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
208
e557d84318a7 Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents: 48
diff changeset
209 static PyObject *
14
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
210 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
211 {
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
212 PYM_JSObject *object;
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
213
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
214 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
215 return NULL;
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
216
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
217 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
218 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
219 return NULL;
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
220 }
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
221
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
222 Py_RETURN_NONE;
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
223 }
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
224
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
225 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
226 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
227 {
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
228 PYM_JSObject *object;
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
229 const char *source;
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
230 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
231 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
232 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
233
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
234 if (!PyArg_ParseTuple(args, "O!s#si", &PYM_JSObjectType, &object,
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
235 &source, &sourceLen, &filename, &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
236 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
237
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
238 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
239 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
240 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
241 result = JS_EvaluateScript(self->cx, object->obj, source, sourceLen,
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
242 filename, lineNo, &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
243 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
244
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
245 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
246 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
247 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
248 }
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
249
21
fc04e5f1c675 Changed object constructor to take a context instead of a runtime.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
250 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
251 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
252 }
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
253
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
254 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
255 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
256 {
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
257 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
258 PyObject *value;
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
259 const char *name;
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
260
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
261 if (!PyArg_ParseTuple(args, "O!sO", &PYM_JSObjectType, &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
262 &name, &value))
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
263 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
264
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
265 jsval jsValue;
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
266
44
0b9a316ce4ef Changed function signature of PYM_pyObjectToJsval() to be consistent w/ the rest of the API.
Atul Varma <varmaa@toolness.com>
parents: 43
diff changeset
267 if (PYM_pyObjectToJsval(self, value, &jsValue) == -1)
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
268 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
269
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
270 // TODO: Support unicode naming.
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
271 if (!JS_DefineProperty(self->cx, object->obj, name, jsValue,
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
272 NULL, NULL, JSPROP_ENUMERATE)) {
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
273 // 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
274 // what should we do about it?
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
275 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
276 return NULL;
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
277 }
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
278
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
279 Py_RETURN_NONE;
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
280 }
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
281
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
282 static PyObject *
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
283 PYM_callFunction(PYM_JSContextObject *self, PyObject *args)
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
284 {
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
285 PYM_JSObject *obj;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
286 PYM_JSFunction *fun;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
287 PyObject *funcArgs;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
288
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
289 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
290 &PYM_JSFunctionType, &fun,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
291 &PyTuple_Type, &funcArgs))
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
292 return NULL;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
293
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
294 uintN argc = PyTuple_Size(funcArgs);
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
295 jsval argv[argc];
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
296 jsval *currArg = argv;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
297
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
298 for (unsigned int i = 0; i < argc; i++) {
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
299 PyObject *item = PyTuple_GET_ITEM(funcArgs, i);
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
300 if (item == NULL ||
44
0b9a316ce4ef Changed function signature of PYM_pyObjectToJsval() to be consistent w/ the rest of the API.
Atul Varma <varmaa@toolness.com>
parents: 43
diff changeset
301 PYM_pyObjectToJsval(self, item, currArg) == -1)
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
302 return NULL;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
303 currArg++;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
304 }
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
305
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
306 jsval rval;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
307
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
308 // 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
309 // 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
310 // 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
311 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
312 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
313 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
314 (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
315 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
316 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
317
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
318 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
319 PYM_jsExceptionToPython(self);
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
320 return NULL;
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
321 }
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
322
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
323 return PYM_jsvalToPyObject(self, rval);
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
324 }
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
325
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
326 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
327 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
328 {
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
329 PyObject *callable;
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
330 const char *name;
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
331
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 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
333 return NULL;
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
334
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
335 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
336 }
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 21
diff changeset
337
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
338 static PyObject *
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
339 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
340 {
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
341 PyObject *callable;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
342
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
343 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
344 return NULL;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
345
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
346 if (!PyCallable_Check(callable)) {
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
347 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
348 return NULL;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
349 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
350
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
351 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
352
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
353 Py_INCREF(callable);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
354 if (self->opCallback)
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
355 Py_DECREF(self->opCallback);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
356 self->opCallback = callable;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
357
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
358 Py_RETURN_NONE;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
359 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
360
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
361 static PyObject *
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
362 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
363 {
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
364 JS_TriggerOperationCallback(self->cx);
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
365 Py_RETURN_NONE;
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
366 }
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
367
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
368 static PyMethodDef PYM_JSContextMethods[] = {
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
369 {"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
370 "Get the JavaScript runtime associated with this context."},
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
371 {"new_object", (PyCFunction) PYM_newObject, METH_VARARGS,
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 12
diff changeset
372 "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
373 {"init_standard_classes",
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
374 (PyCFunction) PYM_initStandardClasses, METH_VARARGS,
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
375 "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
376 {"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
377 (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
378 "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
379 "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
380 "and line number information."},
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
381 {"call_function",
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
382 (PyCFunction) PYM_callFunction, METH_VARARGS,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
383 "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
384 {"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
385 (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
386 "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
387 {"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
388 (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
389 "Defines a property on an object."},
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
390 {"get_property", (PyCFunction) PYM_getProperty, METH_VARARGS,
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
391 "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
392 {"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
393 "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
394 {"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
395 METH_VARARGS,
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
396 "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
397 {"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
398 METH_VARARGS,
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
399 "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
400 {"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
401 "Returns the 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
402 {NULL, NULL, 0, NULL}
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
403 };
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
404
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
405 PyTypeObject PYM_JSContextType = {
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
406 PyObject_HEAD_INIT(NULL)
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
407 0, /*ob_size*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
408 "pymonkey.Context", /*tp_name*/
12
6d95cfaa1e0b Fixed a code typo.
Atul Varma <varmaa@toolness.com>
parents: 11
diff changeset
409 sizeof(PYM_JSContextObject), /*tp_basicsize*/
11
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
410 0, /*tp_itemsize*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
411 /*tp_dealloc*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
412 (destructor) PYM_JSContextDealloc,
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
413 0, /*tp_print*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
414 0, /*tp_getattr*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
415 0, /*tp_setattr*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
416 0, /*tp_compare*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
417 0, /*tp_repr*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
418 0, /*tp_as_number*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
419 0, /*tp_as_sequence*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
420 0, /*tp_as_mapping*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
421 0, /*tp_hash */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
422 0, /*tp_call*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
423 0, /*tp_str*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
424 0, /*tp_getattro*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
425 0, /*tp_setattro*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
426 0, /*tp_as_buffer*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
427 Py_TPFLAGS_DEFAULT, /*tp_flags*/
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
428 /* tp_doc */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
429 "JavaScript Context.",
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
430 0, /* tp_traverse */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
431 0, /* tp_clear */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
432 0, /* tp_richcompare */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
433 0, /* tp_weaklistoffset */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
434 0, /* tp_iter */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
435 0, /* tp_iternext */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
436 PYM_JSContextMethods, /* tp_methods */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
437 0, /* tp_members */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
438 0, /* tp_getset */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
439 0, /* tp_base */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
440 0, /* tp_dict */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
441 0, /* tp_descr_get */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
442 0, /* tp_descr_set */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
443 0, /* tp_dictoffset */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
444 0, /* tp_init */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
445 0, /* tp_alloc */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
446 0, /* tp_new */
551ba05fe6ad factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
447 };
19
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
448
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
449 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
450 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
451 {
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
452 PYM_JSContextObject *context = PyObject_New(PYM_JSContextObject,
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
453 &PYM_JSContextType);
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
454 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
455 return NULL;
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
456
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 60
diff changeset
457 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
458 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
459 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
460
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
461 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
462 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
463 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
464
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
465 #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
466 // 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
467 // 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
468 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
469 #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
470
19
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
471 return context;
fbb9a61fa030 Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
472 }