Mercurial > pymonkey
annotate src/context.cpp @ 173:5cfb47c9e916 default tip
Minor line wrap and spacing fixes.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Tue, 01 Sep 2009 03:22:33 -0700 |
parents | dd32a92f6b4f |
children |
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 * |
170
dd32a92f6b4f
Initial attempt at renaming pymonkey to pydermonkey.
Atul Varma <varmaa@toolness.com>
parents:
166
diff
changeset
|
14 * The Original Code is Pydermonkey. |
48
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 | 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" |
136
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
40 #include "script.h" |
13 | 41 #include "utils.h" |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
42 |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
43 #include "jsdbgapi.h" |
146
b1cf9decc36f
Added 'lineno' and 'pc' attributes to stack frame information.
Atul Varma <varmaa@toolness.com>
parents:
145
diff
changeset
|
44 #include "jsscript.h" |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
45 |
170
dd32a92f6b4f
Initial attempt at renaming pymonkey to pydermonkey.
Atul Varma <varmaa@toolness.com>
parents:
166
diff
changeset
|
46 // This is the default throw hook for pydermonkey-owned JS contexts, |
165
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
47 // when they've defined one in Python. |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
48 static JSTrapStatus |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
49 PYM_throwHook(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval, |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
50 void *closure) |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
51 { |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
52 PYM_PyAutoEnsureGIL gil; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
53 PYM_JSContextObject *context = (PYM_JSContextObject *) |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
54 JS_GetContextPrivate(cx); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
55 |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
56 PyObject *callable = context->throwHook; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
57 PyObject *args = PyTuple_Pack(1, (PyObject *) context); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
58 if (args == NULL) { |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
59 JS_ReportOutOfMemory(cx); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
60 return JSTRAP_CONTINUE; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
61 } |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
62 PyObject *result = PyObject_Call(callable, args, NULL); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
63 Py_DECREF(args); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
64 if (result == NULL) { |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
65 PYM_pythonExceptionToJs(context); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
66 return JSTRAP_CONTINUE; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
67 } |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
68 |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
69 Py_DECREF(result); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
70 return JSTRAP_CONTINUE; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
71 } |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
72 |
173
5cfb47c9e916
Minor line wrap and spacing fixes.
Atul Varma <varmaa@toolness.com>
parents:
170
diff
changeset
|
73 // This is the default JSOperationCallback for pydermonkey-owned JS |
5cfb47c9e916
Minor line wrap and spacing fixes.
Atul Varma <varmaa@toolness.com>
parents:
170
diff
changeset
|
74 // contexts, 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
|
75 static JSBool |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
76 PYM_operationCallback(JSContext *cx) |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
77 { |
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
|
78 PYM_PyAutoEnsureGIL gil; |
64
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
79 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
|
80 JS_GetContextPrivate(cx); |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
81 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
82 PyObject *callable = context->opCallback; |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
83 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
|
84 if (args == NULL) { |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
85 JS_ReportOutOfMemory(cx); |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
86 return JS_FALSE; |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
87 } |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
88 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
|
89 Py_DECREF(args); |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
90 if (result == NULL) { |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
91 PYM_pythonExceptionToJs(context); |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
92 return JS_FALSE; |
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 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
95 Py_DECREF(result); |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
96 return JS_TRUE; |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
97 } |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
98 |
170
dd32a92f6b4f
Initial attempt at renaming pymonkey to pydermonkey.
Atul Varma <varmaa@toolness.com>
parents:
166
diff
changeset
|
99 // This is the default JSErrorReporter for pydermonkey-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
|
100 static void |
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
44
diff
changeset
|
101 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
|
102 { |
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
|
103 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
|
104 |
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
|
105 // 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
|
106 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
|
107 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 } 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
|
113 // 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
|
114 // 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
|
115 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
|
116 } |
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
44
diff
changeset
|
117 |
125
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
118 static int |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
119 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
|
120 { |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
121 Py_VISIT(self->opCallback); |
165
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
122 Py_VISIT(self->throwHook); |
125
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
123 Py_VISIT(self->runtime); |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
124 return 0; |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
125 } |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
126 |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
127 static int |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
128 PYM_clear(PYM_JSContextObject *self) |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
129 { |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
130 Py_CLEAR(self->opCallback); |
165
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
131 Py_CLEAR(self->throwHook); |
125
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
132 Py_CLEAR(self->runtime); |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
133 return 0; |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
134 } |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
135 |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
136 static void |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
137 PYM_JSContextDealloc(PYM_JSContextObject *self) |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
138 { |
126
8371983fee63
Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents:
125
diff
changeset
|
139 if (self->weakrefs) |
8371983fee63
Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents:
125
diff
changeset
|
140 PyObject_ClearWeakRefs((PyObject *) self); |
128
1e4d4d475e75
Fixed GC issues w/ context dealloc.
Atul Varma <varmaa@toolness.com>
parents:
127
diff
changeset
|
141 PyObject_GC_UnTrack(self); |
1e4d4d475e75
Fixed GC issues w/ context dealloc.
Atul Varma <varmaa@toolness.com>
parents:
127
diff
changeset
|
142 |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
143 if (self->cx) { |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
144 JS_DestroyContext(self->cx); |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
145 self->cx = NULL; |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
146 } |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
147 |
125
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
148 PYM_clear(self); |
128
1e4d4d475e75
Fixed GC issues w/ context dealloc.
Atul Varma <varmaa@toolness.com>
parents:
127
diff
changeset
|
149 PyObject_GC_Del(self); |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
150 } |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
151 |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
152 static PyObject * |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
153 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
|
154 { |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
155 Py_INCREF(self->runtime); |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
156 return (PyObject *) self->runtime; |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
157 } |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
158 |
13 | 159 static PyObject * |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
160 PYM_getStack(PYM_JSContextObject *self, PyObject *args) |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
161 { |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
162 PYM_SANITY_CHECK(self->runtime); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
163 |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
164 JSStackFrame *iteratorp = NULL; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
165 JSStackFrame *frame; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
166 PyObject *top = NULL; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
167 // This is always a borrowed reference, i.e. we never incref/decref it. |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
168 PyObject *last = NULL; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
169 |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
170 while ((frame = JS_FrameIterator(self->cx, &iteratorp)) != NULL) { |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
171 bool success = true; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
172 JSScript *script = JS_GetFrameScript(self->cx, frame); |
146
b1cf9decc36f
Added 'lineno' and 'pc' attributes to stack frame information.
Atul Varma <varmaa@toolness.com>
parents:
145
diff
changeset
|
173 unsigned int pc = 0; |
b1cf9decc36f
Added 'lineno' and 'pc' attributes to stack frame information.
Atul Varma <varmaa@toolness.com>
parents:
145
diff
changeset
|
174 unsigned int lineno = 0; |
155
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
175 PyObject *pyScript = NULL; |
157
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
176 PyObject *pyFunc = NULL; |
155
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
177 |
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
178 // TODO: Ideally, we'd always convert the script to an object and |
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
179 // set it as an attribute of the function, but this can result in |
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
180 // strange segfaults, perhaps because JS functions destroy their |
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
181 // scripts on finalization while creating an object from a script |
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
182 // makes it subject to GC. So to be safe, we'll only provide the |
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
183 // script object if one already exists. |
157
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
184 if (script) { |
146
b1cf9decc36f
Added 'lineno' and 'pc' attributes to stack frame information.
Atul Varma <varmaa@toolness.com>
parents:
145
diff
changeset
|
185 jsbytecode *pcByte = JS_GetFramePC(self->cx, frame); |
b1cf9decc36f
Added 'lineno' and 'pc' attributes to stack frame information.
Atul Varma <varmaa@toolness.com>
parents:
145
diff
changeset
|
186 pc = pcByte - script->code; |
b1cf9decc36f
Added 'lineno' and 'pc' attributes to stack frame information.
Atul Varma <varmaa@toolness.com>
parents:
145
diff
changeset
|
187 lineno = JS_PCToLineNumber(self->cx, script, pcByte); |
157
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
188 |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
189 if (JS_GetScriptObject(script)) { |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
190 pyScript = (PyObject *) PYM_newJSScript(self, script); |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
191 if (pyScript == NULL) { |
158 | 192 Py_XDECREF(top); |
157
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
193 return NULL; |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
194 } |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
195 } |
155
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
196 } |
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
197 |
b0c9d6884da3
Annoying workaround to get_stack() for the script object issue discovered in my last commit.
Atul Varma <varmaa@toolness.com>
parents:
152
diff
changeset
|
198 if (pyScript == NULL) { |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
199 pyScript = Py_None; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
200 Py_INCREF(pyScript); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
201 } |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
202 |
157
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
203 JSObject *funObj = JS_GetFrameFunctionObject(self->cx, frame); |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
204 if (funObj) { |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
205 pyFunc = (PyObject *) PYM_newJSObject(self, funObj, NULL); |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
206 if (pyFunc == NULL) { |
158 | 207 Py_XDECREF(top); |
208 Py_DECREF(pyScript); | |
157
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
209 return NULL; |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
210 } |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
211 } else { |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
212 pyFunc = Py_None; |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
213 Py_INCREF(pyFunc); |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
214 } |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
215 |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
216 PyObject *frameDict = Py_BuildValue( |
157
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
217 "{sOsIsIsOsO}", |
146
b1cf9decc36f
Added 'lineno' and 'pc' attributes to stack frame information.
Atul Varma <varmaa@toolness.com>
parents:
145
diff
changeset
|
218 "script", pyScript, |
b1cf9decc36f
Added 'lineno' and 'pc' attributes to stack frame information.
Atul Varma <varmaa@toolness.com>
parents:
145
diff
changeset
|
219 "pc", pc, |
149
9ac6adc6304b
'caller' key for base stack frame is now None.
Atul Varma <varmaa@toolness.com>
parents:
147
diff
changeset
|
220 "lineno", lineno, |
157
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
221 "caller", Py_None, |
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
222 "function", pyFunc |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
223 ); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
224 |
146
b1cf9decc36f
Added 'lineno' and 'pc' attributes to stack frame information.
Atul Varma <varmaa@toolness.com>
parents:
145
diff
changeset
|
225 Py_DECREF(pyScript); |
157
a31ff2de6017
Added 'function' key to stack frame dicts; lineno and pc information is now provided even if script is not.
Atul Varma <varmaa@toolness.com>
parents:
156
diff
changeset
|
226 Py_DECREF(pyFunc); |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
227 |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
228 if (frameDict) { |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
229 if (last) { |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
230 if (PyDict_SetItemString(last, "caller", frameDict) == 0) { |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
231 last = frameDict; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
232 Py_DECREF(frameDict); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
233 frameDict = NULL; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
234 } else |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
235 success = false; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
236 } else { |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
237 top = frameDict; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
238 last = frameDict; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
239 } |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
240 } else |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
241 success = false; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
242 |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
243 if (!success) { |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
244 Py_XDECREF(top); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
245 Py_XDECREF(frameDict); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
246 return NULL; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
247 } |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
248 } |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
249 |
147
ebc0ff767290
Ensure that get_stack() returns None if the stack is empty.
Atul Varma <varmaa@toolness.com>
parents:
146
diff
changeset
|
250 if (top) |
ebc0ff767290
Ensure that get_stack() returns None if the stack is empty.
Atul Varma <varmaa@toolness.com>
parents:
146
diff
changeset
|
251 return top; |
ebc0ff767290
Ensure that get_stack() returns None if the stack is empty.
Atul Varma <varmaa@toolness.com>
parents:
146
diff
changeset
|
252 Py_RETURN_NONE; |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
253 } |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
254 |
162
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
255 static int |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
256 PYM_maybeGetFunctionHolder(PYM_JSContextObject *context, |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
257 PYM_JSObject *object, |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
258 JSObject **result) |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
259 { |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
260 if (PyType_IsSubtype(object->ob_type, &PYM_JSFunctionType)) { |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
261 PYM_JSFunction *func = (PYM_JSFunction *) object; |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
262 if (func->isPython) { |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
263 jsval holder; |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
264 if (!JS_GetReservedSlot(context->cx, object->obj, 0, &holder)) { |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
265 PYM_jsExceptionToPython(context); |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
266 return -1; |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
267 } |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
268 *result = JSVAL_TO_OBJECT(holder); |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
269 return 0; |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
270 } |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
271 } |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
272 |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
273 return 0; |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
274 } |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
275 |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
276 static PyObject * |
166
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
277 PYM_isExceptionPending(PYM_JSContextObject *self, PyObject *args) |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
278 { |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
279 PYM_SANITY_CHECK(self->runtime); |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
280 |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
281 if (JS_IsExceptionPending(self->cx)) |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
282 Py_RETURN_TRUE; |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
283 Py_RETURN_FALSE; |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
284 } |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
285 |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
286 static PyObject * |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
287 PYM_getPendingException(PYM_JSContextObject *self, PyObject *args) |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
288 { |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
289 PYM_SANITY_CHECK(self->runtime); |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
290 |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
291 if (!JS_IsExceptionPending(self->cx)) |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
292 Py_RETURN_NONE; |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
293 |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
294 jsval exception; |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
295 |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
296 if (!JS_GetPendingException(self->cx, &exception)) { |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
297 PyErr_SetString(PYM_error, "JS_GetPendingException() failed"); |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
298 return NULL; |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
299 } |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
300 |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
301 return PYM_jsvalToPyObject(self, exception); |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
302 } |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
303 |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
304 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
|
305 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
|
306 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
307 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
|
308 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
|
309 |
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
|
310 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
|
311 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
|
312 |
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
|
313 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
|
314 |
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
|
315 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
|
316 |
162
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
317 if (PYM_maybeGetFunctionHolder(self, object, &obj) != 0) |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
318 return NULL; |
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
|
319 |
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
|
320 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
|
321 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
|
322 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
|
323 |
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
|
324 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
|
325 |
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
|
326 if (!PYM_JS_getPrivatePyObject(self->cx, obj, &pyObject)) { |
73 | 327 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
|
328 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
|
329 } |
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
|
330 |
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
|
331 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
|
332 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
|
333 |
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
|
334 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
|
335 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
|
336 } |
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
|
337 |
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
|
338 static PyObject * |
81
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
339 PYM_clearObjectPrivate(PYM_JSContextObject *self, PyObject *args) |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
340 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
341 PYM_SANITY_CHECK(self->runtime); |
81
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
342 PYM_JSObject *object; |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
343 |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
344 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
|
345 return NULL; |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
346 |
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
|
347 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
|
348 |
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
|
349 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
|
350 |
162
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
351 if (PYM_maybeGetFunctionHolder(self, object, &obj) != 0) |
d1606a6cf1c0
Made get_object_private() and clear_object_private() more robust.
Atul Varma <varmaa@toolness.com>
parents:
158
diff
changeset
|
352 return NULL; |
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
|
353 |
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
|
354 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
|
355 if (klass != &PYM_JS_ObjectClass) |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
356 Py_RETURN_NONE; |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
357 |
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
|
358 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
|
359 PYM_jsExceptionToPython(self); |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
360 return NULL; |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
361 } |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
362 |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
363 Py_RETURN_NONE; |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
364 } |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
365 |
99138265d4b9
Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents:
73
diff
changeset
|
366 static PyObject * |
13 | 367 PYM_newObject(PYM_JSContextObject *self, PyObject *args) |
368 { | |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
369 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
|
370 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
|
371 |
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
|
372 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
|
373 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
|
374 |
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
|
375 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
|
376 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
|
377 PyErr_SetString(PYM_error, "PYM_JS_newObject() failed"); |
13 | 378 return NULL; |
379 } | |
380 | |
19
fbb9a61fa030
Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents:
18
diff
changeset
|
381 // 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
|
382 // 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
|
383 return (PyObject *) PYM_newJSObject(self, obj, NULL); |
13 | 384 } |
385 | |
14
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
386 static PyObject * |
133
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
387 PYM_hasProperty(PYM_JSContextObject *self, PyObject *args) |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
388 { |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
389 PYM_SANITY_CHECK(self->runtime); |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
390 PYM_JSObject *object; |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
391 char *buffer = NULL; |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
392 int size; |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
393 |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
394 if (!PyArg_ParseTuple(args, "O!es#", &PYM_JSObjectType, &object, |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
395 "utf-16", &buffer, &size)) |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
396 return NULL; |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
397 |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
398 PYM_UTF16String str(buffer, size); |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
399 |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
400 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime); |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
401 |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
402 JSBool hasProperty; |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
403 JSBool result; |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
404 result = JS_HasUCProperty(self->cx, object->obj, str.jsbuffer, |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
405 str.jslen, &hasProperty); |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
406 |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
407 if (!result) { |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
408 PYM_jsExceptionToPython(self); |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
409 return NULL; |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
410 } |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
411 |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
412 if (hasProperty) |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
413 Py_RETURN_TRUE; |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
414 Py_RETURN_FALSE; |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
415 } |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
416 |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
417 static PyObject * |
17
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
418 PYM_getProperty(PYM_JSContextObject *self, PyObject *args) |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
419 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
420 PYM_SANITY_CHECK(self->runtime); |
17
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
421 PYM_JSObject *object; |
91
97d1faf02460
Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents:
89
diff
changeset
|
422 char *buffer = NULL; |
97d1faf02460
Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents:
89
diff
changeset
|
423 int size; |
17
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
424 |
91
97d1faf02460
Got rid of Py_UNICODE_WIDE ifdefs.
Atul Varma <varmaa@toolness.com>
parents:
89
diff
changeset
|
425 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
|
426 "utf-16", &buffer, &size)) |
17
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
427 return NULL; |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
428 |
132
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
429 PYM_UTF16String str(buffer, size); |
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
430 |
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
431 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
|
432 |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
433 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
|
434 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
|
435 Py_BEGIN_ALLOW_THREADS; |
132
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
436 result = JS_GetUCProperty(self->cx, object->obj, str.jsbuffer, |
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
437 str.jslen, &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
|
438 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
|
439 |
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
|
440 if (!result) { |
73 | 441 PYM_jsExceptionToPython(self); |
17
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
442 return NULL; |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
443 } |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
444 |
21
fc04e5f1c675
Changed object constructor to take a context instead of a runtime.
Atul Varma <varmaa@toolness.com>
parents:
20
diff
changeset
|
445 return PYM_jsvalToPyObject(self, val); |
17
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
446 } |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
447 |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
448 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
|
449 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
|
450 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
451 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
|
452 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
|
453 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
|
454 } |
e557d84318a7
Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents:
48
diff
changeset
|
455 |
e557d84318a7
Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents:
48
diff
changeset
|
456 static PyObject * |
14
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
457 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
|
458 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
459 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
|
460 PYM_JSObject *object; |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
461 |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
462 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
|
463 return NULL; |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
464 |
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
|
465 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
|
466 |
14
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
467 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
|
468 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
|
469 return NULL; |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
470 } |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
471 |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
472 Py_RETURN_NONE; |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
473 } |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
474 |
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
|
475 static PyObject * |
136
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
476 PYM_compileScript(PYM_JSContextObject *self, PyObject *args) |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
477 { |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
478 PYM_SANITY_CHECK(self->runtime); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
479 char *source = NULL; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
480 int sourceLen; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
481 const char *filename; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
482 int lineNo; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
483 |
140
ce8099238c01
As per a discussion with jorendorff, it looks like we can pass NULL to compile_script(), since we're not using object principals (and instead just using an object capability model for now).
Atul Varma <varmaa@toolness.com>
parents:
136
diff
changeset
|
484 if (!PyArg_ParseTuple(args, "es#si", "utf-16", &source, &sourceLen, |
ce8099238c01
As per a discussion with jorendorff, it looks like we can pass NULL to compile_script(), since we're not using object principals (and instead just using an object capability model for now).
Atul Varma <varmaa@toolness.com>
parents:
136
diff
changeset
|
485 &filename, &lineNo)) |
136
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
486 return NULL; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
487 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
488 PYM_UTF16String str(source, sourceLen); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
489 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
490 JSScript *script; |
140
ce8099238c01
As per a discussion with jorendorff, it looks like we can pass NULL to compile_script(), since we're not using object principals (and instead just using an object capability model for now).
Atul Varma <varmaa@toolness.com>
parents:
136
diff
changeset
|
491 script = JS_CompileUCScript(self->cx, NULL, str.jsbuffer, |
136
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
492 str.jslen, filename, lineNo); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
493 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
494 if (script == NULL) { |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
495 PYM_jsExceptionToPython(self); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
496 return NULL; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
497 } |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
498 |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
499 // TODO: If this somehow fails, we may have a memory leak if a |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
500 // script object wasn't created for the JSScript. |
136
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
501 return (PyObject *) PYM_newJSScript(self, script); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
502 } |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
503 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
504 static PyObject * |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
505 PYM_executeScript(PYM_JSContextObject *self, PyObject *args) |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
506 { |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
507 PYM_SANITY_CHECK(self->runtime); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
508 PYM_JSObject *object; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
509 PYM_JSScript *script; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
510 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
511 if (!PyArg_ParseTuple(args, "O!O!", &PYM_JSObjectType, &object, |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
512 &PYM_JSScriptType, &script)) |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
513 return NULL; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
514 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
515 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
516 PYM_ENSURE_RUNTIME_MATCH(self->runtime, script->base.runtime); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
517 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
518 jsval rval; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
519 JSBool result; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
520 Py_BEGIN_ALLOW_THREADS; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
521 result = JS_ExecuteScript(self->cx, object->obj, script->script, &rval); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
522 Py_END_ALLOW_THREADS; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
523 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
524 if (!result) { |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
525 PYM_jsExceptionToPython(self); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
526 return NULL; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
527 } |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
528 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
529 PyObject *pyRval = PYM_jsvalToPyObject(self, rval); |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
530 return pyRval; |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
531 } |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
532 |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
533 static PyObject * |
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
|
534 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
|
535 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
536 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
|
537 PYM_JSObject *object; |
122
5eda03c8e756
context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents:
117
diff
changeset
|
538 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
|
539 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
|
540 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
|
541 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
|
542 |
122
5eda03c8e756
context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents:
117
diff
changeset
|
543 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
|
544 "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
|
545 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
|
546 |
132
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
547 PYM_UTF16String str(source, sourceLen); |
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
548 |
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
549 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->runtime); |
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
|
550 |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
551 // Instead of calling JS_EvaluateUCScript(), we're going to first |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
552 // compile the script and then execute it. This is because the |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
553 // former function calls JS_DestroyScript() on the script it's |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
554 // created, which prevents e.g. the script object from being |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
555 // extracted during execution and outliving the script's execution. |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
556 |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
557 JSScript *script; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
558 script = JS_CompileUCScript(self->cx, NULL, str.jsbuffer, |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
559 str.jslen, filename, lineNo); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
560 |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
561 if (script == NULL) { |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
562 PYM_jsExceptionToPython(self); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
563 return NULL; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
564 } |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
565 |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
566 // TODO: If this somehow fails, we may have a memory leak if a |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
567 // script object wasn't created for the JSScript. |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
568 PYM_JSScript *pyScript = PYM_newJSScript(self, script); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
569 |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
570 if (pyScript == NULL) { |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
571 PYM_jsExceptionToPython(self); |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
572 return NULL; |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
573 } |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
574 |
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
|
575 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
|
576 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
|
577 Py_BEGIN_ALLOW_THREADS; |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
578 result = JS_ExecuteScript(self->cx, object->obj, pyScript->script, &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
|
579 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
|
580 |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
581 Py_DECREF((PyObject *) pyScript); |
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
|
582 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
|
583 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
|
584 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
|
585 } |
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
|
586 |
21
fc04e5f1c675
Changed object constructor to take a context instead of a runtime.
Atul Varma <varmaa@toolness.com>
parents:
20
diff
changeset
|
587 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
|
588 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
|
589 } |
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
|
590 |
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
|
591 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
|
592 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
|
593 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
594 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
|
595 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
|
596 PyObject *value; |
104
00c1351b3e82
Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents:
100
diff
changeset
|
597 char *name = NULL; |
00c1351b3e82
Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents:
100
diff
changeset
|
598 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
|
599 |
104
00c1351b3e82
Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents:
100
diff
changeset
|
600 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
|
601 "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
|
602 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
|
603 |
132
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
604 PYM_UTF16String str(name, 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
|
605 jsval jsValue; |
24
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
606 |
132
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
607 PYM_ENSURE_RUNTIME_MATCH(self->runtime, object->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
|
608 |
132
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
609 if (PYM_pyObjectToJsval(self, value, &jsValue) == -1) |
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
610 return NULL; |
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
611 |
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
612 if (!JS_DefineUCProperty(self->cx, object->obj, str.jsbuffer, |
537cf7deadc9
Added a new PYM_UTF16String C++ class to make calling UC JSAPI functions a little easier and less error-prone.
Atul Varma <varmaa@toolness.com>
parents:
131
diff
changeset
|
613 str.jslen, jsValue, NULL, NULL, |
104
00c1351b3e82
Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents:
100
diff
changeset
|
614 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
|
615 // 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
|
616 // 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
|
617 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
|
618 return NULL; |
24
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
619 } |
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
620 |
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
|
621 Py_RETURN_NONE; |
24
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
622 } |
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
623 |
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
624 static PyObject * |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
625 PYM_callFunction(PYM_JSContextObject *self, PyObject *args) |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
626 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
627 PYM_SANITY_CHECK(self->runtime); |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
628 PYM_JSObject *obj; |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
629 PYM_JSFunction *fun; |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
630 PyObject *funcArgs; |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
631 |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
632 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
|
633 &PYM_JSFunctionType, &fun, |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
634 &PyTuple_Type, &funcArgs)) |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
635 return NULL; |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
636 |
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
|
637 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
|
638 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
|
639 |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
640 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
|
641 |
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
|
642 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
|
643 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
|
644 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
|
645 |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
646 jsval *currArg = argv; |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
647 |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
648 for (unsigned int i = 0; i < argc; i++) { |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
649 PyObject *item = PyTuple_GET_ITEM(funcArgs, i); |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
650 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
|
651 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
|
652 PyMem_Free(argv); |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
653 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
|
654 } |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
655 currArg++; |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
656 } |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
657 |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
658 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
|
659 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
|
660 Py_BEGIN_ALLOW_THREADS; |
152
80463c8c7930
Added a 'name' property to function obects. Fixed a TODO.
Atul Varma <varmaa@toolness.com>
parents:
149
diff
changeset
|
661 result = JS_CallFunctionValue(self->cx, obj->obj, |
80463c8c7930
Added a 'name' property to function obects. Fixed a TODO.
Atul Varma <varmaa@toolness.com>
parents:
149
diff
changeset
|
662 OBJECT_TO_JSVAL(fun->base.obj), |
80463c8c7930
Added a 'name' property to function obects. Fixed a TODO.
Atul Varma <varmaa@toolness.com>
parents:
149
diff
changeset
|
663 argc, argv, &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
|
664 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
|
665 |
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
|
666 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
|
667 |
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
|
668 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
|
669 PYM_jsExceptionToPython(self); |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
670 return NULL; |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
671 } |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
672 |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
673 return PYM_jsvalToPyObject(self, rval); |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
674 } |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
675 |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
676 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
|
677 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
|
678 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
679 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
|
680 PyObject *callable; |
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
681 const char *name; |
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
682 |
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
|
683 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
|
684 return NULL; |
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
685 |
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
|
686 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
|
687 } |
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
21
diff
changeset
|
688 |
64
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
689 static PyObject * |
165
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
690 PYM_setThrowHook(PYM_JSContextObject *self, PyObject *args) |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
691 { |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
692 PYM_SANITY_CHECK(self->runtime); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
693 PyObject *callable; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
694 |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
695 if (!PyArg_ParseTuple(args, "O", &callable)) |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
696 return NULL; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
697 |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
698 if (!PyCallable_Check(callable)) { |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
699 PyErr_SetString(PyExc_TypeError, "Callable must be callable"); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
700 return NULL; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
701 } |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
702 |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
703 self->hooks.throwHook = PYM_throwHook; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
704 JS_SetContextDebugHooks(self->cx, &self->hooks); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
705 |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
706 Py_INCREF(callable); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
707 if (self->throwHook) |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
708 Py_DECREF(self->throwHook); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
709 self->throwHook = callable; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
710 |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
711 Py_RETURN_NONE; |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
712 } |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
713 |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
714 static PyObject * |
64
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
715 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
|
716 { |
87
345d4c0e3dd3
Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents:
84
diff
changeset
|
717 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
|
718 PyObject *callable; |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
719 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
720 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
|
721 return NULL; |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
722 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
723 if (!PyCallable_Check(callable)) { |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
724 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
|
725 return NULL; |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
726 } |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
727 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
728 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
|
729 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
730 Py_INCREF(callable); |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
731 if (self->opCallback) |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
732 Py_DECREF(self->opCallback); |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
733 self->opCallback = callable; |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
734 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
735 Py_RETURN_NONE; |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
736 } |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
737 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
738 static PyObject * |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
739 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
|
740 { |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
741 JS_TriggerOperationCallback(self->cx); |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
742 Py_RETURN_NONE; |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
743 } |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
744 |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
745 static PyMethodDef PYM_JSContextMethods[] = { |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
746 {"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
|
747 "Get the JavaScript runtime associated with this context."}, |
145
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
748 {"get_stack", (PyCFunction) PYM_getStack, METH_VARARGS, |
5d53f6293a81
Added a basic context.get_stack() function.
Atul Varma <varmaa@toolness.com>
parents:
140
diff
changeset
|
749 "Get the current stack for the context."}, |
13 | 750 {"new_object", (PyCFunction) PYM_newObject, METH_VARARGS, |
751 "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
|
752 {"init_standard_classes", |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
753 (PyCFunction) PYM_initStandardClasses, METH_VARARGS, |
9edcdb4ab12d
added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents:
13
diff
changeset
|
754 "Add standard classes and functions to the given object."}, |
136
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
755 {"compile_script", |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
756 (PyCFunction) PYM_compileScript, METH_VARARGS, |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
757 "Compile the given JavaScript code using the given filename" |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
758 "and line number information."}, |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
759 {"execute_script", |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
760 (PyCFunction) PYM_executeScript, METH_VARARGS, |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
761 "Execute the given JavaScript script object in the context of " |
b4e216d06e83
Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents:
133
diff
changeset
|
762 "the given global 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
|
763 {"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
|
764 (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
|
765 "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
|
766 "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
|
767 "and line number information."}, |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
768 {"call_function", |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
769 (PyCFunction) PYM_callFunction, METH_VARARGS, |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
770 "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
|
771 {"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
|
772 (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
|
773 "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
|
774 {"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
|
775 (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
|
776 "Defines a property on an object."}, |
17
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
777 {"get_property", (PyCFunction) PYM_getProperty, METH_VARARGS, |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
778 "Gets the given property for the given JavaScript object."}, |
133
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
779 {"has_property", (PyCFunction) PYM_hasProperty, METH_VARARGS, |
a9c0db56e06b
Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents:
132
diff
changeset
|
780 "Returns whether the given JavaScript object has the given property."}, |
60
e557d84318a7
Added a gc() method to the context object which performs garbage collection.
Atul Varma <varmaa@toolness.com>
parents:
48
diff
changeset
|
781 {"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
|
782 "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
|
783 {"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
|
784 METH_VARARGS, |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
785 "Sets the operation callback for the context."}, |
165
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
786 {"set_throw_hook", (PyCFunction) PYM_setThrowHook, METH_VARARGS, |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
787 "Sets the throw hook for the context."}, |
64
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
788 {"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
|
789 METH_VARARGS, |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
790 "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
|
791 {"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
|
792 "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
|
793 {"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
|
794 "Clears any private Python object stored in the JavaScript object."}, |
166
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
795 {"is_exception_pending", (PyCFunction) PYM_isExceptionPending, |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
796 METH_VARARGS, |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
797 "Returns whether an exception is currently being propagated."}, |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
798 {"get_pending_exception", (PyCFunction) PYM_getPendingException, |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
799 METH_VARARGS, |
2eaae00d5e30
Added is_exception_pending() and get_pending_exception().
Atul Varma <varmaa@toolness.com>
parents:
165
diff
changeset
|
800 "Returns the current exception being propagated."}, |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
801 {NULL, NULL, 0, NULL} |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
802 }; |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
803 |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
804 PyTypeObject PYM_JSContextType = { |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
805 PyObject_HEAD_INIT(NULL) |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
806 0, /*ob_size*/ |
173
5cfb47c9e916
Minor line wrap and spacing fixes.
Atul Varma <varmaa@toolness.com>
parents:
170
diff
changeset
|
807 "pydermonkey.Context", /*tp_name*/ |
12 | 808 sizeof(PYM_JSContextObject), /*tp_basicsize*/ |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
809 0, /*tp_itemsize*/ |
131
f956a6dea16c
Minor housekeeping: replaced tabs w/ spaces, got rid of outdated TODOs, etc.
Atul Varma <varmaa@toolness.com>
parents:
128
diff
changeset
|
810 /*tp_dealloc*/ |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
811 (destructor) PYM_JSContextDealloc, |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
812 0, /*tp_print*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
813 0, /*tp_getattr*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
814 0, /*tp_setattr*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
815 0, /*tp_compare*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
816 0, /*tp_repr*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
817 0, /*tp_as_number*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
818 0, /*tp_as_sequence*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
819 0, /*tp_as_mapping*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
820 0, /*tp_hash */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
821 0, /*tp_call*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
822 0, /*tp_str*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
823 0, /*tp_getattro*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
824 0, /*tp_setattro*/ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
825 0, /*tp_as_buffer*/ |
131
f956a6dea16c
Minor housekeeping: replaced tabs w/ spaces, got rid of outdated TODOs, etc.
Atul Varma <varmaa@toolness.com>
parents:
128
diff
changeset
|
826 /*tp_flags*/ |
126
8371983fee63
Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents:
125
diff
changeset
|
827 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_WEAKREFS, |
131
f956a6dea16c
Minor housekeeping: replaced tabs w/ spaces, got rid of outdated TODOs, etc.
Atul Varma <varmaa@toolness.com>
parents:
128
diff
changeset
|
828 /* tp_doc */ |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
829 "JavaScript Context.", |
125
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
830 (traverseproc) PYM_traverse, /* tp_traverse */ |
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
831 (inquiry) PYM_clear, /* tp_clear */ |
131
f956a6dea16c
Minor housekeeping: replaced tabs w/ spaces, got rid of outdated TODOs, etc.
Atul Varma <varmaa@toolness.com>
parents:
128
diff
changeset
|
832 0, /* tp_richcompare */ |
f956a6dea16c
Minor housekeeping: replaced tabs w/ spaces, got rid of outdated TODOs, etc.
Atul Varma <varmaa@toolness.com>
parents:
128
diff
changeset
|
833 /* tp_weaklistoffset */ |
126
8371983fee63
Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents:
125
diff
changeset
|
834 offsetof(PYM_JSContextObject, weakrefs), |
131
f956a6dea16c
Minor housekeeping: replaced tabs w/ spaces, got rid of outdated TODOs, etc.
Atul Varma <varmaa@toolness.com>
parents:
128
diff
changeset
|
835 0, /* tp_iter */ |
f956a6dea16c
Minor housekeeping: replaced tabs w/ spaces, got rid of outdated TODOs, etc.
Atul Varma <varmaa@toolness.com>
parents:
128
diff
changeset
|
836 0, /* tp_iternext */ |
11
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
837 PYM_JSContextMethods, /* tp_methods */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
838 0, /* tp_members */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
839 0, /* tp_getset */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
840 0, /* tp_base */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
841 0, /* tp_dict */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
842 0, /* tp_descr_get */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
843 0, /* tp_descr_set */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
844 0, /* tp_dictoffset */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
845 0, /* tp_init */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
846 0, /* tp_alloc */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
847 0, /* tp_new */ |
551ba05fe6ad
factored out Runtime, Context, and utils into separate files.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
848 }; |
19
fbb9a61fa030
Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents:
18
diff
changeset
|
849 |
fbb9a61fa030
Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents:
18
diff
changeset
|
850 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
|
851 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
|
852 { |
125
05e18059b5c4
Added cyclic garbage collection support to context objects.
Atul Varma <varmaa@toolness.com>
parents:
122
diff
changeset
|
853 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
|
854 &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
|
855 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
|
856 return NULL; |
fbb9a61fa030
Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents:
18
diff
changeset
|
857 |
165
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
858 memset(&context->hooks, 0, sizeof(context->hooks)); |
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
859 |
126
8371983fee63
Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents:
125
diff
changeset
|
860 context->weakrefs = NULL; |
64
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
60
diff
changeset
|
861 context->opCallback = NULL; |
165
1f9a5982db9c
Added a context.set_throw_hook() method.
Atul Varma <varmaa@toolness.com>
parents:
162
diff
changeset
|
862 context->throwHook = NULL; |
19
fbb9a61fa030
Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents:
18
diff
changeset
|
863 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
|
864 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
|
865 |
fbb9a61fa030
Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents:
18
diff
changeset
|
866 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
|
867 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
|
868 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
|
869 |
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
|
870 #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
|
871 // 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
|
872 // 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
|
873 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
|
874 #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
|
875 |
127
4179d1e1a75c
Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents:
126
diff
changeset
|
876 PyObject_GC_Track((PyObject *) context); |
19
fbb9a61fa030
Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents:
18
diff
changeset
|
877 return context; |
fbb9a61fa030
Moved context creation code into its own public function in context.c.
Atul Varma <varmaa@toolness.com>
parents:
18
diff
changeset
|
878 } |