]> git.pld-linux.org Git - packages/couchdb.git/blame - js185.patch
- use pkg-config patch from fc
[packages/couchdb.git] / js185.patch
CommitLineData
83691a6c
ER
1From b513bbd1f13cf06aba9abb5e0e84df8c7b493b58 Mon Sep 17 00:00:00 2001
2From: Jan Horak <jhorak@redhat.com>
3Date: Thu, 5 May 2011 16:24:08 +0200
4Subject: [PATCH 11/13] Spidermonkey 1.8.5 patch
5
6---
7 src/couchdb/priv/couch_js/http.c | 66 ++++++++++++--------
8 src/couchdb/priv/couch_js/main.c | 132 +++++++++++++++++--------------------
9 src/couchdb/priv/couch_js/utf8.c | 4 +-
10 3 files changed, 103 insertions(+), 99 deletions(-)
11
12diff --git a/src/couchdb/priv/couch_js/http.c b/src/couchdb/priv/couch_js/http.c
13index a672b66..8bd3cb6 100644
14--- a/src/couchdb/priv/couch_js/http.c
15+++ b/src/couchdb/priv/couch_js/http.c
16@@ -49,12 +49,25 @@ go(JSContext* cx, JSObject* obj, HTTPData* http, char* body, size_t blen);
17 static JSString*
18 str_from_binary(JSContext* cx, char* data, size_t length);
19
20+JSClass CouchHTTPClass;
21+
22 static JSBool
23-constructor(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
24+constructor(JSContext* cx, uintN argc, jsval* vp)
25 {
26 HTTPData* http = NULL;
27 JSBool ret = JS_FALSE;
28-
29+ jsval* argv = JS_ARGV(cx, vp);
30+ JSObject *obj = NULL;
31+ //if (JS_IsConstructing(cx, vp)) {
32+ obj = JS_NewObject(cx, &CouchHTTPClass, NULL, NULL);
33+ if (!obj)
34+ return JS_FALSE;
35+ //} else {
36+ // obj = JS_THIS_OBJECT(cx, vp);
37+ //}
38+ //printf("con %x\n", obj);
39+
40+ JSBool *con = JS_IsConstructing(cx, vp);
41 http = (HTTPData*) malloc(sizeof(HTTPData));
42 if(!http)
43 {
44@@ -67,6 +80,7 @@ constructor(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
45 http->req_headers = NULL;
46 http->last_status = -1;
47
48+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
49 if(!JS_SetPrivate(cx, obj, http))
50 {
51 JS_ReportError(cx, "Failed to set private CouchHTTP data.");
52@@ -90,6 +104,7 @@ destructor(JSContext* cx, JSObject* obj)
53 if(!http)
54 {
55 fprintf(stderr, "Unable to destroy invalid CouchHTTP instance.\n");
56+ //printf("Unable to destroy invalid CouchHTTP instance.\n");
57 }
58 else
59 {
60@@ -100,12 +115,15 @@ destructor(JSContext* cx, JSObject* obj)
61 }
62
63 static JSBool
64-open(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
65-{
66- HTTPData* http = (HTTPData*) JS_GetPrivate(cx, obj);
67+open(JSContext* cx, uintN argc, jsval* vp)
68+{
69+ JSObject *obj = JS_THIS_OBJECT(cx, vp);
70+ //printf("open %x\n", obj);
71+ HTTPData* http = (HTTPData*) JS_GetPrivate(cx, JS_THIS_OBJECT(cx, vp));
72 char* method = NULL;
73 char* url = NULL;
74 JSBool ret = JS_FALSE;
75+ jsval* argv = JS_ARGV(cx, vp);
76 int methid;
77
78 if(!http)
79@@ -182,14 +200,16 @@ done:
80 }
81
82 static JSBool
83-setheader(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
84+setheader(JSContext* cx, uintN argc, jsval* vp)
85 {
86- HTTPData* http = (HTTPData*) JS_GetPrivate(cx, obj);
87+ //printf("setheader %x\n", JS_THIS_OBJECT(cx, vp));
88+ HTTPData* http = (HTTPData*) JS_GetPrivate(cx, JS_THIS_OBJECT(cx, vp));
89 char* keystr = NULL;
90 char* valstr = NULL;
91 char* hdrbuf = NULL;
92 size_t hdrlen = -1;
93 JSBool ret = JS_FALSE;
94+ jsval* argv = JS_ARGV(cx, vp);
95
96 if(!http)
97 {
98@@ -245,12 +265,14 @@ done:
99 }
100
101 static JSBool
102-sendreq(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
103+sendreq(JSContext* cx, uintN argc, jsval* vp)
104 {
105- HTTPData* http = (HTTPData*) JS_GetPrivate(cx, obj);
106+ HTTPData* http = (HTTPData*) JS_GetPrivate(cx, JS_THIS_OBJECT(cx, vp));
107+ //printf("sendreq %x\n", JS_THIS_OBJECT(cx, vp));
108 char* body = NULL;
109 size_t bodylen = 0;
110 JSBool ret = JS_FALSE;
111+ jsval* argv = JS_ARGV(cx, vp);
112
113 if(!http)
114 {
115@@ -268,7 +290,7 @@ sendreq(JSContext* cx, JSObject* obj, uintN argc, jsval* argv, jsval* rval)
116 }
117 }
118
119- ret = go(cx, obj, http, body, bodylen);
120+ ret = go(cx, JS_THIS_OBJECT(cx, argv), http, body, bodylen);
121
122 done:
123 if(body) free(body);
124@@ -276,7 +298,7 @@ done:
125 }
126
127 static JSBool
128-status(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
129+status(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
130 {
131 HTTPData* http = (HTTPData*) JS_GetPrivate(cx, obj);
132
133@@ -286,16 +308,8 @@ status(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
134 return JS_FALSE;
135 }
136
137- if(INT_FITS_IN_JSVAL(http->last_status))
138- {
139- *vp = INT_TO_JSVAL(http->last_status);
140- return JS_TRUE;
141- }
142- else
143- {
144- JS_ReportError(cx, "INTERNAL: Invalid last_status");
145- return JS_FALSE;
146- }
147+ *vp = INT_TO_JSVAL(http->last_status);
148+ return JS_TRUE;
149 }
150
151 JSClass CouchHTTPClass = {
152@@ -306,7 +320,7 @@ JSClass CouchHTTPClass = {
153 JS_PropertyStub,
154 JS_PropertyStub,
155 JS_PropertyStub,
156- JS_PropertyStub,
157+ JS_StrictPropertyStub,
158 JS_EnumerateStub,
159 JS_ResolveStub,
160 JS_ConvertStub,
161@@ -320,10 +334,10 @@ JSPropertySpec CouchHTTPProperties[] = {
162 };
163
164 JSFunctionSpec CouchHTTPFunctions[] = {
165- {"_open", open, 3, 0, 0},
166- {"_setRequestHeader", setheader, 2, 0, 0},
167- {"_send", sendreq, 1, 0, 0},
168- {0, 0, 0, 0, 0}
169+ {"_open", open, 3, 0},
170+ {"_setRequestHeader", setheader, 2, 0},
171+ {"_send", sendreq, 1, 0},
172+ {0, 0, 0, 0}
173 };
174
175 JSObject*
176diff --git a/src/couchdb/priv/couch_js/main.c b/src/couchdb/priv/couch_js/main.c
177index 376aa15..2919448 100644
178--- a/src/couchdb/priv/couch_js/main.c
179+++ b/src/couchdb/priv/couch_js/main.c
180@@ -10,6 +10,7 @@
181 // License for the specific language governing permissions and limitations under
182 // the License.
183
184+#include <assert.h>
185 #include <stdlib.h>
186 #include <stdio.h>
187 #include <string.h>
188@@ -33,8 +34,25 @@ int gExitCode = 0;
189 #define FINISH_REQUEST(cx)
190 #endif
191
192+static JSClass global_class = {
193+ "GlobalClass",
194+ JSCLASS_GLOBAL_FLAGS | JSCLASS_HAS_PRIVATE,
195+ JS_PropertyStub,
196+ JS_PropertyStub,
197+ JS_PropertyStub,
198+ JS_StrictPropertyStub,
199+ JS_EnumerateStub,
200+ JS_ResolveStub,
201+ JS_ConvertStub,
202+ JS_FinalizeStub,
203+ JSCLASS_NO_OPTIONAL_MEMBERS
204+};
205+
206+static void
207+printerror(JSContext *cx, const char *mesg, JSErrorReport *report);
208+
209 static JSBool
210-evalcx(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
211+evalcx(JSContext *cx, uintN argc, jsval *vp)
212 {
213 JSString *str;
214 JSObject *sandbox;
215@@ -45,7 +63,7 @@ evalcx(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
216 jsval v;
217
218 sandbox = NULL;
219- if(!JS_ConvertArguments(cx, argc, argv, "S / o", &str, &sandbox))
220+ if(!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S / o", &str, &sandbox))
221 {
222 return JS_FALSE;
223 }
224@@ -59,22 +77,29 @@ evalcx(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
225
226 SETUP_REQUEST(subcx);
227
228- src = JS_GetStringChars(str);
229- srclen = JS_GetStringLength(str);
230-
231 if(!sandbox)
232 {
233- sandbox = JS_NewObject(subcx, NULL, NULL, NULL);
234+ sandbox = JS_NewCompartmentAndGlobalObject(subcx, &global_class, NULL);
235 if(!sandbox || !JS_InitStandardClasses(subcx, sandbox)) goto done;
236 }
237+ JS_SetGlobalObject(subcx, sandbox);
238+
239+ src = JS_GetStringCharsZ(subcx, str);
240+ srclen = JS_GetStringLength(str);
241
242 if(srclen == 0)
243 {
244- *rval = OBJECT_TO_JSVAL(sandbox);
245+ JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(sandbox));
246 }
247 else
248 {
249- JS_EvaluateUCScript(subcx, sandbox, src, srclen, NULL, 0, rval);
250+ JSObject *script = JS_CompileUCScript(subcx, sandbox, src, srclen, NULL, 0);
251+ jsval rval;
252+ if(script)
253+ {
254+ JS_ExecuteScript(subcx, sandbox, script, &rval);
255+ JS_SET_RVAL(cx, vp, rval);
256+ }
257 }
258
259 ret = JS_TRUE;
260@@ -86,21 +111,20 @@ done:
261 }
262
263 static JSBool
264-gc(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
265+gc(JSContext *cx, uintN argc, jsval *argv)
266 {
267 JS_GC(cx);
268 return JS_TRUE;
269 }
270
271 static JSBool
272-print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
273+print(JSContext *cx, uintN argc, jsval *argv)
274 {
275 uintN i;
276 char *bytes;
277-
278 for(i = 0; i < argc; i++)
279 {
280- bytes = enc_string(cx, argv[i], NULL);
281+ bytes = enc_string(cx, JS_ARGV(cx, argv)[i], NULL);
282 if(!bytes) return JS_FALSE;
283
284 fprintf(stdout, "%s%s", i ? " " : "", bytes);
285@@ -113,9 +137,9 @@ print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
286 }
287
288 static JSBool
289-quit(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
290+quit(JSContext *cx, uintN argc, jsval *argv)
291 {
292- JS_ConvertArguments(cx, argc, argv, "/ i", &gExitCode);
293+ JS_ConvertArguments(cx, argc, JS_ARGV(cx, argv), "/ i", &gExitCode);
294 return JS_FALSE;
295 }
296
297@@ -123,41 +147,23 @@ static char*
298 readfp(JSContext* cx, FILE* fp, size_t* buflen)
299 {
300 char* bytes = NULL;
301- char* tmp = NULL;
302- size_t used = 0;
303 size_t byteslen = 256;
304- size_t readlen = 0;
305+ ssize_t readlen;
306
307 bytes = JS_malloc(cx, byteslen);
308- if(bytes == NULL) return NULL;
309-
310- while((readlen = js_fgets(bytes+used, byteslen-used, stdin)) > 0)
311- {
312- used += readlen;
313-
314- if(bytes[used-1] == '\n')
315- {
316- bytes[used-1] = '\0';
317- break;
318- }
319-
320- // Double our buffer and read more.
321- byteslen *= 2;
322- tmp = JS_realloc(cx, bytes, byteslen);
323- if(!tmp)
324- {
325- JS_free(cx, bytes);
326- return NULL;
327- }
328- bytes = tmp;
329+ readlen = getline(&bytes, &byteslen, fp);
330+ if (readlen <= 0) {
331+ *buflen = 0;
332+ return bytes;
333 }
334-
335- *buflen = used;
336+ if (bytes[readlen-1] == '\n')
337+ bytes[readlen-1] = '\0';
338+ *buflen = readlen;
339 return bytes;
340 }
341
342 static JSBool
343-readline(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
344+readline(JSContext *cx, uintN argc, jsval *argv) {
345 jschar *chars;
346 JSString *str;
347 char* bytes;
348@@ -173,7 +179,7 @@ readline(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
349 /* Treat the empty string specially */
350 if(byteslen == 0)
351 {
352- *rval = JS_GetEmptyStringValue(cx);
353+ JS_SET_RVAL(cx, argv, JS_GetEmptyStringValue(cx));
354 JS_free(cx, bytes);
355 return JS_TRUE;
356 }
357@@ -191,28 +197,27 @@ readline(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
358 JS_free(cx, bytes);
359
360 if(!str) return JS_FALSE;
361-
362- *rval = STRING_TO_JSVAL(str);
363+ JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(str));
364
365 return JS_TRUE;
366 }
367
368 static JSBool
369-seal(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
370+seal(JSContext *cx, uintN argc, jsval *argv) {
371 JSObject *target;
372 JSBool deep = JS_FALSE;
373
374- if (!JS_ConvertArguments(cx, argc, argv, "o/b", &target, &deep))
375+ if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, argv), "o/b", &target, &deep))
376 return JS_FALSE;
377 if (!target)
378 return JS_TRUE;
379- return JS_SealObject(cx, target, deep);
380+ return JS_FreezeObject(cx, target);
381 }
382
383 static void
384 execute_script(JSContext *cx, JSObject *obj, const char *filename) {
385 FILE *file;
386- JSScript *script;
387+ JSObject *script;
388 jsval result;
389
390 if(!filename || strcmp(filename, "-") == 0)
391@@ -234,7 +239,6 @@ execute_script(JSContext *cx, JSObject *obj, const char *filename) {
392 if(script)
393 {
394 JS_ExecuteScript(cx, obj, script, &result);
395- JS_DestroyScript(cx, script);
396 }
397 }
398
399@@ -248,27 +252,13 @@ printerror(JSContext *cx, const char *mesg, JSErrorReport *report)
400 }
401
402 static JSFunctionSpec global_functions[] = {
403- {"evalcx", evalcx, 0, 0, 0},
404- {"gc", gc, 0, 0, 0},
405- {"print", print, 0, 0, 0},
406- {"quit", quit, 0, 0, 0},
407- {"readline", readline, 0, 0, 0},
408- {"seal", seal, 0, 0, 0},
409- {0, 0, 0, 0, 0}
410-};
411-
412-static JSClass global_class = {
413- "GlobalClass",
414- JSCLASS_GLOBAL_FLAGS,
415- JS_PropertyStub,
416- JS_PropertyStub,
417- JS_PropertyStub,
418- JS_PropertyStub,
419- JS_EnumerateStub,
420- JS_ResolveStub,
421- JS_ConvertStub,
422- JS_FinalizeStub,
423- JSCLASS_NO_OPTIONAL_MEMBERS
424+ {"evalcx", evalcx, 0, 0},
425+ {"gc", gc, 0, 0},
426+ {"print", print, 0, 0},
427+ {"quit", quit, 0, 0},
428+ {"readline", readline, 0, 0},
429+ {"seal", seal, 0, 0},
430+ {0, 0, 0, 0}
431 };
432
433 int
434@@ -291,7 +281,7 @@ main(int argc, const char * argv[])
435
436 SETUP_REQUEST(cx);
437
438- global = JS_NewObject(cx, &global_class, NULL, NULL);
439+ global = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
440 if (!global) return 1;
441 if (!JS_InitStandardClasses(cx, global)) return 1;
442
443diff --git a/src/couchdb/priv/couch_js/utf8.c b/src/couchdb/priv/couch_js/utf8.c
444index 699a6fe..9ccc256 100644
445--- a/src/couchdb/priv/couch_js/utf8.c
446+++ b/src/couchdb/priv/couch_js/utf8.c
447@@ -129,7 +129,7 @@ enc_string(JSContext* cx, jsval arg, size_t* buflen)
448 str = JS_ValueToString(cx, arg);
449 if(!str) goto error;
450
451- src = JS_GetStringChars(str);
452+ src = JS_GetStringCharsZ(cx, str);
453 srclen = JS_GetStringLength(str);
454
455 if(!enc_charbuf(src, srclen, NULL, &byteslen)) goto error;
456@@ -283,4 +283,4 @@ error:
457
458 success:
459 return str;
460-}
461\ No newline at end of file
462+}
463--
4641.7.6
465
This page took 0.091617 seconds and 4 git commands to generate.