1 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp"
2 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/obj-armv7l-unknown-linux-gnueabi/js/src//"
6 #define __STDC_HOSTED__ 1
8 #define __GNUC_MINOR__ 5
9 #define __GNUC_PATCHLEVEL__ 4
11 #define __SIZE_TYPE__ unsigned int
12 #define __PTRDIFF_TYPE__ int
13 #define __WCHAR_TYPE__ unsigned int
14 #define __WINT_TYPE__ unsigned int
15 #define __INTMAX_TYPE__ long long int
16 #define __UINTMAX_TYPE__ long long unsigned int
17 #define __CHAR16_TYPE__ short unsigned int
18 #define __CHAR32_TYPE__ unsigned int
19 #define __SIG_ATOMIC_TYPE__ int
20 #define __INT8_TYPE__ signed char
21 #define __INT16_TYPE__ short int
22 #define __INT32_TYPE__ int
23 #define __INT64_TYPE__ long long int
24 #define __UINT8_TYPE__ unsigned char
25 #define __UINT16_TYPE__ short unsigned int
26 #define __UINT32_TYPE__ unsigned int
27 #define __UINT64_TYPE__ long long unsigned int
28 #define __INT_LEAST8_TYPE__ signed char
29 #define __INT_LEAST16_TYPE__ short int
30 #define __INT_LEAST32_TYPE__ int
31 #define __INT_LEAST64_TYPE__ long long int
32 #define __UINT_LEAST8_TYPE__ unsigned char
33 #define __UINT_LEAST16_TYPE__ short unsigned int
34 #define __UINT_LEAST32_TYPE__ unsigned int
35 #define __UINT_LEAST64_TYPE__ long long unsigned int
36 #define __INT_FAST8_TYPE__ signed char
37 #define __INT_FAST16_TYPE__ int
38 #define __INT_FAST32_TYPE__ int
39 #define __INT_FAST64_TYPE__ long long int
40 #define __UINT_FAST8_TYPE__ unsigned char
41 #define __UINT_FAST16_TYPE__ unsigned int
42 #define __UINT_FAST32_TYPE__ unsigned int
43 #define __UINT_FAST64_TYPE__ long long unsigned int
44 #define __INTPTR_TYPE__ int
45 #define __UINTPTR_TYPE__ unsigned int
46 #define __GXX_WEAK__ 1
47 #define __DEPRECATED 1
48 #define __EXCEPTIONS 1
49 #define __GXX_ABI_VERSION 1002
50 #define __SCHAR_MAX__ 127
51 #define __SHRT_MAX__ 32767
52 #define __INT_MAX__ 2147483647
53 #define __LONG_MAX__ 2147483647L
54 #define __LONG_LONG_MAX__ 9223372036854775807LL
55 #define __WCHAR_MAX__ 4294967295U
56 #define __WCHAR_MIN__ 0U
57 #define __WINT_MAX__ 4294967295U
58 #define __WINT_MIN__ 0U
59 #define __PTRDIFF_MAX__ 2147483647
60 #define __SIZE_MAX__ 4294967295U
61 #define __CHAR_BIT__ 8
62 #define __INTMAX_MAX__ 9223372036854775807LL
63 #define __INTMAX_C(c) c ## LL
64 #define __UINTMAX_MAX__ 18446744073709551615ULL
65 #define __UINTMAX_C(c) c ## ULL
66 #define __SIG_ATOMIC_MAX__ 2147483647
67 #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
68 #define __INT8_MAX__ 127
69 #define __INT16_MAX__ 32767
70 #define __INT32_MAX__ 2147483647
71 #define __INT64_MAX__ 9223372036854775807LL
72 #define __UINT8_MAX__ 255
73 #define __UINT16_MAX__ 65535
74 #define __UINT32_MAX__ 4294967295U
75 #define __UINT64_MAX__ 18446744073709551615ULL
76 #define __INT_LEAST8_MAX__ 127
78 #define __INT_LEAST16_MAX__ 32767
79 #define __INT16_C(c) c
80 #define __INT_LEAST32_MAX__ 2147483647
81 #define __INT32_C(c) c
82 #define __INT_LEAST64_MAX__ 9223372036854775807LL
83 #define __INT64_C(c) c ## LL
84 #define __UINT_LEAST8_MAX__ 255
85 #define __UINT8_C(c) c
86 #define __UINT_LEAST16_MAX__ 65535
87 #define __UINT16_C(c) c
88 #define __UINT_LEAST32_MAX__ 4294967295U
89 #define __UINT32_C(c) c ## U
90 #define __UINT_LEAST64_MAX__ 18446744073709551615ULL
91 #define __UINT64_C(c) c ## ULL
92 #define __INT_FAST8_MAX__ 127
93 #define __INT_FAST16_MAX__ 2147483647
94 #define __INT_FAST32_MAX__ 2147483647
95 #define __INT_FAST64_MAX__ 9223372036854775807LL
96 #define __UINT_FAST8_MAX__ 255
97 #define __UINT_FAST16_MAX__ 4294967295U
98 #define __UINT_FAST32_MAX__ 4294967295U
99 #define __UINT_FAST64_MAX__ 18446744073709551615ULL
100 #define __INTPTR_MAX__ 2147483647
101 #define __UINTPTR_MAX__ 4294967295U
102 #define __FLT_EVAL_METHOD__ 0
103 #define __DEC_EVAL_METHOD__ 2
104 #define __FLT_RADIX__ 2
105 #define __FLT_MANT_DIG__ 24
106 #define __FLT_DIG__ 6
107 #define __FLT_MIN_EXP__ (-125)
108 #define __FLT_MIN_10_EXP__ (-37)
109 #define __FLT_MAX_EXP__ 128
110 #define __FLT_MAX_10_EXP__ 38
111 #define __FLT_MAX__ 3.4028234663852886e+38F
112 #define __FLT_MIN__ 1.1754943508222875e-38F
113 #define __FLT_EPSILON__ 1.1920928955078125e-7F
114 #define __FLT_DENORM_MIN__ 1.4012984643248171e-45F
115 #define __FLT_HAS_DENORM__ 1
116 #define __FLT_HAS_INFINITY__ 1
117 #define __FLT_HAS_QUIET_NAN__ 1
118 #define __DBL_MANT_DIG__ 53
119 #define __DBL_DIG__ 15
120 #define __DBL_MIN_EXP__ (-1021)
121 #define __DBL_MIN_10_EXP__ (-307)
122 #define __DBL_MAX_EXP__ 1024
123 #define __DBL_MAX_10_EXP__ 308
124 #define __DBL_MAX__ ((double)1.7976931348623157e+308L)
125 #define __DBL_MIN__ ((double)2.2250738585072014e-308L)
126 #define __DBL_EPSILON__ ((double)2.2204460492503131e-16L)
127 #define __DBL_DENORM_MIN__ ((double)4.9406564584124654e-324L)
128 #define __DBL_HAS_DENORM__ 1
129 #define __DBL_HAS_INFINITY__ 1
130 #define __DBL_HAS_QUIET_NAN__ 1
131 #define __LDBL_MANT_DIG__ 53
132 #define __LDBL_DIG__ 15
133 #define __LDBL_MIN_EXP__ (-1021)
134 #define __LDBL_MIN_10_EXP__ (-307)
135 #define __LDBL_MAX_EXP__ 1024
136 #define __LDBL_MAX_10_EXP__ 308
137 #define __DECIMAL_DIG__ 17
138 #define __LDBL_MAX__ 1.7976931348623157e+308L
139 #define __LDBL_MIN__ 2.2250738585072014e-308L
140 #define __LDBL_EPSILON__ 2.2204460492503131e-16L
141 #define __LDBL_DENORM_MIN__ 4.9406564584124654e-324L
142 #define __LDBL_HAS_DENORM__ 1
143 #define __LDBL_HAS_INFINITY__ 1
144 #define __LDBL_HAS_QUIET_NAN__ 1
145 #define __DEC32_MANT_DIG__ 7
146 #define __DEC32_MIN_EXP__ (-94)
147 #define __DEC32_MAX_EXP__ 97
148 #define __DEC32_MIN__ 1E-95DF
149 #define __DEC32_MAX__ 9.999999E96DF
150 #define __DEC32_EPSILON__ 1E-6DF
151 #define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
152 #define __DEC64_MANT_DIG__ 16
153 #define __DEC64_MIN_EXP__ (-382)
154 #define __DEC64_MAX_EXP__ 385
155 #define __DEC64_MIN__ 1E-383DD
156 #define __DEC64_MAX__ 9.999999999999999E384DD
157 #define __DEC64_EPSILON__ 1E-15DD
158 #define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
159 #define __DEC128_MANT_DIG__ 34
160 #define __DEC128_MIN_EXP__ (-6142)
161 #define __DEC128_MAX_EXP__ 6145
162 #define __DEC128_MIN__ 1E-6143DL
163 #define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
164 #define __DEC128_EPSILON__ 1E-33DL
165 #define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
166 #define __REGISTER_PREFIX__
167 #define __USER_LABEL_PREFIX__
168 #define __VERSION__ "4.5.4"
169 #define __GNUC_GNU_INLINE__ 1
170 #define __OPTIMIZE__ 1
171 #define __FINITE_MATH_ONLY__ 0
174 #define __CHAR_UNSIGNED__ 1
175 #define __WCHAR_UNSIGNED__ 1
176 #define __GCC_HAVE_DWARF2_CFI_ASM 1
177 #define __PRAGMA_REDEFINE_EXTNAME 1
178 #define __SIZEOF_INT__ 4
179 #define __SIZEOF_LONG__ 4
180 #define __SIZEOF_LONG_LONG__ 8
181 #define __SIZEOF_SHORT__ 2
182 #define __SIZEOF_FLOAT__ 4
183 #define __SIZEOF_DOUBLE__ 8
184 #define __SIZEOF_LONG_DOUBLE__ 8
185 #define __SIZEOF_SIZE_T__ 4
186 #define __SIZEOF_WCHAR_T__ 4
187 #define __SIZEOF_WINT_T__ 4
188 #define __SIZEOF_PTRDIFF_T__ 4
189 #define __SIZEOF_POINTER__ 4
191 #define __APCS_32__ 1
194 #define __THUMB_INTERWORK__ 1
195 #define __ARM_ARCH_7A__ 1
196 #define __ARM_PCS_VFP 1
197 #define __ARM_EABI__ 1
198 #define __GXX_TYPEINFO_EQUALITY_INLINE 0
199 #define __gnu_linux__ 1
207 #define __BIGGEST_ALIGNMENT__ 8
208 # 1 "<Kommandozeile>"
209 #define _GNU_SOURCE 1
211 #define MOZ_GLUE_IN_PROGRAM 1
212 #define EXPORT_JS_API 1
213 #define JS_HAS_CTYPES 1
214 #define DLL_PREFIX "lib"
215 #define DLL_SUFFIX ".so"
216 #define NO_NSPR_10_SUPPORT 1
219 #define USE_SYSTEM_MALLOC 1
220 #define ENABLE_ASSEMBLER 1
222 #define MOZILLA_CLIENT 1
223 #define _FORTIFY_SOURCE 2
224 # 1 "././js-confdefs.h" 1
231 #define _JS_CONFDEFS_H_
233 #define CPP_THROW_NEW throw()
234 #define CROSS_COMPILE 1
237 #define HAVE_ARM_NEON 1
238 #define HAVE_ARM_SIMD 1
239 #define HAVE_CPP_AMBIGUITY_RESOLVING_USING 1
240 #define HAVE_CPP_DYNAMIC_CAST_TO_VOID_PTR 1
241 #define HAVE_CPP_PARTIAL_SPECIALIZATION 1
242 #define HAVE_DIRENT_H 1
243 #define HAVE_DLADDR 1
244 #define HAVE_DLOPEN 1
245 #define HAVE_ENDIAN_H 1
246 #define HAVE_FCHMOD 1
247 #define HAVE_FLOCKFILE 1
248 #define HAVE_GETC_UNLOCKED 1
249 #define HAVE_GETOPT_H 1
250 #define HAVE_GETPAGESIZE 1
251 #define HAVE_GNU_GET_LIBC_VERSION 1
252 #define HAVE_GNU_LIBC_VERSION_H 1
253 #define HAVE_I18N_LC_MESSAGES 1
255 #define HAVE_LCHOWN 1
256 #define HAVE_LINUX_QUOTA_H 1
257 #define HAVE_LOCALECONV 1
258 #define HAVE_LOCALECONV 1
259 #define HAVE_LOCALTIME_R 1
260 #define HAVE_LSTAT64 1
261 #define HAVE_MALLOC_H 1
262 #define HAVE_MBRTOWC 1
263 #define HAVE_MEMALIGN 1
264 #define HAVE_MEMMOVE 1
265 #define HAVE_MEMORY_H 1
266 #define HAVE_MMINTRIN_H 1
267 #define HAVE_NL_TYPES_H 1
268 #define HAVE_POSIX_FALLOCATE 1
269 #define HAVE_POSIX_MEMALIGN 1
270 #define HAVE_RANDOM 1
271 #define HAVE_RES_NINIT 1
273 #define HAVE_SETLOCALE 1
274 #define HAVE_SIGINFO_T 1
275 #define HAVE_SNPRINTF 1
276 #define HAVE_SSIZE_T 1
277 #define HAVE_STAT64 1
278 #define HAVE_STATVFS 1
279 #define HAVE_STATVFS64 1
280 #define HAVE_STRERROR 1
281 #define HAVE_STRNDUP 1
282 #define HAVE_STRTOK_R 1
283 #define HAVE_ST_BLKSIZE 1
284 #define HAVE_SYS_BITYPES_H 1
285 #define HAVE_SYS_CDEFS_H 1
286 #define HAVE_SYS_MOUNT_H 1
287 #define HAVE_SYS_QUOTA_H 1
288 #define HAVE_SYS_STATFS_H 1
289 #define HAVE_SYS_STATVFS_H 1
290 #define HAVE_SYS_VFS_H 1
291 #define HAVE_THREAD_TLS_KEYWORD 1
292 #define HAVE_TM_ZONE_TM_GMTOFF 1
293 #define HAVE_TRUNCATE64 1
295 #define HAVE_UNAME_DOMAINNAME_FIELD 1
296 #define HAVE_UNISTD_H 1
297 #define HAVE_VALLOC 1
298 #define HAVE_VA_COPY 1
299 #define HAVE_VISIBILITY_ATTRIBUTE 1
300 #define HAVE_VISIBILITY_HIDDEN_ATTRIBUTE 1
301 #define HAVE_WCRTOMB 1
302 #define HAVE_X11_XKBLIB_H 1
303 #define HAVE__UNWIND_BACKTRACE 1
304 #define HAVE___CXA_DEMANGLE 1
305 #define JSGC_INCREMENTAL 1
306 #define JS_ALIGN_OF_POINTER 4
307 #define JS_BITS_PER_WORD_LOG2 5
308 #define JS_BYTES_PER_DOUBLE 8
309 #define JS_BYTES_PER_WORD 4
311 #define JS_DEFAULT_JITREPORT_GRANULARITY 3
312 #define JS_HAS_CTYPES 1
313 #define JS_HAS_XML_SUPPORT 1
314 #define JS_HAVE_ENDIAN_H 1
315 #define JS_METHODJIT 1
317 #define JS_NUNBOX32 1
319 #define JS_THREADSAFE 1
320 #define MALLOC_H <malloc.h>
321 #define MOZ_DEBUG_SYMBOLS 1
322 #define MOZ_DLL_SUFFIX ".so"
324 #define MOZ_MEMORY_LINUX 1
325 #define MOZ_MEMORY_SIZEOF_PTR_2POW 2
326 #define NEED_CPP_UNUSED_IMPLEMENTATIONS 1
328 #define NS_ALWAYS_INLINE __attribute__((always_inline))
329 #define NS_ATTR_MALLOC __attribute__((malloc))
330 #define NS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
331 #define SIZEOF_INT_P 4
332 #define STATIC_EXPORTABLE_JS_API 1
333 #define STDC_HEADERS 1
334 #define UNIX_ASYNC_DNS 1
335 #define VA_COPY va_copy
342 #define __STDC_LIMIT_MACROS
343 # 1 "<Kommandozeile>" 2
344 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp"
352 # 1 "./../../dist/include/mozilla/Assertions.h" 1
353 # 11 "./../../dist/include/mozilla/Assertions.h"
354 #define mozilla_Assertions_h_
356 # 1 "./../../dist/include/mozilla/Attributes.h" 1
357 # 11 "./../../dist/include/mozilla/Attributes.h"
358 #define mozilla_Attributes_h_
359 # 25 "./../../dist/include/mozilla/Attributes.h"
360 #define MOZ_INLINE inline
361 # 46 "./../../dist/include/mozilla/Attributes.h"
362 #define MOZ_ALWAYS_INLINE __attribute__((always_inline)) MOZ_INLINE
363 # 106 "./../../dist/include/mozilla/Attributes.h"
364 #define MOZ_HAVE_NEVER_INLINE __attribute__((noinline))
365 #define MOZ_HAVE_NORETURN __attribute__((noreturn))
366 # 125 "./../../dist/include/mozilla/Attributes.h"
367 #define MOZ_NEVER_INLINE MOZ_HAVE_NEVER_INLINE
368 # 145 "./../../dist/include/mozilla/Attributes.h"
369 #define MOZ_NORETURN MOZ_HAVE_NORETURN
370 # 159 "./../../dist/include/mozilla/Attributes.h"
371 #define MOZ_ASAN_BLACKLIST
372 # 190 "./../../dist/include/mozilla/Attributes.h"
374 # 231 "./../../dist/include/mozilla/Attributes.h"
376 # 300 "./../../dist/include/mozilla/Attributes.h"
378 # 317 "./../../dist/include/mozilla/Attributes.h"
379 #define MOZ_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result))
380 # 14 "./../../dist/include/mozilla/Assertions.h" 2
381 # 1 "./../../dist/include/mozilla/Types.h" 1
382 # 11 "./../../dist/include/mozilla/Types.h"
383 #define mozilla_Types_h_
384 # 24 "./../../dist/include/mozilla/Types.h"
385 # 1 "./../../dist/include/mozilla/StandardInteger.h" 1
386 # 11 "./../../dist/include/mozilla/StandardInteger.h"
387 #define mozilla_StandardInteger_h_
388 # 42 "./../../dist/include/mozilla/StandardInteger.h"
389 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stdint.h" 1 3 4
392 # 1 "/usr/include/stdint.h" 1 3 4
393 # 24 "/usr/include/stdint.h" 3 4
396 # 1 "/usr/include/features.h" 1 3 4
397 # 21 "/usr/include/features.h" 3 4
398 #define _FEATURES_H 1
399 # 98 "/usr/include/features.h" 3 4
404 #undef __USE_POSIX199309
405 #undef __USE_POSIX199506
407 #undef __USE_XOPEN_EXTENDED
410 #undef __USE_XOPEN2KXSI
411 #undef __USE_XOPEN2K8
412 #undef __USE_XOPEN2K8XSI
413 #undef __USE_LARGEFILE
414 #undef __USE_LARGEFILE64
415 #undef __USE_FILE_OFFSET64
421 #undef __USE_REENTRANT
422 #undef __USE_FORTIFY_LEVEL
424 #undef __KERNEL_STRICT_NAMES
429 #define __KERNEL_STRICT_NAMES
434 # 141 "/usr/include/features.h" 3 4
435 #define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
436 # 157 "/usr/include/features.h" 3 4
437 #undef _ISOC95_SOURCE
438 #define _ISOC95_SOURCE 1
439 #undef _ISOC99_SOURCE
440 #define _ISOC99_SOURCE 1
442 #define _POSIX_SOURCE 1
443 #undef _POSIX_C_SOURCE
444 #define _POSIX_C_SOURCE 200809L
446 #define _XOPEN_SOURCE 700
447 #undef _XOPEN_SOURCE_EXTENDED
448 #define _XOPEN_SOURCE_EXTENDED 1
449 #undef _LARGEFILE64_SOURCE
450 #define _LARGEFILE64_SOURCE 1
452 #define _BSD_SOURCE 1
454 #define _SVID_SOURCE 1
455 #undef _ATFILE_SOURCE
456 #define _ATFILE_SOURCE 1
457 # 194 "/usr/include/features.h" 3 4
458 #define __USE_ISOC99 1
464 #define __USE_ISOC95 1
465 # 221 "/usr/include/features.h" 3 4
466 #define __USE_POSIX 1
470 #define __USE_POSIX2 1
474 #define __USE_POSIX199309 1
478 #define __USE_POSIX199506 1
482 #define __USE_XOPEN2K 1
484 #define __USE_ISOC95 1
486 #define __USE_ISOC99 1
490 #define __USE_XOPEN2K8 1
491 #undef _ATFILE_SOURCE
492 #define _ATFILE_SOURCE 1
496 #define __USE_XOPEN 1
498 #define __USE_XOPEN_EXTENDED 1
499 #define __USE_UNIX98 1
500 #undef _LARGEFILE_SOURCE
501 #define _LARGEFILE_SOURCE 1
504 #define __USE_XOPEN2K8 1
505 #define __USE_XOPEN2K8XSI 1
507 #define __USE_XOPEN2K 1
508 #define __USE_XOPEN2KXSI 1
510 #define __USE_ISOC95 1
512 #define __USE_ISOC99 1
513 # 277 "/usr/include/features.h" 3 4
514 #define __USE_LARGEFILE 1
518 #define __USE_LARGEFILE64 1
538 #define __USE_ATFILE 1
546 #define __USE_REENTRANT 1
552 #define __USE_FORTIFY_LEVEL 2
553 # 324 "/usr/include/features.h" 3 4
554 #define __STDC_IEC_559__ 1
555 #define __STDC_IEC_559_COMPLEX__ 1
558 #define __STDC_ISO_10646__ 200009L
566 #undef __GNU_LIBRARY__
567 #define __GNU_LIBRARY__ 6
572 #define __GLIBC_MINOR__ 15
574 #define __GLIBC_PREREQ(maj,min) ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
582 #define __GLIBC_HAVE_LONG_LONG 1
588 # 1 "/usr/include/sys/cdefs.h" 1 3 4
589 # 21 "/usr/include/sys/cdefs.h" 3 4
590 #define _SYS_CDEFS_H 1
591 # 36 "/usr/include/sys/cdefs.h" 3 4
594 # 47 "/usr/include/sys/cdefs.h" 3 4
597 # 62 "/usr/include/sys/cdefs.h" 3 4
598 #define __THROW throw ()
599 #define __THROWNL throw ()
600 #define __NTH(fct) __LEAF_ATTR fct throw ()
601 # 88 "/usr/include/sys/cdefs.h" 3 4
602 #define __P(args) args
603 #define __PMT(args) args
608 #define __CONCAT(x,y) x ## y
609 #define __STRING(x) #x
612 #define __ptr_t void *
613 #define __long_double_t long double
618 #define __BEGIN_DECLS extern "C" {
619 #define __END_DECLS }
620 # 128 "/usr/include/sys/cdefs.h" 3 4
621 #define __BEGIN_NAMESPACE_STD
622 #define __END_NAMESPACE_STD
623 #define __USING_NAMESPACE_STD(name)
624 #define __BEGIN_NAMESPACE_C99
625 #define __END_NAMESPACE_C99
626 #define __USING_NAMESPACE_C99(name)
639 #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
640 #define __bos0(ptr) __builtin_object_size (ptr, 0)
643 #define __warndecl(name,msg) extern void name (void) __attribute__((__warning__ (msg)))
645 #define __warnattr(msg) __attribute__((__warning__ (msg)))
646 #define __errordecl(name,msg) extern void name (void) __attribute__((__error__ (msg)))
647 # 164 "/usr/include/sys/cdefs.h" 3 4
649 # 191 "/usr/include/sys/cdefs.h" 3 4
650 #define __REDIRECT(name,proto,alias) name proto __asm__ (__ASMNAME (#alias))
652 #define __REDIRECT_NTH(name,proto,alias) name proto __THROW __asm__ (__ASMNAME (#alias))
654 #define __REDIRECT_NTHNL(name,proto,alias) name proto __THROWNL __asm__ (__ASMNAME (#alias))
662 #define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
663 #define __ASMNAME2(prefix,cname) __STRING (prefix) cname
664 # 225 "/usr/include/sys/cdefs.h" 3 4
665 #define __attribute_malloc__ __attribute__ ((__malloc__))
666 # 234 "/usr/include/sys/cdefs.h" 3 4
667 #define __attribute_pure__ __attribute__ ((__pure__))
674 #define __attribute_const__ __attribute__ ((__const__))
675 # 250 "/usr/include/sys/cdefs.h" 3 4
676 #define __attribute_used__ __attribute__ ((__used__))
677 #define __attribute_noinline__ __attribute__ ((__noinline__))
685 #define __attribute_deprecated__ __attribute__ ((__deprecated__))
686 # 271 "/usr/include/sys/cdefs.h" 3 4
687 #define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
688 # 281 "/usr/include/sys/cdefs.h" 3 4
689 #define __attribute_format_strfmon__(a,b) __attribute__ ((__format__ (__strfmon__, a, b)))
690 # 290 "/usr/include/sys/cdefs.h" 3 4
691 #define __nonnull(params) __attribute__ ((__nonnull__ params))
699 #define __attribute_warn_unused_result__ __attribute__ ((__warn_unused_result__))
702 #define __wur __attribute_warn_unused_result__
703 # 312 "/usr/include/sys/cdefs.h" 3 4
704 #define __always_inline __inline __attribute__ ((__always_inline__))
705 # 321 "/usr/include/sys/cdefs.h" 3 4
706 #define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
708 #define __extern_always_inline extern __always_inline __attribute__ ((__gnu_inline__, __artificial__))
709 # 343 "/usr/include/sys/cdefs.h" 3 4
710 #define __va_arg_pack() __builtin_va_arg_pack ()
711 #define __va_arg_pack_len() __builtin_va_arg_pack_len ()
712 # 367 "/usr/include/sys/cdefs.h" 3 4
713 #define __restrict_arr
714 # 378 "/usr/include/sys/cdefs.h" 3 4
715 # 1 "/usr/include/bits/wordsize.h" 1 3 4
716 # 19 "/usr/include/bits/wordsize.h" 3 4
717 #define __WORDSIZE 32
718 # 379 "/usr/include/sys/cdefs.h" 2 3 4
719 # 400 "/usr/include/sys/cdefs.h" 3 4
720 #define __LDBL_REDIR1(name,proto,alias) name proto
721 #define __LDBL_REDIR(name,proto) name proto
722 #define __LDBL_REDIR1_NTH(name,proto,alias) name proto __THROW
723 #define __LDBL_REDIR_NTH(name,proto) name proto __THROW
724 #define __LDBL_REDIR_DECL(name)
726 #define __REDIRECT_LDBL(name,proto,alias) __REDIRECT (name, proto, alias)
727 #define __REDIRECT_NTH_LDBL(name,proto,alias) __REDIRECT_NTH (name, proto, alias)
728 # 359 "/usr/include/features.h" 2 3 4
729 # 374 "/usr/include/features.h" 3 4
730 #define __USE_EXTERN_INLINES 1
738 # 1 "/usr/include/gnu/stubs.h" 1 3 4
739 # 10 "/usr/include/gnu/stubs.h" 3 4
740 #define __stub_chflags
741 #define __stub_create_module
742 #define __stub_fattach
743 #define __stub_fchflags
744 #define __stub_fdetach
745 #define __stub_get_kernel_syms
746 #define __stub_getcontext
747 #define __stub_getmsg
748 #define __stub_getpmsg
750 #define __stub_lchmod
751 #define __stub_makecontext
752 #define __stub_putmsg
753 #define __stub_putpmsg
754 #define __stub_query_module
755 #define __stub_revoke
756 #define __stub_setcontext
757 #define __stub_setlogin
758 #define __stub_sigreturn
761 #define __stub_swapcontext
762 # 383 "/usr/include/features.h" 2 3 4
763 # 27 "/usr/include/stdint.h" 2 3 4
764 # 1 "/usr/include/bits/wchar.h" 1 3 4
765 # 21 "/usr/include/bits/wchar.h" 3 4
766 #define _BITS_WCHAR_H 1
768 #define __WCHAR_MIN (-2147483647 - 1)
769 #define __WCHAR_MAX (2147483647)
770 # 28 "/usr/include/stdint.h" 2 3 4
771 # 1 "/usr/include/bits/wordsize.h" 1 3 4
772 # 19 "/usr/include/bits/wordsize.h" 3 4
773 #define __WORDSIZE 32
774 # 29 "/usr/include/stdint.h" 2 3 4
782 #define __int8_t_defined
783 typedef signed char int8_t;
784 typedef short int int16_t;
790 typedef long long int int64_t;
795 typedef unsigned char uint8_t;
796 typedef unsigned short int uint16_t;
798 typedef unsigned int uint32_t;
799 #define __uint32_t_defined
805 typedef unsigned long long int uint64_t;
812 typedef signed char int_least8_t;
813 typedef short int int_least16_t;
814 typedef int int_least32_t;
819 typedef long long int int_least64_t;
823 typedef unsigned char uint_least8_t;
824 typedef unsigned short int uint_least16_t;
825 typedef unsigned int uint_least32_t;
830 typedef unsigned long long int uint_least64_t;
837 typedef signed char int_fast8_t;
843 typedef int int_fast16_t;
844 typedef int int_fast32_t;
846 typedef long long int int_fast64_t;
850 typedef unsigned char uint_fast8_t;
856 typedef unsigned int uint_fast16_t;
857 typedef unsigned int uint_fast32_t;
859 typedef unsigned long long int uint_fast64_t;
860 # 126 "/usr/include/stdint.h" 3 4
861 typedef int intptr_t;
862 #define __intptr_t_defined
864 typedef unsigned int uintptr_t;
865 # 138 "/usr/include/stdint.h" 3 4
867 typedef long long int intmax_t;
869 typedef unsigned long long int uintmax_t;
870 # 153 "/usr/include/stdint.h" 3 4
871 #define __INT64_C(c) c ## LL
872 #define __UINT64_C(c) c ## ULL
878 #define INT8_MIN (-128)
879 #define INT16_MIN (-32767-1)
880 #define INT32_MIN (-2147483647-1)
881 #define INT64_MIN (-__INT64_C(9223372036854775807)-1)
883 #define INT8_MAX (127)
884 #define INT16_MAX (32767)
885 #define INT32_MAX (2147483647)
886 #define INT64_MAX (__INT64_C(9223372036854775807))
889 #define UINT8_MAX (255)
890 #define UINT16_MAX (65535)
891 #define UINT32_MAX (4294967295U)
892 #define UINT64_MAX (__UINT64_C(18446744073709551615))
896 #define INT_LEAST8_MIN (-128)
897 #define INT_LEAST16_MIN (-32767-1)
898 #define INT_LEAST32_MIN (-2147483647-1)
899 #define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1)
901 #define INT_LEAST8_MAX (127)
902 #define INT_LEAST16_MAX (32767)
903 #define INT_LEAST32_MAX (2147483647)
904 #define INT_LEAST64_MAX (__INT64_C(9223372036854775807))
907 #define UINT_LEAST8_MAX (255)
908 #define UINT_LEAST16_MAX (65535)
909 #define UINT_LEAST32_MAX (4294967295U)
910 #define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615))
914 #define INT_FAST8_MIN (-128)
919 #define INT_FAST16_MIN (-2147483647-1)
920 #define INT_FAST32_MIN (-2147483647-1)
922 #define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1)
924 #define INT_FAST8_MAX (127)
929 #define INT_FAST16_MAX (2147483647)
930 #define INT_FAST32_MAX (2147483647)
932 #define INT_FAST64_MAX (__INT64_C(9223372036854775807))
935 #define UINT_FAST8_MAX (255)
940 #define UINT_FAST16_MAX (4294967295U)
941 #define UINT_FAST32_MAX (4294967295U)
943 #define UINT_FAST64_MAX (__UINT64_C(18446744073709551615))
944 # 234 "/usr/include/stdint.h" 3 4
945 #define INTPTR_MIN (-2147483647-1)
946 #define INTPTR_MAX (2147483647)
947 #define UINTPTR_MAX (4294967295U)
952 #define INTMAX_MIN (-__INT64_C(9223372036854775807)-1)
954 #define INTMAX_MAX (__INT64_C(9223372036854775807))
957 #define UINTMAX_MAX (__UINT64_C(18446744073709551615))
958 # 256 "/usr/include/stdint.h" 3 4
959 #define PTRDIFF_MIN (-2147483647-1)
960 #define PTRDIFF_MAX (2147483647)
964 #define SIG_ATOMIC_MIN (-2147483647-1)
965 #define SIG_ATOMIC_MAX (2147483647)
971 #define SIZE_MAX (4294967295U)
977 #define WCHAR_MIN __WCHAR_MIN
978 #define WCHAR_MAX __WCHAR_MAX
982 #define WINT_MIN (0u)
983 #define WINT_MAX (4294967295u)
984 # 4 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stdint.h" 2 3 4
988 #define _GCC_WRAP_STDINT_H
989 # 43 "./../../dist/include/mozilla/StandardInteger.h" 2
990 # 25 "./../../dist/include/mozilla/Types.h" 2
993 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
994 # 40 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
998 #define _ANSI_STDDEF_H
1000 #define __STDDEF_H__
1001 # 138 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1007 #define _BSD_PTRDIFF_T_
1008 #define ___int_ptrdiff_t_h
1009 #define _GCC_PTRDIFF_T
1013 typedef int ptrdiff_t;
1014 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1015 #undef __need_ptrdiff_t
1016 # 186 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1020 #define _SYS_SIZE_T_H
1025 #define _BSD_SIZE_T_
1026 #define _SIZE_T_DEFINED_
1027 #define _SIZE_T_DEFINED
1028 #define _BSD_SIZE_T_DEFINED_
1029 #define _SIZE_T_DECLARED
1030 #define ___int_size_t_h
1042 typedef unsigned int size_t;
1043 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1044 #undef __need_size_t
1045 # 262 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1053 #define _BSD_WCHAR_T_
1054 #define _WCHAR_T_DEFINED_
1055 #define _WCHAR_T_DEFINED
1057 #define ___int_wchar_t_h
1058 #define __INT_WCHAR_T_H
1059 #define _GCC_WCHAR_T
1060 #define _WCHAR_T_DECLARED
1061 # 289 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1062 #undef _BSD_WCHAR_T_
1063 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1064 #undef __need_wchar_t
1065 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1069 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1075 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
1076 # 28 "./../../dist/include/mozilla/Types.h" 2
1077 # 54 "./../../dist/include/mozilla/Types.h"
1078 #define MOZ_EXTERNAL_VIS __attribute__((visibility("default")))
1084 #define MOZ_EXPORT_API(type) MOZ_EXTERNAL_VIS type
1085 #define MOZ_EXPORT_DATA(type) MOZ_EXTERNAL_VIS type
1086 # 80 "./../../dist/include/mozilla/Types.h"
1087 #define MOZ_IMPORT_API(x) MOZ_EXPORT_API(x)
1095 #define MOZ_IMPORT_DATA(x) MOZ_EXPORT_DATA(x)
1096 # 105 "./../../dist/include/mozilla/Types.h"
1097 #define MFBT_API(type) __attribute__((weak)) MOZ_IMPORT_API(type)
1098 #define MFBT_DATA(type) __attribute__((weak)) MOZ_IMPORT_DATA(type)
1099 # 131 "./../../dist/include/mozilla/Types.h"
1100 #define MOZ_BEGIN_EXTERN_C extern "C" {
1101 #define MOZ_END_EXTERN_C }
1102 # 15 "./../../dist/include/mozilla/Assertions.h" 2
1104 # 1 "/usr/include/stdio.h" 1 3 4
1105 # 27 "/usr/include/stdio.h" 3 4
1111 #define __need_size_t
1113 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
1114 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1115 #undef __need_ptrdiff_t
1116 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1117 #undef __need_size_t
1118 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1119 #undef __need_wchar_t
1120 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1124 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1130 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
1131 # 35 "/usr/include/stdio.h" 2 3 4
1133 # 1 "/usr/include/bits/types.h" 1 3 4
1134 # 25 "/usr/include/bits/types.h" 3 4
1135 #define _BITS_TYPES_H 1
1138 # 1 "/usr/include/bits/wordsize.h" 1 3 4
1139 # 19 "/usr/include/bits/wordsize.h" 3 4
1140 #define __WORDSIZE 32
1141 # 29 "/usr/include/bits/types.h" 2 3 4
1144 typedef unsigned char __u_char;
1145 typedef unsigned short int __u_short;
1146 typedef unsigned int __u_int;
1147 typedef unsigned long int __u_long;
1150 typedef signed char __int8_t;
1151 typedef unsigned char __uint8_t;
1152 typedef signed short int __int16_t;
1153 typedef unsigned short int __uint16_t;
1154 typedef signed int __int32_t;
1155 typedef unsigned int __uint32_t;
1160 __extension__ typedef signed long long int __int64_t;
1161 __extension__ typedef unsigned long long int __uint64_t;
1169 __extension__ typedef long long int __quad_t;
1170 __extension__ typedef unsigned long long int __u_quad_t;
1171 # 99 "/usr/include/bits/types.h" 3 4
1172 #define __S16_TYPE short int
1173 #define __U16_TYPE unsigned short int
1174 #define __S32_TYPE int
1175 #define __U32_TYPE unsigned int
1176 #define __SLONGWORD_TYPE long int
1177 #define __ULONGWORD_TYPE unsigned long int
1179 #define __SQUAD_TYPE __quad_t
1180 #define __UQUAD_TYPE __u_quad_t
1181 #define __SWORD_TYPE int
1182 #define __UWORD_TYPE unsigned int
1183 #define __SLONG32_TYPE long int
1184 #define __ULONG32_TYPE unsigned long int
1185 #define __S64_TYPE __quad_t
1186 #define __U64_TYPE __u_quad_t
1189 #define __STD_TYPE __extension__ typedef
1190 # 131 "/usr/include/bits/types.h" 3 4
1191 # 1 "/usr/include/bits/typesizes.h" 1 3 4
1192 # 25 "/usr/include/bits/typesizes.h" 3 4
1193 #define _BITS_TYPESIZES_H 1
1198 #define __DEV_T_TYPE __UQUAD_TYPE
1199 #define __UID_T_TYPE __U32_TYPE
1200 #define __GID_T_TYPE __U32_TYPE
1201 #define __INO_T_TYPE __ULONGWORD_TYPE
1202 #define __INO64_T_TYPE __UQUAD_TYPE
1203 #define __MODE_T_TYPE __U32_TYPE
1204 #define __NLINK_T_TYPE __UWORD_TYPE
1205 #define __OFF_T_TYPE __SLONGWORD_TYPE
1206 #define __OFF64_T_TYPE __SQUAD_TYPE
1207 #define __PID_T_TYPE __S32_TYPE
1208 #define __RLIM_T_TYPE __ULONGWORD_TYPE
1209 #define __RLIM64_T_TYPE __UQUAD_TYPE
1210 #define __BLKCNT_T_TYPE __SLONGWORD_TYPE
1211 #define __BLKCNT64_T_TYPE __SQUAD_TYPE
1212 #define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE
1213 #define __FSBLKCNT64_T_TYPE __UQUAD_TYPE
1214 #define __FSFILCNT_T_TYPE __ULONGWORD_TYPE
1215 #define __FSFILCNT64_T_TYPE __UQUAD_TYPE
1216 #define __ID_T_TYPE __U32_TYPE
1217 #define __CLOCK_T_TYPE __SLONGWORD_TYPE
1218 #define __TIME_T_TYPE __SLONGWORD_TYPE
1219 #define __USECONDS_T_TYPE __U32_TYPE
1220 #define __SUSECONDS_T_TYPE __SLONGWORD_TYPE
1221 #define __DADDR_T_TYPE __S32_TYPE
1222 #define __SWBLK_T_TYPE __SLONGWORD_TYPE
1223 #define __KEY_T_TYPE __S32_TYPE
1224 #define __CLOCKID_T_TYPE __S32_TYPE
1225 #define __TIMER_T_TYPE void *
1226 #define __BLKSIZE_T_TYPE __SLONGWORD_TYPE
1227 #define __FSID_T_TYPE struct { int __val[2]; }
1228 #define __SSIZE_T_TYPE __SWORD_TYPE
1231 #define __FD_SETSIZE 1024
1232 # 132 "/usr/include/bits/types.h" 2 3 4
1235 __extension__ typedef __u_quad_t __dev_t;
1236 __extension__ typedef unsigned int __uid_t;
1237 __extension__ typedef unsigned int __gid_t;
1238 __extension__ typedef unsigned long int __ino_t;
1239 __extension__ typedef __u_quad_t __ino64_t;
1240 __extension__ typedef unsigned int __mode_t;
1241 __extension__ typedef unsigned int __nlink_t;
1242 __extension__ typedef long int __off_t;
1243 __extension__ typedef __quad_t __off64_t;
1244 __extension__ typedef int __pid_t;
1245 __extension__ typedef struct { int __val[2]; } __fsid_t;
1246 __extension__ typedef long int __clock_t;
1247 __extension__ typedef unsigned long int __rlim_t;
1248 __extension__ typedef __u_quad_t __rlim64_t;
1249 __extension__ typedef unsigned int __id_t;
1250 __extension__ typedef long int __time_t;
1251 __extension__ typedef unsigned int __useconds_t;
1252 __extension__ typedef long int __suseconds_t;
1254 __extension__ typedef int __daddr_t;
1255 __extension__ typedef long int __swblk_t;
1256 __extension__ typedef int __key_t;
1259 __extension__ typedef int __clockid_t;
1262 __extension__ typedef void * __timer_t;
1265 __extension__ typedef long int __blksize_t;
1270 __extension__ typedef long int __blkcnt_t;
1271 __extension__ typedef __quad_t __blkcnt64_t;
1274 __extension__ typedef unsigned long int __fsblkcnt_t;
1275 __extension__ typedef __u_quad_t __fsblkcnt64_t;
1278 __extension__ typedef unsigned long int __fsfilcnt_t;
1279 __extension__ typedef __u_quad_t __fsfilcnt64_t;
1281 __extension__ typedef int __ssize_t;
1285 typedef __off64_t __loff_t;
1286 typedef __quad_t *__qaddr_t;
1287 typedef char *__caddr_t;
1290 __extension__ typedef int __intptr_t;
1293 __extension__ typedef unsigned int __socklen_t;
1297 # 37 "/usr/include/stdio.h" 2 3 4
1299 #define __need___FILE
1310 typedef struct _IO_FILE FILE;
1318 #define __FILE_defined 1
1326 typedef struct _IO_FILE __FILE;
1328 #define ____FILE_defined 1
1330 #undef __need___FILE
1334 #define _STDIO_USES_IOSTREAM
1336 # 1 "/usr/include/libio.h" 1 3 4
1337 # 30 "/usr/include/libio.h" 3 4
1340 # 1 "/usr/include/_G_config.h" 1 3 4
1345 #define _G_config_h 1
1350 #define __need_size_t
1355 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
1356 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1357 #undef __need_ptrdiff_t
1358 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1359 #undef __need_size_t
1360 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1361 #undef __need_wchar_t
1362 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1366 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
1372 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
1373 # 16 "/usr/include/_G_config.h" 2 3 4
1374 #define __need_mbstate_t
1378 # 1 "/usr/include/wchar.h" 1 3 4
1379 # 81 "/usr/include/wchar.h" 3 4
1380 #define __mbstate_t_defined 1
1396 #undef __need_mbstate_t
1397 # 896 "/usr/include/wchar.h" 3 4
1398 #undef __need_mbstate_t
1399 #undef __need_wint_t
1400 # 21 "/usr/include/_G_config.h" 2 3 4
1401 #define _G_size_t size_t
1405 __mbstate_t __state;
1410 __mbstate_t __state;
1412 #define _G_ssize_t __ssize_t
1413 #define _G_off_t __off_t
1414 #define _G_off64_t __off64_t
1415 #define _G_pid_t __pid_t
1416 #define _G_uid_t __uid_t
1417 #define _G_wchar_t wchar_t
1418 #define _G_wint_t wint_t
1419 #define _G_stat64 stat64
1420 # 53 "/usr/include/_G_config.h" 3 4
1421 typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
1422 typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
1423 typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
1424 typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
1426 #define _G_HAVE_BOOL 1
1430 #define _G_HAVE_ATEXIT 1
1431 #define _G_HAVE_SYS_CDEFS 1
1432 #define _G_HAVE_SYS_WAIT 1
1433 #define _G_NEED_STDARG_H 1
1434 #define _G_va_list __gnuc_va_list
1436 #define _G_HAVE_PRINTF_FP 1
1437 #define _G_HAVE_MMAP 1
1438 #define _G_HAVE_MREMAP 1
1439 #define _G_HAVE_LONG_DOUBLE_IO 1
1440 #define _G_HAVE_IO_FILE_OPEN 1
1441 #define _G_HAVE_IO_GETLINE_INFO 1
1443 #define _G_IO_IO_FILE_VERSION 0x20001
1445 #define _G_OPEN64 __open64
1446 #define _G_LSEEK64 __lseek64
1447 #define _G_MMAP64 __mmap64
1448 #define _G_FSTAT64(fd,buf) __fxstat64 (_STAT_VER, fd, buf)
1451 #define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
1453 #define _G_BUFSIZ 8192
1456 #define _G_NAMES_HAVE_UNDERSCORE 0
1457 #define _G_VTABLE_LABEL_HAS_LENGTH 1
1458 #define _G_USING_THUNKS 1
1459 #define _G_VTABLE_LABEL_PREFIX "__vt_"
1460 #define _G_VTABLE_LABEL_PREFIX_ID __vt_
1464 #define _G_ARGS(ARGLIST) ARGLIST
1465 # 33 "/usr/include/libio.h" 2 3 4
1467 #define _IO_pos_t _G_fpos_t
1468 #define _IO_fpos_t _G_fpos_t
1469 #define _IO_fpos64_t _G_fpos64_t
1470 #define _IO_size_t _G_size_t
1471 #define _IO_ssize_t _G_ssize_t
1472 #define _IO_off_t _G_off_t
1473 #define _IO_off64_t _G_off64_t
1474 #define _IO_pid_t _G_pid_t
1475 #define _IO_uid_t _G_uid_t
1476 #define _IO_iconv_t _G_iconv_t
1477 #define _IO_HAVE_SYS_WAIT _G_HAVE_SYS_WAIT
1478 #define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
1479 #define _IO_BUFSIZ _G_BUFSIZ
1480 #define _IO_va_list _G_va_list
1481 #define _IO_wint_t _G_wint_t
1485 #define __need___va_list
1486 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stdarg.h" 1 3 4
1487 # 34 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stdarg.h" 3 4
1488 #undef __need___va_list
1493 #define __GNUC_VA_LIST
1494 typedef __builtin_va_list __gnuc_va_list;
1495 # 54 "/usr/include/libio.h" 2 3 4
1498 #define _IO_va_list __gnuc_va_list
1499 # 76 "/usr/include/libio.h" 3 4
1500 #define _PARAMS(protos) __P(protos)
1508 #define _IO_UNIFIED_JUMPTABLES 1
1515 # 105 "/usr/include/libio.h" 3 4
1516 #define _IOS_INPUT 1
1517 #define _IOS_OUTPUT 2
1518 #define _IOS_ATEND 4
1519 #define _IOS_APPEND 8
1520 #define _IOS_TRUNC 16
1521 #define _IOS_NOCREATE 32
1522 #define _IOS_NOREPLACE 64
1523 #define _IOS_BIN 128
1531 #define _IO_MAGIC 0xFBAD0000
1532 #define _OLD_STDIO_MAGIC 0xFABC0000
1533 #define _IO_MAGIC_MASK 0xFFFF0000
1534 #define _IO_USER_BUF 1
1535 #define _IO_UNBUFFERED 2
1536 #define _IO_NO_READS 4
1537 #define _IO_NO_WRITES 8
1538 #define _IO_EOF_SEEN 0x10
1539 #define _IO_ERR_SEEN 0x20
1540 #define _IO_DELETE_DONT_CLOSE 0x40
1541 #define _IO_LINKED 0x80
1542 #define _IO_IN_BACKUP 0x100
1543 #define _IO_LINE_BUF 0x200
1544 #define _IO_TIED_PUT_GET 0x400
1545 #define _IO_CURRENTLY_PUTTING 0x800
1546 #define _IO_IS_APPENDING 0x1000
1547 #define _IO_IS_FILEBUF 0x2000
1548 #define _IO_BAD_SEEN 0x4000
1549 #define _IO_USER_LOCK 0x8000
1551 #define _IO_FLAGS2_MMAP 1
1552 #define _IO_FLAGS2_NOTCANCEL 2
1556 #define _IO_FLAGS2_USER_WBUF 8
1564 #define _IO_SKIPWS 01
1566 #define _IO_RIGHT 04
1567 #define _IO_INTERNAL 010
1570 #define _IO_HEX 0100
1571 #define _IO_SHOWBASE 0200
1572 #define _IO_SHOWPOINT 0400
1573 #define _IO_UPPERCASE 01000
1574 #define _IO_SHOWPOS 02000
1575 #define _IO_SCIENTIFIC 04000
1576 #define _IO_FIXED 010000
1577 #define _IO_UNITBUF 020000
1578 #define _IO_STDIO 040000
1579 #define _IO_DONT_CLOSE 0100000
1580 #define _IO_BOOLALPHA 0200000
1583 struct _IO_jump_t; struct _IO_FILE;
1584 # 182 "/usr/include/libio.h" 3 4
1585 typedef void _IO_lock_t;
1592 struct _IO_marker *_next;
1593 struct _IO_FILE *_sbuf;
1598 # 205 "/usr/include/libio.h" 3 4
1602 enum __codecvt_result
1609 # 273 "/usr/include/libio.h" 3 4
1612 #define _IO_file_flags _flags
1618 char* _IO_read_base;
1619 char* _IO_write_base;
1620 char* _IO_write_ptr;
1621 char* _IO_write_end;
1625 char *_IO_save_base;
1626 char *_IO_backup_base;
1629 struct _IO_marker *_markers;
1631 struct _IO_FILE *_chain;
1639 __off_t _old_offset;
1641 #define __HAVE_COLUMN
1643 unsigned short _cur_column;
1644 signed char _vtable_offset;
1650 # 321 "/usr/include/libio.h" 3 4
1652 # 330 "/usr/include/libio.h" 3 4
1661 char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
1669 struct _IO_FILE_plus;
1671 extern struct _IO_FILE_plus _IO_2_1_stdin_;
1672 extern struct _IO_FILE_plus _IO_2_1_stdout_;
1673 extern struct _IO_FILE_plus _IO_2_1_stderr_;
1675 #define _IO_stdin ((_IO_FILE*)(&_IO_2_1_stdin_))
1676 #define _IO_stdout ((_IO_FILE*)(&_IO_2_1_stdout_))
1677 #define _IO_stderr ((_IO_FILE*)(&_IO_2_1_stderr_))
1678 # 366 "/usr/include/libio.h" 3 4
1679 typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
1687 typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
1696 typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
1699 typedef int __io_close_fn (void *__cookie);
1704 typedef __io_read_fn cookie_read_function_t;
1705 typedef __io_write_fn cookie_write_function_t;
1706 typedef __io_seek_fn cookie_seek_function_t;
1707 typedef __io_close_fn cookie_close_function_t;
1713 __io_write_fn *write;
1715 __io_close_fn *close;
1716 } _IO_cookie_io_functions_t;
1717 typedef _IO_cookie_io_functions_t cookie_io_functions_t;
1719 struct _IO_cookie_file;
1722 extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
1723 void *__cookie, _IO_cookie_io_functions_t __fns);
1731 extern int __underflow (_IO_FILE *);
1732 extern int __uflow (_IO_FILE *);
1733 extern int __overflow (_IO_FILE *, int);
1741 #define _IO_BE(expr,res) __builtin_expect ((expr), res)
1746 #define _IO_getc_unlocked(_fp) (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
1749 #define _IO_peekc_unlocked(_fp) (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) && __underflow (_fp) == EOF ? EOF : *(unsigned char *) (_fp)->_IO_read_ptr)
1753 #define _IO_putc_unlocked(_ch,_fp) (_IO_BE ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end, 0) ? __overflow (_fp, (unsigned char) (_ch)) : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
1754 # 459 "/usr/include/libio.h" 3 4
1755 #define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
1756 #define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
1758 extern int _IO_getc (_IO_FILE *__fp);
1759 extern int _IO_putc (int __c, _IO_FILE *__fp);
1760 extern int _IO_feof (_IO_FILE *__fp) throw ();
1761 extern int _IO_ferror (_IO_FILE *__fp) throw ();
1763 extern int _IO_peekc_locked (_IO_FILE *__fp);
1766 #define _IO_PENDING_OUTPUT_COUNT(_fp) ((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
1769 extern void _IO_flockfile (_IO_FILE *) throw ();
1770 extern void _IO_funlockfile (_IO_FILE *) throw ();
1771 extern int _IO_ftrylockfile (_IO_FILE *) throw ();
1772 # 484 "/usr/include/libio.h" 3 4
1773 #define _IO_peekc(_fp) _IO_peekc_unlocked (_fp)
1774 #define _IO_flockfile(_fp)
1775 #define _IO_funlockfile(_fp)
1776 #define _IO_ftrylockfile(_fp)
1777 #define _IO_cleanup_region_start(_fct,_fp)
1778 #define _IO_cleanup_region_end(_Doit)
1781 extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
1782 __gnuc_va_list, int *__restrict);
1783 extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
1785 extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
1786 extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
1788 extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
1789 extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
1791 extern void _IO_free_backup_area (_IO_FILE *) throw ();
1792 # 554 "/usr/include/libio.h" 3 4
1794 # 76 "/usr/include/stdio.h" 2 3 4
1799 typedef __gnuc_va_list va_list;
1800 #define _VA_LIST_DEFINED
1801 # 91 "/usr/include/stdio.h" 3 4
1802 typedef __off_t off_t;
1806 #define __off_t_defined
1809 typedef __off64_t off64_t;
1810 #define __off64_t_defined
1814 typedef __ssize_t ssize_t;
1815 #define __ssize_t_defined
1822 typedef _G_fpos_t fpos_t;
1828 typedef _G_fpos64_t fpos64_t;
1839 #define BUFSIZ _IO_BUFSIZ
1840 # 141 "/usr/include/stdio.h" 3 4
1852 #define P_tmpdir "/tmp"
1853 # 165 "/usr/include/stdio.h" 3 4
1854 # 1 "/usr/include/bits/stdio_lim.h" 1 3 4
1855 # 24 "/usr/include/bits/stdio_lim.h" 3 4
1857 #define TMP_MAX 238328
1858 #define FILENAME_MAX 4096
1870 #define FOPEN_MAX 16
1871 # 166 "/usr/include/stdio.h" 2 3 4
1875 extern struct _IO_FILE *stdin;
1876 extern struct _IO_FILE *stdout;
1877 extern struct _IO_FILE *stderr;
1880 #define stdout stdout
1881 #define stderr stderr
1885 extern int remove (__const char *__filename) throw ();
1887 extern int rename (__const char *__old, __const char *__new) throw ();
1892 extern int renameat (int __oldfd, __const char *__old, int __newfd,
1893 __const char *__new) throw ();
1902 extern FILE *tmpfile (void) __attribute__ ((__warn_unused_result__));
1903 # 206 "/usr/include/stdio.h" 3 4
1904 extern FILE *tmpfile64 (void) __attribute__ ((__warn_unused_result__));
1908 extern char *tmpnam (char *__s) throw () __attribute__ ((__warn_unused_result__));
1914 extern char *tmpnam_r (char *__s) throw () __attribute__ ((__warn_unused_result__));
1915 # 228 "/usr/include/stdio.h" 3 4
1916 extern char *tempnam (__const char *__dir, __const char *__pfx)
1917 throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
1926 extern int fclose (FILE *__stream);
1931 extern int fflush (FILE *__stream);
1933 # 253 "/usr/include/stdio.h" 3 4
1934 extern int fflush_unlocked (FILE *__stream);
1935 # 263 "/usr/include/stdio.h" 3 4
1936 extern int fcloseall (void);
1946 extern FILE *fopen (__const char *__restrict __filename,
1947 __const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
1952 extern FILE *freopen (__const char *__restrict __filename,
1953 __const char *__restrict __modes,
1954 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
1955 # 296 "/usr/include/stdio.h" 3 4
1958 extern FILE *fopen64 (__const char *__restrict __filename,
1959 __const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
1960 extern FILE *freopen64 (__const char *__restrict __filename,
1961 __const char *__restrict __modes,
1962 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
1967 extern FILE *fdopen (int __fd, __const char *__modes) throw () __attribute__ ((__warn_unused_result__));
1973 extern FILE *fopencookie (void *__restrict __magic_cookie,
1974 __const char *__restrict __modes,
1975 _IO_cookie_io_functions_t __io_funcs) throw () __attribute__ ((__warn_unused_result__));
1980 extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
1981 throw () __attribute__ ((__warn_unused_result__));
1986 extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () __attribute__ ((__warn_unused_result__));
1993 extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
1997 extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
1998 int __modes, size_t __n) throw ();
2004 extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
2005 size_t __size) throw ();
2008 extern void setlinebuf (FILE *__stream) throw ();
2017 extern int fprintf (FILE *__restrict __stream,
2018 __const char *__restrict __format, ...);
2023 extern int printf (__const char *__restrict __format, ...);
2025 extern int sprintf (char *__restrict __s,
2026 __const char *__restrict __format, ...) throw ();
2032 extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
2033 __gnuc_va_list __arg);
2038 extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);
2040 extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
2041 __gnuc_va_list __arg) throw ();
2047 extern int snprintf (char *__restrict __s, size_t __maxlen,
2048 __const char *__restrict __format, ...)
2049 throw () __attribute__ ((__format__ (__printf__, 3, 4)));
2051 extern int vsnprintf (char *__restrict __s, size_t __maxlen,
2052 __const char *__restrict __format, __gnuc_va_list __arg)
2053 throw () __attribute__ ((__format__ (__printf__, 3, 0)));
2060 extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
2061 __gnuc_va_list __arg)
2062 throw () __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__));
2063 extern int __asprintf (char **__restrict __ptr,
2064 __const char *__restrict __fmt, ...)
2065 throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
2066 extern int asprintf (char **__restrict __ptr,
2067 __const char *__restrict __fmt, ...)
2068 throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
2069 # 418 "/usr/include/stdio.h" 3 4
2070 extern int vdprintf (int __fd, __const char *__restrict __fmt,
2071 __gnuc_va_list __arg)
2072 __attribute__ ((__format__ (__printf__, 2, 0)));
2073 extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
2074 __attribute__ ((__format__ (__printf__, 2, 3)));
2083 extern int fscanf (FILE *__restrict __stream,
2084 __const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
2089 extern int scanf (__const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
2091 extern int sscanf (__const char *__restrict __s,
2092 __const char *__restrict __format, ...) throw ();
2093 # 469 "/usr/include/stdio.h" 3 4
2102 extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
2103 __gnuc_va_list __arg)
2104 __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__));
2110 extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
2111 __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__));
2114 extern int vsscanf (__const char *__restrict __s,
2115 __const char *__restrict __format, __gnuc_va_list __arg)
2116 throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
2117 # 528 "/usr/include/stdio.h" 3 4
2127 extern int fgetc (FILE *__stream);
2128 extern int getc (FILE *__stream);
2134 extern int getchar (void);
2139 #define getc(_fp) _IO_getc (_fp)
2146 extern int getc_unlocked (FILE *__stream);
2147 extern int getchar_unlocked (void);
2148 # 567 "/usr/include/stdio.h" 3 4
2149 extern int fgetc_unlocked (FILE *__stream);
2161 extern int fputc (int __c, FILE *__stream);
2162 extern int putc (int __c, FILE *__stream);
2168 extern int putchar (int __c);
2173 #define putc(_ch,_fp) _IO_putc (_ch, _fp)
2174 # 600 "/usr/include/stdio.h" 3 4
2175 extern int fputc_unlocked (int __c, FILE *__stream);
2183 extern int putc_unlocked (int __c, FILE *__stream);
2184 extern int putchar_unlocked (int __c);
2191 extern int getw (FILE *__stream);
2194 extern int putw (int __w, FILE *__stream);
2203 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
2204 __attribute__ ((__warn_unused_result__));
2211 extern char *gets (char *__s) __attribute__ ((__warn_unused_result__));
2213 # 646 "/usr/include/stdio.h" 3 4
2214 extern char *fgets_unlocked (char *__restrict __s, int __n,
2215 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2216 # 662 "/usr/include/stdio.h" 3 4
2217 extern __ssize_t __getdelim (char **__restrict __lineptr,
2218 size_t *__restrict __n, int __delimiter,
2219 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2220 extern __ssize_t getdelim (char **__restrict __lineptr,
2221 size_t *__restrict __n, int __delimiter,
2222 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2230 extern __ssize_t getline (char **__restrict __lineptr,
2231 size_t *__restrict __n,
2232 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2241 extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
2247 extern int puts (__const char *__s);
2254 extern int ungetc (int __c, FILE *__stream);
2261 extern size_t fread (void *__restrict __ptr, size_t __size,
2262 size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2267 extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
2268 size_t __n, FILE *__restrict __s) __attribute__ ((__warn_unused_result__));
2270 # 723 "/usr/include/stdio.h" 3 4
2271 extern int fputs_unlocked (__const char *__restrict __s,
2272 FILE *__restrict __stream);
2273 # 734 "/usr/include/stdio.h" 3 4
2274 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
2275 size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2276 extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
2277 size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2286 extern int fseek (FILE *__stream, long int __off, int __whence);
2291 extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__));
2296 extern void rewind (FILE *__stream);
2298 # 770 "/usr/include/stdio.h" 3 4
2299 extern int fseeko (FILE *__stream, __off_t __off, int __whence);
2304 extern __off_t ftello (FILE *__stream) __attribute__ ((__warn_unused_result__));
2305 # 789 "/usr/include/stdio.h" 3 4
2312 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
2317 extern int fsetpos (FILE *__stream, __const fpos_t *__pos);
2318 # 812 "/usr/include/stdio.h" 3 4
2322 extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
2323 extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__));
2324 extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
2325 extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);
2330 extern void clearerr (FILE *__stream) throw ();
2332 extern int feof (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
2334 extern int ferror (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
2339 extern void clearerr_unlocked (FILE *__stream) throw ();
2340 extern int feof_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
2341 extern int ferror_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
2350 extern void perror (__const char *__s);
2357 # 1 "/usr/include/bits/sys_errlist.h" 1 3 4
2358 # 27 "/usr/include/bits/sys_errlist.h" 3 4
2359 extern int sys_nerr;
2360 extern __const char *__const sys_errlist[];
2363 extern int _sys_nerr;
2364 extern __const char *__const _sys_errlist[];
2365 # 851 "/usr/include/stdio.h" 2 3 4
2370 extern int fileno (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
2375 extern int fileno_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
2376 # 870 "/usr/include/stdio.h" 3 4
2377 extern FILE *popen (__const char *__command, __const char *__modes) __attribute__ ((__warn_unused_result__));
2383 extern int pclose (FILE *__stream);
2389 extern char *ctermid (char *__s) throw ();
2395 extern char *cuserid (char *__s);
2403 extern int obstack_printf (struct obstack *__restrict __obstack,
2404 __const char *__restrict __format, ...)
2405 throw () __attribute__ ((__format__ (__printf__, 2, 3)));
2406 extern int obstack_vprintf (struct obstack *__restrict __obstack,
2407 __const char *__restrict __format,
2408 __gnuc_va_list __args)
2409 throw () __attribute__ ((__format__ (__printf__, 2, 0)));
2417 extern void flockfile (FILE *__stream) throw ();
2421 extern int ftrylockfile (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
2424 extern void funlockfile (FILE *__stream) throw ();
2425 # 931 "/usr/include/stdio.h" 3 4
2426 # 1 "/usr/include/bits/stdio.h" 1 3 4
2427 # 27 "/usr/include/bits/stdio.h" 3 4
2428 #define __STDIO_INLINE __extern_inline
2429 # 44 "/usr/include/bits/stdio.h" 3 4
2430 extern __inline __attribute__ ((__gnu_inline__)) int
2433 return _IO_getc (stdin);
2439 extern __inline __attribute__ ((__gnu_inline__)) int
2440 fgetc_unlocked (FILE *__fp)
2442 return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
2449 extern __inline __attribute__ ((__gnu_inline__)) int
2450 getc_unlocked (FILE *__fp)
2452 return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
2456 extern __inline __attribute__ ((__gnu_inline__)) int
2457 getchar_unlocked (void)
2459 return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
2465 extern __inline __attribute__ ((__gnu_inline__)) int
2468 return _IO_putc (__c, stdout);
2474 extern __inline __attribute__ ((__gnu_inline__)) int
2475 fputc_unlocked (int __c, FILE *__stream)
2477 return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
2484 extern __inline __attribute__ ((__gnu_inline__)) int
2485 putc_unlocked (int __c, FILE *__stream)
2487 return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
2491 extern __inline __attribute__ ((__gnu_inline__)) int
2492 putchar_unlocked (int __c)
2494 return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
2501 extern __inline __attribute__ ((__gnu_inline__)) __ssize_t
2502 getline (char **__lineptr, size_t *__n, FILE *__stream)
2504 return __getdelim (__lineptr, __n, '\n', __stream);
2511 extern __inline __attribute__ ((__gnu_inline__)) int
2512 feof_unlocked (FILE *__stream) throw ()
2514 return (((__stream)->_flags & 0x10) != 0);
2518 extern __inline __attribute__ ((__gnu_inline__)) int
2519 ferror_unlocked (FILE *__stream) throw ()
2521 return (((__stream)->_flags & 0x20) != 0);
2523 # 191 "/usr/include/bits/stdio.h" 3 4
2524 #undef __STDIO_INLINE
2525 # 932 "/usr/include/stdio.h" 2 3 4
2528 # 1 "/usr/include/bits/stdio2.h" 1 3 4
2529 # 24 "/usr/include/bits/stdio2.h" 3 4
2530 extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
2531 __const char *__restrict __format, ...) throw ();
2532 extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
2533 __const char *__restrict __format,
2534 __gnuc_va_list __ap) throw ();
2537 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2538 sprintf (char *__restrict __s, __const char *__restrict __fmt, ...) throw ()
2540 return __builtin___sprintf_chk (__s, 2 - 1,
2541 __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
2549 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2550 vsprintf (char *__restrict __s, __const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
2553 return __builtin___vsprintf_chk (__s, 2 - 1,
2554 __builtin_object_size (__s, 2 > 1), __fmt, __ap);
2559 extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
2560 size_t __slen, __const char *__restrict __format,
2562 extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
2563 size_t __slen, __const char *__restrict __format,
2564 __gnuc_va_list __ap) throw ();
2567 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2568 snprintf (char *__restrict __s, size_t __n, __const char *__restrict __fmt, ...) throw ()
2571 return __builtin___snprintf_chk (__s, __n, 2 - 1,
2572 __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
2580 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2581 vsnprintf (char *__restrict __s, size_t __n, __const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
2584 return __builtin___vsnprintf_chk (__s, __n, 2 - 1,
2585 __builtin_object_size (__s, 2 > 1), __fmt, __ap);
2592 extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
2593 __const char *__restrict __format, ...);
2594 extern int __printf_chk (int __flag, __const char *__restrict __format, ...);
2595 extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
2596 __const char *__restrict __format, __gnuc_va_list __ap);
2597 extern int __vprintf_chk (int __flag, __const char *__restrict __format,
2598 __gnuc_va_list __ap);
2601 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2602 fprintf (FILE *__restrict __stream, __const char *__restrict __fmt, ...)
2604 return __fprintf_chk (__stream, 2 - 1, __fmt,
2605 __builtin_va_arg_pack ());
2608 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2609 printf (__const char *__restrict __fmt, ...)
2611 return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
2620 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2621 vprintf (__const char *__restrict __fmt, __gnuc_va_list __ap)
2624 return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap);
2630 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2631 vfprintf (FILE *__restrict __stream,
2632 __const char *__restrict __fmt, __gnuc_va_list __ap)
2634 return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap);
2639 extern int __asprintf_chk (char **__restrict __ptr, int __flag,
2640 __const char *__restrict __fmt, ...)
2641 throw () __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__));
2642 extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
2643 __const char *__restrict __fmt, __gnuc_va_list __arg)
2644 throw () __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__));
2645 extern int __dprintf_chk (int __fd, int __flag, __const char *__restrict __fmt,
2646 ...) __attribute__ ((__format__ (__printf__, 3, 4)));
2647 extern int __vdprintf_chk (int __fd, int __flag,
2648 __const char *__restrict __fmt, __gnuc_va_list __arg)
2649 __attribute__ ((__format__ (__printf__, 3, 0)));
2650 extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
2651 int __flag, __const char *__restrict __format,
2653 throw () __attribute__ ((__format__ (__printf__, 3, 4)));
2654 extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
2656 __const char *__restrict __format,
2657 __gnuc_va_list __args)
2658 throw () __attribute__ ((__format__ (__printf__, 3, 0)));
2661 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2662 asprintf (char **__restrict __ptr, __const char *__restrict __fmt, ...) throw ()
2664 return __asprintf_chk (__ptr, 2 - 1, __fmt,
2665 __builtin_va_arg_pack ());
2668 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2669 __asprintf (char **__restrict __ptr, __const char *__restrict __fmt, ...) throw ()
2672 return __asprintf_chk (__ptr, 2 - 1, __fmt,
2673 __builtin_va_arg_pack ());
2676 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2677 dprintf (int __fd, __const char *__restrict __fmt, ...)
2679 return __dprintf_chk (__fd, 2 - 1, __fmt,
2680 __builtin_va_arg_pack ());
2683 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2684 obstack_printf (struct obstack *__restrict __obstack, __const char *__restrict __fmt, ...) throw ()
2687 return __obstack_printf_chk (__obstack, 2 - 1, __fmt,
2688 __builtin_va_arg_pack ());
2690 # 195 "/usr/include/bits/stdio2.h" 3 4
2691 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2692 vasprintf (char **__restrict __ptr, __const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
2695 return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap);
2698 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2699 vdprintf (int __fd, __const char *__restrict __fmt, __gnuc_va_list __ap)
2701 return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap);
2704 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
2705 obstack_vprintf (struct obstack *__restrict __obstack, __const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
2708 return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt,
2716 extern char *__gets_chk (char *__str, size_t) __attribute__ ((__warn_unused_result__));
2717 extern char *__gets_warn (char *__str) __asm__ ("" "gets")
2718 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("please use fgets or getline instead, gets can't " "specify buffer size")))
2721 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __attribute__ ((__warn_unused_result__)) char *
2724 if (__builtin_object_size (__str, 2 > 1) != (size_t) -1)
2725 return __gets_chk (__str, __builtin_object_size (__str, 2 > 1));
2726 return __gets_warn (__str);
2729 extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
2730 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2731 extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets")
2733 __attribute__ ((__warn_unused_result__));
2734 extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk")
2737 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer")))
2740 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __attribute__ ((__warn_unused_result__)) char *
2741 fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
2743 if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
2745 if (!__builtin_constant_p (__n) || __n <= 0)
2746 return __fgets_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
2748 if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
2749 return __fgets_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
2751 return __fgets_alias (__s, __n, __stream);
2754 extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
2755 size_t __size, size_t __n,
2756 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2757 extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread")
2760 __attribute__ ((__warn_unused_result__));
2761 extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk")
2766 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer")))
2769 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __attribute__ ((__warn_unused_result__)) size_t
2770 fread (void *__restrict __ptr, size_t __size, size_t __n,
2771 FILE *__restrict __stream)
2773 if (__builtin_object_size (__ptr, 0) != (size_t) -1)
2775 if (!__builtin_constant_p (__size)
2776 || !__builtin_constant_p (__n)
2777 || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
2778 return __fread_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
2780 if (__size * __n > __builtin_object_size (__ptr, 0))
2781 return __fread_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
2783 return __fread_alias (__ptr, __size, __n, __stream);
2787 extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
2788 int __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2789 extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked")
2791 __attribute__ ((__warn_unused_result__));
2792 extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk")
2795 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer")))
2798 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __attribute__ ((__warn_unused_result__)) char *
2799 fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
2801 if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
2803 if (!__builtin_constant_p (__n) || __n <= 0)
2804 return __fgets_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
2806 if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
2807 return __fgets_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
2809 return __fgets_unlocked_alias (__s, __n, __stream);
2814 #undef fread_unlocked
2815 extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
2816 size_t __size, size_t __n,
2817 FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
2818 extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked")
2821 __attribute__ ((__warn_unused_result__));
2822 extern size_t __fread_unlocked_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_unlocked_chk")
2827 __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer")))
2830 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __attribute__ ((__warn_unused_result__)) size_t
2831 fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
2832 FILE *__restrict __stream)
2834 if (__builtin_object_size (__ptr, 0) != (size_t) -1)
2836 if (!__builtin_constant_p (__size)
2837 || !__builtin_constant_p (__n)
2838 || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
2839 return __fread_unlocked_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
2842 if (__size * __n > __builtin_object_size (__ptr, 0))
2843 return __fread_unlocked_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
2848 if (__builtin_constant_p (__size)
2849 && __builtin_constant_p (__n)
2850 && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
2851 && __size * __n <= 8)
2853 size_t __cnt = __size * __n;
2854 char *__cptr = (char *) __ptr;
2858 for (; __cnt > 0; --__cnt)
2860 int __c = (__builtin_expect (((__stream)->_IO_read_ptr >= (__stream)->_IO_read_end), 0) ? __uflow (__stream) : *(unsigned char *) (__stream)->_IO_read_ptr++);
2865 return (__cptr - (char *) __ptr) / __size;
2868 return __fread_unlocked_alias (__ptr, __size, __n, __stream);
2870 # 935 "/usr/include/stdio.h" 2 3 4
2877 # 17 "./../../dist/include/mozilla/Assertions.h" 2
2878 # 1 "/usr/include/stdlib.h" 1 3 4
2879 # 28 "/usr/include/stdlib.h" 3 4
2880 #define __need_size_t
2882 #define __need_wchar_t
2885 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
2886 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
2887 #undef __need_ptrdiff_t
2888 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
2889 #undef __need_size_t
2890 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
2891 #undef __need_wchar_t
2892 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
2896 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
2902 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
2903 # 34 "/usr/include/stdlib.h" 2 3 4
2912 # 1 "/usr/include/bits/waitflags.h" 1 3 4
2913 # 26 "/usr/include/bits/waitflags.h" 3 4
2920 #define WCONTINUED 8
2921 #define WNOWAIT 0x01000000
2923 #define __WNOTHREAD 0x20000000
2925 #define __WALL 0x40000000
2926 #define __WCLONE 0x80000000
2927 # 43 "/usr/include/stdlib.h" 2 3 4
2928 # 1 "/usr/include/bits/waitstatus.h" 1 3 4
2929 # 29 "/usr/include/bits/waitstatus.h" 3 4
2930 #define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
2933 #define __WTERMSIG(status) ((status) & 0x7f)
2936 #define __WSTOPSIG(status) __WEXITSTATUS(status)
2939 #define __WIFEXITED(status) (__WTERMSIG(status) == 0)
2942 #define __WIFSIGNALED(status) (((signed char) (((status) & 0x7f) + 1) >> 1) > 0)
2946 #define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f)
2951 #define __WIFCONTINUED(status) ((status) == __W_CONTINUED)
2955 #define __WCOREDUMP(status) ((status) & __WCOREFLAG)
2958 #define __W_EXITCODE(ret,sig) ((ret) << 8 | (sig))
2959 #define __W_STOPCODE(sig) ((sig) << 8 | 0x7f)
2960 #define __W_CONTINUED 0xffff
2961 #define __WCOREFLAG 0x80
2966 # 1 "/usr/include/endian.h" 1 3 4
2967 # 20 "/usr/include/endian.h" 3 4
2969 # 32 "/usr/include/endian.h" 3 4
2970 #define __LITTLE_ENDIAN 1234
2971 #define __BIG_ENDIAN 4321
2972 #define __PDP_ENDIAN 3412
2975 # 1 "/usr/include/bits/endian.h" 1 3 4
2976 # 9 "/usr/include/bits/endian.h" 3 4
2977 #define __BYTE_ORDER __LITTLE_ENDIAN
2984 #define __FLOAT_WORD_ORDER __BYTE_ORDER
2985 # 38 "/usr/include/endian.h" 2 3 4
2986 # 46 "/usr/include/endian.h" 3 4
2987 #define LITTLE_ENDIAN __LITTLE_ENDIAN
2988 #define BIG_ENDIAN __BIG_ENDIAN
2989 #define PDP_ENDIAN __PDP_ENDIAN
2990 #define BYTE_ORDER __BYTE_ORDER
2994 #define __LONG_LONG_PAIR(HI,LO) LO, HI
3002 # 1 "/usr/include/bits/byteswap.h" 1 3 4
3003 # 26 "/usr/include/bits/byteswap.h" 3 4
3004 #define _BITS_BYTESWAP_H 1
3007 #define __bswap_constant_16(x) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8))
3011 #define __bswap_16(x) (__extension__ ({ unsigned short int __bsx = (x); __bswap_constant_16 (__bsx); }))
3012 # 45 "/usr/include/bits/byteswap.h" 3 4
3013 #define __bswap_constant_32(x) ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))
3018 #define __bswap_32(x) (__extension__ ({ register unsigned int __bsx = (x); __bswap_constant_32 (__bsx); }))
3019 # 63 "/usr/include/bits/byteswap.h" 3 4
3020 #define __bswap_constant_64(x) (__extension__ ((((x) & 0xff00000000000000ull) >> 56) | (((x) & 0x00ff000000000000ull) >> 40) | (((x) & 0x0000ff0000000000ull) >> 24) | (((x) & 0x000000ff00000000ull) >> 8) | (((x) & 0x00000000ff000000ull) << 8) | (((x) & 0x0000000000ff0000ull) << 24) | (((x) & 0x000000000000ff00ull) << 40) | (((x) & 0x00000000000000ffull) << 56)))
3021 # 73 "/usr/include/bits/byteswap.h" 3 4
3022 #define __bswap_64(x) (__extension__ ({ union { __extension__ unsigned long long int __ll; unsigned int __l[2]; } __w, __r; if (__builtin_constant_p (x)) __r.__ll = __bswap_constant_64 (x); else { __w.__ll = (x); __r.__l[0] = __bswap_32 (__w.__l[1]); __r.__l[1] = __bswap_32 (__w.__l[0]); } __r.__ll; }))
3023 # 62 "/usr/include/endian.h" 2 3 4
3026 #define htobe16(x) __bswap_16 (x)
3027 #define htole16(x) (x)
3028 #define be16toh(x) __bswap_16 (x)
3029 #define le16toh(x) (x)
3031 #define htobe32(x) __bswap_32 (x)
3032 #define htole32(x) (x)
3033 #define be32toh(x) __bswap_32 (x)
3034 #define le32toh(x) (x)
3036 #define htobe64(x) __bswap_64 (x)
3037 #define htole64(x) (x)
3038 #define be64toh(x) __bswap_64 (x)
3039 #define le64toh(x) (x)
3040 # 66 "/usr/include/bits/waitstatus.h" 2 3 4
3048 unsigned int __w_termsig:7;
3049 unsigned int __w_coredump:1;
3050 unsigned int __w_retcode:8;
3059 } __wait_terminated;
3063 unsigned int __w_stopval:8;
3064 unsigned int __w_stopsig:8;
3075 #define w_termsig __wait_terminated.__w_termsig
3076 #define w_coredump __wait_terminated.__w_coredump
3077 #define w_retcode __wait_terminated.__w_retcode
3078 #define w_stopsig __wait_stopped.__w_stopsig
3079 #define w_stopval __wait_stopped.__w_stopval
3080 # 44 "/usr/include/stdlib.h" 2 3 4
3081 # 55 "/usr/include/stdlib.h" 3 4
3082 #define __WAIT_INT(status) (*(int *) &(status))
3083 # 64 "/usr/include/stdlib.h" 3 4
3084 #define __WAIT_STATUS void *
3085 #define __WAIT_STATUS_DEFN void *
3086 # 85 "/usr/include/stdlib.h" 3 4
3087 #define WEXITSTATUS(status) __WEXITSTATUS (__WAIT_INT (status))
3088 #define WTERMSIG(status) __WTERMSIG (__WAIT_INT (status))
3089 #define WSTOPSIG(status) __WSTOPSIG (__WAIT_INT (status))
3090 #define WIFEXITED(status) __WIFEXITED (__WAIT_INT (status))
3091 #define WIFSIGNALED(status) __WIFSIGNALED (__WAIT_INT (status))
3092 #define WIFSTOPPED(status) __WIFSTOPPED (__WAIT_INT (status))
3094 #define WIFCONTINUED(status) __WIFCONTINUED (__WAIT_INT (status))
3113 #define __ldiv_t_defined 1
3120 __extension__ typedef struct
3125 #define __lldiv_t_defined 1
3131 #define RAND_MAX 2147483647
3136 #define EXIT_FAILURE 1
3137 #define EXIT_SUCCESS 0
3141 #define MB_CUR_MAX (__ctype_get_mb_cur_max ())
3142 extern size_t __ctype_get_mb_cur_max (void) throw () __attribute__ ((__warn_unused_result__));
3147 extern double atof (__const char *__nptr)
3148 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3150 extern int atoi (__const char *__nptr)
3151 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3153 extern long int atol (__const char *__nptr)
3154 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3160 __extension__ extern long long int atoll (__const char *__nptr)
3161 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3167 extern double strtod (__const char *__restrict __nptr,
3168 char **__restrict __endptr)
3169 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3175 extern float strtof (__const char *__restrict __nptr,
3176 char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3178 extern long double strtold (__const char *__restrict __nptr,
3179 char **__restrict __endptr)
3180 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3186 extern long int strtol (__const char *__restrict __nptr,
3187 char **__restrict __endptr, int __base)
3188 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3190 extern unsigned long int strtoul (__const char *__restrict __nptr,
3191 char **__restrict __endptr, int __base)
3192 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3198 extern long long int strtoq (__const char *__restrict __nptr,
3199 char **__restrict __endptr, int __base)
3200 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3203 extern unsigned long long int strtouq (__const char *__restrict __nptr,
3204 char **__restrict __endptr, int __base)
3205 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3212 extern long long int strtoll (__const char *__restrict __nptr,
3213 char **__restrict __endptr, int __base)
3214 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3217 extern unsigned long long int strtoull (__const char *__restrict __nptr,
3218 char **__restrict __endptr, int __base)
3219 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3221 # 236 "/usr/include/stdlib.h" 3 4
3222 # 1 "/usr/include/xlocale.h" 1 3 4
3223 # 22 "/usr/include/xlocale.h" 3 4
3224 #define _XLOCALE_H 1
3230 typedef struct __locale_struct
3233 struct __locale_data *__locales[13];
3236 const unsigned short int *__ctype_b;
3237 const int *__ctype_tolower;
3238 const int *__ctype_toupper;
3241 const char *__names[13];
3245 typedef __locale_t locale_t;
3246 # 237 "/usr/include/stdlib.h" 2 3 4
3250 extern long int strtol_l (__const char *__restrict __nptr,
3251 char **__restrict __endptr, int __base,
3252 __locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4))) __attribute__ ((__warn_unused_result__));
3254 extern unsigned long int strtoul_l (__const char *__restrict __nptr,
3255 char **__restrict __endptr,
3256 int __base, __locale_t __loc)
3257 throw () __attribute__ ((__nonnull__ (1, 4))) __attribute__ ((__warn_unused_result__));
3260 extern long long int strtoll_l (__const char *__restrict __nptr,
3261 char **__restrict __endptr, int __base,
3263 throw () __attribute__ ((__nonnull__ (1, 4))) __attribute__ ((__warn_unused_result__));
3266 extern unsigned long long int strtoull_l (__const char *__restrict __nptr,
3267 char **__restrict __endptr,
3268 int __base, __locale_t __loc)
3269 throw () __attribute__ ((__nonnull__ (1, 4))) __attribute__ ((__warn_unused_result__));
3271 extern double strtod_l (__const char *__restrict __nptr,
3272 char **__restrict __endptr, __locale_t __loc)
3273 throw () __attribute__ ((__nonnull__ (1, 3))) __attribute__ ((__warn_unused_result__));
3275 extern float strtof_l (__const char *__restrict __nptr,
3276 char **__restrict __endptr, __locale_t __loc)
3277 throw () __attribute__ ((__nonnull__ (1, 3))) __attribute__ ((__warn_unused_result__));
3279 extern long double strtold_l (__const char *__restrict __nptr,
3280 char **__restrict __endptr,
3282 throw () __attribute__ ((__nonnull__ (1, 3))) __attribute__ ((__warn_unused_result__));
3288 extern __inline __attribute__ ((__gnu_inline__)) double
3289 atof (__const char *__nptr) throw ()
3291 return strtod (__nptr, (char **) __null);
3293 extern __inline __attribute__ ((__gnu_inline__)) int
3294 atoi (__const char *__nptr) throw ()
3296 return (int) strtol (__nptr, (char **) __null, 10);
3298 extern __inline __attribute__ ((__gnu_inline__)) long int
3299 atol (__const char *__nptr) throw ()
3301 return strtol (__nptr, (char **) __null, 10);
3307 __extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int
3308 atoll (__const char *__nptr) throw ()
3310 return strtoll (__nptr, (char **) __null, 10);
3313 # 311 "/usr/include/stdlib.h" 3 4
3314 extern char *l64a (long int __n) throw () __attribute__ ((__warn_unused_result__));
3317 extern long int a64l (__const char *__s)
3318 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
3323 # 1 "/usr/include/sys/types.h" 1 3 4
3324 # 24 "/usr/include/sys/types.h" 3 4
3325 #define _SYS_TYPES_H 1
3335 typedef __u_char u_char;
3336 typedef __u_short u_short;
3337 typedef __u_int u_int;
3338 typedef __u_long u_long;
3339 typedef __quad_t quad_t;
3340 typedef __u_quad_t u_quad_t;
3341 typedef __fsid_t fsid_t;
3342 #define __u_char_defined
3346 typedef __loff_t loff_t;
3350 typedef __ino_t ino_t;
3354 #define __ino_t_defined
3357 typedef __ino64_t ino64_t;
3358 #define __ino64_t_defined
3362 typedef __dev_t dev_t;
3363 #define __dev_t_defined
3367 typedef __gid_t gid_t;
3368 #define __gid_t_defined
3372 typedef __mode_t mode_t;
3373 #define __mode_t_defined
3377 typedef __nlink_t nlink_t;
3378 #define __nlink_t_defined
3382 typedef __uid_t uid_t;
3383 #define __uid_t_defined
3384 # 99 "/usr/include/sys/types.h" 3 4
3385 typedef __pid_t pid_t;
3386 #define __pid_t_defined
3391 typedef __id_t id_t;
3392 #define __id_t_defined
3393 # 116 "/usr/include/sys/types.h" 3 4
3394 typedef __daddr_t daddr_t;
3395 typedef __caddr_t caddr_t;
3396 #define __daddr_t_defined
3401 typedef __key_t key_t;
3402 #define __key_t_defined
3406 #define __need_clock_t
3408 #define __need_time_t
3409 #define __need_timer_t
3410 #define __need_clockid_t
3411 # 1 "/usr/include/time.h" 1 3 4
3412 # 54 "/usr/include/time.h" 3 4
3413 #define __clock_t_defined 1
3419 typedef __clock_t clock_t;
3426 #undef __need_clock_t
3429 #define __time_t_defined 1
3435 typedef __time_t time_t;
3442 #undef __need_time_t
3446 #define __clockid_t_defined 1
3451 typedef __clockid_t clockid_t;
3454 #undef __clockid_time_t
3458 #define __timer_t_defined 1
3463 typedef __timer_t timer_t;
3466 #undef __need_timer_t
3467 # 127 "/usr/include/time.h" 3 4
3468 #undef __need_timespec
3469 # 134 "/usr/include/sys/types.h" 2 3 4
3473 typedef __useconds_t useconds_t;
3474 #define __useconds_t_defined
3477 typedef __suseconds_t suseconds_t;
3478 #define __suseconds_t_defined
3482 #define __need_size_t
3483 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
3484 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
3485 #undef __need_ptrdiff_t
3486 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
3487 #undef __need_size_t
3488 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
3489 #undef __need_wchar_t
3490 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
3494 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
3500 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
3501 # 148 "/usr/include/sys/types.h" 2 3 4
3505 typedef unsigned long int ulong;
3506 typedef unsigned short int ushort;
3507 typedef unsigned int uint;
3508 # 188 "/usr/include/sys/types.h" 3 4
3509 #define __intN_t(N,MODE) typedef int int ##N ##_t __attribute__ ((__mode__ (MODE)))
3511 #define __u_intN_t(N,MODE) typedef unsigned int u_int ##N ##_t __attribute__ ((__mode__ (MODE)))
3512 # 201 "/usr/include/sys/types.h" 3 4
3513 typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
3514 typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
3515 typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
3516 typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
3518 typedef int register_t __attribute__ ((__mode__ (__word__)));
3524 #define __BIT_TYPES_DEFINED__ 1
3532 # 1 "/usr/include/sys/select.h" 1 3 4
3533 # 23 "/usr/include/sys/select.h" 3 4
3534 #define _SYS_SELECT_H 1
3542 # 1 "/usr/include/bits/select.h" 1 3 4
3543 # 26 "/usr/include/bits/select.h" 3 4
3544 #define __FD_ZERO(s) do { unsigned int __i; fd_set *__arr = (s); for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i) __FDS_BITS (__arr)[__i] = 0; } while (0)
3551 #define __FD_SET(d,s) ((void) (__FDS_BITS (s)[__FD_ELT(d)] |= __FD_MASK(d)))
3553 #define __FD_CLR(d,s) ((void) (__FDS_BITS (s)[__FD_ELT(d)] &= ~__FD_MASK(d)))
3555 #define __FD_ISSET(d,s) ((__FDS_BITS (s)[__FD_ELT (d)] & __FD_MASK (d)) != 0)
3556 # 32 "/usr/include/sys/select.h" 2 3 4
3559 # 1 "/usr/include/bits/sigset.h" 1 3 4
3560 # 22 "/usr/include/bits/sigset.h" 3 4
3561 #define _SIGSET_H_types 1
3563 typedef int __sig_atomic_t;
3567 #define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
3570 unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
3572 # 35 "/usr/include/sys/select.h" 2 3 4
3575 #define __sigset_t_defined
3576 typedef __sigset_t sigset_t;
3580 #define __need_time_t
3581 #define __need_timespec
3582 # 1 "/usr/include/time.h" 1 3 4
3583 # 67 "/usr/include/time.h" 3 4
3584 #undef __need_clock_t
3585 # 83 "/usr/include/time.h" 3 4
3586 #undef __need_time_t
3587 # 95 "/usr/include/time.h" 3 4
3588 #undef __clockid_time_t
3589 # 107 "/usr/include/time.h" 3 4
3590 #undef __need_timer_t
3597 #define __timespec_defined 1
3610 #undef __need_timespec
3611 # 45 "/usr/include/sys/select.h" 2 3 4
3612 #define __need_timeval
3613 # 1 "/usr/include/bits/time.h" 1 3 4
3614 # 26 "/usr/include/bits/time.h" 3 4
3615 #define _STRUCT_TIMEVAL 1
3623 __suseconds_t tv_usec;
3625 # 99 "/usr/include/bits/time.h" 3 4
3626 #undef __need_timeval
3627 # 47 "/usr/include/sys/select.h" 2 3 4
3628 # 55 "/usr/include/sys/select.h" 3 4
3629 typedef long int __fd_mask;
3634 #define __NFDBITS (8 * (int) sizeof (__fd_mask))
3635 #define __FD_ELT(d) ((d) / __NFDBITS)
3636 #define __FD_MASK(d) ((__fd_mask) 1 << ((d) % __NFDBITS))
3644 __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
3645 #define __FDS_BITS(set) ((set)->fds_bits)
3653 #define FD_SETSIZE __FD_SETSIZE
3657 typedef __fd_mask fd_mask;
3660 #define NFDBITS __NFDBITS
3665 #define FD_SET(fd,fdsetp) __FD_SET (fd, fdsetp)
3666 #define FD_CLR(fd,fdsetp) __FD_CLR (fd, fdsetp)
3667 #define FD_ISSET(fd,fdsetp) __FD_ISSET (fd, fdsetp)
3668 #define FD_ZERO(fdsetp) __FD_ZERO (fdsetp)
3672 # 107 "/usr/include/sys/select.h" 3 4
3673 extern int select (int __nfds, fd_set *__restrict __readfds,
3674 fd_set *__restrict __writefds,
3675 fd_set *__restrict __exceptfds,
3676 struct timeval *__restrict __timeout);
3677 # 119 "/usr/include/sys/select.h" 3 4
3678 extern int pselect (int __nfds, fd_set *__restrict __readfds,
3679 fd_set *__restrict __writefds,
3680 fd_set *__restrict __exceptfds,
3681 const struct timespec *__restrict __timeout,
3682 const __sigset_t *__restrict __sigmask);
3688 # 1 "/usr/include/bits/select2.h" 1 3 4
3689 # 25 "/usr/include/bits/select2.h" 3 4
3690 extern long int __fdelt_chk (long int __d);
3691 extern long int __fdelt_warn (long int __d)
3692 __attribute__((__warning__ ("bit outside of fd_set selected")));
3694 #define __FD_ELT(d) __extension__ ({ long int __d = (d); (__builtin_constant_p (__d) ? (0 <= __d && __d < __FD_SETSIZE ? (__d / __NFDBITS) : __fdelt_warn (__d)) : __fdelt_chk (__d)); })
3695 # 130 "/usr/include/sys/select.h" 2 3 4
3699 # 221 "/usr/include/sys/types.h" 2 3 4
3702 # 1 "/usr/include/sys/sysmacros.h" 1 3 4
3703 # 22 "/usr/include/sys/sysmacros.h" 3 4
3704 #define _SYS_SYSMACROS_H 1
3715 extern unsigned int gnu_dev_major (unsigned long long int __dev)
3716 throw () __attribute__ ((__const__));
3718 extern unsigned int gnu_dev_minor (unsigned long long int __dev)
3719 throw () __attribute__ ((__const__));
3721 extern unsigned long long int gnu_dev_makedev (unsigned int __major,
3722 unsigned int __minor)
3723 throw () __attribute__ ((__const__));
3726 __extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned int
3727 gnu_dev_major (unsigned long long int __dev) throw ()
3729 return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
3732 __extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned int
3733 gnu_dev_minor (unsigned long long int __dev) throw ()
3735 return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
3738 __extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned long long int
3739 gnu_dev_makedev (unsigned int __major, unsigned int __minor) throw ()
3741 return ((__minor & 0xff) | ((__major & 0xfff) << 8)
3742 | (((unsigned long long int) (__minor & ~0xff)) << 12)
3743 | (((unsigned long long int) (__major & ~0xfff)) << 32));
3749 #define major(dev) gnu_dev_major (dev)
3750 #define minor(dev) gnu_dev_minor (dev)
3751 #define makedev(maj,min) gnu_dev_makedev (maj, min)
3752 # 224 "/usr/include/sys/types.h" 2 3 4
3758 typedef __blksize_t blksize_t;
3759 #define __blksize_t_defined
3765 typedef __blkcnt_t blkcnt_t;
3766 #define __blkcnt_t_defined
3769 typedef __fsblkcnt_t fsblkcnt_t;
3770 #define __fsblkcnt_t_defined
3773 typedef __fsfilcnt_t fsfilcnt_t;
3774 #define __fsfilcnt_t_defined
3775 # 263 "/usr/include/sys/types.h" 3 4
3776 typedef __blkcnt64_t blkcnt64_t;
3777 typedef __fsblkcnt64_t fsblkcnt64_t;
3778 typedef __fsfilcnt64_t fsfilcnt64_t;
3784 # 1 "/usr/include/bits/pthreadtypes.h" 1 3 4
3785 # 20 "/usr/include/bits/pthreadtypes.h" 3 4
3786 #define _BITS_PTHREADTYPES_H 1
3790 #define __SIZEOF_PTHREAD_ATTR_T 36
3791 #define __SIZEOF_PTHREAD_MUTEX_T 24
3792 #define __SIZEOF_PTHREAD_MUTEXATTR_T 4
3793 #define __SIZEOF_PTHREAD_COND_T 48
3794 #define __SIZEOF_PTHREAD_COND_COMPAT_T 12
3795 #define __SIZEOF_PTHREAD_CONDATTR_T 4
3796 #define __SIZEOF_PTHREAD_RWLOCK_T 32
3797 #define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
3798 #define __SIZEOF_PTHREAD_BARRIER_T 20
3799 #define __SIZEOF_PTHREAD_BARRIERATTR_T 4
3804 typedef unsigned long int pthread_t;
3814 typedef struct __pthread_internal_slist
3816 struct __pthread_internal_slist *__next;
3817 } __pthread_slist_t;
3824 struct __pthread_mutex_s
3827 unsigned int __count;
3832 unsigned int __nusers;
3836 __pthread_slist_t __list;
3847 } pthread_mutexattr_t;
3857 unsigned int __futex;
3858 __extension__ unsigned long long int __total_seq;
3859 __extension__ unsigned long long int __wakeup_seq;
3860 __extension__ unsigned long long int __woken_seq;
3862 unsigned int __nwaiters;
3863 unsigned int __broadcast_seq;
3866 __extension__ long long int __align;
3873 } pthread_condattr_t;
3877 typedef unsigned int pthread_key_t;
3881 typedef int pthread_once_t;
3892 unsigned int __nr_readers;
3893 unsigned int __readers_wakeup;
3894 unsigned int __writer_wakeup;
3895 unsigned int __nr_readers_queued;
3896 unsigned int __nr_writers_queued;
3897 # 141 "/usr/include/bits/pthreadtypes.h" 3 4
3898 unsigned char __flags;
3899 unsigned char __shared;
3900 unsigned char __pad1;
3901 unsigned char __pad2;
3913 } pthread_rwlockattr_t;
3919 typedef volatile int pthread_spinlock_t;
3928 } pthread_barrier_t;
3934 } pthread_barrierattr_t;
3935 # 272 "/usr/include/sys/types.h" 2 3 4
3939 # 321 "/usr/include/stdlib.h" 2 3 4
3946 extern long int random (void) throw ();
3949 extern void srandom (unsigned int __seed) throw ();
3955 extern char *initstate (unsigned int __seed, char *__statebuf,
3956 size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
3960 extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
3979 extern int random_r (struct random_data *__restrict __buf,
3980 int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
3982 extern int srandom_r (unsigned int __seed, struct random_data *__buf)
3983 throw () __attribute__ ((__nonnull__ (2)));
3985 extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
3987 struct random_data *__restrict __buf)
3988 throw () __attribute__ ((__nonnull__ (2, 4)));
3990 extern int setstate_r (char *__restrict __statebuf,
3991 struct random_data *__restrict __buf)
3992 throw () __attribute__ ((__nonnull__ (1, 2)));
3999 extern int rand (void) throw ();
4001 extern void srand (unsigned int __seed) throw ();
4006 extern int rand_r (unsigned int *__seed) throw ();
4014 extern double drand48 (void) throw ();
4015 extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
4018 extern long int lrand48 (void) throw ();
4019 extern long int nrand48 (unsigned short int __xsubi[3])
4020 throw () __attribute__ ((__nonnull__ (1)));
4023 extern long int mrand48 (void) throw ();
4024 extern long int jrand48 (unsigned short int __xsubi[3])
4025 throw () __attribute__ ((__nonnull__ (1)));
4028 extern void srand48 (long int __seedval) throw ();
4029 extern unsigned short int *seed48 (unsigned short int __seed16v[3])
4030 throw () __attribute__ ((__nonnull__ (1)));
4031 extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
4039 unsigned short int __x[3];
4040 unsigned short int __old_x[3];
4041 unsigned short int __c;
4042 unsigned short int __init;
4043 unsigned long long int __a;
4047 extern int drand48_r (struct drand48_data *__restrict __buffer,
4048 double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
4049 extern int erand48_r (unsigned short int __xsubi[3],
4050 struct drand48_data *__restrict __buffer,
4051 double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
4054 extern int lrand48_r (struct drand48_data *__restrict __buffer,
4055 long int *__restrict __result)
4056 throw () __attribute__ ((__nonnull__ (1, 2)));
4057 extern int nrand48_r (unsigned short int __xsubi[3],
4058 struct drand48_data *__restrict __buffer,
4059 long int *__restrict __result)
4060 throw () __attribute__ ((__nonnull__ (1, 2)));
4063 extern int mrand48_r (struct drand48_data *__restrict __buffer,
4064 long int *__restrict __result)
4065 throw () __attribute__ ((__nonnull__ (1, 2)));
4066 extern int jrand48_r (unsigned short int __xsubi[3],
4067 struct drand48_data *__restrict __buffer,
4068 long int *__restrict __result)
4069 throw () __attribute__ ((__nonnull__ (1, 2)));
4072 extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
4073 throw () __attribute__ ((__nonnull__ (2)));
4075 extern int seed48_r (unsigned short int __seed16v[3],
4076 struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
4078 extern int lcong48_r (unsigned short int __param[7],
4079 struct drand48_data *__buffer)
4080 throw () __attribute__ ((__nonnull__ (1, 2)));
4087 #define __malloc_and_calloc_defined
4090 extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
4092 extern void *calloc (size_t __nmemb, size_t __size)
4093 throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
4104 extern void *realloc (void *__ptr, size_t __size)
4105 throw () __attribute__ ((__warn_unused_result__));
4107 extern void free (void *__ptr) throw ();
4112 extern void cfree (void *__ptr) throw ();
4116 # 1 "/usr/include/alloca.h" 1 3 4
4117 # 20 "/usr/include/alloca.h" 3 4
4122 #define __need_size_t
4123 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
4124 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
4125 #undef __need_ptrdiff_t
4126 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
4127 #undef __need_size_t
4128 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
4129 #undef __need_wchar_t
4130 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
4134 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
4140 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
4141 # 26 "/usr/include/alloca.h" 2 3 4
4149 extern void *alloca (size_t __size) throw ();
4152 #define alloca(size) __builtin_alloca (size)
4156 # 498 "/usr/include/stdlib.h" 2 3 4
4162 extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
4167 extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
4168 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4173 extern void abort (void) throw () __attribute__ ((__noreturn__));
4177 extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
4184 extern "C++" int at_quick_exit (void (*__func) (void))
4185 throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
4195 extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
4196 throw () __attribute__ ((__nonnull__ (1)));
4203 extern void exit (int __status) throw () __attribute__ ((__noreturn__));
4211 extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__));
4219 extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
4226 extern char *getenv (__const char *__name) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4231 extern char *__secure_getenv (__const char *__name)
4232 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4238 extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
4244 extern int setenv (__const char *__name, __const char *__value, int __replace)
4245 throw () __attribute__ ((__nonnull__ (2)));
4248 extern int unsetenv (__const char *__name) throw () __attribute__ ((__nonnull__ (1)));
4255 extern int clearenv (void) throw ();
4256 # 606 "/usr/include/stdlib.h" 3 4
4257 extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4258 # 620 "/usr/include/stdlib.h" 3 4
4259 extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4260 # 630 "/usr/include/stdlib.h" 3 4
4261 extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4262 # 642 "/usr/include/stdlib.h" 3 4
4263 extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4264 # 652 "/usr/include/stdlib.h" 3 4
4265 extern int mkstemps64 (char *__template, int __suffixlen)
4266 __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4267 # 663 "/usr/include/stdlib.h" 3 4
4268 extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4269 # 674 "/usr/include/stdlib.h" 3 4
4270 extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4271 # 684 "/usr/include/stdlib.h" 3 4
4272 extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4273 # 694 "/usr/include/stdlib.h" 3 4
4274 extern int mkostemps (char *__template, int __suffixlen, int __flags)
4275 __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4276 # 706 "/usr/include/stdlib.h" 3 4
4277 extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
4278 __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4288 extern int system (__const char *__command) __attribute__ ((__warn_unused_result__));
4295 extern char *canonicalize_file_name (__const char *__name)
4296 throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4297 # 734 "/usr/include/stdlib.h" 3 4
4298 extern char *realpath (__const char *__restrict __name,
4299 char *__restrict __resolved) throw () __attribute__ ((__warn_unused_result__));
4305 #define __COMPAR_FN_T
4306 typedef int (*__compar_fn_t) (__const void *, __const void *);
4309 typedef __compar_fn_t comparison_fn_t;
4313 typedef int (*__compar_d_fn_t) (__const void *, __const void *, void *);
4319 extern void *bsearch (__const void *__key, __const void *__base,
4320 size_t __nmemb, size_t __size, __compar_fn_t __compar)
4321 __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__));
4325 extern void qsort (void *__base, size_t __nmemb, size_t __size,
4326 __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
4328 extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
4329 __compar_d_fn_t __compar, void *__arg)
4330 __attribute__ ((__nonnull__ (1, 4)));
4335 extern int abs (int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
4336 extern long int labs (long int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
4340 __extension__ extern long long int llabs (long long int __x)
4341 throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
4349 extern div_t div (int __numer, int __denom)
4350 throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
4351 extern ldiv_t ldiv (long int __numer, long int __denom)
4352 throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
4357 __extension__ extern lldiv_t lldiv (long long int __numer,
4358 long long int __denom)
4359 throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
4361 # 808 "/usr/include/stdlib.h" 3 4
4362 extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
4363 int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
4368 extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
4369 int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
4374 extern char *gcvt (double __value, int __ndigit, char *__buf)
4375 throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
4380 extern char *qecvt (long double __value, int __ndigit,
4381 int *__restrict __decpt, int *__restrict __sign)
4382 throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
4383 extern char *qfcvt (long double __value, int __ndigit,
4384 int *__restrict __decpt, int *__restrict __sign)
4385 throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
4386 extern char *qgcvt (long double __value, int __ndigit, char *__buf)
4387 throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
4392 extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
4393 int *__restrict __sign, char *__restrict __buf,
4394 size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
4395 extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
4396 int *__restrict __sign, char *__restrict __buf,
4397 size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
4399 extern int qecvt_r (long double __value, int __ndigit,
4400 int *__restrict __decpt, int *__restrict __sign,
4401 char *__restrict __buf, size_t __len)
4402 throw () __attribute__ ((__nonnull__ (3, 4, 5)));
4403 extern int qfcvt_r (long double __value, int __ndigit,
4404 int *__restrict __decpt, int *__restrict __sign,
4405 char *__restrict __buf, size_t __len)
4406 throw () __attribute__ ((__nonnull__ (3, 4, 5)));
4414 extern int mblen (__const char *__s, size_t __n) throw () __attribute__ ((__warn_unused_result__));
4417 extern int mbtowc (wchar_t *__restrict __pwc,
4418 __const char *__restrict __s, size_t __n) throw () __attribute__ ((__warn_unused_result__));
4421 extern int wctomb (char *__s, wchar_t __wchar) throw () __attribute__ ((__warn_unused_result__));
4425 extern size_t mbstowcs (wchar_t *__restrict __pwcs,
4426 __const char *__restrict __s, size_t __n) throw ();
4428 extern size_t wcstombs (char *__restrict __s,
4429 __const wchar_t *__restrict __pwcs, size_t __n)
4439 extern int rpmatch (__const char *__response) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
4440 # 896 "/usr/include/stdlib.h" 3 4
4441 extern int getsubopt (char **__restrict __optionp,
4442 char *__const *__restrict __tokens,
4443 char **__restrict __valuep)
4444 throw () __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__));
4450 extern void setkey (__const char *__key) throw () __attribute__ ((__nonnull__ (1)));
4458 extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__));
4466 extern int grantpt (int __fd) throw ();
4470 extern int unlockpt (int __fd) throw ();
4475 extern char *ptsname (int __fd) throw () __attribute__ ((__warn_unused_result__));
4482 extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
4483 throw () __attribute__ ((__nonnull__ (2)));
4486 extern int getpt (void);
4493 extern int getloadavg (double __loadavg[], int __nelem)
4494 throw () __attribute__ ((__nonnull__ (1)));
4500 # 1 "/usr/include/bits/stdlib.h" 1 3 4
4501 # 24 "/usr/include/bits/stdlib.h" 3 4
4502 extern char *__realpath_chk (__const char *__restrict __name,
4503 char *__restrict __resolved,
4504 size_t __resolvedlen) throw () __attribute__ ((__warn_unused_result__));
4505 extern char *__realpath_alias (__const char *__restrict __name, char *__restrict __resolved) throw () __asm__ ("" "realpath")
4507 __attribute__ ((__warn_unused_result__));
4508 extern char *__realpath_chk_warn (__const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) throw () __asm__ ("" "__realpath_chk")
4511 __attribute__ ((__warn_unused_result__))
4512 __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer")))
4515 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __attribute__ ((__warn_unused_result__)) char *
4516 realpath (__const char *__restrict __name, char *__restrict __resolved) throw ()
4518 if (__builtin_object_size (__resolved, 2 > 1) != (size_t) -1)
4524 return __realpath_chk (__name, __resolved, __builtin_object_size (__resolved, 2 > 1));
4527 return __realpath_alias (__name, __resolved);
4531 extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
4532 size_t __nreal) throw () __attribute__ ((__nonnull__ (2)));
4533 extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) throw () __asm__ ("" "ptsname_r")
4535 __attribute__ ((__nonnull__ (2)));
4536 extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) throw () __asm__ ("" "__ptsname_r_chk")
4539 __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf")))
4542 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) int
4543 ptsname_r (int __fd, char *__buf, size_t __buflen) throw ()
4545 if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
4547 if (!__builtin_constant_p (__buflen))
4548 return __ptsname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
4549 if (__buflen > __builtin_object_size (__buf, 2 > 1))
4550 return __ptsname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
4552 return __ptsname_r_alias (__fd, __buf, __buflen);
4556 extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
4557 throw () __attribute__ ((__warn_unused_result__));
4558 extern int __wctomb_alias (char *__s, wchar_t __wchar) throw () __asm__ ("" "wctomb")
4559 __attribute__ ((__warn_unused_result__));
4561 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __attribute__ ((__warn_unused_result__)) int
4562 wctomb (char *__s, wchar_t __wchar) throw ()
4567 #define __STDLIB_MB_LEN_MAX 16
4571 if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 && 16 > __builtin_object_size (__s, 2 > 1))
4572 return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1));
4573 return __wctomb_alias (__s, __wchar);
4577 extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
4578 __const char *__restrict __src,
4579 size_t __len, size_t __dstlen) throw ();
4580 extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, __const char *__restrict __src, size_t __len) throw () __asm__ ("" "mbstowcs")
4584 extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, __const char *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__mbstowcs_chk")
4588 __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
4591 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) size_t
4592 mbstowcs (wchar_t *__restrict __dst, __const char *__restrict __src, size_t __len) throw ()
4595 if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
4597 if (!__builtin_constant_p (__len))
4598 return __mbstowcs_chk (__dst, __src, __len,
4599 __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
4601 if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
4602 return __mbstowcs_chk_warn (__dst, __src, __len,
4603 __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
4605 return __mbstowcs_alias (__dst, __src, __len);
4609 extern size_t __wcstombs_chk (char *__restrict __dst,
4610 __const wchar_t *__restrict __src,
4611 size_t __len, size_t __dstlen) throw ();
4612 extern size_t __wcstombs_alias (char *__restrict __dst, __const wchar_t *__restrict __src, size_t __len) throw () __asm__ ("" "wcstombs")
4616 extern size_t __wcstombs_chk_warn (char *__restrict __dst, __const wchar_t *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__wcstombs_chk")
4620 __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len")));
4622 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) size_t
4623 wcstombs (char *__restrict __dst, __const wchar_t *__restrict __src, size_t __len) throw ()
4626 if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
4628 if (!__builtin_constant_p (__len))
4629 return __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
4630 if (__len > __builtin_object_size (__dst, 2 > 1))
4631 return __wcstombs_chk_warn (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
4633 return __wcstombs_alias (__dst, __src, __len);
4635 # 956 "/usr/include/stdlib.h" 2 3 4
4642 #undef __need_malloc_and_calloc
4645 # 18 "./../../dist/include/mozilla/Assertions.h" 2
4647 # 1 "/usr/include/signal.h" 1 3 4
4648 # 26 "/usr/include/signal.h" 3 4
4656 # 1 "/usr/include/bits/sigset.h" 1 3 4
4657 # 44 "/usr/include/bits/sigset.h" 3 4
4658 #define _SIGSET_H_fns 1
4661 #define _EXTERN_INLINE __extern_inline
4665 #define __sigmask(sig) (((unsigned long int) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int))))
4669 #define __sigword(sig) (((sig) - 1) / (8 * sizeof (unsigned long int)))
4672 #define __sigemptyset(set) (__extension__ ({ int __cnt = _SIGSET_NWORDS; sigset_t *__set = (set); while (--__cnt >= 0) __set->__val[__cnt] = 0; 0; }))
4677 #define __sigfillset(set) (__extension__ ({ int __cnt = _SIGSET_NWORDS; sigset_t *__set = (set); while (--__cnt >= 0) __set->__val[__cnt] = ~0UL; 0; }))
4678 # 73 "/usr/include/bits/sigset.h" 3 4
4679 #define __sigisemptyset(set) (__extension__ ({ int __cnt = _SIGSET_NWORDS; const sigset_t *__set = (set); int __ret = __set->__val[--__cnt]; while (!__ret && --__cnt >= 0) __ret = __set->__val[__cnt]; __ret == 0; }))
4686 #define __sigandset(dest,left,right) (__extension__ ({ int __cnt = _SIGSET_NWORDS; sigset_t *__dest = (dest); const sigset_t *__left = (left); const sigset_t *__right = (right); while (--__cnt >= 0) __dest->__val[__cnt] = (__left->__val[__cnt] & __right->__val[__cnt]); 0; }))
4687 # 89 "/usr/include/bits/sigset.h" 3 4
4688 #define __sigorset(dest,left,right) (__extension__ ({ int __cnt = _SIGSET_NWORDS; sigset_t *__dest = (dest); const sigset_t *__left = (left); const sigset_t *__right = (right); while (--__cnt >= 0) __dest->__val[__cnt] = (__left->__val[__cnt] | __right->__val[__cnt]); 0; }))
4689 # 104 "/usr/include/bits/sigset.h" 3 4
4690 extern int __sigismember (__const __sigset_t *, int);
4691 extern int __sigaddset (__sigset_t *, int);
4692 extern int __sigdelset (__sigset_t *, int);
4695 #define __SIGSETFN(NAME,BODY,CONST) _EXTERN_INLINE int NAME (CONST __sigset_t *__set, int __sig) { unsigned long int __mask = __sigmask (__sig); unsigned long int __word = __sigword (__sig); return BODY; }
4696 # 118 "/usr/include/bits/sigset.h" 3 4
4697 extern __inline __attribute__ ((__gnu_inline__)) int __sigismember (__const __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return (__set->__val[__word] & __mask) ? 1 : 0; }
4698 extern __inline __attribute__ ((__gnu_inline__)) int __sigaddset ( __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return ((__set->__val[__word] |= __mask), 0); }
4699 extern __inline __attribute__ ((__gnu_inline__)) int __sigdelset ( __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return ((__set->__val[__word] &= ~__mask), 0); }
4702 # 34 "/usr/include/signal.h" 2 3 4
4708 #define __sig_atomic_t_defined
4710 typedef __sig_atomic_t sig_atomic_t;
4713 #undef __need_sig_atomic_t
4721 #undef __need_sigset_t
4727 # 1 "/usr/include/bits/signum.h" 1 3 4
4728 # 23 "/usr/include/bits/signum.h" 3 4
4729 #define SIG_ERR ((__sighandler_t) -1)
4730 #define SIG_DFL ((__sighandler_t) 0)
4731 #define SIG_IGN ((__sighandler_t) 1)
4734 #define SIG_HOLD ((__sighandler_t) 2)
4755 #define SIGSTKFLT 16
4756 #define SIGCLD SIGCHLD
4766 #define SIGVTALRM 26
4769 #define SIGPOLL SIGIO
4773 #define SIGUNUSED 31
4778 #define SIGRTMIN (__libc_current_sigrtmin ())
4779 #define SIGRTMAX (__libc_current_sigrtmax ())
4783 #define __SIGRTMIN 32
4784 #define __SIGRTMAX (_NSIG - 1)
4785 # 59 "/usr/include/signal.h" 2 3 4
4786 # 75 "/usr/include/signal.h" 3 4
4787 #define __need_timespec
4788 # 1 "/usr/include/time.h" 1 3 4
4789 # 67 "/usr/include/time.h" 3 4
4790 #undef __need_clock_t
4791 # 83 "/usr/include/time.h" 3 4
4792 #undef __need_time_t
4793 # 95 "/usr/include/time.h" 3 4
4794 #undef __clockid_time_t
4795 # 107 "/usr/include/time.h" 3 4
4796 #undef __need_timer_t
4797 # 127 "/usr/include/time.h" 3 4
4798 #undef __need_timespec
4799 # 77 "/usr/include/signal.h" 2 3 4
4802 # 1 "/usr/include/bits/siginfo.h" 1 3 4
4803 # 25 "/usr/include/bits/siginfo.h" 3 4
4804 # 1 "/usr/include/bits/wordsize.h" 1 3 4
4805 # 19 "/usr/include/bits/wordsize.h" 3 4
4806 #define __WORDSIZE 32
4807 # 26 "/usr/include/bits/siginfo.h" 2 3 4
4812 #define __have_sigval_t 1
4815 typedef union sigval
4824 #define __have_siginfo_t 1
4826 #define __SI_MAX_SIZE 128
4830 #define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3)
4833 typedef struct siginfo
4842 int _pad[((128 / sizeof (int)) - 3)];
4894 #define si_pid _sifields._kill.si_pid
4895 #define si_uid _sifields._kill.si_uid
4896 #define si_timerid _sifields._timer.si_tid
4897 #define si_overrun _sifields._timer.si_overrun
4898 #define si_status _sifields._sigchld.si_status
4899 #define si_utime _sifields._sigchld.si_utime
4900 #define si_stime _sifields._sigchld.si_stime
4901 #define si_value _sifields._rt.si_sigval
4902 #define si_int _sifields._rt.si_sigval.sival_int
4903 #define si_ptr _sifields._rt.si_sigval.sival_ptr
4904 #define si_addr _sifields._sigfault.si_addr
4905 #define si_band _sifields._sigpoll.si_band
4906 #define si_fd _sifields._sigpoll.si_fd
4914 #define SI_ASYNCNL SI_ASYNCNL
4916 #define SI_TKILL SI_TKILL
4918 #define SI_SIGIO SI_SIGIO
4920 #define SI_ASYNCIO SI_ASYNCIO
4922 #define SI_MESGQ SI_MESGQ
4924 #define SI_TIMER SI_TIMER
4926 #define SI_QUEUE SI_QUEUE
4928 #define SI_USER SI_USER
4930 #define SI_KERNEL SI_KERNEL
4938 #define ILL_ILLOPC ILL_ILLOPC
4940 #define ILL_ILLOPN ILL_ILLOPN
4942 #define ILL_ILLADR ILL_ILLADR
4944 #define ILL_ILLTRP ILL_ILLTRP
4946 #define ILL_PRVOPC ILL_PRVOPC
4948 #define ILL_PRVREG ILL_PRVREG
4950 #define ILL_COPROC ILL_COPROC
4952 #define ILL_BADSTK ILL_BADSTK
4959 #define FPE_INTDIV FPE_INTDIV
4961 #define FPE_INTOVF FPE_INTOVF
4963 #define FPE_FLTDIV FPE_FLTDIV
4965 #define FPE_FLTOVF FPE_FLTOVF
4967 #define FPE_FLTUND FPE_FLTUND
4969 #define FPE_FLTRES FPE_FLTRES
4971 #define FPE_FLTINV FPE_FLTINV
4973 #define FPE_FLTSUB FPE_FLTSUB
4980 #define SEGV_MAPERR SEGV_MAPERR
4982 #define SEGV_ACCERR SEGV_ACCERR
4989 #define BUS_ADRALN BUS_ADRALN
4991 #define BUS_ADRERR BUS_ADRERR
4993 #define BUS_OBJERR BUS_OBJERR
5000 #define TRAP_BRKPT TRAP_BRKPT
5002 #define TRAP_TRACE TRAP_TRACE
5009 #define CLD_EXITED CLD_EXITED
5011 #define CLD_KILLED CLD_KILLED
5013 #define CLD_DUMPED CLD_DUMPED
5015 #define CLD_TRAPPED CLD_TRAPPED
5017 #define CLD_STOPPED CLD_STOPPED
5019 #define CLD_CONTINUED CLD_CONTINUED
5026 #define POLL_IN POLL_IN
5028 #define POLL_OUT POLL_OUT
5030 #define POLL_MSG POLL_MSG
5032 #define POLL_ERR POLL_ERR
5034 #define POLL_PRI POLL_PRI
5036 #define POLL_HUP POLL_HUP
5039 #undef __need_siginfo_t
5045 #define __have_sigevent_t 1
5048 #define __SIGEV_MAX_SIZE 64
5052 #define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
5055 typedef struct sigevent
5057 sigval_t sigev_value;
5063 int _pad[((64 / sizeof (int)) - 3)];
5071 void (*_function) (sigval_t);
5078 #define sigev_notify_function _sigev_un._sigev_thread._function
5079 #define sigev_notify_attributes _sigev_un._sigev_thread._attribute
5085 #define SIGEV_SIGNAL SIGEV_SIGNAL
5087 #define SIGEV_NONE SIGEV_NONE
5089 #define SIGEV_THREAD SIGEV_THREAD
5092 #define SIGEV_THREAD_ID SIGEV_THREAD_ID
5094 # 80 "/usr/include/signal.h" 2 3 4
5099 typedef void (*__sighandler_t) (int);
5104 extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
5107 extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
5116 extern __sighandler_t signal (int __sig, __sighandler_t __handler)
5118 # 113 "/usr/include/signal.h" 3 4
5124 extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler)
5132 extern int kill (__pid_t __pid, int __sig) throw ();
5139 extern int killpg (__pid_t __pgrp, int __sig) throw ();
5144 extern int raise (int __sig) throw ();
5149 extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
5151 extern int gsignal (int __sig) throw ();
5156 extern void psignal (int __sig, __const char *__s);
5161 extern void psiginfo (__const siginfo_t *__pinfo, __const char *__s);
5162 # 168 "/usr/include/signal.h" 3 4
5163 extern int __sigpause (int __sig_or_mask, int __is_sig);
5164 # 177 "/usr/include/signal.h" 3 4
5165 extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
5166 # 193 "/usr/include/signal.h" 3 4
5167 #define sigmask(sig) __sigmask(sig)
5170 extern int sigblock (int __mask) throw () __attribute__ ((__deprecated__));
5173 extern int sigsetmask (int __mask) throw () __attribute__ ((__deprecated__));
5176 extern int siggetmask (void) throw () __attribute__ ((__deprecated__));
5185 typedef __sighandler_t sighandler_t;
5190 typedef __sighandler_t sig_t;
5196 extern int sigemptyset (sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
5199 extern int sigfillset (sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
5202 extern int sigaddset (sigset_t *__set, int __signo) throw () __attribute__ ((__nonnull__ (1)));
5205 extern int sigdelset (sigset_t *__set, int __signo) throw () __attribute__ ((__nonnull__ (1)));
5208 extern int sigismember (__const sigset_t *__set, int __signo)
5209 throw () __attribute__ ((__nonnull__ (1)));
5213 extern int sigisemptyset (__const sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
5216 extern int sigandset (sigset_t *__set, __const sigset_t *__left,
5217 __const sigset_t *__right) throw () __attribute__ ((__nonnull__ (1, 2, 3)));
5220 extern int sigorset (sigset_t *__set, __const sigset_t *__left,
5221 __const sigset_t *__right) throw () __attribute__ ((__nonnull__ (1, 2, 3)));
5226 # 1 "/usr/include/bits/sigaction.h" 1 3 4
5227 # 25 "/usr/include/bits/sigaction.h" 3 4
5235 __sighandler_t sa_handler;
5237 void (*sa_sigaction) (int, siginfo_t *, void *);
5239 __sigaction_handler;
5240 #define sa_handler __sigaction_handler.sa_handler
5241 #define sa_sigaction __sigaction_handler.sa_sigaction
5253 void (*sa_restorer) (void);
5257 #define SA_NOCLDSTOP 1
5258 #define SA_NOCLDWAIT 2
5259 #define SA_SIGINFO 4
5262 #define SA_ONSTACK 0x08000000
5265 #define SA_RESTART 0x10000000
5266 #define SA_NODEFER 0x40000000
5268 #define SA_RESETHAND 0x80000000
5271 #define SA_INTERRUPT 0x20000000
5274 #define SA_NOMASK SA_NODEFER
5275 #define SA_ONESHOT SA_RESETHAND
5276 #define SA_STACK SA_ONSTACK
5281 #define SIG_UNBLOCK 1
5282 #define SIG_SETMASK 2
5283 # 253 "/usr/include/signal.h" 2 3 4
5286 extern int sigprocmask (int __how, __const sigset_t *__restrict __set,
5287 sigset_t *__restrict __oset) throw ();
5294 extern int sigsuspend (__const sigset_t *__set) __attribute__ ((__nonnull__ (1)));
5297 extern int sigaction (int __sig, __const struct sigaction *__restrict __act,
5298 struct sigaction *__restrict __oact) throw ();
5301 extern int sigpending (sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
5308 extern int sigwait (__const sigset_t *__restrict __set, int *__restrict __sig)
5309 __attribute__ ((__nonnull__ (1, 2)));
5316 extern int sigwaitinfo (__const sigset_t *__restrict __set,
5317 siginfo_t *__restrict __info) __attribute__ ((__nonnull__ (1)));
5324 extern int sigtimedwait (__const sigset_t *__restrict __set,
5325 siginfo_t *__restrict __info,
5326 __const struct timespec *__restrict __timeout)
5327 __attribute__ ((__nonnull__ (1)));
5331 extern int sigqueue (__pid_t __pid, int __sig, __const union sigval __val)
5333 # 310 "/usr/include/signal.h" 3 4
5334 extern __const char *__const _sys_siglist[65];
5335 extern __const char *__const sys_siglist[65];
5340 __sighandler_t sv_handler;
5344 #define sv_onstack sv_flags
5348 #define SV_ONSTACK (1 << 0)
5349 #define SV_INTERRUPT (1 << 1)
5350 #define SV_RESETHAND (1 << 2)
5358 extern int sigvec (int __sig, __const struct sigvec *__vec,
5359 struct sigvec *__ovec) throw ();
5363 # 1 "/usr/include/bits/sigcontext.h" 1 3 4
5364 # 26 "/usr/include/bits/sigcontext.h" 3 4
5365 #define sigcontext_struct sigcontext
5367 # 1 "/usr/include/asm/sigcontext.h" 1 3 4
5369 #define _ASMARM_SIGCONTEXT_H
5377 unsigned long trap_no;
5378 unsigned long error_code;
5379 unsigned long oldmask;
5380 unsigned long arm_r0;
5381 unsigned long arm_r1;
5382 unsigned long arm_r2;
5383 unsigned long arm_r3;
5384 unsigned long arm_r4;
5385 unsigned long arm_r5;
5386 unsigned long arm_r6;
5387 unsigned long arm_r7;
5388 unsigned long arm_r8;
5389 unsigned long arm_r9;
5390 unsigned long arm_r10;
5391 unsigned long arm_fp;
5392 unsigned long arm_ip;
5393 unsigned long arm_sp;
5394 unsigned long arm_lr;
5395 unsigned long arm_pc;
5396 unsigned long arm_cpsr;
5397 unsigned long fault_address;
5399 # 29 "/usr/include/bits/sigcontext.h" 2 3 4
5403 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
5404 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5405 #undef __need_ptrdiff_t
5406 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5407 #undef __need_size_t
5408 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5409 #undef __need_wchar_t
5410 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5414 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5420 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
5421 # 33 "/usr/include/bits/sigcontext.h" 2 3 4
5422 # 340 "/usr/include/signal.h" 2 3 4
5425 extern int sigreturn (struct sigcontext *__scp) throw ();
5431 #define __need_size_t
5432 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
5433 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5434 #undef __need_ptrdiff_t
5435 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5436 #undef __need_size_t
5437 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5438 #undef __need_wchar_t
5439 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5443 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
5449 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
5450 # 350 "/usr/include/signal.h" 2 3 4
5455 extern int siginterrupt (int __sig, int __interrupt) throw ();
5457 # 1 "/usr/include/bits/sigstack.h" 1 3 4
5458 # 26 "/usr/include/bits/sigstack.h" 3 4
5470 #define SS_ONSTACK SS_ONSTACK
5472 #define SS_DISABLE SS_DISABLE
5476 #define MINSIGSTKSZ 2048
5479 #define SIGSTKSZ 8192
5483 typedef struct sigaltstack
5489 # 357 "/usr/include/signal.h" 2 3 4
5492 # 1 "/usr/include/sys/ucontext.h" 1 3 4
5493 # 22 "/usr/include/sys/ucontext.h" 3 4
5494 #define _SYS_UCONTEXT_H 1
5497 # 1 "/usr/include/signal.h" 1 3 4
5498 # 26 "/usr/include/sys/ucontext.h" 2 3 4
5502 # 1 "/usr/include/bits/sigcontext.h" 1 3 4
5503 # 30 "/usr/include/sys/ucontext.h" 2 3 4
5511 typedef greg_t gregset_t[18];
5517 #define REG_R0 REG_R0
5519 #define REG_R1 REG_R1
5521 #define REG_R2 REG_R2
5523 #define REG_R3 REG_R3
5525 #define REG_R4 REG_R4
5527 #define REG_R5 REG_R5
5529 #define REG_R6 REG_R6
5531 #define REG_R7 REG_R7
5533 #define REG_R8 REG_R8
5535 #define REG_R9 REG_R9
5537 #define REG_R10 REG_R10
5539 #define REG_R11 REG_R11
5541 #define REG_R12 REG_R12
5543 #define REG_R13 REG_R13
5545 #define REG_R14 REG_R14
5547 #define REG_R15 REG_R15
5550 struct _libc_fpstate
5554 unsigned int sign1:1;
5555 unsigned int unused:15;
5556 unsigned int sign2:1;
5557 unsigned int exponent:14;
5559 unsigned int mantissa1:31;
5560 unsigned int mantissa0:32;
5562 unsigned int fpsr:32;
5563 unsigned int fpcr:32;
5564 unsigned char ftype[8];
5565 unsigned int init_flag;
5568 typedef struct _libc_fpstate fpregset_t;
5574 typedef struct sigcontext mcontext_t;
5577 typedef struct ucontext
5579 unsigned long uc_flags;
5580 struct ucontext *uc_link;
5582 mcontext_t uc_mcontext;
5583 __sigset_t uc_sigmask;
5584 unsigned long uc_regspace[128] __attribute__((__aligned__(8)));
5586 # 360 "/usr/include/signal.h" 2 3 4
5592 extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
5593 throw () __attribute__ ((__deprecated__));
5597 extern int sigaltstack (__const struct sigaltstack *__restrict __ss,
5598 struct sigaltstack *__restrict __oss) throw ();
5606 extern int sighold (int __sig) throw ();
5609 extern int sigrelse (int __sig) throw ();
5612 extern int sigignore (int __sig) throw ();
5615 extern __sighandler_t sigset (int __sig, __sighandler_t __disp) throw ();
5622 # 1 "/usr/include/bits/sigthread.h" 1 3 4
5623 # 21 "/usr/include/bits/sigthread.h" 3 4
5624 #define _BITS_SIGTHREAD_H 1
5625 # 31 "/usr/include/bits/sigthread.h" 3 4
5626 extern int pthread_sigmask (int __how,
5627 __const __sigset_t *__restrict __newmask,
5628 __sigset_t *__restrict __oldmask)throw ();
5631 extern int pthread_kill (pthread_t __threadid, int __signo) throw ();
5635 extern int pthread_sigqueue (pthread_t __threadid, int __signo,
5636 const union sigval __value) throw ();
5637 # 396 "/usr/include/signal.h" 2 3 4
5644 extern int __libc_current_sigrtmin (void) throw ();
5646 extern int __libc_current_sigrtmax (void) throw ();
5651 # 20 "./../../dist/include/mozilla/Assertions.h" 2
5652 # 65 "./../../dist/include/mozilla/Assertions.h"
5653 #define MOZ_STATIC_ASSERT_GLUE1(x,y) x ##y
5654 #define MOZ_STATIC_ASSERT_GLUE(x,y) MOZ_STATIC_ASSERT_GLUE1(x, y)
5655 # 96 "./../../dist/include/mozilla/Assertions.h"
5656 #define MOZ_STATIC_ASSERT(cond,reason) typedef int MOZ_STATIC_ASSERT_GLUE(moz_static_assert, __COUNTER__)[(cond) ? 1 : -1]
5664 #define MOZ_STATIC_ASSERT_IF(cond,expr,reason) MOZ_STATIC_ASSERT(!(cond) || (expr), reason)
5668 # 150 "./../../dist/include/mozilla/Assertions.h"
5669 #define MOZ_CRASH() do { raise(SIGABRT); } while (0)
5676 extern __attribute__((weak)) __attribute__((visibility("default"))) void
5677 MOZ_Assert(const char* s, const char* file, int ln);
5679 static __attribute__((always_inline)) inline void
5680 MOZ_OutputAssertMessage(const char* s, const char *file, int ln)
5686 fprintf(stderr, "Assertion failure: %s, at %s:%d\n", s, file, ln);
5693 # 250 "./../../dist/include/mozilla/Assertions.h"
5694 #define MOZ_ASSERT(...) do { } while(0)
5695 # 269 "./../../dist/include/mozilla/Assertions.h"
5696 #define MOZ_ASSERT_IF(cond,expr) do { } while (0)
5697 # 281 "./../../dist/include/mozilla/Assertions.h"
5698 #define MOZ_NOT_REACHED_MARKER() __builtin_unreachable()
5699 # 311 "./../../dist/include/mozilla/Assertions.h"
5700 #define MOZ_NOT_REACHED(reason) MOZ_NOT_REACHED_MARKER()
5701 # 349 "./../../dist/include/mozilla/Assertions.h"
5702 #define MOZ_ALWAYS_TRUE(expr) ((void)(expr))
5703 #define MOZ_ALWAYS_FALSE(expr) ((void)(expr))
5704 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp" 2
5707 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h" 1
5708 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h"
5709 #define jsscope_h___
5713 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/new" 1 3
5714 # 37 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/new" 3
5718 # 40 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/new" 3
5720 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/cstddef" 1 3
5721 # 41 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/cstddef" 3
5723 # 42 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/cstddef" 3
5725 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 1 3
5726 # 32 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5727 #define _GLIBCXX_CXX_CONFIG_H 1
5730 #define __GLIBCXX__ 20120702
5735 #define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 1
5738 #define _GLIBCXX_VISIBILITY_ATTR(V) __attribute__ ((__visibility__ (#V)))
5739 # 54 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5740 #define _GLIBCXX_DEPRECATED 1
5746 #define _GLIBCXX_DEPRECATED_ATTR
5747 # 95 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5748 #define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION 0
5749 # 117 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5750 #define _GLIBCXX_STD_D _GLIBCXX_STD
5751 #define _GLIBCXX_STD_P _GLIBCXX_STD
5752 #define _GLIBCXX_STD_PR _GLIBCXX_STD
5753 #define _GLIBCXX_STD std
5754 #define _GLIBCXX_BEGIN_NESTED_NAMESPACE(X,Y) _GLIBCXX_BEGIN_NAMESPACE(X)
5755 #define _GLIBCXX_END_NESTED_NAMESPACE _GLIBCXX_END_NAMESPACE
5756 #define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) {
5757 #define _GLIBCXX_END_NAMESPACE }
5758 # 240 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5759 #undef _GLIBCXX_LONG_DOUBLE_COMPAT
5760 # 252 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5761 #define _GLIBCXX_LDBL_NAMESPACE
5762 #define _GLIBCXX_BEGIN_LDBL_NAMESPACE
5763 #define _GLIBCXX_END_LDBL_NAMESPACE
5769 #define _GLIBCXX_BEGIN_EXTERN_C extern "C" {
5770 #define _GLIBCXX_END_EXTERN_C }
5771 # 275 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5772 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/os_defines.h" 1 3
5773 # 31 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/os_defines.h" 3
5774 #define _GLIBCXX_OS_DEFINES 1
5780 #define __NO_CTYPE 1
5781 # 276 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 2 3
5784 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/cpu_defines.h" 1 3
5785 # 31 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/cpu_defines.h" 3
5786 #define _GLIBCXX_CPU_DEFINES 1
5787 # 279 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 2 3
5792 #define _GLIBCXX_PSEUDO_VISIBILITY(V)
5793 # 301 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5794 #define _GLIBCXX_EXTERN_TEMPLATE 1
5801 #define _GLIBCXX_WEAK_DEFINITION
5808 #define __glibcxx_assert(_Condition)
5809 # 346 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5810 #define _GLIBCXX_FAST_MATH 0
5817 #define __N(msgid) (msgid)
5824 #define _GLIBCXX_PURE __attribute__ ((__pure__))
5828 #define _GLIBCXX_CONST __attribute__ ((__const__))
5832 #define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))
5837 #define _GLIBCXX_NOTHROW throw()
5838 # 384 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5839 #define _GLIBCXX_HAVE_ACOSF 1
5842 #define _GLIBCXX_HAVE_ACOSL 1
5845 #define _GLIBCXX_HAVE_ASINF 1
5848 #define _GLIBCXX_HAVE_ASINL 1
5851 #define _GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE 1
5854 #define _GLIBCXX_HAVE_ATAN2F 1
5857 #define _GLIBCXX_HAVE_ATAN2L 1
5860 #define _GLIBCXX_HAVE_ATANF 1
5863 #define _GLIBCXX_HAVE_ATANL 1
5869 #define _GLIBCXX_HAVE_CEILF 1
5872 #define _GLIBCXX_HAVE_CEILL 1
5875 #define _GLIBCXX_HAVE_COMPLEX_H 1
5878 #define _GLIBCXX_HAVE_COSF 1
5881 #define _GLIBCXX_HAVE_COSHF 1
5884 #define _GLIBCXX_HAVE_COSHL 1
5887 #define _GLIBCXX_HAVE_COSL 1
5890 #define _GLIBCXX_HAVE_DLFCN_H 1
5893 #define _GLIBCXX_HAVE_EBADMSG 1
5896 #define _GLIBCXX_HAVE_ECANCELED 1
5899 #define _GLIBCXX_HAVE_EIDRM 1
5902 #define _GLIBCXX_HAVE_ENDIAN_H 1
5905 #define _GLIBCXX_HAVE_ENODATA 1
5908 #define _GLIBCXX_HAVE_ENOLINK 1
5911 #define _GLIBCXX_HAVE_ENOSR 1
5914 #define _GLIBCXX_HAVE_ENOSTR 1
5917 #define _GLIBCXX_HAVE_ENOTRECOVERABLE 1
5920 #define _GLIBCXX_HAVE_ENOTSUP 1
5923 #define _GLIBCXX_HAVE_EOVERFLOW 1
5926 #define _GLIBCXX_HAVE_EOWNERDEAD 1
5929 #define _GLIBCXX_HAVE_EPROTO 1
5932 #define _GLIBCXX_HAVE_ETIME 1
5935 #define _GLIBCXX_HAVE_ETXTBSY 1
5938 #define _GLIBCXX_HAVE_EXECINFO_H 1
5941 #define _GLIBCXX_HAVE_EXPF 1
5944 #define _GLIBCXX_HAVE_EXPL 1
5947 #define _GLIBCXX_HAVE_FABSF 1
5950 #define _GLIBCXX_HAVE_FABSL 1
5953 #define _GLIBCXX_HAVE_FENV_H 1
5956 #define _GLIBCXX_HAVE_FINITE 1
5959 #define _GLIBCXX_HAVE_FINITEF 1
5962 #define _GLIBCXX_HAVE_FINITEL 1
5965 #define _GLIBCXX_HAVE_FLOAT_H 1
5968 #define _GLIBCXX_HAVE_FLOORF 1
5971 #define _GLIBCXX_HAVE_FLOORL 1
5974 #define _GLIBCXX_HAVE_FMODF 1
5977 #define _GLIBCXX_HAVE_FMODL 1
5978 # 531 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
5979 #define _GLIBCXX_HAVE_FREXPF 1
5982 #define _GLIBCXX_HAVE_FREXPL 1
5985 #define _GLIBCXX_HAVE_GETIPINFO 1
5989 #define _GLIBCXX_HAVE_GTHR_DEFAULT 1
5992 #define _GLIBCXX_HAVE_HYPOT 1
5995 #define _GLIBCXX_HAVE_HYPOTF 1
5998 #define _GLIBCXX_HAVE_HYPOTL 1
6001 #define _GLIBCXX_HAVE_ICONV 1
6007 #define _GLIBCXX_HAVE_INT64_T 1
6013 #define _GLIBCXX_HAVE_INT64_T_LONG_LONG 1
6016 #define _GLIBCXX_HAVE_INTTYPES_H 1
6019 #define _GLIBCXX_HAVE_ISINF 1
6022 #define _GLIBCXX_HAVE_ISINFF 1
6025 #define _GLIBCXX_HAVE_ISINFL 1
6028 #define _GLIBCXX_HAVE_ISNAN 1
6031 #define _GLIBCXX_HAVE_ISNANF 1
6034 #define _GLIBCXX_HAVE_ISNANL 1
6037 #define _GLIBCXX_HAVE_ISWBLANK 1
6040 #define _GLIBCXX_HAVE_LC_MESSAGES 1
6043 #define _GLIBCXX_HAVE_LDEXPF 1
6046 #define _GLIBCXX_HAVE_LDEXPL 1
6049 #define _GLIBCXX_HAVE_LIBINTL_H 1
6052 #define _GLIBCXX_HAVE_LIMIT_AS 1
6055 #define _GLIBCXX_HAVE_LIMIT_DATA 1
6058 #define _GLIBCXX_HAVE_LIMIT_FSIZE 1
6061 #define _GLIBCXX_HAVE_LIMIT_RSS 1
6064 #define _GLIBCXX_HAVE_LIMIT_VMEM 0
6067 #define _GLIBCXX_HAVE_LINUX_FUTEX 1
6070 #define _GLIBCXX_HAVE_LOCALE_H 1
6073 #define _GLIBCXX_HAVE_LOG10F 1
6076 #define _GLIBCXX_HAVE_LOG10L 1
6079 #define _GLIBCXX_HAVE_LOGF 1
6082 #define _GLIBCXX_HAVE_LOGL 1
6083 # 643 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
6084 #define _GLIBCXX_HAVE_MBSTATE_T 1
6087 #define _GLIBCXX_HAVE_MEMORY_H 1
6090 #define _GLIBCXX_HAVE_MODF 1
6093 #define _GLIBCXX_HAVE_MODFF 1
6096 #define _GLIBCXX_HAVE_MODFL 1
6102 #define _GLIBCXX_HAVE_POLL 1
6105 #define _GLIBCXX_HAVE_POWF 1
6108 #define _GLIBCXX_HAVE_POWL 1
6114 #define _GLIBCXX_HAVE_SETENV 1
6117 #define _GLIBCXX_HAVE_SINCOS 1
6120 #define _GLIBCXX_HAVE_SINCOSF 1
6123 #define _GLIBCXX_HAVE_SINCOSL 1
6126 #define _GLIBCXX_HAVE_SINF 1
6129 #define _GLIBCXX_HAVE_SINHF 1
6132 #define _GLIBCXX_HAVE_SINHL 1
6135 #define _GLIBCXX_HAVE_SINL 1
6138 #define _GLIBCXX_HAVE_SQRTF 1
6141 #define _GLIBCXX_HAVE_SQRTL 1
6144 #define _GLIBCXX_HAVE_STDBOOL_H 1
6147 #define _GLIBCXX_HAVE_STDINT_H 1
6150 #define _GLIBCXX_HAVE_STDLIB_H 1
6153 #define _GLIBCXX_HAVE_STRERROR_L 1
6156 #define _GLIBCXX_HAVE_STRERROR_R 1
6159 #define _GLIBCXX_HAVE_STRINGS_H 1
6162 #define _GLIBCXX_HAVE_STRING_H 1
6165 #define _GLIBCXX_HAVE_STRTOF 1
6168 #define _GLIBCXX_HAVE_STRTOLD 1
6171 #define _GLIBCXX_HAVE_STRXFRM_L 1
6177 #define _GLIBCXX_HAVE_SYS_IOCTL_H 1
6180 #define _GLIBCXX_HAVE_SYS_IPC_H 1
6181 # 748 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
6182 #define _GLIBCXX_HAVE_SYS_PARAM_H 1
6185 #define _GLIBCXX_HAVE_SYS_RESOURCE_H 1
6188 #define _GLIBCXX_HAVE_SYS_SEM_H 1
6191 #define _GLIBCXX_HAVE_SYS_STAT_H 1
6194 #define _GLIBCXX_HAVE_SYS_TIME_H 1
6197 #define _GLIBCXX_HAVE_SYS_TYPES_H 1
6200 #define _GLIBCXX_HAVE_SYS_UIO_H 1
6206 #define _GLIBCXX_HAVE_S_ISREG 1
6209 #define _GLIBCXX_HAVE_TANF 1
6212 #define _GLIBCXX_HAVE_TANHF 1
6215 #define _GLIBCXX_HAVE_TANHL 1
6218 #define _GLIBCXX_HAVE_TANL 1
6221 #define _GLIBCXX_HAVE_TGMATH_H 1
6224 #define _GLIBCXX_HAVE_TLS 1
6227 #define _GLIBCXX_HAVE_UNISTD_H 1
6230 #define _GLIBCXX_HAVE_VFWSCANF 1
6233 #define _GLIBCXX_HAVE_VSWSCANF 1
6236 #define _GLIBCXX_HAVE_VWSCANF 1
6239 #define _GLIBCXX_HAVE_WCHAR_H 1
6242 #define _GLIBCXX_HAVE_WCSTOF 1
6245 #define _GLIBCXX_HAVE_WCTYPE_H 1
6248 #define _GLIBCXX_HAVE_WRITEV 1
6249 # 1003 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
6250 #define _GLIBCXX_ICONV_CONST
6254 #define LT_OBJDIR ".libs/"
6260 #define _GLIBCXX_PACKAGE_BUGREPORT ""
6263 #define _GLIBCXX_PACKAGE_NAME "package-unused"
6266 #define _GLIBCXX_PACKAGE_STRING "package-unused version-unused"
6269 #define _GLIBCXX_PACKAGE_TARNAME "libstdc++"
6272 #define _GLIBCXX_PACKAGE_URL ""
6275 #define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused"
6276 # 1046 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
6277 #define STDC_HEADERS 1
6283 #define _GLIBCXX_ATOMIC_BUILTINS_1 1
6287 #define _GLIBCXX_ATOMIC_BUILTINS_2 1
6290 #define _GLIBCXX_ATOMIC_BUILTINS_4 1
6291 # 1072 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
6292 #define _GLIBCXX_HAS_GTHREADS 1
6295 #define _GLIBCXX_HOSTED 1
6300 #define _GLIBCXX_PTRDIFF_T_IS_INT 1
6303 #define _GLIBCXX_RES_LIMITS 1
6306 #define _GLIBCXX_SIZE_T_IS_UINT 1
6312 #define _GLIBCXX_STDIO_MACROS 1
6315 #define _GLIBCXX_SYMVER 1
6321 #define _GLIBCXX_SYMVER_GNU 1
6328 #define _GLIBCXX_USE_C99 1
6333 #define _GLIBCXX_USE_C99_COMPLEX 1
6338 #define _GLIBCXX_USE_C99_COMPLEX_TR1 1
6342 #define _GLIBCXX_USE_C99_CTYPE_TR1 1
6346 #define _GLIBCXX_USE_C99_FENV_TR1 1
6350 #define _GLIBCXX_USE_C99_INTTYPES_TR1 1
6354 #define _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 1
6358 #define _GLIBCXX_USE_C99_MATH 1
6362 #define _GLIBCXX_USE_C99_MATH_TR1 1
6366 #define _GLIBCXX_USE_C99_STDINT_TR1 1
6367 # 1159 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/armv7a-hardfloat-linux-gnueabi/bits/c++config.h" 3
6368 #define _GLIBCXX_USE_GETTIMEOFDAY 1
6371 #define _GLIBCXX_USE_LFS 1
6374 #define _GLIBCXX_USE_LONG_LONG 1
6380 #define _GLIBCXX_USE_NLS 1
6384 #define _GLIBCXX_USE_RANDOM_TR1 1
6390 #define _GLIBCXX_USE_WCHAR_T 1
6391 # 44 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/cstddef" 2 3
6392 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
6393 # 45 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/cstddef" 2 3
6396 #define _GLIBCXX_CSTDDEF 1
6398 namespace std __attribute__ ((__visibility__ ("default"))) {
6404 # 42 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/new" 2 3
6405 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/exception" 1 3
6406 # 33 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/exception" 3
6407 #define __EXCEPTION__
6410 # 36 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/exception" 3
6412 #pragma GCC visibility push(default)
6420 # 61 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/exception" 3
6424 exception() throw() { }
6425 virtual ~exception() throw();
6429 virtual const char* what() const throw();
6434 class bad_exception : public exception
6437 bad_exception() throw() { }
6441 virtual ~bad_exception() throw();
6444 virtual const char* what() const throw();
6448 typedef void (*terminate_handler) ();
6451 typedef void (*unexpected_handler) ();
6454 terminate_handler set_terminate(terminate_handler) throw();
6458 void terminate() throw() __attribute__ ((__noreturn__));
6461 unexpected_handler set_unexpected(unexpected_handler) throw();
6465 void unexpected() __attribute__ ((__noreturn__));
6466 # 118 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/exception" 3
6467 bool uncaught_exception() throw() __attribute__ ((__pure__));
6472 namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
6473 # 141 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/exception" 3
6474 void __verbose_terminate_handler();
6480 #pragma GCC visibility pop
6481 # 43 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/new" 2 3
6483 #pragma GCC visibility push(default)
6495 class bad_alloc : public exception
6498 bad_alloc() throw() { }
6502 virtual ~bad_alloc() throw();
6505 virtual const char* what() const throw();
6508 struct nothrow_t { };
6510 extern const nothrow_t nothrow;
6514 typedef void (*new_handler)();
6518 new_handler set_new_handler(new_handler) throw();
6520 # 93 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/new" 3
6521 void* operator new(std::size_t) throw (std::bad_alloc);
6522 void* operator new[](std::size_t) throw (std::bad_alloc);
6523 void operator delete(void*) throw();
6524 void operator delete[](void*) throw();
6525 void* operator new(std::size_t, const std::nothrow_t&) throw();
6526 void* operator new[](std::size_t, const std::nothrow_t&) throw();
6527 void operator delete(void*, const std::nothrow_t&) throw();
6528 void operator delete[](void*, const std::nothrow_t&) throw();
6531 inline void* operator new(std::size_t, void* __p) throw() { return __p; }
6532 inline void* operator new[](std::size_t, void* __p) throw() { return __p; }
6535 inline void operator delete (void*, void*) throw() { }
6536 inline void operator delete[](void*, void*) throw() { }
6540 #pragma GCC visibility pop
6541 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h" 2
6546 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h" 1
6547 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
6549 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
6550 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 1
6551 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
6558 # 1 "./../../dist/include/mozilla/FloatingPoint.h" 1
6559 # 9 "./../../dist/include/mozilla/FloatingPoint.h"
6560 #define mozilla_FloatingPoint_h_
6561 # 40 "./../../dist/include/mozilla/FloatingPoint.h"
6562 typedef int moz_static_assert0[(sizeof(double) == sizeof(uint64_t)) ? 1 : -1];
6568 #define MOZ_DOUBLE_SIGN_BIT 0x8000000000000000ULL
6569 #define MOZ_DOUBLE_EXPONENT_BITS 0x7ff0000000000000ULL
6570 #define MOZ_DOUBLE_SIGNIFICAND_BITS 0x000fffffffffffffULL
6572 #define MOZ_DOUBLE_EXPONENT_BIAS 1023
6573 #define MOZ_DOUBLE_EXPONENT_SHIFT 52
6577 # 53 "./../../dist/include/mozilla/FloatingPoint.h"
6578 [((0x8000000000000000ULL & 0x7ff0000000000000ULL) == 0) ? 1 : -1]
6582 # 55 "./../../dist/include/mozilla/FloatingPoint.h"
6583 [((0x8000000000000000ULL & 0x000fffffffffffffULL) == 0) ? 1 : -1]
6587 # 57 "./../../dist/include/mozilla/FloatingPoint.h"
6588 [((0x7ff0000000000000ULL & 0x000fffffffffffffULL) == 0) ? 1 : -1]
6594 # 60 "./../../dist/include/mozilla/FloatingPoint.h"
6595 [((0x8000000000000000ULL | 0x7ff0000000000000ULL | 0x000fffffffffffffULL) == ~(uint64_t)0) ? 1 : -1]
6607 union MozDoublePun {
6619 static __attribute__((always_inline)) inline int
6620 MOZ_DOUBLE_IS_NaN(double d)
6622 union MozDoublePun pun;
6629 return (pun.u & 0x7ff0000000000000ULL) == 0x7ff0000000000000ULL &&
6630 (pun.u & 0x000fffffffffffffULL) != 0;
6634 static __attribute__((always_inline)) inline int
6635 MOZ_DOUBLE_IS_INFINITE(double d)
6637 union MozDoublePun pun;
6641 return (pun.u & ~0x8000000000000000ULL) == 0x7ff0000000000000ULL;
6645 static __attribute__((always_inline)) inline int
6646 MOZ_DOUBLE_IS_FINITE(double d)
6648 union MozDoublePun pun;
6655 return (pun.u & 0x7ff0000000000000ULL) != 0x7ff0000000000000ULL;
6662 static __attribute__((always_inline)) inline int
6663 MOZ_DOUBLE_IS_NEGATIVE(double d)
6665 union MozDoublePun pun;
6671 return (pun.u & 0x8000000000000000ULL) != 0;
6675 static __attribute__((always_inline)) inline int
6676 MOZ_DOUBLE_IS_NEGATIVE_ZERO(double d)
6678 union MozDoublePun pun;
6682 return pun.u == 0x8000000000000000ULL;
6686 static __attribute__((always_inline)) inline int_fast16_t
6687 MOZ_DOUBLE_EXPONENT(double d)
6689 union MozDoublePun pun;
6696 return (int_fast16_t)((pun.u & 0x7ff0000000000000ULL) >> 52) -
6701 static __attribute__((always_inline)) inline double
6702 MOZ_DOUBLE_POSITIVE_INFINITY()
6704 union MozDoublePun pun;
6710 pun.u = 0x7ff0000000000000ULL;
6715 static __attribute__((always_inline)) inline double
6716 MOZ_DOUBLE_NEGATIVE_INFINITY()
6718 union MozDoublePun pun;
6724 pun.u = 0x8000000000000000ULL | 0x7ff0000000000000ULL;
6729 static __attribute__((always_inline)) inline double
6730 MOZ_DOUBLE_SPECIFIC_NaN(int signbit, uint64_t significand)
6732 union MozDoublePun pun;
6738 pun.u = (signbit ? 0x8000000000000000ULL : 0) |
6739 0x7ff0000000000000ULL |
6749 static __attribute__((always_inline)) inline double
6752 return MOZ_DOUBLE_SPECIFIC_NaN(0, 0xfffffffffffffULL);
6756 static __attribute__((always_inline)) inline double
6757 MOZ_DOUBLE_MIN_VALUE()
6759 union MozDoublePun pun;
6765 static __attribute__((always_inline)) inline uint32_t
6766 MOZ_HASH_DOUBLE(double d)
6768 union MozDoublePun pun;
6771 return ((uint32_t)(pun.u >> 32)) ^ ((uint32_t)(pun.u));
6774 static __attribute__((always_inline)) inline int
6775 MOZ_DOUBLE_IS_INT32(double d, int32_t* i)
6782 return !MOZ_DOUBLE_IS_NEGATIVE_ZERO(d) && d == (*i = (int32_t)d);
6787 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
6790 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
6791 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
6793 # 1 "./js-config.h" 1
6794 # 10 "./js-config.h"
6795 #define js_config_h___
6802 #define JS_THREADSAFE 1
6805 #define JS_HAS_CTYPES 1
6813 #define JS_HAVE_ENDIAN_H 1
6814 # 60 "./js-config.h"
6815 #define JS_BYTES_PER_WORD 4
6819 #define JS_METHODJIT 1
6822 #define JS_HAS_XML_SUPPORT 1
6823 # 21 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
6824 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspubtd.h" 1
6832 #define jspubtd_h___
6837 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h" 1
6838 # 21 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
6839 #define jstypes_h___
6842 # 1 "./../../dist/include/mozilla/Util.h" 1
6843 # 14 "./../../dist/include/mozilla/Util.h"
6844 #define mozilla_Util_h_
6853 # 41 "./../../dist/include/mozilla/Util.h"
6854 template <typename T>
6857 # 69 "./../../dist/include/mozilla/Util.h"
6859 DebugOnly(const T&) {}
6860 DebugOnly(const DebugOnly&) {}
6861 DebugOnly& operator=(const T&) { return *this; }
6862 void operator++(int) {}
6863 void operator--(int) {}
6879 struct AlignmentFinder
6889 static const int alignment = sizeof(Aligner) - sizeof(T);
6892 #define MOZ_ALIGNOF(T) mozilla::AlignmentFinder<T>::alignment
6893 # 116 "./../../dist/include/mozilla/Util.h"
6894 #define MOZ_ALIGNED_DECL(_type,_align) _type __attribute__((aligned(_align)))
6895 # 131 "./../../dist/include/mozilla/Util.h"
6896 template<size_t align>
6905 struct AlignedElem<1>
6907 uint8_t elem __attribute__((aligned(1)));
6911 struct AlignedElem<2>
6913 uint8_t elem __attribute__((aligned(2)));
6917 struct AlignedElem<4>
6919 uint8_t elem __attribute__((aligned(4)));
6923 struct AlignedElem<8>
6925 uint8_t elem __attribute__((aligned(8)));
6929 struct AlignedElem<16>
6931 uint8_t elem __attribute__((aligned(16)));
6933 # 179 "./../../dist/include/mozilla/Util.h"
6934 template <size_t nbytes>
6935 struct AlignedStorage
6942 const void *addr() const { return u.bytes; }
6943 void *addr() { return u.bytes; }
6947 struct AlignedStorage2
6950 char bytes[sizeof(T)];
6954 const T *addr() const { return (const T *)u.bytes; }
6955 T *addr() { return (T *)(void *)u.bytes; }
6957 # 214 "./../../dist/include/mozilla/Util.h"
6961 AlignedStorage2<T> storage;
6964 T &asT() { return *storage.addr(); }
6966 explicit Maybe(const Maybe &other);
6967 const Maybe &operator=(const Maybe &other);
6970 Maybe() { constructed = false; }
6971 ~Maybe() { if (constructed) asT().~T(); }
6973 bool empty() const { return !constructed; }
6977 new(storage.addr()) T();
6982 void construct(const T1 &t1) {
6984 new(storage.addr()) T(t1);
6988 template <class T1, class T2>
6989 void construct(const T1 &t1, const T2 &t2) {
6991 new(storage.addr()) T(t1, t2);
6995 template <class T1, class T2, class T3>
6996 void construct(const T1 &t1, const T2 &t2, const T3 &t3) {
6998 new(storage.addr()) T(t1, t2, t3);
7002 template <class T1, class T2, class T3, class T4>
7003 void construct(const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4) {
7005 new(storage.addr()) T(t1, t2, t3, t4);
7019 const T &ref() const {
7021 return const_cast<Maybe *>(this)->asT();
7026 constructed = false;
7029 void destroyIfConstructed() {
7042 __attribute__((always_inline)) inline size_t
7043 PointerRangeSize(T* begin, T* end)
7046 return (size_t(end) - size_t(begin)) / sizeof(T);
7055 template<typename T, size_t N>
7057 ArrayLength(T (&arr)[N])
7067 template<typename T, size_t N>
7069 ArrayEnd(T (&arr)[N])
7071 return arr + ArrayLength(arr);
7075 # 25 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h" 2
7076 # 49 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7077 #define JS_EXTERN_API(type) extern MOZ_EXPORT_API(type)
7078 #define JS_EXPORT_API(type) MOZ_EXPORT_API(type)
7079 #define JS_EXPORT_DATA(type) MOZ_EXPORT_DATA(type)
7080 #define JS_IMPORT_API(type) MOZ_IMPORT_API(type)
7081 #define JS_IMPORT_DATA(type) MOZ_IMPORT_DATA(type)
7082 # 65 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7083 #define JS_PUBLIC_API(t) MOZ_EXPORT_API(t)
7084 #define JS_PUBLIC_DATA(t) MOZ_EXPORT_DATA(t)
7090 #define JS_FRIEND_API(t) JS_PUBLIC_API(t)
7091 #define JS_FRIEND_DATA(t) JS_PUBLIC_DATA(t)
7100 #define JS_NO_FASTCALL
7104 #define JS_INLINE MOZ_INLINE
7108 #define JS_ALWAYS_INLINE MOZ_ALWAYS_INLINE
7112 #define JS_NEVER_INLINE MOZ_NEVER_INLINE
7117 #define JS_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
7118 # 112 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7119 #define JS_BEGIN_MACRO do {
7126 #define JS_END_MACRO } while (0)
7127 # 128 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7128 #define JS_BEGIN_EXTERN_C MOZ_BEGIN_EXTERN_C
7129 #define JS_END_EXTERN_C MOZ_END_EXTERN_C
7137 #define JS_BIT(n) ((uint32_t)1 << (n))
7138 #define JS_BITMASK(n) (JS_BIT(n) - 1)
7139 # 148 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7140 #define JS_HOWMANY(x,y) (((x)+(y)-1)/(y))
7141 #define JS_ROUNDUP(x,y) (JS_HOWMANY(x,y)*(y))
7142 #define JS_MIN(x,y) ((x)<(y)?(x):(y))
7143 #define JS_MAX(x,y) ((x)>(y)?(x):(y))
7145 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscpucfg.h" 1
7153 #define js_cpucfg___
7155 #define JS_HAVE_LONG_LONG
7156 # 65 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscpucfg.h"
7157 #define IS_LITTLE_ENDIAN 1
7158 #undef IS_BIG_ENDIAN
7159 # 130 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscpucfg.h"
7160 #define JS_STACK_GROWTH_DIRECTION (-1)
7161 # 154 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h" 2
7162 # 186 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7164 # 196 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7166 #define JS_TRUE (int)1
7167 #define JS_FALSE (int)0
7168 # 218 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7169 #define JS_LIKELY(x) (__builtin_expect((x), 1))
7170 #define JS_UNLIKELY(x) (__builtin_expect((x), 0))
7171 # 245 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7172 #define JS_ARRAY_LENGTH(array) (sizeof (array) / sizeof (array)[0])
7173 #define JS_ARRAY_END(array) ((array) + JS_ARRAY_LENGTH(array))
7175 #define JS_BITS_PER_BYTE 8
7176 #define JS_BITS_PER_BYTE_LOG2 3
7178 #define JS_BITS_PER_WORD (JS_BITS_PER_BYTE * JS_BYTES_PER_WORD)
7179 #define JS_BITS_PER_DOUBLE (JS_BITS_PER_BYTE * JS_BYTES_PER_DOUBLE)
7180 # 271 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h"
7181 #define JS_FUNC_TO_DATA_PTR(type,fun) (__extension__ (type) (size_t) (fun))
7182 #define JS_DATA_TO_FUNC_PTR(type,ptr) (__extension__ (type) (size_t) (ptr))
7190 #define JS_EXTENSION __extension__
7191 #define JS_EXTENSION_(s) __extension__ ({ s; })
7198 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspubtd.h" 2
7205 namespace JS { class Value; }
7206 # 53 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspubtd.h"
7207 typedef ptrdiff_t jsid;
7208 #define JSID_BITS(id) (id)
7220 typedef uint16_t jschar;
7228 typedef enum JSVersion {
7229 JSVERSION_1_0 = 100,
7230 JSVERSION_1_1 = 110,
7231 JSVERSION_1_2 = 120,
7232 JSVERSION_1_3 = 130,
7233 JSVERSION_1_4 = 140,
7234 JSVERSION_ECMA_3 = 148,
7235 JSVERSION_1_5 = 150,
7236 JSVERSION_1_6 = 160,
7237 JSVERSION_1_7 = 170,
7238 JSVERSION_1_8 = 180,
7239 JSVERSION_ECMA_5 = 185,
7240 JSVERSION_DEFAULT = 0,
7241 JSVERSION_UNKNOWN = -1,
7242 JSVERSION_LATEST = JSVERSION_ECMA_5
7245 #define JSVERSION_IS_ECMA(version) ((version) == JSVERSION_DEFAULT || (version) >= JSVERSION_1_3)
7249 typedef enum JSType {
7262 typedef enum JSProtoKey {
7263 #define JS_PROTO(name,code,init) JSProto_ ##name = code,
7264 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsproto.tbl" 1
7272 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h" 1
7273 # 11 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
7274 #define JS_VERSION 185
7275 # 42 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
7276 #define JS_VERSION_ECMA_3 148
7277 #define JS_VERSION_ECMA_3_TEST 149
7278 # 124 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
7279 #define JS_HAS_STR_HTML_HELPERS 1
7280 #define JS_HAS_OBJ_PROTO_PROP 1
7281 #define JS_HAS_OBJ_WATCHPOINT 1
7282 #define JS_HAS_TOSOURCE 1
7283 #define JS_HAS_CATCH_GUARD 1
7284 #define JS_HAS_UNEVAL 1
7285 #define JS_HAS_CONST 1
7286 #define JS_HAS_FUN_EXPR_STMT 1
7287 #define JS_HAS_NO_SUCH_METHOD 1
7288 #define JS_HAS_GENERATORS 1
7289 #define JS_HAS_BLOCK_SCOPE 1
7290 #define JS_HAS_DESTRUCTURING 2
7291 #define JS_HAS_GENERATOR_EXPRS 1
7292 #define JS_HAS_EXPR_CLOSURES 1
7293 # 146 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
7294 #define JS_HAS_NEW_GLOBAL_OBJECT 1
7297 #define JS_HAS_MAKE_SYSTEM_OBJECT 1
7300 #define JS_HAS_DESTRUCTURING_SHORTHAND (JS_HAS_DESTRUCTURING == 2)
7306 #define OLD_GETTER_SETTER_METHODS 1
7309 #define USE_NEW_OBJECT_REPRESENTATION 0
7314 #define NEW_OBJECT_REPRESENTATION_ONLY() MOZ_NOT_REACHED("don't call this! to be used in the new object representation")
7315 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsproto.tbl" 2
7318 #define XML_INIT js_InitXMLClass
7319 #define NAMESPACE_INIT js_InitNamespaceClass
7320 #define QNAME_INIT js_InitQNameClass
7321 #define XMLFILTER_INIT js_InitXMLFilterClass
7322 # 27 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsproto.tbl"
7325 JSProto_Function = 2,
7327 JSProto_Boolean = 4,
7333 JSProto_RegExp = 10,
7335 JSProto_Namespace = 12,
7338 JSProto_InternalError = 15,
7339 JSProto_EvalError = 16,
7340 JSProto_RangeError = 17,
7341 JSProto_ReferenceError = 18,
7342 JSProto_SyntaxError = 19,
7343 JSProto_TypeError = 20,
7344 JSProto_URIError = 21,
7345 JSProto_Iterator = 22,
7346 JSProto_StopIteration = 23,
7347 JSProto_ArrayBuffer = 24,
7348 JSProto_Int8Array = 25,
7349 JSProto_Uint8Array = 26,
7350 JSProto_Int16Array = 27,
7351 JSProto_Uint16Array = 28,
7352 JSProto_Int32Array = 29,
7353 JSProto_Uint32Array = 30,
7354 JSProto_Float32Array = 31,
7355 JSProto_Float64Array = 32,
7356 JSProto_Uint8ClampedArray = 33,
7358 JSProto_AnyName = 35,
7359 JSProto_WeakMap = 36,
7362 JSProto_DataView = 39,
7365 #undef NAMESPACE_INIT
7367 # 111 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspubtd.h" 2
7373 typedef enum JSAccessMode {
7388 #define JSACC_TYPEMASK (JSACC_WRITE - 1)
7394 typedef enum JSIterateOp {
7399 JSENUMERATE_INIT_ALL,
7423 JSTRACE_TYPE_OBJECT,
7424 JSTRACE_LAST = JSTRACE_TYPE_OBJECT
7428 typedef struct JSClass JSClass;
7429 typedef struct JSCompartment JSCompartment;
7430 typedef struct JSConstDoubleSpec JSConstDoubleSpec;
7431 typedef struct JSContext JSContext;
7432 typedef struct JSCrossCompartmentCall JSCrossCompartmentCall;
7433 typedef struct JSErrorReport JSErrorReport;
7434 typedef struct JSExceptionState JSExceptionState;
7435 typedef struct JSFunction JSFunction;
7436 typedef struct JSFunctionSpec JSFunctionSpec;
7437 typedef struct JSIdArray JSIdArray;
7438 typedef struct JSLocaleCallbacks JSLocaleCallbacks;
7439 typedef struct JSObject JSObject;
7440 typedef struct JSObjectMap JSObjectMap;
7441 typedef struct JSPrincipals JSPrincipals;
7442 typedef struct JSPropertyDescriptor JSPropertyDescriptor;
7443 typedef struct JSPropertyName JSPropertyName;
7444 typedef struct JSPropertySpec JSPropertySpec;
7445 typedef struct JSRuntime JSRuntime;
7446 typedef struct JSSecurityCallbacks JSSecurityCallbacks;
7447 typedef struct JSStackFrame JSStackFrame;
7448 typedef struct JSScript JSScript;
7449 typedef struct JSStructuredCloneCallbacks JSStructuredCloneCallbacks;
7450 typedef struct JSStructuredCloneReader JSStructuredCloneReader;
7451 typedef struct JSStructuredCloneWriter JSStructuredCloneWriter;
7452 typedef struct JSTracer JSTracer;
7463 typedef struct PRCallOnceType JSCallOnceType;
7467 typedef JSBool (*JSInitCallback)(void);
7475 template <typename T>
7484 THING_ROOT_BASE_SHAPE,
7485 THING_ROOT_TYPE_OBJECT,
7494 struct ContextFriendFields {
7495 JSRuntime *const runtime;
7497 ContextFriendFields(JSRuntime *rt)
7500 static const ContextFriendFields *get(const JSContext *cx) {
7501 return reinterpret_cast<const ContextFriendFields *>(cx);
7504 static ContextFriendFields *get(JSContext *cx) {
7505 return reinterpret_cast<ContextFriendFields *>(cx);
7507 # 272 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspubtd.h"
7511 # 22 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
7512 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h" 1
7513 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h"
7518 # 1 "./../../dist/include/js/Utility.h" 1
7519 # 9 "./../../dist/include/js/Utility.h"
7520 #define js_utility_h__
7525 # 1 "/usr/include/string.h" 1 3 4
7526 # 25 "/usr/include/string.h" 3 4
7534 #define __need_size_t
7536 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
7537 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
7538 #undef __need_ptrdiff_t
7539 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
7540 #undef __need_size_t
7541 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
7542 #undef __need_wchar_t
7543 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
7547 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
7553 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
7554 # 35 "/usr/include/string.h" 2 3 4
7558 #define __CORRECT_ISO_CPP_STRING_H_PROTO
7564 extern void *memcpy (void *__restrict __dest,
7565 __const void *__restrict __src, size_t __n)
7566 throw () __attribute__ ((__nonnull__ (1, 2)));
7569 extern void *memmove (void *__dest, __const void *__src, size_t __n)
7570 throw () __attribute__ ((__nonnull__ (1, 2)));
7577 extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
7578 int __c, size_t __n)
7579 throw () __attribute__ ((__nonnull__ (1, 2)));
7585 extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
7588 extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
7589 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7595 extern void *memchr (void *__s, int __c, size_t __n)
7596 throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7597 extern __const void *memchr (__const void *__s, int __c, size_t __n)
7598 throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7601 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) void *
7602 memchr (void *__s, int __c, size_t __n) throw ()
7604 return __builtin_memchr (__s, __c, __n);
7607 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __const void *
7608 memchr (__const void *__s, int __c, size_t __n) throw ()
7610 return __builtin_memchr (__s, __c, __n);
7624 extern "C++" void *rawmemchr (void *__s, int __c)
7625 throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7626 extern "C++" __const void *rawmemchr (__const void *__s, int __c)
7627 throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7635 extern "C++" void *memrchr (void *__s, int __c, size_t __n)
7636 throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7637 extern "C++" __const void *memrchr (__const void *__s, int __c, size_t __n)
7638 throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7648 extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
7649 throw () __attribute__ ((__nonnull__ (1, 2)));
7651 extern char *strncpy (char *__restrict __dest,
7652 __const char *__restrict __src, size_t __n)
7653 throw () __attribute__ ((__nonnull__ (1, 2)));
7656 extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
7657 throw () __attribute__ ((__nonnull__ (1, 2)));
7659 extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
7660 size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
7663 extern int strcmp (__const char *__s1, __const char *__s2)
7664 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7666 extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
7667 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7670 extern int strcoll (__const char *__s1, __const char *__s2)
7671 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7673 extern size_t strxfrm (char *__restrict __dest,
7674 __const char *__restrict __src, size_t __n)
7675 throw () __attribute__ ((__nonnull__ (2)));
7677 # 165 "/usr/include/string.h" 3 4
7678 extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
7679 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
7681 extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
7682 __locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4)));
7688 extern char *strdup (__const char *__s)
7689 throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
7696 extern char *strndup (__const char *__string, size_t __n)
7697 throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
7702 #define strdupa(s) (__extension__ ({ __const char *__old = (s); size_t __len = strlen (__old) + 1; char *__new = (char *) __builtin_alloca (__len); (char *) memcpy (__new, __old, __len); }))
7703 # 199 "/usr/include/string.h" 3 4
7704 #define strndupa(s,n) (__extension__ ({ __const char *__old = (s); size_t __len = strnlen (__old, (n)); char *__new = (char *) __builtin_alloca (__len + 1); __new[__len] = '\0'; (char *) memcpy (__new, __old, __len); }))
7705 # 210 "/usr/include/string.h" 3 4
7711 extern char *strchr (char *__s, int __c)
7712 throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7713 extern __const char *strchr (__const char *__s, int __c)
7714 throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7717 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
7718 strchr (char *__s, int __c) throw ()
7720 return __builtin_strchr (__s, __c);
7723 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __const char *
7724 strchr (__const char *__s, int __c) throw ()
7726 return __builtin_strchr (__s, __c);
7738 extern char *strrchr (char *__s, int __c)
7739 throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7740 extern __const char *strrchr (__const char *__s, int __c)
7741 throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7744 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
7745 strrchr (char *__s, int __c) throw ()
7747 return __builtin_strrchr (__s, __c);
7750 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __const char *
7751 strrchr (__const char *__s, int __c) throw ()
7753 return __builtin_strrchr (__s, __c);
7767 extern "C++" char *strchrnul (char *__s, int __c)
7768 throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7769 extern "C++" __const char *strchrnul (__const char *__s, int __c)
7770 throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7780 extern size_t strcspn (__const char *__s, __const char *__reject)
7781 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7784 extern size_t strspn (__const char *__s, __const char *__accept)
7785 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7790 extern char *strpbrk (char *__s, __const char *__accept)
7791 throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7792 extern __const char *strpbrk (__const char *__s, __const char *__accept)
7793 throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7796 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
7797 strpbrk (char *__s, __const char *__accept) throw ()
7799 return __builtin_strpbrk (__s, __accept);
7802 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __const char *
7803 strpbrk (__const char *__s, __const char *__accept) throw ()
7805 return __builtin_strpbrk (__s, __accept);
7817 extern char *strstr (char *__haystack, __const char *__needle)
7818 throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7819 extern __const char *strstr (__const char *__haystack,
7820 __const char *__needle)
7821 throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7824 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
7825 strstr (char *__haystack, __const char *__needle) throw ()
7827 return __builtin_strstr (__haystack, __needle);
7830 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __const char *
7831 strstr (__const char *__haystack, __const char *__needle) throw ()
7833 return __builtin_strstr (__haystack, __needle);
7844 extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
7845 throw () __attribute__ ((__nonnull__ (2)));
7850 extern char *__strtok_r (char *__restrict __s,
7851 __const char *__restrict __delim,
7852 char **__restrict __save_ptr)
7853 throw () __attribute__ ((__nonnull__ (2, 3)));
7855 extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
7856 char **__restrict __save_ptr)
7857 throw () __attribute__ ((__nonnull__ (2, 3)));
7863 extern "C++" char *strcasestr (char *__haystack, __const char *__needle)
7864 throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7865 extern "C++" __const char *strcasestr (__const char *__haystack,
7866 __const char *__needle)
7867 throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7868 # 382 "/usr/include/string.h" 3 4
7869 extern void *memmem (__const void *__haystack, size_t __haystacklen,
7870 __const void *__needle, size_t __needlelen)
7871 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
7875 extern void *__mempcpy (void *__restrict __dest,
7876 __const void *__restrict __src, size_t __n)
7877 throw () __attribute__ ((__nonnull__ (1, 2)));
7878 extern void *mempcpy (void *__restrict __dest,
7879 __const void *__restrict __src, size_t __n)
7880 throw () __attribute__ ((__nonnull__ (1, 2)));
7886 extern size_t strlen (__const char *__s)
7887 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7893 extern size_t strnlen (__const char *__string, size_t __maxlen)
7894 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7900 extern char *strerror (int __errnum) throw ();
7902 # 438 "/usr/include/string.h" 3 4
7903 extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
7904 throw () __attribute__ ((__nonnull__ (2)));
7910 extern char *strerror_l (int __errnum, __locale_t __l) throw ();
7916 extern void __bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
7920 extern void bcopy (__const void *__src, void *__dest, size_t __n)
7921 throw () __attribute__ ((__nonnull__ (1, 2)));
7924 extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
7927 extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
7928 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
7934 extern char *index (char *__s, int __c)
7935 throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7936 extern __const char *index (__const char *__s, int __c)
7937 throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7940 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
7941 index (char *__s, int __c) throw ()
7943 return __builtin_index (__s, __c);
7946 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __const char *
7947 index (__const char *__s, int __c) throw ()
7949 return __builtin_index (__s, __c);
7962 extern char *rindex (char *__s, int __c)
7963 throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7964 extern __const char *rindex (__const char *__s, int __c)
7965 throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
7968 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
7969 rindex (char *__s, int __c) throw ()
7971 return __builtin_rindex (__s, __c);
7974 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) __const char *
7975 rindex (__const char *__s, int __c) throw ()
7977 return __builtin_rindex (__s, __c);
7988 extern int ffs (int __i) throw () __attribute__ ((__const__));
7993 extern int ffsl (long int __l) throw () __attribute__ ((__const__));
7995 __extension__ extern int ffsll (long long int __ll)
7996 throw () __attribute__ ((__const__));
8001 extern int strcasecmp (__const char *__s1, __const char *__s2)
8002 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
8005 extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
8006 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
8012 extern int strcasecmp_l (__const char *__s1, __const char *__s2,
8014 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
8016 extern int strncasecmp_l (__const char *__s1, __const char *__s2,
8017 size_t __n, __locale_t __loc)
8018 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
8024 extern char *strsep (char **__restrict __stringp,
8025 __const char *__restrict __delim)
8026 throw () __attribute__ ((__nonnull__ (1, 2)));
8031 extern char *strsignal (int __sig) throw ();
8034 extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
8035 throw () __attribute__ ((__nonnull__ (1, 2)));
8036 extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
8037 throw () __attribute__ ((__nonnull__ (1, 2)));
8041 extern char *__stpncpy (char *__restrict __dest,
8042 __const char *__restrict __src, size_t __n)
8043 throw () __attribute__ ((__nonnull__ (1, 2)));
8044 extern char *stpncpy (char *__restrict __dest,
8045 __const char *__restrict __src, size_t __n)
8046 throw () __attribute__ ((__nonnull__ (1, 2)));
8051 extern int strverscmp (__const char *__s1, __const char *__s2)
8052 throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
8055 extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1)));
8058 extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
8066 extern "C++" char *basename (char *__filename)
8067 throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
8068 extern "C++" __const char *basename (__const char *__filename)
8069 throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
8070 # 642 "/usr/include/string.h" 3 4
8071 # 1 "/usr/include/bits/string3.h" 1 3 4
8072 # 23 "/usr/include/bits/string3.h" 3 4
8073 extern void __warn_memset_zero_len (void) __attribute__((__warning__ ("memset used with constant zero length parameter; this could be due to transposed parameters")))
8075 # 48 "/usr/include/bits/string3.h" 3 4
8076 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) void *
8077 memcpy (void *__restrict __dest, __const void *__restrict __src, size_t __len) throw ()
8080 return __builtin___memcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
8083 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) void *
8084 memmove (void *__dest, __const void *__src, size_t __len) throw ()
8086 return __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
8090 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) void *
8091 mempcpy (void *__restrict __dest, __const void *__restrict __src, size_t __len) throw ()
8094 return __builtin___mempcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
8096 # 76 "/usr/include/bits/string3.h" 3 4
8097 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) void *
8098 memset (void *__dest, int __ch, size_t __len) throw ()
8100 if (__builtin_constant_p (__len) && __len == 0
8101 && (!__builtin_constant_p (__ch) || __ch != 0))
8103 __warn_memset_zero_len ();
8106 return __builtin___memset_chk (__dest, __ch, __len, __builtin_object_size (__dest, 0));
8110 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) void
8111 bcopy (__const void *__src, void *__dest, size_t __len) throw ()
8113 (void) __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
8116 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) void
8117 bzero (void *__dest, size_t __len) throw ()
8119 (void) __builtin___memset_chk (__dest, '\0', __len, __builtin_object_size (__dest, 0));
8123 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
8124 strcpy (char *__restrict __dest, __const char *__restrict __src) throw ()
8126 return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
8130 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
8131 stpcpy (char *__restrict __dest, __const char *__restrict __src) throw ()
8133 return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
8138 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
8139 strncpy (char *__restrict __dest, __const char *__restrict __src, size_t __len) throw ()
8142 return __builtin___strncpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
8146 extern char *__stpncpy_chk (char *__dest, __const char *__src, size_t __n,
8147 size_t __destlen) throw ();
8148 extern char *__stpncpy_alias (char *__dest, __const char *__src, size_t __n) throw () __asm__ ("" "stpncpy")
8152 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
8153 stpncpy (char *__dest, __const char *__src, size_t __n) throw ()
8155 if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1
8156 && (!__builtin_constant_p (__n) || __n <= __builtin_object_size (__dest, 2 > 1)))
8157 return __stpncpy_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1));
8158 return __stpncpy_alias (__dest, __src, __n);
8162 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
8163 strcat (char *__restrict __dest, __const char *__restrict __src) throw ()
8165 return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
8169 extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__, __artificial__)) char *
8170 strncat (char *__restrict __dest, __const char *__restrict __src, size_t __len) throw ()
8173 return __builtin___strncat_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
8175 # 643 "/usr/include/string.h" 2 3 4
8180 # 15 "./../../dist/include/js/Utility.h" 2
8187 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypes.h" 1
8188 # 22 "./../../dist/include/js/Utility.h" 2
8196 namespace mozilla {}
8203 using namespace mozilla;
8214 #define JS_FREE_PATTERN 0xDA
8216 #define JS_ASSERT(expr) MOZ_ASSERT(expr)
8217 #define JS_ASSERT_IF(cond,expr) MOZ_ASSERT_IF(cond, expr)
8218 #define JS_NOT_REACHED(reason) MOZ_NOT_REACHED(reason)
8219 #define JS_ALWAYS_TRUE(expr) MOZ_ALWAYS_TRUE(expr)
8220 #define JS_ALWAYS_FALSE(expr) MOZ_ALWAYS_FALSE(expr)
8221 # 62 "./../../dist/include/js/Utility.h"
8222 #define JS_THREADSAFE_ASSERT(expr) ((void) 0)
8225 #define JS_STATIC_ASSERT(cond) MOZ_STATIC_ASSERT(cond, "JS_STATIC_ASSERT")
8226 #define JS_STATIC_ASSERT_IF(cond,expr) MOZ_STATIC_ASSERT_IF(cond, expr, "JS_STATIC_ASSERT_IF")
8233 extern __attribute__((visibility("default"))) void JS_Abort(void);
8234 # 140 "./../../dist/include/js/Utility.h"
8235 #define JS_OOM_POSSIBLY_FAIL() do {} while(0)
8236 #define JS_OOM_POSSIBLY_FAIL_REPORT(cx) do {} while(0)
8244 static inline void* js_malloc(size_t bytes)
8247 return malloc(bytes);
8250 static inline void* js_calloc(size_t bytes)
8253 return calloc(bytes, 1);
8256 static inline void* js_realloc(void* p, size_t bytes)
8259 return realloc(p, bytes);
8262 static inline void js_free(void* p)
8266 # 234 "./../../dist/include/js/Utility.h"
8267 #define js_bitscan_ctz32(val) __builtin_ctz(val)
8268 #define js_bitscan_clz32(val) __builtin_clz(val)
8269 #define JS_HAS_BUILTIN_BITSCAN32
8270 # 255 "./../../dist/include/js/Utility.h"
8271 #define JS_CEILING_LOG2(_log2,_n) JS_BEGIN_MACRO unsigned int j_ = (unsigned int)(_n); (_log2) = (j_ <= 1 ? 0 : 32 - js_bitscan_clz32(j_ - 1)); JS_END_MACRO
8272 # 292 "./../../dist/include/js/Utility.h"
8273 #define JS_FLOOR_LOG2(_log2,_n) JS_BEGIN_MACRO (_log2) = 31 - js_bitscan_clz32(((unsigned int)(_n)) | 1); JS_END_MACRO
8274 # 316 "./../../dist/include/js/Utility.h"
8275 #define js_FloorLog2wImpl(n) ((size_t)(JS_BITS_PER_WORD - 1 - js_bitscan_clz32(n)))
8276 # 338 "./../../dist/include/js/Utility.h"
8277 #define JS_CEILING_LOG2W(n) ((n) <= 1 ? 0 : 1 + JS_FLOOR_LOG2W((n) - 1))
8285 static __attribute__((always_inline)) inline size_t
8286 JS_FLOOR_LOG2W(size_t n)
8289 return ((size_t)((8 * 4) - 1 - __builtin_clz(n)));
8293 # 437 "./../../dist/include/js/Utility.h"
8294 #define JS_NEW_BODY(allocator,t,parms) void *memory = allocator(sizeof(t)); return memory ? new(memory) t parms : NULL;
8295 # 450 "./../../dist/include/js/Utility.h"
8296 #define JS_DECLARE_NEW_METHODS(ALLOCATOR,QUALIFIERS) template <class T> QUALIFIERS T *new_() { JS_NEW_BODY(ALLOCATOR, T, ()) } template <class T, class P1> QUALIFIERS T *new_(P1 p1) { JS_NEW_BODY(ALLOCATOR, T, (p1)) } template <class T, class P1, class P2> QUALIFIERS T *new_(P1 p1, P2 p2) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2)) } template <class T, class P1, class P2, class P3> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3)) } template <class T, class P1, class P2, class P3, class P4> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3, P4 p4) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3, p4)) } template <class T, class P1, class P2, class P3, class P4, class P5> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3, p4, p5)) } template <class T, class P1, class P2, class P3, class P4, class P5, class P6> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3, p4, p5, p6)) } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3, p4, p5, p6, p7)) } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3, p4, p5, p6, p7, p8)) } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3, p4, p5, p6, p7, p8, p9)) } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)) } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)) } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12> QUALIFIERS T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12) { JS_NEW_BODY(ALLOCATOR, T, (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12)) } static const int JSMinAlignment = 8; template <class T> QUALIFIERS T *array_new(size_t n) { uint64_t numBytes64 = uint64_t(JSMinAlignment) + uint64_t(sizeof(T)) * uint64_t(n); size_t numBytes = size_t(numBytes64); if (numBytes64 != numBytes) { JS_ASSERT(0); return NULL; } void *memory = ALLOCATOR(numBytes); if (!memory) return NULL; *(size_t *)memory = n; memory = (void*)(uintptr_t(memory) + JSMinAlignment); return new(memory) T[n]; }
8297 # 534 "./../../dist/include/js/Utility.h"
8298 #define JS_DECLARE_DELETE_METHODS(DEALLOCATOR,QUALIFIERS) template <class T> QUALIFIERS void delete_(T *p) { if (p) { p->~T(); DEALLOCATOR(p); } } template <class T> QUALIFIERS void array_delete(T *p) { if (p) { void* p0 = (void *)(uintptr_t(p) - js::OffTheBooks::JSMinAlignment); size_t n = *(size_t *)p0; for (size_t i = 0; i < n; i++) (p + i)->~T(); DEALLOCATOR(p0); } }
8299 # 561 "./../../dist/include/js/Utility.h"
8304 template <class T> __attribute__((always_inline)) inline static T *new_() { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T () : __null; } template <class T, class P1> __attribute__((always_inline)) inline static T *new_(P1 p1) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1) : __null; } template <class T, class P1, class P2> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2) : __null; } template <class T, class P1, class P2, class P3> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3) : __null; } template <class T, class P1, class P2, class P3, class P4> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3, P4 p4) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12> __attribute__((always_inline)) inline static T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12) { void *memory = ::js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) : __null; } static const int JSMinAlignment = 8; template <class T> __attribute__((always_inline)) inline static T *array_new(size_t n) { uint64_t numBytes64 = uint64_t(JSMinAlignment) + uint64_t(sizeof(T)) * uint64_t(n); size_t numBytes = size_t(numBytes64); if (numBytes64 != numBytes) { do { } while(0); return __null; } void *memory = ::js_malloc(numBytes); if (!memory) return __null; *(size_t *)memory = n; memory = (void*)(uintptr_t(memory) + JSMinAlignment); return new(memory) T[n]; }
8306 static inline void* malloc_(size_t bytes) {
8307 return ::js_malloc(bytes);
8310 static inline void* calloc_(size_t bytes) {
8311 return ::js_calloc(bytes);
8314 static inline void* realloc_(void* p, size_t bytes) {
8315 return ::js_realloc(p, bytes);
8326 static __attribute__((always_inline)) inline void free_(void* p) {
8330 template <class T> __attribute__((always_inline)) inline static void delete_(T *p) { if (p) { p->~T(); ::js_free(p); } } template <class T> __attribute__((always_inline)) inline static void array_delete(T *p) { if (p) { void* p0 = (void *)(uintptr_t(p) - js::OffTheBooks::JSMinAlignment); size_t n = *(size_t *)p0; for (size_t i = 0; i < n; i++) (p + i)->~T(); ::js_free(p0); } }
8333 class UnwantedForeground : public Foreground {
8342 #define JS_DECLARE_ALLOCATION_FRIENDS_FOR_PRIVATE_CONSTRUCTOR friend class js::OffTheBooks; friend class js::Foreground; friend class js::UnwantedForeground; friend struct ::JSContext; friend struct ::JSRuntime
8343 # 701 "./../../dist/include/js/Utility.h"
8344 #define JS_DECL_USE_GUARD_OBJECT_NOTIFIER
8345 #define JS_GUARD_OBJECT_NOTIFIER_PARAM
8346 #define JS_GUARD_OBJECT_NOTIFIER_PARAM_NO_INIT
8347 #define JS_GUARD_OBJECT_NOTIFIER_PARAM0
8348 #define JS_GUARD_OBJECT_NOTIFIER_INIT JS_BEGIN_MACRO JS_END_MACRO
8353 # 811 "./../../dist/include/js/Utility.h"
8354 template<typename T>
8358 explicit MoveRef(T &t) : pointer(&t) { }
8359 T &operator*() const { return *pointer; }
8360 T *operator->() const { return pointer; }
8361 # 830 "./../../dist/include/js/Utility.h"
8362 operator T& () const { return *pointer; }
8368 template<typename T>
8369 MoveRef<T> Move(T &t) { return MoveRef<T>(t); }
8371 template<typename T>
8372 MoveRef<T> Move(const T &t) { return MoveRef<T>(const_cast<T &>(t)); }
8375 class ReentrancyGuard
8378 ReentrancyGuard(const ReentrancyGuard &);
8379 void operator=(const ReentrancyGuard &);
8390 ReentrancyGuard(T & )
8410 __attribute__((always_inline)) inline size_t
8411 RoundUpPow2(size_t x)
8413 return size_t(1) << ((x) <= 1 ? 0 : 1 + JS_FLOOR_LOG2W((x) - 1));
8419 # 899 "./../../dist/include/js/Utility.h"
8420 inline void PoisonPtr(uintptr_t *v)
8428 template <typename T>
8429 inline bool IsPoisonedPtr(T *v)
8446 typedef size_t(*JSMallocSizeOfFun)(const void *p);
8450 #define HAVE_STATIC_ANNOTATIONS
8451 # 955 "./../../dist/include/js/Utility.h"
8452 #define STATIC_PRECONDITION(COND)
8453 #define STATIC_PRECONDITION_ASSUME(COND)
8454 #define STATIC_POSTCONDITION(COND)
8455 #define STATIC_POSTCONDITION_ASSUME(COND)
8456 #define STATIC_INVARIANT(COND)
8457 #define STATIC_INVARIANT_ASSUME(COND)
8458 #define STATIC_ASSERT(COND) JS_BEGIN_MACRO JS_END_MACRO
8459 #define STATIC_ASSUME(COND) JS_BEGIN_MACRO JS_END_MACRO
8460 #define STATIC_ASSERT_RUNTIME(COND) JS_BEGIN_MACRO JS_END_MACRO
8462 #define STATIC_SKIP_INFERENCE STATIC_INVARIANT(skip_inference())
8463 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h" 2
8468 static __attribute__((always_inline)) inline void *
8469 js_memcpy(void *dst_, const void *src_, size_t len)
8471 char *dst = (char *) dst_;
8472 const char *src = (const char *) src_;
8476 return memcpy(dst, src, len);
8483 struct AlignmentTestStruct
8490 #define JS_ALIGNMENT_OF(t_) (sizeof(js::AlignmentTestStruct<t_>) - sizeof(t_))
8494 class AlignedPtrAndFlag
8499 AlignedPtrAndFlag(T *t, bool flag) {
8501 bits = uintptr_t(t) | uintptr_t(flag);
8505 return (T *)(bits & ~uintptr_t(1));
8509 return (bits & 1) != 0;
8514 bits = uintptr_t(t) | uintptr_t(flag());
8522 bits &= ~uintptr_t(1);
8525 void set(T *t, bool flag) {
8527 bits = uintptr_t(t) | flag;
8533 Reverse(T *beg, T *end)
8535 while (beg != end) {
8547 Find(T *beg, T *end, const T &v)
8549 for (T *p = beg; p != end; ++p) {
8556 template <class Container>
8557 static inline typename Container::ElementType *
8558 Find(Container &c, const typename Container::ElementType &v)
8560 return Find(c.begin(), c.end(), v);
8563 template <typename InputIterT, typename CallableT>
8565 ForEach(InputIterT begin, InputIterT end, CallableT f)
8567 for (; begin != end; ++begin)
8575 return t1 < t2 ? t1 : t2;
8582 return t1 > t2 ? t1 : t2;
8588 InitConst(const T &t)
8590 return const_cast<T &>(t);
8593 template <class T, class U>
8594 __attribute__((always_inline)) inline T &
8601 template<typename T>
8602 class AutoScopedAssign
8610 AutoScopedAssign(T *addr, const T &value )
8611 : addr(addr), old(*addr)
8617 ~AutoScopedAssign() { *addr = old; }
8621 __attribute__((always_inline)) inline static void
8624 memset(t, 0, sizeof(T));
8628 __attribute__((always_inline)) inline static void
8629 PodZero(T *t, size_t nelem)
8637 for (T *end = t + nelem; t != end; ++t)
8638 memset(t, 0, sizeof(T));
8640 # 201 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h"
8641 template <class T, size_t N> static void PodZero(T (&)[N]);
8642 template <class T, size_t N> static void PodZero(T (&)[N], size_t);
8644 template <class T, size_t N>
8645 __attribute__((always_inline)) inline static void
8646 PodArrayZero(T (&t)[N])
8648 memset(t, 0, N * sizeof(T));
8652 __attribute__((always_inline)) inline static void
8653 PodAssign(T *dst, const T *src)
8655 js_memcpy((char *) dst, (const char *) src, sizeof(T));
8659 __attribute__((always_inline)) inline static void
8660 PodCopy(T *dst, const T *src, size_t nelem)
8671 for (const T *srcend = src + nelem; src != srcend; ++src, ++dst)
8672 PodAssign(dst, src);
8674 memcpy(dst, src, nelem * sizeof(T));
8679 __attribute__((always_inline)) inline static bool
8680 PodEqual(T *one, T *two, size_t len)
8683 T *p1end = one + len;
8684 for (T *p1 = one, *p2 = two; p1 != p1end; ++p1, ++p2) {
8691 return !memcmp(one, two, len * sizeof(T));
8695 __attribute__((always_inline)) inline static void
8703 __attribute__((always_inline)) inline static size_t
8704 UnsignedPtrDiff(const void *bigger, const void *smaller)
8706 return size_t(bigger) - size_t(smaller);
8708 # 276 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h"
8709 enum MaybeReportError { REPORT_ERROR = true, DONT_REPORT_ERROR = false };
8715 static inline unsigned
8716 NumWordsForBitArrayOfLength(size_t length)
8718 return (length + ((8 * 4) - 1)) / (8 * 4);
8721 static inline unsigned
8722 BitArrayIndexToWordIndex(size_t length, size_t bitIndex)
8724 unsigned wordIndex = bitIndex / (8 * 4);
8729 static inline size_t
8730 BitArrayIndexToWordMask(size_t i)
8732 return size_t(1) << (i % (8 * 4));
8736 IsBitArrayElementSet(size_t *array, size_t length, size_t i)
8738 return array[BitArrayIndexToWordIndex(length, i)] & BitArrayIndexToWordMask(i);
8742 IsAnyBitArrayElementSet(size_t *array, size_t length)
8744 unsigned numWords = NumWordsForBitArrayOfLength(length);
8745 for (unsigned i = 0; i < numWords; ++i) {
8753 SetBitArrayElement(size_t *array, size_t length, size_t i)
8755 array[BitArrayIndexToWordIndex(length, i)] |= BitArrayIndexToWordMask(i);
8759 ClearBitArrayElement(size_t *array, size_t length, size_t i)
8761 array[BitArrayIndexToWordIndex(length, i)] &= ~BitArrayIndexToWordMask(i);
8765 ClearAllBitArrayElements(size_t *array, size_t length)
8767 for (unsigned i = 0; i < length; ++i)
8772 # 358 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h"
8773 #define JS_ROTATE_LEFT32(a,bits) (((a) << (bits)) | ((a) >> (32 - (bits))))
8774 # 370 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h"
8775 #define MUST_FLOW_THROUGH(label) ((void) 0)
8776 #define MUST_FLOW_LABEL(label)
8777 # 385 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h"
8778 #define JS_POISON(p,val,size) ((void) 0)
8779 #define JS_OPT_ASSERT(expr) ((void) 0)
8780 #define JS_OPT_ASSERT_IF(cond,expr) ((void) 0)
8781 # 419 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h"
8782 #define JS_BASIC_STATS_ACCUM(bs,val)
8786 typedef size_t jsbitmap;
8787 #define JS_TEST_BIT(_map,_bit) ((_map)[(_bit)>>JS_BITS_PER_WORD_LOG2] & ((jsbitmap)1<<((_bit)&(JS_BITS_PER_WORD-1))))
8789 #define JS_SET_BIT(_map,_bit) ((_map)[(_bit)>>JS_BITS_PER_WORD_LOG2] |= ((jsbitmap)1<<((_bit)&(JS_BITS_PER_WORD-1))))
8791 #define JS_CLEAR_BIT(_map,_bit) ((_map)[(_bit)>>JS_BITS_PER_WORD_LOG2] &= ~((jsbitmap)1<<((_bit)&(JS_BITS_PER_WORD-1))))
8792 # 449 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h"
8793 #define JS_SILENCE_UNUSED_VALUE_IN_EXPR(expr) JS_BEGIN_MACRO expr; JS_END_MACRO
8794 # 23 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
8795 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h" 1
8796 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h"
8797 #define jsvalimpl_h__
8798 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h"
8806 #define JSVAL_ALIGNMENT __attribute__((aligned (8)))
8807 # 54 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h"
8808 #define JS_ENUM_HEADER(id,type) enum id
8809 #define JS_ENUM_FOOTER(id) __attribute__((packed))
8815 JSVAL_TYPE_DOUBLE = 0x00,
8816 JSVAL_TYPE_INT32 = 0x01,
8817 JSVAL_TYPE_UNDEFINED = 0x02,
8818 JSVAL_TYPE_BOOLEAN = 0x03,
8819 JSVAL_TYPE_MAGIC = 0x04,
8820 JSVAL_TYPE_STRING = 0x05,
8821 JSVAL_TYPE_NULL = 0x06,
8822 JSVAL_TYPE_OBJECT = 0x07,
8825 JSVAL_TYPE_UNKNOWN = 0x20,
8826 JSVAL_TYPE_MISSING = 0x21
8827 } __attribute__((packed));
8829 typedef int moz_static_assert5[(sizeof(JSValueType) == 1) ? 1 : -1];
8836 JSVAL_TAG_CLEAR = 0xFFFFFF80,
8837 JSVAL_TAG_INT32 = JSVAL_TAG_CLEAR | JSVAL_TYPE_INT32,
8838 JSVAL_TAG_UNDEFINED = JSVAL_TAG_CLEAR | JSVAL_TYPE_UNDEFINED,
8839 JSVAL_TAG_STRING = JSVAL_TAG_CLEAR | JSVAL_TYPE_STRING,
8840 JSVAL_TAG_BOOLEAN = JSVAL_TAG_CLEAR | JSVAL_TYPE_BOOLEAN,
8841 JSVAL_TAG_MAGIC = JSVAL_TAG_CLEAR | JSVAL_TYPE_MAGIC,
8842 JSVAL_TAG_NULL = JSVAL_TAG_CLEAR | JSVAL_TYPE_NULL,
8843 JSVAL_TAG_OBJECT = JSVAL_TAG_CLEAR | JSVAL_TYPE_OBJECT
8844 } __attribute__((packed));
8846 typedef int moz_static_assert6[(sizeof(JSValueTag) == 4) ? 1 : -1];
8847 # 177 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h"
8848 #define JSVAL_LOWER_INCL_TYPE_OF_OBJ_OR_NULL_SET JSVAL_TYPE_NULL
8849 #define JSVAL_UPPER_EXCL_TYPE_OF_PRIMITIVE_SET JSVAL_TYPE_OBJECT
8850 #define JSVAL_UPPER_INCL_TYPE_OF_NUMBER_SET JSVAL_TYPE_INT32
8851 #define JSVAL_LOWER_INCL_TYPE_OF_PTR_PAYLOAD_SET JSVAL_TYPE_MAGIC
8855 #define JSVAL_TYPE_TO_TAG(type) ((JSValueTag)(JSVAL_TAG_CLEAR | (type)))
8857 #define JSVAL_LOWER_INCL_TAG_OF_OBJ_OR_NULL_SET JSVAL_TAG_NULL
8858 #define JSVAL_UPPER_EXCL_TAG_OF_PRIMITIVE_SET JSVAL_TAG_OBJECT
8859 #define JSVAL_UPPER_INCL_TAG_OF_NUMBER_SET JSVAL_TAG_INT32
8860 #define JSVAL_LOWER_INCL_TAG_OF_GCTHING_SET JSVAL_TAG_STRING
8861 # 205 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h"
8862 typedef enum JSWhyMagic
8865 JS_NATIVE_ENUMERATE,
8869 JS_GENERATOR_CLOSING,
8873 JS_SERIALIZE_NO_NODE,
8875 JS_UNASSIGNED_ARGUMENTS,
8876 JS_OPTIMIZED_ARGUMENTS,
8878 JS_OVERWRITTEN_CALLEE,
8884 typedef union jsval_layout
8903 } __attribute__((aligned (8))) jsval_layout;
8904 # 317 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h"
8905 typedef int moz_static_assert7[(sizeof(jsval_layout) == 8) ? 1 : -1];
8906 # 327 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h"
8907 static __attribute__((always_inline)) inline jsval_layout
8908 BUILD_JSVAL(JSValueTag tag, uint32_t payload)
8911 l.asBits = (((uint64_t)(uint32_t)tag) << 32) | payload;
8915 static __attribute__((always_inline)) inline JSBool
8916 JSVAL_IS_DOUBLE_IMPL(jsval_layout l)
8918 return (uint32_t)l.s.tag <= (uint32_t)JSVAL_TAG_CLEAR;
8921 static __attribute__((always_inline)) inline jsval_layout
8922 DOUBLE_TO_JSVAL_IMPL(double d)
8930 static __attribute__((always_inline)) inline JSBool
8931 JSVAL_IS_INT32_IMPL(jsval_layout l)
8933 return l.s.tag == JSVAL_TAG_INT32;
8936 static __attribute__((always_inline)) inline int32_t
8937 JSVAL_TO_INT32_IMPL(jsval_layout l)
8939 return l.s.payload.i32;
8942 static __attribute__((always_inline)) inline jsval_layout
8943 INT32_TO_JSVAL_IMPL(int32_t i)
8946 l.s.tag = JSVAL_TAG_INT32;
8947 l.s.payload.i32 = i;
8951 static __attribute__((always_inline)) inline JSBool
8952 JSVAL_IS_NUMBER_IMPL(jsval_layout l)
8954 JSValueTag tag = l.s.tag;
8956 return (uint32_t)tag <= (uint32_t)JSVAL_TAG_INT32;
8959 static __attribute__((always_inline)) inline JSBool
8960 JSVAL_IS_UNDEFINED_IMPL(jsval_layout l)
8962 return l.s.tag == JSVAL_TAG_UNDEFINED;
8965 static __attribute__((always_inline)) inline JSBool
8966 JSVAL_IS_STRING_IMPL(jsval_layout l)
8968 return l.s.tag == JSVAL_TAG_STRING;
8971 static __attribute__((always_inline)) inline jsval_layout
8972 STRING_TO_JSVAL_IMPL(JSString *str)
8976 l.s.tag = JSVAL_TAG_STRING;
8977 l.s.payload.str = str;
8981 static __attribute__((always_inline)) inline JSString *
8982 JSVAL_TO_STRING_IMPL(jsval_layout l)
8984 return l.s.payload.str;
8987 static __attribute__((always_inline)) inline JSBool
8988 JSVAL_IS_BOOLEAN_IMPL(jsval_layout l)
8990 return l.s.tag == JSVAL_TAG_BOOLEAN;
8993 static __attribute__((always_inline)) inline JSBool
8994 JSVAL_TO_BOOLEAN_IMPL(jsval_layout l)
8996 return l.s.payload.boo;
8999 static __attribute__((always_inline)) inline jsval_layout
9000 BOOLEAN_TO_JSVAL_IMPL(JSBool b)
9004 l.s.tag = JSVAL_TAG_BOOLEAN;
9005 l.s.payload.boo = b;
9009 static __attribute__((always_inline)) inline JSBool
9010 JSVAL_IS_MAGIC_IMPL(jsval_layout l)
9012 return l.s.tag == JSVAL_TAG_MAGIC;
9015 static __attribute__((always_inline)) inline JSBool
9016 JSVAL_IS_OBJECT_IMPL(jsval_layout l)
9018 return l.s.tag == JSVAL_TAG_OBJECT;
9021 static __attribute__((always_inline)) inline JSBool
9022 JSVAL_IS_PRIMITIVE_IMPL(jsval_layout l)
9024 return (uint32_t)l.s.tag < (uint32_t)JSVAL_TAG_OBJECT;
9027 static __attribute__((always_inline)) inline JSBool
9028 JSVAL_IS_OBJECT_OR_NULL_IMPL(jsval_layout l)
9031 return (uint32_t)l.s.tag >= (uint32_t)JSVAL_TAG_NULL;
9034 static __attribute__((always_inline)) inline JSObject *
9035 JSVAL_TO_OBJECT_IMPL(jsval_layout l)
9037 return l.s.payload.obj;
9040 static __attribute__((always_inline)) inline jsval_layout
9041 OBJECT_TO_JSVAL_IMPL(JSObject *obj)
9045 l.s.tag = JSVAL_TAG_OBJECT;
9046 l.s.payload.obj = obj;
9050 static __attribute__((always_inline)) inline JSBool
9051 JSVAL_IS_NULL_IMPL(jsval_layout l)
9053 return l.s.tag == JSVAL_TAG_NULL;
9056 static __attribute__((always_inline)) inline jsval_layout
9057 PRIVATE_PTR_TO_JSVAL_IMPL(void *ptr)
9061 l.s.tag = (JSValueTag)0;
9062 l.s.payload.ptr = ptr;
9067 static __attribute__((always_inline)) inline void *
9068 JSVAL_TO_PRIVATE_PTR_IMPL(jsval_layout l)
9070 return l.s.payload.ptr;
9073 static __attribute__((always_inline)) inline JSBool
9074 JSVAL_IS_GCTHING_IMPL(jsval_layout l)
9077 return (uint32_t)l.s.tag >= (uint32_t)JSVAL_TAG_STRING;
9080 static __attribute__((always_inline)) inline void *
9081 JSVAL_TO_GCTHING_IMPL(jsval_layout l)
9083 return l.s.payload.ptr;
9086 static __attribute__((always_inline)) inline JSBool
9087 JSVAL_IS_TRACEABLE_IMPL(jsval_layout l)
9089 return l.s.tag == JSVAL_TAG_STRING || l.s.tag == JSVAL_TAG_OBJECT;
9092 static __attribute__((always_inline)) inline uint32_t
9093 JSVAL_TRACE_KIND_IMPL(jsval_layout l)
9095 return (uint32_t)(JSBool)JSVAL_IS_STRING_IMPL(l);
9098 static __attribute__((always_inline)) inline JSBool
9099 JSVAL_IS_SPECIFIC_INT32_IMPL(jsval_layout l, int32_t i32)
9101 return l.s.tag == JSVAL_TAG_INT32 && l.s.payload.i32 == i32;
9104 static __attribute__((always_inline)) inline JSBool
9105 JSVAL_IS_SPECIFIC_BOOLEAN(jsval_layout l, JSBool b)
9107 return (l.s.tag == JSVAL_TAG_BOOLEAN) && (l.s.payload.boo == b);
9110 static __attribute__((always_inline)) inline jsval_layout
9111 MAGIC_TO_JSVAL_IMPL(JSWhyMagic why)
9114 l.s.tag = JSVAL_TAG_MAGIC;
9115 l.s.payload.why = why;
9119 static __attribute__((always_inline)) inline JSBool
9120 JSVAL_SAME_TYPE_IMPL(jsval_layout lhs, jsval_layout rhs)
9122 JSValueTag ltag = lhs.s.tag, rtag = rhs.s.tag;
9123 return ltag == rtag || (ltag < JSVAL_TAG_CLEAR && rtag < JSVAL_TAG_CLEAR);
9126 static __attribute__((always_inline)) inline jsval_layout
9127 PRIVATE_UINT32_TO_JSVAL_IMPL(uint32_t ui)
9130 l.s.tag = (JSValueTag)0;
9131 l.s.payload.u32 = ui;
9136 static __attribute__((always_inline)) inline uint32_t
9137 JSVAL_TO_PRIVATE_UINT32_IMPL(jsval_layout l)
9139 return l.s.payload.u32;
9142 static __attribute__((always_inline)) inline JSValueType
9143 JSVAL_EXTRACT_NON_DOUBLE_TYPE_IMPL(jsval_layout l)
9145 uint32_t type = l.s.tag & 0xF;
9147 return (JSValueType)type;
9149 # 820 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h"
9150 static __attribute__((always_inline)) inline double
9151 JS_CANONICALIZE_NAN(double d)
9153 if ((__builtin_expect((d != d), 0))) {
9155 l.asBits = 0x7FF8000000000000LL;
9164 static jsval_layout JSVAL_TO_IMPL(JS::Value);
9165 static JS::Value IMPL_TO_JSVAL(jsval_layout);
9166 # 24 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
9169 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Root.h" 1
9170 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Root.h"
9171 #define jsgc_root_h__
9173 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspubtd.h" 1
9174 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Root.h" 2
9181 # 62 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Root.h"
9182 template <typename T> class Rooted;
9184 template <typename T>
9185 struct RootMethods { };
9192 template <typename T>
9197 template <typename S> Handle(Handle<S> handle) {
9199 ptr = reinterpret_cast<const T *>(handle.address());
9201 # 89 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Root.h"
9202 static Handle fromMarkedLocation(const T *p) {
9212 template <typename S> inline Handle(const Rooted<S> &root);
9214 const T *address() const { return ptr; }
9215 T value() const { return *ptr; }
9217 operator T () const { return value(); }
9218 T operator ->() const { return value(); }
9225 template <typename S>
9236 typedef Handle<JSObject*> HandleObject;
9237 typedef Handle<JSFunction*> HandleFunction;
9238 typedef Handle<JSString*> HandleString;
9239 typedef Handle<jsid> HandleId;
9240 typedef Handle<Value> HandleValue;
9242 template <typename T>
9243 struct RootMethods<T *>
9245 static T *initial() { return __null; }
9246 static ThingRootKind kind() { return T::rootKind(); }
9247 static bool poisoned(T *v) { return IsPoisonedPtr(v); }
9255 template <typename T>
9258 void init(JSContext *cx_, T initial)
9260 # 158 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Root.h"
9265 Rooted(JSContext *cx) { init(cx, RootMethods<T>::initial()); }
9266 Rooted(JSContext *cx, T initial) { init(cx, initial); }
9267 # 172 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Root.h"
9268 operator Handle<T> () const { return Handle<T>(*this); }
9282 operator T () const { return ptr; }
9283 T operator ->() const { return ptr; }
9284 T * address() { return &ptr; }
9285 const T * address() const { return &ptr; }
9286 T & reference() { return ptr; }
9287 T raw() const { return ptr; }
9289 T & operator =(T value)
9296 T & operator =(const Rooted &value)
9310 Rooted(const Rooted &) ;
9313 template<typename T> template <typename S>
9315 Handle<T>::Handle(const Rooted<S> &root)
9318 ptr = reinterpret_cast<const T *>(root.address());
9321 typedef Rooted<JSObject*> RootedObject;
9322 typedef Rooted<JSFunction*> RootedFunction;
9323 typedef Rooted<JSString*> RootedString;
9324 typedef Rooted<jsid> RootedId;
9325 typedef Rooted<Value> RootedValue;
9335 # 286 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Root.h"
9337 template <typename T>
9338 SkipRoot(JSContext *cx, const T *ptr
9344 template <typename T>
9345 SkipRoot(JSContext *cx, const T *ptr, size_t count
9355 # 314 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Root.h"
9356 inline void MaybeCheckStackRoots(JSContext *cx) {}
9360 # 27 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
9363 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/limits" 1 3
9364 # 39 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/limits" 3
9365 #define _GLIBCXX_NUMERIC_LIMITS 1
9368 # 42 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/limits" 3
9369 # 81 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/limits" 3
9370 #define __glibcxx_integral_traps true
9371 # 90 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/limits" 3
9372 #define __glibcxx_float_has_denorm_loss false
9375 #define __glibcxx_float_traps false
9378 #define __glibcxx_float_tinyness_before false
9386 #define __glibcxx_double_has_denorm_loss false
9389 #define __glibcxx_double_traps false
9392 #define __glibcxx_double_tinyness_before false
9400 #define __glibcxx_long_double_has_denorm_loss false
9403 #define __glibcxx_long_double_traps false
9406 #define __glibcxx_long_double_tinyness_before false
9411 #define __glibcxx_signed(T) ((T)(-1) < 0)
9413 #define __glibcxx_min(T) (__glibcxx_signed (T) ? (T)1 << __glibcxx_digits (T) : (T)0)
9416 #define __glibcxx_max(T) (__glibcxx_signed (T) ? (((((T)1 << (__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)
9420 #define __glibcxx_digits(T) (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed (T))
9424 #define __glibcxx_digits10(T) (__glibcxx_digits (T) * 643 / 2136)
9427 #define __glibcxx_max_digits10(T) (2 + (T) * 643 / 2136)
9430 namespace std __attribute__ ((__visibility__ ("default"))) {
9437 enum float_round_style
9439 round_indeterminate = -1,
9440 round_toward_zero = 0,
9441 round_to_nearest = 1,
9442 round_toward_infinity = 2,
9443 round_toward_neg_infinity = 3
9452 enum float_denorm_style
9455 denorm_indeterminate = -1,
9461 # 190 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/limits" 3
9462 struct __numeric_limits_base
9466 static const bool is_specialized = false;
9471 static const int digits = 0;
9473 static const int digits10 = 0;
9480 static const bool is_signed = false;
9483 static const bool is_integer = false;
9488 static const bool is_exact = false;
9491 static const int radix = 0;
9495 static const int min_exponent = 0;
9498 static const int min_exponent10 = 0;
9502 static const int max_exponent = 0;
9505 static const int max_exponent10 = 0;
9508 static const bool has_infinity = false;
9511 static const bool has_quiet_NaN = false;
9514 static const bool has_signaling_NaN = false;
9516 static const float_denorm_style has_denorm = denorm_absent;
9519 static const bool has_denorm_loss = false;
9523 static const bool is_iec559 = false;
9527 static const bool is_bounded = false;
9532 static const bool is_modulo = false;
9535 static const bool traps = false;
9537 static const bool tinyness_before = false;
9541 static const float_round_style round_style = round_toward_zero;
9543 # 283 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/limits" 3
9544 template<typename _Tp>
9545 struct numeric_limits : public __numeric_limits_base
9549 static _Tp min() throw() { return static_cast<_Tp>(0); }
9551 static _Tp max() throw() { return static_cast<_Tp>(0); }
9559 static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
9561 static _Tp round_error() throw() { return static_cast<_Tp>(0); }
9563 static _Tp infinity() throw() { return static_cast<_Tp>(0); }
9567 static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
9570 static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
9574 static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
9576 # 334 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/limits" 3
9578 struct numeric_limits<bool>
9580 static const bool is_specialized = true;
9582 static bool min() throw()
9584 static bool max() throw()
9590 static const int digits = 1;
9591 static const int digits10 = 0;
9595 static const bool is_signed = false;
9596 static const bool is_integer = true;
9597 static const bool is_exact = true;
9598 static const int radix = 2;
9599 static bool epsilon() throw()
9601 static bool round_error() throw()
9604 static const int min_exponent = 0;
9605 static const int min_exponent10 = 0;
9606 static const int max_exponent = 0;
9607 static const int max_exponent10 = 0;
9609 static const bool has_infinity = false;
9610 static const bool has_quiet_NaN = false;
9611 static const bool has_signaling_NaN = false;
9612 static const float_denorm_style has_denorm = denorm_absent;
9613 static const bool has_denorm_loss = false;
9615 static bool infinity() throw()
9617 static bool quiet_NaN() throw()
9619 static bool signaling_NaN() throw()
9621 static bool denorm_min() throw()
9624 static const bool is_iec559 = false;
9625 static const bool is_bounded = true;
9626 static const bool is_modulo = false;
9631 static const bool traps = true;
9632 static const bool tinyness_before = false;
9633 static const float_round_style round_style = round_toward_zero;
9638 struct numeric_limits<char>
9640 static const bool is_specialized = true;
9642 static char min() throw()
9643 { return (((char)(-1) < 0) ? (char)1 << (sizeof(char) * 8 - ((char)(-1) < 0)) : (char)0); }
9644 static char max() throw()
9645 { return (((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0); }
9651 static const int digits = (sizeof(char) * 8 - ((char)(-1) < 0));
9652 static const int digits10 = ((sizeof(char) * 8 - ((char)(-1) < 0)) * 643 / 2136);
9656 static const bool is_signed = ((char)(-1) < 0);
9657 static const bool is_integer = true;
9658 static const bool is_exact = true;
9659 static const int radix = 2;
9660 static char epsilon() throw()
9662 static char round_error() throw()
9665 static const int min_exponent = 0;
9666 static const int min_exponent10 = 0;
9667 static const int max_exponent = 0;
9668 static const int max_exponent10 = 0;
9670 static const bool has_infinity = false;
9671 static const bool has_quiet_NaN = false;
9672 static const bool has_signaling_NaN = false;
9673 static const float_denorm_style has_denorm = denorm_absent;
9674 static const bool has_denorm_loss = false;
9676 static char infinity() throw()
9678 static char quiet_NaN() throw()
9680 static char signaling_NaN() throw()
9682 static char denorm_min() throw()
9683 { return static_cast<char>(0); }
9685 static const bool is_iec559 = false;
9686 static const bool is_bounded = true;
9687 static const bool is_modulo = true;
9689 static const bool traps = true;
9690 static const bool tinyness_before = false;
9691 static const float_round_style round_style = round_toward_zero;
9696 struct numeric_limits<signed char>
9698 static const bool is_specialized = true;
9700 static signed char min() throw()
9701 { return -127 - 1; }
9702 static signed char max() throw()
9709 static const int digits = (sizeof(signed char) * 8 - ((signed char)(-1) < 0));
9710 static const int digits10 = ((sizeof(signed char) * 8 - ((signed char)(-1) < 0)) * 643 / 2136);
9714 static const bool is_signed = true;
9715 static const bool is_integer = true;
9716 static const bool is_exact = true;
9717 static const int radix = 2;
9718 static signed char epsilon() throw()
9720 static signed char round_error() throw()
9723 static const int min_exponent = 0;
9724 static const int min_exponent10 = 0;
9725 static const int max_exponent = 0;
9726 static const int max_exponent10 = 0;
9728 static const bool has_infinity = false;
9729 static const bool has_quiet_NaN = false;
9730 static const bool has_signaling_NaN = false;
9731 static const float_denorm_style has_denorm = denorm_absent;
9732 static const bool has_denorm_loss = false;
9734 static signed char infinity() throw()
9735 { return static_cast<signed char>(0); }
9736 static signed char quiet_NaN() throw()
9737 { return static_cast<signed char>(0); }
9738 static signed char signaling_NaN() throw()
9739 { return static_cast<signed char>(0); }
9740 static signed char denorm_min() throw()
9741 { return static_cast<signed char>(0); }
9743 static const bool is_iec559 = false;
9744 static const bool is_bounded = true;
9745 static const bool is_modulo = true;
9747 static const bool traps = true;
9748 static const bool tinyness_before = false;
9749 static const float_round_style round_style = round_toward_zero;
9754 struct numeric_limits<unsigned char>
9756 static const bool is_specialized = true;
9758 static unsigned char min() throw()
9760 static unsigned char max() throw()
9761 { return 127 * 2U + 1; }
9767 static const int digits = (sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0));
9768 static const int digits10 = ((sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)) * 643 / 2136);
9772 static const bool is_signed = false;
9773 static const bool is_integer = true;
9774 static const bool is_exact = true;
9775 static const int radix = 2;
9776 static unsigned char epsilon() throw()
9778 static unsigned char round_error() throw()
9781 static const int min_exponent = 0;
9782 static const int min_exponent10 = 0;
9783 static const int max_exponent = 0;
9784 static const int max_exponent10 = 0;
9786 static const bool has_infinity = false;
9787 static const bool has_quiet_NaN = false;
9788 static const bool has_signaling_NaN = false;
9789 static const float_denorm_style has_denorm = denorm_absent;
9790 static const bool has_denorm_loss = false;
9792 static unsigned char infinity() throw()
9793 { return static_cast<unsigned char>(0); }
9794 static unsigned char quiet_NaN() throw()
9795 { return static_cast<unsigned char>(0); }
9796 static unsigned char signaling_NaN() throw()
9797 { return static_cast<unsigned char>(0); }
9798 static unsigned char denorm_min() throw()
9799 { return static_cast<unsigned char>(0); }
9801 static const bool is_iec559 = false;
9802 static const bool is_bounded = true;
9803 static const bool is_modulo = true;
9805 static const bool traps = true;
9806 static const bool tinyness_before = false;
9807 static const float_round_style round_style = round_toward_zero;
9812 struct numeric_limits<wchar_t>
9814 static const bool is_specialized = true;
9816 static wchar_t min() throw()
9817 { return (((wchar_t)(-1) < 0) ? (wchar_t)1 << (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) : (wchar_t)0); }
9818 static wchar_t max() throw()
9819 { return (((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0); }
9825 static const int digits = (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0));
9826 static const int digits10 = ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) * 643 / 2136);
9830 static const bool is_signed = ((wchar_t)(-1) < 0);
9831 static const bool is_integer = true;
9832 static const bool is_exact = true;
9833 static const int radix = 2;
9834 static wchar_t epsilon() throw()
9836 static wchar_t round_error() throw()
9839 static const int min_exponent = 0;
9840 static const int min_exponent10 = 0;
9841 static const int max_exponent = 0;
9842 static const int max_exponent10 = 0;
9844 static const bool has_infinity = false;
9845 static const bool has_quiet_NaN = false;
9846 static const bool has_signaling_NaN = false;
9847 static const float_denorm_style has_denorm = denorm_absent;
9848 static const bool has_denorm_loss = false;
9850 static wchar_t infinity() throw()
9851 { return wchar_t(); }
9852 static wchar_t quiet_NaN() throw()
9853 { return wchar_t(); }
9854 static wchar_t signaling_NaN() throw()
9855 { return wchar_t(); }
9856 static wchar_t denorm_min() throw()
9857 { return wchar_t(); }
9859 static const bool is_iec559 = false;
9860 static const bool is_bounded = true;
9861 static const bool is_modulo = true;
9863 static const bool traps = true;
9864 static const bool tinyness_before = false;
9865 static const float_round_style round_style = round_toward_zero;
9867 # 744 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/g++-v4/limits" 3
9869 struct numeric_limits<short>
9871 static const bool is_specialized = true;
9873 static short min() throw()
9874 { return -32767 - 1; }
9875 static short max() throw()
9882 static const int digits = (sizeof(short) * 8 - ((short)(-1) < 0));
9883 static const int digits10 = ((sizeof(short) * 8 - ((short)(-1) < 0)) * 643 / 2136);
9887 static const bool is_signed = true;
9888 static const bool is_integer = true;
9889 static const bool is_exact = true;
9890 static const int radix = 2;
9891 static short epsilon() throw()
9893 static short round_error() throw()
9896 static const int min_exponent = 0;
9897 static const int min_exponent10 = 0;
9898 static const int max_exponent = 0;
9899 static const int max_exponent10 = 0;
9901 static const bool has_infinity = false;
9902 static const bool has_quiet_NaN = false;
9903 static const bool has_signaling_NaN = false;
9904 static const float_denorm_style has_denorm = denorm_absent;
9905 static const bool has_denorm_loss = false;
9907 static short infinity() throw()
9909 static short quiet_NaN() throw()
9911 static short signaling_NaN() throw()
9913 static short denorm_min() throw()
9916 static const bool is_iec559 = false;
9917 static const bool is_bounded = true;
9918 static const bool is_modulo = true;
9920 static const bool traps = true;
9921 static const bool tinyness_before = false;
9922 static const float_round_style round_style = round_toward_zero;
9927 struct numeric_limits<unsigned short>
9929 static const bool is_specialized = true;
9931 static unsigned short min() throw()
9933 static unsigned short max() throw()
9934 { return 32767 * 2U + 1; }
9940 static const int digits = (sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0));
9941 static const int digits10 = ((sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)) * 643 / 2136);
9945 static const bool is_signed = false;
9946 static const bool is_integer = true;
9947 static const bool is_exact = true;
9948 static const int radix = 2;
9949 static unsigned short epsilon() throw()
9951 static unsigned short round_error() throw()
9954 static const int min_exponent = 0;
9955 static const int min_exponent10 = 0;
9956 static const int max_exponent = 0;
9957 static const int max_exponent10 = 0;
9959 static const bool has_infinity = false;
9960 static const bool has_quiet_NaN = false;
9961 static const bool has_signaling_NaN = false;
9962 static const float_denorm_style has_denorm = denorm_absent;
9963 static const bool has_denorm_loss = false;
9965 static unsigned short infinity() throw()
9966 { return static_cast<unsigned short>(0); }
9967 static unsigned short quiet_NaN() throw()
9968 { return static_cast<unsigned short>(0); }
9969 static unsigned short signaling_NaN() throw()
9970 { return static_cast<unsigned short>(0); }
9971 static unsigned short denorm_min() throw()
9972 { return static_cast<unsigned short>(0); }
9974 static const bool is_iec559 = false;
9975 static const bool is_bounded = true;
9976 static const bool is_modulo = true;
9978 static const bool traps = true;
9979 static const bool tinyness_before = false;
9980 static const float_round_style round_style = round_toward_zero;
9985 struct numeric_limits<int>
9987 static const bool is_specialized = true;
9989 static int min() throw()
9990 { return -2147483647 - 1; }
9991 static int max() throw()
9992 { return 2147483647; }
9998 static const int digits = (sizeof(int) * 8 - ((int)(-1) < 0));
9999 static const int digits10 = ((sizeof(int) * 8 - ((int)(-1) < 0)) * 643 / 2136);
10003 static const bool is_signed = true;
10004 static const bool is_integer = true;
10005 static const bool is_exact = true;
10006 static const int radix = 2;
10007 static int epsilon() throw()
10009 static int round_error() throw()
10012 static const int min_exponent = 0;
10013 static const int min_exponent10 = 0;
10014 static const int max_exponent = 0;
10015 static const int max_exponent10 = 0;
10017 static const bool has_infinity = false;
10018 static const bool has_quiet_NaN = false;
10019 static const bool has_signaling_NaN = false;
10020 static const float_denorm_style has_denorm = denorm_absent;
10021 static const bool has_denorm_loss = false;
10023 static int infinity() throw()
10024 { return static_cast<int>(0); }
10025 static int quiet_NaN() throw()
10026 { return static_cast<int>(0); }
10027 static int signaling_NaN() throw()
10028 { return static_cast<int>(0); }
10029 static int denorm_min() throw()
10030 { return static_cast<int>(0); }
10032 static const bool is_iec559 = false;
10033 static const bool is_bounded = true;
10034 static const bool is_modulo = true;
10036 static const bool traps = true;
10037 static const bool tinyness_before = false;
10038 static const float_round_style round_style = round_toward_zero;
10043 struct numeric_limits<unsigned int>
10045 static const bool is_specialized = true;
10047 static unsigned int min() throw()
10049 static unsigned int max() throw()
10050 { return 2147483647 * 2U + 1; }
10056 static const int digits = (sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0));
10057 static const int digits10 = ((sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)) * 643 / 2136);
10061 static const bool is_signed = false;
10062 static const bool is_integer = true;
10063 static const bool is_exact = true;
10064 static const int radix = 2;
10065 static unsigned int epsilon() throw()
10067 static unsigned int round_error() throw()
10070 static const int min_exponent = 0;
10071 static const int min_exponent10 = 0;
10072 static const int max_exponent = 0;
10073 static const int max_exponent10 = 0;
10075 static const bool has_infinity = false;
10076 static const bool has_quiet_NaN = false;
10077 static const bool has_signaling_NaN = false;
10078 static const float_denorm_style has_denorm = denorm_absent;
10079 static const bool has_denorm_loss = false;
10081 static unsigned int infinity() throw()
10082 { return static_cast<unsigned int>(0); }
10083 static unsigned int quiet_NaN() throw()
10084 { return static_cast<unsigned int>(0); }
10085 static unsigned int signaling_NaN() throw()
10086 { return static_cast<unsigned int>(0); }
10087 static unsigned int denorm_min() throw()
10088 { return static_cast<unsigned int>(0); }
10090 static const bool is_iec559 = false;
10091 static const bool is_bounded = true;
10092 static const bool is_modulo = true;
10094 static const bool traps = true;
10095 static const bool tinyness_before = false;
10096 static const float_round_style round_style = round_toward_zero;
10101 struct numeric_limits<long>
10103 static const bool is_specialized = true;
10105 static long min() throw()
10106 { return -2147483647L - 1; }
10107 static long max() throw()
10108 { return 2147483647L; }
10114 static const int digits = (sizeof(long) * 8 - ((long)(-1) < 0));
10115 static const int digits10 = ((sizeof(long) * 8 - ((long)(-1) < 0)) * 643 / 2136);
10119 static const bool is_signed = true;
10120 static const bool is_integer = true;
10121 static const bool is_exact = true;
10122 static const int radix = 2;
10123 static long epsilon() throw()
10125 static long round_error() throw()
10128 static const int min_exponent = 0;
10129 static const int min_exponent10 = 0;
10130 static const int max_exponent = 0;
10131 static const int max_exponent10 = 0;
10133 static const bool has_infinity = false;
10134 static const bool has_quiet_NaN = false;
10135 static const bool has_signaling_NaN = false;
10136 static const float_denorm_style has_denorm = denorm_absent;
10137 static const bool has_denorm_loss = false;
10139 static long infinity() throw()
10140 { return static_cast<long>(0); }
10141 static long quiet_NaN() throw()
10142 { return static_cast<long>(0); }
10143 static long signaling_NaN() throw()
10144 { return static_cast<long>(0); }
10145 static long denorm_min() throw()
10146 { return static_cast<long>(0); }
10148 static const bool is_iec559 = false;
10149 static const bool is_bounded = true;
10150 static const bool is_modulo = true;
10152 static const bool traps = true;
10153 static const bool tinyness_before = false;
10154 static const float_round_style round_style = round_toward_zero;
10159 struct numeric_limits<unsigned long>
10161 static const bool is_specialized = true;
10163 static unsigned long min() throw()
10165 static unsigned long max() throw()
10166 { return 2147483647L * 2UL + 1; }
10172 static const int digits = (sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0));
10173 static const int digits10 = ((sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)) * 643 / 2136);
10177 static const bool is_signed = false;
10178 static const bool is_integer = true;
10179 static const bool is_exact = true;
10180 static const int radix = 2;
10181 static unsigned long epsilon() throw()
10183 static unsigned long round_error() throw()
10186 static const int min_exponent = 0;
10187 static const int min_exponent10 = 0;
10188 static const int max_exponent = 0;
10189 static const int max_exponent10 = 0;
10191 static const bool has_infinity = false;
10192 static const bool has_quiet_NaN = false;
10193 static const bool has_signaling_NaN = false;
10194 static const float_denorm_style has_denorm = denorm_absent;
10195 static const bool has_denorm_loss = false;
10197 static unsigned long infinity() throw()
10198 { return static_cast<unsigned long>(0); }
10199 static unsigned long quiet_NaN() throw()
10200 { return static_cast<unsigned long>(0); }
10201 static unsigned long signaling_NaN() throw()
10202 { return static_cast<unsigned long>(0); }
10203 static unsigned long denorm_min() throw()
10204 { return static_cast<unsigned long>(0); }
10206 static const bool is_iec559 = false;
10207 static const bool is_bounded = true;
10208 static const bool is_modulo = true;
10210 static const bool traps = true;
10211 static const bool tinyness_before = false;
10212 static const float_round_style round_style = round_toward_zero;
10217 struct numeric_limits<long long>
10219 static const bool is_specialized = true;
10221 static long long min() throw()
10222 { return -9223372036854775807LL - 1; }
10223 static long long max() throw()
10224 { return 9223372036854775807LL; }
10230 static const int digits = (sizeof(long long) * 8 - ((long long)(-1) < 0));
10231 static const int digits10 = ((sizeof(long long) * 8 - ((long long)(-1) < 0)) * 643 / 2136);
10235 static const bool is_signed = true;
10236 static const bool is_integer = true;
10237 static const bool is_exact = true;
10238 static const int radix = 2;
10239 static long long epsilon() throw()
10241 static long long round_error() throw()
10244 static const int min_exponent = 0;
10245 static const int min_exponent10 = 0;
10246 static const int max_exponent = 0;
10247 static const int max_exponent10 = 0;
10249 static const bool has_infinity = false;
10250 static const bool has_quiet_NaN = false;
10251 static const bool has_signaling_NaN = false;
10252 static const float_denorm_style has_denorm = denorm_absent;
10253 static const bool has_denorm_loss = false;
10255 static long long infinity() throw()
10256 { return static_cast<long long>(0); }
10257 static long long quiet_NaN() throw()
10258 { return static_cast<long long>(0); }
10259 static long long signaling_NaN() throw()
10260 { return static_cast<long long>(0); }
10261 static long long denorm_min() throw()
10262 { return static_cast<long long>(0); }
10264 static const bool is_iec559 = false;
10265 static const bool is_bounded = true;
10266 static const bool is_modulo = true;
10268 static const bool traps = true;
10269 static const bool tinyness_before = false;
10270 static const float_round_style round_style = round_toward_zero;
10275 struct numeric_limits<unsigned long long>
10277 static const bool is_specialized = true;
10279 static unsigned long long min() throw()
10281 static unsigned long long max() throw()
10282 { return 9223372036854775807LL * 2ULL + 1; }
10288 static const int digits = (sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0));
10289 static const int digits10 = ((sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)) * 643 / 2136);
10293 static const bool is_signed = false;
10294 static const bool is_integer = true;
10295 static const bool is_exact = true;
10296 static const int radix = 2;
10297 static unsigned long long epsilon() throw()
10299 static unsigned long long round_error() throw()
10302 static const int min_exponent = 0;
10303 static const int min_exponent10 = 0;
10304 static const int max_exponent = 0;
10305 static const int max_exponent10 = 0;
10307 static const bool has_infinity = false;
10308 static const bool has_quiet_NaN = false;
10309 static const bool has_signaling_NaN = false;
10310 static const float_denorm_style has_denorm = denorm_absent;
10311 static const bool has_denorm_loss = false;
10313 static unsigned long long infinity() throw()
10314 { return static_cast<unsigned long long>(0); }
10315 static unsigned long long quiet_NaN() throw()
10316 { return static_cast<unsigned long long>(0); }
10317 static unsigned long long signaling_NaN() throw()
10318 { return static_cast<unsigned long long>(0); }
10319 static unsigned long long denorm_min() throw()
10320 { return static_cast<unsigned long long>(0); }
10322 static const bool is_iec559 = false;
10323 static const bool is_bounded = true;
10324 static const bool is_modulo = true;
10326 static const bool traps = true;
10327 static const bool tinyness_before = false;
10328 static const float_round_style round_style = round_toward_zero;
10333 struct numeric_limits<float>
10335 static const bool is_specialized = true;
10337 static float min() throw()
10338 { return 1.1754943508222875e-38F; }
10339 static float max() throw()
10340 { return 3.4028234663852886e+38F; }
10346 static const int digits = 24;
10347 static const int digits10 = 6;
10352 static const bool is_signed = true;
10353 static const bool is_integer = false;
10354 static const bool is_exact = false;
10355 static const int radix = 2;
10356 static float epsilon() throw()
10357 { return 1.1920928955078125e-7F; }
10358 static float round_error() throw()
10361 static const int min_exponent = (-125);
10362 static const int min_exponent10 = (-37);
10363 static const int max_exponent = 128;
10364 static const int max_exponent10 = 38;
10366 static const bool has_infinity = 1;
10367 static const bool has_quiet_NaN = 1;
10368 static const bool has_signaling_NaN = has_quiet_NaN;
10369 static const float_denorm_style has_denorm
10370 = bool(1) ? denorm_present : denorm_absent;
10371 static const bool has_denorm_loss = false;
10373 static float infinity() throw()
10374 { return __builtin_huge_valf (); }
10375 static float quiet_NaN() throw()
10376 { return __builtin_nanf (""); }
10377 static float signaling_NaN() throw()
10378 { return __builtin_nansf (""); }
10379 static float denorm_min() throw()
10380 { return 1.4012984643248171e-45F; }
10382 static const bool is_iec559
10383 = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
10384 static const bool is_bounded = true;
10385 static const bool is_modulo = false;
10387 static const bool traps = false;
10388 static const bool tinyness_before = false;
10389 static const float_round_style round_style = round_to_nearest;
10392 #undef __glibcxx_float_has_denorm_loss
10393 #undef __glibcxx_float_traps
10394 #undef __glibcxx_float_tinyness_before
10398 struct numeric_limits<double>
10400 static const bool is_specialized = true;
10402 static double min() throw()
10403 { return ((double)2.2250738585072014e-308L); }
10404 static double max() throw()
10405 { return ((double)1.7976931348623157e+308L); }
10411 static const int digits = 53;
10412 static const int digits10 = 15;
10417 static const bool is_signed = true;
10418 static const bool is_integer = false;
10419 static const bool is_exact = false;
10420 static const int radix = 2;
10421 static double epsilon() throw()
10422 { return ((double)2.2204460492503131e-16L); }
10423 static double round_error() throw()
10426 static const int min_exponent = (-1021);
10427 static const int min_exponent10 = (-307);
10428 static const int max_exponent = 1024;
10429 static const int max_exponent10 = 308;
10431 static const bool has_infinity = 1;
10432 static const bool has_quiet_NaN = 1;
10433 static const bool has_signaling_NaN = has_quiet_NaN;
10434 static const float_denorm_style has_denorm
10435 = bool(1) ? denorm_present : denorm_absent;
10436 static const bool has_denorm_loss = false;
10438 static double infinity() throw()
10439 { return __builtin_huge_val(); }
10440 static double quiet_NaN() throw()
10441 { return __builtin_nan (""); }
10442 static double signaling_NaN() throw()
10443 { return __builtin_nans (""); }
10444 static double denorm_min() throw()
10445 { return ((double)4.9406564584124654e-324L); }
10447 static const bool is_iec559
10448 = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
10449 static const bool is_bounded = true;
10450 static const bool is_modulo = false;
10452 static const bool traps = false;
10453 static const bool tinyness_before = false;
10454 static const float_round_style round_style = round_to_nearest;
10457 #undef __glibcxx_double_has_denorm_loss
10458 #undef __glibcxx_double_traps
10459 #undef __glibcxx_double_tinyness_before
10463 struct numeric_limits<long double>
10465 static const bool is_specialized = true;
10467 static long double min() throw()
10468 { return 2.2250738585072014e-308L; }
10469 static long double max() throw()
10470 { return 1.7976931348623157e+308L; }
10476 static const int digits = 53;
10477 static const int digits10 = 15;
10482 static const bool is_signed = true;
10483 static const bool is_integer = false;
10484 static const bool is_exact = false;
10485 static const int radix = 2;
10486 static long double epsilon() throw()
10487 { return 2.2204460492503131e-16L; }
10488 static long double round_error() throw()
10491 static const int min_exponent = (-1021);
10492 static const int min_exponent10 = (-307);
10493 static const int max_exponent = 1024;
10494 static const int max_exponent10 = 308;
10496 static const bool has_infinity = 1;
10497 static const bool has_quiet_NaN = 1;
10498 static const bool has_signaling_NaN = has_quiet_NaN;
10499 static const float_denorm_style has_denorm
10500 = bool(1) ? denorm_present : denorm_absent;
10501 static const bool has_denorm_loss
10504 static long double infinity() throw()
10505 { return __builtin_huge_vall (); }
10506 static long double quiet_NaN() throw()
10507 { return __builtin_nanl (""); }
10508 static long double signaling_NaN() throw()
10509 { return __builtin_nansl (""); }
10510 static long double denorm_min() throw()
10511 { return 4.9406564584124654e-324L; }
10513 static const bool is_iec559
10514 = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
10515 static const bool is_bounded = true;
10516 static const bool is_modulo = false;
10518 static const bool traps = false;
10519 static const bool tinyness_before = false;
10520 static const float_round_style round_style = round_to_nearest;
10523 #undef __glibcxx_long_double_has_denorm_loss
10524 #undef __glibcxx_long_double_traps
10525 #undef __glibcxx_long_double_tinyness_before
10529 #undef __glibcxx_signed
10530 #undef __glibcxx_min
10531 #undef __glibcxx_max
10532 #undef __glibcxx_digits
10533 #undef __glibcxx_digits10
10534 #undef __glibcxx_max_digits10
10535 # 30 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
10537 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsalloc.h" 1
10538 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsalloc.h"
10545 # 32 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsalloc.h"
10546 class SystemAllocPolicy
10549 void *malloc_(size_t bytes) { return js_malloc(bytes); }
10550 void *realloc_(void *p, size_t oldBytes, size_t bytes) { return js_realloc(p, bytes); }
10551 void free_(void *p) { js_free(p); }
10552 void reportAllocOverflow() const {}
10554 # 50 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsalloc.h"
10555 class TempAllocPolicy
10557 JSContext *const cx;
10563 __attribute__((visibility("default"))) void * onOutOfMemory(void *p, size_t nbytes);
10566 TempAllocPolicy(JSContext *cx) : cx(cx) {}
10568 JSContext *context() const {
10572 void *malloc_(size_t bytes) {
10573 void *p = js_malloc(bytes);
10574 if ((__builtin_expect((!p), 0)))
10575 p = onOutOfMemory(__null, bytes);
10579 void *realloc_(void *p, size_t oldBytes, size_t bytes) {
10580 void *p2 = js_realloc(p, bytes);
10581 if ((__builtin_expect((!p2), 0)))
10582 p2 = onOutOfMemory(p2, bytes);
10586 void free_(void *p) {
10590 __attribute__((visibility("default"))) void reportAllocOverflow() const;
10594 # 32 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
10595 # 1 "./../../dist/include/js/Vector.h" 1
10596 # 9 "./../../dist/include/js/Vector.h"
10597 #define jsvector_h_
10601 # 1 "./../../dist/include/js/TemplateLib.h" 1
10602 # 9 "./../../dist/include/js/TemplateLib.h"
10603 #define js_template_lib_h__
10604 # 20 "./../../dist/include/js/TemplateLib.h"
10609 template <size_t i, size_t j> struct Min {
10610 static const size_t result = i < j ? i : j;
10612 template <size_t i, size_t j> struct Max {
10613 static const size_t result = i > j ? i : j;
10615 template <size_t i, size_t min, size_t max> struct Clamp {
10616 static const size_t result = i < min ? min : (i > max ? max : i);
10620 template <size_t x, size_t y> struct Pow {
10621 static const size_t result = x * Pow<x, y - 1>::result;
10623 template <size_t x> struct Pow<x,0> {
10624 static const size_t result = 1;
10628 template <size_t i> struct FloorLog2 {
10629 static const size_t result = 1 + FloorLog2<i / 2>::result;
10631 template <> struct FloorLog2<0> { };
10632 template <> struct FloorLog2<1> { static const size_t result = 0; };
10635 template <size_t i> struct CeilingLog2 {
10636 static const size_t result = FloorLog2<2 * i - 1>::result;
10640 template <size_t i> struct RoundUpPow2 {
10641 static const size_t result = size_t(1) << CeilingLog2<i>::result;
10643 template <> struct RoundUpPow2<0> {
10644 static const size_t result = 1;
10648 template <class T> struct BitSize {
10649 static const size_t result = sizeof(T) * 8;
10653 template <bool> struct StaticAssert {};
10654 template <> struct StaticAssert<true> { typedef int result; };
10657 template <class T, class U> struct IsSameType {
10658 static const bool result = false;
10660 template <class T> struct IsSameType<T,T> {
10661 static const bool result = true;
10668 template <size_t N> struct NBitMask {
10669 typedef typename StaticAssert<N < BitSize<size_t>::result>::result _;
10670 static const size_t result = (size_t(1) << N) - 1;
10672 template <> struct NBitMask<BitSize<size_t>::result> {
10673 static const size_t result = size_t(-1);
10680 template <size_t N> struct MulOverflowMask {
10681 static const size_t result =
10682 ~NBitMask<BitSize<size_t>::result - CeilingLog2<N>::result>::result;
10684 template <> struct MulOverflowMask<0> { };
10685 template <> struct MulOverflowMask<1> { static const size_t result = 0; };
10692 template <class T> struct UnsafeRangeSizeMask {
10697 static const size_t result = MulOverflowMask<2 * sizeof(T)>::result;
10701 template <class T> struct StripConst { typedef T result; };
10702 template <class T> struct StripConst<const T> { typedef T result; };
10708 template <class T> struct IsPodType { static const bool result = false; };
10709 template <> struct IsPodType<char> { static const bool result = true; };
10710 template <> struct IsPodType<signed char> { static const bool result = true; };
10711 template <> struct IsPodType<unsigned char> { static const bool result = true; };
10712 template <> struct IsPodType<short> { static const bool result = true; };
10713 template <> struct IsPodType<unsigned short> { static const bool result = true; };
10714 template <> struct IsPodType<int> { static const bool result = true; };
10715 template <> struct IsPodType<unsigned int> { static const bool result = true; };
10716 template <> struct IsPodType<long> { static const bool result = true; };
10717 template <> struct IsPodType<unsigned long> { static const bool result = true; };
10718 template <> struct IsPodType<long long> { static const bool result = true; };
10719 template <> struct IsPodType<unsigned long long> { static const bool result = true; };
10720 template <> struct IsPodType<bool> { static const bool result = true; };
10721 template <> struct IsPodType<float> { static const bool result = true; };
10722 template <> struct IsPodType<double> { static const bool result = true; };
10723 template <> struct IsPodType<wchar_t> { static const bool result = true; };
10724 template <typename T> struct IsPodType<T *> { static const bool result = true; };
10726 template <bool cond, typename T, T v1, T v2> struct If { static const T result = v1; };
10727 template <typename T, T v1, T v2> struct If<false, T, v1, v2> { static const T result = v2; };
10732 template <class T> struct IsRelocatableHeapType { static const bool result = true; };
10736 # 14 "./../../dist/include/js/Vector.h" 2
10737 # 1 "./../../dist/include/js/Utility.h" 1
10738 # 15 "./../../dist/include/js/Vector.h" 2
10748 class TempAllocPolicy;
10751 size_t MinInlineCapacity = 0,
10752 class AllocPolicy = TempAllocPolicy>
10759 template <class T, size_t N, class AP, bool IsPod>
10763 static inline void destroy(T *begin, T *end) {
10764 for (T *p = begin; p != end; ++p)
10769 static inline void initialize(T *begin, T *end) {
10770 for (T *p = begin; p != end; ++p)
10779 static inline void copyConstruct(T *dst, const U *srcbeg, const U *srcend) {
10780 for (const U *p = srcbeg; p != srcend; ++p, ++dst)
10789 static inline void moveConstruct(T *dst, const U *srcbeg, const U *srcend) {
10790 for (const U *p = srcbeg; p != srcend; ++p, ++dst)
10791 new(dst) T(Move(*p));
10799 static inline void copyConstructN(T *dst, size_t n, const U &u) {
10800 for (T *end = dst + n; dst != end; ++dst)
10810 static inline bool growTo(Vector<T,N,AP> &v, size_t newcap) {
10812 T *newbuf = reinterpret_cast<T *>(v.malloc_(newcap * sizeof(T)));
10815 for (T *dst = newbuf, *src = v.beginNoCheck(); src != v.endNoCheck(); ++dst, ++src)
10816 new(dst) T(Move(*src));
10817 VectorImpl::destroy(v.beginNoCheck(), v.endNoCheck());
10821 v.mCapacity = newcap;
10831 template <class T, size_t N, class AP>
10832 struct VectorImpl<T, N, AP, true>
10834 static inline void destroy(T *, T *) {}
10836 static inline void initialize(T *begin, T *end) {
10837 # 121 "./../../dist/include/js/Vector.h"
10838 for (T *p = begin; p != end; ++p)
10843 static inline void copyConstruct(T *dst, const U *srcbeg, const U *srcend) {
10851 for (const U *p = srcbeg; p != srcend; ++p, ++dst)
10856 static inline void moveConstruct(T *dst, const U *srcbeg, const U *srcend) {
10857 copyConstruct(dst, srcbeg, srcend);
10860 static inline void copyConstructN(T *dst, size_t n, const T &t) {
10861 for (T *p = dst, *end = dst + n; p != end; ++p)
10865 static inline bool growTo(Vector<T,N,AP> &v, size_t newcap) {
10867 size_t bytes = sizeof(T) * newcap;
10868 size_t oldBytes = sizeof(T) * v.mCapacity;
10869 T *newbuf = reinterpret_cast<T *>(v.realloc_(v.mBegin, oldBytes, bytes));
10874 v.mCapacity = newcap;
10878 # 180 "./../../dist/include/js/Vector.h"
10879 template <class T, size_t N, class AllocPolicy>
10880 class Vector : private AllocPolicy
10882 typedef typename tl::StaticAssert<tl::IsRelocatableHeapType<T>::result>::result _;
10886 static const bool sElemIsPod = tl::IsPodType<T>::result;
10887 typedef VectorImpl<T, N, AllocPolicy, sElemIsPod> Impl;
10888 friend struct VectorImpl<T, N, AllocPolicy, sElemIsPod>;
10890 bool calculateNewCapacity(size_t curLength, size_t lengthInc, size_t &newCap);
10891 bool growStorageBy(size_t lengthInc);
10892 bool growHeapStorageBy(size_t lengthInc);
10893 bool convertToHeapStorage(size_t lengthInc);
10895 template <bool InitNewElems> inline bool growByImpl(size_t inc);
10899 static const int sMaxInlineBytes = 1024;
10900 # 213 "./../../dist/include/js/Vector.h"
10901 template <int M, int Dummy>
10903 static const size_t result = sizeof(T);
10905 template <int Dummy>
10906 struct ElemSize<0, Dummy> {
10907 static const size_t result = 1;
10910 static const size_t sInlineCapacity =
10911 tl::Min<N, sMaxInlineBytes / ElemSize<N, 0>::result>::result;
10914 static const size_t sInlineBytes =
10915 tl::Max<1, sInlineCapacity * ElemSize<N, 0>::result>::result;
10916 # 238 "./../../dist/include/js/Vector.h"
10924 AlignedStorage<sInlineBytes> storage;
10931 Vector(const Vector &) ;
10932 Vector &operator=(const Vector &) ;
10936 bool usingInlineStorage() const {
10937 return mBegin == (T *)storage.addr();
10940 T *beginNoCheck() const {
10945 return mBegin + mLength;
10948 const T *endNoCheck() const {
10949 return mBegin + mLength;
10951 # 282 "./../../dist/include/js/Vector.h"
10952 template <class U> void internalAppend(U t);
10953 void internalAppendN(const T &t, size_t n);
10954 template <class U> void internalAppend(const U *begin, size_t length);
10955 template <class U, size_t O, class BP> void internalAppend(const Vector<U,O,BP> &other);
10958 static const size_t sMaxInlineStorage = N;
10960 typedef T ElementType;
10962 Vector(AllocPolicy = AllocPolicy());
10963 Vector(MoveRef<Vector>);
10964 Vector &operator=(MoveRef<Vector>);
10969 const AllocPolicy &allocPolicy() const {
10973 AllocPolicy &allocPolicy() {
10977 enum { InlineLength = N };
10979 size_t length() const {
10983 bool empty() const {
10984 return mLength == 0;
10987 size_t capacity() const {
10996 const T *begin() const {
11003 return mBegin + mLength;
11006 const T *end() const {
11008 return mBegin + mLength;
11011 T &operator[](size_t i) {
11016 const T &operator[](size_t i) const {
11023 return *(end() - 1);
11026 const T &back() const {
11028 return *(end() - 1);
11032 friend class Vector;
11034 Range(T *cur, T *end) : cur(cur), end(end) {}
11037 bool empty() const { return cur == end; }
11038 size_t remain() const { return end - cur; }
11039 T &front() const { return *cur; }
11040 void popFront() { do { } while(0); ++cur; }
11041 T popCopyFront() { do { } while(0); return *cur++; }
11045 return Range(begin(), end());
11051 bool reserve(size_t capacity);
11057 void shrinkBy(size_t incr);
11060 bool growBy(size_t incr);
11063 bool resize(size_t newLength);
11066 bool growByUninitialized(size_t incr);
11067 bool resizeUninitialized(size_t newLength);
11073 void clearAndFree();
11074 # 413 "./../../dist/include/js/Vector.h"
11075 template <class U> bool append(U t);
11076 bool appendN(const T &t, size_t n);
11077 template <class U> bool append(const U *begin, const U *end);
11078 template <class U> bool append(const U *begin, size_t length);
11079 template <class U, size_t O, class BP> bool append(const Vector<U,O,BP> &other);
11085 void infallibleAppend(const T &t) {
11088 void infallibleAppendN(const T &t, size_t n) {
11089 internalAppendN(t, n);
11091 template <class U> void infallibleAppend(const U *begin, const U *end) {
11092 internalAppend(begin, PointerRangeSize(begin, end));
11094 template <class U> void infallibleAppend(const U *begin, size_t length) {
11095 internalAppend(begin, length);
11097 template <class U, size_t O, class BP> void infallibleAppend(const Vector<U,O,BP> &other) {
11098 internalAppend(other);
11104 # 451 "./../../dist/include/js/Vector.h"
11105 T *extractRawBuffer();
11112 void replaceRawBuffer(T *p, size_t length);
11118 bool insert(T *p, const T &val);
11129 size_t sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf) const;
11135 size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf) const;
11139 #define REENTRANCY_GUARD_ET_AL ReentrancyGuard g(*this); JS_ASSERT_IF(usingInlineStorage(), mCapacity == sInlineCapacity); JS_ASSERT(reserved() <= mCapacity); JS_ASSERT(mLength <= reserved()); JS_ASSERT(mLength <= mCapacity)
11140 # 494 "./../../dist/include/js/Vector.h"
11141 template <class T, size_t N, class AllocPolicy>
11142 __attribute__((always_inline)) inline
11143 Vector<T,N,AllocPolicy>::Vector(AllocPolicy ap)
11144 : AllocPolicy(ap), mBegin((T *)storage.addr()), mLength(0),
11145 mCapacity(sInlineCapacity)
11152 template <class T, size_t N, class AllocPolicy>
11153 __attribute__((always_inline)) inline
11154 Vector<T, N, AllocPolicy>::Vector(MoveRef<Vector> rhs)
11157 mLength = rhs->mLength;
11158 mCapacity = rhs->mCapacity;
11163 if (rhs->usingInlineStorage()) {
11165 mBegin = (T *)storage.addr();
11166 Impl::moveConstruct(mBegin, rhs->beginNoCheck(), rhs->endNoCheck());
11176 mBegin = rhs->mBegin;
11177 rhs->mBegin = (T *) rhs->storage.addr();
11178 rhs->mCapacity = sInlineCapacity;
11187 template <class T, size_t N, class AP>
11188 __attribute__((always_inline)) inline
11190 Vector<T, N, AP>::operator=(MoveRef<Vector> rhs)
11193 new(this) Vector(rhs);
11197 template <class T, size_t N, class AP>
11198 __attribute__((always_inline)) inline
11199 Vector<T,N,AP>::~Vector()
11201 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11202 Impl::destroy(beginNoCheck(), endNoCheck());
11203 if (!usingInlineStorage())
11204 this->free_(beginNoCheck());
11211 template <class T, size_t N, class AP>
11214 Vector<T,N,AP>::calculateNewCapacity(size_t curLength, size_t lengthInc,
11217 size_t newMinCap = curLength + lengthInc;
11223 if (newMinCap < curLength ||
11224 newMinCap & tl::MulOverflowMask<2 * sizeof(T)>::result) {
11225 this->reportAllocOverflow();
11230 newCap = RoundUpPow2(newMinCap);
11236 if (newCap & tl::UnsafeRangeSizeMask<T>::result) {
11237 this->reportAllocOverflow();
11247 template <class T, size_t N, class AP>
11248 __attribute__((always_inline)) inline bool
11249 Vector<T,N,AP>::growHeapStorageBy(size_t lengthInc)
11253 return calculateNewCapacity(mLength, lengthInc, newCap) &&
11254 Impl::growTo(*this, newCap);
11262 template <class T, size_t N, class AP>
11264 Vector<T,N,AP>::convertToHeapStorage(size_t lengthInc)
11268 if (!calculateNewCapacity(mLength, lengthInc, newCap))
11272 T *newBuf = reinterpret_cast<T *>(this->malloc_(newCap * sizeof(T)));
11277 Impl::moveConstruct(newBuf, beginNoCheck(), endNoCheck());
11278 Impl::destroy(beginNoCheck(), endNoCheck());
11283 mCapacity = newCap;
11287 template <class T, size_t N, class AP>
11288 __attribute__((noinline)) bool
11289 Vector<T,N,AP>::growStorageBy(size_t incr)
11292 return usingInlineStorage()
11293 ? convertToHeapStorage(incr)
11294 : growHeapStorageBy(incr);
11297 template <class T, size_t N, class AP>
11299 Vector<T,N,AP>::reserve(size_t request)
11301 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11302 if (request > mCapacity && !growStorageBy(request - mLength))
11314 template <class T, size_t N, class AP>
11316 Vector<T,N,AP>::shrinkBy(size_t incr)
11318 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11320 Impl::destroy(endNoCheck() - incr, endNoCheck());
11324 template <class T, size_t N, class AP>
11325 template <bool InitNewElems>
11326 __attribute__((always_inline)) inline bool
11327 Vector<T,N,AP>::growByImpl(size_t incr)
11329 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11330 if (incr > mCapacity - mLength && !growStorageBy(incr))
11334 T *newend = endNoCheck() + incr;
11336 Impl::initialize(endNoCheck(), newend);
11345 template <class T, size_t N, class AP>
11346 __attribute__((always_inline)) inline bool
11347 Vector<T,N,AP>::growBy(size_t incr)
11349 return growByImpl<true>(incr);
11352 template <class T, size_t N, class AP>
11353 __attribute__((always_inline)) inline bool
11354 Vector<T,N,AP>::growByUninitialized(size_t incr)
11356 return growByImpl<false>(incr);
11359 template <class T, size_t N, class AP>
11362 Vector<T,N,AP>::resize(size_t newLength)
11364 size_t curLength = mLength;
11365 if (newLength > curLength)
11366 return growBy(newLength - curLength);
11367 shrinkBy(curLength - newLength);
11371 template <class T, size_t N, class AP>
11372 __attribute__((always_inline)) inline bool
11373 Vector<T,N,AP>::resizeUninitialized(size_t newLength)
11375 size_t curLength = mLength;
11376 if (newLength > curLength)
11377 return growByUninitialized(newLength - curLength);
11378 shrinkBy(curLength - newLength);
11382 template <class T, size_t N, class AP>
11384 Vector<T,N,AP>::clear()
11386 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11387 Impl::destroy(beginNoCheck(), endNoCheck());
11391 template <class T, size_t N, class AP>
11393 Vector<T,N,AP>::clearAndFree()
11397 if (usingInlineStorage())
11400 this->free_(beginNoCheck());
11401 mBegin = (T *)storage.addr();
11402 mCapacity = sInlineCapacity;
11408 template <class T, size_t N, class AP>
11410 __attribute__((always_inline)) inline bool
11411 Vector<T,N,AP>::append(U t)
11413 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11414 if (mLength == mCapacity && !growStorageBy(1))
11425 template <class T, size_t N, class AP>
11427 __attribute__((always_inline)) inline void
11428 Vector<T,N,AP>::internalAppend(U t)
11432 new(endNoCheck()) T(t);
11436 template <class T, size_t N, class AP>
11437 __attribute__((always_inline)) inline bool
11438 Vector<T,N,AP>::appendN(const T &t, size_t needed)
11440 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11441 if (mLength + needed > mCapacity && !growStorageBy(needed))
11448 internalAppendN(t, needed);
11452 template <class T, size_t N, class AP>
11453 __attribute__((always_inline)) inline void
11454 Vector<T,N,AP>::internalAppendN(const T &t, size_t needed)
11458 Impl::copyConstructN(endNoCheck(), needed, t);
11462 template <class T, size_t N, class AP>
11464 Vector<T,N,AP>::insert(T *p, const T &val)
11467 size_t pos = p - begin();
11469 size_t oldLength = mLength;
11470 if (pos == oldLength)
11471 return append(val);
11473 T oldBack = back();
11474 if (!append(oldBack))
11477 for (size_t i = oldLength; i > pos; --i)
11478 (*this)[i] = (*this)[i - 1];
11479 (*this)[pos] = val;
11483 template<typename T, size_t N, class AP>
11485 Vector<T,N,AP>::erase(T *it)
11488 while (it + 1 != end()) {
11495 template <class T, size_t N, class AP>
11497 __attribute__((always_inline)) inline bool
11498 Vector<T,N,AP>::append(const U *insBegin, const U *insEnd)
11500 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11501 size_t needed = PointerRangeSize(insBegin, insEnd);
11502 if (mLength + needed > mCapacity && !growStorageBy(needed))
11509 internalAppend(insBegin, needed);
11513 template <class T, size_t N, class AP>
11515 __attribute__((always_inline)) inline void
11516 Vector<T,N,AP>::internalAppend(const U *insBegin, size_t length)
11520 Impl::copyConstruct(endNoCheck(), insBegin, insBegin + length);
11524 template <class T, size_t N, class AP>
11525 template <class U, size_t O, class BP>
11527 Vector<T,N,AP>::append(const Vector<U,O,BP> &other)
11529 return append(other.begin(), other.end());
11532 template <class T, size_t N, class AP>
11533 template <class U, size_t O, class BP>
11535 Vector<T,N,AP>::internalAppend(const Vector<U,O,BP> &other)
11537 internalAppend(other.begin(), other.length());
11540 template <class T, size_t N, class AP>
11542 __attribute__((always_inline)) inline bool
11543 Vector<T,N,AP>::append(const U *insBegin, size_t length)
11545 return this->append(insBegin, insBegin + length);
11548 template <class T, size_t N, class AP>
11549 __attribute__((always_inline)) inline void
11550 Vector<T,N,AP>::popBack()
11552 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11555 endNoCheck()->~T();
11558 template <class T, size_t N, class AP>
11559 __attribute__((always_inline)) inline T
11560 Vector<T,N,AP>::popCopy()
11567 template <class T, size_t N, class AP>
11569 Vector<T,N,AP>::extractRawBuffer()
11572 if (usingInlineStorage()) {
11573 ret = reinterpret_cast<T *>(this->malloc_(mLength * sizeof(T)));
11576 Impl::copyConstruct(ret, beginNoCheck(), endNoCheck());
11577 Impl::destroy(beginNoCheck(), endNoCheck());
11582 mBegin = (T *)storage.addr();
11584 mCapacity = sInlineCapacity;
11592 template <class T, size_t N, class AP>
11594 Vector<T,N,AP>::replaceRawBuffer(T *p, size_t length)
11596 ReentrancyGuard g(*this); do { } while (0); do { } while(0); do { } while(0); do { } while(0);
11599 Impl::destroy(beginNoCheck(), endNoCheck());
11600 if (!usingInlineStorage())
11601 this->free_(beginNoCheck());
11604 if (length <= sInlineCapacity) {
11610 mBegin = (T *)storage.addr();
11612 mCapacity = sInlineCapacity;
11613 Impl::moveConstruct(mBegin, p, p + length);
11614 Impl::destroy(p, p + length);
11619 mCapacity = length;
11626 template <class T, size_t N, class AP>
11628 Vector<T,N,AP>::sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf) const
11630 return usingInlineStorage() ? 0 : mallocSizeOf(beginNoCheck());
11633 template <class T, size_t N, class AP>
11635 Vector<T,N,AP>::sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf) const
11637 return mallocSizeOf(this) + sizeOfExcludingThis(mallocSizeOf);
11641 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 2
11647 #define JSVAL_INT_BITS 32
11648 #define JSVAL_INT_MIN ((int32_t)0x80000000)
11649 #define JSVAL_INT_MAX ((int32_t)0x7fffffff)
11653 #define JS_Assert MOZ_Assert
11657 # 109 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
11658 template<typename T> class AnchorPermitted;
11659 template<> class AnchorPermitted<JSObject *> { };
11660 template<> class AnchorPermitted<const JSObject *> { };
11661 template<> class AnchorPermitted<JSFunction *> { };
11662 template<> class AnchorPermitted<const JSFunction *> { };
11663 template<> class AnchorPermitted<JSString *> { };
11664 template<> class AnchorPermitted<const JSString *> { };
11665 template<> class AnchorPermitted<Value> { };
11666 template<> class AnchorPermitted<const JSScript *> { };
11667 template<> class AnchorPermitted<JSScript *> { };
11669 template<typename T>
11670 class Anchor: AnchorPermitted<T>
11674 explicit Anchor(T t) { hold = t; }
11676 T &get() { return hold; }
11677 const T &get() const { return hold; }
11678 void set(const T &t) { hold = t; }
11679 void operator=(const T &t) { hold = t; }
11680 void clear() { hold = 0; }
11683 Anchor(const Anchor &) ;
11684 const Anchor &operator=(const Anchor &) ;
11688 template<typename T>
11689 inline Anchor<T>::~Anchor()
11691 # 153 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
11692 asm volatile("":: "g" (hold) : "memory");
11694 # 222 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
11705 __attribute__((always_inline)) inline
11707 data.asBits = BUILD_JSVAL(JSVAL_TAG_NULL, 0).asBits;
11710 __attribute__((always_inline)) inline
11711 void setUndefined() {
11712 data.asBits = BUILD_JSVAL(JSVAL_TAG_UNDEFINED, 0).asBits;
11715 __attribute__((always_inline)) inline
11716 void setInt32(int32_t i) {
11717 data = INT32_TO_JSVAL_IMPL(i);
11720 __attribute__((always_inline)) inline
11721 int32_t &getInt32Ref() {
11723 return data.s.payload.i32;
11726 __attribute__((always_inline)) inline
11727 void setDouble(double d) {
11728 data = DOUBLE_TO_JSVAL_IMPL(d);
11731 __attribute__((always_inline)) inline
11732 double &getDoubleRef() {
11734 return data.asDouble;
11737 __attribute__((always_inline)) inline
11738 void setString(JSString *str) {
11740 data = STRING_TO_JSVAL_IMPL(str);
11743 __attribute__((always_inline)) inline
11744 void setString(const JS::Anchor<JSString *> &str) {
11745 setString(str.get());
11748 __attribute__((always_inline)) inline
11749 void setObject(JSObject &obj) {
11751 data = OBJECT_TO_JSVAL_IMPL(&obj);
11754 __attribute__((always_inline)) inline
11755 void setBoolean(bool b) {
11756 data = BOOLEAN_TO_JSVAL_IMPL(b);
11759 __attribute__((always_inline)) inline
11760 void setMagic(JSWhyMagic why) {
11761 data = MAGIC_TO_JSVAL_IMPL(why);
11764 __attribute__((always_inline)) inline
11765 bool setNumber(uint32_t ui) {
11766 if (ui > ((int32_t)0x7fffffff)) {
11767 setDouble((double)ui);
11770 setInt32((int32_t)ui);
11775 __attribute__((always_inline)) inline
11776 bool setNumber(double d) {
11778 if (MOZ_DOUBLE_IS_INT32(d, &i)) {
11787 __attribute__((always_inline)) inline
11788 void setObjectOrNull(JSObject *arg) {
11795 __attribute__((always_inline)) inline
11796 void swap(Value &rhs) {
11797 uint64_t tmp = rhs.data.asBits;
11798 rhs.data.asBits = data.asBits;
11804 __attribute__((always_inline)) inline
11805 bool isUndefined() const {
11806 return JSVAL_IS_UNDEFINED_IMPL(data);
11809 __attribute__((always_inline)) inline
11810 bool isNull() const {
11811 return JSVAL_IS_NULL_IMPL(data);
11814 __attribute__((always_inline)) inline
11815 bool isNullOrUndefined() const {
11816 return isNull() || isUndefined();
11819 __attribute__((always_inline)) inline
11820 bool isInt32() const {
11821 return JSVAL_IS_INT32_IMPL(data);
11824 __attribute__((always_inline)) inline
11825 bool isInt32(int32_t i32) const {
11826 return JSVAL_IS_SPECIFIC_INT32_IMPL(data, i32);
11829 __attribute__((always_inline)) inline
11830 bool isDouble() const {
11831 return JSVAL_IS_DOUBLE_IMPL(data);
11834 __attribute__((always_inline)) inline
11835 bool isNumber() const {
11836 return JSVAL_IS_NUMBER_IMPL(data);
11839 __attribute__((always_inline)) inline
11840 bool isString() const {
11841 return JSVAL_IS_STRING_IMPL(data);
11844 __attribute__((always_inline)) inline
11845 bool isObject() const {
11846 return JSVAL_IS_OBJECT_IMPL(data);
11849 __attribute__((always_inline)) inline
11850 bool isPrimitive() const {
11851 return JSVAL_IS_PRIMITIVE_IMPL(data);
11854 __attribute__((always_inline)) inline
11855 bool isObjectOrNull() const {
11856 return JSVAL_IS_OBJECT_OR_NULL_IMPL(data);
11859 __attribute__((always_inline)) inline
11860 bool isGCThing() const {
11861 return JSVAL_IS_GCTHING_IMPL(data);
11864 __attribute__((always_inline)) inline
11865 bool isBoolean() const {
11866 return JSVAL_IS_BOOLEAN_IMPL(data);
11869 __attribute__((always_inline)) inline
11870 bool isTrue() const {
11871 return JSVAL_IS_SPECIFIC_BOOLEAN(data, true);
11874 __attribute__((always_inline)) inline
11875 bool isFalse() const {
11876 return JSVAL_IS_SPECIFIC_BOOLEAN(data, false);
11879 __attribute__((always_inline)) inline
11880 bool isMagic() const {
11881 return JSVAL_IS_MAGIC_IMPL(data);
11884 __attribute__((always_inline)) inline
11885 bool isMagic(JSWhyMagic why) const {
11887 return JSVAL_IS_MAGIC_IMPL(data);
11890 __attribute__((always_inline)) inline
11891 bool isMarkable() const {
11892 return JSVAL_IS_TRACEABLE_IMPL(data);
11895 __attribute__((always_inline)) inline
11896 JSGCTraceKind gcKind() const {
11898 return JSGCTraceKind(JSVAL_TRACE_KIND_IMPL(data));
11901 __attribute__((always_inline)) inline
11902 JSWhyMagic whyMagic() const {
11904 return data.s.payload.why;
11909 __attribute__((always_inline)) inline
11910 bool operator==(const Value &rhs) const {
11911 return data.asBits == rhs.data.asBits;
11914 __attribute__((always_inline)) inline
11915 bool operator!=(const Value &rhs) const {
11916 return data.asBits != rhs.data.asBits;
11919 friend inline bool SameType(const Value &lhs, const Value &rhs);
11923 __attribute__((always_inline)) inline
11924 int32_t toInt32() const {
11926 return JSVAL_TO_INT32_IMPL(data);
11929 __attribute__((always_inline)) inline
11930 double toDouble() const {
11932 return data.asDouble;
11935 __attribute__((always_inline)) inline
11936 double toNumber() const {
11938 return isDouble() ? toDouble() : double(toInt32());
11941 __attribute__((always_inline)) inline
11942 JSString *toString() const {
11944 return JSVAL_TO_STRING_IMPL(data);
11947 __attribute__((always_inline)) inline
11948 JSObject &toObject() const {
11950 return *JSVAL_TO_OBJECT_IMPL(data);
11953 __attribute__((always_inline)) inline
11954 JSObject *toObjectOrNull() const {
11956 return JSVAL_TO_OBJECT_IMPL(data);
11959 __attribute__((always_inline)) inline
11960 void *toGCThing() const {
11962 return JSVAL_TO_GCTHING_IMPL(data);
11965 __attribute__((always_inline)) inline
11966 bool toBoolean() const {
11968 return JSVAL_TO_BOOLEAN_IMPL(data);
11971 __attribute__((always_inline)) inline
11972 uint32_t payloadAsRawUint32() const {
11974 return data.s.payload.u32;
11977 __attribute__((always_inline)) inline
11978 uint64_t asRawBits() const {
11979 return data.asBits;
11982 __attribute__((always_inline)) inline
11983 JSValueType extractNonDoubleType() const {
11984 return JSVAL_EXTRACT_NON_DOUBLE_TYPE_IMPL(data);
11986 # 523 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
11987 __attribute__((always_inline)) inline
11988 void setPrivate(void *ptr) {
11989 data = PRIVATE_PTR_TO_JSVAL_IMPL(ptr);
11992 __attribute__((always_inline)) inline
11993 void *toPrivate() const {
11995 return JSVAL_TO_PRIVATE_PTR_IMPL(data);
11998 __attribute__((always_inline)) inline
11999 void setPrivateUint32(uint32_t ui) {
12000 data = PRIVATE_UINT32_TO_JSVAL_IMPL(ui);
12003 __attribute__((always_inline)) inline
12004 uint32_t toPrivateUint32() const {
12006 return JSVAL_TO_PRIVATE_UINT32_IMPL(data);
12009 __attribute__((always_inline)) inline
12010 uint32_t &getPrivateUint32Ref() {
12012 return data.s.payload.u32;
12021 __attribute__((always_inline)) inline
12022 void setUnmarkedPtr(void *ptr) {
12026 __attribute__((always_inline)) inline
12027 void *toUnmarkedPtr() const {
12031 const size_t *payloadWord() const {
12033 return &data.s.payload.word;
12039 const uintptr_t *payloadUIntPtr() const {
12041 return &data.s.payload.uintptr;
12059 void staticAssertions() {
12060 typedef int moz_static_assert8[(sizeof(JSValueType) == 1) ? 1 : -1];
12061 typedef int moz_static_assert9[(sizeof(JSValueTag) == 4) ? 1 : -1];
12062 typedef int moz_static_assert10[(sizeof(JSBool) == 4) ? 1 : -1];
12063 typedef int moz_static_assert11[(sizeof(JSWhyMagic) <= 4) ? 1 : -1];
12064 typedef int moz_static_assert12[(sizeof(Value) == 8) ? 1 : -1];
12067 friend jsval_layout (::JSVAL_TO_IMPL)(Value);
12068 friend Value (::IMPL_TO_JSVAL)(jsval_layout l);
12072 IsPoisonedValue(const Value &v)
12075 return IsPoisonedPtr(v.toString());
12077 return IsPoisonedPtr(&v.toObject());
12083 static __attribute__((always_inline)) inline Value
12091 static __attribute__((always_inline)) inline Value
12099 static __attribute__((always_inline)) inline Value
12100 Int32Value(int32_t i32)
12107 static __attribute__((always_inline)) inline Value
12108 DoubleValue(double dbl)
12115 static __attribute__((always_inline)) inline Value
12116 StringValue(JSString *str)
12123 static __attribute__((always_inline)) inline Value
12124 BooleanValue(bool boo)
12131 static __attribute__((always_inline)) inline Value
12132 ObjectValue(JSObject &obj)
12139 static __attribute__((always_inline)) inline Value
12140 MagicValue(JSWhyMagic why)
12147 static __attribute__((always_inline)) inline Value
12148 NumberValue(float f)
12155 static __attribute__((always_inline)) inline Value
12156 NumberValue(double dbl)
12163 static __attribute__((always_inline)) inline Value
12164 NumberValue(int8_t i)
12166 return Int32Value(i);
12169 static __attribute__((always_inline)) inline Value
12170 NumberValue(uint8_t i)
12172 return Int32Value(i);
12175 static __attribute__((always_inline)) inline Value
12176 NumberValue(int16_t i)
12178 return Int32Value(i);
12181 static __attribute__((always_inline)) inline Value
12182 NumberValue(uint16_t i)
12184 return Int32Value(i);
12187 static __attribute__((always_inline)) inline Value
12188 NumberValue(int32_t i)
12190 return Int32Value(i);
12193 static __attribute__((always_inline)) inline Value
12194 NumberValue(uint32_t i)
12203 template <bool Signed>
12204 class MakeNumberValue
12207 template<typename T>
12208 static inline Value create(const T t)
12211 if (((int32_t)0x80000000) <= t && t <= ((int32_t)0x7fffffff))
12212 v.setInt32(int32_t(t));
12214 v.setDouble(double(t));
12220 class MakeNumberValue<false>
12223 template<typename T>
12224 static inline Value create(const T t)
12227 if (t <= ((int32_t)0x7fffffff))
12228 v.setInt32(int32_t(t));
12230 v.setDouble(double(t));
12237 template <typename T>
12238 static __attribute__((always_inline)) inline Value
12239 NumberValue(const T t)
12242 return detail::MakeNumberValue<std::numeric_limits<T>::is_signed>::create(t);
12245 static __attribute__((always_inline)) inline Value
12246 ObjectOrNullValue(JSObject *obj)
12249 v.setObjectOrNull(obj);
12253 static __attribute__((always_inline)) inline Value
12254 PrivateValue(void *ptr)
12261 static __attribute__((always_inline)) inline Value
12262 PrivateUint32Value(uint32_t ui)
12265 v.setPrivateUint32(ui);
12269 __attribute__((always_inline)) inline bool
12270 SameType(const Value &lhs, const Value &rhs)
12272 return JSVAL_SAME_TYPE_IMPL(lhs.data, rhs.data);
12275 template <> struct RootMethods<const Value>
12277 static Value initial() { return UndefinedValue(); }
12278 static ThingRootKind kind() { return THING_ROOT_VALUE; }
12279 static bool poisoned(const Value &v) { return IsPoisonedValue(v); }
12282 template <> struct RootMethods<Value>
12284 static Value initial() { return UndefinedValue(); }
12285 static ThingRootKind kind() { return THING_ROOT_VALUE; }
12286 static bool poisoned(const Value &v) { return IsPoisonedValue(v); }
12288 # 864 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12289 #define CHECK_REQUEST(cx) ((void) 0)
12290 # 875 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12291 inline void AssertArgumentsAreSane(JSContext *cx, const Value &v) {
12296 class __attribute__((visibility("default"))) AutoGCRooter {
12298 AutoGCRooter(JSContext *cx, ptrdiff_t tag);
12306 inline void trace(JSTracer *trc);
12307 static void traceAll(JSTracer *trc);
12310 AutoGCRooter * const down;
12311 # 903 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12335 STACKBASESHAPE=-21,
12343 AutoGCRooter ** const stackTop;
12346 AutoGCRooter(AutoGCRooter &ida) ;
12347 void operator=(AutoGCRooter &ida) ;
12350 class AutoValueRooter : private AutoGCRooter
12353 explicit AutoValueRooter(JSContext *cx
12355 : AutoGCRooter(cx, JSVAL), val(NullValue())
12360 AutoValueRooter(JSContext *cx, const Value &v
12362 : AutoGCRooter(cx, JSVAL), val(v)
12373 void set(Value v) {
12378 const Value &value() const {
12388 const Value &jsval_value() const {
12393 Value *jsval_addr() {
12398 friend void AutoGCRooter::trace(JSTracer *trc);
12405 class AutoObjectRooter : private AutoGCRooter {
12407 AutoObjectRooter(JSContext *cx, JSObject *obj = __null
12409 : AutoGCRooter(cx, OBJECT), obj(obj)
12414 void setObject(JSObject *obj) {
12418 JSObject * object() const {
12422 JSObject ** addr() {
12426 friend void AutoGCRooter::trace(JSTracer *trc);
12433 class AutoStringRooter : private AutoGCRooter {
12435 AutoStringRooter(JSContext *cx, JSString *str = __null
12437 : AutoGCRooter(cx, STRING), str(str)
12442 void setString(JSString *str) {
12446 JSString * string() const {
12450 JSString ** addr() {
12454 friend void AutoGCRooter::trace(JSTracer *trc);
12461 class AutoArrayRooter : private AutoGCRooter {
12463 AutoArrayRooter(JSContext *cx, size_t len, Value *vec
12465 : AutoGCRooter(cx, len), array(vec), skip(cx, array, len)
12471 void changeLength(size_t newLength) {
12472 tag = ptrdiff_t(newLength);
12476 void changeArray(Value *newArray, size_t newLength) {
12477 changeLength(newLength);
12483 friend void AutoGCRooter::trace(JSTracer *trc);
12492 class AutoEnumStateRooter : private AutoGCRooter
12495 AutoEnumStateRooter(JSContext *cx, JSObject *obj
12497 : AutoGCRooter(cx, ENUMERATOR), obj(obj), stateValue(), context(cx)
12503 ~AutoEnumStateRooter();
12505 friend void AutoGCRooter::trace(JSTracer *trc);
12507 const Value &state() const { return stateValue; }
12508 Value *addr() { return &stateValue; }
12511 void trace(JSTracer *trc);
12517 JSContext *context;
12522 class AutoVectorRooter : protected AutoGCRooter
12525 explicit AutoVectorRooter(JSContext *cx, ptrdiff_t tag
12527 : AutoGCRooter(cx, tag), vector(cx), vectorRoot(cx, &vector)
12532 size_t length() const { return vector.length(); }
12534 bool append(const T &v) { return vector.append(v); }
12537 void infallibleAppend(const T &v) { vector.infallibleAppend(v); }
12539 void popBack() { vector.popBack(); }
12540 T popCopy() { return vector.popCopy(); }
12542 bool growBy(size_t inc) {
12543 size_t oldLength = vector.length();
12544 if (!vector.growByUninitialized(inc))
12546 makeRangeGCSafe(oldLength);
12550 bool resize(size_t newLength) {
12551 size_t oldLength = vector.length();
12552 if (newLength <= oldLength) {
12553 vector.shrinkBy(oldLength - newLength);
12556 if (!vector.growByUninitialized(newLength - oldLength))
12558 makeRangeGCSafe(oldLength);
12562 void clear() { vector.clear(); }
12564 bool reserve(size_t newLength) {
12565 return vector.reserve(newLength);
12568 T &operator[](size_t i) { return vector[i]; }
12569 const T &operator[](size_t i) const { return vector[i]; }
12571 const T *begin() const { return vector.begin(); }
12572 T *begin() { return vector.begin(); }
12574 const T *end() const { return vector.end(); }
12575 T *end() { return vector.end(); }
12577 const T &back() const { return vector.back(); }
12579 friend void AutoGCRooter::trace(JSTracer *trc);
12582 void makeRangeGCSafe(size_t oldLength) {
12583 T *t = vector.begin() + oldLength;
12584 for (size_t i = oldLength; i < vector.length(); ++i, ++t)
12585 memset(t, 0, sizeof(T));
12588 typedef js::Vector<T, 8> VectorImpl;
12592 SkipRoot vectorRoot;
12597 class AutoValueVector : public AutoVectorRooter<Value>
12600 explicit AutoValueVector(JSContext *cx
12602 : AutoVectorRooter<Value>(cx, VALVECTOR)
12610 class AutoIdVector : public AutoVectorRooter<jsid>
12613 explicit AutoIdVector(JSContext *cx
12615 : AutoVectorRooter<jsid>(cx, IDVECTOR)
12623 class AutoScriptVector : public AutoVectorRooter<JSScript *>
12626 explicit AutoScriptVector(JSContext *cx
12628 : AutoVectorRooter<JSScript *>(cx, SCRIPTVECTOR)
12637 # 1236 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12638 typedef JS::Value jsval;
12640 static __attribute__((always_inline)) inline jsval_layout
12641 JSVAL_TO_IMPL(jsval v)
12646 static __attribute__((always_inline)) inline jsval
12647 IMPL_TO_JSVAL(jsval_layout l)
12653 # 1286 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12654 typedef int moz_static_assert13[(sizeof(jsval_layout) == sizeof(jsval)) ? 1 : -1];
12660 typedef JS::Handle<JSObject*> JSHandleObject;
12661 typedef JS::Handle<jsid> JSHandleId;
12662 # 1322 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12664 (* JSPropertyOp)(JSContext *cx, JSHandleObject obj, JSHandleId id, jsval *vp);
12665 # 1332 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12667 (* JSStrictPropertyOp)(JSContext *cx, JSHandleObject obj, JSHandleId id, JSBool strict, jsval *vp);
12668 # 1367 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12670 (* JSNewEnumerateOp)(JSContext *cx, JSHandleObject obj, JSIterateOp enum_op,
12671 jsval *statep, jsid *idp);
12678 (* JSEnumerateOp)(JSContext *cx, JSHandleObject obj);
12679 # 1390 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12681 (* JSResolveOp)(JSContext *cx, JSHandleObject obj, JSHandleId id);
12682 # 1421 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12684 (* JSNewResolveOp)(JSContext *cx, JSHandleObject obj, JSHandleId id, unsigned flags,
12692 (* JSConvertOp)(JSContext *cx, JSHandleObject obj, JSType type, jsval *vp);
12698 (* JSTypeOfOp)(JSContext *cx, JSObject *obj);
12700 typedef struct JSFreeOp JSFreeOp;
12707 JSRuntime *runtime_;
12710 JSFreeOp(JSRuntime *rt)
12714 JSRuntime *runtime() const {
12726 (* JSFinalizeOp)(JSFreeOp *fop, JSObject *obj);
12731 typedef struct JSStringFinalizer JSStringFinalizer;
12733 struct JSStringFinalizer {
12734 void (*finalize)(const JSStringFinalizer *fin, jschar *chars);
12744 (* JSCheckAccessOp)(JSContext *cx, JSHandleObject obj, JSHandleId id, JSAccessMode mode,
12753 (* JSHasInstanceOp)(JSContext *cx, JSHandleObject obj, const jsval *v, JSBool *bp);
12754 # 1510 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12756 (* JSTraceOp)(JSTracer *trc, JSObject *obj);
12763 (* JSTraceNamePrinter)(JSTracer *trc, char *buf, size_t bufsize);
12766 (* JSEqualityOp)(JSContext *cx, JSHandleObject obj, const jsval *v, JSBool *bp);
12775 (* JSNative)(JSContext *cx, unsigned argc, jsval *vp);
12779 typedef enum JSContextOp {
12783 # 1552 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12785 (* JSContextCallback)(JSContext *cx, unsigned contextOp);
12787 typedef enum JSGCStatus {
12793 (* JSGCCallback)(JSRuntime *rt, JSGCStatus status);
12795 typedef enum JSFinalizeStatus {
12798 } JSFinalizeStatus;
12801 (* JSFinalizeCallback)(JSFreeOp *fop, JSFinalizeStatus status, JSBool isCompartment);
12808 (* JSTraceDataOp)(JSTracer *trc, void *data);
12811 (* JSOperationCallback)(JSContext *cx);
12814 (* JSErrorReporter)(JSContext *cx, const char *message, JSErrorReport *report);
12815 # 1597 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12816 typedef enum JSExnType {
12822 JSEXN_REFERENCEERR,
12829 typedef struct JSErrorFormatString {
12831 const char *format;
12838 } JSErrorFormatString;
12840 typedef const JSErrorFormatString *
12841 (* JSErrorCallback)(void *userRef, const char *locale,
12842 const unsigned errorNumber);
12843 # 1633 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12845 (* JSLocaleToUpperCase)(JSContext *cx, JSString *src, jsval *rval);
12848 (* JSLocaleToLowerCase)(JSContext *cx, JSString *src, jsval *rval);
12851 (* JSLocaleCompare)(JSContext *cx, JSString *src1, JSString *src2,
12855 (* JSLocaleToUnicode)(JSContext *cx, const char *src, jsval *rval);
12862 (* JSDestroyPrincipalsOp)(JSPrincipals *principals);
12865 (* JSSubsumePrincipalsOp)(JSPrincipals *principals1, JSPrincipals *principals2);
12866 # 1664 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12867 typedef JSPrincipals *
12868 (* JSObjectPrincipalsFinder)(JSObject *obj);
12875 (* JSCSPEvalChecker)(JSContext *cx);
12882 (* JSPushContextPrincipalOp)(JSContext *cx, JSPrincipals *principals);
12885 (* JSPopContextPrincipalOp)(JSContext *cx);
12893 (* JSWrapObjectCallback)(JSContext *cx, JSObject *obj, JSObject *proto, JSObject *parent,
12902 (* JSPreWrapCallback)(JSContext *cx, JSObject *scope, JSObject *obj, unsigned flags);
12903 # 1711 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12905 (* JSSameCompartmentWrapObjectCallback)(JSContext *cx, JSObject *obj);
12908 (* JSDestroyCompartmentCallback)(JSFreeOp *fop, JSCompartment *compartment);
12909 # 1726 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12910 typedef JSObject *(*ReadStructuredCloneOp)(JSContext *cx, JSStructuredCloneReader *r,
12911 uint32_t tag, uint32_t data, void *closure);
12912 # 1740 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12913 typedef JSBool (*WriteStructuredCloneOp)(JSContext *cx, JSStructuredCloneWriter *w,
12914 JSObject *obj, void *closure);
12921 typedef void (*StructuredCloneErrorOp)(JSContext *cx, uint32_t errorid);
12926 # 1769 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
12927 extern __attribute__((visibility("default"))) const jsval JSVAL_NULL;
12928 extern __attribute__((visibility("default"))) const jsval JSVAL_ZERO;
12929 extern __attribute__((visibility("default"))) const jsval JSVAL_ONE;
12930 extern __attribute__((visibility("default"))) const jsval JSVAL_FALSE;
12931 extern __attribute__((visibility("default"))) const jsval JSVAL_TRUE;
12932 extern __attribute__((visibility("default"))) const jsval JSVAL_VOID;
12936 static __attribute__((always_inline)) inline JSBool
12937 JSVAL_IS_NULL(jsval v)
12939 return JSVAL_IS_NULL_IMPL(JSVAL_TO_IMPL(v));
12942 static __attribute__((always_inline)) inline JSBool
12943 JSVAL_IS_VOID(jsval v)
12945 return JSVAL_IS_UNDEFINED_IMPL(JSVAL_TO_IMPL(v));
12948 static __attribute__((always_inline)) inline JSBool
12949 JSVAL_IS_INT(jsval v)
12951 return JSVAL_IS_INT32_IMPL(JSVAL_TO_IMPL(v));
12954 static __attribute__((always_inline)) inline int32_t
12955 JSVAL_TO_INT(jsval v)
12958 return JSVAL_TO_INT32_IMPL(JSVAL_TO_IMPL(v));
12961 static __attribute__((always_inline)) inline jsval
12962 INT_TO_JSVAL(int32_t i)
12964 return IMPL_TO_JSVAL(INT32_TO_JSVAL_IMPL(i));
12967 static __attribute__((always_inline)) inline JSBool
12968 JSVAL_IS_DOUBLE(jsval v)
12970 return JSVAL_IS_DOUBLE_IMPL(JSVAL_TO_IMPL(v));
12973 static __attribute__((always_inline)) inline double
12974 JSVAL_TO_DOUBLE(jsval v)
12978 l = JSVAL_TO_IMPL(v);
12982 static __attribute__((always_inline)) inline jsval
12983 DOUBLE_TO_JSVAL(double d)
12990 if ((__builtin_expect((d != d), 0))) {
12991 l.asBits = 0x7FF8000000000000LL;
12995 return IMPL_TO_JSVAL(l);
12998 static __attribute__((always_inline)) inline jsval
12999 UINT_TO_JSVAL(uint32_t i)
13001 if (i <= ((int32_t)0x7fffffff))
13002 return INT_TO_JSVAL((int32_t)i);
13003 return DOUBLE_TO_JSVAL((double)i);
13006 static __attribute__((always_inline)) inline JSBool
13007 JSVAL_IS_NUMBER(jsval v)
13009 return JSVAL_IS_NUMBER_IMPL(JSVAL_TO_IMPL(v));
13012 static __attribute__((always_inline)) inline JSBool
13013 JSVAL_IS_STRING(jsval v)
13015 return JSVAL_IS_STRING_IMPL(JSVAL_TO_IMPL(v));
13018 static __attribute__((always_inline)) inline JSString *
13019 JSVAL_TO_STRING(jsval v)
13022 return JSVAL_TO_STRING_IMPL(JSVAL_TO_IMPL(v));
13025 static __attribute__((always_inline)) inline jsval
13026 STRING_TO_JSVAL(JSString *str)
13028 return IMPL_TO_JSVAL(STRING_TO_JSVAL_IMPL(str));
13031 static __attribute__((always_inline)) inline JSObject *
13032 JSVAL_TO_OBJECT(jsval v)
13035 return JSVAL_TO_OBJECT_IMPL(JSVAL_TO_IMPL(v));
13038 static __attribute__((always_inline)) inline jsval
13039 OBJECT_TO_JSVAL(JSObject *obj)
13042 return IMPL_TO_JSVAL(OBJECT_TO_JSVAL_IMPL(obj));
13046 static __attribute__((always_inline)) inline JSBool
13047 JSVAL_IS_BOOLEAN(jsval v)
13049 return JSVAL_IS_BOOLEAN_IMPL(JSVAL_TO_IMPL(v));
13052 static __attribute__((always_inline)) inline JSBool
13053 JSVAL_TO_BOOLEAN(jsval v)
13056 return JSVAL_TO_BOOLEAN_IMPL(JSVAL_TO_IMPL(v));
13059 static __attribute__((always_inline)) inline jsval
13060 BOOLEAN_TO_JSVAL(JSBool b)
13062 return IMPL_TO_JSVAL(BOOLEAN_TO_JSVAL_IMPL(b));
13065 static __attribute__((always_inline)) inline JSBool
13066 JSVAL_IS_PRIMITIVE(jsval v)
13068 return JSVAL_IS_PRIMITIVE_IMPL(JSVAL_TO_IMPL(v));
13071 static __attribute__((always_inline)) inline JSBool
13072 JSVAL_IS_GCTHING(jsval v)
13074 return JSVAL_IS_GCTHING_IMPL(JSVAL_TO_IMPL(v));
13077 static __attribute__((always_inline)) inline void *
13078 JSVAL_TO_GCTHING(jsval v)
13081 return JSVAL_TO_GCTHING_IMPL(JSVAL_TO_IMPL(v));
13086 static __attribute__((always_inline)) inline jsval
13087 PRIVATE_TO_JSVAL(void *ptr)
13089 return IMPL_TO_JSVAL(PRIVATE_PTR_TO_JSVAL_IMPL(ptr));
13092 static __attribute__((always_inline)) inline void *
13093 JSVAL_TO_PRIVATE(jsval v)
13096 return JSVAL_TO_PRIVATE_PTR_IMPL(JSVAL_TO_IMPL(v));
13098 # 1955 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13099 #define JSID_TYPE_STRING 0x0
13100 #define JSID_TYPE_INT 0x1
13101 #define JSID_TYPE_VOID 0x2
13102 #define JSID_TYPE_OBJECT 0x4
13103 #define JSID_TYPE_DEFAULT_XML_NAMESPACE 0x6
13104 #define JSID_TYPE_MASK 0x7
13112 static __attribute__((always_inline)) inline JSBool
13113 JSID_IS_STRING(jsid iden)
13115 return ((iden) & 0x7) == 0;
13118 static __attribute__((always_inline)) inline JSString *
13119 JSID_TO_STRING(jsid iden)
13122 return (JSString *)(iden);
13125 static __attribute__((always_inline)) inline JSBool
13126 JSID_IS_ZERO(jsid iden)
13128 return (iden) == 0;
13131 __attribute__((visibility("default"))) JSBool
13132 JS_StringHasBeenInterned(JSContext *cx, JSString *str);
13133 # 1997 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13134 __attribute__((visibility("default"))) jsid
13135 INTERNED_STRING_TO_JSID(JSContext *cx, JSString *str);
13137 static __attribute__((always_inline)) inline JSBool
13138 JSID_IS_INT(jsid iden)
13140 return !!((iden) & 0x1);
13143 static __attribute__((always_inline)) inline int32_t
13144 JSID_TO_INT(jsid iden)
13147 return ((uint32_t)(iden)) >> 1;
13150 #define JSID_INT_MIN 0
13151 #define JSID_INT_MAX INT32_MAX
13153 static __attribute__((always_inline)) inline JSBool
13154 INT_FITS_IN_JSID(int32_t i)
13159 static __attribute__((always_inline)) inline jsid
13160 INT_TO_JSID(int32_t i)
13164 (iden) = ((i << 1) | 0x1);
13168 static __attribute__((always_inline)) inline JSBool
13169 JSID_IS_OBJECT(jsid iden)
13171 return ((iden) & 0x7) == 0x4 &&
13172 (size_t)(iden) != 0x4;
13175 static __attribute__((always_inline)) inline JSObject *
13176 JSID_TO_OBJECT(jsid iden)
13179 return (JSObject *)((iden) & ~(size_t)0x7);
13182 static __attribute__((always_inline)) inline jsid
13183 OBJECT_TO_JSID(JSObject *obj)
13188 (iden) = ((size_t)obj | 0x4);
13192 static __attribute__((always_inline)) inline JSBool
13193 JSID_IS_GCTHING(jsid iden)
13195 return JSID_IS_STRING(iden) || JSID_IS_OBJECT(iden);
13198 static __attribute__((always_inline)) inline void *
13199 JSID_TO_GCTHING(jsid iden)
13201 return (void *)((iden) & ~(size_t)0x7);
13209 static __attribute__((always_inline)) inline JSBool
13210 JSID_IS_DEFAULT_XML_NAMESPACE(jsid iden)
13214 return ((size_t)(iden) == 0x6);
13220 #define JS_DEFAULT_XML_NAMESPACE_ID ((jsid)JSID_TYPE_DEFAULT_XML_NAMESPACE)
13221 # 2093 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13222 static __attribute__((always_inline)) inline JSBool
13223 JSID_IS_VOID(jsid iden)
13227 return ((size_t)(iden) == 0x2);
13230 static __attribute__((always_inline)) inline JSBool
13231 JSID_IS_EMPTY(jsid iden)
13233 return ((size_t)(iden) == 0x4);
13242 #define JSID_VOID ((jsid)JSID_TYPE_VOID)
13243 #define JSID_EMPTY ((jsid)JSID_TYPE_OBJECT)
13250 static __attribute__((always_inline)) inline JSBool
13251 JSVAL_IS_UNIVERSAL(jsval v)
13253 return !JSVAL_IS_GCTHING(v);
13260 class AutoIdRooter : private AutoGCRooter
13263 explicit AutoIdRooter(JSContext *cx, jsid id = INT_TO_JSID(0)
13265 : AutoGCRooter(cx, ID), id_(id)
13278 friend void AutoGCRooter::trace(JSTracer *trc);
13292 #define JSVAL_LOCK(cx,v) (JSVAL_IS_GCTHING(v) ? JS_LockGCThing(cx, JSVAL_TO_GCTHING(v)) : JS_TRUE)
13295 #define JSVAL_UNLOCK(cx,v) (JSVAL_IS_GCTHING(v) ? JS_UnlockGCThing(cx, JSVAL_TO_GCTHING(v)) : JS_TRUE)
13300 #define JSPROP_ENUMERATE 0x01
13301 #define JSPROP_READONLY 0x02
13305 #define JSPROP_PERMANENT 0x04
13306 #define JSPROP_GETTER 0x10
13307 #define JSPROP_SETTER 0x20
13308 #define JSPROP_SHARED 0x40
13313 #define JSPROP_INDEX 0x80
13314 #define JSPROP_SHORTID 0x100
13316 #define JSPROP_NATIVE_ACCESSORS 0x08
13320 #define JSFUN_LAMBDA 0x08
13321 #define JSFUN_HEAVYWEIGHT 0x80
13323 #define JSFUN_HEAVYWEIGHT_TEST(f) ((f) & JSFUN_HEAVYWEIGHT)
13325 #define JSFUN_HAS_REST 0x0100
13326 #define JSFUN_CONSTRUCTOR 0x0200
13328 #define JSFUN_HAS_DEFAULTS 0x0400
13331 #define JSFUN_FLAGS_MASK 0x07f8
13335 #define JSFUN_STUB_GSOPS 0x1000
13336 # 2221 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13337 #define JSFUN_GENERIC_NATIVE JSFUN_LAMBDA
13338 # 2231 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13339 extern __attribute__((visibility("default"))) JSBool
13340 JS_CallOnce(JSCallOnceType *once, JSInitCallback func);
13343 extern __attribute__((visibility("default"))) int64_t
13347 extern __attribute__((visibility("default"))) jsval
13348 JS_GetNaNValue(JSContext *cx);
13350 extern __attribute__((visibility("default"))) jsval
13351 JS_GetNegativeInfinityValue(JSContext *cx);
13353 extern __attribute__((visibility("default"))) jsval
13354 JS_GetPositiveInfinityValue(JSContext *cx);
13356 extern __attribute__((visibility("default"))) jsval
13357 JS_GetEmptyStringValue(JSContext *cx);
13359 extern __attribute__((visibility("default"))) JSString *
13360 JS_GetEmptyString(JSRuntime *rt);
13361 # 2286 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13362 extern __attribute__((visibility("default"))) JSBool
13363 JS_ConvertArguments(JSContext *cx, unsigned argc, jsval *argv, const char *format,
13365 # 2346 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13366 extern __attribute__((visibility("default"))) JSBool
13367 JS_ConvertValue(JSContext *cx, jsval v, JSType type, jsval *vp);
13369 extern __attribute__((visibility("default"))) JSBool
13370 JS_ValueToObject(JSContext *cx, jsval v, JSObject **objp);
13372 extern __attribute__((visibility("default"))) JSFunction *
13373 JS_ValueToFunction(JSContext *cx, jsval v);
13375 extern __attribute__((visibility("default"))) JSFunction *
13376 JS_ValueToConstructor(JSContext *cx, jsval v);
13378 extern __attribute__((visibility("default"))) JSString *
13379 JS_ValueToString(JSContext *cx, jsval v);
13381 extern __attribute__((visibility("default"))) JSString *
13382 JS_ValueToSource(JSContext *cx, jsval v);
13384 extern __attribute__((visibility("default"))) JSBool
13385 JS_ValueToNumber(JSContext *cx, jsval v, double *dp);
13392 extern __attribute__((visibility("default"))) bool
13393 ToNumberSlow(JSContext *cx, JS::Value v, double *dp);
13399 __attribute__((always_inline)) inline bool
13400 ToNumber(JSContext *cx, const Value &v, double *out)
13402 AssertArgumentsAreSane(cx, v);
13404 if (v.isNumber()) {
13405 *out = v.toNumber();
13406 MaybeCheckStackRoots(cx);
13409 return js::ToNumberSlow(cx, v, out);
13415 extern __attribute__((visibility("default"))) JSBool
13416 JS_DoubleIsInt32(double d, int32_t *ip);
13418 extern __attribute__((visibility("default"))) int32_t
13419 JS_DoubleToInt32(double d);
13421 extern __attribute__((visibility("default"))) uint32_t
13422 JS_DoubleToUint32(double d);
13428 extern __attribute__((visibility("default"))) JSBool
13429 JS_ValueToECMAInt32(JSContext *cx, jsval v, int32_t *ip);
13436 extern __attribute__((visibility("default"))) bool
13437 ToInt32Slow(JSContext *cx, const JS::Value &v, int32_t *out);
13442 __attribute__((always_inline)) inline bool
13443 ToInt32(JSContext *cx, const js::Value &v, int32_t *out)
13445 AssertArgumentsAreSane(cx, v);
13447 *out = v.toInt32();
13450 return js::ToInt32Slow(cx, v, out);
13460 extern __attribute__((visibility("default"))) JSBool
13461 JS_ValueToECMAUint32(JSContext *cx, jsval v, uint32_t *ip);
13468 extern __attribute__((visibility("default"))) JSBool
13469 JS_ValueToInt32(JSContext *cx, jsval v, int32_t *ip);
13474 extern __attribute__((visibility("default"))) JSBool
13475 JS_ValueToUint16(JSContext *cx, jsval v, uint16_t *ip);
13477 extern __attribute__((visibility("default"))) JSBool
13478 JS_ValueToBoolean(JSContext *cx, jsval v, JSBool *bp);
13480 extern __attribute__((visibility("default"))) JSType
13481 JS_TypeOfValue(JSContext *cx, jsval v);
13483 extern __attribute__((visibility("default"))) const char *
13484 JS_GetTypeName(JSContext *cx, JSType type);
13486 extern __attribute__((visibility("default"))) JSBool
13487 JS_StrictlyEqual(JSContext *cx, jsval v1, jsval v2, JSBool *equal);
13489 extern __attribute__((visibility("default"))) JSBool
13490 JS_LooselyEqual(JSContext *cx, jsval v1, jsval v2, JSBool *equal);
13492 extern __attribute__((visibility("default"))) JSBool
13493 JS_SameValue(JSContext *cx, jsval v1, jsval v2, JSBool *same);
13496 extern __attribute__((visibility("default"))) JSBool
13497 JS_IsBuiltinEvalFunction(JSFunction *fun);
13500 extern __attribute__((visibility("default"))) JSBool
13501 JS_IsBuiltinFunctionConstructor(JSFunction *fun);
13502 # 2492 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13503 #define JS_NewRuntime JS_Init
13504 #define JS_DestroyRuntime JS_Finish
13505 #define JS_LockRuntime JS_Lock
13506 #define JS_UnlockRuntime JS_Unlock
13508 extern __attribute__((visibility("default"))) JSRuntime *
13509 JS_Init(uint32_t maxbytes);
13512 #define JS_CommenceRuntimeShutDown(rt) ((void) 0)
13514 extern __attribute__((visibility("default"))) void
13515 JS_Finish(JSRuntime *rt);
13517 extern __attribute__((visibility("default"))) void
13520 __attribute__((visibility("default"))) void *
13521 JS_GetRuntimePrivate(JSRuntime *rt);
13523 extern __attribute__((visibility("default"))) JSRuntime *
13524 JS_GetRuntime(JSContext *cx);
13526 __attribute__((visibility("default"))) void
13527 JS_SetRuntimePrivate(JSRuntime *rt, void *data);
13529 extern __attribute__((visibility("default"))) void
13530 JS_BeginRequest(JSContext *cx);
13532 extern __attribute__((visibility("default"))) void
13533 JS_EndRequest(JSContext *cx);
13536 extern __attribute__((visibility("default"))) void
13537 JS_YieldRequest(JSContext *cx);
13539 extern __attribute__((visibility("default"))) unsigned
13540 JS_SuspendRequest(JSContext *cx);
13542 extern __attribute__((visibility("default"))) void
13543 JS_ResumeRequest(JSContext *cx, unsigned saveDepth);
13545 extern __attribute__((visibility("default"))) JSBool
13546 JS_IsInRequest(JSRuntime *rt);
13548 extern __attribute__((visibility("default"))) JSBool
13549 JS_IsInSuspendedRequest(JSRuntime *rt);
13557 IsPoisonedId(jsid iden)
13559 if (JSID_IS_STRING(iden))
13560 return JS::IsPoisonedPtr(JSID_TO_STRING(iden));
13561 if (JSID_IS_OBJECT(iden))
13562 return JS::IsPoisonedPtr(JSID_TO_OBJECT(iden));
13566 template <> struct RootMethods<const jsid>
13568 static jsid initial() { return ((jsid)0x2); }
13569 static ThingRootKind kind() { return THING_ROOT_ID; }
13570 static bool poisoned(jsid id) { return IsPoisonedId(id); }
13573 template <> struct RootMethods<jsid>
13575 static jsid initial() { return ((jsid)0x2); }
13576 static ThingRootKind kind() { return THING_ROOT_ID; }
13577 static bool poisoned(jsid id) { return IsPoisonedId(id); }
13582 class JSAutoRequest {
13584 JSAutoRequest(JSContext *cx )
13585 : mContext(cx), mSaveDepth(0) {
13587 JS_BeginRequest(mContext);
13590 JS_EndRequest(mContext);
13594 mSaveDepth = JS_SuspendRequest(mContext);
13597 JS_ResumeRequest(mContext, mSaveDepth);
13601 JSContext *mContext;
13602 unsigned mSaveDepth;
13612 class JSAutoSuspendRequest {
13614 JSAutoSuspendRequest(JSContext *cx )
13615 : mContext(cx), mSaveDepth(0) {
13618 mSaveDepth = JS_SuspendRequest(mContext);
13621 ~JSAutoSuspendRequest() {
13627 JS_ResumeRequest(mContext, mSaveDepth);
13633 JSContext *mContext;
13634 unsigned mSaveDepth;
13644 class JSAutoCheckRequest {
13646 JSAutoCheckRequest(JSContext *cx ) {
13654 ~JSAutoCheckRequest() {
13671 extern __attribute__((visibility("default"))) JSContextCallback
13672 JS_SetContextCallback(JSRuntime *rt, JSContextCallback cxCallback);
13674 extern __attribute__((visibility("default"))) JSContext *
13675 JS_NewContext(JSRuntime *rt, size_t stackChunkSize);
13677 extern __attribute__((visibility("default"))) void
13678 JS_DestroyContext(JSContext *cx);
13680 extern __attribute__((visibility("default"))) void
13681 JS_DestroyContextNoGC(JSContext *cx);
13683 extern __attribute__((visibility("default"))) void *
13684 JS_GetContextPrivate(JSContext *cx);
13686 extern __attribute__((visibility("default"))) void
13687 JS_SetContextPrivate(JSContext *cx, void *data);
13689 extern __attribute__((visibility("default"))) void *
13690 JS_GetSecondContextPrivate(JSContext *cx);
13692 extern __attribute__((visibility("default"))) void
13693 JS_SetSecondContextPrivate(JSContext *cx, void *data);
13695 extern __attribute__((visibility("default"))) JSRuntime *
13696 JS_GetRuntime(JSContext *cx);
13698 extern __attribute__((visibility("default"))) JSContext *
13699 JS_ContextIterator(JSRuntime *rt, JSContext **iterp);
13701 extern __attribute__((visibility("default"))) JSVersion
13702 JS_GetVersion(JSContext *cx);
13704 extern __attribute__((visibility("default"))) JSVersion
13705 JS_SetVersion(JSContext *cx, JSVersion version);
13707 extern __attribute__((visibility("default"))) const char *
13708 JS_VersionToString(JSVersion version);
13710 extern __attribute__((visibility("default"))) JSVersion
13711 JS_StringToVersion(const char *string);
13712 # 2709 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13713 #define JSOPTION_STRICT JS_BIT(0)
13714 #define JSOPTION_WERROR JS_BIT(1)
13715 #define JSOPTION_VAROBJFIX JS_BIT(2)
13719 #define JSOPTION_PRIVATE_IS_NSISUPPORTS JS_BIT(3)
13722 #define JSOPTION_COMPILE_N_GO JS_BIT(4)
13727 #define JSOPTION_ATLINE JS_BIT(5)
13731 #define JSOPTION_ALLOW_XML JS_BIT(6)
13735 #define JSOPTION_MOAR_XML JS_BIT(7)
13741 #define JSOPTION_DONT_REPORT_UNCAUGHT JS_BIT(8)
13748 #define JSOPTION_RELIMIT JS_BIT(9)
13749 # 2753 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13750 #define JSOPTION_NO_SCRIPT_RVAL JS_BIT(12)
13754 #define JSOPTION_UNROOTED_GLOBAL JS_BIT(13)
13760 #define JSOPTION_METHODJIT JS_BIT(14)
13764 #define JSOPTION_METHODJIT_ALWAYS JS_BIT(16)
13767 #define JSOPTION_PCCOUNT JS_BIT(17)
13769 #define JSOPTION_TYPE_INFERENCE JS_BIT(18)
13770 #define JSOPTION_STRICT_MODE JS_BIT(19)
13776 #define JSCOMPILEOPTION_MASK (JSOPTION_ALLOW_XML | JSOPTION_MOAR_XML)
13778 #define JSRUNOPTION_MASK (JS_BITMASK(20) & ~JSCOMPILEOPTION_MASK)
13779 #define JSALLOPTION_MASK (JSCOMPILEOPTION_MASK | JSRUNOPTION_MASK)
13781 extern __attribute__((visibility("default"))) uint32_t
13782 JS_GetOptions(JSContext *cx);
13784 extern __attribute__((visibility("default"))) uint32_t
13785 JS_SetOptions(JSContext *cx, uint32_t options);
13787 extern __attribute__((visibility("default"))) uint32_t
13788 JS_ToggleOptions(JSContext *cx, uint32_t options);
13790 extern __attribute__((visibility("default"))) void
13791 JS_SetJitHardening(JSRuntime *rt, JSBool enabled);
13793 extern __attribute__((visibility("default"))) const char *
13794 JS_GetImplementationVersion(void);
13796 extern __attribute__((visibility("default"))) void
13797 JS_SetDestroyCompartmentCallback(JSRuntime *rt, JSDestroyCompartmentCallback callback);
13799 extern __attribute__((visibility("default"))) JSWrapObjectCallback
13800 JS_SetWrapObjectCallbacks(JSRuntime *rt,
13801 JSWrapObjectCallback callback,
13802 JSSameCompartmentWrapObjectCallback sccallback,
13803 JSPreWrapCallback precallback);
13805 extern __attribute__((visibility("default"))) JSCrossCompartmentCall *
13806 JS_EnterCrossCompartmentCall(JSContext *cx, JSObject *target);
13808 extern __attribute__((visibility("default"))) void
13809 JS_LeaveCrossCompartmentCall(JSCrossCompartmentCall *call);
13811 extern __attribute__((visibility("default"))) void
13812 JS_SetCompartmentPrivate(JSCompartment *compartment, void *data);
13814 extern __attribute__((visibility("default"))) void *
13815 JS_GetCompartmentPrivate(JSCompartment *compartment);
13817 extern __attribute__((visibility("default"))) JSBool
13818 JS_WrapObject(JSContext *cx, JSObject **objp);
13820 extern __attribute__((visibility("default"))) JSBool
13821 JS_WrapValue(JSContext *cx, jsval *vp);
13823 extern __attribute__((visibility("default"))) JSObject *
13824 JS_TransplantObject(JSContext *cx, JSObject *origobj, JSObject *target);
13826 extern __attribute__((visibility("default"))) JSObject *
13827 js_TransplantObjectWithWrapper(JSContext *cx,
13829 JSObject *origwrapper,
13830 JSObject *targetobj,
13831 JSObject *targetwrapper);
13833 extern __attribute__((visibility("default"))) JSBool
13834 JS_RefreshCrossCompartmentWrappers(JSContext *cx, JSObject *ob);
13840 class AutoCompartment;
13843 class __attribute__((visibility("default"))) JSAutoEnterCompartment
13845 # 2856 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13846 void* bytes[sizeof(void*) == 4 && mozilla::AlignmentFinder<uint64_t>::alignment == 8 ? 16 : 13];
13849 js::AutoCompartment *getAutoCompartment() {
13851 return reinterpret_cast<js::AutoCompartment*>(bytes);
13853 # 2872 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13856 STATE_SAME_COMPARTMENT,
13857 STATE_OTHER_COMPARTMENT
13861 JSAutoEnterCompartment() : state(STATE_UNENTERED) {}
13863 bool enter(JSContext *cx, JSObject *target);
13865 void enterAndIgnoreErrors(JSContext *cx, JSObject *target);
13867 bool entered() const { return state != STATE_UNENTERED; }
13869 ~JSAutoEnterCompartment();
13875 typedef void (*JSIterateCompartmentCallback)(JSRuntime *rt, void *data, JSCompartment *compartment);
13882 extern __attribute__((visibility("default"))) void
13883 JS_IterateCompartments(JSRuntime *rt, void *data,
13884 JSIterateCompartmentCallback compartmentCallback);
13886 extern __attribute__((visibility("default"))) JSObject *
13887 JS_GetGlobalObject(JSContext *cx);
13889 extern __attribute__((visibility("default"))) void
13890 JS_SetGlobalObject(JSContext *cx, JSObject *obj);
13891 # 2917 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13892 extern __attribute__((visibility("default"))) JSBool
13893 JS_InitStandardClasses(JSContext *cx, JSObject *obj);
13894 # 2933 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13895 extern __attribute__((visibility("default"))) JSBool
13896 JS_ResolveStandardClass(JSContext *cx, JSObject *obj, jsid id,
13899 extern __attribute__((visibility("default"))) JSBool
13900 JS_EnumerateStandardClasses(JSContext *cx, JSObject *obj);
13907 extern __attribute__((visibility("default"))) JSIdArray *
13908 JS_EnumerateResolvedStandardClasses(JSContext *cx, JSObject *obj,
13911 extern __attribute__((visibility("default"))) JSBool
13912 JS_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key,
13915 extern __attribute__((visibility("default"))) JSBool
13916 JS_GetClassPrototype(JSContext *cx, JSProtoKey key, JSObject **objp);
13918 extern __attribute__((visibility("default"))) JSProtoKey
13919 JS_IdentifyClassPrototype(JSContext *cx, JSObject *obj);
13925 extern __attribute__((visibility("default"))) JSObject *
13926 JS_GetFunctionPrototype(JSContext *cx, JSObject *forObj);
13932 extern __attribute__((visibility("default"))) JSObject *
13933 JS_GetObjectPrototype(JSContext *cx, JSObject *forObj);
13935 extern __attribute__((visibility("default"))) JSObject *
13936 JS_GetGlobalForObject(JSContext *cx, JSObject *obj);
13938 extern __attribute__((visibility("default"))) JSObject *
13939 JS_GetGlobalForScopeChain(JSContext *cx);
13941 extern __attribute__((visibility("default"))) JSObject *
13942 JS_GetScriptedGlobal(JSContext *cx);
13947 extern __attribute__((visibility("default"))) JSObject *
13948 JS_InitReflect(JSContext *cx, JSObject *global);
13955 extern __attribute__((visibility("default"))) JSBool
13956 JS_InitCTypesClass(JSContext *cx, JSObject *global);
13964 (* JSCTypesUnicodeToNativeFun)(JSContext *cx, const jschar *source, size_t slen);
13971 struct JSCTypesCallbacks {
13972 JSCTypesUnicodeToNativeFun unicodeToNative;
13975 typedef struct JSCTypesCallbacks JSCTypesCallbacks;
13983 extern __attribute__((visibility("default"))) void
13984 JS_SetCTypesCallbacks(JSObject *ctypesObj, JSCTypesCallbacks *callbacks);
13988 (* JSEnumerateDiagnosticMemoryCallback)(void *ptr, size_t length);
13994 extern __attribute__((visibility("default"))) void
13995 JS_EnumerateDiagnosticMemoryRegions(JSEnumerateDiagnosticMemoryCallback callback);
13996 # 3063 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
13997 #define JS_CALLEE(cx,vp) ((vp)[0])
13998 #define JS_THIS(cx,vp) JS_ComputeThis(cx, vp)
13999 #define JS_THIS_OBJECT(cx,vp) (JSVAL_TO_OBJECT(JS_THIS(cx,vp)))
14000 #define JS_ARGV(cx,vp) ((vp) + 2)
14001 #define JS_RVAL(cx,vp) (*(vp))
14002 #define JS_SET_RVAL(cx,vp,v) (*(vp) = (v))
14004 extern __attribute__((visibility("default"))) jsval
14005 JS_ComputeThis(JSContext *cx, jsval *vp);
14009 static inline jsval
14010 JS_THIS(JSContext *cx, jsval *vp)
14012 return JSVAL_IS_PRIMITIVE(vp[1]) ? JS_ComputeThis(cx, vp) : vp[1];
14014 # 3094 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14015 #define JS_THIS_VALUE(cx,vp) ((vp)[1])
14017 extern __attribute__((visibility("default"))) void
14018 JS_MallocInCompartment(JSCompartment *comp, size_t nbytes);
14020 extern __attribute__((visibility("default"))) void
14021 JS_FreeInCompartment(JSCompartment *comp, size_t nbytes);
14023 extern __attribute__((visibility("default"))) void *
14024 JS_malloc(JSContext *cx, size_t nbytes);
14026 extern __attribute__((visibility("default"))) void *
14027 JS_realloc(JSContext *cx, void *p, size_t nbytes);
14033 extern __attribute__((visibility("default"))) void
14034 JS_free(JSContext *cx, void *p);
14040 extern __attribute__((visibility("default"))) void
14041 JS_freeop(JSFreeOp *fop, void *p);
14043 extern __attribute__((visibility("default"))) JSFreeOp *
14044 JS_GetDefaultFreeOp(JSRuntime *rt);
14046 extern __attribute__((visibility("default"))) void
14047 JS_updateMallocCounter(JSContext *cx, size_t nbytes);
14049 extern __attribute__((visibility("default"))) char *
14050 JS_strdup(JSContext *cx, const char *s);
14052 extern __attribute__((visibility("default"))) JSBool
14053 JS_NewNumberValue(JSContext *cx, double d, jsval *rval);
14054 # 3159 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14055 extern __attribute__((visibility("default"))) JSBool
14056 JS_AddValueRoot(JSContext *cx, jsval *vp);
14058 extern __attribute__((visibility("default"))) JSBool
14059 JS_AddStringRoot(JSContext *cx, JSString **rp);
14061 extern __attribute__((visibility("default"))) JSBool
14062 JS_AddObjectRoot(JSContext *cx, JSObject **rp);
14064 extern __attribute__((visibility("default"))) JSBool
14065 JS_AddGCThingRoot(JSContext *cx, void **rp);
14066 # 3180 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14067 extern __attribute__((visibility("default"))) JSBool
14068 JS_AddNamedValueRoot(JSContext *cx, jsval *vp, const char *name);
14070 extern __attribute__((visibility("default"))) JSBool
14071 JS_AddNamedStringRoot(JSContext *cx, JSString **rp, const char *name);
14073 extern __attribute__((visibility("default"))) JSBool
14074 JS_AddNamedObjectRoot(JSContext *cx, JSObject **rp, const char *name);
14076 extern __attribute__((visibility("default"))) JSBool
14077 JS_AddNamedScriptRoot(JSContext *cx, JSScript **rp, const char *name);
14079 extern __attribute__((visibility("default"))) JSBool
14080 JS_AddNamedGCThingRoot(JSContext *cx, void **rp, const char *name);
14082 extern __attribute__((visibility("default"))) void
14083 JS_RemoveValueRoot(JSContext *cx, jsval *vp);
14085 extern __attribute__((visibility("default"))) void
14086 JS_RemoveStringRoot(JSContext *cx, JSString **rp);
14088 extern __attribute__((visibility("default"))) void
14089 JS_RemoveObjectRoot(JSContext *cx, JSObject **rp);
14091 extern __attribute__((visibility("default"))) void
14092 JS_RemoveScriptRoot(JSContext *cx, JSScript **rp);
14094 extern __attribute__((visibility("default"))) void
14095 JS_RemoveGCThingRoot(JSContext *cx, void **rp);
14097 extern __attribute__((visibility("default"))) void
14098 JS_RemoveValueRootRT(JSRuntime *rt, jsval *vp);
14100 extern __attribute__((visibility("default"))) void
14101 JS_RemoveStringRootRT(JSRuntime *rt, JSString **rp);
14103 extern __attribute__((visibility("default"))) void
14104 JS_RemoveObjectRootRT(JSRuntime *rt, JSObject **rp);
14106 extern __attribute__((visibility("default"))) void
14107 JS_RemoveScriptRootRT(JSRuntime *rt, JSScript **rp);
14111 extern __attribute__((visibility("default"))) JSBool
14112 js_AddRootRT(JSRuntime *rt, jsval *vp, const char *name);
14114 extern __attribute__((visibility("default"))) JSBool
14115 js_AddGCThingRootRT(JSRuntime *rt, void **rp, const char *name);
14117 extern __attribute__((visibility("default"))) void
14118 js_RemoveRoot(JSRuntime *rt, void *rp);
14124 extern __attribute__((noinline)) __attribute__((visibility("default"))) void
14125 JS_AnchorPtr(void *p);
14131 #define JS_TYPED_ROOTING_API
14134 #define JS_EnterLocalRootScope(cx) (JS_TRUE)
14135 #define JS_LeaveLocalRootScope(cx) ((void) 0)
14136 #define JS_LeaveLocalRootScopeWithResult(cx,rval) ((void) 0)
14137 #define JS_ForgetLocalRoot(cx,thing) ((void) 0)
14139 typedef enum JSGCRootType {
14140 JS_GC_ROOT_VALUE_PTR,
14141 JS_GC_ROOT_GCTHING_PTR
14143 # 3280 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14144 #define JS_MAP_GCROOT_NEXT 0
14145 #define JS_MAP_GCROOT_STOP 1
14146 #define JS_MAP_GCROOT_REMOVE 2
14149 (* JSGCRootMapFun)(void *rp, JSGCRootType type, const char *name, void *data);
14151 extern __attribute__((visibility("default"))) uint32_t
14152 JS_MapGCRoots(JSRuntime *rt, JSGCRootMapFun map, void *data);
14154 extern __attribute__((visibility("default"))) JSBool
14155 JS_LockGCThing(JSContext *cx, void *thing);
14157 extern __attribute__((visibility("default"))) JSBool
14158 JS_LockGCThingRT(JSRuntime *rt, void *thing);
14160 extern __attribute__((visibility("default"))) JSBool
14161 JS_UnlockGCThing(JSContext *cx, void *thing);
14163 extern __attribute__((visibility("default"))) JSBool
14164 JS_UnlockGCThingRT(JSRuntime *rt, void *thing);
14165 # 3309 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14166 extern __attribute__((visibility("default"))) void
14167 JS_SetExtraGCRootsTracer(JSRuntime *rt, JSTraceDataOp traceOp, void *data);
14168 # 3325 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14169 static __attribute__((always_inline)) inline JSBool
14170 JSVAL_IS_TRACEABLE(jsval v)
14172 return JSVAL_IS_TRACEABLE_IMPL(JSVAL_TO_IMPL(v));
14175 static __attribute__((always_inline)) inline void *
14176 JSVAL_TO_TRACEABLE(jsval v)
14178 return JSVAL_TO_GCTHING(v);
14181 static __attribute__((always_inline)) inline JSGCTraceKind
14182 JSVAL_TRACE_KIND(jsval v)
14185 return (JSGCTraceKind) JSVAL_TRACE_KIND_IMPL(JSVAL_TO_IMPL(v));
14187 # 3360 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14189 (* JSTraceCallback)(JSTracer *trc, void **thingp, JSGCTraceKind kind);
14192 JSRuntime *runtime;
14193 JSTraceCallback callback;
14194 JSTraceNamePrinter debugPrinter;
14195 const void *debugPrintArg;
14196 size_t debugPrintIndex;
14197 JSBool eagerlyTraceWeakMaps;
14209 extern __attribute__((visibility("default"))) void
14210 JS_CallTracer(JSTracer *trc, void *thing, JSGCTraceKind kind);
14211 # 3400 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14212 #define JS_SET_TRACING_DETAILS(trc,printer,arg,index) JS_BEGIN_MACRO (trc)->debugPrinter = (printer); (trc)->debugPrintArg = (arg); (trc)->debugPrintIndex = (index); JS_END_MACRO
14213 # 3417 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14214 #define JS_SET_TRACING_LOCATION(trc,location) JS_BEGIN_MACRO JS_END_MACRO
14215 # 3427 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14216 #define JS_SET_TRACING_INDEX(trc,name,index) JS_SET_TRACING_DETAILS(trc, NULL, name, index)
14222 #define JS_SET_TRACING_NAME(trc,name) JS_SET_TRACING_DETAILS(trc, NULL, name, (size_t)-1)
14229 #define JS_CALL_TRACER(trc,thing,kind,name) JS_BEGIN_MACRO JS_SET_TRACING_NAME(trc, name); JS_CallTracer((trc), (thing), (kind)); JS_END_MACRO
14230 # 3450 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14231 #define JS_CALL_VALUE_TRACER(trc,val,name) JS_BEGIN_MACRO if (JSVAL_IS_TRACEABLE(val)) { JS_CALL_TRACER((trc), JSVAL_TO_GCTHING(val), JSVAL_TRACE_KIND(val), name); } JS_END_MACRO
14239 #define JS_CALL_OBJECT_TRACER(trc,object,name) JS_BEGIN_MACRO JSObject *obj_ = (object); JS_ASSERT(obj_); JS_CALL_TRACER((trc), obj_, JSTRACE_OBJECT, name); JS_END_MACRO
14246 #define JS_CALL_STRING_TRACER(trc,string,name) JS_BEGIN_MACRO JSString *str_ = (string); JS_ASSERT(str_); JS_CALL_TRACER((trc), str_, JSTRACE_STRING, name); JS_END_MACRO
14247 # 3475 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14248 extern __attribute__((visibility("default"))) void
14249 JS_TracerInit(JSTracer *trc, JSRuntime *rt, JSTraceCallback callback);
14251 extern __attribute__((visibility("default"))) void
14252 JS_TraceChildren(JSTracer *trc, void *thing, JSGCTraceKind kind);
14254 extern __attribute__((visibility("default"))) void
14255 JS_TraceRuntime(JSTracer *trc);
14256 # 3517 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14257 extern __attribute__((visibility("default"))) void
14258 JS_GC(JSRuntime *rt);
14260 extern __attribute__((visibility("default"))) void
14261 JS_MaybeGC(JSContext *cx);
14263 extern __attribute__((visibility("default"))) void
14264 JS_SetGCCallback(JSRuntime *rt, JSGCCallback cb);
14266 extern __attribute__((visibility("default"))) void
14267 JS_SetFinalizeCallback(JSRuntime *rt, JSFinalizeCallback cb);
14269 extern __attribute__((visibility("default"))) JSBool
14270 JS_IsGCMarkingTracer(JSTracer *trc);
14272 extern __attribute__((visibility("default"))) JSBool
14273 JS_IsAboutToBeFinalized(void *thing);
14275 typedef enum JSGCParamKey {
14277 JSGC_MAX_BYTES = 0,
14280 JSGC_MAX_MALLOC_BYTES = 1,
14289 JSGC_MAX_CODE_CACHE_BYTES = 5,
14295 JSGC_UNUSED_CHUNKS = 7,
14298 JSGC_TOTAL_CHUNKS = 8,
14301 JSGC_SLICE_TIME_BUDGET = 9,
14304 JSGC_MARK_STACK_LIMIT = 10
14307 typedef enum JSGCMode {
14309 JSGC_MODE_GLOBAL = 0,
14312 JSGC_MODE_COMPARTMENT = 1,
14318 JSGC_MODE_INCREMENTAL = 2
14321 extern __attribute__((visibility("default"))) void
14322 JS_SetGCParameter(JSRuntime *rt, JSGCParamKey key, uint32_t value);
14324 extern __attribute__((visibility("default"))) uint32_t
14325 JS_GetGCParameter(JSRuntime *rt, JSGCParamKey key);
14327 extern __attribute__((visibility("default"))) void
14328 JS_SetGCParameterForThread(JSContext *cx, JSGCParamKey key, uint32_t value);
14330 extern __attribute__((visibility("default"))) uint32_t
14331 JS_GetGCParameterForThread(JSContext *cx, JSGCParamKey key);
14337 extern __attribute__((visibility("default"))) JSString *
14338 JS_NewExternalString(JSContext *cx, const jschar *chars, size_t length,
14339 const JSStringFinalizer *fin);
14345 extern __attribute__((visibility("default"))) JSBool
14346 JS_IsExternalString(JSString *str);
14352 extern __attribute__((visibility("default"))) const JSStringFinalizer *
14353 JS_GetExternalStringFinalizer(JSString *str);
14359 extern __attribute__((visibility("default"))) void
14360 JS_SetNativeStackQuota(JSRuntime *cx, size_t stackSize);
14367 typedef void (*JSClassInternal)();
14374 JSPropertyOp addProperty;
14375 JSPropertyOp delProperty;
14376 JSPropertyOp getProperty;
14377 JSStrictPropertyOp setProperty;
14378 JSEnumerateOp enumerate;
14379 JSResolveOp resolve;
14380 JSConvertOp convert;
14381 JSFinalizeOp finalize;
14384 JSCheckAccessOp checkAccess;
14386 JSHasInstanceOp hasInstance;
14387 JSNative construct;
14390 void *reserved[40];
14393 #define JSCLASS_HAS_PRIVATE (1<<0)
14394 #define JSCLASS_NEW_ENUMERATE (1<<1)
14395 #define JSCLASS_NEW_RESOLVE (1<<2)
14396 #define JSCLASS_PRIVATE_IS_NSISUPPORTS (1<<3)
14397 #define JSCLASS_NEW_RESOLVE_GETS_START (1<<4)
14401 #define JSCLASS_IMPLEMENTS_BARRIERS (1<<5)
14403 #define JSCLASS_DOCUMENT_OBSERVER (1<<6)
14404 #define JSCLASS_USERBIT1 (1<<7)
14411 #define JSCLASS_RESERVED_SLOTS_SHIFT 8
14412 #define JSCLASS_RESERVED_SLOTS_WIDTH 8
14413 #define JSCLASS_RESERVED_SLOTS_MASK JS_BITMASK(JSCLASS_RESERVED_SLOTS_WIDTH)
14414 #define JSCLASS_HAS_RESERVED_SLOTS(n) (((n) & JSCLASS_RESERVED_SLOTS_MASK) << JSCLASS_RESERVED_SLOTS_SHIFT)
14416 #define JSCLASS_RESERVED_SLOTS(clasp) (((clasp)->flags >> JSCLASS_RESERVED_SLOTS_SHIFT) & JSCLASS_RESERVED_SLOTS_MASK)
14420 #define JSCLASS_HIGH_FLAGS_SHIFT (JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH)
14427 #define JSCLASS_FOR_OF_ITERATION (1<<(JSCLASS_HIGH_FLAGS_SHIFT+0))
14429 #define JSCLASS_IS_ANONYMOUS (1<<(JSCLASS_HIGH_FLAGS_SHIFT+1))
14430 #define JSCLASS_IS_GLOBAL (1<<(JSCLASS_HIGH_FLAGS_SHIFT+2))
14431 #define JSCLASS_INTERNAL_FLAG2 (1<<(JSCLASS_HIGH_FLAGS_SHIFT+3))
14432 #define JSCLASS_INTERNAL_FLAG3 (1<<(JSCLASS_HIGH_FLAGS_SHIFT+4))
14435 #define JSCLASS_FREEZE_PROTO (1<<(JSCLASS_HIGH_FLAGS_SHIFT+5))
14436 #define JSCLASS_FREEZE_CTOR (1<<(JSCLASS_HIGH_FLAGS_SHIFT+6))
14438 #define JSCLASS_XPCONNECT_GLOBAL (1<<(JSCLASS_HIGH_FLAGS_SHIFT+7))
14441 #define JSCLASS_USERBIT2 (1<<(JSCLASS_HIGH_FLAGS_SHIFT+8))
14442 #define JSCLASS_USERBIT3 (1<<(JSCLASS_HIGH_FLAGS_SHIFT+9))
14450 #define JSGLOBAL_FLAGS_CLEARED 0x1
14451 # 3723 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
14452 #define JSCLASS_GLOBAL_SLOT_COUNT (JSProto_LIMIT * 3 + 8)
14453 #define JSCLASS_GLOBAL_FLAGS_WITH_SLOTS(n) (JSCLASS_IS_GLOBAL | JSCLASS_HAS_RESERVED_SLOTS(JSCLASS_GLOBAL_SLOT_COUNT + (n)))
14455 #define JSCLASS_GLOBAL_FLAGS JSCLASS_GLOBAL_FLAGS_WITH_SLOTS(0)
14457 #define JSCLASS_HAS_GLOBAL_FLAG_AND_SLOTS(clasp) (((clasp)->flags & JSCLASS_IS_GLOBAL) && JSCLASS_RESERVED_SLOTS(clasp) >= JSCLASS_GLOBAL_SLOT_COUNT)
14462 #define JSCLASS_CACHED_PROTO_SHIFT (JSCLASS_HIGH_FLAGS_SHIFT + 10)
14463 #define JSCLASS_CACHED_PROTO_WIDTH 6
14464 #define JSCLASS_CACHED_PROTO_MASK JS_BITMASK(JSCLASS_CACHED_PROTO_WIDTH)
14465 #define JSCLASS_HAS_CACHED_PROTO(key) (uint32_t(key) << JSCLASS_CACHED_PROTO_SHIFT)
14466 #define JSCLASS_CACHED_PROTO_KEY(clasp) ((JSProtoKey) (((clasp)->flags >> JSCLASS_CACHED_PROTO_SHIFT) & JSCLASS_CACHED_PROTO_MASK))
14472 #define JSCLASS_NO_INTERNAL_MEMBERS {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
14473 #define JSCLASS_NO_OPTIONAL_MEMBERS 0,0,0,0,0,JSCLASS_NO_INTERNAL_MEMBERS
14475 extern __attribute__((visibility("default"))) int
14476 JS_IdArrayLength(JSContext *cx, JSIdArray *ida);
14478 extern __attribute__((visibility("default"))) jsid
14479 JS_IdArrayGet(JSContext *cx, JSIdArray *ida, int index);
14481 extern __attribute__((visibility("default"))) void
14482 JS_DestroyIdArray(JSContext *cx, JSIdArray *ida);
14488 class AutoIdArray : private AutoGCRooter {
14490 AutoIdArray(JSContext *cx, JSIdArray *ida )
14491 : AutoGCRooter(cx, IDARRAY), context(cx), idArray(ida)
14497 JS_DestroyIdArray(context, idArray);
14502 jsid operator[](size_t i) const {
14505 return JS_IdArrayGet(context, idArray, i);
14507 size_t length() const {
14508 return JS_IdArrayLength(context, idArray);
14511 friend void AutoGCRooter::trace(JSTracer *trc);
14513 JSIdArray *steal() {
14514 JSIdArray *copy = idArray;
14520 inline void trace(JSTracer *trc);
14523 JSContext *context;
14524 JSIdArray *idArray;
14528 AutoIdArray(AutoIdArray &ida) ;
14529 void operator=(AutoIdArray &ida) ;
14536 extern __attribute__((visibility("default"))) JSBool
14537 JS_ValueToId(JSContext *cx, jsval v, jsid *idp);
14539 extern __attribute__((visibility("default"))) JSBool
14540 JS_IdToValue(JSContext *cx, jsid id, jsval *vp);
14545 #define JSRESOLVE_QUALIFIED 0x01
14546 #define JSRESOLVE_ASSIGNING 0x02
14547 #define JSRESOLVE_DETECTING 0x04
14548 #define JSRESOLVE_DECLARING 0x08
14549 #define JSRESOLVE_WITH 0x10
14557 extern __attribute__((visibility("default"))) JSBool
14558 JS_DefaultValue(JSContext *cx, JSObject *obj, JSType hint, jsval *vp);
14560 extern __attribute__((visibility("default"))) JSBool
14561 JS_PropertyStub(JSContext *cx, JSHandleObject obj, JSHandleId id, jsval *vp);
14563 extern __attribute__((visibility("default"))) JSBool
14564 JS_StrictPropertyStub(JSContext *cx, JSHandleObject obj, JSHandleId id, JSBool strict, jsval *vp);
14566 extern __attribute__((visibility("default"))) JSBool
14567 JS_EnumerateStub(JSContext *cx, JSHandleObject obj);
14569 extern __attribute__((visibility("default"))) JSBool
14570 JS_ResolveStub(JSContext *cx, JSHandleObject obj, JSHandleId id);
14572 extern __attribute__((visibility("default"))) JSBool
14573 JS_ConvertStub(JSContext *cx, JSHandleObject obj, JSType type, jsval *vp);
14575 struct JSConstDoubleSpec {
14587 struct JSPropertySpec {
14591 JSPropertyOp getter;
14592 JSStrictPropertyOp setter;
14595 struct JSFunctionSpec {
14606 #define JS_FS_END JS_FS(NULL,NULL,0,0)
14613 #define JS_FS(name,call,nargs,flags) {name, call, nargs, flags}
14615 #define JS_FN(name,call,nargs,flags) {name, call, nargs, (flags) | JSFUN_STUB_GSOPS}
14618 extern __attribute__((visibility("default"))) JSObject *
14619 JS_InitClass(JSContext *cx, JSObject *obj, JSObject *parent_proto,
14620 JSClass *clasp, JSNative constructor, unsigned nargs,
14621 JSPropertySpec *ps, JSFunctionSpec *fs,
14622 JSPropertySpec *static_ps, JSFunctionSpec *static_fs);
14628 extern __attribute__((visibility("default"))) JSBool
14629 JS_LinkConstructorAndPrototype(JSContext *cx, JSObject *ctor, JSObject *proto);
14631 extern __attribute__((visibility("default"))) JSClass *
14632 JS_GetClass(JSObject *obj);
14634 extern __attribute__((visibility("default"))) JSBool
14635 JS_InstanceOf(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv);
14637 extern __attribute__((visibility("default"))) JSBool
14638 JS_HasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp);
14640 extern __attribute__((visibility("default"))) void *
14641 JS_GetPrivate(JSObject *obj);
14643 extern __attribute__((visibility("default"))) void
14644 JS_SetPrivate(JSObject *obj, void *data);
14646 extern __attribute__((visibility("default"))) void *
14647 JS_GetInstancePrivate(JSContext *cx, JSObject *obj, JSClass *clasp,
14650 extern __attribute__((visibility("default"))) JSObject *
14651 JS_GetPrototype(JSObject *obj);
14653 extern __attribute__((visibility("default"))) JSBool
14654 JS_SetPrototype(JSContext *cx, JSObject *obj, JSObject *proto);
14656 extern __attribute__((visibility("default"))) JSObject *
14657 JS_GetParent(JSObject *obj);
14659 extern __attribute__((visibility("default"))) JSBool
14660 JS_SetParent(JSContext *cx, JSObject *obj, JSObject *parent);
14662 extern __attribute__((visibility("default"))) JSObject *
14663 JS_GetConstructor(JSContext *cx, JSObject *proto);
14670 extern __attribute__((visibility("default"))) JSBool
14671 JS_GetObjectId(JSContext *cx, JSObject *obj, jsid *idp);
14673 extern __attribute__((visibility("default"))) JSObject *
14674 JS_NewGlobalObject(JSContext *cx, JSClass *clasp);
14676 extern __attribute__((visibility("default"))) JSObject *
14677 JS_NewCompartmentAndGlobalObject(JSContext *cx, JSClass *clasp, JSPrincipals *principals);
14679 extern __attribute__((visibility("default"))) JSObject *
14680 JS_NewObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent);
14683 extern __attribute__((visibility("default"))) JSBool
14684 JS_IsExtensible(JSObject *obj);
14686 extern __attribute__((visibility("default"))) JSBool
14687 JS_IsNative(JSObject *obj);
14689 extern __attribute__((visibility("default"))) JSRuntime *
14690 JS_GetObjectRuntime(JSObject *obj);
14696 extern __attribute__((visibility("default"))) JSObject *
14697 JS_NewObjectWithGivenProto(JSContext *cx, JSClass *clasp, JSObject *proto,
14705 extern __attribute__((visibility("default"))) JSBool
14706 JS_DeepFreezeObject(JSContext *cx, JSObject *obj);
14711 extern __attribute__((visibility("default"))) JSBool
14712 JS_FreezeObject(JSContext *cx, JSObject *obj);
14714 extern __attribute__((visibility("default"))) JSObject *
14715 JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *parent);
14717 extern __attribute__((visibility("default"))) JSObject *
14718 JS_ConstructObjectWithArguments(JSContext *cx, JSClass *clasp, JSObject *parent,
14719 unsigned argc, jsval *argv);
14721 extern __attribute__((visibility("default"))) JSObject *
14722 JS_New(JSContext *cx, JSObject *ctor, unsigned argc, jsval *argv);
14724 extern __attribute__((visibility("default"))) JSObject *
14725 JS_DefineObject(JSContext *cx, JSObject *obj, const char *name, JSClass *clasp,
14726 JSObject *proto, unsigned attrs);
14728 extern __attribute__((visibility("default"))) JSBool
14729 JS_DefineConstDoubles(JSContext *cx, JSObject *obj, JSConstDoubleSpec *cds);
14731 extern __attribute__((visibility("default"))) JSBool
14732 JS_DefineProperties(JSContext *cx, JSObject *obj, JSPropertySpec *ps);
14734 extern __attribute__((visibility("default"))) JSBool
14735 JS_DefineProperty(JSContext *cx, JSObject *obj, const char *name, jsval value,
14736 JSPropertyOp getter, JSStrictPropertyOp setter, unsigned attrs);
14738 extern __attribute__((visibility("default"))) JSBool
14739 JS_DefinePropertyById(JSContext *cx, JSObject *obj, jsid id, jsval value,
14740 JSPropertyOp getter, JSStrictPropertyOp setter, unsigned attrs);
14742 extern __attribute__((visibility("default"))) JSBool
14743 JS_DefineOwnProperty(JSContext *cx, JSObject *obj, jsid id, jsval descriptor, JSBool *bp);
14751 extern __attribute__((visibility("default"))) JSBool
14752 JS_GetPropertyAttributes(JSContext *cx, JSObject *obj, const char *name,
14753 unsigned *attrsp, JSBool *foundp);
14760 extern __attribute__((visibility("default"))) JSBool
14761 JS_GetPropertyAttrsGetterAndSetter(JSContext *cx, JSObject *obj,
14763 unsigned *attrsp, JSBool *foundp,
14764 JSPropertyOp *getterp,
14765 JSStrictPropertyOp *setterp);
14767 extern __attribute__((visibility("default"))) JSBool
14768 JS_GetPropertyAttrsGetterAndSetterById(JSContext *cx, JSObject *obj,
14770 unsigned *attrsp, JSBool *foundp,
14771 JSPropertyOp *getterp,
14772 JSStrictPropertyOp *setterp);
14780 extern __attribute__((visibility("default"))) JSBool
14781 JS_SetPropertyAttributes(JSContext *cx, JSObject *obj, const char *name,
14782 unsigned attrs, JSBool *foundp);
14784 extern __attribute__((visibility("default"))) JSBool
14785 JS_DefinePropertyWithTinyId(JSContext *cx, JSObject *obj, const char *name,
14786 int8_t tinyid, jsval value,
14787 JSPropertyOp getter, JSStrictPropertyOp setter,
14790 extern __attribute__((visibility("default"))) JSBool
14791 JS_AlreadyHasOwnProperty(JSContext *cx, JSObject *obj, const char *name,
14794 extern __attribute__((visibility("default"))) JSBool
14795 JS_AlreadyHasOwnPropertyById(JSContext *cx, JSObject *obj, jsid id,
14798 extern __attribute__((visibility("default"))) JSBool
14799 JS_HasProperty(JSContext *cx, JSObject *obj, const char *name, JSBool *foundp);
14801 extern __attribute__((visibility("default"))) JSBool
14802 JS_HasPropertyById(JSContext *cx, JSObject *obj, jsid id, JSBool *foundp);
14804 extern __attribute__((visibility("default"))) JSBool
14805 JS_LookupProperty(JSContext *cx, JSObject *obj, const char *name, jsval *vp);
14807 extern __attribute__((visibility("default"))) JSBool
14808 JS_LookupPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
14810 extern __attribute__((visibility("default"))) JSBool
14811 JS_LookupPropertyWithFlags(JSContext *cx, JSObject *obj, const char *name,
14812 unsigned flags, jsval *vp);
14814 extern __attribute__((visibility("default"))) JSBool
14815 JS_LookupPropertyWithFlagsById(JSContext *cx, JSObject *obj, jsid id,
14816 unsigned flags, JSObject **objp, jsval *vp);
14818 struct JSPropertyDescriptor {
14822 JSPropertyOp getter;
14823 JSStrictPropertyOp setter;
14832 extern __attribute__((visibility("default"))) JSBool
14833 JS_GetPropertyDescriptorById(JSContext *cx, JSObject *obj, jsid id, unsigned flags,
14834 JSPropertyDescriptor *desc);
14836 extern __attribute__((visibility("default"))) JSBool
14837 JS_GetOwnPropertyDescriptor(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
14839 extern __attribute__((visibility("default"))) JSBool
14840 JS_GetProperty(JSContext *cx, JSObject *obj, const char *name, jsval *vp);
14842 extern __attribute__((visibility("default"))) JSBool
14843 JS_GetPropertyDefault(JSContext *cx, JSObject *obj, const char *name, jsval def, jsval *vp);
14845 extern __attribute__((visibility("default"))) JSBool
14846 JS_GetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
14848 extern __attribute__((visibility("default"))) JSBool
14849 JS_GetPropertyByIdDefault(JSContext *cx, JSObject *obj, jsid id, jsval def, jsval *vp);
14851 extern __attribute__((visibility("default"))) JSBool
14852 JS_ForwardGetPropertyTo(JSContext *cx, JSObject *obj, jsid id, JSObject *onBehalfOf, jsval *vp);
14854 extern __attribute__((visibility("default"))) JSBool
14855 JS_GetMethodById(JSContext *cx, JSObject *obj, jsid id, JSObject **objp,
14858 extern __attribute__((visibility("default"))) JSBool
14859 JS_GetMethod(JSContext *cx, JSObject *obj, const char *name, JSObject **objp,
14862 extern __attribute__((visibility("default"))) JSBool
14863 JS_SetProperty(JSContext *cx, JSObject *obj, const char *name, jsval *vp);
14865 extern __attribute__((visibility("default"))) JSBool
14866 JS_SetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
14868 extern __attribute__((visibility("default"))) JSBool
14869 JS_DeleteProperty(JSContext *cx, JSObject *obj, const char *name);
14871 extern __attribute__((visibility("default"))) JSBool
14872 JS_DeleteProperty2(JSContext *cx, JSObject *obj, const char *name,
14875 extern __attribute__((visibility("default"))) JSBool
14876 JS_DeletePropertyById(JSContext *cx, JSObject *obj, jsid id);
14878 extern __attribute__((visibility("default"))) JSBool
14879 JS_DeletePropertyById2(JSContext *cx, JSObject *obj, jsid id, jsval *rval);
14881 extern __attribute__((visibility("default"))) JSBool
14882 JS_DefineUCProperty(JSContext *cx, JSObject *obj,
14883 const jschar *name, size_t namelen, jsval value,
14884 JSPropertyOp getter, JSStrictPropertyOp setter,
14893 extern __attribute__((visibility("default"))) JSBool
14894 JS_GetUCPropertyAttributes(JSContext *cx, JSObject *obj,
14895 const jschar *name, size_t namelen,
14896 unsigned *attrsp, JSBool *foundp);
14903 extern __attribute__((visibility("default"))) JSBool
14904 JS_GetUCPropertyAttrsGetterAndSetter(JSContext *cx, JSObject *obj,
14905 const jschar *name, size_t namelen,
14906 unsigned *attrsp, JSBool *foundp,
14907 JSPropertyOp *getterp,
14908 JSStrictPropertyOp *setterp);
14916 extern __attribute__((visibility("default"))) JSBool
14917 JS_SetUCPropertyAttributes(JSContext *cx, JSObject *obj,
14918 const jschar *name, size_t namelen,
14919 unsigned attrs, JSBool *foundp);
14922 extern __attribute__((visibility("default"))) JSBool
14923 JS_DefineUCPropertyWithTinyId(JSContext *cx, JSObject *obj,
14924 const jschar *name, size_t namelen,
14925 int8_t tinyid, jsval value,
14926 JSPropertyOp getter, JSStrictPropertyOp setter,
14929 extern __attribute__((visibility("default"))) JSBool
14930 JS_AlreadyHasOwnUCProperty(JSContext *cx, JSObject *obj, const jschar *name,
14931 size_t namelen, JSBool *foundp);
14933 extern __attribute__((visibility("default"))) JSBool
14934 JS_HasUCProperty(JSContext *cx, JSObject *obj,
14935 const jschar *name, size_t namelen,
14938 extern __attribute__((visibility("default"))) JSBool
14939 JS_LookupUCProperty(JSContext *cx, JSObject *obj,
14940 const jschar *name, size_t namelen,
14943 extern __attribute__((visibility("default"))) JSBool
14944 JS_GetUCProperty(JSContext *cx, JSObject *obj,
14945 const jschar *name, size_t namelen,
14948 extern __attribute__((visibility("default"))) JSBool
14949 JS_SetUCProperty(JSContext *cx, JSObject *obj,
14950 const jschar *name, size_t namelen,
14953 extern __attribute__((visibility("default"))) JSBool
14954 JS_DeleteUCProperty2(JSContext *cx, JSObject *obj,
14955 const jschar *name, size_t namelen,
14958 extern __attribute__((visibility("default"))) JSObject *
14959 JS_NewArrayObject(JSContext *cx, int length, jsval *vector);
14961 extern __attribute__((visibility("default"))) JSBool
14962 JS_IsArrayObject(JSContext *cx, JSObject *obj);
14964 extern __attribute__((visibility("default"))) JSBool
14965 JS_GetArrayLength(JSContext *cx, JSObject *obj, uint32_t *lengthp);
14967 extern __attribute__((visibility("default"))) JSBool
14968 JS_SetArrayLength(JSContext *cx, JSObject *obj, uint32_t length);
14970 extern __attribute__((visibility("default"))) JSBool
14971 JS_DefineElement(JSContext *cx, JSObject *obj, uint32_t index, jsval value,
14972 JSPropertyOp getter, JSStrictPropertyOp setter, unsigned attrs);
14974 extern __attribute__((visibility("default"))) JSBool
14975 JS_AlreadyHasOwnElement(JSContext *cx, JSObject *obj, uint32_t index, JSBool *foundp);
14977 extern __attribute__((visibility("default"))) JSBool
14978 JS_HasElement(JSContext *cx, JSObject *obj, uint32_t index, JSBool *foundp);
14980 extern __attribute__((visibility("default"))) JSBool
14981 JS_LookupElement(JSContext *cx, JSObject *obj, uint32_t index, jsval *vp);
14983 extern __attribute__((visibility("default"))) JSBool
14984 JS_GetElement(JSContext *cx, JSObject *obj, uint32_t index, jsval *vp);
14986 extern __attribute__((visibility("default"))) JSBool
14987 JS_ForwardGetElementTo(JSContext *cx, JSObject *obj, uint32_t index, JSObject *onBehalfOf,
14995 extern __attribute__((visibility("default"))) JSBool
14996 JS_GetElementIfPresent(JSContext *cx, JSObject *obj, uint32_t index, JSObject *onBehalfOf,
14997 jsval *vp, JSBool* present);
14999 extern __attribute__((visibility("default"))) JSBool
15000 JS_SetElement(JSContext *cx, JSObject *obj, uint32_t index, jsval *vp);
15002 extern __attribute__((visibility("default"))) JSBool
15003 JS_DeleteElement(JSContext *cx, JSObject *obj, uint32_t index);
15005 extern __attribute__((visibility("default"))) JSBool
15006 JS_DeleteElement2(JSContext *cx, JSObject *obj, uint32_t index, jsval *rval);
15008 extern __attribute__((visibility("default"))) void
15009 JS_ClearScope(JSContext *cx, JSObject *obj);
15011 extern __attribute__((visibility("default"))) JSIdArray *
15012 JS_Enumerate(JSContext *cx, JSObject *obj);
15019 extern __attribute__((visibility("default"))) JSObject *
15020 JS_NewPropertyIterator(JSContext *cx, JSObject *obj);
15027 extern __attribute__((visibility("default"))) JSBool
15028 JS_NextProperty(JSContext *cx, JSObject *iterobj, jsid *idp);
15034 extern __attribute__((visibility("default"))) JSObject *
15035 JS_NewElementIterator(JSContext *cx, JSObject *obj);
15042 extern __attribute__((visibility("default"))) JSObject *
15043 JS_ElementIteratorStub(JSContext *cx, JSHandleObject obj, JSBool keysonly);
15045 extern __attribute__((visibility("default"))) JSBool
15046 JS_CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
15047 jsval *vp, unsigned *attrsp);
15049 extern __attribute__((visibility("default"))) jsval
15050 JS_GetReservedSlot(JSObject *obj, uint32_t index);
15052 extern __attribute__((visibility("default"))) void
15053 JS_SetReservedSlot(JSObject *obj, uint32_t index, jsval v);
15060 struct JSPrincipals {
15070 void setDebugToken(uint32_t token) {
15080 __attribute__((visibility("default"))) void dump();
15084 extern __attribute__((visibility("default"))) void
15085 JS_HoldPrincipals(JSPrincipals *principals);
15087 extern __attribute__((visibility("default"))) void
15088 JS_DropPrincipals(JSRuntime *rt, JSPrincipals *principals);
15090 struct JSSecurityCallbacks {
15091 JSCheckAccessOp checkObjectAccess;
15092 JSSubsumePrincipalsOp subsumePrincipals;
15093 JSObjectPrincipalsFinder findObjectPrincipals;
15094 JSCSPEvalChecker contentSecurityPolicyAllows;
15095 JSPushContextPrincipalOp pushContextPrincipal;
15096 JSPopContextPrincipalOp popContextPrincipal;
15099 extern __attribute__((visibility("default"))) void
15100 JS_SetSecurityCallbacks(JSRuntime *rt, const JSSecurityCallbacks *callbacks);
15102 extern __attribute__((visibility("default"))) const JSSecurityCallbacks *
15103 JS_GetSecurityCallbacks(JSRuntime *rt);
15104 # 4388 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15105 extern __attribute__((visibility("default"))) void
15106 JS_SetTrustedPrincipals(JSRuntime *rt, JSPrincipals *prin);
15113 extern __attribute__((visibility("default"))) void
15114 JS_InitDestroyPrincipalsCallback(JSRuntime *rt, JSDestroyPrincipalsOp destroyPrincipals);
15121 extern __attribute__((visibility("default"))) JSFunction *
15122 JS_NewFunction(JSContext *cx, JSNative call, unsigned nargs, unsigned flags,
15123 JSObject *parent, const char *name);
15129 extern __attribute__((visibility("default"))) JSFunction *
15130 JS_NewFunctionById(JSContext *cx, JSNative call, unsigned nargs, unsigned flags,
15131 JSObject *parent, jsid id);
15133 extern __attribute__((visibility("default"))) JSObject *
15134 JS_GetFunctionObject(JSFunction *fun);
15142 extern __attribute__((visibility("default"))) JSString *
15143 JS_GetFunctionId(JSFunction *fun);
15148 extern __attribute__((visibility("default"))) unsigned
15149 JS_GetFunctionFlags(JSFunction *fun);
15154 extern __attribute__((visibility("default"))) uint16_t
15155 JS_GetFunctionArity(JSFunction *fun);
15163 extern __attribute__((visibility("default"))) JSBool
15164 JS_ObjectIsFunction(JSContext *cx, JSObject *obj);
15166 extern __attribute__((visibility("default"))) JSBool
15167 JS_ObjectIsCallable(JSContext *cx, JSObject *obj);
15169 extern __attribute__((visibility("default"))) JSBool
15170 JS_IsNativeFunction(JSObject *funobj, JSNative call);
15177 extern __attribute__((visibility("default"))) JSObject*
15178 JS_BindCallable(JSContext *cx, JSObject *callable, JSObject *newThis);
15180 extern __attribute__((visibility("default"))) JSBool
15181 JS_DefineFunctions(JSContext *cx, JSObject *obj, JSFunctionSpec *fs);
15183 extern __attribute__((visibility("default"))) JSFunction *
15184 JS_DefineFunction(JSContext *cx, JSObject *obj, const char *name, JSNative call,
15185 unsigned nargs, unsigned attrs);
15187 extern __attribute__((visibility("default"))) JSFunction *
15188 JS_DefineUCFunction(JSContext *cx, JSObject *obj,
15189 const jschar *name, size_t namelen, JSNative call,
15190 unsigned nargs, unsigned attrs);
15192 extern __attribute__((visibility("default"))) JSFunction *
15193 JS_DefineFunctionById(JSContext *cx, JSObject *obj, jsid id, JSNative call,
15194 unsigned nargs, unsigned attrs);
15196 extern __attribute__((visibility("default"))) JSObject *
15197 JS_CloneFunctionObject(JSContext *cx, JSObject *funobj, JSObject *parent);
15198 # 4489 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15199 extern __attribute__((visibility("default"))) JSBool
15200 JS_BufferIsCompilableUnit(JSContext *cx, JSBool bytes_are_utf8,
15201 JSObject *obj, const char *bytes, size_t length);
15203 extern __attribute__((visibility("default"))) JSScript *
15204 JS_CompileScript(JSContext *cx, JSObject *obj,
15205 const char *bytes, size_t length,
15206 const char *filename, unsigned lineno);
15208 extern __attribute__((visibility("default"))) JSScript *
15209 JS_CompileScriptForPrincipals(JSContext *cx, JSObject *obj,
15210 JSPrincipals *principals,
15211 const char *bytes, size_t length,
15212 const char *filename, unsigned lineno);
15214 extern __attribute__((visibility("default"))) JSScript *
15215 JS_CompileScriptForPrincipalsVersion(JSContext *cx, JSObject *obj,
15216 JSPrincipals *principals,
15217 const char *bytes, size_t length,
15218 const char *filename, unsigned lineno,
15219 JSVersion version);
15221 extern __attribute__((visibility("default"))) JSScript *
15222 JS_CompileUCScript(JSContext *cx, JSObject *obj,
15223 const jschar *chars, size_t length,
15224 const char *filename, unsigned lineno);
15226 extern __attribute__((visibility("default"))) JSScript *
15227 JS_CompileUCScriptForPrincipals(JSContext *cx, JSObject *obj,
15228 JSPrincipals *principals,
15229 const jschar *chars, size_t length,
15230 const char *filename, unsigned lineno);
15232 extern __attribute__((visibility("default"))) JSScript *
15233 JS_CompileUCScriptForPrincipalsVersion(JSContext *cx, JSObject *obj,
15234 JSPrincipals *principals,
15235 const jschar *chars, size_t length,
15236 const char *filename, unsigned lineno,
15237 JSVersion version);
15242 extern __attribute__((visibility("default"))) JSScript *
15243 JS_CompileUCScriptForPrincipalsVersionOrigin(JSContext *cx, JSObject *obj,
15244 JSPrincipals *principals,
15245 JSPrincipals *originPrincipals,
15246 const jschar *chars, size_t length,
15247 const char *filename, unsigned lineno,
15248 JSVersion version);
15250 extern __attribute__((visibility("default"))) JSScript *
15251 JS_CompileUTF8File(JSContext *cx, JSObject *obj, const char *filename);
15253 extern __attribute__((visibility("default"))) JSScript *
15254 JS_CompileUTF8FileHandle(JSContext *cx, JSObject *obj, const char *filename,
15257 extern __attribute__((visibility("default"))) JSScript *
15258 JS_CompileUTF8FileHandleForPrincipals(JSContext *cx, JSObject *obj,
15259 const char *filename, FILE *fh,
15260 JSPrincipals *principals);
15262 extern __attribute__((visibility("default"))) JSScript *
15263 JS_CompileUTF8FileHandleForPrincipalsVersion(JSContext *cx, JSObject *obj,
15264 const char *filename, FILE *fh,
15265 JSPrincipals *principals,
15266 JSVersion version);
15268 extern __attribute__((visibility("default"))) JSObject *
15269 JS_GetGlobalFromScript(JSScript *script);
15271 extern __attribute__((visibility("default"))) JSFunction *
15272 JS_CompileFunction(JSContext *cx, JSObject *obj, const char *name,
15273 unsigned nargs, const char **argnames,
15274 const char *bytes, size_t length,
15275 const char *filename, unsigned lineno);
15277 extern __attribute__((visibility("default"))) JSFunction *
15278 JS_CompileFunctionForPrincipals(JSContext *cx, JSObject *obj,
15279 JSPrincipals *principals, const char *name,
15280 unsigned nargs, const char **argnames,
15281 const char *bytes, size_t length,
15282 const char *filename, unsigned lineno);
15284 extern __attribute__((visibility("default"))) JSFunction *
15285 JS_CompileUCFunction(JSContext *cx, JSObject *obj, const char *name,
15286 unsigned nargs, const char **argnames,
15287 const jschar *chars, size_t length,
15288 const char *filename, unsigned lineno);
15290 extern __attribute__((visibility("default"))) JSFunction *
15291 JS_CompileUCFunctionForPrincipals(JSContext *cx, JSObject *obj,
15292 JSPrincipals *principals, const char *name,
15293 unsigned nargs, const char **argnames,
15294 const jschar *chars, size_t length,
15295 const char *filename, unsigned lineno);
15297 extern __attribute__((visibility("default"))) JSFunction *
15298 JS_CompileUCFunctionForPrincipalsVersion(JSContext *cx, JSObject *obj,
15299 JSPrincipals *principals, const char *name,
15300 unsigned nargs, const char **argnames,
15301 const jschar *chars, size_t length,
15302 const char *filename, unsigned lineno,
15303 JSVersion version);
15305 extern __attribute__((visibility("default"))) JSString *
15306 JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, unsigned indent);
15312 #define JS_DONT_PRETTY_PRINT ((unsigned)0x8000)
15314 extern __attribute__((visibility("default"))) JSString *
15315 JS_DecompileFunction(JSContext *cx, JSFunction *fun, unsigned indent);
15317 extern __attribute__((visibility("default"))) JSString *
15318 JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, unsigned indent);
15319 # 4645 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15320 extern __attribute__((visibility("default"))) JSBool
15321 JS_ExecuteScript(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval);
15323 extern __attribute__((visibility("default"))) JSBool
15324 JS_ExecuteScriptVersion(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval,
15325 JSVersion version);
15331 typedef enum JSExecPart { JSEXEC_PROLOG, JSEXEC_MAIN } JSExecPart;
15333 extern __attribute__((visibility("default"))) JSBool
15334 JS_EvaluateScript(JSContext *cx, JSObject *obj,
15335 const char *bytes, unsigned length,
15336 const char *filename, unsigned lineno,
15339 extern __attribute__((visibility("default"))) JSBool
15340 JS_EvaluateScriptForPrincipals(JSContext *cx, JSObject *obj,
15341 JSPrincipals *principals,
15342 const char *bytes, unsigned length,
15343 const char *filename, unsigned lineno,
15346 extern __attribute__((visibility("default"))) JSBool
15347 JS_EvaluateScriptForPrincipalsVersion(JSContext *cx, JSObject *obj,
15348 JSPrincipals *principals,
15349 const char *bytes, unsigned length,
15350 const char *filename, unsigned lineno,
15351 jsval *rval, JSVersion version);
15353 extern __attribute__((visibility("default"))) JSBool
15354 JS_EvaluateUCScript(JSContext *cx, JSObject *obj,
15355 const jschar *chars, unsigned length,
15356 const char *filename, unsigned lineno,
15359 extern __attribute__((visibility("default"))) JSBool
15360 JS_EvaluateUCScriptForPrincipals(JSContext *cx, JSObject *obj,
15361 JSPrincipals *principals,
15362 const jschar *chars, unsigned length,
15363 const char *filename, unsigned lineno,
15366 extern __attribute__((visibility("default"))) JSBool
15367 JS_EvaluateUCScriptForPrincipalsVersion(JSContext *cx, JSObject *obj,
15368 JSPrincipals *principals,
15369 const jschar *chars, unsigned length,
15370 const char *filename, unsigned lineno,
15371 jsval *rval, JSVersion version);
15372 # 4706 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15373 extern __attribute__((visibility("default"))) JSBool
15374 JS_EvaluateUCScriptForPrincipalsVersionOrigin(JSContext *cx, JSObject *obj,
15375 JSPrincipals *principals,
15376 JSPrincipals *originPrincipals,
15377 const jschar *chars, unsigned length,
15378 const char *filename, unsigned lineno,
15379 jsval *rval, JSVersion version);
15381 extern __attribute__((visibility("default"))) JSBool
15382 JS_CallFunction(JSContext *cx, JSObject *obj, JSFunction *fun, unsigned argc,
15383 jsval *argv, jsval *rval);
15385 extern __attribute__((visibility("default"))) JSBool
15386 JS_CallFunctionName(JSContext *cx, JSObject *obj, const char *name, unsigned argc,
15387 jsval *argv, jsval *rval);
15389 extern __attribute__((visibility("default"))) JSBool
15390 JS_CallFunctionValue(JSContext *cx, JSObject *obj, jsval fval, unsigned argc,
15391 jsval *argv, jsval *rval);
15399 Call(JSContext *cx, JSObject *thisObj, JSFunction *fun, unsigned argc, jsval *argv, jsval *rval) {
15400 return !!JS_CallFunction(cx, thisObj, fun, argc, argv, rval);
15404 Call(JSContext *cx, JSObject *thisObj, const char *name, unsigned argc, jsval *argv, jsval *rval) {
15405 return !!JS_CallFunctionName(cx, thisObj, name, argc, argv, rval);
15409 Call(JSContext *cx, JSObject *thisObj, jsval fun, unsigned argc, jsval *argv, jsval *rval) {
15410 return !!JS_CallFunctionValue(cx, thisObj, fun, argc, argv, rval);
15413 extern __attribute__((visibility("default"))) bool
15414 Call(JSContext *cx, jsval thisv, jsval fun, unsigned argc, jsval *argv, jsval *rval);
15417 Call(JSContext *cx, jsval thisv, JSObject *funObj, unsigned argc, jsval *argv, jsval *rval) {
15418 return Call(cx, thisv, OBJECT_TO_JSVAL(funObj), argc, argv, rval);
15424 # 4772 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15425 extern __attribute__((visibility("default"))) JSOperationCallback
15426 JS_SetOperationCallback(JSContext *cx, JSOperationCallback callback);
15428 extern __attribute__((visibility("default"))) JSOperationCallback
15429 JS_GetOperationCallback(JSContext *cx);
15431 extern __attribute__((visibility("default"))) void
15432 JS_TriggerOperationCallback(JSRuntime *rt);
15434 extern __attribute__((visibility("default"))) JSBool
15435 JS_IsRunning(JSContext *cx);
15436 # 4795 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15437 extern __attribute__((visibility("default"))) JSBool
15438 JS_SaveFrameChain(JSContext *cx);
15440 extern __attribute__((visibility("default"))) void
15441 JS_RestoreFrameChain(JSContext *cx);
15442 # 4829 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15443 extern __attribute__((visibility("default"))) JSString *
15444 JS_NewStringCopyN(JSContext *cx, const char *s, size_t n);
15446 extern __attribute__((visibility("default"))) JSString *
15447 JS_NewStringCopyZ(JSContext *cx, const char *s);
15449 extern __attribute__((visibility("default"))) JSString *
15450 JS_InternJSString(JSContext *cx, JSString *str);
15452 extern __attribute__((visibility("default"))) JSString *
15453 JS_InternString(JSContext *cx, const char *s);
15455 extern __attribute__((visibility("default"))) JSString *
15456 JS_NewUCString(JSContext *cx, jschar *chars, size_t length);
15458 extern __attribute__((visibility("default"))) JSString *
15459 JS_NewUCStringCopyN(JSContext *cx, const jschar *s, size_t n);
15461 extern __attribute__((visibility("default"))) JSString *
15462 JS_NewUCStringCopyZ(JSContext *cx, const jschar *s);
15464 extern __attribute__((visibility("default"))) JSString *
15465 JS_InternUCStringN(JSContext *cx, const jschar *s, size_t length);
15467 extern __attribute__((visibility("default"))) JSString *
15468 JS_InternUCString(JSContext *cx, const jschar *s);
15470 extern __attribute__((visibility("default"))) JSBool
15471 JS_CompareStrings(JSContext *cx, JSString *str1, JSString *str2, int32_t *result);
15473 extern __attribute__((visibility("default"))) JSBool
15474 JS_StringEqualsAscii(JSContext *cx, JSString *str, const char *asciiBytes, JSBool *match);
15476 extern __attribute__((visibility("default"))) size_t
15477 JS_PutEscapedString(JSContext *cx, char *buffer, size_t size, JSString *str, char quote);
15479 extern __attribute__((visibility("default"))) JSBool
15480 JS_FileEscapedString(FILE *fp, JSString *str, char quote);
15481 # 4903 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15482 extern __attribute__((visibility("default"))) size_t
15483 JS_GetStringLength(JSString *str);
15485 extern __attribute__((visibility("default"))) const jschar *
15486 JS_GetStringCharsAndLength(JSContext *cx, JSString *str, size_t *length);
15488 extern __attribute__((visibility("default"))) const jschar *
15489 JS_GetInternedStringChars(JSString *str);
15491 extern __attribute__((visibility("default"))) const jschar *
15492 JS_GetInternedStringCharsAndLength(JSString *str, size_t *length);
15494 extern __attribute__((visibility("default"))) const jschar *
15495 JS_GetStringCharsZ(JSContext *cx, JSString *str);
15497 extern __attribute__((visibility("default"))) const jschar *
15498 JS_GetStringCharsZAndLength(JSContext *cx, JSString *str, size_t *length);
15500 extern __attribute__((visibility("default"))) JSFlatString *
15501 JS_FlattenString(JSContext *cx, JSString *str);
15503 extern __attribute__((visibility("default"))) const jschar *
15504 JS_GetFlatStringChars(JSFlatString *str);
15506 static __attribute__((always_inline)) inline JSFlatString *
15507 JSID_TO_FLAT_STRING(jsid id)
15510 return (JSFlatString *)((id));
15513 static __attribute__((always_inline)) inline JSFlatString *
15514 JS_ASSERT_STRING_IS_FLAT(JSString *str)
15517 return (JSFlatString *)str;
15520 static __attribute__((always_inline)) inline JSString *
15521 JS_FORGET_STRING_FLATNESS(JSFlatString *fstr)
15523 return (JSString *)fstr;
15530 extern __attribute__((visibility("default"))) JSBool
15531 JS_FlatStringEqualsAscii(JSFlatString *str, const char *asciiBytes);
15533 extern __attribute__((visibility("default"))) size_t
15534 JS_PutEscapedFlatString(char *buffer, size_t size, JSFlatString *str, char quote);
15540 extern __attribute__((visibility("default"))) JSString *
15541 JS_NewGrowableString(JSContext *cx, jschar *chars, size_t length);
15542 # 4990 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15543 extern __attribute__((visibility("default"))) JSString *
15544 JS_NewDependentString(JSContext *cx, JSString *str, size_t start,
15551 extern __attribute__((visibility("default"))) JSString *
15552 JS_ConcatStrings(JSContext *cx, JSString *left, JSString *right);
15558 extern __attribute__((visibility("default"))) const jschar *
15559 JS_UndependString(JSContext *cx, JSString *str);
15565 extern __attribute__((visibility("default"))) JSBool
15566 JS_MakeStringImmutable(JSContext *cx, JSString *str);
15572 __attribute__((visibility("default"))) JSBool
15573 JS_CStringsAreUTF8(void);
15580 __attribute__((visibility("default"))) void
15581 JS_SetCStringsAreUTF8(void);
15582 # 5053 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15583 __attribute__((visibility("default"))) JSBool
15584 JS_EncodeCharacters(JSContext *cx, const jschar *src, size_t srclen, char *dst,
15587 __attribute__((visibility("default"))) JSBool
15588 JS_DecodeBytes(JSContext *cx, const char *src, size_t srclen, jschar *dst,
15591 __attribute__((visibility("default"))) JSBool
15592 JS_DecodeUTF8(JSContext *cx, const char *src, size_t srclen, jschar *dst,
15599 __attribute__((visibility("default"))) char *
15600 JS_EncodeString(JSContext *cx, JSString *str);
15607 __attribute__((visibility("default"))) size_t
15608 JS_GetStringEncodingLength(JSContext *cx, JSString *str);
15609 # 5093 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15610 __attribute__((visibility("default"))) size_t
15611 JS_EncodeStringToBuffer(JSString *str, char *buffer, size_t length);
15615 class JSAutoByteString {
15617 JSAutoByteString(JSContext *cx, JSString *str )
15618 : mBytes(JS_EncodeString(cx, str)) {
15628 ~JSAutoByteString() {
15629 js::UnwantedForeground::free_(mBytes);
15633 void initBytes(char *bytes) {
15638 char *encode(JSContext *cx, JSString *str) {
15641 mBytes = JS_EncodeString(cx, str);
15646 js::UnwantedForeground::free_(mBytes);
15650 char *ptr() const {
15654 bool operator!() const {
15663 JSAutoByteString(const JSAutoByteString &another);
15664 JSAutoByteString &operator=(const JSAutoByteString &another);
15673 typedef JSBool (* JSONWriteCallback)(const jschar *buf, uint32_t len, void *data);
15678 __attribute__((visibility("default"))) JSBool
15679 JS_Stringify(JSContext *cx, jsval *vp, JSObject *replacer, jsval space,
15680 JSONWriteCallback callback, void *data);
15685 __attribute__((visibility("default"))) JSBool
15686 JS_ParseJSON(JSContext *cx, const jschar *chars, uint32_t len, jsval *vp);
15688 __attribute__((visibility("default"))) JSBool
15689 JS_ParseJSONWithReviver(JSContext *cx, const jschar *chars, uint32_t len, jsval reviver,
15697 #define JS_STRUCTURED_CLONE_VERSION 1
15699 struct JSStructuredCloneCallbacks {
15700 ReadStructuredCloneOp read;
15701 WriteStructuredCloneOp write;
15702 StructuredCloneErrorOp reportError;
15705 __attribute__((visibility("default"))) JSBool
15706 JS_ReadStructuredClone(JSContext *cx, const uint64_t *data, size_t nbytes,
15707 uint32_t version, jsval *vp,
15708 const JSStructuredCloneCallbacks *optionalCallbacks,
15712 __attribute__((visibility("default"))) JSBool
15713 JS_WriteStructuredClone(JSContext *cx, jsval v, uint64_t **datap, size_t *nbytesp,
15714 const JSStructuredCloneCallbacks *optionalCallbacks,
15717 __attribute__((visibility("default"))) JSBool
15718 JS_StructuredClone(JSContext *cx, jsval v, jsval *vp,
15719 const JSStructuredCloneCallbacks *optionalCallbacks,
15726 class __attribute__((visibility("default"))) JSAutoStructuredCloneBuffer {
15732 JSAutoStructuredCloneBuffer()
15733 : data_(__null), nbytes_(0), version_(1) {}
15735 ~JSAutoStructuredCloneBuffer() { clear(); }
15737 uint64_t *data() const { return data_; }
15738 size_t nbytes() const { return nbytes_; }
15743 bool copy(const uint64_t *data, size_t nbytes, uint32_t version=1);
15750 void adopt(uint64_t *data, size_t nbytes, uint32_t version=1);
15757 void steal(uint64_t **datap, size_t *nbytesp, uint32_t *versionp=__null);
15759 bool read(JSContext *cx, jsval *vp,
15760 const JSStructuredCloneCallbacks *optionalCallbacks=__null,
15761 void *closure=__null) const;
15763 bool write(JSContext *cx, jsval v,
15764 const JSStructuredCloneCallbacks *optionalCallbacks=__null,
15765 void *closure=__null);
15770 void swap(JSAutoStructuredCloneBuffer &other);
15774 JSAutoStructuredCloneBuffer(const JSAutoStructuredCloneBuffer &other);
15775 JSAutoStructuredCloneBuffer &operator=(const JSAutoStructuredCloneBuffer &other);
15784 #define JS_SCTAG_USER_MIN ((uint32_t) 0xFFFF8000)
15785 #define JS_SCTAG_USER_MAX ((uint32_t) 0xFFFFFFFF)
15787 #define JS_SCERR_RECURSION 0
15789 __attribute__((visibility("default"))) void
15790 JS_SetStructuredCloneCallbacks(JSRuntime *rt, const JSStructuredCloneCallbacks *callbacks);
15792 __attribute__((visibility("default"))) JSBool
15793 JS_ReadUint32Pair(JSStructuredCloneReader *r, uint32_t *p1, uint32_t *p2);
15795 __attribute__((visibility("default"))) JSBool
15796 JS_ReadBytes(JSStructuredCloneReader *r, void *p, size_t len);
15798 __attribute__((visibility("default"))) JSBool
15799 JS_ReadTypedArray(JSStructuredCloneReader *r, jsval *vp);
15801 __attribute__((visibility("default"))) JSBool
15802 JS_WriteUint32Pair(JSStructuredCloneWriter *w, uint32_t tag, uint32_t data);
15804 __attribute__((visibility("default"))) JSBool
15805 JS_WriteBytes(JSStructuredCloneWriter *w, const void *p, size_t len);
15807 __attribute__((visibility("default"))) JSBool
15808 JS_WriteTypedArray(JSStructuredCloneWriter *w, jsval v);
15815 struct JSLocaleCallbacks {
15816 JSLocaleToUpperCase localeToUpperCase;
15817 JSLocaleToLowerCase localeToLowerCase;
15818 JSLocaleCompare localeCompare;
15819 JSLocaleToUnicode localeToUnicode;
15820 JSErrorCallback localeGetErrorMessage;
15827 extern __attribute__((visibility("default"))) void
15828 JS_SetLocaleCallbacks(JSContext *cx, JSLocaleCallbacks *callbacks);
15834 extern __attribute__((visibility("default"))) JSLocaleCallbacks *
15835 JS_GetLocaleCallbacks(JSContext *cx);
15836 # 5331 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15837 extern __attribute__((visibility("default"))) void
15838 JS_ReportError(JSContext *cx, const char *format, ...);
15843 extern __attribute__((visibility("default"))) void
15844 JS_ReportErrorNumber(JSContext *cx, JSErrorCallback errorCallback,
15845 void *userRef, const unsigned errorNumber, ...);
15850 extern __attribute__((visibility("default"))) void
15851 JS_ReportErrorNumberUC(JSContext *cx, JSErrorCallback errorCallback,
15852 void *userRef, const unsigned errorNumber, ...);
15860 extern __attribute__((visibility("default"))) JSBool
15861 JS_ReportWarning(JSContext *cx, const char *format, ...);
15863 extern __attribute__((visibility("default"))) JSBool
15864 JS_ReportErrorFlagsAndNumber(JSContext *cx, unsigned flags,
15865 JSErrorCallback errorCallback, void *userRef,
15866 const unsigned errorNumber, ...);
15868 extern __attribute__((visibility("default"))) JSBool
15869 JS_ReportErrorFlagsAndNumberUC(JSContext *cx, unsigned flags,
15870 JSErrorCallback errorCallback, void *userRef,
15871 const unsigned errorNumber, ...);
15876 extern __attribute__((visibility("default"))) void
15877 JS_ReportOutOfMemory(JSContext *cx);
15882 extern __attribute__((visibility("default"))) void
15883 JS_ReportAllocationOverflow(JSContext *cx);
15885 struct JSErrorReport {
15886 const char *filename;
15887 JSPrincipals *originPrincipals;
15889 const char *linebuf;
15890 const char *tokenptr;
15891 const jschar *uclinebuf;
15892 const jschar *uctokenptr;
15894 unsigned errorNumber;
15895 const jschar *ucmessage;
15896 const jschar **messageArgs;
15902 #define JSREPORT_ERROR 0x0
15903 #define JSREPORT_WARNING 0x1
15904 #define JSREPORT_EXCEPTION 0x2
15905 #define JSREPORT_STRICT 0x4
15906 # 5408 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15907 #define JSREPORT_STRICT_MODE_ERROR 0x8
15908 # 5417 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
15909 #define JSREPORT_IS_WARNING(flags) (((flags) & JSREPORT_WARNING) != 0)
15910 #define JSREPORT_IS_EXCEPTION(flags) (((flags) & JSREPORT_EXCEPTION) != 0)
15911 #define JSREPORT_IS_STRICT(flags) (((flags) & JSREPORT_STRICT) != 0)
15912 #define JSREPORT_IS_STRICT_MODE_ERROR(flags) (((flags) & JSREPORT_STRICT_MODE_ERROR) != 0)
15914 extern __attribute__((visibility("default"))) JSErrorReporter
15915 JS_GetErrorReporter(JSContext *cx);
15917 extern __attribute__((visibility("default"))) JSErrorReporter
15918 JS_SetErrorReporter(JSContext *cx, JSErrorReporter er);
15926 extern __attribute__((visibility("default"))) JSObject *
15927 JS_NewDateObject(JSContext *cx, int year, int mon, int mday, int hour, int min, int sec);
15929 extern __attribute__((visibility("default"))) JSObject *
15930 JS_NewDateObjectMsec(JSContext *cx, double msec);
15935 extern __attribute__((visibility("default"))) JSBool
15936 JS_ObjectIsDate(JSContext *cx, JSObject *obj);
15943 #define JSREG_FOLD 0x01
15944 #define JSREG_GLOB 0x02
15945 #define JSREG_MULTILINE 0x04
15946 #define JSREG_STICKY 0x08
15948 extern __attribute__((visibility("default"))) JSObject *
15949 JS_NewRegExpObject(JSContext *cx, JSObject *obj, char *bytes, size_t length, unsigned flags);
15951 extern __attribute__((visibility("default"))) JSObject *
15952 JS_NewUCRegExpObject(JSContext *cx, JSObject *obj, jschar *chars, size_t length, unsigned flags);
15954 extern __attribute__((visibility("default"))) void
15955 JS_SetRegExpInput(JSContext *cx, JSObject *obj, JSString *input, JSBool multiline);
15957 extern __attribute__((visibility("default"))) void
15958 JS_ClearRegExpStatics(JSContext *cx, JSObject *obj);
15960 extern __attribute__((visibility("default"))) JSBool
15961 JS_ExecuteRegExp(JSContext *cx, JSObject *obj, JSObject *reobj, jschar *chars, size_t length,
15962 size_t *indexp, JSBool test, jsval *rval);
15966 extern __attribute__((visibility("default"))) JSObject *
15967 JS_NewRegExpObjectNoStatics(JSContext *cx, char *bytes, size_t length, unsigned flags);
15969 extern __attribute__((visibility("default"))) JSObject *
15970 JS_NewUCRegExpObjectNoStatics(JSContext *cx, jschar *chars, size_t length, unsigned flags);
15972 extern __attribute__((visibility("default"))) JSBool
15973 JS_ExecuteRegExpNoStatics(JSContext *cx, JSObject *reobj, jschar *chars, size_t length,
15974 size_t *indexp, JSBool test, jsval *rval);
15976 extern __attribute__((visibility("default"))) JSBool
15977 JS_ObjectIsRegExp(JSContext *cx, JSObject *obj);
15979 extern __attribute__((visibility("default"))) unsigned
15980 JS_GetRegExpFlags(JSContext *cx, JSObject *obj);
15982 extern __attribute__((visibility("default"))) JSString *
15983 JS_GetRegExpSource(JSContext *cx, JSObject *obj);
15987 extern __attribute__((visibility("default"))) JSBool
15988 JS_IsExceptionPending(JSContext *cx);
15990 extern __attribute__((visibility("default"))) JSBool
15991 JS_GetPendingException(JSContext *cx, jsval *vp);
15993 extern __attribute__((visibility("default"))) void
15994 JS_SetPendingException(JSContext *cx, jsval v);
15996 extern __attribute__((visibility("default"))) void
15997 JS_ClearPendingException(JSContext *cx);
15999 extern __attribute__((visibility("default"))) JSBool
16000 JS_ReportPendingException(JSContext *cx);
16001 # 5521 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
16002 extern __attribute__((visibility("default"))) JSExceptionState *
16003 JS_SaveExceptionState(JSContext *cx);
16005 extern __attribute__((visibility("default"))) void
16006 JS_RestoreExceptionState(JSContext *cx, JSExceptionState *state);
16008 extern __attribute__((visibility("default"))) void
16009 JS_DropExceptionState(JSContext *cx, JSExceptionState *state);
16010 # 5537 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
16011 extern __attribute__((visibility("default"))) JSErrorReport *
16012 JS_ErrorFromException(JSContext *cx, jsval v);
16018 extern __attribute__((visibility("default"))) JSBool
16019 JS_ThrowReportedError(JSContext *cx, const char *message,
16020 JSErrorReport *reportp);
16025 extern __attribute__((visibility("default"))) JSBool
16026 JS_ThrowStopIteration(JSContext *cx);
16028 extern __attribute__((visibility("default"))) intptr_t
16029 JS_GetCurrentThread();
16030 # 5573 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
16031 extern __attribute__((visibility("default"))) void
16032 JS_AbortIfWrongThread(JSRuntime *rt);
16034 extern __attribute__((visibility("default"))) void
16035 JS_ClearRuntimeThread(JSRuntime *rt);
16037 extern __attribute__((visibility("default"))) void
16038 JS_SetRuntimeThread(JSRuntime *rt);
16043 class JSAutoSetRuntimeThread
16045 JSRuntime *runtime;
16048 JSAutoSetRuntimeThread(JSRuntime *runtime) : runtime(runtime) {
16049 JS_SetRuntimeThread(runtime);
16052 ~JSAutoSetRuntimeThread() {
16053 JS_ClearRuntimeThread(runtime);
16058 # 5611 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
16059 static __attribute__((always_inline)) inline JSBool
16060 JS_IsConstructing(JSContext *cx, const jsval *vp)
16062 # 5623 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
16066 return JSVAL_IS_MAGIC_IMPL(JSVAL_TO_IMPL(vp[1]));
16074 extern __attribute__((visibility("default"))) JSObject *
16075 JS_NewObjectForConstructor(JSContext *cx, JSClass *clasp, const jsval *vp);
16076 # 5656 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h"
16077 extern __attribute__((visibility("default"))) JSBool
16078 JS_IndexToId(JSContext *cx, uint32_t index, jsid *id);
16083 extern __attribute__((visibility("default"))) JSBool
16084 JS_IsIdentifier(JSContext *cx, JSString *str, JSBool *isIdentifier);
16090 extern __attribute__((visibility("default"))) JSBool
16091 JS_DescribeScriptedCaller(JSContext *cx, JSScript **script, unsigned *lineno);
16098 extern __attribute__((visibility("default"))) void *
16099 JS_EncodeScript(JSContext *cx, JSScript *script, uint32_t *lengthp);
16101 extern __attribute__((visibility("default"))) void *
16102 JS_EncodeInterpretedFunction(JSContext *cx, JSObject *funobj, uint32_t *lengthp);
16104 extern __attribute__((visibility("default"))) JSScript *
16105 JS_DecodeScript(JSContext *cx, const void *data, uint32_t length,
16106 JSPrincipals *principals, JSPrincipals *originPrincipals);
16108 extern __attribute__((visibility("default"))) JSObject *
16109 JS_DecodeInterpretedFunction(JSContext *cx, const void *data, uint32_t length,
16110 JSPrincipals *principals, JSPrincipals *originPrincipals);
16113 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h" 2
16114 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 1
16122 #define jsatom_h___
16124 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
16125 # 11 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 2
16126 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h" 1
16127 # 42 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
16128 #define JS_VERSION_ECMA_3 148
16129 #define JS_VERSION_ECMA_3_TEST 149
16130 # 124 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
16131 #define JS_HAS_STR_HTML_HELPERS 1
16132 #define JS_HAS_OBJ_PROTO_PROP 1
16133 #define JS_HAS_OBJ_WATCHPOINT 1
16134 #define JS_HAS_TOSOURCE 1
16135 #define JS_HAS_CATCH_GUARD 1
16136 #define JS_HAS_UNEVAL 1
16137 #define JS_HAS_CONST 1
16138 #define JS_HAS_FUN_EXPR_STMT 1
16139 #define JS_HAS_NO_SUCH_METHOD 1
16140 #define JS_HAS_GENERATORS 1
16141 #define JS_HAS_BLOCK_SCOPE 1
16142 #define JS_HAS_DESTRUCTURING 2
16143 #define JS_HAS_GENERATOR_EXPRS 1
16144 #define JS_HAS_EXPR_CLOSURES 1
16145 # 146 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
16146 #define JS_HAS_NEW_GLOBAL_OBJECT 1
16149 #define JS_HAS_MAKE_SYSTEM_OBJECT 1
16152 #define JS_HAS_DESTRUCTURING_SHORTHAND (JS_HAS_DESTRUCTURING == 2)
16158 #define OLD_GETTER_SETTER_METHODS 1
16161 #define USE_NEW_OBJECT_REPRESENTATION 0
16166 #define NEW_OBJECT_REPRESENTATION_ONLY() MOZ_NOT_REACHED("don't call this! to be used in the new object representation")
16167 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 2
16170 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprvtd.h" 1
16178 #define jsprvtd_h___
16179 # 28 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprvtd.h"
16180 # 1 "./../../dist/include/js/HashTable.h" 1
16181 # 9 "./../../dist/include/js/HashTable.h"
16182 #define jshashtable_h_
16189 class TempAllocPolicy;
16192 typedef uint32_t HashNumber;
16198 template <class T, class HashPolicy, class AllocPolicy>
16202 class HashTableEntry {
16203 HashNumber keyHash;
16205 typedef typename tl::StripConst<T>::result NonConstT;
16207 static const HashNumber sFreeKey = 0;
16208 static const HashNumber sRemovedKey = 1;
16209 static const HashNumber sCollisionBit = 1;
16211 template <class, class, class> friend class HashTable;
16213 static bool isLiveHash(HashNumber hash)
16215 return hash > sRemovedKey;
16219 HashTableEntry() : keyHash(0), t() {}
16220 HashTableEntry(MoveRef<HashTableEntry> rhs) : keyHash(rhs->keyHash), t(Move(rhs->t)) { }
16221 void operator=(const HashTableEntry &rhs) { keyHash = rhs.keyHash; t = rhs.t; }
16222 void operator=(MoveRef<HashTableEntry> rhs) { keyHash = rhs->keyHash; t = Move(rhs->t); }
16226 bool isFree() const { return keyHash == sFreeKey; }
16227 void setFree() { keyHash = sFreeKey; t = T(); }
16228 bool isRemoved() const { return keyHash == sRemovedKey; }
16229 void setRemoved() { keyHash = sRemovedKey; t = T(); }
16230 bool isLive() const { return isLiveHash(keyHash); }
16231 void setLive(HashNumber hn) { do { } while(0); keyHash = hn; }
16233 void setCollision() { do { } while(0); keyHash |= sCollisionBit; }
16234 void setCollision(HashNumber collisionBit) {
16235 do { } while(0); keyHash |= collisionBit;
16237 void unsetCollision() { keyHash &= ~sCollisionBit; }
16238 bool hasCollision() const { do { } while(0); return keyHash & sCollisionBit; }
16239 bool matchHash(HashNumber hn) { return (keyHash & ~sCollisionBit) == hn; }
16240 HashNumber getKeyHash() const { do { } while(0); return keyHash; }
16242 # 77 "./../../dist/include/js/HashTable.h"
16243 template <class T, class HashPolicy, class AllocPolicy>
16244 class HashTable : private AllocPolicy
16246 typedef typename tl::StripConst<T>::result NonConstT;
16247 typedef typename HashPolicy::KeyType Key;
16248 typedef typename HashPolicy::Lookup Lookup;
16251 typedef HashTableEntry<T> Entry;
16261 friend class HashTable;
16262 typedef void (Ptr::* ConvertibleToBool)();
16268 Ptr(Entry &entry) : entry(&entry) {}
16278 bool found() const { return entry->isLive(); }
16279 operator ConvertibleToBool() const { return found() ? &Ptr::nonNull : 0; }
16280 bool operator==(const Ptr &rhs) const { do { } while(0); return entry == rhs.entry; }
16281 bool operator!=(const Ptr &rhs) const { return !(*this == rhs); }
16283 T &operator*() const { return entry->t; }
16284 T *operator->() const { return &entry->t; }
16288 class AddPtr : public Ptr
16290 friend class HashTable;
16291 HashNumber keyHash;
16292 DebugOnly<uint64_t> mutationCount;
16294 AddPtr(Entry &entry, HashNumber hn) : Ptr(entry), keyHash(hn) {}
16309 friend class HashTable;
16311 Range(Entry *c, Entry *e) : cur(c), end(e), validEntry(true) {
16312 while (cur < end && !cur->isLive())
16317 DebugOnly<bool> validEntry;
16320 Range() : cur(__null), end(__null), validEntry(false) {}
16322 bool empty() const {
16334 while (++cur < end && !cur->isLive())
16339 # 183 "./../../dist/include/js/HashTable.h"
16340 class Enum : public Range
16342 friend class HashTable;
16349 Enum(const Enum &);
16350 void operator=(const Enum &);
16353 template<class Map> explicit
16354 Enum(Map &map) : Range(map.all()), table(map.impl), added(false), removed(false) {}
16355 # 208 "./../../dist/include/js/HashTable.h"
16356 void removeFront() {
16357 table.remove(*this->cur);
16359 this->validEntry = false;
16367 void rekeyFront(const Lookup &l, const Key &k) {
16369 if (match(*this->cur, l))
16371 Entry e = *this->cur;
16372 HashPolicy::setKey(e.t, const_cast<Key &>(k));
16373 table.remove(*this->cur);
16376 this->validEntry = false;
16379 void rekeyFront(const Key &k) {
16386 table.checkOverloaded();
16388 table.checkUnderloaded();
16392 void endEnumeration() {
16394 table.checkOverloaded();
16398 table.checkUnderloaded();
16405 uint32_t hashShift;
16406 uint32_t entryCount;
16408 uint32_t removedCount;
16411 void setTableSizeLog2(unsigned sizeLog2) {
16412 hashShift = sHashBits - sizeLog2;
16414 # 282 "./../../dist/include/js/HashTable.h"
16418 friend class js::ReentrancyGuard;
16419 mutable DebugOnly<bool> entered;
16420 DebugOnly<uint64_t> mutationCount;
16423 static const unsigned sMinSizeLog2 = 2;
16424 static const unsigned sMinSize = 1 << sMinSizeLog2;
16425 static const unsigned sDefaultInitSizeLog2 = 4;
16427 static const unsigned sDefaultInitSize = 1 << sDefaultInitSizeLog2;
16429 static const unsigned sMaxInit = ((uint32_t)1 << (23));
16430 static const unsigned sMaxCapacity = ((uint32_t)1 << (24));
16431 static const unsigned sHashBits = tl::BitSize<HashNumber>::result;
16432 static const uint8_t sMinAlphaFrac = 64;
16433 static const uint8_t sMaxAlphaFrac = 192;
16434 static const uint8_t sInvMaxAlpha = 171;
16435 static const HashNumber sGoldenRatio = 0x9E3779B9U;
16436 static const HashNumber sFreeKey = Entry::sFreeKey;
16437 static const HashNumber sRemovedKey = Entry::sRemovedKey;
16438 static const HashNumber sCollisionBit = Entry::sCollisionBit;
16440 static void staticAsserts()
16443 typedef int moz_static_assert14[(((sMaxInit * sInvMaxAlpha) >> 7) < sMaxCapacity) ? 1 : -1];
16444 typedef int moz_static_assert15[((sMaxCapacity * sInvMaxAlpha) <= (4294967295U)) ? 1 : -1];
16445 typedef int moz_static_assert16[((sMaxCapacity * sizeof(Entry)) <= (4294967295U)) ? 1 : -1];
16448 static bool isLiveHash(HashNumber hash)
16450 return Entry::isLiveHash(hash);
16453 static HashNumber prepareHash(const Lookup& l)
16455 HashNumber keyHash = HashPolicy::hash(l);
16458 keyHash *= sGoldenRatio;
16461 if (!isLiveHash(keyHash))
16462 keyHash -= (sRemovedKey + 1);
16463 return keyHash & ~sCollisionBit;
16466 static Entry *createTable(AllocPolicy &alloc, uint32_t capacity)
16468 Entry *newTable = (Entry *)alloc.malloc_(capacity * sizeof(Entry));
16471 for (Entry *e = newTable, *end = e + capacity; e < end; ++e)
16476 static void destroyTable(AllocPolicy &alloc, Entry *oldTable, uint32_t capacity)
16478 for (Entry *e = oldTable, *end = e + capacity; e < end; ++e)
16480 alloc.free_(oldTable);
16484 HashTable(AllocPolicy ap)
16486 hashShift(sHashBits),
16495 __attribute__ ((warn_unused_result)) bool init(uint32_t length)
16504 if (length > sMaxInit) {
16505 this->reportAllocOverflow();
16508 uint32_t capacity = (length * sInvMaxAlpha) >> 7;
16510 if (capacity < sMinSize)
16511 capacity = sMinSize;
16514 uint32_t roundUp = sMinSize, roundUpLog2 = sMinSizeLog2;
16515 while (roundUp < capacity) {
16520 capacity = roundUp;
16523 table = createTable(*this, capacity);
16527 setTableSizeLog2(roundUpLog2);
16532 bool initialized() const
16540 destroyTable(*this, table, capacity());
16544 static HashNumber hash1(HashNumber hash0, uint32_t shift) {
16545 return hash0 >> shift;
16548 struct DoubleHash {
16550 HashNumber sizeMask;
16553 DoubleHash hash2(HashNumber curKeyHash, uint32_t hashShift) const {
16554 unsigned sizeLog2 = sHashBits - hashShift;
16556 ((curKeyHash << sizeLog2) >> hashShift) | 1,
16557 (HashNumber(1) << sizeLog2) - 1
16562 static HashNumber applyDoubleHash(HashNumber h1, const DoubleHash &dh) {
16563 return (h1 - dh.h2) & dh.sizeMask;
16566 bool overloaded() {
16567 return entryCount + removedCount >= ((sMaxAlphaFrac * capacity()) >> 8);
16570 bool underloaded() {
16571 uint32_t tableCapacity = capacity();
16572 return tableCapacity > sMinSize &&
16573 entryCount <= ((sMinAlphaFrac * tableCapacity) >> 8);
16576 static bool match(Entry &e, const Lookup &l) {
16577 return HashPolicy::match(HashPolicy::getKey(e.t), l);
16580 Entry &lookup(const Lookup &l, HashNumber keyHash, unsigned collisionBit) const
16589 HashNumber h1 = hash1(keyHash, hashShift);
16590 Entry *entry = &table[h1];
16593 if (entry->isFree()) {
16599 if (entry->matchHash(keyHash) && match(*entry, l)) {
16605 DoubleHash dh = hash2(keyHash, hashShift);
16608 Entry *firstRemoved = __null;
16611 if ((__builtin_expect((entry->isRemoved()), 0))) {
16613 firstRemoved = entry;
16615 entry->setCollision(collisionBit);
16619 h1 = applyDoubleHash(h1, dh);
16621 entry = &table[h1];
16622 if (entry->isFree()) {
16624 return firstRemoved ? *firstRemoved : *entry;
16627 if (entry->matchHash(keyHash) && match(*entry, l)) {
16633 # 509 "./../../dist/include/js/HashTable.h"
16634 Entry &findFreeEntry(HashNumber keyHash)
16642 HashNumber h1 = hash1(keyHash, hashShift);
16643 Entry *entry = &table[h1];
16646 if (entry->isFree()) {
16652 DoubleHash dh = hash2(keyHash, hashShift);
16656 entry->setCollision();
16659 h1 = applyDoubleHash(h1, dh);
16661 entry = &table[h1];
16662 if (entry->isFree()) {
16669 bool changeTableSize(int deltaLog2)
16672 Entry *oldTable = table;
16673 uint32_t oldCap = capacity();
16674 uint32_t newLog2 = sHashBits - hashShift + deltaLog2;
16675 uint32_t newCapacity = ((uint32_t)1 << (newLog2));
16676 if (newCapacity > sMaxCapacity) {
16677 this->reportAllocOverflow();
16681 Entry *newTable = createTable(*this, newCapacity);
16686 setTableSizeLog2(newLog2);
16692 for (Entry *src = oldTable, *end = src + oldCap; src < end; ++src) {
16693 if (src->isLive()) {
16694 src->unsetCollision();
16695 findFreeEntry(src->getKeyHash()) = Move(*src);
16699 destroyTable(*this, oldTable, oldCap);
16703 void add(const Lookup &l, const Entry &e)
16705 HashNumber keyHash = prepareHash(l);
16706 Entry &entry = lookup(l, keyHash, sCollisionBit);
16708 if (entry.isRemoved()) {
16711 keyHash |= sCollisionBit;
16715 entry.setLive(keyHash);
16720 bool checkOverloaded()
16727 if (removedCount >= (capacity() >> 2)) {
16735 return changeTableSize(deltaLog2);
16738 void remove(Entry &e)
16741 if (e.hasCollision()) {
16752 void checkUnderloaded()
16754 if (underloaded()) {
16756 (void) changeTableSize(-1);
16763 if (tl::IsPodType<Entry>::result) {
16764 memset(table, 0, sizeof(*table) * capacity());
16766 uint32_t tableCapacity = capacity();
16767 for (Entry *e = table, *end = table + tableCapacity; e < end; ++e)
16768 *e = Move(Entry());
16782 destroyTable(*this, table, capacity());
16790 Range all() const {
16791 return Range(table, table + capacity());
16794 bool empty() const {
16795 return !entryCount;
16798 uint32_t count() const {
16802 uint32_t capacity() const {
16803 return ((uint32_t)1 << (sHashBits - hashShift));
16806 uint32_t generation() const {
16810 size_t sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf) const {
16811 return mallocSizeOf(table);
16814 size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf) const {
16815 return mallocSizeOf(this) + sizeOfExcludingThis(mallocSizeOf);
16818 Ptr lookup(const Lookup &l) const {
16819 ReentrancyGuard g(*this);
16820 HashNumber keyHash = prepareHash(l);
16821 return Ptr(lookup(l, keyHash, 0));
16824 AddPtr lookupForAdd(const Lookup &l) const {
16825 ReentrancyGuard g(*this);
16826 HashNumber keyHash = prepareHash(l);
16827 Entry &entry = lookup(l, keyHash, sCollisionBit);
16828 AddPtr p(entry, keyHash);
16829 p.mutationCount = mutationCount;
16833 bool add(AddPtr &p)
16835 ReentrancyGuard g(*this);
16845 if (p.entry->isRemoved()) {
16848 p.keyHash |= sCollisionBit;
16850 if (checkOverloaded())
16852 p.entry = &findFreeEntry(p.keyHash);
16855 p.entry->setLive(p.keyHash);
16866 bool add(AddPtr &p, T** pentry)
16870 *pentry = &p.entry->t;
16874 bool add(AddPtr &p, const T &t)
16882 bool relookupOrAdd(AddPtr& p, const Lookup &l, const T& t)
16884 p.mutationCount = mutationCount;
16886 ReentrancyGuard g(*this);
16887 p.entry = &lookup(l, p.keyHash, sCollisionBit);
16889 return p.found() || add(p, t);
16894 ReentrancyGuard g(*this);
16897 checkUnderloaded();
16904 # 810 "./../../dist/include/js/HashTable.h"
16905 template <class Key>
16906 struct DefaultHasher
16908 typedef Key Lookup;
16909 static HashNumber hash(const Lookup &l) {
16913 static bool match(const Key &k, const Lookup &l) {
16923 template <typename Key, size_t zeroBits>
16924 struct PointerHasher
16926 typedef Key Lookup;
16927 static HashNumber hash(const Lookup &l) {
16928 size_t word = reinterpret_cast<size_t>(l) >> zeroBits;
16929 typedef int moz_static_assert17[(sizeof(HashNumber) == 4) ? 1 : -1];
16931 return HashNumber(word);
16937 static bool match(const Key &k, const Lookup &l) {
16942 template <typename Key, size_t zeroBits>
16943 struct TaggedPointerHasher
16945 typedef Key Lookup;
16947 static HashNumber hash(const Lookup &l) {
16948 return PointerHasher<Key, zeroBits>::hash(l);
16951 static const uintptr_t COMPARE_MASK = uintptr_t(-1) - 1;
16953 static bool match(const Key &k, const Lookup &l) {
16954 return (uintptr_t(k) & COMPARE_MASK) == uintptr_t(l);
16963 struct DefaultHasher<T *>: PointerHasher<T *, tl::FloorLog2<sizeof(void *)>::result> { };
16967 template <class Key, class Value>
16970 template <class, class, class> friend class detail::HashTable;
16971 template <class> friend class detail::HashTableEntry;
16972 void operator=(const HashMapEntry &rhs) {
16973 const_cast<Key &>(key) = rhs.key;
16978 HashMapEntry() : key(), value() {}
16980 template<typename KeyInput, typename ValueInput>
16981 HashMapEntry(const KeyInput &k, const ValueInput &v) : key(k), value(v) {}
16983 HashMapEntry(MoveRef<HashMapEntry> rhs)
16984 : key(Move(rhs->key)), value(Move(rhs->value)) { }
16985 void operator=(MoveRef<HashMapEntry> rhs) {
16986 const_cast<Key &>(key) = Move(rhs->key);
16987 value = Move(rhs->value);
16997 struct IsPodType<detail::HashTableEntry<T> > {
16998 static const bool result = IsPodType<T>::result;
17001 template <class K, class V>
17002 struct IsPodType<HashMapEntry<K, V> >
17004 static const bool result = IsPodType<K>::result && IsPodType<V>::result;
17008 # 930 "./../../dist/include/js/HashTable.h"
17009 template <class Key,
17011 class HashPolicy = DefaultHasher<Key>,
17012 class AllocPolicy = TempAllocPolicy>
17016 typedef typename HashPolicy::Lookup Lookup;
17018 typedef HashMapEntry<Key, Value> Entry;
17022 struct MapHashPolicy : HashPolicy
17024 typedef Key KeyType;
17025 static const Key &getKey(Entry &e) { return e.key; }
17026 static void setKey(Entry &e, Key &k) { const_cast<Key &>(e.key) = k; }
17028 typedef detail::HashTable<Entry, MapHashPolicy, AllocPolicy> Impl;
17030 friend class Impl::Enum;
17033 HashMap(const HashMap &);
17034 HashMap &operator=(const HashMap &);
17039 const static unsigned sDefaultInitSize = Impl::sDefaultInitSize;
17045 HashMap(AllocPolicy a = AllocPolicy()) : impl(a) {}
17046 bool init(uint32_t len = sDefaultInitSize) { return impl.init(len); }
17047 bool initialized() const { return impl.initialized(); }
17048 # 983 "./../../dist/include/js/HashTable.h"
17049 typedef typename Impl::Ptr Ptr;
17050 Ptr lookup(const Lookup &l) const { return impl.lookup(l); }
17053 void remove(Ptr p) { impl.remove(p); }
17054 # 1024 "./../../dist/include/js/HashTable.h"
17055 typedef typename Impl::AddPtr AddPtr;
17056 AddPtr lookupForAdd(const Lookup &l) const {
17057 return impl.lookupForAdd(l);
17060 template<typename KeyInput, typename ValueInput>
17061 bool add(AddPtr &p, const KeyInput &k, const ValueInput &v) {
17063 if (!impl.add(p, &pentry))
17065 const_cast<Key &>(pentry->key) = k;
17070 bool add(AddPtr &p, const Key &k, MoveRef<Value> v) {
17072 if (!impl.add(p, &pentry))
17074 const_cast<Key &>(pentry->key) = k;
17079 bool add(AddPtr &p, const Key &k) {
17081 if (!impl.add(p, &pentry))
17083 const_cast<Key &>(pentry->key) = k;
17087 template<typename KeyInput, typename ValueInput>
17088 bool relookupOrAdd(AddPtr &p, const KeyInput &k, const ValueInput &v) {
17089 return impl.relookupOrAdd(p, k, Entry(k, v));
17091 # 1071 "./../../dist/include/js/HashTable.h"
17092 typedef typename Impl::Range Range;
17093 Range all() const { return impl.all(); }
17094 uint32_t count() const { return impl.count(); }
17095 size_t capacity() const { return impl.capacity(); }
17096 size_t sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf) const {
17097 return impl.sizeOfExcludingThis(mallocSizeOf);
17099 size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf) const {
17104 return mallocSizeOf(this) + impl.sizeOfExcludingThis(mallocSizeOf);
17106 # 1099 "./../../dist/include/js/HashTable.h"
17107 typedef typename Impl::Enum Enum;
17113 void clear() { impl.clear(); }
17119 void finish() { impl.finish(); }
17122 bool empty() const { return impl.empty(); }
17128 unsigned generation() const { return impl.generation(); }
17132 bool has(const Lookup &l) const {
17133 return impl.lookup(l) != __null;
17137 template<typename KeyInput, typename ValueInput>
17138 bool put(const KeyInput &k, const ValueInput &v) {
17139 AddPtr p = lookupForAdd(k);
17144 return add(p, k, v);
17148 bool putNew(const Key &k, const Value &v) {
17149 AddPtr p = lookupForAdd(k);
17151 return add(p, k, v);
17155 Ptr lookupWithDefault(const Key &k, const Value &defaultValue) {
17156 AddPtr p = lookupForAdd(k);
17159 (void)add(p, k, defaultValue);
17164 void remove(const Lookup &l) {
17165 if (Ptr p = lookup(l))
17169 # 1178 "./../../dist/include/js/HashTable.h"
17170 template <class T, class HashPolicy = DefaultHasher<T>, class AllocPolicy = TempAllocPolicy>
17173 typedef typename HashPolicy::Lookup Lookup;
17176 struct SetOps : HashPolicy {
17178 static const KeyType &getKey(const T &t) { return t; }
17179 static void setKey(T &t, KeyType &k) { t = k; }
17181 typedef detail::HashTable<const T, SetOps, AllocPolicy> Impl;
17183 friend class Impl::Enum;
17186 HashSet(const HashSet &);
17187 HashSet &operator=(const HashSet &);
17192 const static unsigned sDefaultInitSize = Impl::sDefaultInitSize;
17198 HashSet(AllocPolicy a = AllocPolicy()) : impl(a) {}
17199 bool init(uint32_t len = sDefaultInitSize) { return impl.init(len); }
17200 bool initialized() const { return impl.initialized(); }
17201 # 1221 "./../../dist/include/js/HashTable.h"
17202 typedef typename Impl::Ptr Ptr;
17203 Ptr lookup(const Lookup &l) const { return impl.lookup(l); }
17206 void remove(Ptr p) { impl.remove(p); }
17207 # 1261 "./../../dist/include/js/HashTable.h"
17208 typedef typename Impl::AddPtr AddPtr;
17209 AddPtr lookupForAdd(const Lookup &l) const {
17210 return impl.lookupForAdd(l);
17213 bool add(AddPtr &p, const T &t) {
17214 return impl.add(p, t);
17217 bool relookupOrAdd(AddPtr &p, const Lookup &l, const T &t) {
17218 return impl.relookupOrAdd(p, l, t);
17220 # 1284 "./../../dist/include/js/HashTable.h"
17221 typedef typename Impl::Range Range;
17222 Range all() const { return impl.all(); }
17223 uint32_t count() const { return impl.count(); }
17224 size_t capacity() const { return impl.capacity(); }
17225 size_t sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf) const {
17226 return impl.sizeOfExcludingThis(mallocSizeOf);
17228 size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf) const {
17233 return mallocSizeOf(this) + impl.sizeOfExcludingThis(mallocSizeOf);
17235 # 1312 "./../../dist/include/js/HashTable.h"
17236 typedef typename Impl::Enum Enum;
17242 void clear() { impl.clear(); }
17248 void finish() { impl.finish(); }
17251 bool empty() const { return impl.empty(); }
17257 unsigned generation() const { return impl.generation(); }
17261 bool has(const Lookup &l) const {
17262 return impl.lookup(l) != __null;
17266 bool put(const T &t) {
17267 AddPtr p = lookupForAdd(t);
17268 return p ? true : add(p, t);
17272 bool putNew(const T &t) {
17273 AddPtr p = lookupForAdd(t);
17278 bool putNew(const Lookup &l, const T &t) {
17279 AddPtr p = lookupForAdd(l);
17284 void remove(const Lookup &l) {
17285 if (Ptr p = lookup(l))
17291 # 29 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprvtd.h" 2
17300 #define JS_BITS_PER_UINT32_LOG2 5
17301 #define JS_BITS_PER_UINT32 32
17304 static const unsigned JS_GCTHING_ALIGN = 8;
17305 static const unsigned JS_GCTHING_ZEROBITS = 3;
17308 typedef uint8_t jsbytecode;
17309 typedef uint8_t jssrcnote;
17310 typedef uintptr_t jsatomid;
17313 typedef struct JSArgumentFormatMap JSArgumentFormatMap;
17314 typedef struct JSGCThing JSGCThing;
17315 typedef struct JSGenerator JSGenerator;
17316 typedef struct JSNativeEnumerator JSNativeEnumerator;
17317 typedef struct JSProperty JSProperty;
17318 typedef struct JSSharpObjectMap JSSharpObjectMap;
17319 typedef struct JSTryNote JSTryNote;
17322 typedef struct JSAtomState JSAtomState;
17323 typedef struct JSCodeSpec JSCodeSpec;
17324 typedef struct JSPrinter JSPrinter;
17325 typedef struct JSStackHeader JSStackHeader;
17326 typedef struct JSSubString JSSubString;
17327 typedef struct JSSpecializedNative JSSpecializedNative;
17330 typedef struct JSXML JSXML;
17331 # 79 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprvtd.h"
17334 class JSDependentString;
17335 class JSExtensibleString;
17336 class JSExternalString;
17337 class JSLinearString;
17338 class JSFixedString;
17339 class JSStaticAtom;
17346 struct ArgumentsData;
17350 class RegExpObject;
17351 class RegExpObjectBuilder;
17352 class RegExpShared;
17353 class RegExpStatics;
17355 class PropertyName;
17357 namespace detail { class RegExpCode; }
17361 IgnoreCaseFlag = 0x01,
17363 MultilineFlag = 0x04,
17370 enum RegExpExecType
17376 class ExecuteArgsGuard;
17377 class InvokeFrameGuard;
17378 class InvokeArgsGuard;
17379 class StringBuffer;
17383 class StackSegment;
17385 class ContextStack;
17386 class ScriptFrameIter;
17387 class CallReceiver;
17390 struct BytecodeEmitter;
17392 struct FunctionBox;
17396 struct SharedContext;
17401 struct TreeContext;
17405 class BaseProxyHandler;
17406 class DirectWrapper;
17407 class CrossCompartmentWrapper;
17409 class TempAllocPolicy;
17410 class RuntimeAllocPolicy;
17412 class GlobalObject;
17414 template <typename K,
17416 size_t InlineElems>
17422 class UnownedBaseShape;
17425 class ShapeKindArray;
17428 struct StackBaseShape;
17431 class MultiDeclRange;
17432 class ParseMapPool;
17433 class DefnOrHeader;
17434 typedef InlineMap<JSAtom *, Definition *, 24> AtomDefnMap;
17435 typedef InlineMap<JSAtom *, jsatomid, 24> AtomIndexMap;
17436 typedef InlineMap<JSAtom *, DefnOrHeader, 24> AtomDOHMap;
17437 typedef Vector<UpvarCookie, 8> UpvarCookies;
17440 class BreakpointSite;
17442 class WatchpointMap;
17450 typedef JSObject Env;
17452 typedef JSNative Native;
17453 typedef JSPropertyOp PropertyOp;
17454 typedef JSStrictPropertyOp StrictPropertyOp;
17455 typedef JSPropertyDescriptor PropertyDescriptor;
17457 namespace analyze {
17459 struct LifetimeVariable;
17460 class LoopAnalysis;
17461 class ScriptAnalysis;
17471 struct TypeCallsite;
17473 struct TypeCompartment;
17477 typedef JS::Handle<Shape*> HandleShape;
17478 typedef JS::Handle<BaseShape*> HandleBaseShape;
17479 typedef JS::Handle<types::TypeObject*> HandleTypeObject;
17480 typedef JS::Handle<JSAtom*> HandleAtom;
17481 typedef JS::Handle<PropertyName*> HandlePropertyName;
17483 typedef JS::Rooted<Shape*> RootedShape;
17484 typedef JS::Rooted<BaseShape*> RootedBaseShape;
17485 typedef JS::Rooted<types::TypeObject*> RootedTypeObject;
17486 typedef JS::Rooted<JSAtom*> RootedAtom;
17487 typedef JS::Rooted<PropertyName*> RootedPropertyName;
17494 template <XDRMode mode>
17503 class ExecutableAllocator;
17509 class BumpPointerAllocator;
17514 # 269 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprvtd.h"
17515 typedef enum JSTrapStatus {
17523 typedef JSTrapStatus
17524 (* JSTrapHandler)(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval,
17527 typedef JSTrapStatus
17528 (* JSInterruptHook)(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval,
17531 typedef JSTrapStatus
17532 (* JSDebuggerHandler)(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval,
17535 typedef JSTrapStatus
17536 (* JSThrowHook)(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval,
17540 (* JSWatchPointHandler)(JSContext *cx, JSObject *obj, jsid id, jsval old,
17541 jsval *newp, void *closure);
17545 (* JSNewScriptHook)(JSContext *cx,
17546 const char *filename,
17554 (* JSDestroyScriptHook)(JSFreeOp *fop,
17559 (* JSSourceHandler)(const char *filename, unsigned lineno, const jschar *str,
17560 size_t length, void **listenerTSData, void *closure);
17561 # 341 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprvtd.h"
17563 (* JSInterpreterHook)(JSContext *cx, JSStackFrame *fp, JSBool before,
17564 JSBool *ok, void *closure);
17567 (* JSDebugErrorHook)(JSContext *cx, const char *message, JSErrorReport *report,
17570 typedef struct JSDebugHooks {
17571 JSInterruptHook interruptHook;
17572 void *interruptHookData;
17573 JSNewScriptHook newScriptHook;
17574 void *newScriptHookData;
17575 JSDestroyScriptHook destroyScriptHook;
17576 void *destroyScriptHookData;
17577 JSDebuggerHandler debuggerHandler;
17578 void *debuggerHandlerData;
17579 JSSourceHandler sourceHandler;
17580 void *sourceHandlerData;
17581 JSInterpreterHook executeHook;
17582 void *executeHookData;
17583 JSInterpreterHook callHook;
17584 void *callHookData;
17585 JSThrowHook throwHook;
17586 void *throwHookData;
17587 JSDebugErrorHook debugErrorHook;
17588 void *debugErrorHookData;
17598 (* JSObjectOp)(JSContext *cx, JSHandleObject obj);
17602 (* JSClassInitializerOp)(JSContext *cx, JSObject *obj);
17609 (* JSIteratorOp)(JSContext *cx, JSHandleObject obj, JSBool keysonly);
17610 # 397 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprvtd.h"
17611 extern JSBool js_CStringsAreUTF8;
17615 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 2
17616 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jshash.h" 1
17624 #define jshash_h___
17629 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
17630 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jshash.h" 2
17636 typedef uint32_t JSHashNumber;
17637 typedef struct JSHashEntry JSHashEntry;
17638 typedef struct JSHashTable JSHashTable;
17640 #define JS_HASH_BITS 32
17641 #define JS_GOLDEN_RATIO 0x9E3779B9U
17643 typedef JSHashNumber (* JSHashFunction)(const void *key);
17644 typedef int (* JSHashComparator)(const void *v1, const void *v2);
17645 typedef int (* JSHashEnumerator)(JSHashEntry *he, int i, void *arg);
17648 #define HT_ENUMERATE_NEXT 0
17649 #define HT_ENUMERATE_STOP 1
17650 #define HT_ENUMERATE_REMOVE 2
17652 typedef struct JSHashAllocOps {
17653 void * (*allocTable)(void *pool, size_t size);
17654 void (*freeTable)(void *pool, void *item, size_t size);
17655 JSHashEntry * (*allocEntry)(void *pool, const void *key);
17656 void (*freeEntry)(void *pool, JSHashEntry *he, unsigned flag);
17659 #define HT_FREE_VALUE 0
17660 #define HT_FREE_ENTRY 1
17662 struct JSHashEntry {
17664 JSHashNumber keyHash;
17669 struct JSHashTable {
17670 JSHashEntry **buckets;
17673 JSHashFunction keyHash;
17674 JSHashComparator keyCompare;
17675 JSHashComparator valueCompare;
17676 JSHashAllocOps *allocOps;
17690 extern __attribute__((visibility("default"))) JSHashTable *
17691 JS_NewHashTable(uint32_t n, JSHashFunction keyHash,
17692 JSHashComparator keyCompare, JSHashComparator valueCompare,
17693 JSHashAllocOps *allocOps, void *allocPriv);
17695 extern __attribute__((visibility("default"))) void
17696 JS_HashTableDestroy(JSHashTable *ht);
17699 extern __attribute__((visibility("default"))) JSHashEntry **
17700 JS_HashTableRawLookup(JSHashTable *ht, JSHashNumber keyHash, const void *key);
17703 extern __attribute__((visibility("default"))) JSHashEntry *
17704 JS_HashTableRawAdd(JSHashTable *ht, JSHashEntry **&hep, JSHashNumber keyHash,
17705 const void *key, void *value);
17708 extern __attribute__((visibility("default"))) void
17709 JS_HashTableRawRemove(JSHashTable *ht, JSHashEntry **hep, JSHashEntry *he);
17712 extern __attribute__((visibility("default"))) JSHashEntry *
17713 JS_HashTableAdd(JSHashTable *ht, const void *key, void *value);
17715 extern __attribute__((visibility("default"))) JSBool
17716 JS_HashTableRemove(JSHashTable *ht, const void *key);
17718 extern __attribute__((visibility("default"))) int
17719 JS_HashTableEnumerateEntries(JSHashTable *ht, JSHashEnumerator f, void *arg);
17721 extern __attribute__((visibility("default"))) void *
17722 JS_HashTableLookup(JSHashTable *ht, const void *key);
17724 extern __attribute__((visibility("default"))) int
17725 JS_HashTableDump(JSHashTable *ht, JSHashEnumerator dump, FILE *fp);
17728 extern __attribute__((visibility("default"))) JSHashNumber
17729 JS_HashString(const void *key);
17732 extern __attribute__((visibility("default"))) int
17733 JS_CompareValues(const void *v1, const void *v2);
17736 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 2
17738 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jslock.h" 1
17751 # 1 "/usr/include/nspr/pratom.h" 1
17752 # 12 "/usr/include/nspr/pratom.h"
17753 #define pratom_h___
17755 # 1 "/usr/include/nspr/prtypes.h" 1
17756 # 21 "/usr/include/nspr/prtypes.h"
17757 #define prtypes_h___
17762 # 1 "/usr/include/nspr/prcpucfg.h" 1
17763 # 12 "/usr/include/nspr/prcpucfg.h"
17764 #define nspr_cpucfg___
17779 #define PR_AF_INET6 10
17780 # 547 "/usr/include/nspr/prcpucfg.h"
17781 #define IS_LITTLE_ENDIAN 1
17782 #undef IS_BIG_ENDIAN
17787 #define PR_BYTES_PER_BYTE 1
17788 #define PR_BYTES_PER_SHORT 2
17789 #define PR_BYTES_PER_INT 4
17790 #define PR_BYTES_PER_INT64 8
17791 #define PR_BYTES_PER_LONG 4
17792 #define PR_BYTES_PER_FLOAT 4
17793 #define PR_BYTES_PER_DOUBLE 8
17794 #define PR_BYTES_PER_WORD 4
17795 #define PR_BYTES_PER_DWORD 8
17797 #define PR_BITS_PER_BYTE 8
17798 #define PR_BITS_PER_SHORT 16
17799 #define PR_BITS_PER_INT 32
17800 #define PR_BITS_PER_INT64 64
17801 #define PR_BITS_PER_LONG 32
17802 #define PR_BITS_PER_FLOAT 32
17803 #define PR_BITS_PER_DOUBLE 64
17804 #define PR_BITS_PER_WORD 32
17806 #define PR_BITS_PER_BYTE_LOG2 3
17807 #define PR_BITS_PER_SHORT_LOG2 4
17808 #define PR_BITS_PER_INT_LOG2 5
17809 #define PR_BITS_PER_INT64_LOG2 6
17810 #define PR_BITS_PER_LONG_LOG2 5
17811 #define PR_BITS_PER_FLOAT_LOG2 5
17812 #define PR_BITS_PER_DOUBLE_LOG2 6
17813 #define PR_BITS_PER_WORD_LOG2 5
17815 #define PR_ALIGN_OF_SHORT 2
17816 #define PR_ALIGN_OF_INT 4
17817 #define PR_ALIGN_OF_LONG 4
17818 #define PR_ALIGN_OF_INT64 4
17819 #define PR_ALIGN_OF_FLOAT 4
17820 #define PR_ALIGN_OF_DOUBLE 4
17821 #define PR_ALIGN_OF_POINTER 4
17822 #define PR_ALIGN_OF_WORD 4
17824 #define PR_BYTES_PER_WORD_LOG2 2
17825 #define PR_BYTES_PER_DWORD_LOG2 3
17826 # 871 "/usr/include/nspr/prcpucfg.h"
17827 #define HAVE_LONG_LONG
17828 # 27 "/usr/include/nspr/prtypes.h" 2
17831 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
17832 # 30 "/usr/include/nspr/prtypes.h" 2
17833 # 125 "/usr/include/nspr/prtypes.h"
17834 #define PR_VISIBILITY_DEFAULT __attribute__((visibility("default")))
17839 #define PR_EXPORT(__type) extern PR_VISIBILITY_DEFAULT __type
17840 #define PR_EXPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
17841 #define PR_IMPORT(__type) extern PR_VISIBILITY_DEFAULT __type
17842 #define PR_IMPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
17844 #define PR_EXTERN(__type) extern PR_VISIBILITY_DEFAULT __type
17845 #define PR_IMPLEMENT(__type) PR_VISIBILITY_DEFAULT __type
17846 #define PR_EXTERN_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
17847 #define PR_IMPLEMENT_DATA(__type) PR_VISIBILITY_DEFAULT __type
17848 #define PR_CALLBACK
17849 #define PR_CALLBACK_DECL
17850 #define PR_STATIC_CALLBACK(__x) static __x
17858 #define NSPR_API(__type) PR_IMPORT(__type)
17859 #define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type)
17860 # 160 "/usr/include/nspr/prtypes.h"
17861 #define PR_BEGIN_MACRO do {
17862 #define PR_END_MACRO } while (0)
17863 # 170 "/usr/include/nspr/prtypes.h"
17864 #define PR_BEGIN_EXTERN_C extern "C" {
17865 #define PR_END_EXTERN_C }
17866 # 183 "/usr/include/nspr/prtypes.h"
17867 #define PR_BIT(n) ((PRUint32)1 << (n))
17868 #define PR_BITMASK(n) (PR_BIT(n) - 1)
17869 # 194 "/usr/include/nspr/prtypes.h"
17870 #define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y))
17871 #define PR_MIN(x,y) ((x)<(y)?(x):(y))
17872 #define PR_MAX(x,y) ((x)>(y)?(x):(y))
17873 #define PR_ABS(x) ((x)<0?-(x):(x))
17880 #define PR_ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
17883 # 216 "/usr/include/nspr/prtypes.h"
17884 typedef unsigned char PRUint8;
17885 # 230 "/usr/include/nspr/prtypes.h"
17886 typedef signed char PRInt8;
17887 # 244 "/usr/include/nspr/prtypes.h"
17888 #define PR_INT8_MAX 127
17889 #define PR_INT8_MIN (-128)
17890 #define PR_UINT8_MAX 255U
17891 # 255 "/usr/include/nspr/prtypes.h"
17892 typedef unsigned short PRUint16;
17893 typedef short PRInt16;
17894 # 269 "/usr/include/nspr/prtypes.h"
17895 #define PR_INT16_MAX 32767
17896 #define PR_INT16_MIN (-32768)
17897 #define PR_UINT16_MAX 65535U
17898 # 280 "/usr/include/nspr/prtypes.h"
17899 typedef unsigned int PRUint32;
17900 typedef int PRInt32;
17901 #define PR_INT32(x) x
17902 #define PR_UINT32(x) x ## U
17903 # 301 "/usr/include/nspr/prtypes.h"
17904 #define PR_INT32_MAX PR_INT32(2147483647)
17905 #define PR_INT32_MIN (-PR_INT32_MAX - 1)
17906 #define PR_UINT32_MAX PR_UINT32(4294967295)
17907 # 350 "/usr/include/nspr/prtypes.h"
17908 typedef long long PRInt64;
17909 typedef unsigned long long PRUint64;
17910 #define PR_INT64(x) x ## LL
17911 #define PR_UINT64(x) x ## ULL
17914 #define PR_INT64_MAX PR_INT64(0x7fffffffffffffff)
17915 #define PR_INT64_MIN (-PR_INT64_MAX - 1)
17916 #define PR_UINT64_MAX PR_UINT64(-1)
17917 # 385 "/usr/include/nspr/prtypes.h"
17918 typedef int PRIntn;
17919 typedef unsigned int PRUintn;
17920 # 396 "/usr/include/nspr/prtypes.h"
17921 typedef double PRFloat64;
17928 typedef size_t PRSize;
17936 typedef PRInt32 PROffset32;
17937 typedef PRInt64 PROffset64;
17945 typedef ptrdiff_t PRPtrdiff;
17946 # 431 "/usr/include/nspr/prtypes.h"
17947 typedef unsigned long PRUptrdiff;
17948 # 442 "/usr/include/nspr/prtypes.h"
17949 typedef PRIntn PRBool;
17959 typedef PRUint8 PRPackedBool;
17965 typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
17968 #define __PRUNICHAR__
17972 typedef PRUint16 PRUnichar;
17973 # 484 "/usr/include/nspr/prtypes.h"
17974 typedef long PRWord;
17975 typedef unsigned long PRUword;
17976 # 534 "/usr/include/nspr/prtypes.h"
17977 #define PR_STATIC_ASSERT(condition) extern void pr_static_assert(int arg[(condition) ? 1 : -1])
17981 # 15 "/usr/include/nspr/pratom.h" 2
17982 # 1 "/usr/include/nspr/prlock.h" 1
17983 # 17 "/usr/include/nspr/prlock.h"
17984 #define prlock_h___
17989 # 34 "/usr/include/nspr/prlock.h"
17990 typedef struct PRLock PRLock;
17991 # 51 "/usr/include/nspr/prlock.h"
17992 extern __attribute__((visibility("default"))) PRLock* PR_NewLock(void);
17993 # 62 "/usr/include/nspr/prlock.h"
17994 extern __attribute__((visibility("default"))) void PR_DestroyLock(PRLock *lock);
17995 # 73 "/usr/include/nspr/prlock.h"
17996 extern __attribute__((visibility("default"))) void PR_Lock(PRLock *lock);
17997 # 85 "/usr/include/nspr/prlock.h"
17998 extern __attribute__((visibility("default"))) PRStatus PR_Unlock(PRLock *lock);
17999 # 101 "/usr/include/nspr/prlock.h"
18000 #define PR_ASSERT_CURRENT_THREAD_OWNS_LOCK(lock)
18004 extern __attribute__((visibility("default"))) void PR_AssertCurrentThreadOwnsLock(PRLock *lock);
18007 # 16 "/usr/include/nspr/pratom.h" 2
18010 # 28 "/usr/include/nspr/pratom.h"
18011 extern __attribute__((visibility("default"))) PRInt32 PR_AtomicIncrement(PRInt32 *val);
18012 # 39 "/usr/include/nspr/pratom.h"
18013 extern __attribute__((visibility("default"))) PRInt32 PR_AtomicDecrement(PRInt32 *val);
18014 # 51 "/usr/include/nspr/pratom.h"
18015 extern __attribute__((visibility("default"))) PRInt32 PR_AtomicSet(PRInt32 *val, PRInt32 newval);
18016 # 63 "/usr/include/nspr/pratom.h"
18017 extern __attribute__((visibility("default"))) PRInt32 PR_AtomicAdd(PRInt32 *ptr, PRInt32 val);
18018 # 128 "/usr/include/nspr/pratom.h"
18019 #define PR_ATOMIC_INCREMENT(val) PR_AtomicIncrement(val)
18020 #define PR_ATOMIC_DECREMENT(val) PR_AtomicDecrement(val)
18021 #define PR_ATOMIC_SET(val,newval) PR_AtomicSet(val, newval)
18022 #define PR_ATOMIC_ADD(ptr,val) PR_AtomicAdd(ptr, val)
18029 typedef struct PRStackElemStr PRStackElem;
18031 struct PRStackElemStr {
18032 PRStackElem *prstk_elem_next;
18036 typedef struct PRStackStr PRStack;
18037 # 156 "/usr/include/nspr/pratom.h"
18038 extern __attribute__((visibility("default"))) PRStack * PR_CreateStack(const char *stack_name);
18039 # 168 "/usr/include/nspr/pratom.h"
18040 extern __attribute__((visibility("default"))) void PR_StackPush(PRStack *stack, PRStackElem *stack_elem);
18041 # 181 "/usr/include/nspr/pratom.h"
18042 extern __attribute__((visibility("default"))) PRStackElem * PR_StackPop(PRStack *stack);
18043 # 195 "/usr/include/nspr/pratom.h"
18044 extern __attribute__((visibility("default"))) PRStatus PR_DestroyStack(PRStack *stack);
18047 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jslock.h" 2
18048 # 1 "/usr/include/nspr/prlock.h" 1
18049 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jslock.h" 2
18050 # 1 "/usr/include/nspr/prcvar.h" 1
18057 #define prcvar_h___
18060 # 1 "/usr/include/nspr/prinrval.h" 1
18061 # 19 "/usr/include/nspr/prinrval.h"
18072 typedef PRUint32 PRIntervalTime;
18073 # 39 "/usr/include/nspr/prinrval.h"
18074 #define PR_INTERVAL_MIN 1000UL
18075 #define PR_INTERVAL_MAX 100000UL
18076 # 53 "/usr/include/nspr/prinrval.h"
18077 #define PR_INTERVAL_NO_WAIT 0UL
18078 #define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
18079 # 79 "/usr/include/nspr/prinrval.h"
18080 extern __attribute__((visibility("default"))) PRIntervalTime PR_IntervalNow(void);
18081 # 97 "/usr/include/nspr/prinrval.h"
18082 extern __attribute__((visibility("default"))) PRUint32 PR_TicksPerSecond(void);
18083 # 116 "/usr/include/nspr/prinrval.h"
18084 extern __attribute__((visibility("default"))) PRIntervalTime PR_SecondsToInterval(PRUint32 seconds);
18085 extern __attribute__((visibility("default"))) PRIntervalTime PR_MillisecondsToInterval(PRUint32 milli);
18086 extern __attribute__((visibility("default"))) PRIntervalTime PR_MicrosecondsToInterval(PRUint32 micro);
18087 # 137 "/usr/include/nspr/prinrval.h"
18088 extern __attribute__((visibility("default"))) PRUint32 PR_IntervalToSeconds(PRIntervalTime ticks);
18089 extern __attribute__((visibility("default"))) PRUint32 PR_IntervalToMilliseconds(PRIntervalTime ticks);
18090 extern __attribute__((visibility("default"))) PRUint32 PR_IntervalToMicroseconds(PRIntervalTime ticks);
18093 # 11 "/usr/include/nspr/prcvar.h" 2
18097 typedef struct PRCondVar PRCondVar;
18098 # 27 "/usr/include/nspr/prcvar.h"
18099 extern __attribute__((visibility("default"))) PRCondVar* PR_NewCondVar(PRLock *lock);
18107 extern __attribute__((visibility("default"))) void PR_DestroyCondVar(PRCondVar *cvar);
18108 # 65 "/usr/include/nspr/prcvar.h"
18109 extern __attribute__((visibility("default"))) PRStatus PR_WaitCondVar(PRCondVar *cvar, PRIntervalTime timeout);
18110 # 80 "/usr/include/nspr/prcvar.h"
18111 extern __attribute__((visibility("default"))) PRStatus PR_NotifyCondVar(PRCondVar *cvar);
18112 # 90 "/usr/include/nspr/prcvar.h"
18113 extern __attribute__((visibility("default"))) PRStatus PR_NotifyAllCondVar(PRCondVar *cvar);
18116 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jslock.h" 2
18117 # 1 "/usr/include/nspr/prthread.h" 1
18124 #define prthread_h___
18125 # 49 "/usr/include/nspr/prthread.h"
18128 typedef struct PRThread PRThread;
18129 typedef struct PRThreadStack PRThreadStack;
18131 typedef enum PRThreadType {
18136 typedef enum PRThreadScope {
18139 PR_GLOBAL_BOUND_THREAD
18142 typedef enum PRThreadState {
18143 PR_JOINABLE_THREAD,
18144 PR_UNJOINABLE_THREAD
18147 typedef enum PRThreadPriority
18149 PR_PRIORITY_FIRST = 0,
18150 PR_PRIORITY_LOW = 0,
18151 PR_PRIORITY_NORMAL = 1,
18152 PR_PRIORITY_HIGH = 2,
18153 PR_PRIORITY_URGENT = 3,
18154 PR_PRIORITY_LAST = 3
18155 } PRThreadPriority;
18156 # 105 "/usr/include/nspr/prthread.h"
18157 extern __attribute__((visibility("default"))) PRThread* PR_CreateThread(PRThreadType type,
18158 void ( *start)(void *arg),
18160 PRThreadPriority priority,
18161 PRThreadScope scope,
18162 PRThreadState state,
18163 PRUint32 stackSize);
18164 # 126 "/usr/include/nspr/prthread.h"
18165 extern __attribute__((visibility("default"))) PRStatus PR_JoinThread(PRThread *thread);
18171 extern __attribute__((visibility("default"))) PRThread* PR_GetCurrentThread(void);
18179 extern __attribute__((visibility("default"))) PRThreadPriority PR_GetThreadPriority(const PRThread *thread);
18184 extern __attribute__((visibility("default"))) void PR_SetThreadPriority(PRThread *thread, PRThreadPriority priority);
18190 extern __attribute__((visibility("default"))) PRStatus PR_SetCurrentThreadName(const char *name);
18195 extern __attribute__((visibility("default"))) const char * PR_GetThreadName(const PRThread *thread);
18196 # 182 "/usr/include/nspr/prthread.h"
18197 typedef void ( *PRThreadPrivateDTOR)(void *priv);
18199 extern __attribute__((visibility("default"))) PRStatus PR_NewThreadPrivateIndex(
18200 PRUintn *newIndex, PRThreadPrivateDTOR destructor);
18201 # 198 "/usr/include/nspr/prthread.h"
18202 extern __attribute__((visibility("default"))) PRStatus PR_SetThreadPrivate(PRUintn tpdIndex, void *priv);
18203 # 209 "/usr/include/nspr/prthread.h"
18204 extern __attribute__((visibility("default"))) void* PR_GetThreadPrivate(PRUintn tpdIndex);
18205 # 221 "/usr/include/nspr/prthread.h"
18206 extern __attribute__((visibility("default"))) PRStatus PR_Interrupt(PRThread *thread);
18212 extern __attribute__((visibility("default"))) void PR_ClearInterrupt(void);
18217 extern __attribute__((visibility("default"))) void PR_BlockInterrupt(void);
18222 extern __attribute__((visibility("default"))) void PR_UnblockInterrupt(void);
18223 # 246 "/usr/include/nspr/prthread.h"
18224 extern __attribute__((visibility("default"))) PRStatus PR_Sleep(PRIntervalTime ticks);
18229 extern __attribute__((visibility("default"))) PRThreadScope PR_GetThreadScope(const PRThread *thread);
18234 extern __attribute__((visibility("default"))) PRThreadType PR_GetThreadType(const PRThread *thread);
18239 extern __attribute__((visibility("default"))) PRThreadState PR_GetThreadState(const PRThread *thread);
18242 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jslock.h" 2
18243 # 1 "/usr/include/nspr/prinit.h" 1
18250 #define prinit_h___
18252 # 1 "/usr/include/nspr/prthread.h" 1
18253 # 10 "/usr/include/nspr/prinit.h" 2
18255 # 1 "/usr/include/nspr/prwin16.h" 1
18262 #define prwin16_h___
18263 # 153 "/usr/include/nspr/prwin16.h"
18264 #define PR_STDIO_INIT()
18265 # 12 "/usr/include/nspr/prinit.h" 2
18269 # 24 "/usr/include/nspr/prinit.h"
18270 #define PR_NAME "NSPR"
18271 # 34 "/usr/include/nspr/prinit.h"
18272 #define PR_VERSION "4.9.2"
18273 #define PR_VMAJOR 4
18274 #define PR_VMINOR 9
18275 #define PR_VPATCH 2
18276 #define PR_BETA PR_FALSE
18277 # 56 "/usr/include/nspr/prinit.h"
18278 typedef PRBool (*PRVersionCheck)(const char*);
18279 # 66 "/usr/include/nspr/prinit.h"
18280 extern __attribute__((visibility("default"))) PRBool PR_VersionCheck(const char *importedVersion);
18285 extern __attribute__((visibility("default"))) const char* PR_GetVersion(void);
18286 # 84 "/usr/include/nspr/prinit.h"
18287 extern __attribute__((visibility("default"))) void PR_Init(
18288 PRThreadType type, PRThreadPriority priority, PRUintn maxPTDs);
18289 # 105 "/usr/include/nspr/prinit.h"
18290 typedef PRIntn ( *PRPrimordialFn)(PRIntn argc, char **argv);
18292 extern __attribute__((visibility("default"))) PRIntn PR_Initialize(
18293 PRPrimordialFn prmain, PRIntn argc, char **argv, PRUintn maxPTDs);
18298 extern __attribute__((visibility("default"))) PRBool PR_Initialized(void);
18299 # 131 "/usr/include/nspr/prinit.h"
18300 extern __attribute__((visibility("default"))) PRStatus PR_Cleanup(void);
18306 extern __attribute__((visibility("default"))) void PR_DisableClockInterrupts(void);
18312 extern __attribute__((visibility("default"))) void PR_EnableClockInterrupts(void);
18318 extern __attribute__((visibility("default"))) void PR_BlockClockInterrupts(void);
18324 extern __attribute__((visibility("default"))) void PR_UnblockClockInterrupts(void);
18329 extern __attribute__((visibility("default"))) void PR_SetConcurrency(PRUintn numCPUs);
18336 extern __attribute__((visibility("default"))) PRStatus PR_SetFDCacheSize(PRIntn low, PRIntn high);
18343 extern __attribute__((visibility("default"))) void PR_ProcessExit(PRIntn status);
18350 extern __attribute__((visibility("default"))) void PR_Abort(void);
18351 # 191 "/usr/include/nspr/prinit.h"
18352 typedef struct PRCallOnceType {
18353 PRIntn initialized;
18354 PRInt32 inProgress;
18358 typedef PRStatus ( *PRCallOnceFN)(void);
18360 typedef PRStatus ( *PRCallOnceWithArgFN)(void *arg);
18362 extern __attribute__((visibility("default"))) PRStatus PR_CallOnce(
18363 PRCallOnceType *once,
18367 extern __attribute__((visibility("default"))) PRStatus PR_CallOnceWithArg(
18368 PRCallOnceType *once,
18369 PRCallOnceWithArgFN func,
18375 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jslock.h" 2
18377 #define JS_ATOMIC_INCREMENT(p) PR_ATOMIC_INCREMENT((PRInt32 *)(p))
18378 #define JS_ATOMIC_DECREMENT(p) PR_ATOMIC_DECREMENT((PRInt32 *)(p))
18379 #define JS_ATOMIC_ADD(p,v) PR_ATOMIC_ADD((PRInt32 *)(p), (PRInt32)(v))
18380 #define JS_ATOMIC_SET(p,v) PR_ATOMIC_SET((PRInt32 *)(p), (PRInt32)(v))
18381 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jslock.h"
18384 class AutoAtomicIncrement
18390 AutoAtomicIncrement(int32_t *p )
18393 PR_AtomicIncrement((PRInt32 *)(p));
18396 ~AutoAtomicIncrement() {
18397 PR_AtomicDecrement((PRInt32 *)(p));
18402 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 2
18404 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier.h" 1
18405 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier.h"
18406 #define jsgc_barrier_h___
18408 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsapi.h" 1
18409 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier.h" 2
18411 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h" 1
18419 #define gc_heap_h___
18424 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
18425 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h" 2
18428 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsutil.h" 1
18429 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h" 2
18431 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/BitArray.h" 1
18432 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/BitArray.h"
18433 #define BitArray_h__
18437 # 1 "./../../dist/include/js/TemplateLib.h" 1
18438 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/BitArray.h" 2
18442 template <size_t nbits>
18445 uintptr_t map[nbits / (8 * 4) + (nbits % (8 * 4) == 0 ? 0 : 1)];
18448 void clear(bool value) {
18450 memset(map, 0xFF, sizeof(map));
18452 memset(map, 0, sizeof(map));
18455 inline bool get(size_t offset) const {
18456 uintptr_t index, mask;
18457 getMarkWordAndMask(offset, &index, &mask);
18458 return map[index] & mask;
18461 inline void set(size_t offset) {
18462 uintptr_t index, mask;
18463 getMarkWordAndMask(offset, &index, &mask);
18464 map[index] |= mask;
18467 inline void unset(size_t offset) {
18468 uintptr_t index, mask;
18469 getMarkWordAndMask(offset, &index, &mask);
18470 map[index] &= ~mask;
18474 inline void getMarkWordAndMask(size_t offset,
18475 uintptr_t *indexp, uintptr_t *maskp) const {
18476 *indexp = offset >> tl::FloorLog2<(8 * 4)>::result;
18477 *maskp = uintptr_t(1) << (offset & ((8 * 4) - 1));
18482 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h" 2
18484 struct JSCompartment;
18497 struct ArenaHeader;
18505 static const uint32_t BLACK = 0;
18506 static const uint32_t GRAY = 1;
18511 FINALIZE_OBJECT0_BACKGROUND,
18513 FINALIZE_OBJECT2_BACKGROUND,
18515 FINALIZE_OBJECT4_BACKGROUND,
18517 FINALIZE_OBJECT8_BACKGROUND,
18519 FINALIZE_OBJECT12_BACKGROUND,
18521 FINALIZE_OBJECT16_BACKGROUND,
18522 FINALIZE_OBJECT_LAST = FINALIZE_OBJECT16_BACKGROUND,
18525 FINALIZE_BASE_SHAPE,
18526 FINALIZE_TYPE_OBJECT,
18530 FINALIZE_SHORT_STRING,
18532 FINALIZE_EXTERNAL_STRING,
18533 FINALIZE_LAST = FINALIZE_EXTERNAL_STRING
18536 static const unsigned FINALIZE_LIMIT = FINALIZE_LAST + 1;
18537 static const unsigned FINALIZE_OBJECT_LIMIT = FINALIZE_OBJECT_LAST + 1;
18543 static const size_t MAX_BACKGROUND_FINALIZE_KINDS = FINALIZE_LIMIT - FINALIZE_OBJECT_LIMIT / 2;
18550 static const size_t CellShift = 3;
18551 static const size_t CellSize = size_t(1) << CellShift;
18552 static const size_t CellMask = CellSize - 1;
18554 inline uintptr_t address() const;
18555 inline ArenaHeader *arenaHeader() const;
18556 inline Chunk *chunk() const;
18557 inline AllocKind getAllocKind() const;
18558 __attribute__((always_inline)) inline bool isMarked(uint32_t color = BLACK) const;
18559 __attribute__((always_inline)) inline bool markIfUnmarked(uint32_t color = BLACK) const;
18560 __attribute__((always_inline)) inline void unmark(uint32_t color) const;
18562 inline JSCompartment *compartment() const;
18568 # 114 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h"
18569 const size_t PageShift = 12;
18571 const size_t PageSize = size_t(1) << PageShift;
18573 const size_t ChunkShift = 20;
18574 const size_t ChunkSize = size_t(1) << ChunkShift;
18575 const size_t ChunkMask = ChunkSize - 1;
18577 const size_t ArenaShift = PageShift;
18578 const size_t ArenaSize = PageSize;
18579 const size_t ArenaMask = ArenaSize - 1;
18585 const static uint32_t FreeCommittedArenasThreshold = (32 << 20) / ArenaSize;
18593 const size_t ArenaCellCount = size_t(1) << (ArenaShift - Cell::CellShift);
18594 const size_t ArenaBitmapBits = ArenaCellCount;
18595 const size_t ArenaBitmapBytes = ArenaBitmapBits / 8;
18596 const size_t ArenaBitmapWords = ArenaBitmapBits / (8 * 4);
18597 # 169 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h"
18606 FreeSpan(uintptr_t first, uintptr_t last)
18607 : first(first), last(last) {
18615 static size_t encodeOffsets(size_t firstOffset, size_t lastOffset) {
18617 typedef int moz_static_assert18[(ArenaShift < 16) ? 1 : -1];
18621 return firstOffset | (lastOffset << 16);
18628 static const size_t FullArenaOffsets = ArenaSize | ((ArenaSize - 1) << 16);
18630 static FreeSpan decodeOffsets(uintptr_t arenaAddr, size_t offsets) {
18633 size_t firstOffset = offsets & 0xFFFF;
18634 size_t lastOffset = offsets >> 16;
18642 return FreeSpan(arenaAddr + firstOffset, arenaAddr | lastOffset);
18645 void initAsEmpty(uintptr_t arenaAddr = 0) {
18647 first = arenaAddr + ArenaSize;
18648 last = arenaAddr | (ArenaSize - 1);
18652 bool isEmpty() const {
18654 return first > last;
18657 bool hasNext() const {
18659 return !(last & uintptr_t(1));
18662 const FreeSpan *nextSpan() const {
18664 return reinterpret_cast<FreeSpan *>(last);
18667 FreeSpan *nextSpanUnchecked(size_t thingSize) const {
18673 return reinterpret_cast<FreeSpan *>(last);
18676 uintptr_t arenaAddressUnchecked() const {
18677 return last & ~ArenaMask;
18680 uintptr_t arenaAddress() const {
18682 return arenaAddressUnchecked();
18685 ArenaHeader *arenaHeader() const {
18686 return reinterpret_cast<ArenaHeader *>(arenaAddress());
18689 bool isSameNonEmptySpan(const FreeSpan *another) const {
18692 return first == another->first && last == another->last;
18695 bool isWithinArena(uintptr_t arenaAddr) const {
18699 return arenaAddress() == arenaAddr;
18702 size_t encodeAsOffsets() const {
18707 uintptr_t arenaAddr = arenaAddress();
18708 return encodeOffsets(first - arenaAddr, last & ArenaMask);
18712 __attribute__((always_inline)) inline void *allocate(size_t thingSize) {
18715 uintptr_t thing = first;
18716 if (thing < last) {
18718 first = thing + thingSize;
18719 } else if ((__builtin_expect((thing == last), 1))) {
18724 *this = *reinterpret_cast<FreeSpan *>(thing);
18729 return reinterpret_cast<void *>(thing);
18733 __attribute__((always_inline)) inline void *infallibleAllocate(size_t thingSize) {
18736 uintptr_t thing = first;
18737 if (thing < last) {
18738 first = thing + thingSize;
18741 *this = *reinterpret_cast<FreeSpan *>(thing);
18744 return reinterpret_cast<void *>(thing);
18753 __attribute__((always_inline)) inline void *allocateFromNewArena(uintptr_t arenaAddr, size_t firstThingOffset,
18754 size_t thingSize) {
18756 uintptr_t thing = arenaAddr | firstThingOffset;
18757 first = thing + thingSize;
18758 last = arenaAddr | ArenaMask;
18760 return reinterpret_cast<void *>(thing);
18763 void checkSpan() const {
18764 # 394 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h"
18772 friend struct FreeLists;
18774 JSCompartment *compartment;
18789 size_t firstFreeSpanOffsets;
18790 # 427 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h"
18791 size_t allocKind : 8;
18792 # 446 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h"
18794 size_t hasDelayedMarking : 1;
18795 size_t allocatedDuringIncremental : 1;
18796 size_t markOverflow : 1;
18797 size_t nextDelayedMarking : (8 * 4) - 8 - 1 - 1 - 1;
18799 static void staticAsserts() {
18801 typedef int moz_static_assert19[(FINALIZE_LIMIT <= 255) ? 1 : -1];
18807 typedef int moz_static_assert20[(ArenaShift >= 8 + 1 + 1 + 1) ? 1 : -1];
18810 inline uintptr_t address() const;
18811 inline Chunk *chunk() const;
18813 bool allocated() const {
18815 return allocKind < size_t(FINALIZE_LIMIT);
18818 void init(JSCompartment *comp, AllocKind kind) {
18823 compartment = comp;
18825 typedef int moz_static_assert21[(FINALIZE_LIMIT <= 255) ? 1 : -1];
18826 allocKind = size_t(kind);
18829 firstFreeSpanOffsets = FreeSpan::FullArenaOffsets;
18832 void setAsNotAllocated() {
18833 allocKind = size_t(FINALIZE_LIMIT);
18835 allocatedDuringIncremental = 0;
18836 hasDelayedMarking = 0;
18837 nextDelayedMarking = 0;
18840 inline uintptr_t arenaAddress() const;
18841 inline Arena *getArena();
18843 AllocKind getAllocKind() const {
18845 return AllocKind(allocKind);
18848 inline size_t getThingSize() const;
18850 bool hasFreeThings() const {
18851 return firstFreeSpanOffsets != FreeSpan::FullArenaOffsets;
18854 inline bool isEmpty() const;
18856 void setAsFullyUsed() {
18857 firstFreeSpanOffsets = FreeSpan::FullArenaOffsets;
18860 inline FreeSpan getFirstFreeSpan() const;
18861 inline void setFirstFreeSpan(const FreeSpan *span);
18867 inline ArenaHeader *getNextDelayedMarking() const;
18868 inline void setNextDelayedMarking(ArenaHeader *aheader);
18873 # 540 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h"
18874 ArenaHeader aheader;
18875 uint8_t data[ArenaSize - sizeof(ArenaHeader)];
18878 static __attribute__((visibility("default"))) const uint32_t ThingSizes[];
18879 static __attribute__((visibility("default"))) const uint32_t FirstThingOffsets[];
18882 static void staticAsserts();
18884 static size_t thingSize(AllocKind kind) {
18885 return ThingSizes[kind];
18888 static size_t firstThingOffset(AllocKind kind) {
18889 return FirstThingOffsets[kind];
18892 static size_t thingsPerArena(size_t thingSize) {
18898 return (ArenaSize - sizeof(ArenaHeader)) / thingSize;
18901 static size_t thingsSpan(size_t thingSize) {
18902 return thingsPerArena(thingSize) * thingSize;
18905 static bool isAligned(uintptr_t thing, size_t thingSize) {
18907 uintptr_t tailOffset = (ArenaSize - thing) & ArenaMask;
18908 return tailOffset % thingSize == 0;
18911 uintptr_t address() const {
18912 return aheader.address();
18915 uintptr_t thingsStart(AllocKind thingKind) {
18916 return address() | firstThingOffset(thingKind);
18919 uintptr_t thingsEnd() {
18920 return address() + ArenaSize;
18923 template <typename T>
18924 bool finalize(FreeOp *fop, AllocKind thingKind, size_t thingSize);
18928 ArenaHeader::getThingSize() const
18931 return Arena::thingSize(getAllocKind());
18941 ArenaHeader *freeArenasHead;
18948 uint32_t lastDecommittedArenaOffset;
18951 uint32_t numArenasFree;
18954 uint32_t numArenasFreeCommitted;
18959 # 655 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h"
18960 const size_t BytesPerArenaWithHeader = ArenaSize + ArenaBitmapBytes;
18961 const size_t ChunkDecommitBitmapBytes = ChunkSize / ArenaSize / 8;
18962 const size_t ChunkBytesAvailable = ChunkSize - sizeof(ChunkInfo) - ChunkDecommitBitmapBytes;
18963 const size_t ArenasPerChunk = ChunkBytesAvailable / BytesPerArenaWithHeader;
18968 uintptr_t bitmap[ArenaBitmapWords * ArenasPerChunk];
18970 __attribute__((always_inline)) inline void getMarkWordAndMask(const Cell *cell, uint32_t color,
18971 uintptr_t **wordp, uintptr_t *maskp);
18973 __attribute__((always_inline)) inline bool isMarked(const Cell *cell, uint32_t color) {
18974 uintptr_t *word, mask;
18975 getMarkWordAndMask(cell, color, &word, &mask);
18976 return *word & mask;
18979 __attribute__((always_inline)) inline bool markIfUnmarked(const Cell *cell, uint32_t color) {
18980 uintptr_t *word, mask;
18981 getMarkWordAndMask(cell, BLACK, &word, &mask);
18985 if (color != BLACK) {
18990 getMarkWordAndMask(cell, color, &word, &mask);
18998 __attribute__((always_inline)) inline void unmark(const Cell *cell, uint32_t color) {
18999 uintptr_t *word, mask;
19000 getMarkWordAndMask(cell, color, &word, &mask);
19005 PodArrayZero(bitmap);
19007 # 721 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h"
19010 typedef int moz_static_assert22[(ArenaBitmapBytes * ArenasPerChunk == sizeof(ChunkBitmap)) ? 1 : -1];
19012 typedef BitArray<ArenasPerChunk> PerArenaBitmap;
19014 const size_t ChunkPadSize = ChunkSize
19015 - (sizeof(Arena) * ArenasPerChunk)
19016 - sizeof(ChunkBitmap)
19017 - sizeof(PerArenaBitmap)
19018 - sizeof(ChunkInfo);
19019 typedef int moz_static_assert23[(ChunkPadSize < BytesPerArenaWithHeader) ? 1 : -1];
19027 Arena arenas[ArenasPerChunk];
19030 uint8_t padding[ChunkPadSize];
19032 ChunkBitmap bitmap;
19033 PerArenaBitmap decommittedArenas;
19036 static Chunk *fromAddress(uintptr_t addr) {
19037 addr &= ~ChunkMask;
19038 return reinterpret_cast<Chunk *>(addr);
19041 static bool withinArenasRange(uintptr_t addr) {
19042 uintptr_t offset = addr & ChunkMask;
19043 return offset < ArenasPerChunk * ArenaSize;
19046 static size_t arenaIndex(uintptr_t addr) {
19048 return (addr & ChunkMask) >> ArenaShift;
19051 uintptr_t address() const {
19052 uintptr_t addr = reinterpret_cast<uintptr_t>(this);
19057 bool unused() const {
19058 return info.numArenasFree == ArenasPerChunk;
19061 bool hasAvailableArenas() const {
19062 return info.numArenasFree != 0;
19065 inline void addToAvailableList(JSCompartment *compartment);
19066 inline void insertToAvailableList(Chunk **insertPoint);
19067 inline void removeFromAvailableList();
19069 ArenaHeader *allocateArena(JSCompartment *comp, AllocKind kind);
19071 void releaseArena(ArenaHeader *aheader);
19073 static Chunk *allocate(JSRuntime *rt);
19076 static inline void release(JSRuntime *rt, Chunk *chunk);
19077 static inline void releaseList(JSRuntime *rt, Chunk *chunkListHead);
19080 inline void prepareToBeFreed(JSRuntime *rt);
19086 Chunk *getPrevious() {
19088 return fromPointerToNext(info.prevp);
19092 static Chunk *fromPointerToNext(Chunk **nextFieldPtr) {
19093 uintptr_t addr = reinterpret_cast<uintptr_t>(nextFieldPtr);
19095 return reinterpret_cast<Chunk *>(addr - __builtin_offsetof (Chunk, info.next));
19099 inline void init();
19102 unsigned findDecommittedArenaOffset();
19103 ArenaHeader* fetchNextDecommittedArena();
19107 inline ArenaHeader* fetchNextFreeArena(JSRuntime *rt);
19109 inline void addArenaToFreeList(JSRuntime *rt, ArenaHeader *aheader);
19112 typedef int moz_static_assert24[(sizeof(Chunk) == ChunkSize) ? 1 : -1];
19115 Cell::address() const
19117 uintptr_t addr = uintptr_t(this);
19124 ArenaHeader::address() const
19126 uintptr_t addr = reinterpret_cast<uintptr_t>(this);
19133 ArenaHeader::chunk() const
19135 return Chunk::fromAddress(address());
19139 ArenaHeader::arenaAddress() const
19145 ArenaHeader::getArena()
19147 return reinterpret_cast<Arena *>(arenaAddress());
19151 ArenaHeader::isEmpty() const
19155 size_t firstThingOffset = Arena::firstThingOffset(getAllocKind());
19156 return firstFreeSpanOffsets == FreeSpan::encodeOffsets(firstThingOffset, ArenaMask);
19160 ArenaHeader::getFirstFreeSpan() const
19165 return FreeSpan::decodeOffsets(arenaAddress(), firstFreeSpanOffsets);
19169 ArenaHeader::setFirstFreeSpan(const FreeSpan *span)
19172 firstFreeSpanOffsets = span->encodeAsOffsets();
19175 inline ArenaHeader *
19176 ArenaHeader::getNextDelayedMarking() const
19178 return &reinterpret_cast<Arena *>(nextDelayedMarking << ArenaShift)->aheader;
19182 ArenaHeader::setNextDelayedMarking(ArenaHeader *aheader)
19185 hasDelayedMarking = 1;
19186 nextDelayedMarking = aheader->arenaAddress() >> ArenaShift;
19189 __attribute__((always_inline)) inline void
19190 ChunkBitmap::getMarkWordAndMask(const Cell *cell, uint32_t color,
19191 uintptr_t **wordp, uintptr_t *maskp)
19193 size_t bit = (cell->address() & ChunkMask) / Cell::CellSize + color;
19195 *maskp = uintptr_t(1) << (bit % (8 * 4));
19196 *wordp = &bitmap[bit / (8 * 4)];
19200 AssertValidColor(const void *thing, uint32_t color)
19208 inline ArenaHeader *
19209 Cell::arenaHeader() const
19211 uintptr_t addr = address();
19212 addr &= ~ArenaMask;
19213 return reinterpret_cast<ArenaHeader *>(addr);
19217 Cell::chunk() const
19219 uintptr_t addr = uintptr_t(this);
19221 addr &= ~(ChunkSize - 1);
19222 return reinterpret_cast<Chunk *>(addr);
19226 Cell::getAllocKind() const
19228 return arenaHeader()->getAllocKind();
19232 Cell::isMarked(uint32_t color ) const
19234 AssertValidColor(this, color);
19235 return chunk()->bitmap.isMarked(this, color);
19239 Cell::markIfUnmarked(uint32_t color ) const
19241 AssertValidColor(this, color);
19242 return chunk()->bitmap.markIfUnmarked(this, color);
19246 Cell::unmark(uint32_t color) const
19249 AssertValidColor(this, color);
19250 chunk()->bitmap.unmark(this, color);
19254 Cell::compartment() const
19256 return arenaHeader()->compartment;
19258 # 980 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h"
19262 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier.h" 2
19263 # 117 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier.h"
19268 template<class T, typename Unioned = uintptr_t>
19269 class EncapsulatedPtr
19278 EncapsulatedPtr() : value(__null) {}
19279 explicit EncapsulatedPtr(T *v) : value(v) {}
19280 explicit EncapsulatedPtr(const EncapsulatedPtr<T> &v) : value(v.value) {}
19282 ~EncapsulatedPtr() { pre(); }
19290 EncapsulatedPtr<T, Unioned> &operator=(T *v) {
19297 EncapsulatedPtr<T, Unioned> &operator=(const EncapsulatedPtr<T> &v) {
19305 T *get() const { return value; }
19311 T **unsafeGet() { return &value; }
19312 void unsafeSet(T *v) { value = v; }
19314 Unioned *unsafeGetUnioned() { return &other; }
19316 T &operator*() const { return *value; }
19317 T *operator->() const { return value; }
19319 operator T*() const { return value; }
19322 void pre() { T::writeBarrierPre(value); }
19325 template <class T, class Unioned = uintptr_t>
19326 class HeapPtr : public EncapsulatedPtr<T, Unioned>
19329 HeapPtr() : EncapsulatedPtr<T>(__null) {}
19330 explicit HeapPtr(T *v) : EncapsulatedPtr<T>(v) { post(); }
19331 explicit HeapPtr(const HeapPtr<T> &v)
19332 : EncapsulatedPtr<T>(v) { post(); }
19340 HeapPtr<T, Unioned> &operator=(T *v) {
19348 HeapPtr<T, Unioned> &operator=(const HeapPtr<T> &v) {
19351 this->value = v.value;
19357 void post() { T::writeBarrierPost(this->value, (void *)&this->value); }
19360 template<class T1, class T2>
19362 BarrieredSetPair(JSCompartment *comp,
19363 HeapPtr<T1> &v1, T1 *val1,
19364 HeapPtr<T2> &v2, T2 *val2);
19368 class RelocatablePtr : public EncapsulatedPtr<T>
19371 RelocatablePtr() : EncapsulatedPtr<T>(__null) {}
19372 explicit RelocatablePtr(T *v) : EncapsulatedPtr<T>(v) { post(); }
19373 explicit RelocatablePtr(const RelocatablePtr<T> &v)
19374 : EncapsulatedPtr<T>(v) { post(); }
19376 ~RelocatablePtr() {
19381 RelocatablePtr<T> &operator=(T *v) {
19389 RelocatablePtr<T> &operator=(const RelocatablePtr<T> &v) {
19392 this->value = v.value;
19398 void post() { T::writeBarrierRelocPost(this->value, (void *)&this->value); }
19399 void relocate() { T::writeBarrierRelocated(this->value, (void *)&this->value); }
19406 template<class T1, class T2>
19408 BarrieredSetPair(JSCompartment *comp,
19409 HeapPtr<T1> &v1, T1 *val1,
19410 HeapPtr<T2> &v2, T2 *val2)
19412 if (T1::needWriteBarrierPre(comp)) {
19416 v1.unsafeSet(val1);
19417 v2.unsafeSet(val2);
19424 namespace types { struct TypeObject; }
19426 typedef RelocatablePtr<JSObject> RelocatablePtrObject;
19427 typedef RelocatablePtr<JSScript> RelocatablePtrScript;
19429 typedef HeapPtr<JSObject> HeapPtrObject;
19430 typedef HeapPtr<JSFunction> HeapPtrFunction;
19431 typedef HeapPtr<JSString> HeapPtrString;
19432 typedef HeapPtr<JSScript> HeapPtrScript;
19433 typedef HeapPtr<Shape> HeapPtrShape;
19434 typedef HeapPtr<BaseShape> HeapPtrBaseShape;
19435 typedef HeapPtr<types::TypeObject> HeapPtrTypeObject;
19436 typedef HeapPtr<JSXML> HeapPtrXML;
19440 struct HeapPtrHasher
19442 typedef HeapPtr<T> Key;
19445 static HashNumber hash(Lookup obj) { return DefaultHasher<T *>::hash(obj); }
19446 static bool match(const Key &k, Lookup l) { return k.get() == l; }
19451 struct DefaultHasher< HeapPtr<T> > : HeapPtrHasher<T> { };
19453 class EncapsulatedValue
19462 EncapsulatedValue() ;
19463 EncapsulatedValue(const EncapsulatedValue &v) ;
19464 EncapsulatedValue &operator=(const Value &v) ;
19465 EncapsulatedValue &operator=(const EncapsulatedValue &v) ;
19467 EncapsulatedValue(const Value &v) : value(v) {}
19468 ~EncapsulatedValue() {}
19471 inline bool operator==(const EncapsulatedValue &v) const { return value == v.value; }
19472 inline bool operator!=(const EncapsulatedValue &v) const { return value != v.value; }
19474 const Value &get() const { return value; }
19475 Value *unsafeGet() { return &value; }
19476 operator const Value &() const { return value; }
19478 bool isUndefined() const { return value.isUndefined(); }
19479 bool isNull() const { return value.isNull(); }
19480 bool isBoolean() const { return value.isBoolean(); }
19481 bool isTrue() const { return value.isTrue(); }
19482 bool isFalse() const { return value.isFalse(); }
19483 bool isNumber() const { return value.isNumber(); }
19484 bool isInt32() const { return value.isInt32(); }
19485 bool isDouble() const { return value.isDouble(); }
19486 bool isString() const { return value.isString(); }
19487 bool isObject() const { return value.isObject(); }
19488 bool isMagic(JSWhyMagic why) const { return value.isMagic(why); }
19489 bool isGCThing() const { return value.isGCThing(); }
19490 bool isMarkable() const { return value.isMarkable(); }
19492 bool toBoolean() const { return value.toBoolean(); }
19493 double toNumber() const { return value.toNumber(); }
19494 int32_t toInt32() const { return value.toInt32(); }
19495 double toDouble() const { return value.toDouble(); }
19496 JSString *toString() const { return value.toString(); }
19497 JSObject &toObject() const { return value.toObject(); }
19498 JSObject *toObjectOrNull() const { return value.toObjectOrNull(); }
19499 void *toGCThing() const { return value.toGCThing(); }
19501 JSGCTraceKind gcKind() const { return value.gcKind(); }
19503 uint64_t asRawBits() const { return value.asRawBits(); }
19509 static inline void writeBarrierPre(const Value &v);
19510 static inline void writeBarrierPre(JSCompartment *comp, const Value &v);
19514 inline void pre(JSCompartment *comp);
19517 class HeapValue : public EncapsulatedValue
19520 explicit inline HeapValue();
19521 explicit inline HeapValue(const Value &v);
19522 explicit inline HeapValue(const HeapValue &v);
19523 inline ~HeapValue();
19525 inline void init(const Value &v);
19526 inline void init(JSCompartment *comp, const Value &v);
19528 inline HeapValue &operator=(const Value &v);
19529 inline HeapValue &operator=(const HeapValue &v);
19537 inline void set(JSCompartment *comp, const Value &v);
19539 static inline void writeBarrierPost(const Value &v, Value *addr);
19540 static inline void writeBarrierPost(JSCompartment *comp, const Value &v, Value *addr);
19543 inline void post();
19544 inline void post(JSCompartment *comp);
19547 class RelocatableValue : public EncapsulatedValue
19550 explicit inline RelocatableValue();
19551 explicit inline RelocatableValue(const Value &v);
19552 explicit inline RelocatableValue(const RelocatableValue &v);
19553 inline ~RelocatableValue();
19555 inline RelocatableValue &operator=(const Value &v);
19556 inline RelocatableValue &operator=(const RelocatableValue &v);
19559 inline void post();
19560 inline void post(JSCompartment *comp);
19561 inline void relocate();
19564 class HeapSlot : public EncapsulatedValue
19570 inline HeapSlot &operator=(const Value &v) ;
19571 inline HeapSlot &operator=(const HeapValue &v) ;
19572 inline HeapSlot &operator=(const HeapSlot &v) ;
19575 explicit inline HeapSlot() ;
19576 explicit inline HeapSlot(JSObject *obj, uint32_t slot, const Value &v);
19577 explicit inline HeapSlot(JSObject *obj, uint32_t slot, const HeapSlot &v);
19578 inline ~HeapSlot();
19580 inline void init(JSObject *owner, uint32_t slot, const Value &v);
19581 inline void init(JSCompartment *comp, JSObject *owner, uint32_t slot, const Value &v);
19583 inline void set(JSObject *owner, uint32_t slot, const Value &v);
19584 inline void set(JSCompartment *comp, JSObject *owner, uint32_t slot, const Value &v);
19586 static inline void writeBarrierPost(JSObject *obj, uint32_t slot);
19587 static inline void writeBarrierPost(JSCompartment *comp, JSObject *obj, uint32_t slotno);
19590 inline void post(JSObject *owner, uint32_t slot);
19591 inline void post(JSCompartment *comp, JSObject *owner, uint32_t slot);
19601 SlotRangeWriteBarrierPost(JSCompartment *comp, JSObject *obj, uint32_t start, uint32_t count)
19605 static inline const Value *
19606 Valueify(const EncapsulatedValue *array)
19608 typedef int moz_static_assert25[(sizeof(HeapValue) == sizeof(Value)) ? 1 : -1];
19609 typedef int moz_static_assert26[(sizeof(HeapSlot) == sizeof(Value)) ? 1 : -1];
19610 return (const Value *)array;
19613 class HeapSlotArray
19618 HeapSlotArray(HeapSlot *array) : array(array) {}
19620 operator const Value *() const { return Valueify(array); }
19621 operator HeapSlot *() const { return array; }
19623 HeapSlotArray operator +(int offset) const { return HeapSlotArray(array + offset); }
19624 HeapSlotArray operator +(uint32_t offset) const { return HeapSlotArray(array + offset); }
19627 class EncapsulatedId
19632 explicit EncapsulatedId() : value(((jsid)0x2)) {}
19633 explicit inline EncapsulatedId(jsid id) : value(id) {}
19634 ~EncapsulatedId() {}
19637 EncapsulatedId(const EncapsulatedId &v) ;
19638 EncapsulatedId &operator=(const EncapsulatedId &v) ;
19641 bool operator==(jsid id) const { return value == id; }
19642 bool operator!=(jsid id) const { return value != id; }
19644 jsid get() const { return value; }
19645 jsid *unsafeGet() { return &value; }
19646 operator jsid() const { return value; }
19652 class RelocatableId : public EncapsulatedId
19655 explicit RelocatableId() : EncapsulatedId() {}
19656 explicit inline RelocatableId(jsid id) : EncapsulatedId(id) {}
19657 inline ~RelocatableId();
19659 inline RelocatableId &operator=(jsid id);
19660 inline RelocatableId &operator=(const RelocatableId &v);
19663 class HeapId : public EncapsulatedId
19666 explicit HeapId() : EncapsulatedId() {}
19667 explicit inline HeapId(jsid id);
19670 inline void init(jsid id);
19672 inline HeapId &operator=(jsid id);
19673 inline HeapId &operator=(const HeapId &v);
19676 inline void post();
19678 HeapId(const HeapId &v) ;
19680 # 544 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier.h"
19682 class ReadBarriered
19687 ReadBarriered() : value(__null) {}
19688 ReadBarriered(T *value) : value(value) {}
19693 T::readBarrier(value);
19697 operator T*() const { return get(); }
19699 T &operator*() const { return *get(); }
19700 T *operator->() const { return get(); }
19702 T **unsafeGet() { return &value; }
19704 void set(T *v) { value = v; }
19706 operator bool() { return !!value; }
19709 class ReadBarrieredValue
19714 ReadBarrieredValue() : value(UndefinedValue()) {}
19715 ReadBarrieredValue(const Value &value) : value(value) {}
19717 inline const Value &get() const;
19718 Value *unsafeGet() { return &value; }
19719 inline operator const Value &() const;
19721 inline JSObject &toObject() const;
19726 template <class T> struct IsRelocatableHeapType<HeapPtr<T> >
19727 { static const bool result = false; };
19728 template <> struct IsRelocatableHeapType<HeapSlot> { static const bool result = false; };
19729 template <> struct IsRelocatableHeapType<HeapValue> { static const bool result = false; };
19730 template <> struct IsRelocatableHeapType<HeapId> { static const bool result = false; };
19734 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 2
19739 js::HeapId vector[1];
19744 static __attribute__((always_inline)) inline jsid
19745 JSID_FROM_BITS(size_t bits)
19751 # 58 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h"
19752 static __attribute__((always_inline)) inline jsid
19753 NON_INTEGER_ATOM_TO_JSID(JSAtom *atom)
19756 jsid id = JSID_FROM_BITS((size_t)atom);
19762 static __attribute__((always_inline)) inline JSBool
19763 JSID_IS_ATOM(jsid id)
19765 return JSID_IS_STRING(id);
19768 static __attribute__((always_inline)) inline JSBool
19769 JSID_IS_ATOM(jsid id, JSAtom *atom)
19771 return id == JSID_FROM_BITS((size_t)atom);
19774 static __attribute__((always_inline)) inline JSAtom *
19775 JSID_TO_ATOM(jsid id)
19777 return (JSAtom *)JSID_TO_STRING(id);
19780 typedef int moz_static_assert27[(sizeof(JSHashNumber) == 4) ? 1 : -1];
19781 typedef int moz_static_assert28[(sizeof(jsid) == 4) ? 1 : -1];
19785 static __attribute__((always_inline)) inline JSHashNumber
19790 JSHashNumber((id));
19796 return n * 0x9E3779B9U;
19799 static __attribute__((always_inline)) inline Value
19802 if (JSID_IS_STRING(id))
19803 return StringValue(JSID_TO_STRING(id));
19804 if ((__builtin_expect((JSID_IS_INT(id)), 1)))
19805 return Int32Value(JSID_TO_INT(id));
19806 if ((__builtin_expect((JSID_IS_OBJECT(id)), 1)))
19807 return ObjectValue(*JSID_TO_OBJECT(id));
19809 return UndefinedValue();
19812 static __attribute__((always_inline)) inline jsval
19815 return IdToValue(id);
19819 struct DefaultHasher<jsid>
19821 typedef jsid Lookup;
19822 static HashNumber hash(const Lookup &l) {
19823 return HashNumber((l));
19825 static bool match(const jsid &id, const Lookup &l) {
19833 #define ATOM_HASH(atom) ((JSHashNumber)(atom) >> 2)
19834 # 151 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h"
19835 extern const char *
19836 js_AtomToPrintableString(JSContext *cx, JSAtom *atom, JSAutoByteString *bytes);
19842 HashChars(const jschar *chars, size_t length)
19845 for (; length; chars++, length--)
19846 h = (((h) << (4)) | ((h) >> (32 - (4)))) ^ *chars;
19850 class AtomStateEntry
19854 static const uintptr_t NO_TAG_MASK = uintptr_t(-1) - 1;
19857 AtomStateEntry() : bits(0) {}
19858 AtomStateEntry(const AtomStateEntry &other) : bits(other.bits) {}
19859 AtomStateEntry(JSAtom *ptr, bool tagged)
19860 : bits(uintptr_t(ptr) | uintptr_t(tagged))
19865 bool isTagged() const {
19873 void setTagged(bool enabled) const {
19874 const_cast<AtomStateEntry *>(this)->bits |= uintptr_t(enabled);
19877 JSAtom *asPtr() const;
19884 const jschar *chars;
19886 const JSAtom *atom;
19888 Lookup(const jschar *chars, size_t length) : chars(chars), length(length), atom(__null) {}
19889 inline Lookup(const JSAtom *atom);
19892 static HashNumber hash(const Lookup &l) { return HashChars(l.chars, l.length); }
19893 static inline bool match(const AtomStateEntry &entry, const Lookup &lookup);
19896 typedef HashSet<AtomStateEntry, AtomHasher, SystemAllocPolicy> AtomSet;
19897 # 231 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h"
19904 class PropertyName;
19911 # 256 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h"
19912 js::PropertyName *emptyAtom;
19918 js::PropertyName *booleanAtoms[2];
19919 js::PropertyName *typeAtoms[JSTYPE_LIMIT];
19920 js::PropertyName *nullAtom;
19923 js::PropertyName *classAtoms[JSProto_LIMIT];
19926 #define DEFINE_ATOM(id,text) js::PropertyName *id ##Atom;
19927 #define DEFINE_PROTOTYPE_ATOM(id) js::PropertyName *id ##Atom;
19928 #define DEFINE_KEYWORD_ATOM(id) js::PropertyName *id ##Atom;
19929 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.tbl" 1
19930 # 37 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.tbl"
19931 js::PropertyName *anonymousAtom;
19932 js::PropertyName *applyAtom;
19933 js::PropertyName *argumentsAtom;
19934 js::PropertyName *arityAtom;
19935 js::PropertyName *BYTES_PER_ELEMENTAtom;
19936 js::PropertyName *callAtom;
19937 js::PropertyName *calleeAtom;
19938 js::PropertyName *callerAtom;
19939 js::PropertyName *classPrototypeAtom;
19940 js::PropertyName *constructorAtom;
19941 js::PropertyName *eachAtom;
19942 js::PropertyName *evalAtom;
19943 js::PropertyName *fileNameAtom;
19944 js::PropertyName *getAtom;
19945 js::PropertyName *globalAtom;
19946 js::PropertyName *ignoreCaseAtom;
19947 js::PropertyName *indexAtom;
19948 js::PropertyName *inputAtom;
19949 js::PropertyName *toISOStringAtom;
19950 js::PropertyName *iteratorAtom;
19951 js::PropertyName *joinAtom;
19952 js::PropertyName *lastIndexAtom;
19953 js::PropertyName *lengthAtom;
19954 js::PropertyName *lineNumberAtom;
19955 js::PropertyName *messageAtom;
19956 js::PropertyName *multilineAtom;
19957 js::PropertyName *nameAtom;
19958 js::PropertyName *nextAtom;
19959 js::PropertyName *noSuchMethodAtom;
19960 js::PropertyName *objectNullAtom;
19961 js::PropertyName *objectUndefinedAtom;
19962 js::PropertyName *ofAtom;
19963 js::PropertyName *protoAtom;
19964 js::PropertyName *setAtom;
19965 js::PropertyName *sourceAtom;
19966 js::PropertyName *stackAtom;
19967 js::PropertyName *stickyAtom;
19968 js::PropertyName *toGMTStringAtom;
19969 js::PropertyName *toLocaleStringAtom;
19970 js::PropertyName *toSourceAtom;
19971 js::PropertyName *toStringAtom;
19972 js::PropertyName *toUTCStringAtom;
19973 js::PropertyName *valueOfAtom;
19974 js::PropertyName *toJSONAtom;
19975 js::PropertyName *void0Atom;
19976 js::PropertyName *enumerableAtom;
19977 js::PropertyName *configurableAtom;
19978 js::PropertyName *writableAtom;
19979 js::PropertyName *valueAtom;
19980 js::PropertyName *testAtom;
19981 js::PropertyName *useStrictAtom;
19982 js::PropertyName *locAtom;
19983 js::PropertyName *lineAtom;
19984 js::PropertyName *InfinityAtom;
19985 js::PropertyName *NaNAtom;
19986 js::PropertyName *builderAtom;
19989 js::PropertyName *etagoAtom;
19990 js::PropertyName *namespaceAtom;
19991 js::PropertyName *ptagcAtom;
19992 js::PropertyName *qualifierAtom;
19993 js::PropertyName *spaceAtom;
19994 js::PropertyName *stagoAtom;
19995 js::PropertyName *starAtom;
19996 js::PropertyName *starQualifierAtom;
19997 js::PropertyName *tagcAtom;
19998 js::PropertyName *xmlAtom;
19999 js::PropertyName *functionNamespaceURIAtom;
20002 js::PropertyName *ProxyAtom;
20003 js::PropertyName *getOwnPropertyDescriptorAtom;
20004 js::PropertyName *getPropertyDescriptorAtom;
20005 js::PropertyName *definePropertyAtom;
20006 js::PropertyName *deleteAtom;
20007 js::PropertyName *getOwnPropertyNamesAtom;
20008 js::PropertyName *enumerateAtom;
20009 js::PropertyName *fixAtom;
20010 js::PropertyName *hasAtom;
20011 js::PropertyName *hasOwnAtom;
20012 js::PropertyName *keysAtom;
20013 js::PropertyName *iterateAtom;
20014 js::PropertyName *WeakMapAtom;
20015 js::PropertyName *byteLengthAtom;
20016 js::PropertyName *returnAtom;
20017 js::PropertyName *throwAtom;
20018 js::PropertyName *urlAtom;
20019 js::PropertyName *innermostAtom;
20021 js::PropertyName *XMLListAtom;
20022 js::PropertyName *decodeURIAtom;
20023 js::PropertyName *decodeURIComponentAtom;
20024 js::PropertyName *defineGetterAtom;
20025 js::PropertyName *defineSetterAtom;
20026 js::PropertyName *encodeURIAtom;
20027 js::PropertyName *encodeURIComponentAtom;
20028 js::PropertyName *escapeAtom;
20029 js::PropertyName *hasOwnPropertyAtom;
20030 js::PropertyName *isFiniteAtom;
20031 js::PropertyName *isNaNAtom;
20032 js::PropertyName *isPrototypeOfAtom;
20033 js::PropertyName *isXMLNameAtom;
20034 js::PropertyName *lookupGetterAtom;
20035 js::PropertyName *lookupSetterAtom;
20036 js::PropertyName *parseFloatAtom;
20037 js::PropertyName *parseIntAtom;
20038 js::PropertyName *propertyIsEnumerableAtom;
20039 js::PropertyName *unescapeAtom;
20040 js::PropertyName *unevalAtom;
20041 js::PropertyName *unwatchAtom;
20042 js::PropertyName *watchAtom;
20043 # 274 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 2
20045 #undef DEFINE_PROTOTYPE_ATOM
20046 #undef DEFINE_KEYWORD_ATOM
20048 static const size_t commonAtomsOffset;
20056 JSAtom **commonAtomsStart() {
20057 return reinterpret_cast<JSAtom **>(&emptyAtom);
20060 void checkStaticInvariants();
20064 AtomIsInterned(JSContext *cx, JSAtom *atom);
20066 #define ATOM(name) cx->runtime->atomState.name ##Atom
20068 #define COMMON_ATOM_INDEX(name) ((offsetof(JSAtomState, name ##Atom) - JSAtomState::commonAtomsOffset) / sizeof(JSAtom*))
20071 #define COMMON_TYPE_ATOM_INDEX(type) ((offsetof(JSAtomState, typeAtoms[type]) - JSAtomState::commonAtomsOffset) / sizeof(JSAtom*))
20075 #define NAME_OFFSET(name) offsetof(JSAtomState, name ##Atom)
20076 #define OFFSET_TO_NAME(rt,off) (*(js::PropertyName **)((char*)&(rt)->atomState + (off)))
20077 #define CLASS_NAME_OFFSET(name) offsetof(JSAtomState, classAtoms[JSProto_ ##name])
20078 #define CLASS_NAME(cx,name) ((cx)->runtime->atomState.classAtoms[JSProto_ ##name])
20080 extern const char *const js_common_atom_names[];
20081 extern const size_t js_common_atom_count;
20086 #define JS_BOOLEAN_STR(type) (js_common_atom_names[1 + (type)])
20087 #define JS_TYPE_STR(type) (js_common_atom_names[1 + 2 + (type)])
20090 extern const char js_object_str[];
20091 extern const char js_undefined_str[];
20094 #define JS_PROTO(name,code,init) extern const char js_ ##name ##_str[];
20095 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsproto.tbl" 1
20103 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h" 1
20104 # 42 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
20105 #define JS_VERSION_ECMA_3 148
20106 #define JS_VERSION_ECMA_3_TEST 149
20107 # 124 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
20108 #define JS_HAS_STR_HTML_HELPERS 1
20109 #define JS_HAS_OBJ_PROTO_PROP 1
20110 #define JS_HAS_OBJ_WATCHPOINT 1
20111 #define JS_HAS_TOSOURCE 1
20112 #define JS_HAS_CATCH_GUARD 1
20113 #define JS_HAS_UNEVAL 1
20114 #define JS_HAS_CONST 1
20115 #define JS_HAS_FUN_EXPR_STMT 1
20116 #define JS_HAS_NO_SUCH_METHOD 1
20117 #define JS_HAS_GENERATORS 1
20118 #define JS_HAS_BLOCK_SCOPE 1
20119 #define JS_HAS_DESTRUCTURING 2
20120 #define JS_HAS_GENERATOR_EXPRS 1
20121 #define JS_HAS_EXPR_CLOSURES 1
20122 # 146 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
20123 #define JS_HAS_NEW_GLOBAL_OBJECT 1
20126 #define JS_HAS_MAKE_SYSTEM_OBJECT 1
20129 #define JS_HAS_DESTRUCTURING_SHORTHAND (JS_HAS_DESTRUCTURING == 2)
20135 #define OLD_GETTER_SETTER_METHODS 1
20138 #define USE_NEW_OBJECT_REPRESENTATION 0
20143 #define NEW_OBJECT_REPRESENTATION_ONLY() MOZ_NOT_REACHED("don't call this! to be used in the new object representation")
20144 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsproto.tbl" 2
20147 #define XML_INIT js_InitXMLClass
20148 #define NAMESPACE_INIT js_InitNamespaceClass
20149 #define QNAME_INIT js_InitQNameClass
20150 #define XMLFILTER_INIT js_InitXMLFilterClass
20151 # 27 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsproto.tbl"
20152 extern const char js_Null_str[];
20153 extern const char js_Object_str[];
20154 extern const char js_Function_str[];
20155 extern const char js_Array_str[];
20156 extern const char js_Boolean_str[];
20157 extern const char js_JSON_str[];
20158 extern const char js_Date_str[];
20159 extern const char js_Math_str[];
20160 extern const char js_Number_str[];
20161 extern const char js_String_str[];
20162 extern const char js_RegExp_str[];
20163 extern const char js_XML_str[];
20164 extern const char js_Namespace_str[];
20165 extern const char js_QName_str[];
20166 extern const char js_Error_str[];
20167 extern const char js_InternalError_str[];
20168 extern const char js_EvalError_str[];
20169 extern const char js_RangeError_str[];
20170 extern const char js_ReferenceError_str[];
20171 extern const char js_SyntaxError_str[];
20172 extern const char js_TypeError_str[];
20173 extern const char js_URIError_str[];
20174 extern const char js_Iterator_str[];
20175 extern const char js_StopIteration_str[];
20176 extern const char js_ArrayBuffer_str[];
20177 extern const char js_Int8Array_str[];
20178 extern const char js_Uint8Array_str[];
20179 extern const char js_Int16Array_str[];
20180 extern const char js_Uint16Array_str[];
20181 extern const char js_Int32Array_str[];
20182 extern const char js_Uint32Array_str[];
20183 extern const char js_Float32Array_str[];
20184 extern const char js_Float64Array_str[];
20185 extern const char js_Uint8ClampedArray_str[];
20186 extern const char js_Proxy_str[];
20187 extern const char js_AnyName_str[];
20188 extern const char js_WeakMap_str[];
20189 extern const char js_Map_str[];
20190 extern const char js_Set_str[];
20191 extern const char js_DataView_str[];
20194 #undef NAMESPACE_INIT
20196 # 326 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 2
20199 #define DEFINE_ATOM(id,text) extern const char js_ ##id ##_str[];
20200 #define DEFINE_PROTOTYPE_ATOM(id)
20201 #define DEFINE_KEYWORD_ATOM(id)
20202 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.tbl" 1
20203 # 37 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.tbl"
20204 extern const char js_anonymous_str[];
20205 extern const char js_apply_str[];
20206 extern const char js_arguments_str[];
20207 extern const char js_arity_str[];
20208 extern const char js_BYTES_PER_ELEMENT_str[];
20209 extern const char js_call_str[];
20210 extern const char js_callee_str[];
20211 extern const char js_caller_str[];
20212 extern const char js_classPrototype_str[];
20213 extern const char js_constructor_str[];
20214 extern const char js_each_str[];
20215 extern const char js_eval_str[];
20216 extern const char js_fileName_str[];
20217 extern const char js_get_str[];
20218 extern const char js_global_str[];
20219 extern const char js_ignoreCase_str[];
20220 extern const char js_index_str[];
20221 extern const char js_input_str[];
20222 extern const char js_toISOString_str[];
20223 extern const char js_iterator_str[];
20224 extern const char js_join_str[];
20225 extern const char js_lastIndex_str[];
20226 extern const char js_length_str[];
20227 extern const char js_lineNumber_str[];
20228 extern const char js_message_str[];
20229 extern const char js_multiline_str[];
20230 extern const char js_name_str[];
20231 extern const char js_next_str[];
20232 extern const char js_noSuchMethod_str[];
20233 extern const char js_objectNull_str[];
20234 extern const char js_objectUndefined_str[];
20235 extern const char js_of_str[];
20236 extern const char js_proto_str[];
20237 extern const char js_set_str[];
20238 extern const char js_source_str[];
20239 extern const char js_stack_str[];
20240 extern const char js_sticky_str[];
20241 extern const char js_toGMTString_str[];
20242 extern const char js_toLocaleString_str[];
20243 extern const char js_toSource_str[];
20244 extern const char js_toString_str[];
20245 extern const char js_toUTCString_str[];
20246 extern const char js_valueOf_str[];
20247 extern const char js_toJSON_str[];
20248 extern const char js_void0_str[];
20249 extern const char js_enumerable_str[];
20250 extern const char js_configurable_str[];
20251 extern const char js_writable_str[];
20252 extern const char js_value_str[];
20253 extern const char js_test_str[];
20254 extern const char js_useStrict_str[];
20255 extern const char js_loc_str[];
20256 extern const char js_line_str[];
20257 extern const char js_Infinity_str[];
20258 extern const char js_NaN_str[];
20259 extern const char js_builder_str[];
20262 extern const char js_etago_str[];
20263 extern const char js_namespace_str[];
20264 extern const char js_ptagc_str[];
20265 extern const char js_qualifier_str[];
20266 extern const char js_space_str[];
20267 extern const char js_stago_str[];
20268 extern const char js_star_str[];
20269 extern const char js_starQualifier_str[];
20270 extern const char js_tagc_str[];
20271 extern const char js_xml_str[];
20272 extern const char js_functionNamespaceURI_str[];
20276 extern const char js_getOwnPropertyDescriptor_str[];
20277 extern const char js_getPropertyDescriptor_str[];
20278 extern const char js_defineProperty_str[];
20280 extern const char js_getOwnPropertyNames_str[];
20281 extern const char js_enumerate_str[];
20282 extern const char js_fix_str[];
20283 extern const char js_has_str[];
20284 extern const char js_hasOwn_str[];
20285 extern const char js_keys_str[];
20286 extern const char js_iterate_str[];
20288 extern const char js_byteLength_str[];
20291 extern const char js_url_str[];
20292 extern const char js_innermost_str[];
20294 extern const char js_XMLList_str[];
20295 extern const char js_decodeURI_str[];
20296 extern const char js_decodeURIComponent_str[];
20297 extern const char js_defineGetter_str[];
20298 extern const char js_defineSetter_str[];
20299 extern const char js_encodeURI_str[];
20300 extern const char js_encodeURIComponent_str[];
20301 extern const char js_escape_str[];
20302 extern const char js_hasOwnProperty_str[];
20303 extern const char js_isFinite_str[];
20304 extern const char js_isNaN_str[];
20305 extern const char js_isPrototypeOf_str[];
20306 extern const char js_isXMLName_str[];
20307 extern const char js_lookupGetter_str[];
20308 extern const char js_lookupSetter_str[];
20309 extern const char js_parseFloat_str[];
20310 extern const char js_parseInt_str[];
20311 extern const char js_propertyIsEnumerable_str[];
20312 extern const char js_unescape_str[];
20313 extern const char js_uneval_str[];
20314 extern const char js_unwatch_str[];
20315 extern const char js_watch_str[];
20316 # 332 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 2
20318 #undef DEFINE_PROTOTYPE_ATOM
20319 #undef DEFINE_KEYWORD_ATOM
20322 extern const char js_close_str[];
20323 extern const char js_send_str[];
20327 extern const char js_getter_str[];
20328 extern const char js_setter_str[];
20336 js_InitAtomState(JSRuntime *rt);
20343 js_FinishAtomState(JSRuntime *rt);
20352 MarkAtomState(JSTracer *trc, bool markAll);
20355 SweepAtomState(JSRuntime *rt);
20358 InitCommonAtoms(JSContext *cx);
20361 FinishCommonAtoms(JSRuntime *rt);
20364 enum InternBehavior
20366 DoNotInternAtom = false,
20373 js_Atomize(JSContext *cx, const char *bytes, size_t length,
20374 js::InternBehavior ib = js::DoNotInternAtom,
20375 js::FlationCoding fc = js::NormalEncoding);
20378 js_AtomizeChars(JSContext *cx, const jschar *chars, size_t length,
20379 js::InternBehavior ib = js::DoNotInternAtom);
20382 js_AtomizeString(JSContext *cx, JSString *str, js::InternBehavior ib = js::DoNotInternAtom);
20389 js_GetExistingStringAtom(JSContext *cx, const jschar *chars, size_t length);
20390 # 413 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h"
20392 js_ValueToAtom(JSContext *cx, const js::Value &v, JSAtom **atomp);
20397 InternNonIntElementId(JSContext *cx, JSObject *obj, const Value &idval,
20398 jsid *idp, Value *vp);
20401 InternNonIntElementId(JSContext *cx, JSObject *obj, const Value &idval, jsid *idp)
20404 return InternNonIntElementId(cx, obj, idval, idp, &dummy);
20413 InitAtomMap(JSContext *cx, AtomIndexMap *indices, HeapPtr<JSAtom> *atoms);
20415 template<XDRMode mode>
20417 XDRAtom(XDRState<mode> *xdr, JSAtom **atomp);
20420 # 21 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h" 2
20421 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclass.h" 1
20422 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclass.h"
20423 #define jsclass_h__
20424 # 21 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclass.h"
20427 class PropertyName;
20430 static __attribute__((always_inline)) inline jsid
20431 SPECIALID_TO_JSID(const SpecialId &sid);
20432 # 41 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclass.h"
20437 friend __attribute__((always_inline)) inline jsid SPECIALID_TO_JSID(const SpecialId &sid);
20439 static const uintptr_t TYPE_VOID = 0x2;
20440 static const uintptr_t TYPE_OBJECT = 0x4;
20441 static const uintptr_t TYPE_DEFAULT_XML_NAMESPACE = 0x6;
20442 static const uintptr_t TYPE_MASK = 0x7;
20444 SpecialId(uintptr_t bits) : bits(bits) { }
20447 SpecialId() : bits(TYPE_VOID) { }
20451 SpecialId(JSObject &obj)
20452 : bits(uintptr_t(&obj) | TYPE_OBJECT)
20458 bool isObject() const {
20459 return (bits & TYPE_MASK) == TYPE_OBJECT && bits != TYPE_OBJECT;
20462 JSObject *toObject() const {
20464 return reinterpret_cast<JSObject *>(bits & ~TYPE_MASK);
20469 static SpecialId empty() {
20470 SpecialId sid(TYPE_OBJECT);
20475 bool isEmpty() const {
20476 return bits == TYPE_OBJECT;
20481 static SpecialId voidId() {
20482 SpecialId sid(TYPE_VOID);
20487 bool isVoid() const {
20488 return bits == TYPE_VOID;
20493 static SpecialId defaultXMLNamespace() {
20494 SpecialId sid(TYPE_DEFAULT_XML_NAMESPACE);
20499 bool isDefaultXMLNamespace() const {
20500 return bits == TYPE_DEFAULT_XML_NAMESPACE;
20504 static __attribute__((always_inline)) inline jsid
20505 SPECIALID_TO_JSID(const SpecialId &sid)
20516 static __attribute__((always_inline)) inline bool
20517 JSID_IS_SPECIAL(jsid id)
20519 return JSID_IS_OBJECT(id) || JSID_IS_EMPTY(id) || JSID_IS_VOID(id) ||
20520 JSID_IS_DEFAULT_XML_NAMESPACE(id);
20523 static __attribute__((always_inline)) inline SpecialId
20524 JSID_TO_SPECIALID(jsid id)
20527 if (JSID_IS_OBJECT(id))
20528 return SpecialId(*JSID_TO_OBJECT(id));
20529 if (JSID_IS_EMPTY(id))
20530 return SpecialId::empty();
20531 if (JSID_IS_VOID(id))
20532 return SpecialId::voidId();
20534 return SpecialId::defaultXMLNamespace();
20537 typedef JS::Handle<SpecialId> HandleSpecialId;
20542 (* LookupGenericOp)(JSContext *cx, HandleObject obj, HandleId id, JSObject **objp,
20543 JSProperty **propp);
20545 (* LookupPropOp)(JSContext *cx, HandleObject obj, HandlePropertyName name, JSObject **objp,
20546 JSProperty **propp);
20548 (* LookupElementOp)(JSContext *cx, HandleObject obj, uint32_t index, JSObject **objp,
20549 JSProperty **propp);
20551 (* LookupSpecialOp)(JSContext *cx, HandleObject obj, HandleSpecialId sid, JSObject **objp,
20552 JSProperty **propp);
20554 (* DefineGenericOp)(JSContext *cx, HandleObject obj, HandleId id, const Value *value,
20555 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
20557 (* DefinePropOp)(JSContext *cx, HandleObject obj, HandlePropertyName name, const Value *value,
20558 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
20560 (* DefineElementOp)(JSContext *cx, HandleObject obj, uint32_t index, const Value *value,
20561 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
20563 (* DefineSpecialOp)(JSContext *cx, HandleObject obj, HandleSpecialId sid, const Value *value,
20564 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
20566 (* GenericIdOp)(JSContext *cx, HandleObject obj, HandleObject receiver, HandleId id, Value *vp);
20568 (* PropertyIdOp)(JSContext *cx, HandleObject obj, HandleObject receiver, HandlePropertyName name, Value *vp);
20570 (* ElementIdOp)(JSContext *cx, HandleObject obj, HandleObject receiver, uint32_t index, Value *vp);
20572 (* ElementIfPresentOp)(JSContext *cx, HandleObject obj, HandleObject receiver, uint32_t index, Value *vp, bool* present);
20574 (* SpecialIdOp)(JSContext *cx, HandleObject obj, HandleObject receiver, HandleSpecialId sid, Value *vp);
20576 (* StrictGenericIdOp)(JSContext *cx, HandleObject obj, HandleId id, Value *vp, JSBool strict);
20578 (* StrictPropertyIdOp)(JSContext *cx, HandleObject obj, HandlePropertyName name, Value *vp, JSBool strict);
20580 (* StrictElementIdOp)(JSContext *cx, HandleObject obj, uint32_t index, Value *vp, JSBool strict);
20582 (* StrictSpecialIdOp)(JSContext *cx, HandleObject obj, HandleSpecialId sid, Value *vp, JSBool strict);
20584 (* GenericAttributesOp)(JSContext *cx, HandleObject obj, HandleId id, unsigned *attrsp);
20586 (* PropertyAttributesOp)(JSContext *cx, HandleObject obj, HandlePropertyName name, unsigned *attrsp);
20588 (* ElementAttributesOp)(JSContext *cx, HandleObject obj, uint32_t index, unsigned *attrsp);
20590 (* SpecialAttributesOp)(JSContext *cx, HandleObject obj, HandleSpecialId sid, unsigned *attrsp);
20592 (* DeletePropertyOp)(JSContext *cx, HandleObject obj, HandlePropertyName name, Value *vp, JSBool strict);
20594 (* DeleteElementOp)(JSContext *cx, HandleObject obj, uint32_t index, Value *vp, JSBool strict);
20596 (* DeleteSpecialOp)(JSContext *cx, HandleObject obj, HandleSpecialId sid, Value *vp, JSBool strict);
20598 (* TypeOfOp)(JSContext *cx, HandleObject obj);
20601 (* ObjectOp)(JSContext *cx, HandleObject obj);
20603 (* ClearOp)(JSContext *cx, HandleObject obj);
20605 (* FinalizeOp)(FreeOp *fop, JSObject *obj);
20607 #define JS_CLASS_MEMBERS const char *name; uint32_t flags; JSPropertyOp addProperty; JSPropertyOp delProperty; JSPropertyOp getProperty; JSStrictPropertyOp setProperty; JSEnumerateOp enumerate; JSResolveOp resolve; JSConvertOp convert; FinalizeOp finalize; JSCheckAccessOp checkAccess; JSNative call; JSHasInstanceOp hasInstance; JSNative construct; JSTraceOp trace
20608 # 240 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclass.h"
20609 struct ClassSizeMeasurement
20611 const char *name; uint32_t flags; JSPropertyOp addProperty; JSPropertyOp delProperty; JSPropertyOp getProperty; JSStrictPropertyOp setProperty; JSEnumerateOp enumerate; JSResolveOp resolve; JSConvertOp convert; FinalizeOp finalize; JSCheckAccessOp checkAccess; JSNative call; JSHasInstanceOp hasInstance; JSNative construct; JSTraceOp trace;
20614 struct ClassExtension
20616 JSEqualityOp equality;
20617 JSObjectOp outerObject;
20618 JSObjectOp innerObject;
20619 JSIteratorOp iteratorObject;
20626 bool isWrappedNative;
20629 #define JS_NULL_CLASS_EXT {NULL,NULL,NULL,NULL,NULL,false}
20633 LookupGenericOp lookupGeneric;
20634 LookupPropOp lookupProperty;
20635 LookupElementOp lookupElement;
20636 LookupSpecialOp lookupSpecial;
20637 DefineGenericOp defineGeneric;
20638 DefinePropOp defineProperty;
20639 DefineElementOp defineElement;
20640 DefineSpecialOp defineSpecial;
20641 GenericIdOp getGeneric;
20642 PropertyIdOp getProperty;
20643 ElementIdOp getElement;
20644 ElementIfPresentOp getElementIfPresent;
20645 SpecialIdOp getSpecial;
20646 StrictGenericIdOp setGeneric;
20647 StrictPropertyIdOp setProperty;
20648 StrictElementIdOp setElement;
20649 StrictSpecialIdOp setSpecial;
20650 GenericAttributesOp getGenericAttributes;
20651 PropertyAttributesOp getPropertyAttributes;
20652 ElementAttributesOp getElementAttributes;
20653 SpecialAttributesOp getSpecialAttributes;
20654 GenericAttributesOp setGenericAttributes;
20655 PropertyAttributesOp setPropertyAttributes;
20656 ElementAttributesOp setElementAttributes;
20657 SpecialAttributesOp setSpecialAttributes;
20658 DeletePropertyOp deleteProperty;
20659 DeleteElementOp deleteElement;
20660 DeleteSpecialOp deleteSpecial;
20662 JSNewEnumerateOp enumerate;
20664 ObjectOp thisObject;
20668 #define JS_NULL_OBJECT_OPS {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL}
20675 const char *name; uint32_t flags; JSPropertyOp addProperty; JSPropertyOp delProperty; JSPropertyOp getProperty; JSStrictPropertyOp setProperty; JSEnumerateOp enumerate; JSResolveOp resolve; JSConvertOp convert; FinalizeOp finalize; JSCheckAccessOp checkAccess; JSNative call; JSHasInstanceOp hasInstance; JSNative construct; JSTraceOp trace;
20676 ClassExtension ext;
20678 uint8_t pad[sizeof(JSClass) - sizeof(ClassSizeMeasurement) -
20679 sizeof(ClassExtension) - sizeof(ObjectOps)];
20682 static const uint32_t NON_NATIVE = (1<<((8 + 8)+3));
20684 bool isNative() const {
20685 return !(flags & NON_NATIVE);
20688 bool hasPrivate() const {
20689 return !!(flags & (1<<0));
20693 typedef int moz_static_assert29[(__builtin_offsetof (JSClass, name) == __builtin_offsetof (Class, name)) ? 1 : -1];
20694 typedef int moz_static_assert30[(__builtin_offsetof (JSClass, flags) == __builtin_offsetof (Class, flags)) ? 1 : -1];
20695 typedef int moz_static_assert31[(__builtin_offsetof (JSClass, addProperty) == __builtin_offsetof (Class, addProperty)) ? 1 : -1];
20696 typedef int moz_static_assert32[(__builtin_offsetof (JSClass, delProperty) == __builtin_offsetof (Class, delProperty)) ? 1 : -1];
20697 typedef int moz_static_assert33[(__builtin_offsetof (JSClass, getProperty) == __builtin_offsetof (Class, getProperty)) ? 1 : -1];
20698 typedef int moz_static_assert34[(__builtin_offsetof (JSClass, setProperty) == __builtin_offsetof (Class, setProperty)) ? 1 : -1];
20699 typedef int moz_static_assert35[(__builtin_offsetof (JSClass, enumerate) == __builtin_offsetof (Class, enumerate)) ? 1 : -1];
20700 typedef int moz_static_assert36[(__builtin_offsetof (JSClass, resolve) == __builtin_offsetof (Class, resolve)) ? 1 : -1];
20701 typedef int moz_static_assert37[(__builtin_offsetof (JSClass, convert) == __builtin_offsetof (Class, convert)) ? 1 : -1];
20702 typedef int moz_static_assert38[(__builtin_offsetof (JSClass, finalize) == __builtin_offsetof (Class, finalize)) ? 1 : -1];
20703 typedef int moz_static_assert39[(__builtin_offsetof (JSClass, checkAccess) == __builtin_offsetof (Class, checkAccess)) ? 1 : -1];
20704 typedef int moz_static_assert40[(__builtin_offsetof (JSClass, call) == __builtin_offsetof (Class, call)) ? 1 : -1];
20705 typedef int moz_static_assert41[(__builtin_offsetof (JSClass, construct) == __builtin_offsetof (Class, construct)) ? 1 : -1];
20706 typedef int moz_static_assert42[(__builtin_offsetof (JSClass, hasInstance) == __builtin_offsetof (Class, hasInstance)) ? 1 : -1];
20707 typedef int moz_static_assert43[(__builtin_offsetof (JSClass, trace) == __builtin_offsetof (Class, trace)) ? 1 : -1];
20708 typedef int moz_static_assert44[(sizeof(JSClass) == sizeof(Class)) ? 1 : -1];
20710 static __attribute__((always_inline)) inline JSClass *
20713 return (JSClass *)c;
20715 static __attribute__((always_inline)) inline const JSClass *
20716 Jsvalify(const Class *c)
20718 return (const JSClass *)c;
20721 static __attribute__((always_inline)) inline Class *
20722 Valueify(JSClass *c)
20726 static __attribute__((always_inline)) inline const Class *
20727 Valueify(const JSClass *c)
20729 return (const Class *)c;
20736 enum ESClassValue {
20737 ESClass_Array, ESClass_Number, ESClass_String, ESClass_Boolean,
20738 ESClass_RegExp, ESClass_ArrayBuffer
20748 ObjectClassIs(JSObject &obj, ESClassValue classValue, JSContext *cx);
20752 IsObjectWithClass(const Value &v, ESClassValue classValue, JSContext *cx);
20759 IsPoisonedSpecialId(js::SpecialId iden)
20761 if (iden.isObject())
20762 return IsPoisonedPtr(iden.toObject());
20766 template <> struct RootMethods<js::SpecialId>
20768 static js::SpecialId initial() { return js::SpecialId(); }
20769 static ThingRootKind kind() { return THING_ROOT_ID; }
20770 static bool poisoned(js::SpecialId id) { return IsPoisonedSpecialId(id); }
20774 # 22 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h" 2
20775 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h" 1
20783 #define jsfriendapi_h___
20789 # 1 "./../../dist/include/mozilla/GuardObjects.h" 1
20790 # 10 "./../../dist/include/mozilla/GuardObjects.h"
20791 #define mozilla_GuardObjects_h
20792 # 137 "./../../dist/include/mozilla/GuardObjects.h"
20793 #define MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
20794 #define MOZ_GUARD_OBJECT_NOTIFIER_PARAM
20795 #define MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM
20796 #define MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL
20797 #define MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_TO_PARENT
20798 #define MOZ_GUARD_OBJECT_NOTIFIER_PARAM_TO_PARENT
20799 #define MOZ_GUARD_OBJECT_NOTIFIER_INIT do { } while (0)
20800 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h" 2
20804 extern __attribute__((visibility("default"))) void
20805 JS_SetGrayGCRootsTracer(JSRuntime *rt, JSTraceDataOp traceOp, void *data);
20807 extern __attribute__((visibility("default"))) JSString *
20808 JS_GetAnonymousString(JSRuntime *rt);
20810 extern __attribute__((visibility("default"))) JSObject *
20811 JS_FindCompilationScope(JSContext *cx, JSObject *obj);
20813 extern __attribute__((visibility("default"))) JSFunction *
20814 JS_GetObjectFunction(JSObject *obj);
20816 extern __attribute__((visibility("default"))) JSObject *
20817 JS_GetGlobalForFrame(JSStackFrame *fp);
20819 extern __attribute__((visibility("default"))) JSBool
20820 JS_SplicePrototype(JSContext *cx, JSObject *obj, JSObject *proto);
20822 extern __attribute__((visibility("default"))) JSObject *
20823 JS_NewObjectWithUniqueType(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent);
20825 extern __attribute__((visibility("default"))) uint32_t
20826 JS_ObjectCountDynamicSlots(JSObject *obj);
20828 extern __attribute__((visibility("default"))) void
20829 JS_ShrinkGCBuffers(JSRuntime *rt);
20831 extern __attribute__((visibility("default"))) size_t
20832 JS_GetE4XObjectsCreated(JSContext *cx);
20834 extern __attribute__((visibility("default"))) size_t
20835 JS_SetProtoCalled(JSContext *cx);
20837 extern __attribute__((visibility("default"))) size_t
20838 JS_GetCustomIteratorCount(JSContext *cx);
20840 extern __attribute__((visibility("default"))) JSBool
20841 JS_NondeterministicGetWeakMapKeys(JSContext *cx, JSObject *obj, JSObject **ret);
20849 extern __attribute__((visibility("default"))) JSBool
20850 JS_IsDeadWrapper(JSObject *obj);
20857 extern __attribute__((visibility("default"))) void
20858 JS_TraceShapeCycleCollectorChildren(JSTracer *trc, void *shape);
20861 JS_TELEMETRY_GC_REASON,
20862 JS_TELEMETRY_GC_IS_COMPARTMENTAL,
20863 JS_TELEMETRY_GC_MS,
20864 JS_TELEMETRY_GC_MARK_MS,
20865 JS_TELEMETRY_GC_SWEEP_MS,
20866 JS_TELEMETRY_GC_SLICE_MS,
20867 JS_TELEMETRY_GC_MMU_50,
20868 JS_TELEMETRY_GC_RESET,
20869 JS_TELEMETRY_GC_INCREMENTAL_DISABLED,
20870 JS_TELEMETRY_GC_NON_INCREMENTAL
20874 (* JSAccumulateTelemetryDataCallback)(int id, uint32_t sample);
20876 extern __attribute__((visibility("default"))) void
20877 JS_SetAccumulateTelemetryCallback(JSRuntime *rt, JSAccumulateTelemetryDataCallback callback);
20879 extern __attribute__((visibility("default"))) JSPrincipals *
20880 JS_GetCompartmentPrincipals(JSCompartment *compartment);
20882 extern __attribute__((visibility("default"))) void
20883 JS_SetCompartmentPrincipals(JSCompartment *compartment, JSPrincipals *principals);
20886 extern __attribute__((visibility("default"))) JSObject *
20887 JS_ObjectToInnerObject(JSContext *cx, JSObject *obj);
20890 extern __attribute__((visibility("default"))) JSObject *
20891 JS_ObjectToOuterObject(JSContext *cx, JSObject *obj);
20893 extern __attribute__((visibility("default"))) JSObject *
20894 JS_CloneObject(JSContext *cx, JSObject *obj, JSObject *proto, JSObject *parent);
20896 extern __attribute__((visibility("default"))) JSBool
20897 js_GetterOnlyPropertyStub(JSContext *cx, JSHandleObject obj, JSHandleId id, JSBool strict, jsval *vp);
20899 __attribute__((visibility("default"))) void
20900 js_ReportOverRecursed(JSContext *maybecx);
20901 # 139 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
20902 extern __attribute__((visibility("default"))) bool
20903 JS_CopyPropertiesFrom(JSContext *cx, JSObject *target, JSObject *obj);
20905 extern __attribute__((visibility("default"))) JSBool
20906 JS_WrapPropertyDescriptor(JSContext *cx, js::PropertyDescriptor *desc);
20908 extern __attribute__((visibility("default"))) JSBool
20909 JS_WrapAutoIdVector(JSContext *cx, JS::AutoIdVector &props);
20911 extern __attribute__((visibility("default"))) JSBool
20912 JS_EnumerateState(JSContext *cx, JSHandleObject obj, JSIterateOp enum_op, js::Value *statep, jsid *idp);
20914 struct JSFunctionSpecWithHelp {
20923 #define JS_FN_HELP(name,call,nargs,flags,usage,help) {name, call, nargs, (flags) | JSPROP_ENUMERATE | JSFUN_STUB_GSOPS, usage, help}
20926 extern __attribute__((visibility("default"))) bool
20927 JS_DefineFunctionsWithHelp(JSContext *cx, JSObject *obj, const JSFunctionSpecWithHelp *fs);
20937 struct RuntimeFriendFields {
20942 volatile int32_t interrupt;
20945 uintptr_t nativeStackLimit;
20947 RuntimeFriendFields()
20949 nativeStackLimit(0) { }
20951 static const RuntimeFriendFields *get(const JSRuntime *rt) {
20952 return reinterpret_cast<const RuntimeFriendFields *>(rt);
20957 GetRuntime(const JSContext *cx)
20959 return ContextFriendFields::get(cx)->runtime;
20963 (* PreserveWrapperCallback)(JSContext *cx, JSObject *obj);
20964 # 212 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
20965 class __attribute__((visibility("default"))) AutoSwitchCompartment {
20968 JSCompartment *oldCompartment;
20970 AutoSwitchCompartment(JSContext *cx, JSCompartment *newCompartment
20972 AutoSwitchCompartment(JSContext *cx, JSObject *target );
20973 ~AutoSwitchCompartment();
20978 __attribute__((visibility("default"))) JSBool obj_defineGetter(JSContext *cx, unsigned argc, js::Value *vp);
20979 __attribute__((visibility("default"))) JSBool obj_defineSetter(JSContext *cx, unsigned argc, js::Value *vp);
20982 extern __attribute__((visibility("default"))) bool
20983 IsSystemCompartment(const JSCompartment *compartment);
20985 extern __attribute__((visibility("default"))) bool
20986 IsAtomsCompartment(const JSCompartment *c);
20994 extern __attribute__((visibility("default"))) bool
20995 CheckUndeclaredVarAssignment(JSContext *cx, JSString *propname);
20997 struct WeakMapTracer;
21006 (* WeakMapTraceCallback)(WeakMapTracer *trc, JSObject *m,
21007 void *k, JSGCTraceKind kkind,
21008 void *v, JSGCTraceKind vkind);
21010 struct WeakMapTracer {
21011 JSRuntime *runtime;
21012 WeakMapTraceCallback callback;
21014 WeakMapTracer(JSRuntime *rt, WeakMapTraceCallback cb)
21015 : runtime(rt), callback(cb) {}
21018 extern __attribute__((visibility("default"))) void
21019 TraceWeakMaps(WeakMapTracer *trc);
21021 extern __attribute__((visibility("default"))) bool
21022 GCThingIsMarkedGray(void *thing);
21032 struct TypeObject {
21046 static const uint32_t FIXED_SLOTS_SHIFT = 27;
21055 size_t numFixedSlots() const { return shape->slotInfo >> Shape::FIXED_SLOTS_SHIFT; }
21056 Value *fixedSlots() const {
21057 return (Value *)(uintptr_t(this) + sizeof(shadow::Object));
21060 js::Value &slotRef(size_t slot) const {
21061 size_t nfixed = numFixedSlots();
21063 return fixedSlots()[slot];
21064 return slots[slot - nfixed];
21070 const jschar *chars;
21075 extern __attribute__((visibility("default"))) js::Class AnyNameClass;
21076 extern __attribute__((visibility("default"))) js::Class AttributeNameClass;
21077 extern __attribute__((visibility("default"))) js::Class CallClass;
21078 extern __attribute__((visibility("default"))) js::Class DeclEnvClass;
21079 extern __attribute__((visibility("default"))) js::Class FunctionClass;
21080 extern __attribute__((visibility("default"))) js::Class FunctionProxyClass;
21081 extern __attribute__((visibility("default"))) js::Class NamespaceClass;
21082 extern __attribute__((visibility("default"))) js::Class OuterWindowProxyClass;
21083 extern __attribute__((visibility("default"))) js::Class ObjectProxyClass;
21084 extern __attribute__((visibility("default"))) js::Class QNameClass;
21085 extern __attribute__((visibility("default"))) js::Class XMLClass;
21086 extern __attribute__((visibility("default"))) js::Class ObjectClass;
21089 GetObjectClass(const JSObject *obj)
21091 return reinterpret_cast<const shadow::Object*>(obj)->shape->base->clasp;
21095 GetObjectJSClass(const JSObject *obj)
21097 return js::Jsvalify(GetObjectClass(obj));
21100 __attribute__((visibility("default"))) bool
21101 IsScopeObject(JSObject *obj);
21104 GetObjectParent(JSObject *obj)
21107 return reinterpret_cast<shadow::Object*>(obj)->shape->base->parent;
21110 __attribute__((visibility("default"))) JSObject *
21111 GetObjectParentMaybeScope(JSObject *obj);
21113 __attribute__((visibility("default"))) JSObject *
21114 GetGlobalForObjectCrossCompartment(JSObject *obj);
21116 __attribute__((visibility("default"))) void
21117 NotifyAnimationActivity(JSObject *obj);
21119 __attribute__((visibility("default"))) bool
21120 IsOriginalScriptFunction(JSFunction *fun);
21122 __attribute__((visibility("default"))) JSFunction *
21123 DefineFunctionWithReserved(JSContext *cx, JSObject *obj, const char *name, JSNative call,
21124 unsigned nargs, unsigned attrs);
21126 __attribute__((visibility("default"))) JSFunction *
21127 NewFunctionWithReserved(JSContext *cx, JSNative call, unsigned nargs, unsigned flags,
21128 JSObject *parent, const char *name);
21130 __attribute__((visibility("default"))) JSFunction *
21131 NewFunctionByIdWithReserved(JSContext *cx, JSNative native, unsigned nargs, unsigned flags,
21132 JSObject *parent, jsid id);
21134 __attribute__((visibility("default"))) JSObject *
21135 InitClassWithReserved(JSContext *cx, JSObject *obj, JSObject *parent_proto,
21136 JSClass *clasp, JSNative constructor, unsigned nargs,
21137 JSPropertySpec *ps, JSFunctionSpec *fs,
21138 JSPropertySpec *static_ps, JSFunctionSpec *static_fs);
21140 __attribute__((visibility("default"))) const Value &
21141 GetFunctionNativeReserved(JSObject *fun, size_t which);
21143 __attribute__((visibility("default"))) void
21144 SetFunctionNativeReserved(JSObject *fun, size_t which, const Value &val);
21147 GetObjectProto(JSObject *obj)
21149 return reinterpret_cast<const shadow::Object*>(obj)->type->proto;
21153 GetObjectPrivate(JSObject *obj)
21155 const shadow::Object *nobj = reinterpret_cast<const shadow::Object*>(obj);
21156 void **addr = reinterpret_cast<void**>(&nobj->fixedSlots()[nobj->numFixedSlots()]);
21164 inline const Value &
21165 GetReservedSlot(const JSObject *obj, size_t slot)
21168 return reinterpret_cast<const shadow::Object *>(obj)->slotRef(slot);
21171 __attribute__((visibility("default"))) void
21172 SetReservedSlotWithBarrier(JSObject *obj, size_t slot, const Value &value);
21175 SetReservedSlot(JSObject *obj, size_t slot, const Value &value)
21178 shadow::Object *sobj = reinterpret_cast<shadow::Object *>(obj);
21179 if (sobj->slotRef(slot).isMarkable())
21180 SetReservedSlotWithBarrier(obj, slot, value);
21182 sobj->slotRef(slot) = value;
21185 __attribute__((visibility("default"))) uint32_t
21186 GetObjectSlotSpan(JSObject *obj);
21188 inline const Value &
21189 GetObjectSlot(JSObject *obj, size_t slot)
21192 return reinterpret_cast<const shadow::Object *>(obj)->slotRef(slot);
21196 GetObjectShape(JSObject *obj)
21198 shadow::Shape *shape = reinterpret_cast<const shadow::Object*>(obj)->shape;
21199 return reinterpret_cast<Shape *>(shape);
21202 inline const jschar *
21203 GetAtomChars(JSAtom *atom)
21205 return reinterpret_cast<shadow::Atom *>(atom)->chars;
21208 inline JSLinearString *
21209 AtomToLinearString(JSAtom *atom)
21211 return reinterpret_cast<JSLinearString *>(atom);
21214 static inline js::PropertyOp
21215 CastAsJSPropertyOp(JSObject *object)
21217 return (__extension__ (js::PropertyOp) (size_t) (object));
21220 static inline js::StrictPropertyOp
21221 CastAsJSStrictPropertyOp(JSObject *object)
21223 return (__extension__ (js::StrictPropertyOp) (size_t) (object));
21226 __attribute__((visibility("default"))) bool
21227 GetPropertyNames(JSContext *cx, JSObject *obj, unsigned flags, js::AutoIdVector *props);
21229 __attribute__((visibility("default"))) bool
21230 GetGeneric(JSContext *cx, JSObject *obj, JSObject *receiver, jsid id, Value *vp);
21232 __attribute__((visibility("default"))) bool
21233 StringIsArrayIndex(JSLinearString *str, uint32_t *indexp);
21235 __attribute__((visibility("default"))) void
21236 SetPreserveWrapperCallback(JSRuntime *rt, PreserveWrapperCallback callback);
21238 __attribute__((visibility("default"))) bool
21239 IsObjectInContextCompartment(const JSObject *obj, const JSContext *cx);
21246 #define JSITER_ENUMERATE 0x1
21247 #define JSITER_FOREACH 0x2
21248 #define JSITER_KEYVALUE 0x4
21249 #define JSITER_OWNONLY 0x8
21250 #define JSITER_HIDDEN 0x10
21251 #define JSITER_FOR_OF 0x20
21254 GetNativeStackLimit(const JSRuntime *rt)
21256 return RuntimeFriendFields::get(rt)->nativeStackLimit;
21259 #define JS_CHECK_RECURSION(cx,onerror) JS_BEGIN_MACRO int stackDummy_; if (!JS_CHECK_STACK_SIZE(js::GetNativeStackLimit(js::GetRuntime(cx)), &stackDummy_)) { js_ReportOverRecursed(cx); onerror; } JS_END_MACRO
21260 # 515 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21261 __attribute__((visibility("default"))) void
21262 StartPCCountProfiling(JSContext *cx);
21264 __attribute__((visibility("default"))) void
21265 StopPCCountProfiling(JSContext *cx);
21267 __attribute__((visibility("default"))) void
21268 PurgePCCounts(JSContext *cx);
21270 __attribute__((visibility("default"))) size_t
21271 GetPCCountScriptCount(JSContext *cx);
21273 __attribute__((visibility("default"))) JSString *
21274 GetPCCountScriptSummary(JSContext *cx, size_t script);
21276 __attribute__((visibility("default"))) JSString *
21277 GetPCCountScriptContents(JSContext *cx, size_t script);
21280 __attribute__((visibility("default"))) void *
21281 GetOwnerThread(const JSContext *cx);
21283 __attribute__((visibility("default"))) unsigned
21284 GetContextOutstandingRequests(const JSContext *cx);
21287 __attribute__((visibility("default"))) JSCompartment *
21288 GetContextCompartment(const JSContext *cx);
21290 __attribute__((visibility("default"))) bool
21291 HasUnrootedGlobal(const JSContext *cx);
21294 (* ActivityCallback)(void *arg, JSBool active);
21301 __attribute__((visibility("default"))) void
21302 SetActivityCallback(JSRuntime *rt, ActivityCallback cb, void *arg);
21304 extern __attribute__((visibility("default"))) const JSStructuredCloneCallbacks *
21305 GetContextStructuredCloneCallbacks(JSContext *cx);
21307 extern __attribute__((visibility("default"))) JSVersion
21308 VersionSetMoarXML(JSVersion version, bool enable);
21310 extern __attribute__((visibility("default"))) bool
21311 CanCallContextDebugHandler(JSContext *cx);
21313 extern __attribute__((visibility("default"))) JSTrapStatus
21314 CallContextDebugHandler(JSContext *cx, JSScript *script, jsbytecode *bc, Value *rval);
21316 extern __attribute__((visibility("default"))) bool
21317 IsContextRunningJS(JSContext *cx);
21319 class SystemAllocPolicy;
21320 typedef Vector<JSCompartment*, 0, SystemAllocPolicy> CompartmentVector;
21321 extern __attribute__((visibility("default"))) const CompartmentVector&
21322 GetRuntimeCompartments(JSRuntime *rt);
21324 extern __attribute__((visibility("default"))) size_t
21327 #define GCREASONS(D) D(API) D(MAYBEGC) D(LAST_CONTEXT) D(DESTROY_CONTEXT) D(LAST_DITCH) D(TOO_MUCH_MALLOC) D(ALLOC_TRIGGER) D(DEBUG_GC) D(DEBUG_MODE_GC) D(UNUSED3) D(DOM_WINDOW_UTILS) D(COMPONENT_UTILS) D(MEM_PRESSURE) D(CC_WAITING) D(CC_FORCED) D(LOAD_END) D(POST_COMPARTMENT) D(PAGE_HIDE) D(NSJSCONTEXT_DESTROY) D(SET_NEW_DOCUMENT) D(SET_DOC_SHELL) D(DOM_UTILS) D(DOM_IPC) D(DOM_WORKER) D(INTER_SLICE_GC) D(REFRESH_FRAME) D(FULL_GC_TIMER)
21328 # 613 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21329 namespace gcreason {
21333 #define MAKE_REASON(name) name,
21334 API, MAYBEGC, LAST_CONTEXT, DESTROY_CONTEXT, LAST_DITCH, TOO_MUCH_MALLOC, ALLOC_TRIGGER, DEBUG_GC, DEBUG_MODE_GC, UNUSED3, DOM_WINDOW_UTILS, COMPONENT_UTILS, MEM_PRESSURE, CC_WAITING, CC_FORCED, LOAD_END, POST_COMPARTMENT, PAGE_HIDE, NSJSCONTEXT_DESTROY, SET_NEW_DOCUMENT, SET_DOC_SHELL, DOM_UTILS, DOM_IPC, DOM_WORKER, INTER_SLICE_GC, REFRESH_FRAME, FULL_GC_TIMER,
21342 extern __attribute__((visibility("default"))) void
21343 PrepareCompartmentForGC(JSCompartment *comp);
21345 extern __attribute__((visibility("default"))) void
21346 PrepareForFullGC(JSRuntime *rt);
21348 extern __attribute__((visibility("default"))) bool
21349 IsGCScheduled(JSRuntime *rt);
21351 extern __attribute__((visibility("default"))) void
21352 SkipCompartmentForGC(JSCompartment *comp);
21353 # 645 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21354 extern __attribute__((visibility("default"))) void
21355 GCForReason(JSRuntime *rt, gcreason::Reason reason);
21357 extern __attribute__((visibility("default"))) void
21358 ShrinkingGC(JSRuntime *rt, gcreason::Reason reason);
21360 extern __attribute__((visibility("default"))) void
21361 IncrementalGC(JSRuntime *rt, gcreason::Reason reason);
21363 extern __attribute__((visibility("default"))) void
21364 SetGCSliceTimeBudget(JSContext *cx, int64_t millis);
21367 # 668 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21374 struct __attribute__((visibility("default"))) GCDescription {
21375 bool isCompartment;
21377 GCDescription(bool isCompartment)
21378 : isCompartment(isCompartment) {}
21380 jschar *formatMessage(JSRuntime *rt) const;
21381 jschar *formatJSON(JSRuntime *rt, uint64_t timestamp) const;
21385 (* GCSliceCallback)(JSRuntime *rt, GCProgress progress, const GCDescription &desc);
21387 extern __attribute__((visibility("default"))) GCSliceCallback
21388 SetGCSliceCallback(JSRuntime *rt, GCSliceCallback callback);
21394 extern __attribute__((visibility("default"))) void
21395 NotifyDidPaint(JSRuntime *rt);
21397 extern __attribute__((visibility("default"))) bool
21398 IsIncrementalGCEnabled(JSRuntime *rt);
21400 extern __attribute__((visibility("default"))) void
21401 DisableIncrementalGC(JSRuntime *rt);
21403 extern __attribute__((visibility("default"))) bool
21404 IsIncrementalBarrierNeeded(JSRuntime *rt);
21406 extern __attribute__((visibility("default"))) bool
21407 IsIncrementalBarrierNeeded(JSContext *cx);
21409 extern __attribute__((visibility("default"))) bool
21410 IsIncrementalBarrierNeededOnObject(JSObject *obj);
21412 extern __attribute__((visibility("default"))) bool
21413 IsIncrementalBarrierNeededOnScript(JSScript *obj);
21415 extern __attribute__((visibility("default"))) void
21416 IncrementalReferenceBarrier(void *ptr);
21418 extern __attribute__((visibility("default"))) void
21419 IncrementalValueBarrier(const Value &v);
21421 extern __attribute__((visibility("default"))) void
21422 PokeGC(JSRuntime *rt);
21429 ObjectPtr() : value(__null) {}
21431 ObjectPtr(JSObject *obj) : value(obj) {}
21434 ~ObjectPtr() { do { } while(0); }
21436 void finalize(JSRuntime *rt) {
21437 if (IsIncrementalBarrierNeeded(rt))
21438 IncrementalReferenceBarrier(value);
21442 void init(JSObject *obj) { value = obj; }
21444 JSObject *get() const { return value; }
21446 void writeBarrierPre(JSRuntime *rt) {
21447 IncrementalReferenceBarrier(value);
21450 ObjectPtr &operator=(JSObject *obj) {
21451 IncrementalReferenceBarrier(value);
21456 JSObject &operator*() const { return *value; }
21457 JSObject *operator->() const { return value; }
21458 operator JSObject *() const { return value; }
21461 extern __attribute__((visibility("default"))) JSObject *
21462 GetTestingFunctions(JSContext *cx);
21470 CastToJSFreeOp(FreeOp *fop)
21472 return reinterpret_cast<JSFreeOp *>(fop);
21481 extern __attribute__((visibility("default"))) const jschar*
21482 GetErrorTypeNameFromNumber(JSContext* cx, const unsigned errorNumber);
21485 typedef enum NukedGlobalHandling {
21486 NukeForGlobalObject,
21487 DontNukeForGlobalObject
21488 } NukedGlobalHandling;
21490 extern __attribute__((visibility("default"))) JSBool
21491 NukeChromeCrossCompartmentWrappersForGlobal(JSContext *cx, JSObject *obj,
21492 NukedGlobalHandling nukeGlobal);
21495 # 804 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21496 extern __attribute__((visibility("default"))) JSBool
21497 js_DateIsValid(JSContext *cx, JSObject* obj);
21499 extern __attribute__((visibility("default"))) double
21500 js_DateGetMsecSinceEpoch(JSContext *cx, JSObject *obj);
21508 typedef enum JSErrNum {
21509 #define MSG_DEF(name,number,count,exception,format) name = number,
21511 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/js.msg" 1
21512 # 53 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/js.msg"
21513 JSMSG_NOT_AN_ERROR = 0,
21514 JSMSG_NOT_DEFINED = 1,
21515 JSMSG_INACTIVE = 2,
21516 JSMSG_MORE_ARGS_NEEDED = 3,
21517 JSMSG_BAD_CHAR = 4,
21518 JSMSG_BAD_TYPE = 5,
21519 JSMSG_ALLOC_OVERFLOW = 6,
21520 JSMSG_MISSING_HEXDIGITS = 7,
21521 JSMSG_INCOMPATIBLE_PROTO = 8,
21522 JSMSG_NO_CONSTRUCTOR = 9,
21523 JSMSG_CANT_ALIAS = 10,
21524 JSMSG_NOT_SCRIPTED_FUNCTION = 11,
21525 JSMSG_BAD_SORT_ARG = 12,
21526 JSMSG_BAD_ATOMIC_NUMBER = 13,
21527 JSMSG_TOO_MANY_LITERALS = 14,
21528 JSMSG_CANT_WATCH = 15,
21529 JSMSG_STACK_UNDERFLOW = 16,
21530 JSMSG_NEED_DIET = 17,
21531 JSMSG_TOO_MANY_LOCAL_ROOTS = 18,
21532 JSMSG_READ_ONLY = 19,
21533 JSMSG_BAD_FORMAL = 20,
21534 JSMSG_CANT_DELETE = 21,
21535 JSMSG_NOT_FUNCTION = 22,
21536 JSMSG_NOT_CONSTRUCTOR = 23,
21537 JSMSG_INVALID_DATE = 24,
21538 JSMSG_TOO_DEEP = 25,
21539 JSMSG_OVER_RECURSED = 26,
21540 JSMSG_IN_NOT_OBJECT = 27,
21541 JSMSG_BAD_NEW_RESULT = 28,
21542 JSMSG_BAD_SHARP_DEF = 29,
21543 JSMSG_BAD_SHARP_USE = 30,
21544 JSMSG_BAD_INSTANCEOF_RHS = 31,
21545 JSMSG_BAD_BYTECODE = 32,
21546 JSMSG_BAD_RADIX = 33,
21547 JSMSG_PAREN_BEFORE_LET = 34,
21548 JSMSG_CANT_CONVERT = 35,
21549 JSMSG_CYCLIC_VALUE = 36,
21550 JSMSG_COMPILE_EXECED_SCRIPT = 37,
21551 JSMSG_CANT_CONVERT_TO = 38,
21552 JSMSG_NO_PROPERTIES = 39,
21553 JSMSG_CANT_FIND_CLASS = 40,
21554 JSMSG_DEAD_OBJECT = 41,
21555 JSMSG_BYTECODE_TOO_BIG = 42,
21556 JSMSG_UNKNOWN_FORMAT = 43,
21557 JSMSG_TOO_MANY_CON_ARGS = 44,
21558 JSMSG_TOO_MANY_FUN_ARGS = 45,
21559 JSMSG_BAD_QUANTIFIER = 46,
21560 JSMSG_MIN_TOO_BIG = 47,
21561 JSMSG_MAX_TOO_BIG = 48,
21562 JSMSG_OUT_OF_ORDER = 49,
21563 JSMSG_BAD_DESTRUCT_DECL = 50,
21564 JSMSG_BAD_DESTRUCT_ASS = 51,
21565 JSMSG_PAREN_AFTER_LET = 52,
21566 JSMSG_CURLY_AFTER_LET = 53,
21567 JSMSG_MISSING_PAREN = 54,
21568 JSMSG_UNTERM_CLASS = 55,
21569 JSMSG_TRAILING_SLASH = 56,
21570 JSMSG_BAD_CLASS_RANGE = 57,
21571 JSMSG_BAD_REGEXP_FLAG = 58,
21572 JSMSG_NO_INPUT = 59,
21573 JSMSG_CANT_OPEN = 60,
21574 JSMSG_TOO_MANY_FUN_APPLY_ARGS = 61,
21575 JSMSG_UNMATCHED_RIGHT_PAREN = 62,
21576 JSMSG_TOO_BIG_TO_ENCODE = 63,
21577 JSMSG_ARG_INDEX_OUT_OF_RANGE = 64,
21578 JSMSG_UNUSED65 = 65,
21579 JSMSG_UNUSED66 = 66,
21580 JSMSG_UNUSED67 = 67,
21581 JSMSG_BAD_SCRIPT_MAGIC = 68,
21582 JSMSG_PAREN_BEFORE_FORMAL = 69,
21583 JSMSG_MISSING_FORMAL = 70,
21584 JSMSG_PAREN_AFTER_FORMAL = 71,
21585 JSMSG_CURLY_BEFORE_BODY = 72,
21586 JSMSG_CURLY_AFTER_BODY = 73,
21587 JSMSG_PAREN_BEFORE_COND = 74,
21588 JSMSG_PAREN_AFTER_COND = 75,
21589 JSMSG_DESTRUCT_DUP_ARG = 76,
21590 JSMSG_NAME_AFTER_DOT = 77,
21591 JSMSG_BRACKET_IN_INDEX = 78,
21592 JSMSG_XML_WHOLE_PROGRAM = 79,
21593 JSMSG_PAREN_BEFORE_SWITCH = 80,
21594 JSMSG_PAREN_AFTER_SWITCH = 81,
21595 JSMSG_CURLY_BEFORE_SWITCH = 82,
21596 JSMSG_COLON_AFTER_CASE = 83,
21597 JSMSG_WHILE_AFTER_DO = 84,
21598 JSMSG_PAREN_AFTER_FOR = 85,
21599 JSMSG_SEMI_AFTER_FOR_INIT = 86,
21600 JSMSG_SEMI_AFTER_FOR_COND = 87,
21601 JSMSG_PAREN_AFTER_FOR_CTRL = 88,
21602 JSMSG_CURLY_BEFORE_TRY = 89,
21603 JSMSG_CURLY_AFTER_TRY = 90,
21604 JSMSG_PAREN_BEFORE_CATCH = 91,
21605 JSMSG_CATCH_IDENTIFIER = 92,
21606 JSMSG_PAREN_AFTER_CATCH = 93,
21607 JSMSG_CURLY_BEFORE_CATCH = 94,
21608 JSMSG_CURLY_AFTER_CATCH = 95,
21609 JSMSG_CURLY_BEFORE_FINALLY = 96,
21610 JSMSG_CURLY_AFTER_FINALLY = 97,
21611 JSMSG_CATCH_OR_FINALLY = 98,
21612 JSMSG_PAREN_BEFORE_WITH = 99,
21613 JSMSG_PAREN_AFTER_WITH = 100,
21614 JSMSG_CURLY_IN_COMPOUND = 101,
21615 JSMSG_NO_VARIABLE_NAME = 102,
21616 JSMSG_COLON_IN_COND = 103,
21617 JSMSG_PAREN_AFTER_ARGS = 104,
21618 JSMSG_BRACKET_AFTER_LIST = 105,
21619 JSMSG_COLON_AFTER_ID = 106,
21620 JSMSG_CURLY_AFTER_LIST = 107,
21621 JSMSG_PAREN_IN_PAREN = 108,
21622 JSMSG_SEMI_BEFORE_STMNT = 109,
21623 JSMSG_NO_RETURN_VALUE = 110,
21624 JSMSG_DUPLICATE_FORMAL = 111,
21625 JSMSG_EQUAL_AS_ASSIGN = 112,
21626 JSMSG_OPTIMIZED_CLOSURE_LEAK = 113,
21627 JSMSG_TOO_MANY_DEFAULTS = 114,
21628 JSMSG_TOO_MANY_CASES = 115,
21629 JSMSG_BAD_SWITCH = 116,
21630 JSMSG_BAD_FOR_LEFTSIDE = 117,
21631 JSMSG_CATCH_AFTER_GENERAL = 118,
21632 JSMSG_CATCH_WITHOUT_TRY = 119,
21633 JSMSG_FINALLY_WITHOUT_TRY = 120,
21634 JSMSG_LABEL_NOT_FOUND = 121,
21635 JSMSG_TOUGH_BREAK = 122,
21636 JSMSG_BAD_CONTINUE = 123,
21637 JSMSG_BAD_RETURN_OR_YIELD = 124,
21638 JSMSG_BAD_LABEL = 125,
21639 JSMSG_DUPLICATE_LABEL = 126,
21640 JSMSG_VAR_HIDES_ARG = 127,
21641 JSMSG_BAD_VAR_INIT = 128,
21642 JSMSG_BAD_LEFTSIDE_OF_ASS = 129,
21643 JSMSG_BAD_OPERAND = 130,
21644 JSMSG_BAD_PROP_ID = 131,
21645 JSMSG_RESERVED_ID = 132,
21646 JSMSG_SYNTAX_ERROR = 133,
21647 JSMSG_BAD_SHARP_VAR_DEF = 134,
21648 JSMSG_BAD_PROTOTYPE = 135,
21649 JSMSG_MISSING_EXPONENT = 136,
21650 JSMSG_OUT_OF_MEMORY = 137,
21651 JSMSG_UNTERMINATED_STRING = 138,
21652 JSMSG_TOO_MANY_PARENS = 139,
21653 JSMSG_UNTERMINATED_COMMENT = 140,
21654 JSMSG_UNTERMINATED_REGEXP = 141,
21655 JSMSG_BAD_CLONE_FUNOBJ_SCOPE = 142,
21656 JSMSG_SHARPVAR_TOO_BIG = 143,
21657 JSMSG_ILLEGAL_CHARACTER = 144,
21658 JSMSG_BAD_OCTAL = 145,
21659 JSMSG_BAD_INDIRECT_CALL = 146,
21660 JSMSG_UNCAUGHT_EXCEPTION = 147,
21661 JSMSG_INVALID_BACKREF = 148,
21662 JSMSG_BAD_BACKREF = 149,
21663 JSMSG_PRECISION_RANGE = 150,
21664 JSMSG_BAD_GETTER_OR_SETTER = 151,
21665 JSMSG_BAD_ARRAY_LENGTH = 152,
21666 JSMSG_CANT_DESCRIBE_PROPS = 153,
21667 JSMSG_BAD_APPLY_ARGS = 154,
21668 JSMSG_REDECLARED_VAR = 155,
21669 JSMSG_UNDECLARED_VAR = 156,
21670 JSMSG_ANON_NO_RETURN_VALUE = 157,
21671 JSMSG_DEPRECATED_USAGE = 158,
21672 JSMSG_BAD_URI = 159,
21673 JSMSG_GETTER_ONLY = 160,
21674 JSMSG_IDSTART_AFTER_NUMBER = 161,
21675 JSMSG_UNDEFINED_PROP = 162,
21676 JSMSG_USELESS_EXPR = 163,
21677 JSMSG_REDECLARED_PARAM = 164,
21678 JSMSG_NEWREGEXP_FLAGGED = 165,
21679 JSMSG_RESERVED_SLOT_RANGE = 166,
21680 JSMSG_CANT_DECODE_PRINCIPALS = 167,
21681 JSMSG_CANT_SEAL_OBJECT = 168,
21682 JSMSG_TOO_MANY_CATCH_VARS = 169,
21683 JSMSG_BAD_XML_MARKUP = 170,
21684 JSMSG_BAD_XML_CHARACTER = 171,
21685 JSMSG_BAD_DEFAULT_XML_NAMESPACE = 172,
21686 JSMSG_BAD_XML_NAME_SYNTAX = 173,
21687 JSMSG_BRACKET_AFTER_ATTR_EXPR = 174,
21688 JSMSG_NESTING_GENERATOR = 175,
21689 JSMSG_CURLY_IN_XML_EXPR = 176,
21690 JSMSG_BAD_XML_NAMESPACE = 177,
21691 JSMSG_BAD_XML_ATTR_NAME = 178,
21692 JSMSG_BAD_XML_NAME = 179,
21693 JSMSG_BAD_XML_CONVERSION = 180,
21694 JSMSG_BAD_XMLLIST_CONVERSION = 181,
21695 JSMSG_BAD_GENERATOR_SEND = 182,
21696 JSMSG_NO_ASSIGN_IN_XML_ATTR = 183,
21697 JSMSG_BAD_XML_ATTR_VALUE = 184,
21698 JSMSG_XML_TAG_NAME_MISMATCH = 185,
21699 JSMSG_BAD_XML_TAG_SYNTAX = 186,
21700 JSMSG_BAD_XML_LIST_SYNTAX = 187,
21701 JSMSG_INCOMPATIBLE_METHOD = 188,
21702 JSMSG_CANT_SET_XML_ATTRS = 189,
21703 JSMSG_END_OF_XML_SOURCE = 190,
21704 JSMSG_END_OF_XML_ENTITY = 191,
21705 JSMSG_BAD_XML_QNAME = 192,
21706 JSMSG_BAD_FOR_EACH_LOOP = 193,
21707 JSMSG_BAD_XMLLIST_PUT = 194,
21708 JSMSG_UNKNOWN_XML_ENTITY = 195,
21709 JSMSG_BAD_XML_NCR = 196,
21710 JSMSG_UNDEFINED_XML_NAME = 197,
21711 JSMSG_DUPLICATE_XML_ATTR = 198,
21712 JSMSG_TOO_MANY_LOCALS = 199,
21713 JSMSG_ARRAY_INIT_TOO_BIG = 200,
21714 JSMSG_REGEXP_TOO_COMPLEX = 201,
21715 JSMSG_BUFFER_TOO_SMALL = 202,
21716 JSMSG_BAD_SURROGATE_CHAR = 203,
21717 JSMSG_UTF8_CHAR_TOO_LARGE = 204,
21718 JSMSG_MALFORMED_UTF8_CHAR = 205,
21719 JSMSG_USER_DEFINED_ERROR = 206,
21720 JSMSG_WRONG_CONSTRUCTOR = 207,
21721 JSMSG_BAD_GENERATOR_RETURN = 208,
21722 JSMSG_BAD_ANON_GENERATOR_RETURN = 209,
21723 JSMSG_NAME_AFTER_FOR_PAREN = 210,
21724 JSMSG_IN_AFTER_FOR_NAME = 211,
21725 JSMSG_BAD_TRAP_RETURN_VALUE = 212,
21726 JSMSG_KEYWORD_NOT_NS = 213,
21727 JSMSG_BAD_GENERATOR_YIELD = 214,
21728 JSMSG_BAD_GENERATOR_SYNTAX = 215,
21729 JSMSG_ARRAY_COMP_LEFTSIDE = 216,
21730 JSMSG_NON_XML_FILTER = 217,
21731 JSMSG_EMPTY_ARRAY_REDUCE = 218,
21732 JSMSG_NON_LIST_XML_METHOD = 219,
21733 JSMSG_BAD_DELETE_OPERAND = 220,
21734 JSMSG_BAD_INCOP_OPERAND = 221,
21735 JSMSG_UNEXPECTED_TYPE = 222,
21736 JSMSG_LET_DECL_NOT_IN_BLOCK = 223,
21737 JSMSG_BAD_OBJECT_INIT = 224,
21738 JSMSG_CANT_SET_ARRAY_ATTRS = 225,
21739 JSMSG_EVAL_ARITY = 226,
21740 JSMSG_MISSING_FUN_ARG = 227,
21741 JSMSG_JSON_BAD_PARSE = 228,
21742 JSMSG_JSON_BAD_STRINGIFY = 229,
21743 JSMSG_NOT_CALLABLE_OR_UNDEFINED = 230,
21744 JSMSG_NOT_NONNULL_OBJECT = 231,
21745 JSMSG_DEPRECATED_OCTAL = 232,
21746 JSMSG_STRICT_CODE_WITH = 233,
21747 JSMSG_DUPLICATE_PROPERTY = 234,
21748 JSMSG_DEPRECATED_DELETE_OPERAND = 235,
21749 JSMSG_DEPRECATED_ASSIGN = 236,
21750 JSMSG_BAD_BINDING = 237,
21751 JSMSG_INVALID_DESCRIPTOR = 238,
21752 JSMSG_OBJECT_NOT_EXTENSIBLE = 239,
21753 JSMSG_CANT_REDEFINE_PROP = 240,
21754 JSMSG_CANT_APPEND_TO_ARRAY = 241,
21755 JSMSG_CANT_DEFINE_ARRAY_LENGTH = 242,
21756 JSMSG_CANT_DEFINE_ARRAY_INDEX = 243,
21757 JSMSG_TYPED_ARRAY_BAD_INDEX = 244,
21758 JSMSG_TYPED_ARRAY_NEGATIVE_ARG = 245,
21759 JSMSG_TYPED_ARRAY_BAD_ARGS = 246,
21760 JSMSG_CSP_BLOCKED_FUNCTION = 247,
21761 JSMSG_BAD_GET_SET_FIELD = 248,
21762 JSMSG_BAD_PROXY_FIX = 249,
21763 JSMSG_INVALID_EVAL_SCOPE_ARG = 250,
21764 JSMSG_ACCESSOR_WRONG_ARGS = 251,
21765 JSMSG_THROW_TYPE_ERROR = 252,
21766 JSMSG_BAD_TOISOSTRING_PROP = 253,
21767 JSMSG_BAD_PARSE_NODE = 254,
21768 JSMSG_NOT_EXPECTED_TYPE = 255,
21769 JSMSG_CALLER_IS_STRICT = 256,
21770 JSMSG_NEED_DEBUG_MODE = 257,
21771 JSMSG_STRICT_CODE_LET_EXPR_STMT = 258,
21772 JSMSG_CANT_CHANGE_EXTENSIBILITY = 259,
21773 JSMSG_SC_BAD_SERIALIZED_DATA = 260,
21774 JSMSG_SC_UNSUPPORTED_TYPE = 261,
21775 JSMSG_SC_RECURSION = 262,
21776 JSMSG_CANT_WRAP_XML_OBJECT = 263,
21777 JSMSG_BAD_CLONE_VERSION = 264,
21778 JSMSG_CANT_CLONE_OBJECT = 265,
21779 JSMSG_NON_NATIVE_SCOPE = 266,
21780 JSMSG_STRICT_FUNCTION_STATEMENT = 267,
21781 JSMSG_INVALID_FOR_IN_INIT = 268,
21782 JSMSG_CLEARED_SCOPE = 269,
21783 JSMSG_MALFORMED_ESCAPE = 270,
21784 JSMSG_BAD_GENEXP_BODY = 271,
21785 JSMSG_XML_PROTO_FORBIDDEN = 272,
21786 JSMSG_UNNAMED_FUNCTION_STMT = 273,
21787 JSMSG_CCW_REQUIRED = 274,
21788 JSMSG_DEBUG_BAD_RESUMPTION = 275,
21789 JSMSG_ASSIGN_FUNCTION_OR_NULL = 276,
21790 JSMSG_DEBUG_NOT_LIVE = 277,
21791 JSMSG_DEBUG_OBJECT_WRONG_OWNER = 278,
21792 JSMSG_DEBUG_OBJECT_PROTO = 279,
21793 JSMSG_DEBUG_LOOP = 280,
21794 JSMSG_DEBUG_NOT_IDLE = 281,
21795 JSMSG_DEBUG_BAD_OFFSET = 282,
21796 JSMSG_DEBUG_BAD_LINE = 283,
21797 JSMSG_DEBUG_NOT_DEBUGGING = 284,
21798 JSMSG_DEBUG_COMPARTMENT_MISMATCH = 285,
21799 JSMSG_DEBUG_NOT_SCRIPT_FRAME = 286,
21800 JSMSG_CANT_WATCH_PROP = 287,
21801 JSMSG_CSP_BLOCKED_EVAL = 288,
21802 JSMSG_DEBUG_NO_SCOPE_OBJECT = 289,
21803 JSMSG_EMPTY_CONSEQUENT = 290,
21804 JSMSG_NOT_ITERABLE = 291,
21805 JSMSG_QUERY_LINE_WITHOUT_URL = 292,
21806 JSMSG_QUERY_INNERMOST_WITHOUT_LINE_URL = 293,
21807 JSMSG_DEBUG_VARIABLE_NOT_FOUND = 294,
21808 JSMSG_PARAMETER_AFTER_REST = 295,
21809 JSMSG_NO_REST_NAME = 296,
21810 JSMSG_ARGUMENTS_AND_REST = 297,
21811 JSMSG_FUNCTION_ARGUMENTS_AND_REST = 298,
21812 JSMSG_REST_WITH_DEFAULT = 299,
21813 JSMSG_NONDEFAULT_FORMAL_AFTER_DEFAULT = 300,
21814 JSMSG_YIELD_IN_DEFAULT = 301,
21815 # 820 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h" 2
21820 extern __attribute__((visibility("default"))) const JSErrorFormatString *
21821 js_GetErrorMessage(void *userRef, const char *locale, const unsigned errorNumber);
21825 extern __attribute__((visibility("default"))) uint64_t
21826 js_GetSCOffset(JSStructuredCloneWriter* writer);
21833 namespace ArrayBufferView {
21849 TYPE_UINT8_CLAMPED,
21857 typedef js::ArrayBufferView::ViewType JSArrayBufferViewType;
21858 # 870 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21859 extern __attribute__((visibility("default"))) JSObject *
21860 JS_NewInt8Array(JSContext *cx, uint32_t nelements);
21861 extern __attribute__((visibility("default"))) JSObject *
21862 JS_NewUint8Array(JSContext *cx, uint32_t nelements);
21863 extern __attribute__((visibility("default"))) JSObject *
21864 JS_NewUint8ClampedArray(JSContext *cx, uint32_t nelements);
21866 extern __attribute__((visibility("default"))) JSObject *
21867 JS_NewInt16Array(JSContext *cx, uint32_t nelements);
21868 extern __attribute__((visibility("default"))) JSObject *
21869 JS_NewUint16Array(JSContext *cx, uint32_t nelements);
21870 extern __attribute__((visibility("default"))) JSObject *
21871 JS_NewInt32Array(JSContext *cx, uint32_t nelements);
21872 extern __attribute__((visibility("default"))) JSObject *
21873 JS_NewUint32Array(JSContext *cx, uint32_t nelements);
21874 extern __attribute__((visibility("default"))) JSObject *
21875 JS_NewFloat32Array(JSContext *cx, uint32_t nelements);
21876 extern __attribute__((visibility("default"))) JSObject *
21877 JS_NewFloat64Array(JSContext *cx, uint32_t nelements);
21878 # 898 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21879 extern __attribute__((visibility("default"))) JSObject *
21880 JS_NewInt8ArrayFromArray(JSContext *cx, JSObject *array);
21881 extern __attribute__((visibility("default"))) JSObject *
21882 JS_NewUint8ArrayFromArray(JSContext *cx, JSObject *array);
21883 extern __attribute__((visibility("default"))) JSObject *
21884 JS_NewUint8ClampedArrayFromArray(JSContext *cx, JSObject *array);
21885 extern __attribute__((visibility("default"))) JSObject *
21886 JS_NewInt16ArrayFromArray(JSContext *cx, JSObject *array);
21887 extern __attribute__((visibility("default"))) JSObject *
21888 JS_NewUint16ArrayFromArray(JSContext *cx, JSObject *array);
21889 extern __attribute__((visibility("default"))) JSObject *
21890 JS_NewInt32ArrayFromArray(JSContext *cx, JSObject *array);
21891 extern __attribute__((visibility("default"))) JSObject *
21892 JS_NewUint32ArrayFromArray(JSContext *cx, JSObject *array);
21893 extern __attribute__((visibility("default"))) JSObject *
21894 JS_NewFloat32ArrayFromArray(JSContext *cx, JSObject *array);
21895 extern __attribute__((visibility("default"))) JSObject *
21896 JS_NewFloat64ArrayFromArray(JSContext *cx, JSObject *array);
21897 # 924 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21898 extern __attribute__((visibility("default"))) JSObject *
21899 JS_NewInt8ArrayWithBuffer(JSContext *cx, JSObject *arrayBuffer,
21900 uint32_t byteOffset, int32_t length);
21901 extern __attribute__((visibility("default"))) JSObject *
21902 JS_NewUint8ArrayWithBuffer(JSContext *cx, JSObject *arrayBuffer,
21903 uint32_t byteOffset, int32_t length);
21904 extern __attribute__((visibility("default"))) JSObject *
21905 JS_NewUint8ClampedArrayWithBuffer(JSContext *cx, JSObject *arrayBuffer,
21906 uint32_t byteOffset, int32_t length);
21907 extern __attribute__((visibility("default"))) JSObject *
21908 JS_NewInt16ArrayWithBuffer(JSContext *cx, JSObject *arrayBuffer,
21909 uint32_t byteOffset, int32_t length);
21910 extern __attribute__((visibility("default"))) JSObject *
21911 JS_NewUint16ArrayWithBuffer(JSContext *cx, JSObject *arrayBuffer,
21912 uint32_t byteOffset, int32_t length);
21913 extern __attribute__((visibility("default"))) JSObject *
21914 JS_NewInt32ArrayWithBuffer(JSContext *cx, JSObject *arrayBuffer,
21915 uint32_t byteOffset, int32_t length);
21916 extern __attribute__((visibility("default"))) JSObject *
21917 JS_NewUint32ArrayWithBuffer(JSContext *cx, JSObject *arrayBuffer,
21918 uint32_t byteOffset, int32_t length);
21919 extern __attribute__((visibility("default"))) JSObject *
21920 JS_NewFloat32ArrayWithBuffer(JSContext *cx, JSObject *arrayBuffer,
21921 uint32_t byteOffset, int32_t length);
21922 extern __attribute__((visibility("default"))) JSObject *
21923 JS_NewFloat64ArrayWithBuffer(JSContext *cx, JSObject *arrayBuffer,
21924 uint32_t byteOffset, int32_t length);
21929 extern __attribute__((visibility("default"))) JSObject *
21930 JS_NewArrayBuffer(JSContext *cx, uint32_t nbytes);
21938 extern __attribute__((visibility("default"))) JSBool
21939 JS_IsTypedArrayObject(JSObject *obj, JSContext *cx);
21940 # 974 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21941 extern __attribute__((visibility("default"))) JSBool
21942 JS_IsArrayBufferViewObject(JSObject *obj, JSContext *cx);
21948 extern __attribute__((visibility("default"))) JSBool
21949 JS_IsInt8Array(JSObject *obj, JSContext *cx);
21950 extern __attribute__((visibility("default"))) JSBool
21951 JS_IsUint8Array(JSObject *obj, JSContext *cx);
21952 extern __attribute__((visibility("default"))) JSBool
21953 JS_IsUint8ClampedArray(JSObject *obj, JSContext *cx);
21954 extern __attribute__((visibility("default"))) JSBool
21955 JS_IsInt16Array(JSObject *obj, JSContext *cx);
21956 extern __attribute__((visibility("default"))) JSBool
21957 JS_IsUint16Array(JSObject *obj, JSContext *cx);
21958 extern __attribute__((visibility("default"))) JSBool
21959 JS_IsInt32Array(JSObject *obj, JSContext *cx);
21960 extern __attribute__((visibility("default"))) JSBool
21961 JS_IsUint32Array(JSObject *obj, JSContext *cx);
21962 extern __attribute__((visibility("default"))) JSBool
21963 JS_IsFloat32Array(JSObject *obj, JSContext *cx);
21964 extern __attribute__((visibility("default"))) JSBool
21965 JS_IsFloat64Array(JSObject *obj, JSContext *cx);
21966 # 1008 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21967 extern __attribute__((visibility("default"))) JSArrayBufferViewType
21968 JS_GetTypedArrayType(JSObject *obj, JSContext *cx);
21976 extern __attribute__((visibility("default"))) JSBool
21977 JS_IsArrayBufferObject(JSObject *obj, JSContext *cx);
21978 # 1028 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21979 extern __attribute__((visibility("default"))) uint32_t
21980 JS_GetArrayBufferByteLength(JSObject *obj, JSContext *cx);
21981 # 1040 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21982 extern __attribute__((visibility("default"))) uint8_t *
21983 JS_GetArrayBufferData(JSObject *obj, JSContext *cx);
21984 # 1051 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21985 extern __attribute__((visibility("default"))) uint32_t
21986 JS_GetTypedArrayLength(JSObject *obj, JSContext *cx);
21987 # 1063 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21988 extern __attribute__((visibility("default"))) uint32_t
21989 JS_GetTypedArrayByteOffset(JSObject *obj, JSContext *cx);
21990 # 1074 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
21991 extern __attribute__((visibility("default"))) uint32_t
21992 JS_GetTypedArrayByteLength(JSObject *obj, JSContext *cx);
21999 extern __attribute__((visibility("default"))) JSBool
22000 JS_IsArrayBufferViewObject(JSObject *obj, JSContext *cx);
22005 extern __attribute__((visibility("default"))) uint32_t
22006 JS_GetArrayBufferViewByteLength(JSObject *obj, JSContext *cx);
22007 # 1102 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
22008 extern __attribute__((visibility("default"))) int8_t *
22009 JS_GetInt8ArrayData(JSObject *obj, JSContext *cx);
22010 extern __attribute__((visibility("default"))) uint8_t *
22011 JS_GetUint8ArrayData(JSObject *obj, JSContext *cx);
22012 extern __attribute__((visibility("default"))) uint8_t *
22013 JS_GetUint8ClampedArrayData(JSObject *obj, JSContext *cx);
22014 extern __attribute__((visibility("default"))) int16_t *
22015 JS_GetInt16ArrayData(JSObject *obj, JSContext *cx);
22016 extern __attribute__((visibility("default"))) uint16_t *
22017 JS_GetUint16ArrayData(JSObject *obj, JSContext *cx);
22018 extern __attribute__((visibility("default"))) int32_t *
22019 JS_GetInt32ArrayData(JSObject *obj, JSContext *cx);
22020 extern __attribute__((visibility("default"))) uint32_t *
22021 JS_GetUint32ArrayData(JSObject *obj, JSContext *cx);
22022 extern __attribute__((visibility("default"))) float *
22023 JS_GetFloat32ArrayData(JSObject *obj, JSContext *cx);
22024 extern __attribute__((visibility("default"))) double *
22025 JS_GetFloat64ArrayData(JSObject *obj, JSContext *cx);
22031 extern __attribute__((visibility("default"))) void *
22032 JS_GetArrayBufferViewData(JSObject *obj, JSContext *cx);
22039 __attribute__((visibility("default"))) JSBool
22040 JS_IsDataViewObject(JSContext *cx, JSObject *obj, JSBool *isDataView);
22041 # 1145 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
22042 __attribute__((visibility("default"))) uint32_t
22043 JS_GetDataViewByteOffset(JSObject *obj, JSContext *cx);
22044 # 1156 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
22045 __attribute__((visibility("default"))) uint32_t
22046 JS_GetDataViewByteLength(JSObject *obj, JSContext *cx);
22047 # 1167 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h"
22048 __attribute__((visibility("default"))) void *
22049 JS_GetDataViewData(JSObject *obj, JSContext *cx);
22050 # 23 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h" 2
22051 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h" 1
22052 # 10 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22053 #define jsinfer_h___
22059 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/LifoAlloc.h" 1
22060 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/LifoAlloc.h"
22061 #define LifoAlloc_h__
22062 # 24 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/LifoAlloc.h"
22067 static const size_t LIFO_ALLOC_ALIGN = 8;
22069 __attribute__((always_inline)) inline
22071 AlignPtr(void *orig)
22073 typedef tl::StaticAssert<
22074 tl::FloorLog2<LIFO_ALLOC_ALIGN>::result == tl::CeilingLog2<LIFO_ALLOC_ALIGN>::result
22077 char *result = (char *) ((uintptr_t(orig) + (LIFO_ALLOC_ALIGN - 1)) & (~LIFO_ALLOC_ALIGN + 1));
22088 size_t bumpSpaceSize;
22090 char *headerBase() { return reinterpret_cast<char *>(this); }
22091 char *bumpBase() const { return limit - bumpSpaceSize; }
22093 BumpChunk *thisDuringConstruction() { return this; }
22095 explicit BumpChunk(size_t bumpSpaceSize)
22096 : bump(reinterpret_cast<char *>(thisDuringConstruction()) + sizeof(BumpChunk)),
22097 limit(bump + bumpSpaceSize),
22098 next_(__null), bumpSpaceSize(bumpSpaceSize)
22103 void setBump(void *ptr) {
22106 DebugOnly<char *> prevBump = bump;
22107 bump = static_cast<char *>(ptr);
22118 BumpChunk *next() const { return next_; }
22119 void setNext(BumpChunk *succ) { next_ = succ; }
22121 size_t used() const { return bump - bumpBase(); }
22122 size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf) {
22123 return mallocSizeOf(this);
22127 setBump(headerBase() + sizeof(BumpChunk));
22130 void *mark() const { return bump; }
22132 void release(void *mark) {
22138 bool contains(void *mark) const {
22139 return bumpBase() <= mark && mark <= limit;
22142 bool canAlloc(size_t n);
22145 __attribute__((always_inline)) inline
22146 void *tryAlloc(size_t n) {
22147 char *aligned = AlignPtr(bump);
22148 char *newBump = aligned + n;
22150 if (newBump > limit)
22154 if ((__builtin_expect((newBump < bump), 0)))
22162 void *allocInfallible(size_t n) {
22163 void *result = tryAlloc(n);
22168 static BumpChunk *new_(size_t chunkSize);
22169 static void delete_(BumpChunk *chunk);
22182 typedef detail::BumpChunk BumpChunk;
22187 size_t defaultChunkSize_;
22189 void operator=(const LifoAlloc &) ;
22190 LifoAlloc(const LifoAlloc &) ;
22191 # 160 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/LifoAlloc.h"
22192 BumpChunk *getOrCreateChunk(size_t n);
22194 void reset(size_t defaultChunkSize) {
22196 first = latest = __null;
22197 defaultChunkSize_ = defaultChunkSize;
22202 explicit LifoAlloc(size_t defaultChunkSize) { reset(defaultChunkSize); }
22205 void steal(LifoAlloc *other) {
22207 PodCopy((char *) this, (char *) other, sizeof(*this));
22208 other->reset(defaultChunkSize_);
22211 ~LifoAlloc() { freeAll(); }
22213 size_t defaultChunkSize() const { return defaultChunkSize_; }
22221 __attribute__((always_inline)) inline
22222 void *alloc(size_t n) {
22226 if (latest && (result = latest->tryAlloc(n)))
22229 if (!getOrCreateChunk(n))
22232 return latest->allocInfallible(n);
22235 template <typename T>
22236 T *newArray(size_t count) {
22237 void *mem = alloc(sizeof(T) * count);
22240 typedef int moz_static_assert45[(tl::IsPodType<T>::result) ? 1 : -1];
22248 template <typename T>
22249 T *newArrayUninitialized(size_t count) {
22250 return static_cast<T *>(alloc(sizeof(T) * count));
22256 return latest ? latest->mark() : __null;
22259 void release(void *mark) {
22265 latest->resetBump();
22274 BumpChunk *container = first;
22276 if (container->contains(mark))
22279 container = container->next();
22281 latest = container;
22282 latest->release(mark);
22286 size_t used() const {
22288 BumpChunk *it = first;
22290 accum += it->used();
22297 size_t sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf) const {
22299 BumpChunk *it = first;
22301 accum += it->sizeOfIncludingThis(mallocSizeOf);
22308 size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf) const {
22309 return mallocSizeOf(this) + sizeOfExcludingThis(mallocSizeOf);
22313 template <typename T>
22314 __attribute__((always_inline)) inline
22316 return static_cast<T *>(alloc(sizeof(T)));
22319 template <class T> __attribute__((always_inline)) inline T *new_() { void *memory = alloc(sizeof(T)); return memory ? new(memory) T () : __null; } template <class T, class P1> __attribute__((always_inline)) inline T *new_(P1 p1) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1) : __null; } template <class T, class P1, class P2> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2) : __null; } template <class T, class P1, class P2, class P3> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3) : __null; } template <class T, class P1, class P2, class P3, class P4> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12) { void *memory = alloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) : __null; } static const int JSMinAlignment = 8; template <class T> __attribute__((always_inline)) inline T *array_new(size_t n) { uint64_t numBytes64 = uint64_t(JSMinAlignment) + uint64_t(sizeof(T)) * uint64_t(n); size_t numBytes = size_t(numBytes64); if (numBytes64 != numBytes) { do { } while(0); return __null; } void *memory = alloc(numBytes); if (!memory) return __null; *(size_t *)memory = n; memory = (void*)(uintptr_t(memory) + JSMinAlignment); return new(memory) T[n]; }
22322 class LifoAllocScope
22324 LifoAlloc *lifoAlloc;
22326 bool shouldRelease;
22330 explicit LifoAllocScope(LifoAlloc *lifoAlloc
22332 : lifoAlloc(lifoAlloc), shouldRelease(true) {
22334 mark = lifoAlloc->mark();
22337 ~LifoAllocScope() {
22339 lifoAlloc->release(mark);
22342 LifoAlloc &alloc() {
22346 void releaseEarly() {
22348 lifoAlloc->release(mark);
22349 shouldRelease = false;
22354 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h" 2
22356 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Heap.h" 1
22357 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h" 2
22361 struct TypeInferenceSizes;
22368 struct TypeObjectKey {
22369 static intptr_t keyBits(TypeObjectKey *obj) { return (intptr_t) obj; }
22370 static TypeObjectKey *getKey(TypeObjectKey *obj) { return obj; }
22381 Type(uintptr_t data) : data(data) {}
22385 uintptr_t raw() const { return data; }
22387 bool isPrimitive() const {
22388 return data < JSVAL_TYPE_OBJECT;
22391 bool isPrimitive(JSValueType type) const {
22393 return (uintptr_t) type == data;
22396 JSValueType primitive() const {
22398 return (JSValueType) data;
22401 bool isAnyObject() const {
22402 return data == JSVAL_TYPE_OBJECT;
22405 bool isUnknown() const {
22406 return data == JSVAL_TYPE_UNKNOWN;
22411 bool isObject() const {
22413 return data > JSVAL_TYPE_UNKNOWN;
22416 inline TypeObjectKey *objectKey() const;
22420 bool isSingleObject() const {
22421 return isObject() && !!(data & 1);
22424 inline JSObject *singleObject() const;
22428 bool isTypeObject() const {
22429 return isObject() && !(data & 1);
22432 inline TypeObject *typeObject() const;
22434 bool operator == (Type o) const { return data == o.data; }
22435 bool operator != (Type o) const { return data != o.data; }
22437 static inline Type UndefinedType() { return Type(JSVAL_TYPE_UNDEFINED); }
22438 static inline Type NullType() { return Type(JSVAL_TYPE_NULL); }
22439 static inline Type BooleanType() { return Type(JSVAL_TYPE_BOOLEAN); }
22440 static inline Type Int32Type() { return Type(JSVAL_TYPE_INT32); }
22441 static inline Type DoubleType() { return Type(JSVAL_TYPE_DOUBLE); }
22442 static inline Type StringType() { return Type(JSVAL_TYPE_STRING); }
22443 static inline Type MagicArgType() { return Type(JSVAL_TYPE_MAGIC); }
22444 static inline Type AnyObjectType() { return Type(JSVAL_TYPE_OBJECT); }
22445 static inline Type UnknownType() { return Type(JSVAL_TYPE_UNKNOWN); }
22447 static inline Type PrimitiveType(JSValueType type) {
22452 static inline Type ObjectType(JSObject *obj);
22453 static inline Type ObjectType(TypeObject *obj);
22454 static inline Type ObjectType(TypeObjectKey *obj);
22458 inline Type GetValueType(JSContext *cx, const Value &val);
22459 # 144 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22460 class TypeConstraint
22467 const char *kind() const { return __null; }
22471 TypeConstraint *next;
22473 TypeConstraint(const char *kind)
22482 virtual void newType(JSContext *cx, TypeSet *source, Type type) = 0;
22488 virtual void newPropertyState(JSContext *cx, TypeSet *source) {}
22495 virtual void newObjectState(JSContext *cx, TypeObject *object, bool force) {}
22500 TYPE_FLAG_UNDEFINED = 0x1,
22501 TYPE_FLAG_NULL = 0x2,
22502 TYPE_FLAG_BOOLEAN = 0x4,
22503 TYPE_FLAG_INT32 = 0x8,
22504 TYPE_FLAG_DOUBLE = 0x10,
22505 TYPE_FLAG_STRING = 0x20,
22506 TYPE_FLAG_LAZYARGS = 0x40,
22507 TYPE_FLAG_ANYOBJECT = 0x80,
22510 TYPE_FLAG_OBJECT_COUNT_MASK = 0xff00,
22511 TYPE_FLAG_OBJECT_COUNT_SHIFT = 8,
22512 TYPE_FLAG_OBJECT_COUNT_LIMIT =
22513 TYPE_FLAG_OBJECT_COUNT_MASK >> TYPE_FLAG_OBJECT_COUNT_SHIFT,
22516 TYPE_FLAG_UNKNOWN = 0x00010000,
22519 TYPE_FLAG_BASE_MASK = 0x000100ff,
22527 TYPE_FLAG_PROPAGATED_PROPERTY = 0x00020000,
22530 TYPE_FLAG_OWN_PROPERTY = 0x00040000,
22537 TYPE_FLAG_CONFIGURED_PROPERTY = 0x00080000,
22544 TYPE_FLAG_DEFINITE_PROPERTY = 0x00100000,
22547 TYPE_FLAG_DEFINITE_MASK = 0x0f000000,
22548 TYPE_FLAG_DEFINITE_SHIFT = 24
22550 typedef uint32_t TypeFlags;
22555 OBJECT_FLAG_FUNCTION = 0x1,
22558 OBJECT_FLAG_NEW_SCRIPT_CLEARED = 0x2,
22565 OBJECT_FLAG_NEW_SCRIPT_REGENERATE = 0x4,
22571 OBJECT_FLAG_SETS_MARKED_UNKNOWN = 0x8,
22574 OBJECT_FLAG_PROPERTY_COUNT_MASK = 0xfff0,
22575 OBJECT_FLAG_PROPERTY_COUNT_SHIFT = 4,
22576 OBJECT_FLAG_PROPERTY_COUNT_LIMIT =
22577 OBJECT_FLAG_PROPERTY_COUNT_MASK >> OBJECT_FLAG_PROPERTY_COUNT_SHIFT,
22583 OBJECT_FLAG_NON_DENSE_ARRAY = 0x00010000,
22586 OBJECT_FLAG_NON_PACKED_ARRAY = 0x00020000,
22589 OBJECT_FLAG_NON_TYPED_ARRAY = 0x00040000,
22592 OBJECT_FLAG_UNINLINEABLE = 0x00080000,
22595 OBJECT_FLAG_SPECIAL_EQUALITY = 0x00100000,
22598 OBJECT_FLAG_ITERATED = 0x00200000,
22601 OBJECT_FLAG_REENTRANT_FUNCTION = 0x00400000,
22604 OBJECT_FLAG_REGEXP_FLAGS_SET = 0x00800000,
22607 OBJECT_FLAG_DYNAMIC_MASK = 0x00ff0000,
22613 OBJECT_FLAG_UNKNOWN_PROPERTIES = 0x80000000,
22616 OBJECT_FLAG_UNKNOWN_MASK =
22617 OBJECT_FLAG_DYNAMIC_MASK
22618 | OBJECT_FLAG_UNKNOWN_PROPERTIES
22619 | OBJECT_FLAG_SETS_MARKED_UNKNOWN
22621 typedef uint32_t TypeObjectFlags;
22630 TypeObjectKey **objectSet;
22635 TypeConstraint *constraintList;
22638 : flags(0), objectSet(__null), constraintList(__null)
22641 void print(JSContext *cx);
22643 inline void sweep(JSCompartment *compartment);
22644 inline size_t computedSizeOfExcludingThis();
22647 inline bool hasType(Type type);
22649 TypeFlags baseFlags() const { return flags & TYPE_FLAG_BASE_MASK; }
22650 bool unknown() const { return !!(flags & TYPE_FLAG_UNKNOWN); }
22651 bool unknownObject() const { return !!(flags & (TYPE_FLAG_UNKNOWN | TYPE_FLAG_ANYOBJECT)); }
22653 bool empty() const { return !baseFlags() && !baseObjectCount(); }
22655 bool hasAnyFlag(TypeFlags flags) const {
22657 return !!(baseFlags() & flags);
22660 bool isOwnProperty(bool configurable) const {
22661 return flags & (configurable ? TYPE_FLAG_CONFIGURED_PROPERTY : TYPE_FLAG_OWN_PROPERTY);
22663 bool isDefiniteProperty() const { return flags & TYPE_FLAG_DEFINITE_PROPERTY; }
22664 unsigned definiteSlot() const {
22666 return flags >> TYPE_FLAG_DEFINITE_SHIFT;
22673 inline void addType(JSContext *cx, Type type);
22676 inline void setOwnProperty(JSContext *cx, bool configured);
22683 inline unsigned getObjectCount();
22684 inline TypeObjectKey *getObject(unsigned i);
22685 inline JSObject *getSingleObject(unsigned i);
22686 inline TypeObject *getTypeObject(unsigned i);
22688 void setOwnProperty(bool configurable) {
22689 flags |= TYPE_FLAG_OWN_PROPERTY;
22691 flags |= TYPE_FLAG_CONFIGURED_PROPERTY;
22693 void setDefinite(unsigned slot) {
22695 flags |= TYPE_FLAG_DEFINITE_PROPERTY | (slot << TYPE_FLAG_DEFINITE_SHIFT);
22698 bool hasPropagatedProperty() { return !!(flags & TYPE_FLAG_PROPAGATED_PROPERTY); }
22699 void setPropagatedProperty() { flags |= TYPE_FLAG_PROPAGATED_PROPERTY; }
22702 FILTER_ALL_PRIMITIVES,
22708 inline void add(JSContext *cx, TypeConstraint *constraint, bool callExisting = true);
22709 void addSubset(JSContext *cx, TypeSet *target);
22710 void addGetProperty(JSContext *cx, JSScript *script, jsbytecode *pc,
22711 TypeSet *target, jsid id);
22712 void addSetProperty(JSContext *cx, JSScript *script, jsbytecode *pc,
22713 TypeSet *target, jsid id);
22714 void addCallProperty(JSContext *cx, JSScript *script, jsbytecode *pc, jsid id);
22715 void addSetElement(JSContext *cx, JSScript *script, jsbytecode *pc,
22716 TypeSet *objectTypes, TypeSet *valueTypes);
22717 void addCall(JSContext *cx, TypeCallsite *site);
22718 void addArith(JSContext *cx, JSScript *script, jsbytecode *pc,
22719 TypeSet *target, TypeSet *other = __null);
22720 void addTransformThis(JSContext *cx, JSScript *script, TypeSet *target);
22721 void addPropagateThis(JSContext *cx, JSScript *script, jsbytecode *pc,
22722 Type type, TypeSet *types = __null);
22723 void addFilterPrimitives(JSContext *cx, TypeSet *target, FilterKind filter);
22724 void addSubsetBarrier(JSContext *cx, JSScript *script, jsbytecode *pc, TypeSet *target);
22730 static TypeSet *make(JSContext *cx, const char *name);
22731 # 424 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22732 void addFreeze(JSContext *cx);
22735 JSValueType getKnownTypeTag(JSContext *cx);
22737 bool isMagicArguments(JSContext *cx) { return getKnownTypeTag(cx) == JSVAL_TYPE_MAGIC; }
22740 bool hasObjectFlags(JSContext *cx, TypeObjectFlags flags);
22741 static bool HasObjectFlags(JSContext *cx, TypeObject *object, TypeObjectFlags flags);
22748 static void WatchObjectStateChange(JSContext *cx, TypeObject *object);
22749 # 449 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22750 bool isOwnProperty(JSContext *cx, TypeObject *object, bool configurable);
22753 bool knownNonEmpty(JSContext *cx);
22756 bool knownSubset(JSContext *cx, TypeSet *other);
22762 int getTypedArrayType(JSContext *cx);
22765 JSObject *getSingleton(JSContext *cx, bool freeze = true);
22768 bool hasGlobalObject(JSContext *cx, JSObject *global);
22770 inline void clearObjects();
22776 bool needsBarrier(JSContext *cx);
22779 bool propertyNeedsBarrier(JSContext *cx, jsid id);
22782 uint32_t baseObjectCount() const {
22783 return (flags & TYPE_FLAG_OBJECT_COUNT_MASK) >> TYPE_FLAG_OBJECT_COUNT_SHIFT;
22785 inline void setBaseObjectCount(uint32_t count);
22800 TypeResult(uint32_t offset, Type type)
22801 : offset(offset), type(type), next(__null)
22804 # 562 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22823 JSObject *singleton;
22826 TypeBarrier(TypeSet *target, Type type, JSObject *singleton, jsid singletonId)
22827 : next(__null), target(target), type(type),
22828 singleton(singleton), singletonId(singletonId)
22841 inline Property(jsid id);
22842 inline Property(const Property &o);
22844 static uint32_t keyBits(jsid id) { return uint32_t((id)); }
22845 static jsid getKey(Property *p) { return p->id; }
22847 # 615 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22848 struct TypeNewScript
22850 HeapPtrFunction fun;
22853 gc::AllocKind allocKind;
22859 HeapPtrShape shape;
22860 # 636 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22861 struct Initializer {
22869 Initializer(Kind kind, uint32_t offset)
22870 : kind(kind), offset(offset)
22873 Initializer *initializerList;
22875 static inline void writeBarrierPre(TypeNewScript *newScript);
22876 static inline void writeBarrierPost(TypeNewScript *newScript, void *addr);
22878 # 681 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22879 struct TypeObject : gc::Cell
22882 HeapPtrObject proto;
22889 HeapPtrObject singleton;
22895 static const size_t LAZY_SINGLETON = 1;
22896 bool lazy() const { return singleton == (JSObject *) LAZY_SINGLETON; }
22899 TypeObjectFlags flags;
22900 # 714 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22901 uint32_t contribution;
22902 static const uint32_t CONTRIBUTION_LIMIT = 2000;
22909 HeapPtr<TypeNewScript> newScript;
22910 # 754 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
22911 Property **propertySet;
22914 HeapPtrFunction interpretedFunction;
22920 inline TypeObject(JSObject *proto, bool isFunction, bool unknown);
22922 bool isFunction() { return !!(flags & OBJECT_FLAG_FUNCTION); }
22924 bool hasAnyFlags(TypeObjectFlags flags) {
22926 return !!(this->flags & flags);
22928 bool hasAllFlags(TypeObjectFlags flags) {
22930 return (this->flags & flags) == flags;
22933 bool unknownProperties() {
22936 return !!(flags & OBJECT_FLAG_UNKNOWN_PROPERTIES);
22945 inline TypeSet *getProperty(JSContext *cx, jsid id, bool assign);
22948 inline TypeSet *maybeGetProperty(JSContext *cx, jsid id);
22950 inline unsigned getPropertyCount();
22951 inline Property *getProperty(unsigned i);
22954 inline void setFlagsFromKey(JSContext *cx, JSProtoKey kind);
22960 inline JSObject *getGlobal();
22964 bool addProperty(JSContext *cx, jsid id, Property **pprop);
22965 bool addDefiniteProperties(JSContext *cx, JSObject *obj);
22966 bool matchDefiniteProperties(JSObject *obj);
22967 void addPrototype(JSContext *cx, TypeObject *proto);
22968 void addPropertyType(JSContext *cx, jsid id, Type type);
22969 void addPropertyType(JSContext *cx, jsid id, const Value &value);
22970 void addPropertyType(JSContext *cx, const char *name, Type type);
22971 void addPropertyType(JSContext *cx, const char *name, const Value &value);
22972 void markPropertyConfigured(JSContext *cx, jsid id);
22973 void markStateChange(JSContext *cx);
22974 void setFlags(JSContext *cx, TypeObjectFlags flags);
22975 void markUnknown(JSContext *cx);
22976 void clearNewScript(JSContext *cx);
22977 void getFromPrototypes(JSContext *cx, jsid id, TypeSet *types, bool force = false);
22979 void print(JSContext *cx);
22981 inline void clearProperties();
22982 inline void sweep(FreeOp *fop);
22984 inline size_t computedSizeOfExcludingThis();
22986 void sizeOfExcludingThis(TypeInferenceSizes *sizes, JSMallocSizeOfFun mallocSizeOf);
22993 void finalize(FreeOp *fop) {}
22995 static inline void writeBarrierPre(TypeObject *type);
22996 static inline void writeBarrierPost(TypeObject *type, void *addr);
22997 static inline void readBarrier(TypeObject *type);
22999 static inline ThingRootKind rootKind() { return THING_ROOT_TYPE_OBJECT; }
23002 inline uint32_t basePropertyCount() const;
23003 inline void setBasePropertyCount(uint32_t count);
23005 static void staticAsserts() {
23006 typedef int moz_static_assert46[(__builtin_offsetof (TypeObject, proto) == __builtin_offsetof (js::shadow::TypeObject, proto)) ? 1 : -1];
23014 struct TypeObjectEntry
23016 typedef JSObject *Lookup;
23018 static inline HashNumber hash(JSObject *base);
23019 static inline bool match(TypeObject *key, JSObject *lookup);
23021 typedef HashSet<ReadBarriered<TypeObject>, TypeObjectEntry, SystemAllocPolicy> TypeObjectSet;
23025 UseNewType(JSContext *cx, JSScript *script, jsbytecode *pc);
23029 UseNewTypeForInitializer(JSContext *cx, JSScript *script, jsbytecode *pc);
23036 ArrayPrototypeHasIndexedProperty(JSContext *cx, JSScript *script);
23043 struct TypeCallsite
23052 unsigned argumentCount;
23053 TypeSet **argumentTypes;
23056 TypeSet *thisTypes;
23059 TypeSet *returnTypes;
23061 inline TypeCallsite(JSContext *cx, JSScript *script, jsbytecode *pc,
23062 bool isNew, unsigned argumentCount);
23064 # 945 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
23065 struct TypeScriptNesting
23067 # 955 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
23071 JSScript *children;
23077 JSObject *activeCall;
23078 # 974 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
23079 const Value *argArray;
23080 const Value *varArray;
23083 uint32_t activeFrames;
23085 TypeScriptNesting() { PodZero(this); }
23086 ~TypeScriptNesting();
23090 bool CheckScriptNesting(JSContext *cx, JSScript *script);
23093 void NestingPrologue(JSContext *cx, StackFrame *fp);
23094 void NestingEpilogue(StackFrame *fp);
23099 friend struct ::JSScript;
23102 analyze::ScriptAnalysis *analysis;
23109 static const size_t GLOBAL_MISSING_SCOPE = 0x1;
23112 HeapPtr<GlobalObject> global;
23117 TypeScriptNesting *nesting;
23120 TypeResult *dynamicList;
23122 inline TypeScript();
23124 bool hasScope() { return size_t(global.get()) != GLOBAL_MISSING_SCOPE; }
23127 TypeSet *typeArray() { return (TypeSet *) (uintptr_t(this) + sizeof(TypeScript)); }
23129 static inline unsigned NumTypeSets(JSScript *script);
23131 static bool SetScope(JSContext *cx, JSScript *script, JSObject *scope);
23133 static inline TypeSet *ReturnTypes(JSScript *script);
23134 static inline TypeSet *ThisTypes(JSScript *script);
23135 static inline TypeSet *ArgTypes(JSScript *script, unsigned i);
23136 static inline TypeSet *LocalTypes(JSScript *script, unsigned i);
23139 static inline TypeSet *SlotTypes(JSScript *script, unsigned slot);
23147 static inline TypeObject *StandardType(JSContext *cx, JSScript *script, JSProtoKey kind);
23150 static inline TypeObject *InitObject(JSContext *cx, JSScript *script, jsbytecode *pc, JSProtoKey kind);
23156 static inline void MonitorOverflow(JSContext *cx, JSScript *script, jsbytecode *pc);
23157 static inline void MonitorString(JSContext *cx, JSScript *script, jsbytecode *pc);
23158 static inline void MonitorUnknown(JSContext *cx, JSScript *script, jsbytecode *pc);
23160 static inline void GetPcScript(JSContext *cx, JSScript **script, jsbytecode **pc);
23161 static inline void MonitorOverflow(JSContext *cx);
23162 static inline void MonitorString(JSContext *cx);
23163 static inline void MonitorUnknown(JSContext *cx);
23164 # 1067 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
23165 static inline void Monitor(JSContext *cx, JSScript *script, jsbytecode *pc,
23166 const js::Value &val);
23167 static inline void Monitor(JSContext *cx, const js::Value &rval);
23170 static inline void MonitorAssign(JSContext *cx, JSObject *obj, jsid id);
23173 static inline void SetThis(JSContext *cx, JSScript *script, Type type);
23174 static inline void SetThis(JSContext *cx, JSScript *script, const js::Value &value);
23175 static inline void SetLocal(JSContext *cx, JSScript *script, unsigned local, Type type);
23176 static inline void SetLocal(JSContext *cx, JSScript *script, unsigned local, const js::Value &value);
23177 static inline void SetArgument(JSContext *cx, JSScript *script, unsigned arg, Type type);
23178 static inline void SetArgument(JSContext *cx, JSScript *script, unsigned arg, const js::Value &value);
23180 static void Sweep(FreeOp *fop, JSScript *script);
23181 inline void trace(JSTracer *trc);
23185 struct ArrayTableKey;
23186 typedef HashMap<ArrayTableKey,ReadBarriered<TypeObject>,ArrayTableKey,SystemAllocPolicy> ArrayTypeTable;
23188 struct ObjectTableKey;
23189 struct ObjectTableEntry;
23190 typedef HashMap<ObjectTableKey,ObjectTableEntry,ObjectTableKey,SystemAllocPolicy> ObjectTypeTable;
23192 struct AllocationSiteKey;
23193 typedef HashMap<AllocationSiteKey,ReadBarriered<TypeObject>,AllocationSiteKey,SystemAllocPolicy> AllocationSiteTable;
23195 struct RecompileInfo
23198 bool constructing : 1;
23200 uint32_t chunkIndex:30;
23202 bool operator == (const RecompileInfo &o) const {
23203 return script == o.script
23204 && constructing == o.constructing
23205 && barriers == o.barriers
23206 && chunkIndex == o.chunkIndex;
23211 struct TypeCompartment
23221 TypeConstraint *constraint;
23225 PendingWork *pendingArray;
23226 unsigned pendingCount;
23227 unsigned pendingCapacity;
23233 bool inferenceEnabled;
23239 bool pendingNukeTypes;
23242 unsigned scriptCount;
23245 Vector<RecompileInfo> *pendingRecompiles;
23252 unsigned recompilations;
23253 unsigned frameExpansions;
23260 RecompileInfo compiledInfo;
23263 AllocationSiteTable *allocationSiteTable;
23267 ArrayTypeTable *arrayTypeTable;
23268 ObjectTypeTable *objectTypeTable;
23270 void fixArrayType(JSContext *cx, JSObject *obj);
23271 void fixObjectType(JSContext *cx, JSObject *obj);
23276 static const unsigned TYPE_COUNT_LIMIT = 4;
23277 unsigned typeCounts[TYPE_COUNT_LIMIT];
23278 unsigned typeCountOver;
23280 void init(JSContext *cx);
23281 ~TypeCompartment();
23283 inline JSCompartment *compartment();
23286 inline void addPending(JSContext *cx, TypeConstraint *constraint, TypeSet *source, Type type);
23287 bool growPendingArray(JSContext *cx);
23290 inline void resolvePending(JSContext *cx);
23293 void print(JSContext *cx, bool force);
23301 TypeObject *newTypeObject(JSContext *cx, JSScript *script,
23302 JSProtoKey kind, JSObject *proto, bool unknown = false);
23305 TypeObject *newAllocationSiteTypeObject(JSContext *cx, const AllocationSiteKey &key);
23307 void nukeTypes(FreeOp *fop);
23308 void processPendingRecompiles(FreeOp *fop);
23311 void setPendingNukeTypes(JSContext *cx);
23312 void setPendingNukeTypesNoReport();
23315 void addPendingRecompile(JSContext *cx, const RecompileInfo &info);
23316 void addPendingRecompile(JSContext *cx, JSScript *script, jsbytecode *pc);
23319 void monitorBytecode(JSContext *cx, JSScript *script, uint32_t offset,
23320 bool returnOnly = false);
23323 void markSetsUnknown(JSContext *cx, TypeObject *obj);
23325 void sweep(FreeOp *fop);
23326 void finalizeObjects();
23334 # 1252 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h"
23335 inline const char * InferSpewColorReset() { return __null; }
23336 inline const char * InferSpewColor(TypeConstraint *constraint) { return __null; }
23337 inline const char * InferSpewColor(TypeSet *types) { return __null; }
23338 inline void InferSpew(SpewChannel which, const char *fmt, ...) {}
23339 inline const char * TypeString(Type type) { return __null; }
23340 inline const char * TypeObjectString(TypeObject *type) { return __null; }
23345 void TypeFailure(JSContext *cx, const char *fmt, ...);
23351 template<> class AnchorPermitted<js::types::TypeObject *> { };
23353 # 24 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h" 2
23354 # 32 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
23355 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h" 1
23356 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
23357 #define ObjectImpl_h___
23362 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfriendapi.h" 1
23363 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h" 2
23364 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinfer.h" 1
23365 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h" 2
23366 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsval.h" 1
23367 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h" 2
23369 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier.h" 1
23370 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h" 2
23371 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumericConversions.h" 1
23372 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumericConversions.h"
23373 #define NumericConversions_h___
23377 # 1 "/usr/include/math.h" 1 3 4
23378 # 26 "/usr/include/math.h" 3 4
23387 # 1 "/usr/include/bits/huge_val.h" 1 3 4
23388 # 29 "/usr/include/bits/huge_val.h" 3 4
23389 #define HUGE_VAL (__builtin_huge_val())
23390 # 35 "/usr/include/math.h" 2 3 4
23392 # 1 "/usr/include/bits/huge_valf.h" 1 3 4
23393 # 29 "/usr/include/bits/huge_valf.h" 3 4
23394 #define HUGE_VALF (__builtin_huge_valf())
23395 # 37 "/usr/include/math.h" 2 3 4
23396 # 1 "/usr/include/bits/huge_vall.h" 1 3 4
23397 # 26 "/usr/include/bits/huge_vall.h" 3 4
23398 #define HUGE_VALL (__builtin_huge_vall())
23399 # 38 "/usr/include/math.h" 2 3 4
23402 # 1 "/usr/include/bits/inf.h" 1 3 4
23403 # 27 "/usr/include/bits/inf.h" 3 4
23404 #define INFINITY (__builtin_inff())
23405 # 41 "/usr/include/math.h" 2 3 4
23408 # 1 "/usr/include/bits/nan.h" 1 3 4
23409 # 29 "/usr/include/bits/nan.h" 3 4
23410 #define NAN (__builtin_nanf (""))
23411 # 44 "/usr/include/math.h" 2 3 4
23415 # 1 "/usr/include/bits/mathdef.h" 1 3 4
23416 # 25 "/usr/include/bits/mathdef.h" 3 4
23417 #define _MATH_H_MATHDEF 1
23420 typedef float float_t;
23422 typedef double double_t;
23426 #define FP_ILOGB0 (-2147483647)
23427 #define FP_ILOGBNAN (2147483647)
23428 # 56 "/usr/include/bits/mathdef.h" 3 4
23429 #define __NO_LONG_DOUBLE_MATH 1
23430 # 48 "/usr/include/math.h" 2 3 4
23437 #define __MATHCALL(function,suffix,args) __MATHDECL (_Mdouble_,function,suffix, args)
23439 #define __MATHDECL(type,function,suffix,args) __MATHDECL_1(type, function,suffix, args); __MATHDECL_1(type, __CONCAT(__,function),suffix, args)
23442 #define __MATHCALLX(function,suffix,args,attrib) __MATHDECLX (_Mdouble_,function,suffix, args, attrib)
23444 #define __MATHDECLX(type,function,suffix,args,attrib) __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib)
23447 #define __MATHDECL_1(type,function,suffix,args) extern type __MATH_PRECNAME(function,suffix) args __THROW
23450 #define _Mdouble_ double
23451 #define __MATH_PRECNAME(name,r) __CONCAT(name,r)
23452 #define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_STD
23453 #define _Mdouble_END_NAMESPACE __END_NAMESPACE_STD
23454 # 1 "/usr/include/bits/mathcalls.h" 1 3 4
23455 # 53 "/usr/include/bits/mathcalls.h" 3 4
23458 extern double acos (double __x) throw (); extern double __acos (double __x) throw ();
23460 extern double asin (double __x) throw (); extern double __asin (double __x) throw ();
23462 extern double atan (double __x) throw (); extern double __atan (double __x) throw ();
23464 extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw ();
23467 extern double cos (double __x) throw (); extern double __cos (double __x) throw ();
23469 extern double sin (double __x) throw (); extern double __sin (double __x) throw ();
23471 extern double tan (double __x) throw (); extern double __tan (double __x) throw ();
23476 extern double cosh (double __x) throw (); extern double __cosh (double __x) throw ();
23478 extern double sinh (double __x) throw (); extern double __sinh (double __x) throw ();
23480 extern double tanh (double __x) throw (); extern double __tanh (double __x) throw ();
23485 extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw ()
23492 extern double acosh (double __x) throw (); extern double __acosh (double __x) throw ();
23494 extern double asinh (double __x) throw (); extern double __asinh (double __x) throw ();
23496 extern double atanh (double __x) throw (); extern double __atanh (double __x) throw ();
23504 extern double exp (double __x) throw (); extern double __exp (double __x) throw ();
23507 extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw ();
23510 extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw ();
23513 extern double log (double __x) throw (); extern double __log (double __x) throw ();
23516 extern double log10 (double __x) throw (); extern double __log10 (double __x) throw ();
23519 extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw ()
23520 __attribute__ ((__nonnull__ (2)));
23525 extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw ();
23527 extern double pow10 (double __x) throw (); extern double __pow10 (double __x) throw ();
23533 extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw ();
23536 extern double log1p (double __x) throw (); extern double __log1p (double __x) throw ();
23539 extern double logb (double __x) throw (); extern double __logb (double __x) throw ();
23546 extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw ();
23549 extern double log2 (double __x) throw (); extern double __log2 (double __x) throw ();
23558 extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw ();
23561 extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw ();
23567 extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw ();
23574 extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw ();
23583 extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__));
23586 extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__));
23589 extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__));
23592 extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw ();
23597 extern int __isinf (double __value) throw () __attribute__ ((__const__));
23600 extern int __finite (double __value) throw () __attribute__ ((__const__));
23606 extern int isinf (double __value) throw () __attribute__ ((__const__));
23609 extern int finite (double __value) throw () __attribute__ ((__const__));
23612 extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw ();
23616 extern double significand (double __x) throw (); extern double __significand (double __x) throw ();
23622 extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__));
23629 extern double nan (__const char *__tagb) throw () __attribute__ ((__const__)); extern double __nan (__const char *__tagb) throw () __attribute__ ((__const__));
23635 extern int __isnan (double __value) throw () __attribute__ ((__const__));
23639 extern int isnan (double __value) throw () __attribute__ ((__const__));
23642 extern double j0 (double) throw (); extern double __j0 (double) throw ();
23643 extern double j1 (double) throw (); extern double __j1 (double) throw ();
23644 extern double jn (int, double) throw (); extern double __jn (int, double) throw ();
23645 extern double y0 (double) throw (); extern double __y0 (double) throw ();
23646 extern double y1 (double) throw (); extern double __y1 (double) throw ();
23647 extern double yn (int, double) throw (); extern double __yn (int, double) throw ();
23654 extern double erf (double) throw (); extern double __erf (double) throw ();
23655 extern double erfc (double) throw (); extern double __erfc (double) throw ();
23656 extern double lgamma (double) throw (); extern double __lgamma (double) throw ();
23663 extern double tgamma (double) throw (); extern double __tgamma (double) throw ();
23669 extern double gamma (double) throw (); extern double __gamma (double) throw ();
23676 extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw ();
23684 extern double rint (double __x) throw (); extern double __rint (double __x) throw ();
23687 extern double nextafter (double __x, double __y) throw () __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) throw () __attribute__ ((__const__));
23689 extern double nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); extern double __nexttoward (double __x, long double __y) throw () __attribute__ ((__const__));
23693 extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw ();
23697 extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw ();
23701 extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw ();
23706 extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw ();
23710 extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw ();
23714 extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__));
23718 extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__));
23723 extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw ();
23730 extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw ();
23731 extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw ();
23735 extern long int lround (double __x) throw (); extern long int __lround (double __x) throw ();
23736 extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw ();
23740 extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw ();
23743 extern double fmax (double __x, double __y) throw (); extern double __fmax (double __x, double __y) throw ();
23746 extern double fmin (double __x, double __y) throw (); extern double __fmin (double __x, double __y) throw ();
23750 extern int __fpclassify (double __value) throw ()
23751 __attribute__ ((__const__));
23754 extern int __signbit (double __value) throw ()
23755 __attribute__ ((__const__));
23759 extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw ();
23768 extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw ();
23769 # 72 "/usr/include/math.h" 2 3 4
23771 #undef _Mdouble_BEGIN_NAMESPACE
23772 #undef _Mdouble_END_NAMESPACE
23773 #undef __MATH_PRECNAME
23774 # 84 "/usr/include/math.h" 3 4
23775 #define _Mfloat_ float
23777 #define _Mdouble_ _Mfloat_
23779 #define __MATH_PRECNAME(name,r) name ##f ##r
23783 #define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99
23784 #define _Mdouble_END_NAMESPACE __END_NAMESPACE_C99
23785 # 1 "/usr/include/bits/mathcalls.h" 1 3 4
23786 # 53 "/usr/include/bits/mathcalls.h" 3 4
23789 extern float acosf (float __x) throw (); extern float __acosf (float __x) throw ();
23791 extern float asinf (float __x) throw (); extern float __asinf (float __x) throw ();
23793 extern float atanf (float __x) throw (); extern float __atanf (float __x) throw ();
23795 extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw ();
23798 extern float cosf (float __x) throw (); extern float __cosf (float __x) throw ();
23800 extern float sinf (float __x) throw (); extern float __sinf (float __x) throw ();
23802 extern float tanf (float __x) throw (); extern float __tanf (float __x) throw ();
23807 extern float coshf (float __x) throw (); extern float __coshf (float __x) throw ();
23809 extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw ();
23811 extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw ();
23818 # 82 "/usr/include/bits/mathcalls.h" 3 4
23819 (float __x, float *__sinx, float *__cosx) throw (); extern void
23821 # 82 "/usr/include/bits/mathcalls.h" 3 4
23822 (float __x, float *__sinx, float *__cosx) throw ()
23829 extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw ();
23831 extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw ();
23833 extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw ();
23841 extern float expf (float __x) throw (); extern float __expf (float __x) throw ();
23844 extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw ();
23847 extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw ();
23850 extern float logf (float __x) throw (); extern float __logf (float __x) throw ();
23853 extern float log10f (float __x) throw (); extern float __log10f (float __x) throw ();
23856 extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw ()
23857 __attribute__ ((__nonnull__ (2)));
23862 extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw ();
23864 extern float pow10f (float __x) throw (); extern float __pow10f (float __x) throw ();
23870 extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw ();
23873 extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw ();
23876 extern float logbf (float __x) throw (); extern float __logbf (float __x) throw ();
23883 extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw ();
23886 extern float log2f (float __x) throw (); extern float __log2f (float __x) throw ();
23895 extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw ();
23898 extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw ();
23904 extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw ();
23911 extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw ();
23920 extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__));
23923 extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__));
23926 extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__));
23929 extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw ();
23934 extern int __isinff (float __value) throw () __attribute__ ((__const__));
23937 extern int __finitef (float __value) throw () __attribute__ ((__const__));
23943 extern int isinff (float __value) throw () __attribute__ ((__const__));
23946 extern int finitef (float __value) throw () __attribute__ ((__const__));
23949 extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw ();
23953 extern float significandf (float __x) throw (); extern float __significandf (float __x) throw ();
23959 extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__));
23966 extern float nanf (__const char *__tagb) throw () __attribute__ ((__const__)); extern float __nanf (__const char *__tagb) throw () __attribute__ ((__const__));
23972 extern int __isnanf (float __value) throw () __attribute__ ((__const__));
23976 extern int isnanf (float __value) throw () __attribute__ ((__const__));
23979 extern float j0f (float) throw (); extern float __j0f (float) throw ();
23980 extern float j1f (float) throw (); extern float __j1f (float) throw ();
23981 extern float jnf (int, float) throw (); extern float __jnf (int, float) throw ();
23982 extern float y0f (float) throw (); extern float __y0f (float) throw ();
23983 extern float y1f (float) throw (); extern float __y1f (float) throw ();
23984 extern float ynf (int, float) throw (); extern float __ynf (int, float) throw ();
23991 extern float erff (float) throw (); extern float __erff (float) throw ();
23992 extern float erfcf (float) throw (); extern float __erfcf (float) throw ();
23993 extern float lgammaf (float) throw (); extern float __lgammaf (float) throw ();
24000 extern float tgammaf (float) throw (); extern float __tgammaf (float) throw ();
24006 extern float gammaf (float) throw (); extern float __gammaf (float) throw ();
24013 extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw ();
24021 extern float rintf (float __x) throw (); extern float __rintf (float __x) throw ();
24024 extern float nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) throw () __attribute__ ((__const__));
24026 extern float nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); extern float __nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__));
24030 extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw ();
24034 extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw ();
24038 extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw ();
24043 extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw ();
24047 extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw ();
24051 extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__));
24055 extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__));
24060 extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw ();
24067 extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw ();
24068 extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw ();
24072 extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw ();
24073 extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw ();
24077 extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw ();
24080 extern float fmaxf (float __x, float __y) throw (); extern float __fmaxf (float __x, float __y) throw ();
24083 extern float fminf (float __x, float __y) throw (); extern float __fminf (float __x, float __y) throw ();
24087 extern int __fpclassifyf (float __value) throw ()
24088 __attribute__ ((__const__));
24091 extern int __signbitf (float __value) throw ()
24092 __attribute__ ((__const__));
24096 extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw ();
24105 extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw ();
24106 # 95 "/usr/include/math.h" 2 3 4
24108 #undef _Mdouble_BEGIN_NAMESPACE
24109 #undef _Mdouble_END_NAMESPACE
24110 #undef __MATH_PRECNAME
24111 # 132 "/usr/include/math.h" 3 4
24112 #define _Mlong_double_ long double
24114 #define _Mdouble_ _Mlong_double_
24116 #define __MATH_PRECNAME(name,r) name ##l ##r
24120 #define _Mdouble_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99
24121 #define _Mdouble_END_NAMESPACE __END_NAMESPACE_C99
24122 #define __MATH_DECLARE_LDOUBLE 1
24123 # 1 "/usr/include/bits/mathcalls.h" 1 3 4
24124 # 53 "/usr/include/bits/mathcalls.h" 3 4
24127 extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw ();
24129 extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw ();
24131 extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw ();
24133 extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw ();
24136 extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw ();
24138 extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw ();
24140 extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw ();
24145 extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw ();
24147 extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw ();
24149 extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw ();
24156 # 82 "/usr/include/bits/mathcalls.h" 3 4
24157 (long double __x, long double *__sinx, long double *__cosx) throw (); extern void
24159 # 82 "/usr/include/bits/mathcalls.h" 3 4
24160 (long double __x, long double *__sinx, long double *__cosx) throw ()
24167 extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw ();
24169 extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw ();
24171 extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw ();
24179 extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw ();
24182 extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw ();
24185 extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw ();
24188 extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw ();
24191 extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw ();
24194 extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw ()
24195 __attribute__ ((__nonnull__ (2)));
24200 extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw ();
24202 extern long double pow10l (long double __x) throw (); extern long double __pow10l (long double __x) throw ();
24208 extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw ();
24211 extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw ();
24214 extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw ();
24221 extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw ();
24224 extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw ();
24233 extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw ();
24236 extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw ();
24242 extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw ();
24249 extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw ();
24258 extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__));
24261 extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__));
24264 extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__));
24267 extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw ();
24272 extern int __isinfl (long double __value) throw () __attribute__ ((__const__));
24275 extern int __finitel (long double __value) throw () __attribute__ ((__const__));
24281 extern int isinfl (long double __value) throw () __attribute__ ((__const__));
24284 extern int finitel (long double __value) throw () __attribute__ ((__const__));
24287 extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw ();
24291 extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw ();
24297 extern long double copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) throw () __attribute__ ((__const__));
24304 extern long double nanl (__const char *__tagb) throw () __attribute__ ((__const__)); extern long double __nanl (__const char *__tagb) throw () __attribute__ ((__const__));
24310 extern int __isnanl (long double __value) throw () __attribute__ ((__const__));
24314 extern int isnanl (long double __value) throw () __attribute__ ((__const__));
24317 extern long double j0l (long double) throw (); extern long double __j0l (long double) throw ();
24318 extern long double j1l (long double) throw (); extern long double __j1l (long double) throw ();
24319 extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw ();
24320 extern long double y0l (long double) throw (); extern long double __y0l (long double) throw ();
24321 extern long double y1l (long double) throw (); extern long double __y1l (long double) throw ();
24322 extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw ();
24329 extern long double erfl (long double) throw (); extern long double __erfl (long double) throw ();
24330 extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw ();
24331 extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw ();
24338 extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw ();
24344 extern long double gammal (long double) throw (); extern long double __gammal (long double) throw ();
24351 extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw ();
24359 extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw ();
24362 extern long double nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__));
24364 extern long double nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__));
24368 extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw ();
24372 extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw ();
24376 extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw ();
24381 extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw ();
24385 extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw ();
24389 extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__));
24393 extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__));
24398 extern long double remquol (long double __x, long double __y, int *__quo) throw (); extern long double __remquol (long double __x, long double __y, int *__quo) throw ();
24405 extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw ();
24406 extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw ();
24410 extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw ();
24411 extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw ();
24415 extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw ();
24418 extern long double fmaxl (long double __x, long double __y) throw (); extern long double __fmaxl (long double __x, long double __y) throw ();
24421 extern long double fminl (long double __x, long double __y) throw (); extern long double __fminl (long double __x, long double __y) throw ();
24425 extern int __fpclassifyl (long double __value) throw ()
24426 __attribute__ ((__const__));
24429 extern int __signbitl (long double __value) throw ()
24430 __attribute__ ((__const__));
24434 extern long double fmal (long double __x, long double __y, long double __z) throw (); extern long double __fmal (long double __x, long double __y, long double __z) throw ();
24443 extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw ();
24444 # 144 "/usr/include/math.h" 2 3 4
24446 #undef _Mdouble_BEGIN_NAMESPACE
24447 #undef _Mdouble_END_NAMESPACE
24448 #undef __MATH_PRECNAME
24453 #undef __MATHDECL_1
24460 extern int signgam;
24461 # 200 "/usr/include/math.h" 3 4
24465 #define FP_NAN FP_NAN
24467 #define FP_INFINITE FP_INFINITE
24469 #define FP_ZERO FP_ZERO
24471 #define FP_SUBNORMAL FP_SUBNORMAL
24473 #define FP_NORMAL FP_NORMAL
24478 #define fpclassify(x) (sizeof (x) == sizeof (float) ? __fpclassifyf (x) : __fpclassify (x))
24479 # 228 "/usr/include/math.h" 3 4
24480 #define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x) : __signbit (x))
24481 # 240 "/usr/include/math.h" 3 4
24482 #define isfinite(x) (sizeof (x) == sizeof (float) ? __finitef (x) : __finite (x))
24483 # 251 "/usr/include/math.h" 3 4
24484 #define isnormal(x) (fpclassify (x) == FP_NORMAL)
24489 #define isnan(x) (sizeof (x) == sizeof (float) ? __isnanf (x) : __isnan (x))
24490 # 268 "/usr/include/math.h" 3 4
24491 #define isinf(x) (sizeof (x) == sizeof (float) ? __isinff (x) : __isinf (x))
24492 # 279 "/usr/include/math.h" 3 4
24493 #define MATH_ERRNO 1
24494 #define MATH_ERREXCEPT 2
24500 #define math_errhandling (MATH_ERRNO | MATH_ERREXCEPT)
24514 } _LIB_VERSION_TYPE;
24519 extern _LIB_VERSION_TYPE _LIB_VERSION;
24520 # 316 "/usr/include/math.h" 3 4
24534 extern int matherr (struct __exception *__exc) throw ();
24539 #define X_TLOSS 1.41484755040568800000e+16
24545 #define UNDERFLOW 4
24550 #define HUGE 3.40282347e+38F
24551 # 359 "/usr/include/math.h" 3 4
24552 #define M_E 2.7182818284590452354
24553 #define M_LOG2E 1.4426950408889634074
24554 #define M_LOG10E 0.43429448190325182765
24555 #define M_LN2 0.69314718055994530942
24556 #define M_LN10 2.30258509299404568402
24557 #define M_PI 3.14159265358979323846
24558 #define M_PI_2 1.57079632679489661923
24559 #define M_PI_4 0.78539816339744830962
24560 #define M_1_PI 0.31830988618379067154
24561 #define M_2_PI 0.63661977236758134308
24562 #define M_2_SQRTPI 1.12837916709551257390
24563 #define M_SQRT2 1.41421356237309504880
24564 #define M_SQRT1_2 0.70710678118654752440
24571 #define M_El 2.7182818284590452353602874713526625L
24572 #define M_LOG2El 1.4426950408889634073599246810018921L
24573 #define M_LOG10El 0.4342944819032518276511289189166051L
24574 #define M_LN2l 0.6931471805599453094172321214581766L
24575 #define M_LN10l 2.3025850929940456840179914546843642L
24576 #define M_PIl 3.1415926535897932384626433832795029L
24577 #define M_PI_2l 1.5707963267948966192313216916397514L
24578 #define M_PI_4l 0.7853981633974483096156608458198757L
24579 #define M_1_PIl 0.3183098861837906715377675267450287L
24580 #define M_2_PIl 0.6366197723675813430755350534900574L
24581 #define M_2_SQRTPIl 1.1283791670955125738961589031215452L
24582 #define M_SQRT2l 1.4142135623730950488016887242096981L
24583 #define M_SQRT1_2l 0.7071067811865475244008443621048490L
24584 # 408 "/usr/include/math.h" 3 4
24585 #define isgreater(x,y) __builtin_isgreater(x, y)
24586 #define isgreaterequal(x,y) __builtin_isgreaterequal(x, y)
24587 #define isless(x,y) __builtin_isless(x, y)
24588 #define islessequal(x,y) __builtin_islessequal(x, y)
24589 #define islessgreater(x,y) __builtin_islessgreater(x, y)
24590 #define isunordered(u,v) __builtin_isunordered(u, v)
24595 # 1 "/usr/include/bits/mathinline.h" 1 3 4
24596 # 419 "/usr/include/math.h" 2 3 4
24597 # 480 "/usr/include/math.h" 3 4
24599 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumericConversions.h" 2
24602 extern double js_NaN;
24626 # 114 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumericConversions.h"
24632 # 131 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumericConversions.h"
24633 " mov %1, %R4, LSR #20\n"
24634 " bic %1, %1, #(1 << 11)\n"
24638 " orr %R4, %R4, #(1 << 20)\n"
24639 # 153 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumericConversions.h"
24640 " sub %1, %1, #0xff\n"
24641 " subs %1, %1, #0x300\n"
24648 " subs %3, %1, #52\n"
24657 " bic %2, %3, #0xff\n"
24658 " orr %3, %3, %2, LSR #3\n"
24661 " mov %Q4, %Q4, LSL %3\n"
24666 " rsb %3, %1, #52\n"
24667 " mov %Q4, %Q4, LSR %3\n"
24681 " subs %3, %1, #31\n"
24682 " mov %1, %R4, LSL #11\n"
24687 " bic %2, %3, #0xff\n"
24688 " orr %3, %3, %2, LSR #3\n"
24690 " mov %2, %1, LSL %3\n"
24695 " rsb %3, %3, #0\n"
24696 " mov %2, %1, LSR %3\n"
24704 " orr %Q4, %Q4, %2\n"
24708 " eor %Q4, %Q4, %R4, ASR #31\n"
24709 " add %0, %Q4, %R4, LSR #31\n"
24716 : "=r" (i), "=&r" (tmp0), "=&r" (tmp1), "=&r" (tmp2), "=&r" (d)
24721 # 252 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumericConversions.h"
24728 return uint32_t(ToInt32(d));
24733 ToInteger(double d)
24738 if (!MOZ_DOUBLE_IS_FINITE(d)) {
24739 if (MOZ_DOUBLE_IS_NaN(d))
24744 bool neg = (d < 0);
24745 d = floor(neg ? -d : d);
24746 return neg ? -d : d;
24750 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h" 2
24757 class AutoPropDescArrayRooter;
24759 static inline PropertyOp
24760 CastAsPropertyOp(JSObject *object)
24762 return (__extension__ (PropertyOp) (size_t) (object));
24765 static inline StrictPropertyOp
24766 CastAsStrictPropertyOp(JSObject *object)
24768 return (__extension__ (StrictPropertyOp) (size_t) (object));
24783 Value value_, get_, set_;
24791 bool hasValue_ : 1;
24792 bool hasWritable_ : 1;
24793 bool hasEnumerable_ : 1;
24794 bool hasConfigurable_ : 1;
24797 bool isUndefined_ : 1;
24799 PropDesc(const Value &v)
24800 : pd_(UndefinedValue()),
24802 get_(UndefinedValue()), set_(UndefinedValue()),
24804 hasGet_(false), hasSet_(false),
24805 hasValue_(true), hasWritable_(false), hasEnumerable_(false), hasConfigurable_(false),
24806 isUndefined_(false)
24811 friend class AutoPropDescArrayRooter;
24812 friend void JS::AutoGCRooter::trace(JSTracer *trc);
24814 enum Enumerability { Enumerable = true, NonEnumerable = false };
24815 enum Configurability { Configurable = true, NonConfigurable = false };
24816 enum Writability { Writable = true, NonWritable = false };
24820 static PropDesc undefined() { return PropDesc(); }
24821 static PropDesc valueOnly(const Value &v) { return PropDesc(v); }
24823 PropDesc(const Value &v, Writability writable,
24824 Enumerability enumerable, Configurability configurable)
24825 : pd_(UndefinedValue()),
24827 get_(UndefinedValue()), set_(UndefinedValue()),
24828 attrs((writable ? 0 : 0x02) |
24829 (enumerable ? 0x01 : 0) |
24830 (configurable ? 0 : 0x04)),
24831 hasGet_(false), hasSet_(false),
24832 hasValue_(true), hasWritable_(true), hasEnumerable_(true), hasConfigurable_(true),
24833 isUndefined_(false)
24835 # 115 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
24836 bool initialize(JSContext* cx, const Value &v, bool checkAccessors = true);
24837 # 126 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
24838 void initFromPropertyDescriptor(const PropertyDescriptor &desc);
24839 bool makeObject(JSContext *cx);
24841 void setUndefined() { isUndefined_ = true; }
24843 bool isUndefined() const { return isUndefined_; }
24845 bool hasGet() const { do { } while(0); return hasGet_; }
24846 bool hasSet() const { do { } while(0); return hasSet_; }
24847 bool hasValue() const { do { } while(0); return hasValue_; }
24848 bool hasWritable() const { do { } while(0); return hasWritable_; }
24849 bool hasEnumerable() const { do { } while(0); return hasEnumerable_; }
24850 bool hasConfigurable() const { do { } while(0); return hasConfigurable_; }
24852 Value pd() const { do { } while(0); return pd_; }
24853 void clearPd() { pd_ = UndefinedValue(); }
24855 uint8_t attributes() const { do { } while(0); return attrs; }
24858 bool isAccessorDescriptor() const {
24859 return !isUndefined() && (hasGet() || hasSet());
24863 bool isDataDescriptor() const {
24864 return !isUndefined() && (hasValue() || hasWritable());
24868 bool isGenericDescriptor() const {
24869 return !isUndefined() && !isAccessorDescriptor() && !isDataDescriptor();
24872 bool configurable() const {
24875 return (attrs & 0x04) == 0;
24878 bool enumerable() const {
24881 return (attrs & 0x01) != 0;
24884 bool writable() const {
24887 return (attrs & 0x02) == 0;
24890 const Value & value() const {
24895 JSObject * getterObject() const {
24898 return get_.isUndefined() ? __null : &get_.toObject();
24900 JSObject * setterObject() const {
24903 return set_.isUndefined() ? __null : &set_.toObject();
24906 const Value & getterValue() const {
24911 const Value & setterValue() const {
24921 PropertyOp getter() const {
24922 return CastAsPropertyOp(get_.isUndefined() ? __null : &get_.toObject());
24924 StrictPropertyOp setter() const {
24925 return CastAsStrictPropertyOp(set_.isUndefined() ? __null : &set_.toObject());
24933 bool checkGetter(JSContext *cx);
24934 bool checkSetter(JSContext *cx);
24936 bool unwrapDebuggerObjectsInto(JSContext *cx, Debugger *dbg, JSObject *obj,
24937 PropDesc *unwrapped) const;
24939 bool wrapInto(JSContext *cx, JSObject *obj, const jsid &id, jsid *wrappedId,
24940 PropDesc *wrappedDesc) const;
24942 class AutoRooter : private AutoGCRooter
24945 explicit AutoRooter(JSContext *cx, PropDesc *pd_
24947 : AutoGCRooter(cx, PROPDESC), pd(pd_), skip(cx, pd_)
24952 friend void AutoGCRooter::trace(JSTracer *trc);
24961 class DenseElementsHeader;
24962 class SparseElementsHeader;
24963 class Uint8ElementsHeader;
24964 class Int8ElementsHeader;
24965 class Uint16ElementsHeader;
24966 class Int16ElementsHeader;
24967 class Uint32ElementsHeader;
24968 class Int32ElementsHeader;
24969 class Uint8ClampedElementsHeader;
24970 class Float32ElementsHeader;
24971 class Float64ElementsHeader;
24972 class Uint8ClampedElementsHeader;
24973 class ArrayBufferElementsHeader;
24975 enum ElementsKind {
24979 ArrayBufferElements,
24988 Uint8ClampedElements,
24993 class ElementsHeader
25001 friend class DenseElementsHeader;
25002 uint32_t initializedLength;
25006 friend class SparseElementsHeader;
25011 void staticAsserts() {
25013 moz_static_assert47
25014 # 300 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25015 [(sizeof(ElementsHeader) == ValuesPerHeader * sizeof(Value)) ? 1 : -1]
25020 ElementsKind kind() const {
25022 return ElementsKind(type);
25025 inline bool isDenseElements() const { return kind() == DenseElements; }
25026 inline bool isSparseElements() const { return kind() == SparseElements; }
25027 inline bool isArrayBufferElements() const { return kind() == ArrayBufferElements; }
25028 inline bool isUint8Elements() const { return kind() == Uint8Elements; }
25029 inline bool isInt8Elements() const { return kind() == Int8Elements; }
25030 inline bool isUint16Elements() const { return kind() == Uint16Elements; }
25031 inline bool isInt16Elements() const { return kind() == Int16Elements; }
25032 inline bool isUint32Elements() const { return kind() == Uint32Elements; }
25033 inline bool isInt32Elements() const { return kind() == Int32Elements; }
25034 inline bool isUint8ClampedElements() const { return kind() == Uint8ClampedElements; }
25035 inline bool isFloat32Elements() const { return kind() == Float32Elements; }
25036 inline bool isFloat64Elements() const { return kind() == Float64Elements; }
25038 inline DenseElementsHeader & asDenseElements();
25039 inline SparseElementsHeader & asSparseElements();
25040 inline ArrayBufferElementsHeader & asArrayBufferElements();
25041 inline Uint8ElementsHeader & asUint8Elements();
25042 inline Int8ElementsHeader & asInt8Elements();
25043 inline Uint16ElementsHeader & asUint16Elements();
25044 inline Int16ElementsHeader & asInt16Elements();
25045 inline Uint32ElementsHeader & asUint32Elements();
25046 inline Int32ElementsHeader & asInt32Elements();
25047 inline Uint8ClampedElementsHeader & asUint8ClampedElements();
25048 inline Float32ElementsHeader & asFloat32Elements();
25049 inline Float64ElementsHeader & asFloat64Elements();
25051 static ElementsHeader * fromElements(HeapSlot *elems) {
25052 return reinterpret_cast<ElementsHeader *>(uintptr_t(elems) - sizeof(ElementsHeader));
25055 static const size_t ValuesPerHeader = 2;
25058 class DenseElementsHeader : public ElementsHeader
25061 uint32_t capacity() const {
25063 return dense.capacity;
25066 uint32_t initializedLength() const {
25068 return dense.initializedLength;
25071 uint32_t length() const {
25073 return ElementsHeader::length;
25076 bool getOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index, PropDesc *desc);
25078 bool defineElement(JSContext *cx, ObjectImpl *obj, uint32_t index, const PropDesc &desc,
25079 bool shouldThrow, bool *succeeded);
25081 bool setElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver, uint32_t index,
25082 const Value &v, bool *succeeded);
25085 inline bool isDenseElements() const ;
25086 inline DenseElementsHeader & asDenseElements() ;
25088 DenseElementsHeader(const DenseElementsHeader &other) ;
25089 void operator=(const DenseElementsHeader &other) ;
25092 class SparseElementsHeader : public ElementsHeader
25097 return sparse.shape;
25100 uint32_t length() const {
25102 return ElementsHeader::length;
25105 bool getOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index, PropDesc *desc);
25107 bool defineElement(JSContext *cx, ObjectImpl *obj, uint32_t index, const PropDesc &desc,
25108 bool shouldThrow, bool *succeeded);
25110 bool setElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver, uint32_t index,
25111 const Value &v, bool *succeeded);
25114 inline bool isSparseElements() const ;
25115 inline SparseElementsHeader & asSparseElements() ;
25117 SparseElementsHeader(const SparseElementsHeader &other) ;
25118 void operator=(const SparseElementsHeader &other) ;
25122 ClampDoubleToUint8(const double x);
25124 struct uint8_clamped {
25127 uint8_clamped() { }
25128 uint8_clamped(const uint8_clamped& other) : val(other.val) { }
25131 uint8_clamped(uint8_t x) { *this = x; }
25132 uint8_clamped(uint16_t x) { *this = x; }
25133 uint8_clamped(uint32_t x) { *this = x; }
25134 uint8_clamped(int8_t x) { *this = x; }
25135 uint8_clamped(int16_t x) { *this = x; }
25136 uint8_clamped(int32_t x) { *this = x; }
25137 uint8_clamped(double x) { *this = x; }
25139 uint8_clamped& operator=(const uint8_clamped& x) {
25144 uint8_clamped& operator=(uint8_t x) {
25149 uint8_clamped& operator=(uint16_t x) {
25150 val = (x > 255) ? 255 : uint8_t(x);
25154 uint8_clamped& operator=(uint32_t x) {
25155 val = (x > 255) ? 255 : uint8_t(x);
25159 uint8_clamped& operator=(int8_t x) {
25160 val = (x >= 0) ? uint8_t(x) : 0;
25164 uint8_clamped& operator=(int16_t x) {
25173 uint8_clamped& operator=(int32_t x) {
25182 uint8_clamped& operator=(const double x) {
25183 val = uint8_t(ClampDoubleToUint8(x));
25187 operator uint8_t() const {
25191 void staticAsserts() {
25193 moz_static_assert48
25194 # 477 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25195 [(sizeof(uint8_clamped) == 1) ? 1 : -1]
25201 template<typename T> static inline const bool TypeIsFloatingPoint() { return false; }
25202 template<> inline const bool TypeIsFloatingPoint<float>() { return true; }
25203 template<> inline const bool TypeIsFloatingPoint<double>() { return true; }
25205 template<typename T> static inline const bool TypeIsUnsigned() { return false; }
25206 template<> inline const bool TypeIsUnsigned<uint8_t>() { return true; }
25207 template<> inline const bool TypeIsUnsigned<uint16_t>() { return true; }
25208 template<> inline const bool TypeIsUnsigned<uint32_t>() { return true; }
25210 template <typename T>
25211 class TypedElementsHeader : public ElementsHeader
25213 T getElement(uint32_t index) {
25215 return reinterpret_cast<T *>(this + 1)[index];
25218 inline void assign(uint32_t index, double d);
25220 void setElement(uint32_t index, T value) {
25222 reinterpret_cast<T *>(this + 1)[index] = value;
25226 uint32_t length() const {
25229 return ElementsHeader::length;
25232 bool getOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index, PropDesc *desc);
25234 bool defineElement(JSContext *cx, ObjectImpl *obj, uint32_t index, const PropDesc &desc,
25235 bool shouldThrow, bool *succeeded);
25237 bool setElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver, uint32_t index,
25238 const Value &v, bool *succeeded);
25241 TypedElementsHeader(const TypedElementsHeader &other) ;
25242 void operator=(const TypedElementsHeader &other) ;
25245 template<typename T> inline void
25246 TypedElementsHeader<T>::assign(uint32_t index, double d)
25248 __builtin_unreachable();
25251 template<> inline void
25252 TypedElementsHeader<uint8_clamped>::assign(uint32_t index, double d)
25254 double i = ToInteger(d);
25255 uint8_t u = (i <= 0)
25260 setElement(index, uint8_clamped(u));
25263 template<> inline void
25264 TypedElementsHeader<uint8_t>::assign(uint32_t index, double d)
25266 setElement(index, uint8_t(ToUint32(d)));
25269 template<> inline void
25270 TypedElementsHeader<int8_t>::assign(uint32_t index, double d)
25273 setElement(index, int8_t(ToInt32(d)));
25276 template<> inline void
25277 TypedElementsHeader<uint16_t>::assign(uint32_t index, double d)
25279 setElement(index, uint16_t(ToUint32(d)));
25282 template<> inline void
25283 TypedElementsHeader<int16_t>::assign(uint32_t index, double d)
25286 setElement(index, int16_t(ToInt32(d)));
25289 template<> inline void
25290 TypedElementsHeader<uint32_t>::assign(uint32_t index, double d)
25292 setElement(index, ToUint32(d));
25295 template<> inline void
25296 TypedElementsHeader<int32_t>::assign(uint32_t index, double d)
25299 setElement(index, int32_t(ToInt32(d)));
25302 template<> inline void
25303 TypedElementsHeader<float>::assign(uint32_t index, double d)
25305 setElement(index, float(d));
25308 template<> inline void
25309 TypedElementsHeader<double>::assign(uint32_t index, double d)
25311 setElement(index, d);
25314 class Uint8ElementsHeader : public TypedElementsHeader<uint8_t>
25317 inline bool isUint8Elements() const ;
25318 inline Uint8ElementsHeader & asUint8Elements() ;
25319 Uint8ElementsHeader(const Uint8ElementsHeader &other) ;
25320 void operator=(const Uint8ElementsHeader &other) ;
25322 class Int8ElementsHeader : public TypedElementsHeader<int8_t>
25325 bool isInt8Elements() const ;
25326 Int8ElementsHeader & asInt8Elements() ;
25327 Int8ElementsHeader(const Int8ElementsHeader &other) ;
25328 void operator=(const Int8ElementsHeader &other) ;
25330 class Uint16ElementsHeader : public TypedElementsHeader<uint16_t>
25333 bool isUint16Elements() const ;
25334 Uint16ElementsHeader & asUint16Elements() ;
25335 Uint16ElementsHeader(const Uint16ElementsHeader &other) ;
25336 void operator=(const Uint16ElementsHeader &other) ;
25338 class Int16ElementsHeader : public TypedElementsHeader<int16_t>
25341 bool isInt16Elements() const ;
25342 Int16ElementsHeader & asInt16Elements() ;
25343 Int16ElementsHeader(const Int16ElementsHeader &other) ;
25344 void operator=(const Int16ElementsHeader &other) ;
25346 class Uint32ElementsHeader : public TypedElementsHeader<uint32_t>
25349 bool isUint32Elements() const ;
25350 Uint32ElementsHeader & asUint32Elements() ;
25351 Uint32ElementsHeader(const Uint32ElementsHeader &other) ;
25352 void operator=(const Uint32ElementsHeader &other) ;
25354 class Int32ElementsHeader : public TypedElementsHeader<int32_t>
25357 bool isInt32Elements() const ;
25358 Int32ElementsHeader & asInt32Elements() ;
25359 Int32ElementsHeader(const Int32ElementsHeader &other) ;
25360 void operator=(const Int32ElementsHeader &other) ;
25362 class Float32ElementsHeader : public TypedElementsHeader<float>
25365 bool isFloat32Elements() const ;
25366 Float32ElementsHeader & asFloat32Elements() ;
25367 Float32ElementsHeader(const Float32ElementsHeader &other) ;
25368 void operator=(const Float32ElementsHeader &other) ;
25370 class Float64ElementsHeader : public TypedElementsHeader<double>
25373 bool isFloat64Elements() const ;
25374 Float64ElementsHeader & asFloat64Elements() ;
25375 Float64ElementsHeader(const Float64ElementsHeader &other) ;
25376 void operator=(const Float64ElementsHeader &other) ;
25379 class Uint8ClampedElementsHeader : public TypedElementsHeader<uint8_clamped>
25382 inline bool isUint8Clamped() const ;
25383 inline Uint8ClampedElementsHeader & asUint8ClampedElements() ;
25384 Uint8ClampedElementsHeader(const Uint8ClampedElementsHeader &other) ;
25385 void operator=(const Uint8ClampedElementsHeader &other) ;
25388 class ArrayBufferElementsHeader : public ElementsHeader
25391 bool getOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index, PropDesc *desc);
25393 bool defineElement(JSContext *cx, ObjectImpl *obj, uint32_t index, const PropDesc &desc,
25394 bool shouldThrow, bool *succeeded);
25396 bool setElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver, uint32_t index,
25397 const Value &v, bool *succeeded);
25400 inline bool isArrayBufferElements() const ;
25401 inline ArrayBufferElementsHeader & asArrayBufferElements() ;
25403 ArrayBufferElementsHeader(const ArrayBufferElementsHeader &other) ;
25404 void operator=(const ArrayBufferElementsHeader &other) ;
25407 inline DenseElementsHeader &
25408 ElementsHeader::asDenseElements()
25411 return *static_cast<DenseElementsHeader *>(this);
25414 inline SparseElementsHeader &
25415 ElementsHeader::asSparseElements()
25418 return *static_cast<SparseElementsHeader *>(this);
25421 inline Uint8ElementsHeader &
25422 ElementsHeader::asUint8Elements()
25425 return *static_cast<Uint8ElementsHeader *>(this);
25428 inline Int8ElementsHeader &
25429 ElementsHeader::asInt8Elements()
25432 return *static_cast<Int8ElementsHeader *>(this);
25435 inline Uint16ElementsHeader &
25436 ElementsHeader::asUint16Elements()
25439 return *static_cast<Uint16ElementsHeader *>(this);
25442 inline Int16ElementsHeader &
25443 ElementsHeader::asInt16Elements()
25446 return *static_cast<Int16ElementsHeader *>(this);
25449 inline Uint32ElementsHeader &
25450 ElementsHeader::asUint32Elements()
25453 return *static_cast<Uint32ElementsHeader *>(this);
25456 inline Int32ElementsHeader &
25457 ElementsHeader::asInt32Elements()
25460 return *static_cast<Int32ElementsHeader *>(this);
25463 inline Uint8ClampedElementsHeader &
25464 ElementsHeader::asUint8ClampedElements()
25467 return *static_cast<Uint8ClampedElementsHeader *>(this);
25470 inline Float32ElementsHeader &
25471 ElementsHeader::asFloat32Elements()
25474 return *static_cast<Float32ElementsHeader *>(this);
25477 inline Float64ElementsHeader &
25478 ElementsHeader::asFloat64Elements()
25481 return *static_cast<Float64ElementsHeader *>(this);
25484 inline ArrayBufferElementsHeader &
25485 ElementsHeader::asArrayBufferElements()
25488 return *static_cast<ArrayBufferElementsHeader *>(this);
25497 class ArrayBufferObject;
25498 class ObjectElements
25500 friend struct ::JSObject;
25501 friend class ObjectImpl;
25502 friend class ArrayBufferObject;
25513 uint32_t initializedLength;
25521 void staticAsserts() {
25523 moz_static_assert49
25524 # 804 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25525 [(sizeof(ObjectElements) == VALUES_PER_HEADER * sizeof(Value)) ? 1 : -1]
25531 ObjectElements(uint32_t capacity, uint32_t length)
25532 : capacity(capacity), initializedLength(0), length(length)
25535 HeapSlot *elements() { return (HeapSlot *)(uintptr_t(this) + sizeof(ObjectElements)); }
25536 static ObjectElements * fromElements(HeapSlot *elems) {
25537 return (ObjectElements *)(uintptr_t(elems) - sizeof(ObjectElements));
25540 static int offsetOfCapacity() {
25541 return (int)__builtin_offsetof (ObjectElements, capacity) - (int)sizeof(ObjectElements);
25543 static int offsetOfInitializedLength() {
25544 return (int)__builtin_offsetof (ObjectElements, initializedLength) - (int)sizeof(ObjectElements);
25546 static int offsetOfLength() {
25547 return (int)__builtin_offsetof (ObjectElements, length) - (int)sizeof(ObjectElements);
25550 static const size_t VALUES_PER_HEADER = 2;
25554 extern HeapSlot *emptyObjectElements;
25561 class NewObjectCache;
25564 ObjectValue(ObjectImpl &obj);
25565 # 893 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25566 class ObjectImpl : public gc::Cell
25573 HeapPtrShape shape_;
25580 HeapPtrTypeObject type_;
25583 HeapSlot *elements;
25586 static void staticAsserts() {
25588 moz_static_assert50
25589 # 914 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25590 [(sizeof(ObjectImpl) == sizeof(shadow::Object)) ? 1 : -1]
25593 moz_static_assert51
25594 # 916 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25595 [(sizeof(ObjectImpl) % sizeof(Value) == 0) ? 1 : -1]
25599 moz_static_assert52
25600 # 919 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25601 [(__builtin_offsetof (ObjectImpl, shape_) == __builtin_offsetof (shadow::Object, shape)) ? 1 : -1]
25604 moz_static_assert53
25605 # 921 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25606 [(__builtin_offsetof (ObjectImpl, type_) == __builtin_offsetof (shadow::Object, type)) ? 1 : -1]
25609 moz_static_assert54
25610 # 923 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25611 [(__builtin_offsetof (ObjectImpl, slots) == __builtin_offsetof (shadow::Object, slots)) ? 1 : -1]
25614 moz_static_assert55
25615 # 925 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25616 [(__builtin_offsetof (ObjectImpl, elements) == __builtin_offsetof (shadow::Object, _1)) ? 1 : -1]
25620 JSObject * asObjectPtr() { return reinterpret_cast<JSObject *>(this); }
25622 friend inline Value ObjectValue(ObjectImpl &obj);
25627 JSObject * getProto() const {
25628 return type_->proto;
25631 inline bool isExtensible() const;
25637 inline bool isDenseArray() const;
25638 inline bool isSlowArray() const;
25639 inline bool isArray() const;
25641 inline HeapSlotArray getDenseArrayElements();
25642 inline const Value & getDenseArrayElement(uint32_t idx);
25643 inline uint32_t getDenseArrayInitializedLength();
25645 bool makeElementsSparse(JSContext *cx) {
25646 __builtin_unreachable();
25648 __builtin_unreachable();
25656 void checkShapeConsistency() { }
25664 inline void getSlotRangeUnchecked(uint32_t start, uint32_t length,
25665 HeapSlot **fixedStart, HeapSlot **fixedEnd,
25666 HeapSlot **slotsStart, HeapSlot **slotsEnd);
25667 inline void getSlotRange(uint32_t start, uint32_t length,
25668 HeapSlot **fixedStart, HeapSlot **fixedEnd,
25669 HeapSlot **slotsStart, HeapSlot **slotsEnd);
25672 friend struct GCMarker;
25673 friend struct Shape;
25674 friend class NewObjectCache;
25676 inline bool hasContiguousSlots(uint32_t start, uint32_t count) const;
25678 inline void invalidateSlotRange(uint32_t start, uint32_t count);
25679 inline void initializeSlotRange(uint32_t start, uint32_t count);
25685 void initSlotRange(uint32_t start, const Value *vector, uint32_t length);
25691 void copySlotRange(uint32_t start, const Value *vector, uint32_t length);
25692 # 1016 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25693 static const uint32_t SLOT_CAPACITY_MIN = 8;
25695 HeapSlot *fixedSlots() const {
25696 return reinterpret_cast<HeapSlot *>(uintptr_t(this) + sizeof(ObjectImpl));
25699 friend class ElementsHeader;
25700 friend class DenseElementsHeader;
25701 friend class SparseElementsHeader;
25703 enum DenseElementsResult {
25709 DenseElementsResult ensureDenseElementsInitialized(JSContext *cx, uint32_t index,
25712 __builtin_unreachable();
25714 __builtin_unreachable();
25724 Shape * lastProperty() const {
25729 inline bool isNative() const;
25731 types::TypeObject *type() const {
25736 uint32_t numFixedSlots() const {
25737 return reinterpret_cast<const shadow::Object *>(this)->numFixedSlots();
25744 bool hasSingletonType() const { return !!type_->singleton; }
25750 bool hasLazyType() const { return type_->lazy(); }
25752 inline uint32_t slotSpan() const;
25755 inline uint32_t numDynamicSlots() const;
25757 const Shape * nativeLookup(JSContext *cx, jsid id);
25763 inline Class *getClass() const;
25764 inline JSClass *getJSClass() const;
25765 inline bool hasClass(const Class *c) const;
25766 inline const ObjectOps *getOps() const;
25767 # 1100 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25768 inline bool isDelegate() const;
25775 inline bool inDictionaryMode() const;
25777 const Value &getSlot(uint32_t slot) const {
25779 uint32_t fixed = numFixedSlots();
25781 return fixedSlots()[slot];
25782 return slots[slot - fixed];
25785 HeapSlot *getSlotAddressUnchecked(uint32_t slot) {
25786 uint32_t fixed = numFixedSlots();
25788 return fixedSlots() + slot;
25789 return slots + (slot - fixed);
25792 HeapSlot *getSlotAddress(uint32_t slot) {
25799 return getSlotAddressUnchecked(slot);
25802 HeapSlot &getSlotRef(uint32_t slot) {
25804 return *getSlotAddress(slot);
25807 inline HeapSlot &nativeGetSlotRef(uint32_t slot);
25808 inline const Value &nativeGetSlot(uint32_t slot) const;
25810 inline void setSlot(uint32_t slot, const Value &value);
25811 inline void initSlot(uint32_t slot, const Value &value);
25812 inline void initSlotUnchecked(uint32_t slot, const Value &value);
25816 HeapSlot &getFixedSlotRef(uint32_t slot) {
25818 return fixedSlots()[slot];
25821 const Value &getFixedSlot(uint32_t slot) const {
25823 return fixedSlots()[slot];
25826 inline void setFixedSlot(uint32_t slot, const Value &value);
25827 inline void initFixedSlot(uint32_t slot, const Value &value);
25835 static inline uint32_t dynamicSlotsCount(uint32_t nfixed, uint32_t span);
25838 inline size_t sizeOfThis() const;
25842 ObjectElements * getElementsHeader() const {
25843 return ObjectElements::fromElements(elements);
25846 ElementsHeader & elementsHeader() const {
25847 __builtin_unreachable();
25848 return *ElementsHeader::fromElements(elements);
25851 inline HeapSlot *fixedElements() const {
25854 moz_static_assert56
25855 # 1184 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h"
25856 [(2 * sizeof(Value) == sizeof(ObjectElements)) ? 1 : -1]
25859 return &fixedSlots()[2];
25862 void setFixedElements() { this->elements = fixedElements(); }
25864 inline bool hasDynamicElements() const {
25872 return elements != emptyObjectElements && elements != fixedElements();
25876 static inline void readBarrier(ObjectImpl *obj);
25877 static inline void writeBarrierPre(ObjectImpl *obj);
25878 static inline void writeBarrierPost(ObjectImpl *obj, void *addr);
25879 inline void privateWriteBarrierPre(void **oldval);
25880 inline void privateWriteBarrierPost(void **oldval);
25881 void markChildren(JSTracer *trc);
25885 inline void *&privateRef(uint32_t nfixed) const;
25887 inline bool hasPrivate() const;
25888 inline void *getPrivate() const;
25889 inline void setPrivate(void *data);
25890 inline void setPrivateUnbarriered(void *data);
25891 inline void initPrivate(void *data);
25894 inline void *getPrivate(uint32_t nfixed) const;
25897 static size_t offsetOfShape() { return __builtin_offsetof (ObjectImpl, shape_); }
25898 HeapPtrShape *addressOfShape() { return &shape_; }
25900 static size_t offsetOfType() { return __builtin_offsetof (ObjectImpl, type_); }
25901 HeapPtrTypeObject *addressOfType() { return &type_; }
25903 static size_t offsetOfElements() { return __builtin_offsetof (ObjectImpl, elements); }
25904 static size_t offsetOfFixedElements() {
25905 return sizeof(ObjectImpl) + sizeof(ObjectElements);
25908 static size_t getFixedSlotOffset(size_t slot) {
25909 return sizeof(ObjectImpl) + slot * sizeof(Value);
25911 static size_t getPrivateDataOffset(size_t nfixed) { return getFixedSlotOffset(nfixed); }
25912 static size_t offsetOfSlots() { return __builtin_offsetof (ObjectImpl, slots); }
25916 ObjectValue(ObjectImpl &obj)
25919 v.setObject(*obj.asObjectPtr());
25924 GetOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index, PropDesc *desc);
25928 GetElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver, uint32_t index, Value *vp);
25931 DefineElement(JSContext *cx, ObjectImpl *obj, uint32_t index, const PropDesc &desc,
25932 bool shouldThrow, bool *succeeded);
25936 SetElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver, uint32_t index, const Value &v,
25940 HasElement(JSContext *cx, ObjectImpl *obj, uint32_t index, bool *found);
25943 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h" 2
25944 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h" 1
25945 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h"
25951 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatom.h" 1
25952 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h" 2
25954 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsstr.h" 1
25964 # 1 "/usr/include/ctype.h" 1 3 4
25965 # 25 "/usr/include/ctype.h" 3 4
25972 # 45 "/usr/include/ctype.h" 3 4
25973 #define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8))
25978 _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
25979 _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
25980 _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
25981 _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
25982 _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
25983 _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
25984 _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
25985 _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
25986 _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
25987 _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
25988 _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
25989 _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
25991 # 81 "/usr/include/ctype.h" 3 4
25992 extern __const unsigned short int **__ctype_b_loc (void)
25993 throw () __attribute__ ((__const));
25994 extern __const __int32_t **__ctype_tolower_loc (void)
25995 throw () __attribute__ ((__const));
25996 extern __const __int32_t **__ctype_toupper_loc (void)
25997 throw () __attribute__ ((__const));
26004 #define __isctype_f(type) __extern_inline int is ##type (int __c) __THROW { return (*__ctype_b_loc ())[(int) (__c)] & (unsigned short int) _IS ##type; }
26012 #define __isascii(c) (((c) & ~0x7f) == 0)
26013 #define __toascii(c) ((c) & 0x7f)
26015 #define __exctype(name) extern int name (int) __THROW
26023 extern int isalnum (int) throw ();
26024 extern int isalpha (int) throw ();
26025 extern int iscntrl (int) throw ();
26026 extern int isdigit (int) throw ();
26027 extern int islower (int) throw ();
26028 extern int isgraph (int) throw ();
26029 extern int isprint (int) throw ();
26030 extern int ispunct (int) throw ();
26031 extern int isspace (int) throw ();
26032 extern int isupper (int) throw ();
26033 extern int isxdigit (int) throw ();
26037 extern int tolower (int __c) throw ();
26040 extern int toupper (int __c) throw ();
26049 extern int isblank (int) throw ();
26056 extern int isctype (int __c, int __mask) throw ();
26063 extern int isascii (int __c) throw ();
26067 extern int toascii (int __c) throw ();
26071 extern int _toupper (int) throw ();
26072 extern int _tolower (int) throw ();
26076 #define __tobody(c,f,a,args) (__extension__ ({ int __res; if (sizeof (c) > 1) { if (__builtin_constant_p (c)) { int __c = (c); __res = __c < -128 || __c > 255 ? __c : (a)[__c]; } else __res = f args; } else __res = (a)[(int) (c)]; __res; }))
26077 # 263 "/usr/include/ctype.h" 3 4
26078 #define __isctype_l(c,type,locale) ((locale)->__ctype_b[(int) (c)] & (unsigned short int) type)
26081 #define __exctype_l(name) extern int name (int, __locale_t) __THROW
26088 extern int isalnum_l (int, __locale_t) throw ();
26089 extern int isalpha_l (int, __locale_t) throw ();
26090 extern int iscntrl_l (int, __locale_t) throw ();
26091 extern int isdigit_l (int, __locale_t) throw ();
26092 extern int islower_l (int, __locale_t) throw ();
26093 extern int isgraph_l (int, __locale_t) throw ();
26094 extern int isprint_l (int, __locale_t) throw ();
26095 extern int ispunct_l (int, __locale_t) throw ();
26096 extern int isspace_l (int, __locale_t) throw ();
26097 extern int isupper_l (int, __locale_t) throw ();
26098 extern int isxdigit_l (int, __locale_t) throw ();
26100 extern int isblank_l (int, __locale_t) throw ();
26104 extern int __tolower_l (int __c, __locale_t __l) throw ();
26105 extern int tolower_l (int __c, __locale_t __l) throw ();
26108 extern int __toupper_l (int __c, __locale_t __l) throw ();
26109 extern int toupper_l (int __c, __locale_t __l) throw ();
26110 # 349 "/usr/include/ctype.h" 3 4
26112 # 11 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsstr.h" 2
26120 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Unicode.h" 1
26126 #define Unicode_h__
26127 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Unicode.h"
26128 extern const bool js_isidstart[];
26129 extern const bool js_isident[];
26130 extern const bool js_isspace[];
26133 namespace unicode {
26134 # 68 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Unicode.h"
26139 IDENTIFIER_PART = 1 << 2,
26141 ENCLOSING_MARK = 1 << 4,
26142 COMBINING_SPACING_MARK = 1 << 5
26146 const jschar BYTE_ORDER_MARK2 = 0xFFFE;
26147 const jschar NO_BREAK_SPACE = 0x00A0;
26149 class CharacterInfo {
26150 # 103 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Unicode.h"
26152 uint16_t upperCase;
26153 uint16_t lowerCase;
26156 inline bool isSpace() const {
26157 return flags & CharFlag::SPACE;
26160 inline bool isLetter() const {
26161 return flags & CharFlag::LETTER;
26164 inline bool isIdentifierPart() const {
26165 return flags & (CharFlag::IDENTIFIER_PART | CharFlag::LETTER);
26168 inline bool isEnclosingMark() const {
26169 return flags & CharFlag::ENCLOSING_MARK;
26172 inline bool isCombiningSpacingMark() const {
26173 return flags & CharFlag::COMBINING_SPACING_MARK;
26177 extern const uint8_t index1[];
26178 extern const uint8_t index2[];
26179 extern const CharacterInfo js_charinfo[];
26181 inline const CharacterInfo&
26182 CharInfo(jschar code)
26184 size_t index = index1[code >> 6];
26185 index = index2[(index << 6) + (code & 0x3f)];
26187 return js_charinfo[index];
26191 IsIdentifierStart(jschar ch)
26193 # 154 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Unicode.h"
26195 return js_isidstart[ch];
26197 return CharInfo(ch).isLetter();
26201 IsIdentifierPart(jschar ch)
26206 return js_isident[ch];
26208 return CharInfo(ch).isIdentifierPart();
26212 IsLetter(jschar ch)
26214 return CharInfo(ch).isLetter();
26220 # 192 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Unicode.h"
26222 return js_isspace[ch];
26224 if (ch == NO_BREAK_SPACE)
26227 return CharInfo(ch).isSpace();
26231 IsSpaceOrBOM2(jschar ch)
26234 return js_isspace[ch];
26237 if (ch == NO_BREAK_SPACE || ch == BYTE_ORDER_MARK2)
26240 return CharInfo(ch).isSpace();
26244 ToUpperCase(jschar ch)
26246 const CharacterInfo &info = CharInfo(ch);
26252 if (info.flags & CharFlag::NO_DELTA)
26253 return info.upperCase;
26255 return uint16_t(ch) + info.upperCase;
26259 ToLowerCase(jschar ch)
26261 const CharacterInfo &info = CharInfo(ch);
26263 if (info.flags & CharFlag::NO_DELTA)
26264 return info.lowerCase;
26266 return uint16_t(ch) + info.lowerCase;
26272 IsXMLSpace(jschar ch)
26274 return ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n';
26278 IsXMLNamespaceStart(jschar ch)
26283 return CharInfo(ch).isCombiningSpacingMark() || IsIdentifierStart(ch);
26287 IsXMLNamespacePart(jschar ch)
26289 if (ch == '.' || ch == '-' || ch == '_')
26292 return CharInfo(ch).isEnclosingMark() || IsIdentifierPart(ch);
26296 IsXMLNameStart(jschar ch)
26298 if (ch == '_' || ch == ':')
26301 return CharInfo(ch).isCombiningSpacingMark() || IsIdentifierStart(ch);
26305 IsXMLNamePart(jschar ch)
26307 if (ch == '.' || ch == '-' || ch == '_' || ch == ':')
26310 return CharInfo(ch).isEnclosingMark() || IsIdentifierPart(ch);
26316 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsstr.h" 2
26321 class StringBuffer;
26322 # 32 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsstr.h"
26323 class StringSegmentRange;
26324 class MutatingRopeSegmentRange;
26334 js_ConcatStrings(JSContext *cx, js::HandleString s1, js::HandleString s2);
26337 js_toLowerCase(JSContext *cx, JSString *str);
26340 js_toUpperCase(JSContext *cx, JSString *str);
26342 struct JSSubString {
26344 const jschar *chars;
26347 extern jschar js_empty_ucstr[];
26348 extern JSSubString js_EmptySubString;
26354 #define JS7_ISDEC(c) ((((unsigned)(c)) - '0') <= 9)
26355 #define JS7_UNDEC(c) ((c) - '0')
26356 #define JS7_ISHEX(c) ((c) < 128 && isxdigit(c))
26357 #define JS7_UNHEX(c) (unsigned)(JS7_ISDEC(c) ? (c) - '0' : 10 + tolower(c) - 'a')
26358 #define JS7_ISLET(c) ((c) < 128 && isalpha(c))
26362 js_InitStringClass(JSContext *cx, JSObject *obj);
26364 extern const char js_escape_str[];
26365 extern const char js_unescape_str[];
26366 extern const char js_uneval_str[];
26367 extern const char js_decodeURI_str[];
26368 extern const char js_encodeURI_str[];
26369 extern const char js_decodeURIComponent_str[];
26370 extern const char js_encodeURIComponent_str[];
26373 extern JSFixedString *
26374 js_NewString(JSContext *cx, jschar *chars, size_t length);
26376 extern JSLinearString *
26377 js_NewDependentString(JSContext *cx, JSString *base, size_t start, size_t length);
26380 extern JSFixedString *
26381 js_NewStringCopyN(JSContext *cx, const jschar *s, size_t n);
26383 extern JSFixedString *
26384 js_NewStringCopyN(JSContext *cx, const char *s, size_t n);
26387 extern JSFixedString *
26388 js_NewStringCopyZ(JSContext *cx, const jschar *s);
26390 extern JSFixedString *
26391 js_NewStringCopyZ(JSContext *cx, const char *s);
26396 extern const char *
26397 js_ValueToPrintable(JSContext *cx, const js::Value &,
26398 JSAutoByteString *bytes, bool asSource = false);
26407 ToStringSlow(JSContext *cx, const Value &v);
26414 static __attribute__((always_inline)) inline JSString *
26415 ToString(JSContext *cx, const js::Value &v)
26418 return v.toString();
26419 return ToStringSlow(cx, v);
26428 ValueToStringBuffer(JSContext *cx, const Value &v, StringBuffer &sb);
26436 extern __attribute__((visibility("default"))) JSString *
26437 js_ValueToSource(JSContext *cx, const js::Value &v);
26446 EqualStrings(JSContext *cx, JSString *str1, JSString *str2, bool *result);
26450 EqualStrings(JSContext *cx, JSLinearString *str1, JSLinearString *str2, bool *result) ;
26454 EqualStrings(JSLinearString *str1, JSLinearString *str2);
26461 CompareStrings(JSContext *cx, JSString *str1, JSString *str2, int32_t *result);
26467 StringEqualsAscii(JSLinearString *str, const char *asciiBytes);
26472 js_strlen(const jschar *s);
26475 js_strchr(const jschar *s, jschar c);
26478 js_strchr_limit(const jschar *s, jschar c, const jschar *limit);
26480 static __attribute__((always_inline)) inline void
26481 js_strncpy(jschar *dst, const jschar *src, size_t nelem)
26483 return js::PodCopy(dst, src, nelem);
26494 InflateString(JSContext *cx, const char *bytes, size_t *length,
26495 FlationCoding fc = NormalEncoding);
26498 DeflateString(JSContext *cx, const jschar *chars, size_t length);
26499 # 216 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsstr.h"
26501 InflateStringToBuffer(JSContext *cx, const char *bytes, size_t length,
26502 jschar *chars, size_t *charsLength);
26505 InflateUTF8StringToBuffer(JSContext *cx, const char *bytes, size_t length,
26506 jschar *chars, size_t *charsLength,
26507 FlationCoding fc = NormalEncoding);
26511 GetDeflatedStringLength(JSContext *cx, const jschar *chars, size_t charsLength);
26515 GetDeflatedUTF8StringLength(JSContext *cx, const jschar *chars,
26516 size_t charsLength,
26517 FlationCoding fc = NormalEncoding);
26526 DeflateStringToBuffer(JSContext *cx, const jschar *chars,
26527 size_t charsLength, char *bytes, size_t *length);
26533 DeflateStringToUTF8Buffer(JSContext *cx, const jschar *chars,
26534 size_t charsLength, char *bytes, size_t *length,
26535 FlationCoding fc = NormalEncoding);
26542 str_replace(JSContext *cx, unsigned argc, js::Value *vp);
26545 str_fromCharCode(JSContext *cx, unsigned argc, Value *vp);
26550 js_str_toString(JSContext *cx, unsigned argc, js::Value *vp);
26553 js_str_charAt(JSContext *cx, unsigned argc, js::Value *vp);
26556 js_str_charCodeAt(JSContext *cx, unsigned argc, js::Value *vp);
26563 js_OneUcs4ToUtf8Char(uint8_t *utf8Buffer, uint32_t ucs4Char);
26568 PutEscapedStringImpl(char *buffer, size_t size, FILE *fp, JSLinearString *str, uint32_t quote);
26569 # 295 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsstr.h"
26571 PutEscapedString(char *buffer, size_t size, JSLinearString *str, uint32_t quote)
26573 size_t n = PutEscapedStringImpl(buffer, size, __null, str, quote);
26586 FileEscapedString(FILE *fp, JSLinearString *str, uint32_t quote)
26588 return PutEscapedStringImpl(__null, 0, fp, str, quote) != size_t(-1);
26592 str_match(JSContext *cx, unsigned argc, Value *vp);
26595 str_search(JSContext *cx, unsigned argc, Value *vp);
26598 str_split(JSContext *cx, unsigned argc, Value *vp);
26603 js_String(JSContext *cx, unsigned argc, js::Value *vp);
26604 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h" 2
26610 class JSDependentString;
26611 class JSUndependedString;
26612 class JSExtensibleString;
26613 class JSExternalString;
26614 class JSLinearString;
26615 class JSFixedString;
26621 class StaticStrings;
26622 class PropertyName;
26625 static const size_t UINT32_CHAR_BUFFER_LENGTH = sizeof("4294967295") - 1;
26628 # 131 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h"
26629 class JSString : public js::gc::Cell
26632 static const size_t NUM_INLINE_CHARS = 2 * sizeof(void *) / sizeof(jschar);
26637 size_t lengthAndFlags;
26639 const jschar *chars;
26643 jschar inlineStorage[NUM_INLINE_CHARS];
26646 JSLinearString *base;
26649 const JSStringFinalizer *externalFinalizer;
26660 # 200 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h"
26661 static const size_t LENGTH_SHIFT = 4;
26662 static const size_t FLAGS_MASK = (((uint32_t)1 << (LENGTH_SHIFT)) - 1);
26664 static const size_t ROPE_BIT = ((uint32_t)1 << (0));
26666 static const size_t DEPENDENT_FLAGS = ((uint32_t)1 << (1));
26667 static const size_t EXTENSIBLE_FLAGS = ((uint32_t)1 << (2));
26668 static const size_t FIXED_FLAGS = ((uint32_t)1 << (1)) | ((uint32_t)1 << (2));
26669 static const size_t UNDEPENDED_FLAGS = ((uint32_t)1 << (1)) | ((uint32_t)1 << (3));
26671 static const size_t ATOM_MASK = (((uint32_t)1 << (3)) - 1);
26672 static const size_t NON_STATIC_ATOM_FLAGS = ((uint32_t)1 << (3));
26674 static const size_t MAX_LENGTH = ((uint32_t)1 << (32 - LENGTH_SHIFT)) - 1;
26676 size_t buildLengthAndFlags(size_t length, size_t flags) {
26679 return (length << LENGTH_SHIFT) | flags;
26687 static inline bool validateLength(JSContext *cx, size_t length);
26689 static void staticAsserts() {
26690 typedef int moz_static_assert57[((8 * 4) >= 32) ? 1 : -1];
26692 moz_static_assert58
26693 # 230 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h"
26694 [(((JSString::MAX_LENGTH << JSString::LENGTH_SHIFT) >> JSString::LENGTH_SHIFT) == JSString::MAX_LENGTH) ? 1 : -1]
26697 moz_static_assert59
26698 # 232 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h"
26699 [(sizeof(JSString) == __builtin_offsetof (JSString, d.inlineStorage) + NUM_INLINE_CHARS * sizeof(jschar)) ? 1 : -1]
26702 moz_static_assert60
26703 # 234 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h"
26704 [(__builtin_offsetof (JSString, d.u1.chars) == __builtin_offsetof (js::shadow::Atom, chars)) ? 1 : -1]
26709 friend class JSRope;
26714 __attribute__((always_inline)) inline
26715 size_t length() const {
26716 return d.lengthAndFlags >> LENGTH_SHIFT;
26719 __attribute__((always_inline)) inline
26720 bool empty() const {
26721 return d.lengthAndFlags <= FLAGS_MASK;
26729 inline const jschar *getChars(JSContext *cx);
26730 inline const jschar *getCharsZ(JSContext *cx);
26734 inline JSLinearString *ensureLinear(JSContext *cx);
26735 inline JSFlatString *ensureFlat(JSContext *cx);
26736 inline JSFixedString *ensureFixed(JSContext *cx);
26740 __attribute__((always_inline)) inline
26741 bool isRope() const {
26742 bool rope = d.lengthAndFlags & ROPE_BIT;
26747 __attribute__((always_inline)) inline
26748 JSRope &asRope() const {
26750 return *(JSRope *)this;
26753 __attribute__((always_inline)) inline
26754 bool isLinear() const {
26755 return !(d.lengthAndFlags & ROPE_BIT);
26758 __attribute__((always_inline)) inline
26759 JSLinearString &asLinear() const {
26761 return *(JSLinearString *)this;
26764 __attribute__((always_inline)) inline
26765 bool isDependent() const {
26766 return (d.lengthAndFlags & FLAGS_MASK) == DEPENDENT_FLAGS;
26769 __attribute__((always_inline)) inline
26770 JSDependentString &asDependent() const {
26772 return *(JSDependentString *)this;
26775 __attribute__((always_inline)) inline
26776 bool isFlat() const {
26777 return isLinear() && !isDependent();
26780 __attribute__((always_inline)) inline
26781 JSFlatString &asFlat() const {
26783 return *(JSFlatString *)this;
26786 __attribute__((always_inline)) inline
26787 bool isExtensible() const {
26788 return (d.lengthAndFlags & FLAGS_MASK) == EXTENSIBLE_FLAGS;
26791 __attribute__((always_inline)) inline
26792 JSExtensibleString &asExtensible() const {
26794 return *(JSExtensibleString *)this;
26798 bool isShort() const;
26799 bool isFixed() const;
26800 bool isInline() const;
26802 __attribute__((always_inline)) inline
26803 JSFixedString &asFixed() const {
26805 return *(JSFixedString *)this;
26808 bool isExternal() const;
26810 __attribute__((always_inline)) inline
26811 JSExternalString &asExternal() const {
26813 return *(JSExternalString *)this;
26816 __attribute__((always_inline)) inline
26817 bool isUndepended() const {
26818 return (d.lengthAndFlags & FLAGS_MASK) == UNDEPENDED_FLAGS;
26821 __attribute__((always_inline)) inline
26822 bool isAtom() const {
26823 return !(d.lengthAndFlags & ATOM_MASK);
26826 __attribute__((always_inline)) inline
26827 JSAtom &asAtom() const {
26829 return *(JSAtom *)this;
26834 inline bool hasBase() const {
26835 typedef int moz_static_assert61[((DEPENDENT_FLAGS | ((uint32_t)1 << (3))) == UNDEPENDED_FLAGS) ? 1 : -1];
26836 return (d.lengthAndFlags & (((uint32_t)1 << (3)) - 1)) == DEPENDENT_FLAGS;
26839 inline JSLinearString *base() const {
26841 return d.s.u2.base;
26844 inline void markBase(JSTracer *trc);
26848 inline void finalize(js::FreeOp *fop);
26852 size_t sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf);
26856 static size_t offsetOfLengthAndFlags() {
26857 return __builtin_offsetof (JSString, d.lengthAndFlags);
26860 static size_t offsetOfChars() {
26861 return __builtin_offsetof (JSString, d.u1.chars);
26864 static inline void writeBarrierPre(JSString *str);
26865 static inline void writeBarrierPost(JSString *str, void *addr);
26866 static inline bool needWriteBarrierPre(JSCompartment *comp);
26867 static inline void readBarrier(JSString *str);
26869 static inline js::ThingRootKind rootKind() { return js::THING_ROOT_STRING; }
26878 JSString(const JSString &other) ;
26879 void operator=(const JSString &other) ;
26882 class JSRope : public JSString
26884 enum UsingBarrier { WithIncrementalBarrier, NoBarrier };
26885 template<UsingBarrier b>
26886 JSFlatString *flattenInternal(JSContext *cx);
26888 friend class JSString;
26889 JSFlatString *flatten(JSContext *cx);
26891 void init(JSString *left, JSString *right, size_t length);
26894 static inline JSRope *new_(JSContext *cx, js::HandleString left,
26895 js::HandleString right, size_t length);
26897 inline JSString *leftChild() const {
26902 inline JSString *rightChild() const {
26904 return d.s.u2.right;
26907 inline void markChildren(JSTracer *trc);
26910 typedef int moz_static_assert62[(sizeof(JSRope) == sizeof(JSString)) ? 1 : -1];
26912 class JSLinearString : public JSString
26914 friend class JSString;
26917 JSLinearString *ensureLinear(JSContext *cx) ;
26918 bool isLinear() const ;
26919 JSLinearString &asLinear() const ;
26922 __attribute__((always_inline)) inline
26923 const jschar *chars() const {
26929 typedef int moz_static_assert63[(sizeof(JSLinearString) == sizeof(JSString)) ? 1 : -1];
26931 class JSDependentString : public JSLinearString
26933 friend class JSString;
26934 JSFixedString *undepend(JSContext *cx);
26936 void init(JSLinearString *base, const jschar *chars, size_t length);
26939 bool isDependent() const ;
26940 JSDependentString &asDependent() const ;
26943 static inline JSDependentString *new_(JSContext *cx, JSLinearString *base,
26944 const jschar *chars, size_t length);
26947 typedef int moz_static_assert64[(sizeof(JSDependentString) == sizeof(JSString)) ? 1 : -1];
26949 class JSFlatString : public JSLinearString
26952 JSFlatString *ensureFlat(JSContext *cx) ;
26953 bool isFlat() const ;
26954 JSFlatString &asFlat() const ;
26956 bool isIndexSlow(uint32_t *indexp) const;
26959 __attribute__((always_inline)) inline
26960 const jschar *charsZ() const {
26971 inline bool isIndex(uint32_t *indexp) const {
26972 const jschar *s = chars();
26973 return ((((unsigned)(*s)) - '0') <= 9) && isIndexSlow(indexp);
26981 inline js::PropertyName *toPropertyName(JSContext *cx);
26983 inline void finalize(js::FreeOp *fop);
26986 typedef int moz_static_assert65[(sizeof(JSFlatString) == sizeof(JSString)) ? 1 : -1];
26988 class JSExtensibleString : public JSFlatString
26991 bool isExtensible() const ;
26992 JSExtensibleString &asExtensible() const ;
26995 __attribute__((always_inline)) inline
26996 size_t capacity() const {
26998 return d.s.u2.capacity;
27002 typedef int moz_static_assert66[(sizeof(JSExtensibleString) == sizeof(JSString)) ? 1 : -1];
27004 class JSFixedString : public JSFlatString
27006 void init(const jschar *chars, size_t length);
27009 JSFlatString *ensureFixed(JSContext *cx) ;
27010 bool isFixed() const ;
27011 JSFixedString &asFixed() const ;
27014 static inline JSFixedString *new_(JSContext *cx, const jschar *chars, size_t length);
27021 inline JSAtom *morphAtomizedStringIntoAtom();
27024 typedef int moz_static_assert67[(sizeof(JSFixedString) == sizeof(JSString)) ? 1 : -1];
27026 class JSInlineString : public JSFixedString
27028 static const size_t MAX_INLINE_LENGTH = NUM_INLINE_CHARS - 1;
27031 static inline JSInlineString *new_(JSContext *cx);
27033 inline jschar *init(size_t length);
27035 inline void resetLength(size_t length);
27037 static bool lengthFits(size_t length) {
27038 return length <= MAX_INLINE_LENGTH;
27043 typedef int moz_static_assert68[(sizeof(JSInlineString) == sizeof(JSString)) ? 1 : -1];
27045 class JSShortString : public JSInlineString
27048 static const size_t INLINE_EXTENSION_CHARS = sizeof(JSString::Data) / sizeof(jschar);
27050 static void staticAsserts() {
27051 typedef int moz_static_assert69[(INLINE_EXTENSION_CHARS % js::gc::Cell::CellSize == 0) ? 1 : -1];
27054 moz_static_assert70
27055 # 582 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h"
27056 [(MAX_SHORT_LENGTH + 1 == (sizeof(JSShortString) - __builtin_offsetof (JSShortString, d.inlineStorage)) / sizeof(jschar)) ? 1 : -1]
27061 jschar inlineStorageExtension[INLINE_EXTENSION_CHARS];
27064 static inline JSShortString *new_(JSContext *cx);
27066 jschar *inlineStorageBeforeInit() {
27067 return d.inlineStorage;
27070 inline void initAtOffsetInBuffer(const jschar *chars, size_t length);
27072 static const size_t MAX_SHORT_LENGTH = JSString::NUM_INLINE_CHARS +
27073 INLINE_EXTENSION_CHARS
27076 static bool lengthFits(size_t length) {
27077 return length <= MAX_SHORT_LENGTH;
27082 __attribute__((always_inline)) inline void finalize(js::FreeOp *fop);
27085 typedef int moz_static_assert71[(sizeof(JSShortString) == 2 * sizeof(JSString)) ? 1 : -1];
27087 class JSExternalString : public JSFixedString
27089 void init(const jschar *chars, size_t length, const JSStringFinalizer *fin);
27092 bool isExternal() const ;
27093 JSExternalString &asExternal() const ;
27096 static inline JSExternalString *new_(JSContext *cx, const jschar *chars, size_t length,
27097 const JSStringFinalizer *fin);
27099 const JSStringFinalizer *externalFinalizer() const {
27101 return d.s.u2.externalFinalizer;
27106 inline void finalize(js::FreeOp *fop);
27109 typedef int moz_static_assert72[(sizeof(JSExternalString) == sizeof(JSString)) ? 1 : -1];
27111 class JSUndependedString : public JSFixedString
27120 typedef int moz_static_assert73[(sizeof(JSUndependedString) == sizeof(JSString)) ? 1 : -1];
27122 class JSAtom : public JSFixedString
27125 bool isAtom() const ;
27126 JSAtom &asAtom() const ;
27130 inline js::PropertyName *asPropertyName();
27132 inline void finalize(js::FreeOp *fop);
27139 typedef int moz_static_assert74[(sizeof(JSAtom) == sizeof(JSString)) ? 1 : -1];
27141 class JSInlineAtom : public JSInlineString
27149 typedef int moz_static_assert75[(sizeof(JSInlineAtom) == sizeof(JSInlineString)) ? 1 : -1];
27151 class JSShortAtom : public JSShortString
27159 typedef int moz_static_assert76[(sizeof(JSShortAtom) == sizeof(JSShortString)) ? 1 : -1];
27163 class StaticStrings
27167 static const size_t SMALL_CHAR_LIMIT = 128U;
27168 static const size_t NUM_SMALL_CHARS = 64U;
27170 static const size_t INT_STATIC_LIMIT = 256U;
27172 JSAtom *length2StaticTable[NUM_SMALL_CHARS * NUM_SMALL_CHARS];
27173 JSAtom *intStaticTable[INT_STATIC_LIMIT];
27177 static const size_t UNIT_STATIC_LIMIT = 256U;
27178 JSAtom *unitStaticTable[UNIT_STATIC_LIMIT];
27181 PodArrayZero(unitStaticTable);
27182 PodArrayZero(length2StaticTable);
27183 PodArrayZero(intStaticTable);
27186 bool init(JSContext *cx);
27187 void trace(JSTracer *trc);
27189 static inline bool hasUint(uint32_t u);
27190 inline JSAtom *getUint(uint32_t u);
27192 static inline bool hasInt(int32_t i);
27193 inline JSAtom *getInt(int32_t i);
27195 static inline bool hasUnit(jschar c);
27196 JSAtom *getUnit(jschar c);
27199 inline JSLinearString *getUnitStringForElement(JSContext *cx, JSString *str, size_t index);
27201 static bool isStatic(JSAtom *atom);
27204 inline JSAtom *lookup(const jschar *chars, size_t length);
27207 typedef uint8_t SmallChar;
27208 static const SmallChar INVALID_SMALL_CHAR = -1;
27210 static inline bool fitsInSmallChar(jschar c);
27212 static const SmallChar toSmallChar[];
27214 JSAtom *getLength2(jschar c1, jschar c2);
27215 JSAtom *getLength2(uint32_t u);
27217 # 759 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h"
27218 class PropertyName : public JSAtom
27221 typedef int moz_static_assert77[(sizeof(PropertyName) == sizeof(JSString)) ? 1 : -1];
27223 static __attribute__((always_inline)) inline jsid
27224 NameToId(PropertyName *name)
27226 return NON_INTEGER_ATOM_TO_JSID(name);
27229 typedef HeapPtr<JSAtom> HeapPtrAtom;
27235 __attribute__((always_inline)) inline const jschar *
27236 JSString::getChars(JSContext *cx)
27238 if (JSLinearString *str = ensureLinear(cx))
27239 return str->chars();
27243 __attribute__((always_inline)) inline const jschar *
27244 JSString::getCharsZ(JSContext *cx)
27246 if (JSFlatString *str = ensureFlat(cx))
27247 return str->chars();
27251 __attribute__((always_inline)) inline JSLinearString *
27252 JSString::ensureLinear(JSContext *cx)
27256 : asRope().flatten(cx);
27259 __attribute__((always_inline)) inline JSFlatString *
27260 JSString::ensureFlat(JSContext *cx)
27265 ? asDependent().undepend(cx)
27266 : asRope().flatten(cx);
27269 __attribute__((always_inline)) inline JSFixedString *
27270 JSString::ensureFixed(JSContext *cx)
27272 if (!ensureFlat(cx))
27274 if (isExtensible())
27275 d.lengthAndFlags = buildLengthAndFlags(length(), FIXED_FLAGS);
27279 inline js::PropertyName *
27280 JSAtom::asPropertyName()
27286 return static_cast<js::PropertyName *>(this);
27288 # 34 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h" 2
27292 class AutoPropDescArrayRooter;
27293 class BaseProxyHandler;
27296 struct NativeIterator;
27298 namespace mjit { class Compiler; }
27301 CastAsObject(PropertyOp op)
27303 return (__extension__ (JSObject *) (size_t) (op));
27307 CastAsObject(StrictPropertyOp op)
27309 return (__extension__ (JSObject *) (size_t) (op));
27313 CastAsObjectJsval(PropertyOp op)
27315 return ObjectOrNullValue(CastAsObject(op));
27319 CastAsObjectJsval(StrictPropertyOp op)
27321 return ObjectOrNullValue(CastAsObject(op));
27330 #define JS_PSG(name,getter,flags) {name, 0, (flags) | JSPROP_SHARED | JSPROP_NATIVE_ACCESSORS, (JSPropertyOp)getter, NULL}
27333 #define JS_PSGS(name,getter,setter,flags) {name, 0, (flags) | JSPROP_SHARED | JSPROP_NATIVE_ACCESSORS, (JSPropertyOp)getter, (JSStrictPropertyOp)setter}
27336 #define JS_PS_END {0, 0, 0, 0, 0}
27340 typedef Vector<PropDesc, 1> PropDescArray;
27348 namespace baseops {
27355 extern __attribute__((visibility("default"))) JSBool
27356 LookupProperty(JSContext *cx, HandleObject obj, HandleId id, JSObject **objp,
27357 JSProperty **propp);
27360 LookupProperty(JSContext *cx, HandleObject obj, PropertyName *name,
27361 JSObject **objp, JSProperty **propp)
27363 return LookupProperty(cx, obj, RootedId(cx, NameToId(name)), objp, propp);
27366 extern __attribute__((visibility("default"))) JSBool
27367 LookupElement(JSContext *cx, HandleObject obj, uint32_t index,
27368 JSObject **objp, JSProperty **propp);
27371 DefineProperty(JSContext *cx, HandleObject obj, HandleId id, const js::Value *value,
27372 JSPropertyOp getter, JSStrictPropertyOp setter, unsigned attrs);
27375 DefineElement(JSContext *cx, HandleObject obj, uint32_t index, const js::Value *value,
27376 JSPropertyOp getter, JSStrictPropertyOp setter, unsigned attrs);
27379 GetProperty(JSContext *cx, HandleObject obj, HandleObject receiver, HandleId id, js::Value *vp);
27382 GetElement(JSContext *cx, HandleObject obj, HandleObject receiver, uint32_t index, js::Value *vp);
27385 GetProperty(JSContext *cx, HandleObject obj, HandleId id, js::Value *vp)
27387 return GetProperty(cx, obj, obj, id, vp);
27391 GetElement(JSContext *cx, HandleObject obj, uint32_t index, js::Value *vp)
27393 return GetElement(cx, obj, obj, index, vp);
27397 GetPropertyDefault(JSContext *cx, HandleObject obj, HandleId id, const Value &def, Value *vp);
27400 SetPropertyHelper(JSContext *cx, HandleObject obj, HandleId id, unsigned defineHow,
27401 Value *vp, JSBool strict);
27404 SetPropertyHelper(JSContext *cx, HandleObject obj, PropertyName *name, unsigned defineHow,
27405 Value *vp, JSBool strict)
27407 return SetPropertyHelper(cx, obj, RootedId(cx, NameToId(name)), defineHow, vp, strict);
27411 SetElementHelper(JSContext *cx, HandleObject obj, uint32_t index, unsigned defineHow,
27412 Value *vp, JSBool strict);
27415 TypeOf(JSContext *cx, HandleObject obj);
27418 GetAttributes(JSContext *cx, HandleObject obj, HandleId id, unsigned *attrsp);
27421 SetAttributes(JSContext *cx, HandleObject obj, HandleId id, unsigned *attrsp);
27424 GetElementAttributes(JSContext *cx, HandleObject obj, uint32_t index, unsigned *attrsp);
27427 SetElementAttributes(JSContext *cx, HandleObject obj, uint32_t index, unsigned *attrsp);
27430 DeleteProperty(JSContext *cx, HandleObject obj, HandlePropertyName name, Value *rval, JSBool strict);
27433 DeleteElement(JSContext *cx, HandleObject obj, uint32_t index, Value *rval, JSBool strict);
27436 DeleteSpecial(JSContext *cx, HandleObject obj, HandleSpecialId sid, Value *rval, JSBool strict);
27439 DeleteGeneric(JSContext *cx, HandleObject obj, HandleId id, Value *rval, JSBool strict);
27445 DefaultValue(JSContext *cx, HandleObject obj, JSType hint, Value *vp);
27447 extern Class ArrayClass;
27448 extern Class ArrayBufferClass;
27449 extern Class BlockClass;
27450 extern Class BooleanClass;
27451 extern Class CallableObjectClass;
27452 extern Class DataViewClass;
27453 extern Class DateClass;
27454 extern Class ErrorClass;
27455 extern Class ElementIteratorClass;
27456 extern Class GeneratorClass;
27457 extern Class IteratorClass;
27458 extern Class JSONClass;
27459 extern Class MathClass;
27460 extern Class NumberClass;
27461 extern Class NormalArgumentsObjectClass;
27462 extern Class ObjectClass;
27463 extern Class ProxyClass;
27464 extern Class RegExpClass;
27465 extern Class RegExpStaticsClass;
27466 extern Class SlowArrayClass;
27467 extern Class StopIterationClass;
27468 extern Class StringClass;
27469 extern Class StrictArgumentsObjectClass;
27470 extern Class WeakMapClass;
27471 extern Class WithClass;
27472 extern Class XMLFilterClass;
27474 class ArgumentsObject;
27475 class ArrayBufferObject;
27477 class BooleanObject;
27478 class ClonedBlockObject;
27479 class DataViewObject;
27480 class DebugScopeObject;
27481 class DeclEnvObject;
27482 class ElementIteratorObject;
27483 class GlobalObject;
27484 class NestedScopeObject;
27485 class NewObjectCache;
27486 class NormalArgumentsObject;
27487 class NumberObject;
27489 class StaticBlockObject;
27490 class StrictArgumentsObject;
27491 class StringObject;
27492 class RegExpObject;
27496 # 252 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
27497 struct JSObject : public js::ObjectImpl
27500 friend struct js::Shape;
27501 friend struct js::GCMarker;
27502 friend class js::NewObjectCache;
27505 void makeLazyType(JSContext *cx);
27512 bool setLastProperty(JSContext *cx, const js::Shape *shape);
27515 inline void setLastPropertyInfallible(const js::Shape *shape);
27518 static inline JSObject *create(JSContext *cx,
27519 js::gc::AllocKind kind,
27520 js::HandleShape shape,
27521 js::HandleTypeObject type,
27522 js::HeapSlot *slots);
27525 static inline JSObject *createDenseArray(JSContext *cx,
27526 js::gc::AllocKind kind,
27527 js::HandleShape shape,
27528 js::HandleTypeObject type,
27536 inline void removeLastProperty(JSContext *cx);
27537 inline bool canRemoveLastProperty();
27543 bool setSlotSpan(JSContext *cx, uint32_t span);
27545 inline bool nativeContains(JSContext *cx, jsid id);
27546 inline bool nativeContains(JSContext *cx, const js::Shape &shape);
27549 static const uint32_t NELEMENTS_LIMIT = ((uint32_t)1 << (28));
27552 inline bool setDelegate(JSContext *cx);
27554 inline bool isBoundFunction() const;
27561 inline bool isSystem() const;
27562 inline bool setSystem(JSContext *cx);
27564 inline bool hasSpecialEquality() const;
27566 inline bool watched() const;
27567 inline bool setWatched(JSContext *cx);
27570 inline bool isVarObj();
27571 inline bool setVarObj(JSContext *cx);
27579 inline bool hasUncacheableProto() const;
27580 inline bool setUncacheableProto(JSContext *cx);
27582 bool generateOwnShape(JSContext *cx, js::Shape *newShape = __null) {
27583 return replaceWithNewEquivalentShape(cx, lastProperty(), newShape);
27587 js::Shape *replaceWithNewEquivalentShape(JSContext *cx, js::Shape *existingShape,
27588 js::Shape *newShape = __null);
27590 enum GenerateShape {
27595 bool setFlag(JSContext *cx, uint32_t flag,
27596 GenerateShape generateShape = GENERATE_NONE);
27599 inline bool nativeEmpty() const;
27601 bool shadowingShapeChange(JSContext *cx, const js::Shape &shape);
27604 inline bool isIndexed() const;
27606 inline uint32_t propertyCount() const;
27608 inline bool hasShapeTable() const;
27610 inline size_t computedSizeOfThisSlotsElements() const;
27612 inline void sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf,
27613 size_t *slotsSize, size_t *elementsSize,
27614 size_t *miscSize) const;
27616 static const uint32_t MAX_FIXED_SLOTS = 16;
27623 inline bool isFixedSlot(size_t slot);
27626 inline size_t dynamicSlotIndex(size_t slot);
27629 inline const js::HeapSlot *getRawSlots();
27636 bool growSlots(JSContext *cx, uint32_t oldCount, uint32_t newCount);
27637 void shrinkSlots(JSContext *cx, uint32_t oldCount, uint32_t newCount);
27639 bool hasDynamicSlots() const { return slots != __null; }
27642 inline bool updateSlotsForSpan(JSContext *cx, size_t oldSpan, size_t newSpan);
27649 inline void prepareSlotRangeForOverwrite(size_t start, size_t end);
27650 inline void prepareElementRangeForOverwrite(size_t start, size_t end);
27652 void rollbackProperties(JSContext *cx, uint32_t slotSpan);
27654 inline void nativeSetSlot(unsigned slot, const js::Value &value);
27655 inline void nativeSetSlotWithType(JSContext *cx, const js::Shape *shape, const js::Value &value);
27657 inline const js::Value &getReservedSlot(unsigned index) const;
27658 inline js::HeapSlot &getReservedSlotRef(unsigned index);
27659 inline void initReservedSlot(unsigned index, const js::Value &v);
27660 inline void setReservedSlot(unsigned index, const js::Value &v);
27666 inline bool setSingletonType(JSContext *cx);
27668 inline js::types::TypeObject *getType(JSContext *cx);
27670 const js::HeapPtr<js::types::TypeObject> &typeFromGC() const {
27675 inline void setType(js::types::TypeObject *newType);
27677 js::types::TypeObject *getNewType(JSContext *cx, JSFunction *fun = __null);
27678 # 443 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
27679 inline bool setIteratedSingleton(JSContext *cx);
27685 bool setNewTypeUnknown(JSContext *cx);
27688 bool splicePrototype(JSContext *cx, JSObject *proto);
27694 bool shouldSplicePrototype(JSContext *cx);
27695 # 487 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
27696 inline JSObject *getParent() const;
27697 static bool setParent(JSContext *cx, js::HandleObject obj, js::HandleObject newParent);
27704 inline JSObject *enclosingScope();
27706 inline js::GlobalObject &global() const;
27709 inline JSPrincipals *principals(JSContext *cx);
27712 inline bool clearType(JSContext *cx);
27713 bool clearParent(JSContext *cx);
27720 enum ImmutabilityType { SEAL, FREEZE };
27728 bool sealOrFreeze(JSContext *cx, ImmutabilityType it);
27730 bool isSealedOrFrozen(JSContext *cx, ImmutabilityType it, bool *resultp);
27732 static inline unsigned getSealedOrFrozenAttributes(unsigned attrs, ImmutabilityType it);
27735 bool preventExtensions(JSContext *cx);
27738 inline bool seal(JSContext *cx) { return sealOrFreeze(cx, SEAL); }
27740 bool freeze(JSContext *cx) { return sealOrFreeze(cx, FREEZE); }
27742 bool isSealed(JSContext *cx, bool *resultp) { return isSealedOrFrozen(cx, SEAL, resultp); }
27743 bool isFrozen(JSContext *cx, bool *resultp) { return isSealedOrFrozen(cx, FREEZE, resultp); }
27747 inline bool ensureElements(JSContext *cx, unsigned cap);
27748 bool growElements(JSContext *cx, unsigned cap);
27749 void shrinkElements(JSContext *cx, unsigned cap);
27751 inline js::ElementIteratorObject *asElementIterator();
27757 bool allocateSlowArrayElements(JSContext *cx);
27759 inline uint32_t getArrayLength() const;
27760 inline void setArrayLength(JSContext *cx, uint32_t length);
27762 inline uint32_t getDenseArrayCapacity();
27763 inline void setDenseArrayLength(uint32_t length);
27764 inline void setDenseArrayInitializedLength(uint32_t length);
27765 inline void ensureDenseArrayInitializedLength(JSContext *cx, unsigned index, unsigned extra);
27766 inline void setDenseArrayElement(unsigned idx, const js::Value &val);
27767 inline void initDenseArrayElement(unsigned idx, const js::Value &val);
27768 inline void setDenseArrayElementWithType(JSContext *cx, unsigned idx, const js::Value &val);
27769 inline void initDenseArrayElementWithType(JSContext *cx, unsigned idx, const js::Value &val);
27770 inline void copyDenseArrayElements(unsigned dstStart, const js::Value *src, unsigned count);
27771 inline void initDenseArrayElements(unsigned dstStart, const js::Value *src, unsigned count);
27772 inline void moveDenseArrayElements(unsigned dstStart, unsigned srcStart, unsigned count);
27773 inline void moveDenseArrayElementsUnbarriered(unsigned dstStart, unsigned srcStart, unsigned count);
27774 inline bool denseArrayHasInlineSlots() const;
27777 inline void markDenseArrayNotPacked(JSContext *cx);
27778 # 577 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
27779 enum EnsureDenseResult { ED_OK, ED_FAILED, ED_SPARSE };
27780 inline EnsureDenseResult ensureDenseArrayElements(JSContext *cx, unsigned index, unsigned extra);
27786 bool willBeSparseDenseArray(unsigned requiredCapacity, unsigned newElementsHint);
27788 static bool makeDenseArraySlow(JSContext *cx, js::HandleObject obj);
27795 bool arrayGetOwnDataElement(JSContext *cx, size_t i, js::Value *vp);
27802 static const uint32_t JSSLOT_DATE_UTC_TIME = 0;
27809 static const uint32_t JSSLOT_DATE_COMPONENTS_START = 1;
27811 static const uint32_t JSSLOT_DATE_LOCAL_TIME = 1;
27812 static const uint32_t JSSLOT_DATE_LOCAL_YEAR = 2;
27813 static const uint32_t JSSLOT_DATE_LOCAL_MONTH = 3;
27814 static const uint32_t JSSLOT_DATE_LOCAL_DATE = 4;
27815 static const uint32_t JSSLOT_DATE_LOCAL_DAY = 5;
27816 static const uint32_t JSSLOT_DATE_LOCAL_HOURS = 6;
27817 static const uint32_t JSSLOT_DATE_LOCAL_MINUTES = 7;
27818 static const uint32_t JSSLOT_DATE_LOCAL_SECONDS = 8;
27820 static const uint32_t DATE_CLASS_RESERVED_SLOTS = 9;
27822 inline const js::Value &getDateUTCTime() const;
27823 inline void setDateUTCTime(const js::Value &pthis);
27829 friend struct JSFunction;
27831 inline JSFunction *toFunction();
27832 inline const JSFunction *toFunction() const;
27839 static const uint32_t ITER_CLASS_NFIXED_SLOTS = 1;
27841 inline js::NativeIterator *getNativeIterator() const;
27842 inline void setNativeIterator(js::NativeIterator *);
27843 # 653 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
27845 static const uint32_t JSSLOT_NAME_PREFIX = 0;
27846 static const uint32_t JSSLOT_NAME_URI = 1;
27848 static const uint32_t JSSLOT_NAMESPACE_DECLARED = 2;
27850 static const uint32_t JSSLOT_QNAME_LOCAL_NAME = 2;
27853 static const uint32_t NAMESPACE_CLASS_RESERVED_SLOTS = 3;
27854 static const uint32_t QNAME_CLASS_RESERVED_SLOTS = 3;
27856 inline JSLinearString *getNamePrefix() const;
27857 inline jsval getNamePrefixVal() const;
27858 inline void setNamePrefix(JSLinearString *prefix);
27859 inline void clearNamePrefix();
27861 inline JSLinearString *getNameURI() const;
27862 inline jsval getNameURIVal() const;
27863 inline void setNameURI(JSLinearString *uri);
27865 inline jsval getNamespaceDeclared() const;
27866 inline void setNamespaceDeclared(jsval decl);
27868 inline JSAtom *getQNameLocalName() const;
27869 inline jsval getQNameLocalNameVal() const;
27870 inline void setQNameLocalName(JSAtom *name);
27875 inline bool isCallable();
27877 inline void finish(js::FreeOp *fop);
27878 __attribute__((always_inline)) inline void finalize(js::FreeOp *fop);
27880 inline bool hasProperty(JSContext *cx, js::HandleId id, bool *foundp, unsigned flags = 0);
27881 # 698 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
27882 bool allocSlot(JSContext *cx, uint32_t *slotp);
27883 void freeSlot(JSContext *cx, uint32_t slot);
27886 static bool reportReadOnly(JSContext *cx, jsid id, unsigned report = 0x0);
27887 bool reportNotConfigurable(JSContext* cx, jsid id, unsigned report = 0x0);
27888 bool reportNotExtensible(JSContext *cx, unsigned report = 0x0);
27896 bool callMethod(JSContext *cx, js::HandleId id, unsigned argc, js::Value *argv, js::Value *vp);
27899 js::Shape *getChildProperty(JSContext *cx, js::Shape *parent, js::StackShape &child);
27909 js::Shape *addPropertyInternal(JSContext *cx, jsid id,
27910 JSPropertyOp getter, JSStrictPropertyOp setter,
27911 uint32_t slot, unsigned attrs,
27912 unsigned flags, int shortid, js::Shape **spp,
27913 bool allowDictionary);
27916 bool toDictionaryMode(JSContext *cx);
27918 struct TradeGutsReserved;
27919 static bool ReserveForTradeGuts(JSContext *cx, JSObject *a, JSObject *b,
27920 TradeGutsReserved &reserved);
27922 static void TradeGuts(JSContext *cx, JSObject *a, JSObject *b,
27923 TradeGutsReserved &reserved);
27927 js::Shape *addProperty(JSContext *cx, jsid id,
27928 JSPropertyOp getter, JSStrictPropertyOp setter,
27929 uint32_t slot, unsigned attrs,
27930 unsigned flags, int shortid, bool allowDictionary = true);
27933 js::Shape *addDataProperty(JSContext *cx, jsid id, uint32_t slot, unsigned attrs) {
27935 return addProperty(cx, id, __null, __null, slot, attrs, 0, 0);
27939 js::Shape *putProperty(JSContext *cx, jsid id,
27940 JSPropertyOp getter, JSStrictPropertyOp setter,
27941 uint32_t slot, unsigned attrs,
27942 unsigned flags, int shortid);
27944 putProperty(JSContext *cx, js::PropertyName *name,
27945 JSPropertyOp getter, JSStrictPropertyOp setter,
27946 uint32_t slot, unsigned attrs, unsigned flags, int shortid) {
27947 return putProperty(cx, js::NameToId(name), getter, setter, slot, attrs, flags, shortid);
27951 js::Shape *changeProperty(JSContext *cx, js::Shape *shape, unsigned attrs, unsigned mask,
27952 JSPropertyOp getter, JSStrictPropertyOp setter);
27954 inline bool changePropertyAttributes(JSContext *cx, js::Shape *shape, unsigned attrs);
27957 bool removeProperty(JSContext *cx, jsid id);
27960 void clear(JSContext *cx);
27962 inline JSBool lookupGeneric(JSContext *cx, js::HandleId id, JSObject **objp, JSProperty **propp);
27963 inline JSBool lookupProperty(JSContext *cx, js::PropertyName *name, JSObject **objp, JSProperty **propp);
27964 inline JSBool lookupElement(JSContext *cx, uint32_t index,
27965 JSObject **objp, JSProperty **propp);
27966 inline JSBool lookupSpecial(JSContext *cx, js::SpecialId sid,
27967 JSObject **objp, JSProperty **propp);
27969 inline JSBool defineGeneric(JSContext *cx, js::HandleId id, const js::Value &value,
27970 JSPropertyOp getter = JS_PropertyStub,
27971 JSStrictPropertyOp setter = JS_StrictPropertyStub,
27972 unsigned attrs = 0x01);
27973 inline JSBool defineProperty(JSContext *cx, js::PropertyName *name, const js::Value &value,
27974 JSPropertyOp getter = JS_PropertyStub,
27975 JSStrictPropertyOp setter = JS_StrictPropertyStub,
27976 unsigned attrs = 0x01);
27978 inline JSBool defineElement(JSContext *cx, uint32_t index, const js::Value &value,
27979 JSPropertyOp getter = JS_PropertyStub,
27980 JSStrictPropertyOp setter = JS_StrictPropertyStub,
27981 unsigned attrs = 0x01);
27982 inline JSBool defineSpecial(JSContext *cx, js::SpecialId sid, const js::Value &value,
27983 JSPropertyOp getter = JS_PropertyStub,
27984 JSStrictPropertyOp setter = JS_StrictPropertyStub,
27985 unsigned attrs = 0x01);
27987 inline JSBool getGeneric(JSContext *cx, js::HandleObject receiver, js::HandleId id, js::Value *vp);
27988 inline JSBool getProperty(JSContext *cx, js::HandleObject receiver, js::PropertyName *name,
27990 inline JSBool getElement(JSContext *cx, js::HandleObject receiver, uint32_t index, js::Value *vp);
27993 inline JSBool getElementIfPresent(JSContext *cx, js::HandleObject receiver, uint32_t index,
27994 js::Value *vp, bool *present);
27995 inline JSBool getSpecial(JSContext *cx, js::HandleObject receiver, js::SpecialId sid, js::Value *vp);
27997 inline JSBool getGeneric(JSContext *cx, js::HandleId id, js::Value *vp);
27998 inline JSBool getProperty(JSContext *cx, js::PropertyName *name, js::Value *vp);
27999 inline JSBool getElement(JSContext *cx, uint32_t index, js::Value *vp);
28000 inline JSBool getSpecial(JSContext *cx, js::SpecialId sid, js::Value *vp);
28002 inline JSBool setGeneric(JSContext *cx, js::HandleId id, js::Value *vp, JSBool strict);
28003 inline JSBool setProperty(JSContext *cx, js::PropertyName *name, js::Value *vp, JSBool strict);
28004 inline JSBool setElement(JSContext *cx, uint32_t index, js::Value *vp, JSBool strict);
28005 inline JSBool setSpecial(JSContext *cx, js::SpecialId sid, js::Value *vp, JSBool strict);
28007 JSBool nonNativeSetProperty(JSContext *cx, js::HandleId id, js::Value *vp, JSBool strict);
28008 JSBool nonNativeSetElement(JSContext *cx, uint32_t index, js::Value *vp, JSBool strict);
28010 inline JSBool getGenericAttributes(JSContext *cx, js::HandleId id, unsigned *attrsp);
28011 inline JSBool getPropertyAttributes(JSContext *cx, js::PropertyName *name, unsigned *attrsp);
28012 inline JSBool getElementAttributes(JSContext *cx, uint32_t index, unsigned *attrsp);
28013 inline JSBool getSpecialAttributes(JSContext *cx, js::SpecialId sid, unsigned *attrsp);
28015 inline JSBool setGenericAttributes(JSContext *cx, js::HandleId id, unsigned *attrsp);
28016 inline JSBool setPropertyAttributes(JSContext *cx, js::PropertyName *name, unsigned *attrsp);
28017 inline JSBool setElementAttributes(JSContext *cx, uint32_t index, unsigned *attrsp);
28018 inline JSBool setSpecialAttributes(JSContext *cx, js::SpecialId sid, unsigned *attrsp);
28020 inline bool deleteProperty(JSContext *cx, js::HandlePropertyName name, js::Value *rval, bool strict);
28021 inline bool deleteElement(JSContext *cx, uint32_t index, js::Value *rval, bool strict);
28022 inline bool deleteSpecial(JSContext *cx, js::HandleSpecialId sid, js::Value *rval, bool strict);
28023 bool deleteByValue(JSContext *cx, const js::Value &property, js::Value *rval, bool strict);
28025 inline bool enumerate(JSContext *cx, JSIterateOp iterop, js::Value *statep, jsid *idp);
28026 inline bool defaultValue(JSContext *cx, JSType hint, js::Value *vp);
28027 inline JSType typeOf(JSContext *cx);
28028 inline JSObject *thisObject(JSContext *cx);
28030 static bool thisObject(JSContext *cx, const js::Value &v, js::Value *vp);
28032 bool swap(JSContext *cx, JSObject *other);
28034 inline void initArrayClass();
28035 # 881 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
28036 inline bool isArguments() const;
28037 inline bool isArrayBuffer() const;
28038 inline bool isDataView() const;
28039 inline bool isDate() const;
28040 inline bool isElementIterator() const;
28041 inline bool isError() const;
28042 inline bool isFunction() const;
28043 inline bool isGenerator() const;
28044 inline bool isGlobal() const;
28045 inline bool isIterator() const;
28046 inline bool isObject() const;
28047 inline bool isPrimitive() const;
28048 inline bool isProxy() const;
28049 inline bool isRegExp() const;
28050 inline bool isRegExpStatics() const;
28051 inline bool isScope() const;
28052 inline bool isScript() const;
28053 inline bool isStopIteration() const;
28054 inline bool isTypedArray() const;
28055 inline bool isWeakMap() const;
28057 inline bool isNamespace() const;
28058 inline bool isQName() const;
28059 inline bool isXML() const;
28060 inline bool isXMLId() const;
28064 inline bool isBlock() const;
28065 inline bool isCall() const;
28066 inline bool isDeclEnv() const;
28067 inline bool isNestedScope() const;
28068 inline bool isWith() const;
28069 inline bool isClonedBlock() const;
28070 inline bool isStaticBlock() const;
28073 inline bool isBoolean() const;
28074 inline bool isNumber() const;
28075 inline bool isString() const;
28078 inline bool isNormalArguments() const;
28079 inline bool isStrictArguments() const;
28082 inline bool isDebugScope() const;
28083 inline bool isWrapper() const;
28084 inline bool isFunctionProxy() const;
28085 inline bool isCrossCompartmentWrapper() const;
28087 inline js::ArgumentsObject &asArguments();
28088 inline js::ArrayBufferObject &asArrayBuffer();
28089 inline const js::ArgumentsObject &asArguments() const;
28090 inline js::BlockObject &asBlock();
28091 inline js::BooleanObject &asBoolean();
28092 inline js::CallObject &asCall();
28093 inline js::ClonedBlockObject &asClonedBlock();
28094 inline js::DataViewObject &asDataView();
28095 inline js::DeclEnvObject &asDeclEnv();
28096 inline js::DebugScopeObject &asDebugScope();
28097 inline js::GlobalObject &asGlobal();
28098 inline js::NestedScopeObject &asNestedScope();
28099 inline js::NormalArgumentsObject &asNormalArguments();
28100 inline js::NumberObject &asNumber();
28101 inline js::RegExpObject &asRegExp();
28102 inline js::ScopeObject &asScope();
28103 inline js::StrictArgumentsObject &asStrictArguments();
28104 inline js::StaticBlockObject &asStaticBlock();
28105 inline js::StringObject &asString();
28106 inline js::WithObject &asWith();
28108 static inline js::ThingRootKind rootKind() { return js::THING_ROOT_OBJECT; }
28115 static void staticAsserts() {
28117 moz_static_assert78
28118 # 961 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
28119 [(sizeof(JSObject) == sizeof(js::shadow::Object)) ? 1 : -1]
28122 moz_static_assert79
28123 # 963 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
28124 [(sizeof(JSObject) == sizeof(js::ObjectImpl)) ? 1 : -1]
28127 moz_static_assert80
28128 # 965 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
28129 [(sizeof(JSObject) % sizeof(js::Value) == 0) ? 1 : -1]
28134 JSObject(const JSObject &other) ;
28135 void operator=(const JSObject &other) ;
28143 static __attribute__((always_inline)) inline bool
28144 operator==(const JSObject &lhs, const JSObject &rhs)
28146 return &lhs == &rhs;
28149 static __attribute__((always_inline)) inline bool
28150 operator!=(const JSObject &lhs, const JSObject &rhs)
28152 return &lhs != &rhs;
28155 struct JSObject_Slots2 : JSObject { js::Value fslots[2]; };
28156 struct JSObject_Slots4 : JSObject { js::Value fslots[4]; };
28157 struct JSObject_Slots8 : JSObject { js::Value fslots[8]; };
28158 struct JSObject_Slots12 : JSObject { js::Value fslots[12]; };
28159 struct JSObject_Slots16 : JSObject { js::Value fslots[16]; };
28161 #define JSSLOT_FREE(clasp) JSCLASS_RESERVED_SLOTS(clasp)
28163 class JSValueArray {
28168 JSValueArray(jsval *v, size_t c) : array(v), length(c) {}
28176 ValueArray(js::Value *v, size_t c) : array(v), length(c) {}
28181 js_EnterSharpObject(JSContext *cx, js::HandleObject obj, JSIdArray **idap, bool *alreadySeen, bool *isSharp);
28184 js_LeaveSharpObject(JSContext *cx, JSIdArray **idap);
28191 js_TraceSharpMap(JSTracer *trc, JSSharpObjectMap *map);
28194 js_HasOwnPropertyHelper(JSContext *cx, js::LookupGenericOp lookup, unsigned argc,
28198 js_HasOwnProperty(JSContext *cx, js::LookupGenericOp lookup, js::HandleObject obj, js::HandleId id,
28199 JSObject **objp, JSProperty **propp);
28202 js_PropertyIsEnumerable(JSContext *cx, js::HandleObject obj, js::HandleId id, js::Value *vp);
28205 extern JSPropertySpec object_props[];
28210 extern JSFunctionSpec object_methods[];
28211 extern JSFunctionSpec object_static_methods[];
28216 IsStandardClassResolved(JSObject *obj, js::Class *clasp);
28219 MarkStandardClassInitializedNoProto(JSObject *obj, js::Class *clasp);
28226 extern const char js_watch_str[];
28227 extern const char js_unwatch_str[];
28228 extern const char js_hasOwnProperty_str[];
28229 extern const char js_isPrototypeOf_str[];
28230 extern const char js_propertyIsEnumerable_str[];
28233 extern const char js_defineGetter_str[];
28234 extern const char js_defineSetter_str[];
28235 extern const char js_lookupGetter_str[];
28236 extern const char js_lookupSetter_str[];
28240 js_PopulateObject(JSContext *cx, js::HandleObject newborn, JSObject *props);
28246 js_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key,
28254 js_IdentifyClassPrototype(JSObject *obj);
28261 js_FindClassObject(JSContext *cx, JSObject *start, JSProtoKey key,
28262 js::Value *vp, js::Class *clasp = __null);
28267 js_CreateThisForFunctionWithProto(JSContext *cx, js::HandleObject callee, JSObject *proto);
28271 js_CreateThisForFunction(JSContext *cx, js::HandleObject callee, bool newType);
28275 js_CreateThis(JSContext *cx, js::Class *clasp, JSObject *callee);
28282 js_AddNativeProperty(JSContext *cx, js::HandleObject obj, jsid id,
28283 JSPropertyOp getter, JSStrictPropertyOp setter, uint32_t slot,
28284 unsigned attrs, unsigned flags, int shortid);
28287 js_DefineOwnProperty(JSContext *cx, js::HandleObject obj, js::HandleId id,
28288 const js::Value &descriptor, JSBool *bp);
28295 const unsigned DNP_CACHE_RESULT = 1;
28296 const unsigned DNP_DONT_PURGE = 2;
28297 const unsigned DNP_UNQUALIFIED = 4;
28300 const unsigned DNP_SKIP_TYPE = 8;
28305 extern const Shape *
28306 DefineNativeProperty(JSContext *cx, HandleObject obj, HandleId id, const Value &value,
28307 PropertyOp getter, StrictPropertyOp setter, unsigned attrs,
28308 unsigned flags, int shortid, unsigned defineHow = 0);
28310 inline const Shape *
28311 DefineNativeProperty(JSContext *cx, HandleObject obj, PropertyName *name, const Value &value,
28312 PropertyOp getter, StrictPropertyOp setter, unsigned attrs,
28313 unsigned flags, int shortid, unsigned defineHow = 0)
28315 return DefineNativeProperty(cx, obj, RootedId(cx, NameToId(name)),
28316 value, getter, setter, attrs, flags,
28317 shortid, defineHow);
28324 LookupPropertyWithFlags(JSContext *cx, HandleObject obj, HandleId id, unsigned flags,
28325 JSObject **objp, JSProperty **propp);
28328 LookupPropertyWithFlags(JSContext *cx, HandleObject obj, PropertyName *name, unsigned flags,
28329 JSObject **objp, JSProperty **propp)
28331 return LookupPropertyWithFlags(cx, obj, RootedId(cx, NameToId(name)), flags, objp, propp);
28333 # 1178 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
28335 DefineProperty(JSContext *cx, js::HandleObject obj,
28336 js::HandleId id, const PropDesc &desc, bool throwError,
28344 ReadPropertyDescriptors(JSContext *cx, JSObject *props, bool checkAccessors,
28345 AutoIdVector *ids, AutoPropDescArrayRooter *descs);
28351 static const unsigned RESOLVE_INFER = 0xffff;
28357 FindPropertyHelper(JSContext *cx, HandlePropertyName name,
28358 bool cacheResult, HandleObject scopeChain,
28359 JSObject **objp, JSObject **pobjp, JSProperty **propp);
28366 FindProperty(JSContext *cx, HandlePropertyName name, HandleObject scopeChain,
28367 JSObject **objp, JSObject **pobjp, JSProperty **propp);
28370 FindIdentifierBase(JSContext *cx, HandleObject scopeChain, HandlePropertyName name);
28375 js_FindVariableScope(JSContext *cx, JSFunction **funp);
28378 const unsigned JSGET_CACHE_RESULT = 1;
28387 js_NativeGet(JSContext *cx, JSObject *obj, JSObject *pobj, const js::Shape *shape, unsigned getHow,
28391 js_NativeSet(JSContext *cx, JSObject *obj, const js::Shape *shape, bool added,
28392 bool strict, js::Value *vp);
28397 GetPropertyHelper(JSContext *cx, HandleObject obj, jsid id, uint32_t getHow, Value *vp);
28400 GetPropertyHelper(JSContext *cx, HandleObject obj, PropertyName *name, uint32_t getHow, Value *vp)
28402 return GetPropertyHelper(cx, obj, NameToId(name), getHow, vp);
28406 GetOwnPropertyDescriptor(JSContext *cx, HandleObject obj, HandleId id, PropertyDescriptor *desc);
28409 GetOwnPropertyDescriptor(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
28412 NewPropertyDescriptorObject(JSContext *cx, const PropertyDescriptor *desc, Value *vp);
28415 GetMethod(JSContext *cx, HandleObject obj, HandleId id, unsigned getHow, Value *vp);
28418 GetMethod(JSContext *cx, HandleObject obj, PropertyName *name, unsigned getHow, Value *vp)
28420 return GetMethod(cx, obj, RootedId(cx, NameToId(name)), getHow, vp);
28428 HasDataProperty(JSContext *cx, HandleObject obj, jsid id, Value *vp);
28431 HasDataProperty(JSContext *cx, HandleObject obj, PropertyName *name, Value *vp)
28433 return HasDataProperty(cx, obj, NameToId(name), vp);
28437 CheckAccess(JSContext *cx, JSObject *obj, HandleId id, JSAccessMode mode,
28438 js::Value *vp, unsigned *attrsp);
28443 js_IsDelegate(JSContext *cx, JSObject *obj, const js::Value &v);
28450 js_PrimitiveToObject(JSContext *cx, js::Value *vp);
28453 js_ValueToObjectOrNull(JSContext *cx, const js::Value &v, JSObject **objp);
28457 js_ValueToNonNullObject(JSContext *cx, const js::Value &v);
28466 ToObjectSlow(JSContext *cx, Value *vp);
28468 __attribute__((always_inline)) inline JSObject *
28469 ToObject(JSContext *cx, Value *vp)
28471 if (vp->isObject())
28472 return &vp->toObject();
28473 return ToObjectSlow(cx, vp);
28478 ValueToObject(JSContext *cx, const Value &v)
28481 return &v.toObject();
28482 return js_ValueToNonNullObject(cx, v);
28488 js_GetObjectSlotName(JSTracer *trc, char *buf, size_t bufsize);
28491 js_ClearNative(JSContext *cx, JSObject *obj);
28494 js_ReportGetterOnlyAssignment(JSContext *cx);
28497 js_InferFlags(JSContext *cx, unsigned defaultFlags);
28501 js_Object(JSContext *cx, unsigned argc, js::Value *vp);
28502 # 1354 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
28503 extern __attribute__((visibility("default"))) JSBool
28504 js_GetClassPrototype(JSContext *cx, JSObject *scope, JSProtoKey protoKey,
28505 JSObject **protop, js::Class *clasp = __null);
28510 SetProto(JSContext *cx, HandleObject obj, HandleObject proto, bool checkForCycles);
28513 obj_toStringHelper(JSContext *cx, JSObject *obj);
28516 eval(JSContext *cx, unsigned argc, Value *vp);
28524 DirectEval(JSContext *cx, const CallArgs &args);
28531 IsBuiltinEvalForScope(JSObject *scopeChain, const js::Value &v);
28535 IsAnyBuiltinEval(JSFunction *fun);
28538 extern JSPrincipals *
28539 PrincipalsForCompiledCode(const CallReceiver &call, JSContext *cx);
28542 NonNullObject(JSContext *cx, const Value &v);
28544 extern const char *
28545 InformalValueTypeName(const Value &v);
28548 DestroyIdArray(FreeOp *fop, JSIdArray *ida);
28551 GetFirstArgumentAsObject(JSContext *cx, unsigned argc, Value *vp, const char *method, JSObject **objp);
28555 Throw(JSContext *cx, jsid id, unsigned errorNumber);
28558 Throw(JSContext *cx, JSObject *obj, unsigned errorNumber);
28559 # 1424 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h"
28561 CheckDefineProperty(JSContext *cx, HandleObject obj, HandleId id, HandleValue value,
28562 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
28565 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h" 2
28566 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspropertytree.h" 1
28574 #define jspropertytree_h___
28582 struct ShapeHasher {
28583 typedef js::Shape *Key;
28584 typedef js::StackShape Lookup;
28586 static inline HashNumber hash(const Lookup &l);
28587 static inline bool match(Key k, const Lookup &l);
28590 typedef HashSet<js::Shape *, ShapeHasher, SystemAllocPolicy> KidsHash;
28592 class KidsPointer {
28603 bool isNull() const { return !w; }
28604 void setNull() { w = 0; }
28606 bool isShape() const { return (w & TAG) == SHAPE && !isNull(); }
28607 js::Shape *toShape() const {
28609 return reinterpret_cast<js::Shape *>(w & ~uintptr_t(TAG));
28611 void setShape(js::Shape *shape) {
28614 w = reinterpret_cast<uintptr_t>(shape) | SHAPE;
28617 bool isHash() const { return (w & TAG) == HASH; }
28618 KidsHash *toHash() const {
28620 return reinterpret_cast<KidsHash *>(w & ~uintptr_t(TAG));
28622 void setHash(KidsHash *hash) {
28625 w = reinterpret_cast<uintptr_t>(hash) | HASH;
28635 friend struct ::JSFunction;
28637 JSCompartment *compartment;
28639 bool insertChild(JSContext *cx, js::Shape *parent, js::Shape *child);
28644 enum { MAX_HEIGHT = 128 };
28646 PropertyTree(JSCompartment *comp)
28647 : compartment(comp)
28651 js::Shape *newShape(JSContext *cx);
28652 js::Shape *getChild(JSContext *cx, Shape *parent, uint32_t nfixed, const StackShape &child);
28661 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h" 2
28662 # 98 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h"
28666 static const uint32_t SHAPE_INVALID_SLOT = ((uint32_t)1 << (24)) - 1;
28667 static const uint32_t SHAPE_MAXIMUM_SLOT = ((uint32_t)1 << (24)) - 2;
28673 struct ShapeTable {
28674 static const uint32_t HASH_BITS = tl::BitSize<HashNumber>::result;
28675 static const uint32_t MIN_ENTRIES = 7;
28676 static const uint32_t MIN_SIZE_LOG2 = 4;
28677 static const uint32_t MIN_SIZE = ((uint32_t)1 << (MIN_SIZE_LOG2));
28681 uint32_t entryCount;
28682 uint32_t removedCount;
28686 js::Shape **entries;
28688 ShapeTable(uint32_t nentries)
28689 : hashShift(HASH_BITS - MIN_SIZE_LOG2),
28690 entryCount(nentries),
28692 freelist(SHAPE_INVALID_SLOT)
28698 js::UnwantedForeground::free_(entries);
28702 uint32_t capacity() const { return ((uint32_t)1 << (HASH_BITS - hashShift)); }
28705 static size_t sizeOfEntries(size_t cap) { return cap * sizeof(Shape *); }
28711 size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf) const {
28712 return mallocSizeOf(this) + mallocSizeOf(entries);
28716 bool needsToGrow() const {
28717 uint32_t size = capacity();
28718 return entryCount + removedCount >= size - (size >> 2);
28726 bool grow(JSContext *cx);
28733 bool init(JSRuntime *rt, js::Shape *lastProp);
28734 bool change(int log2Delta, JSContext *cx);
28735 js::Shape **search(jsid id, bool adding);
28744 class PropertyTree;
28749 #define JSPROP_SHADOWABLE JSPROP_INDEX
28750 # 234 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h"
28751 class UnownedBaseShape;
28753 class BaseShape : public js::gc::Cell
28756 friend struct Shape;
28757 friend struct StackBaseShape;
28758 friend struct StackShape;
28765 HAS_GETTER_OBJECT = 0x2,
28766 HAS_SETTER_OBJECT = 0x4,
28774 EXTENSIBLE_PARENTS = 0x8,
28777 NOT_EXTENSIBLE = 0x40,
28779 BOUND_FUNCTION = 0x100,
28782 ITERATED_SINGLETON = 0x800,
28783 NEW_TYPE_UNKNOWN = 0x1000,
28784 UNCACHEABLE_PROTO = 0x2000,
28786 OBJECT_FLAG_MASK = 0x3ff8
28791 HeapPtrObject parent;
28793 uint32_t slotSpan_;
28797 js::PropertyOp rawGetter;
28798 JSObject *getterObj;
28803 js::StrictPropertyOp rawSetter;
28804 JSObject *setterObj;
28809 HeapPtr<UnownedBaseShape> unowned_;
28812 ShapeTable *table_;
28814 BaseShape(const BaseShape &base) ;
28817 void finalize(FreeOp *fop);
28819 inline BaseShape(Class *clasp, JSObject *parent, uint32_t objectFlags);
28820 inline BaseShape(Class *clasp, JSObject *parent, uint32_t objectFlags,
28821 uint8_t attrs, PropertyOp rawGetter, StrictPropertyOp rawSetter);
28822 inline BaseShape(const StackBaseShape &base);
28827 inline BaseShape &operator=(const BaseShape &other);
28829 bool isOwned() const { return !!(flags & OWNED_SHAPE); }
28831 inline bool matchesGetterSetter(PropertyOp rawGetter,
28832 StrictPropertyOp rawSetter) const;
28834 inline void adoptUnowned(UnownedBaseShape *other);
28835 inline void setOwned(UnownedBaseShape *unowned);
28837 JSObject *getObjectParent() const { return parent; }
28838 uint32_t getObjectFlags() const { return flags & OBJECT_FLAG_MASK; }
28840 bool hasGetterObject() const { return !!(flags & HAS_GETTER_OBJECT); }
28841 JSObject *getterObject() const { do { } while(0); return getterObj; }
28843 bool hasSetterObject() const { return !!(flags & HAS_SETTER_OBJECT); }
28844 JSObject *setterObject() const { do { } while(0); return setterObj; }
28846 bool hasTable() const { do { } while (0); return table_ != __null; }
28847 ShapeTable &table() const { do { } while(0); return *table_; }
28848 void setTable(ShapeTable *table) { do { } while(0); table_ = table; }
28850 uint32_t slotSpan() const { do { } while(0); return slotSpan_; }
28851 void setSlotSpan(uint32_t slotSpan) { do { } while(0); slotSpan_ = slotSpan; }
28854 static UnownedBaseShape *getUnowned(JSContext *cx, const StackBaseShape &base);
28857 inline UnownedBaseShape *unowned();
28860 inline UnownedBaseShape *baseUnowned();
28863 inline UnownedBaseShape *toUnowned();
28866 inline void assertConsistency();
28869 static inline size_t offsetOfClass() { return __builtin_offsetof (BaseShape, clasp); }
28870 static inline size_t offsetOfParent() { return __builtin_offsetof (BaseShape, parent); }
28871 static inline size_t offsetOfFlags() { return __builtin_offsetof (BaseShape, flags); }
28873 static inline void writeBarrierPre(BaseShape *shape);
28874 static inline void writeBarrierPost(BaseShape *shape, void *addr);
28875 static inline void readBarrier(BaseShape *shape);
28877 static inline ThingRootKind rootKind() { return THING_ROOT_BASE_SHAPE; }
28879 inline void markChildren(JSTracer *trc);
28882 static void staticAsserts() {
28883 typedef int moz_static_assert81[(__builtin_offsetof (BaseShape, clasp) == __builtin_offsetof (js::shadow::BaseShape, clasp)) ? 1 : -1];
28887 class UnownedBaseShape : public BaseShape {};
28890 BaseShape::unowned()
28892 return isOwned() ? baseUnowned() : toUnowned();
28896 BaseShape::toUnowned()
28898 do { } while(0); return static_cast<UnownedBaseShape *>(this);
28902 BaseShape::baseUnowned()
28904 do { } while(0); return unowned_;
28908 struct StackBaseShape
28910 typedef const StackBaseShape *Lookup;
28915 PropertyOp rawGetter;
28916 StrictPropertyOp rawSetter;
28918 StackBaseShape(BaseShape *base)
28919 : flags(base->flags & BaseShape::OBJECT_FLAG_MASK),
28920 clasp(base->clasp),
28921 parent(base->parent),
28926 StackBaseShape(Class *clasp, JSObject *parent, uint32_t objectFlags)
28927 : flags(objectFlags),
28934 inline StackBaseShape(Shape *shape);
28936 inline void updateGetterSetter(uint8_t attrs,
28937 PropertyOp rawGetter,
28938 StrictPropertyOp rawSetter);
28940 static inline HashNumber hash(const StackBaseShape *lookup);
28941 static inline bool match(UnownedBaseShape *key, const StackBaseShape *lookup);
28943 class AutoRooter : private AutoGCRooter
28946 explicit AutoRooter(JSContext *cx, const StackBaseShape *base_
28948 : AutoGCRooter(cx, STACKBASESHAPE), base(base_), skip(cx, base_)
28953 friend void AutoGCRooter::trace(JSTracer *trc);
28956 const StackBaseShape *base;
28962 typedef HashSet<ReadBarriered<UnownedBaseShape>,
28964 SystemAllocPolicy> BaseShapeSet;
28966 struct Shape : public js::gc::Cell
28968 friend struct ::JSObject;
28969 friend struct ::JSFunction;
28970 friend class js::Bindings;
28971 friend class js::ObjectImpl;
28972 friend class js::PropertyTree;
28973 friend class js::StaticBlockObject;
28974 friend struct js::StackShape;
28975 friend struct js::StackBaseShape;
28978 HeapPtrBaseShape base_;
28984 FIXED_SLOTS_MAX = 0x1f,
28985 FIXED_SLOTS_SHIFT = 27,
28986 FIXED_SLOTS_MASK = uint32_t(FIXED_SLOTS_MAX << FIXED_SLOTS_SHIFT),
28994 LINEAR_SEARCHES_MAX = 0x7,
28995 LINEAR_SEARCHES_SHIFT = 24,
28996 LINEAR_SEARCHES_MASK = LINEAR_SEARCHES_MAX << LINEAR_SEARCHES_SHIFT,
29004 SLOT_MASK = ((uint32_t)1 << (24)) - 1
29005 } __attribute__((packed));
29012 HeapPtrShape parent;
29017 HeapPtrShape *listp;
29023 static inline Shape *search(JSContext *cx, Shape *start, jsid id,
29024 Shape ***pspp, bool adding = false);
29030 inline void removeFromDictionary(JSObject *obj);
29031 inline void insertIntoDictionary(HeapPtrShape *dictp);
29033 inline void initDictionaryShape(const StackShape &child, uint32_t nfixed,
29034 HeapPtrShape *dictp);
29036 Shape *getChildBinding(JSContext *cx, const StackShape &child);
29039 static Shape *replaceLastProperty(JSContext *cx, const StackBaseShape &base,
29040 JSObject *proto, Shape *shape);
29042 bool hashify(JSContext *cx);
29043 void handoffTableTo(Shape *newShape);
29045 inline void setParent(js::Shape *p);
29047 bool ensureOwnBaseShape(JSContext *cx) {
29048 if (base()->isOwned())
29050 return makeOwnBaseShape(cx);
29053 bool makeOwnBaseShape(JSContext *cx);
29056 bool hasTable() const { return base()->hasTable(); }
29057 js::ShapeTable &table() const { return base()->table(); }
29059 void sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf,
29060 size_t *propTableSize, size_t *kidsSize) const {
29061 *propTableSize = hasTable() ? table().sizeOfIncludingThis(mallocSizeOf) : 0;
29062 *kidsSize = !inDictionary() && kids.isHash()
29063 ? kids.toHash()->sizeOfIncludingThis(mallocSizeOf)
29067 bool isNative() const {
29069 return !(flags & NON_NATIVE);
29072 const HeapPtrShape &previous() const {
29078 friend struct Shape;
29079 const Shape *cursor;
29082 Range(const Shape *shape) : cursor(shape) { }
29084 bool empty() const {
29085 return cursor->isEmptyShape();
29088 const Shape &front() const {
29095 cursor = cursor->parent;
29098 class AutoRooter : private AutoGCRooter
29101 explicit AutoRooter(JSContext *cx, Range *r_
29103 : AutoGCRooter(cx, SHAPERANGE), r(r_), skip(cx, r_)
29108 friend void AutoGCRooter::trace(JSTracer *trc);
29109 void trace(JSTracer *trc);
29118 Range all() const {
29119 return Range(this);
29122 Class *getObjectClass() const { return base()->clasp; }
29123 JSObject *getObjectParent() const { return base()->parent; }
29125 static Shape *setObjectParent(JSContext *cx, JSObject *obj, JSObject *proto, Shape *last);
29126 static Shape *setObjectFlag(JSContext *cx, BaseShape::Flag flag, JSObject *proto, Shape *last);
29128 uint32_t getObjectFlags() const { return base()->getObjectFlags(); }
29129 bool hasObjectFlag(BaseShape::Flag flag) const {
29131 return !!(base()->flags & flag);
29145 IN_DICTIONARY = 0x02,
29151 Shape(const StackShape &other, uint32_t nfixed);
29154 Shape(UnownedBaseShape *base, uint32_t nfixed);
29157 Shape(const Shape &other) ;
29165 bool hasMissingSlot() const { return maybeSlot() == SHAPE_INVALID_SLOT; }
29170 HAS_SHORTID = 0x40,
29171 PUBLIC_FLAGS = HAS_SHORTID
29174 bool inDictionary() const { return (flags & IN_DICTIONARY) != 0; }
29175 unsigned getFlags() const { return flags & PUBLIC_FLAGS; }
29176 bool hasShortID() const { return (flags & HAS_SHORTID) != 0; }
29178 PropertyOp getter() const { return base()->rawGetter; }
29179 bool hasDefaultGetter() const { return !base()->rawGetter; }
29180 PropertyOp getterOp() const { do { } while(0); return base()->rawGetter; }
29181 JSObject *getterObject() const { do { } while(0); return base()->getterObj; }
29184 Value getterValue() const {
29186 return base()->getterObj ? js::ObjectValue(*base()->getterObj) : js::UndefinedValue();
29189 Value getterOrUndefined() const {
29190 return (hasGetterValue() && base()->getterObj)
29191 ? ObjectValue(*base()->getterObj)
29192 : UndefinedValue();
29195 StrictPropertyOp setter() const { return base()->rawSetter; }
29196 bool hasDefaultSetter() const { return !base()->rawSetter; }
29197 StrictPropertyOp setterOp() const { do { } while(0); return base()->rawSetter; }
29198 JSObject *setterObject() const { do { } while(0); return base()->setterObj; }
29201 Value setterValue() const {
29203 return base()->setterObj ? js::ObjectValue(*base()->setterObj) : js::UndefinedValue();
29206 Value setterOrUndefined() const {
29207 return (hasSetterValue() && base()->setterObj)
29208 ? ObjectValue(*base()->setterObj)
29209 : UndefinedValue();
29212 void update(js::PropertyOp getter, js::StrictPropertyOp setter, uint8_t attrs);
29214 inline bool matches(const Shape *other) const;
29215 inline bool matches(const StackShape &other) const;
29216 inline bool matchesParamsAfterId(BaseShape *base,
29217 uint32_t aslot, unsigned aattrs, unsigned aflags,
29218 int ashortid) const;
29220 bool get(JSContext* cx, HandleObject receiver, JSObject *obj, JSObject *pobj, js::Value* vp) const;
29221 bool set(JSContext* cx, HandleObject obj, bool strict, js::Value* vp) const;
29223 BaseShape *base() const { return base_; }
29225 bool hasSlot() const { return (attrs & 0x40) == 0; }
29226 uint32_t slot() const { do { } while(0); return maybeSlot(); }
29227 uint32_t maybeSlot() const { return slotInfo & SLOT_MASK; }
29229 bool isEmptyShape() const {
29231 return JSID_IS_EMPTY(propid_);
29234 uint32_t slotSpan() const {
29236 uint32_t free = (((getObjectClass())->flags >> 8) & (((uint32_t)1 << (8)) - 1));
29237 return hasMissingSlot() ? free : Max(free, maybeSlot() + 1);
29240 void setSlot(uint32_t slot) {
29242 slotInfo = slotInfo & ~Shape::SLOT_MASK;
29243 slotInfo = slotInfo | slot;
29246 uint32_t numFixedSlots() const {
29247 return (slotInfo >> FIXED_SLOTS_SHIFT);
29250 void setNumFixedSlots(uint32_t nfixed) {
29252 slotInfo = slotInfo & ~FIXED_SLOTS_MASK;
29253 slotInfo = slotInfo | (nfixed << FIXED_SLOTS_SHIFT);
29256 uint32_t numLinearSearches() const {
29257 return (slotInfo & LINEAR_SEARCHES_MASK) >> LINEAR_SEARCHES_SHIFT;
29260 void incrementNumLinearSearches() {
29261 uint32_t count = numLinearSearches();
29263 slotInfo = slotInfo & ~LINEAR_SEARCHES_MASK;
29264 slotInfo = slotInfo | ((count + 1) << LINEAR_SEARCHES_SHIFT);
29267 const HeapId &propid() const {
29272 HeapId &propidRef() { do { } while(0); return propid_; }
29274 int16_t shortid() const { do { } while(0); return maybeShortid(); }
29275 int16_t maybeShortid() const { return shortid_; }
29281 inline bool getUserId(JSContext *cx, jsid *idp) const;
29283 uint8_t attributes() const { return attrs; }
29284 bool configurable() const { return (attrs & 0x04) == 0; }
29285 bool enumerable() const { return (attrs & 0x01) != 0; }
29286 bool writable() const {
29288 return (attrs & 0x02) == 0;
29290 bool hasGetterValue() const { return attrs & 0x10; }
29291 bool hasSetterValue() const { return attrs & 0x20; }
29293 bool isDataDescriptor() const {
29294 return (attrs & (0x20 | 0x10)) == 0;
29296 bool isAccessorDescriptor() const {
29297 return (attrs & (0x20 | 0x10)) != 0;
29306 bool shadowable() const {
29308 return hasSlot() || (attrs & 0x80);
29310 # 837 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h"
29311 static Shape *setExtensibleParents(JSContext *cx, Shape *shape);
29312 bool extensibleParents() const { return !!(base()->flags & BaseShape::EXTENSIBLE_PARENTS); }
29314 uint32_t entryCount() const {
29316 return table().entryCount;
29318 const js::Shape *shape = this;
29319 uint32_t count = 0;
29320 for (js::Shape::Range r = shape->all(); !r.empty(); r.popFront())
29325 bool isBigEnoughForAShapeTable() const {
29327 const js::Shape *shape = this;
29328 uint32_t count = 0;
29329 for (js::Shape::Range r = shape->all(); !r.empty(); r.popFront()) {
29331 if (count >= ShapeTable::MIN_ENTRIES)
29342 void finalize(FreeOp *fop);
29343 void removeChild(js::Shape *child);
29345 static inline void writeBarrierPre(const Shape *shape);
29346 static inline void writeBarrierPost(const Shape *shape, void *addr);
29353 static inline void readBarrier(const Shape *shape);
29355 static inline ThingRootKind rootKind() { return THING_ROOT_SHAPE; }
29357 inline void markChildren(JSTracer *trc);
29360 static inline size_t offsetOfBase() { return __builtin_offsetof (Shape, base_); }
29363 static void staticAsserts() {
29364 typedef int moz_static_assert82[(__builtin_offsetof (Shape, base_) == __builtin_offsetof (js::shadow::Shape, base)) ? 1 : -1];
29365 typedef int moz_static_assert83[(__builtin_offsetof (Shape, slotInfo) == __builtin_offsetof (js::shadow::Shape, slotInfo)) ? 1 : -1];
29366 typedef int moz_static_assert84[(FIXED_SLOTS_SHIFT == js::shadow::Shape::FIXED_SLOTS_SHIFT) ? 1 : -1];
29370 class AutoRooterGetterSetter
29372 class Inner : private AutoGCRooter
29375 Inner(JSContext *cx, uint8_t attrs,
29376 PropertyOp *pgetter_, StrictPropertyOp *psetter_)
29377 : AutoGCRooter(cx, GETTERSETTER), attrs(attrs),
29378 pgetter(pgetter_), psetter(psetter_),
29379 getterRoot(cx, pgetter_), setterRoot(cx, psetter_)
29382 friend void AutoGCRooter::trace(JSTracer *trc);
29386 PropertyOp *pgetter;
29387 StrictPropertyOp *psetter;
29388 SkipRoot getterRoot, setterRoot;
29392 explicit AutoRooterGetterSetter(JSContext *cx, uint8_t attrs,
29393 PropertyOp *pgetter, StrictPropertyOp *psetter
29396 if (attrs & (0x10 | 0x20))
29397 inner.construct(cx, attrs, pgetter, psetter);
29401 friend void AutoGCRooter::trace(JSTracer *trc);
29404 Maybe<Inner> inner;
29408 struct EmptyShape : public js::Shape
29410 EmptyShape(UnownedBaseShape *base, uint32_t nfixed);
29416 static Shape *getInitialShape(JSContext *cx, Class *clasp, JSObject *proto,
29417 JSObject *parent, gc::AllocKind kind, uint32_t objectFlags = 0);
29424 static void insertInitialShape(JSContext *cx, Shape *shape, JSObject *proto);
29431 struct InitialShapeEntry
29438 ReadBarriered<Shape> shape;
29452 uint32_t baseFlags;
29453 Lookup(Class *clasp, JSObject *proto, JSObject *parent, uint32_t nfixed,
29454 uint32_t baseFlags)
29455 : clasp(clasp), proto(proto), parent(parent),
29456 nfixed(nfixed), baseFlags(baseFlags)
29460 inline InitialShapeEntry();
29461 inline InitialShapeEntry(const ReadBarriered<Shape> &shape, JSObject *proto);
29463 inline Lookup getLookup();
29465 static inline HashNumber hash(const Lookup &lookup);
29466 static inline bool match(const InitialShapeEntry &key, const Lookup &lookup);
29469 typedef HashSet<InitialShapeEntry, InitialShapeEntry, SystemAllocPolicy> InitialShapeSet;
29473 UnownedBaseShape *base;
29480 StackShape(UnownedBaseShape *base, jsid propid, uint32_t slot,
29481 uint32_t nfixed, unsigned attrs, unsigned flags, int shortid)
29485 attrs(uint8_t(attrs)),
29486 flags(uint8_t(flags)),
29487 shortid(int16_t(shortid))
29494 StackShape(const Shape *shape)
29495 : base(shape->base()->unowned()),
29496 propid(const_cast<Shape *>(shape)->propidRef()),
29497 slot_(shape->slotInfo & Shape::SLOT_MASK),
29498 attrs(shape->attrs),
29499 flags(shape->flags),
29500 shortid(shape->shortid_)
29503 bool hasSlot() const { return (attrs & 0x40) == 0; }
29504 bool hasMissingSlot() const { return maybeSlot() == SHAPE_INVALID_SLOT; }
29506 uint32_t slot() const { do { } while(0); return slot_; }
29507 uint32_t maybeSlot() const { return slot_; }
29509 uint32_t slotSpan() const {
29510 uint32_t free = (((base->clasp)->flags >> 8) & (((uint32_t)1 << (8)) - 1));
29511 return hasMissingSlot() ? free : (maybeSlot() + 1);
29514 void setSlot(uint32_t slot) {
29519 inline HashNumber hash() const;
29521 class AutoRooter : private AutoGCRooter
29524 explicit AutoRooter(JSContext *cx, const StackShape *shape_
29526 : AutoGCRooter(cx, STACKSHAPE), shape(shape_), skip(cx, shape_)
29531 friend void AutoGCRooter::trace(JSTracer *trc);
29534 const StackShape *shape;
29543 #define SHAPE_COLLISION (uintptr_t(1))
29544 #define SHAPE_REMOVED ((js::Shape *) SHAPE_COLLISION)
29547 #define SHAPE_IS_FREE(shape) ((shape) == NULL)
29548 #define SHAPE_IS_REMOVED(shape) ((shape) == SHAPE_REMOVED)
29549 #define SHAPE_IS_LIVE(shape) ((shape) > SHAPE_REMOVED)
29550 #define SHAPE_FLAG_COLLISION(spp,shape) (*(spp) = (js::Shape *) (uintptr_t(shape) | SHAPE_COLLISION))
29552 #define SHAPE_HAD_COLLISION(shape) (uintptr_t(shape) & SHAPE_COLLISION)
29553 #define SHAPE_FETCH(spp) SHAPE_CLEAR_COLLISION(*(spp))
29555 #define SHAPE_CLEAR_COLLISION(shape) ((js::Shape *) (uintptr_t(shape) & ~SHAPE_COLLISION))
29558 #define SHAPE_STORE_PRESERVING_COLLISION(spp,shape) (*(spp) = (js::Shape *) (uintptr_t(shape) | SHAPE_HAD_COLLISION(*(spp))))
29564 Shape::search(JSContext *cx, Shape *start, jsid id, Shape ***pspp, bool adding)
29566 if (start->inDictionary()) {
29567 *pspp = start->table().search(id, adding);
29568 return ((js::Shape *) (uintptr_t(*(*pspp)) & ~(uintptr_t(1))));
29573 if (start->hasTable()) {
29574 Shape **spp = start->table().search(id, adding);
29575 return ((js::Shape *) (uintptr_t(*(spp)) & ~(uintptr_t(1))));
29578 if (start->numLinearSearches() == LINEAR_SEARCHES_MAX) {
29579 if (start->isBigEnoughForAShapeTable()) {
29580 RootedShape startRoot(cx, start);
29581 RootedId idRoot(cx, id);
29582 if (start->hashify(cx)) {
29583 Shape **spp = start->table().search(id, adding);
29584 return ((js::Shape *) (uintptr_t(*(spp)) & ~(uintptr_t(1))));
29595 start->incrementNumLinearSearches();
29598 for (Shape *shape = start; shape; shape = shape->parent) {
29599 if (shape->propidRef() == id)
29605 # 1150 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h"
29614 template<> class AnchorPermitted<js::Shape *> { };
29615 template<> class AnchorPermitted<const js::Shape *> { };
29617 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp" 2
29618 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 1
29619 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h"
29620 #define jsobjinlines_h___
29625 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsarray.h" 1
29633 #define jsarray_h___
29637 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h" 1
29638 # 11 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
29639 #define jscntxt_h___
29640 # 21 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
29641 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclist.h" 1
29648 #define jsclist_h___
29655 typedef struct JSCListStr {
29656 struct JSCListStr *next;
29657 struct JSCListStr *prev;
29663 #define JS_INSERT_BEFORE(_e,_l) JS_BEGIN_MACRO (_e)->next = (_l); (_e)->prev = (_l)->prev; (_l)->prev->next = (_e); (_l)->prev = (_e); JS_END_MACRO
29664 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclist.h"
29665 #define JS_INSERT_AFTER(_e,_l) JS_BEGIN_MACRO (_e)->next = (_l)->next; (_e)->prev = (_l); (_l)->next->prev = (_e); (_l)->next = (_e); JS_END_MACRO
29666 # 44 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclist.h"
29667 #define JS_NEXT_LINK(_e) ((_e)->next)
29672 #define JS_PREV_LINK(_e) ((_e)->prev)
29678 #define JS_APPEND_LINK(_e,_l) JS_INSERT_BEFORE(_e,_l)
29683 #define JS_INSERT_LINK(_e,_l) JS_INSERT_AFTER(_e,_l)
29686 #define JS_LIST_HEAD(_l) (_l)->next
29687 #define JS_LIST_TAIL(_l) (_l)->prev
29692 #define JS_REMOVE_LINK(_e) JS_BEGIN_MACRO (_e)->prev->next = (_e)->next; (_e)->next->prev = (_e)->prev; JS_END_MACRO
29693 # 79 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclist.h"
29694 #define JS_REMOVE_AND_INIT_LINK(_e) JS_BEGIN_MACRO (_e)->prev->next = (_e)->next; (_e)->next->prev = (_e)->prev; (_e)->next = (_e); (_e)->prev = (_e); JS_END_MACRO
29695 # 91 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclist.h"
29696 #define JS_CLIST_IS_EMPTY(_l) ((_l)->next == (_l))
29702 #define JS_INIT_CLIST(_l) JS_BEGIN_MACRO (_l)->next = (_l); (_l)->prev = (_l); JS_END_MACRO
29708 #define JS_INIT_STATIC_CLIST(_l) {(_l), (_l)}
29709 # 22 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h" 2
29710 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h" 1
29723 # 1 "/usr/include/setjmp.h" 1 3 4
29724 # 24 "/usr/include/setjmp.h" 3 4
29725 #define _SETJMP_H 1
29731 # 1 "/usr/include/bits/setjmp.h" 1 3 4
29732 # 22 "/usr/include/bits/setjmp.h" 3 4
29733 #define _BITS_SETJMP_H 1
29734 # 35 "/usr/include/bits/setjmp.h" 3 4
29735 typedef int __jmp_buf[64] __attribute__((__aligned__ (8)));
29736 # 31 "/usr/include/setjmp.h" 2 3 4
29737 # 1 "/usr/include/bits/sigset.h" 1 3 4
29738 # 32 "/usr/include/setjmp.h" 2 3 4
29742 struct __jmp_buf_tag
29748 __jmp_buf __jmpbuf;
29749 int __mask_was_saved;
29750 __sigset_t __saved_mask;
29756 typedef struct __jmp_buf_tag jmp_buf[1];
29760 extern int setjmp (jmp_buf __env) throw ();
29767 extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) throw ();
29772 extern int _setjmp (struct __jmp_buf_tag __env[1]) throw ();
29776 #define setjmp(env) _setjmp (env)
29777 # 78 "/usr/include/setjmp.h" 3 4
29782 extern void longjmp (struct __jmp_buf_tag __env[1], int __val)
29783 throw () __attribute__ ((__noreturn__));
29791 extern void _longjmp (struct __jmp_buf_tag __env[1], int __val)
29792 throw () __attribute__ ((__noreturn__));
29800 typedef struct __jmp_buf_tag sigjmp_buf[1];
29804 #define sigsetjmp(env,savemask) __sigsetjmp (env, savemask)
29810 extern void siglongjmp (sigjmp_buf __env, int __val)
29811 throw () __attribute__ ((__noreturn__));
29817 # 1 "/usr/include/bits/setjmp2.h" 1 3 4
29818 # 26 "/usr/include/bits/setjmp2.h" 3 4
29819 extern void longjmp (struct __jmp_buf_tag __env[1], int __val) throw () __asm__ ("" "__longjmp_chk")
29821 __attribute__ ((__noreturn__));
29822 extern void _longjmp (struct __jmp_buf_tag __env[1], int __val) throw () __asm__ ("" "__longjmp_chk")
29824 __attribute__ ((__noreturn__));
29825 extern void siglongjmp (struct __jmp_buf_tag __env[1], int __val) throw () __asm__ ("" "__longjmp_chk")
29827 __attribute__ ((__noreturn__));
29828 # 118 "/usr/include/setjmp.h" 2 3 4
29832 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h" 2
29833 # 23 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
29834 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h" 1
29835 # 42 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
29836 #define JS_VERSION_ECMA_3 148
29837 #define JS_VERSION_ECMA_3_TEST 149
29838 # 124 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
29839 #define JS_HAS_STR_HTML_HELPERS 1
29840 #define JS_HAS_OBJ_PROTO_PROP 1
29841 #define JS_HAS_OBJ_WATCHPOINT 1
29842 #define JS_HAS_TOSOURCE 1
29843 #define JS_HAS_CATCH_GUARD 1
29844 #define JS_HAS_UNEVAL 1
29845 #define JS_HAS_CONST 1
29846 #define JS_HAS_FUN_EXPR_STMT 1
29847 #define JS_HAS_NO_SUCH_METHOD 1
29848 #define JS_HAS_GENERATORS 1
29849 #define JS_HAS_BLOCK_SCOPE 1
29850 #define JS_HAS_DESTRUCTURING 2
29851 #define JS_HAS_GENERATOR_EXPRS 1
29852 #define JS_HAS_EXPR_CLOSURES 1
29853 # 146 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
29854 #define JS_HAS_NEW_GLOBAL_OBJECT 1
29857 #define JS_HAS_MAKE_SYSTEM_OBJECT 1
29860 #define JS_HAS_DESTRUCTURING_SHORTHAND (JS_HAS_DESTRUCTURING == 2)
29866 #define OLD_GETTER_SETTER_METHODS 1
29869 #define USE_NEW_OBJECT_REPRESENTATION 0
29874 #define NEW_OBJECT_REPRESENTATION_ONLY() MOZ_NOT_REACHED("don't call this! to be used in the new object representation")
29875 # 24 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h" 2
29877 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/BitArray.h" 1
29878 # 26 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h" 2
29880 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Statistics.h" 1
29881 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Statistics.h"
29882 #define jsgc_statistics_h___
29890 struct JSCompartment;
29893 namespace gcstats {
29897 PHASE_WAIT_BACKGROUND_THREAD,
29900 PHASE_MARK_DISCARD_CODE,
29903 PHASE_MARK_DELAYED,
29906 PHASE_MARK_GRAY_WEAK,
29907 PHASE_FINALIZE_START,
29910 PHASE_SWEEP_COMPARTMENTS,
29911 PHASE_SWEEP_TABLES,
29912 PHASE_SWEEP_OBJECT,
29913 PHASE_SWEEP_STRING,
29914 PHASE_SWEEP_SCRIPT,
29916 PHASE_SWEEP_DISCARD_CODE,
29917 PHASE_DISCARD_ANALYSIS,
29919 PHASE_FREE_TI_ARENA,
29921 PHASE_CLEAR_SCRIPT_ANALYSIS,
29922 PHASE_FINALIZE_END,
29931 STAT_DESTROY_CHUNK,
29936 class StatisticsSerializer;
29938 struct Statistics {
29939 Statistics(JSRuntime *rt);
29942 void beginPhase(Phase phase);
29943 void endPhase(Phase phase);
29945 void beginSlice(int collectedCount, int compartmentCount, gcreason::Reason reason);
29948 void reset(const char *reason) { slices.back().resetReason = reason; }
29949 void nonincremental(const char *reason) { nonincrementalReason = reason; }
29951 void count(Stat s) {
29956 jschar *formatMessage();
29957 jschar *formatJSON(uint64_t timestamp);
29960 JSRuntime *runtime;
29962 int64_t startupTime;
29973 int collectedCount;
29974 int compartmentCount;
29975 const char *nonincrementalReason;
29978 SliceData(gcreason::Reason reason, int64_t start, size_t startFaults)
29979 : reason(reason), resetReason(__null), start(start), startFaults(startFaults)
29981 PodArrayZero(phaseTimes);
29984 gcreason::Reason reason;
29985 const char *resetReason;
29986 int64_t start, end;
29987 size_t startFaults, endFaults;
29988 int64_t phaseTimes[PHASE_LIMIT];
29990 int64_t duration() const { return end - start; }
29993 Vector<SliceData, 8, SystemAllocPolicy> slices;
29996 int64_t phaseStartTimes[PHASE_LIMIT];
29999 int64_t phaseTimes[PHASE_LIMIT];
30002 int64_t phaseTotals[PHASE_LIMIT];
30005 unsigned int counts[STAT_LIMIT];
30013 int64_t gcDuration();
30015 bool formatData(StatisticsSerializer &ss, uint64_t timestamp);
30017 double computeMMU(int64_t resolution);
30020 struct AutoGCSlice {
30021 AutoGCSlice(Statistics &stats, int collectedCount, int compartmentCount, gcreason::Reason reason
30026 stats.beginSlice(collectedCount, compartmentCount, reason);
30028 ~AutoGCSlice() { stats.endSlice(); }
30035 AutoPhase(Statistics &stats, Phase phase )
30036 : stats(stats), phase(phase) { do { } while (0); stats.beginPhase(phase); }
30037 ~AutoPhase() { stats.endPhase(phase); }
30046 # 28 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h" 2
30051 struct JSCompartment;
30056 #define JS_CHECK_STACK_SIZE(limit,lval) ((uintptr_t)(lval) > limit)
30061 class GCHelperThread;
30074 Chunk *emptyChunkListHead;
30079 : emptyChunkListHead(__null),
30082 size_t getEmptyCount() const {
30086 inline bool wantBackgroundAllocation(JSRuntime *rt) const;
30089 inline Chunk *get(JSRuntime *rt);
30092 inline void put(Chunk *chunk);
30098 Chunk *expire(JSRuntime *rt, bool releaseAll);
30101 void expireAndFree(JSRuntime *rt, bool releaseAll);
30104 __attribute__((visibility("default"))) int64_t countCleanDecommittedArenas(JSRuntime *rt);
30107 static inline JSGCTraceKind
30108 MapAllocToTraceKind(AllocKind thingKind)
30110 static const JSGCTraceKind map[FINALIZE_LIMIT] = {
30125 JSTRACE_BASE_SHAPE,
30126 JSTRACE_TYPE_OBJECT,
30134 return map[thingKind];
30137 inline JSGCTraceKind
30138 GetGCThingTraceKind(const void *thing);
30140 struct ArenaLists {
30141 # 134 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
30144 ArenaHeader **cursor;
30157 # 158 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
30158 FreeSpan freeLists[FINALIZE_LIMIT];
30160 ArenaList arenaLists[FINALIZE_LIMIT];
30161 # 179 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
30162 enum BackgroundFinalizeState {
30168 volatile uintptr_t backgroundFinalizeState[FINALIZE_LIMIT];
30173 for (size_t i = 0; i != FINALIZE_LIMIT; ++i)
30174 freeLists[i].initAsEmpty();
30176 for (size_t i = 0; i != FINALIZE_LIMIT; ++i)
30177 backgroundFinalizeState[i] = BFS_DONE;
30182 for (size_t i = 0; i != FINALIZE_LIMIT; ++i) {
30190 ArenaHeader **headp = &arenaLists[i].head;
30191 while (ArenaHeader *aheader = *headp) {
30192 *headp = aheader->next;
30193 aheader->chunk()->releaseArena(aheader);
30198 const FreeSpan *getFreeList(AllocKind thingKind) const {
30199 return &freeLists[thingKind];
30202 ArenaHeader *getFirstArena(AllocKind thingKind) const {
30203 return arenaLists[thingKind].head;
30206 bool arenaListsAreEmpty() const {
30207 for (size_t i = 0; i != FINALIZE_LIMIT; ++i) {
30213 if (backgroundFinalizeState[i] != BFS_DONE)
30216 if (arenaLists[i].head)
30221 # 257 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
30222 bool doneBackgroundFinalize(AllocKind kind) const {
30223 return backgroundFinalizeState[kind] == BFS_DONE;
30232 for (size_t i = 0; i != FINALIZE_LIMIT; ++i) {
30233 FreeSpan *headSpan = &freeLists[i];
30234 if (!headSpan->isEmpty()) {
30235 ArenaHeader *aheader = headSpan->arenaHeader();
30236 aheader->setFirstFreeSpan(headSpan);
30237 headSpan->initAsEmpty();
30242 inline void prepareForIncrementalGC(JSRuntime *rt);
30249 void copyFreeListsToArenas() {
30250 for (size_t i = 0; i != FINALIZE_LIMIT; ++i)
30251 copyFreeListToArena(AllocKind(i));
30254 void copyFreeListToArena(AllocKind thingKind) {
30255 FreeSpan *headSpan = &freeLists[thingKind];
30256 if (!headSpan->isEmpty()) {
30257 ArenaHeader *aheader = headSpan->arenaHeader();
30259 aheader->setFirstFreeSpan(headSpan);
30267 void clearFreeListsInArenas() {
30268 for (size_t i = 0; i != FINALIZE_LIMIT; ++i)
30269 clearFreeListInArena(AllocKind(i));
30273 void clearFreeListInArena(AllocKind kind) {
30274 FreeSpan *headSpan = &freeLists[kind];
30275 if (!headSpan->isEmpty()) {
30276 ArenaHeader *aheader = headSpan->arenaHeader();
30278 aheader->setAsFullyUsed();
30286 bool isSynchronizedFreeList(AllocKind kind) {
30287 FreeSpan *headSpan = &freeLists[kind];
30288 if (headSpan->isEmpty())
30290 ArenaHeader *aheader = headSpan->arenaHeader();
30291 if (aheader->hasFreeThings()) {
30302 __attribute__((always_inline)) inline void *allocateFromFreeList(AllocKind thingKind, size_t thingSize) {
30303 return freeLists[thingKind].allocate(thingSize);
30306 static void *refillFreeList(JSContext *cx, AllocKind thingKind);
30308 void checkEmptyFreeLists() {
30315 void checkEmptyFreeList(AllocKind kind) {
30319 void finalizeObjects(FreeOp *fop);
30320 void finalizeStrings(FreeOp *fop);
30321 void finalizeShapes(FreeOp *fop);
30322 void finalizeScripts(FreeOp *fop);
30325 static void backgroundFinalize(FreeOp *fop, ArenaHeader *listHead);
30329 inline void finalizeNow(FreeOp *fop, AllocKind thingKind);
30330 inline void finalizeLater(FreeOp *fop, AllocKind thingKind);
30332 inline void *allocateFromArena(JSCompartment *comp, AllocKind thingKind);
30340 const size_t INITIAL_CHUNK_CAPACITY = 16 * 1024 * 1024 / ChunkSize;
30343 const size_t MAX_EMPTY_CHUNK_AGE = 4;
30346 AsCell(JSObject *obj)
30348 return reinterpret_cast<Cell *>(obj);
30355 typedef void *Lookup;
30357 static HashNumber hash(void *key) {
30358 return HashNumber(uintptr_t(key) >> JS_GCTHING_ZEROBITS);
30361 static bool match(void *l, void *k) { return l == k; }
30364 typedef HashMap<void *, uint32_t, GCPtrHasher, SystemAllocPolicy> GCLocks;
30368 RootInfo(const char *name, JSGCRootType type) : name(name), type(type) {}
30373 typedef js::HashMap<void *,
30375 js::DefaultHasher<void *>,
30376 js::SystemAllocPolicy> RootedValueMap;
30380 extern __attribute__((visibility("default"))) JSGCTraceKind
30381 js_GetGCThingTraceKind(void *thing);
30384 js_InitGC(JSRuntime *rt, uint32_t maxbytes);
30387 js_FinishGC(JSRuntime *rt);
30390 js_AddRoot(JSContext *cx, js::Value *vp, const char *name);
30393 js_AddGCThingRoot(JSContext *cx, void **rp, const char *name);
30394 # 437 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
30396 js_MapGCRoots(JSRuntime *rt, JSGCRootMapFun map, void *data);
30399 typedef struct JSPtrTable {
30405 js_LockGCThingRT(JSRuntime *rt, void *thing);
30408 js_UnlockGCThingRT(JSRuntime *rt, void *thing);
30411 js_IsAddressableGCThing(JSRuntime *rt, uintptr_t w, js::gc::AllocKind *thingKind, void **thing);
30416 MarkCompartmentActive(js::StackFrame *fp);
30419 TraceRuntime(JSTracer *trc);
30421 extern __attribute__((visibility("default"))) void
30422 MarkContext(JSTracer *trc, JSContext *acx);
30426 TriggerGC(JSRuntime *rt, js::gcreason::Reason reason);
30430 TriggerCompartmentGC(JSCompartment *comp, js::gcreason::Reason reason);
30433 MaybeGC(JSContext *cx);
30436 ShrinkGCBuffers(JSRuntime *rt);
30438 extern __attribute__((visibility("default"))) void
30439 PrepareForFullGC(JSRuntime *rt);
30444 typedef enum JSGCInvocationKind {
30450 } JSGCInvocationKind;
30453 GC(JSRuntime *rt, JSGCInvocationKind gckind, js::gcreason::Reason reason);
30456 GCSlice(JSRuntime *rt, JSGCInvocationKind gckind, js::gcreason::Reason reason);
30459 GCDebugSlice(JSRuntime *rt, bool limit, int64_t objCount);
30462 PrepareForDebugGC(JSRuntime *rt);
30469 InitTracer(JSTracer *trc, JSRuntime *rt, JSTraceCallback callback);
30473 class GCHelperThread {
30481 # 534 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
30482 static const size_t FREE_ARRAY_SIZE = size_t(1) << 16;
30483 static const size_t FREE_ARRAY_LENGTH = FREE_ARRAY_SIZE / sizeof(void *);
30485 JSRuntime *const rt;
30489 volatile State state;
30494 Vector<void **, 16, js::SystemAllocPolicy> freeVector;
30496 void **freeCursorEnd;
30498 Vector<js::gc::ArenaHeader *, 64, js::SystemAllocPolicy> finalizeVector;
30500 bool backgroundAllocation;
30502 friend struct js::gc::ArenaLists;
30504 __attribute__((visibility("default"))) void
30505 replenishAndFreeLater(void *ptr);
30507 static void freeElementsAndArray(void **array, void **end) {
30509 for (void **p = array; p != end; ++p)
30510 js::Foreground::free_(*p);
30511 js::Foreground::free_(array);
30514 static void threadMain(void* arg);
30521 GCHelperThread(JSRuntime *rt)
30529 freeCursor(__null),
30530 freeCursorEnd(__null),
30531 backgroundAllocation(true)
30538 void startBackgroundSweep(bool shouldShrink);
30541 void startBackgroundShrink();
30544 void waitBackgroundSweepEnd();
30547 void waitBackgroundSweepOrAllocEnd();
30550 inline void startBackgroundAllocationIfIdle();
30552 bool canBackgroundAllocate() const {
30553 return backgroundAllocation;
30556 void disableBackgroundAllocation() {
30557 backgroundAllocation = false;
30560 PRThread *getThread() const {
30568 bool sweeping() const {
30569 return state == SWEEPING;
30572 bool shouldShrink() const {
30577 void freeLater(void *ptr) {
30579 if (freeCursor != freeCursorEnd)
30580 *freeCursor++ = ptr;
30582 replenishAndFreeLater(ptr);
30586 bool prepareForBackgroundSweep();
30591 struct GCChunkHasher {
30592 typedef gc::Chunk *Lookup;
30598 static HashNumber hash(gc::Chunk *chunk) {
30600 return HashNumber(uintptr_t(chunk) >> gc::ChunkShift);
30603 static bool match(gc::Chunk *k, gc::Chunk *l) {
30610 typedef HashSet<js::gc::Chunk *, GCChunkHasher, SystemAllocPolicy> GCChunkSet;
30623 MarkStack(size_t sizeLimit)
30628 ballastLimit(__null),
30629 sizeLimit(sizeLimit) { }
30632 if (stack != ballast)
30637 bool init(size_t ballastcap) {
30640 if (ballastcap == 0)
30643 ballast = (T *)js_malloc(sizeof(T) * ballastcap);
30646 ballastLimit = ballast + ballastcap;
30651 void initFromBallast() {
30653 limit = ballastLimit;
30654 if (size_t(limit - stack) > sizeLimit)
30655 limit = stack + sizeLimit;
30659 void setSizeLimit(size_t size) {
30666 bool push(T item) {
30667 if (tos == limit) {
30676 bool push(T item1, T item2, T item3) {
30677 T *nextTos = tos + 3;
30678 if (nextTos > limit) {
30691 bool isEmpty() const {
30692 return tos == stack;
30700 ptrdiff_t position() const {
30701 return tos - stack;
30705 if (stack != ballast)
30712 size_t tosIndex = tos - stack;
30713 size_t cap = limit - stack;
30714 if (cap == sizeLimit)
30716 size_t newcap = cap * 2;
30719 if (newcap > sizeLimit)
30720 newcap = sizeLimit;
30723 if (stack == ballast) {
30724 newStack = (T *)js_malloc(sizeof(T) * newcap);
30727 for (T *src = stack, *dst = newStack; src < tos; )
30730 newStack = (T *)js_realloc(stack, sizeof(T) * newcap);
30735 tos = stack + tosIndex;
30736 limit = newStack + newcap;
30740 size_t sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf) const {
30742 if (stack != ballast)
30743 n += mallocSizeOf(stack);
30744 n += mallocSizeOf(ballast);
30755 struct SliceBudget {
30759 static const intptr_t CounterReset = 1000;
30761 static const int64_t Unlimited = 0;
30762 static int64_t TimeBudget(int64_t millis);
30763 static int64_t WorkBudget(int64_t work);
30769 SliceBudget(int64_t budget);
30772 deadline = (9223372036854775807LL);
30773 counter = (2147483647);
30776 void step(intptr_t amt = 1) {
30780 bool checkOverBudget();
30782 bool isOverBudget() {
30785 return checkOverBudget();
30789 static const size_t MARK_STACK_LENGTH = 32768;
30791 struct GCMarker : public JSTracer {
30804 SavedValueArrayTag,
30805 LastTag = SavedValueArrayTag
30808 static const uintptr_t StackTagMask = 7;
30810 static void staticAsserts() {
30811 typedef int moz_static_assert85[(StackTagMask >= uintptr_t(LastTag)) ? 1 : -1];
30812 typedef int moz_static_assert86[(StackTagMask <= gc::Cell::CellMask) ? 1 : -1];
30816 explicit GCMarker();
30819 void setSizeLimit(size_t size) { stack.setSizeLimit(size); }
30820 size_t sizeLimit() const { return stack.sizeLimit; }
30822 void start(JSRuntime *rt);
30826 void pushObject(JSObject *obj) {
30827 pushTaggedPtr(ObjectTag, obj);
30830 void pushArenaList(gc::ArenaHeader *firstArena) {
30831 pushTaggedPtr(ArenaTag, firstArena);
30834 void pushType(types::TypeObject *type) {
30835 pushTaggedPtr(TypeTag, type);
30839 void pushXML(JSXML *xml) {
30840 pushTaggedPtr(XmlTag, xml);
30844 uint32_t getMarkColor() const {
30847 # 908 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
30848 void setMarkColorGray() {
30854 inline void delayMarkingArena(gc::ArenaHeader *aheader);
30855 void delayMarkingChildren(const void *thing);
30856 void markDelayedChildren(gc::ArenaHeader *aheader);
30857 bool markDelayedChildren(SliceBudget &budget);
30858 bool hasDelayedChildren() const {
30859 return !!unmarkedArenaStackTop;
30863 return isMarkStackEmpty() && !unmarkedArenaStackTop;
30866 bool drainMarkStack(SliceBudget &budget);
30867 # 936 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
30868 bool hasBufferedGrayRoots() const;
30869 void startBufferingGrayRoots();
30870 void endBufferingGrayRoots();
30871 void markBufferedGrayRoots();
30873 static void GrayCallback(JSTracer *trc, void **thing, JSGCTraceKind kind);
30875 size_t sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf) const;
30877 MarkStack<uintptr_t> stack;
30883 void checkCompartment(void *p) {}
30886 void pushTaggedPtr(StackTag tag, void *ptr) {
30887 checkCompartment(ptr);
30888 uintptr_t addr = reinterpret_cast<uintptr_t>(ptr);
30890 if (!stack.push(addr | uintptr_t(tag)))
30891 delayMarkingChildren(ptr);
30894 void pushValueArray(JSObject *obj, void *start, void *end) {
30895 checkCompartment(obj);
30898 uintptr_t tagged = reinterpret_cast<uintptr_t>(obj) | GCMarker::ValueArrayTag;
30899 uintptr_t startAddr = reinterpret_cast<uintptr_t>(start);
30900 uintptr_t endAddr = reinterpret_cast<uintptr_t>(end);
30906 if (!stack.push(endAddr, startAddr, tagged))
30907 delayMarkingChildren(obj);
30910 bool isMarkStackEmpty() {
30911 return stack.isEmpty();
30914 bool restoreValueArray(JSObject *obj, void **vpp, void **endp);
30915 void saveValueRanges();
30916 inline void processMarkStackTop(SliceBudget &budget);
30917 void processMarkStackOther(SliceBudget &budget, uintptr_t tag, uintptr_t addr);
30919 void appendGrayRoot(void *thing, JSGCTraceKind kind);
30924 DebugOnly<bool> started;
30927 js::gc::ArenaHeader *unmarkedArenaStackTop;
30929 DebugOnly<size_t> markLaterArenas;
30933 JSGCTraceKind kind;
30940 GrayRoot(void *thing, JSGCTraceKind kind)
30941 : thing(thing), kind(kind) {}
30945 Vector<GrayRoot, 0, SystemAllocPolicy> grayRoots;
30949 SetMarkStackLimit(JSRuntime *rt, size_t limit);
30952 MarkStackRangeConservatively(JSTracer *trc, Value *begin, Value *end);
30954 typedef void (*IterateChunkCallback)(JSRuntime *rt, void *data, gc::Chunk *chunk);
30955 typedef void (*IterateArenaCallback)(JSRuntime *rt, void *data, gc::Arena *arena,
30956 JSGCTraceKind traceKind, size_t thingSize);
30957 typedef void (*IterateCellCallback)(JSRuntime *rt, void *data, void *thing,
30958 JSGCTraceKind traceKind, size_t thingSize);
30965 extern __attribute__((visibility("default"))) void
30966 IterateCompartmentsArenasCells(JSRuntime *rt, void *data,
30967 JSIterateCompartmentCallback compartmentCallback,
30968 IterateArenaCallback arenaCallback,
30969 IterateCellCallback cellCallback);
30974 extern __attribute__((visibility("default"))) void
30975 IterateChunks(JSRuntime *rt, void *data, IterateChunkCallback chunkCallback);
30981 extern __attribute__((visibility("default"))) void
30982 IterateCells(JSRuntime *rt, JSCompartment *compartment, gc::AllocKind thingKind,
30983 void *data, IterateCellCallback cellCallback);
30988 js_FinalizeStringRT(JSRuntime *rt, JSString *str);
30993 #define IS_GC_MARKING_TRACER(trc) ((trc)->callback == NULL || (trc)->callback == GCMarker::GrayCallback)
31000 NewCompartment(JSContext *cx, JSPrincipals *principals);
31004 RunDebugGC(JSContext *cx);
31007 SetDeterministicGC(JSContext *cx, bool enabled);
31009 const int ZealPokeValue = 1;
31010 const int ZealAllocValue = 2;
31011 const int ZealFrameGCValue = 3;
31012 const int ZealVerifierValue = 4;
31013 const int ZealFrameVerifierValue = 5;
31014 # 1094 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h"
31016 VerifyBarriers(JSRuntime *rt)
31021 MaybeVerifyBarriers(JSContext *cx, bool always = false)
31029 static inline JSCompartment *
31030 GetObjectCompartment(JSObject *obj) { return reinterpret_cast<js::gc::Cell *>(obj)->compartment(); }
31033 # 23 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h" 2
31034 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspropertycache.h" 1
31035 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspropertycache.h"
31036 #define jspropertycache_h___
31051 class PropertyCache;
31053 struct PropertyCacheEntry
31056 const Shape *kshape;
31057 const Shape *pshape;
31060 friend class PropertyCache;
31064 uint8_t scopeIndex;
31066 uint8_t protoIndex;
31069 static const size_t MaxScopeIndex = 15;
31070 static const size_t MaxProtoIndex = 15;
31071 # 53 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspropertycache.h"
31072 bool isOwnPropertyHit() const { return scopeIndex == 0 && protoIndex == 0; }
31073 # 63 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspropertycache.h"
31074 bool isPrototypePropertyHit() const { return scopeIndex == 0 && protoIndex == 1; }
31076 void assign(jsbytecode *kpc, const Shape *kshape, const Shape *pshape,
31077 const Shape *prop, unsigned scopeIndex, unsigned protoIndex) {
31082 this->kshape = kshape;
31083 this->pshape = pshape;
31085 this->scopeIndex = uint8_t(scopeIndex);
31086 this->protoIndex = uint8_t(protoIndex);
31094 #define JS_NO_PROP_CACHE_FILL ((js::PropertyCacheEntry *) NULL + 1)
31100 class PropertyCache
31105 SIZE = ((uint32_t)1 << (SIZE_LOG2)),
31106 MASK = (((uint32_t)1 << (SIZE_LOG2)) - 1)
31109 PropertyCacheEntry table[SIZE];
31113 # 136 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspropertycache.h"
31114 #define PCMETER(x) ((void)0)
31122 static inline uintptr_t
31123 hash(jsbytecode *pc, const Shape *kshape)
31125 return (((uintptr_t(pc) >> SIZE_LOG2) ^ uintptr_t(pc) ^ ((uintptr_t)kshape >> 3)) & MASK);
31128 static inline bool matchShape(JSContext *cx, JSObject *obj, uint32_t shape);
31131 fullTest(JSContext *cx, jsbytecode *pc, JSObject **objp,
31132 JSObject **pobjp, PropertyCacheEntry *entry);
31137 inline void assertEmpty() {}
31141 __attribute__((always_inline)) inline void test(JSContext *cx, jsbytecode *pc,
31142 JSObject *&obj, JSObject *&pobj,
31143 PropertyCacheEntry *&entry, PropertyName *&name);
31144 # 174 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspropertycache.h"
31145 __attribute__((always_inline)) inline bool testForSet(JSContext *cx, jsbytecode *pc, JSObject *obj,
31146 PropertyCacheEntry **entryp, JSObject **obj2p,
31147 PropertyName **namep);
31148 # 186 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jspropertycache.h"
31149 PropertyCacheEntry *fill(JSContext *cx, JSObject *obj, unsigned scopeIndex,
31150 JSObject *pobj, const js::Shape *shape);
31152 void purge(JSRuntime *rt);
31155 void restore(PropertyCacheEntry *entry);
31159 # 24 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h" 2
31162 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/prmjtime.h" 1
31170 #define prmjtime_h___
31172 # 1 "/usr/include/time.h" 1 3 4
31173 # 27 "/usr/include/time.h" 3 4
31183 #define __need_size_t
31184 #define __need_NULL
31185 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
31186 # 160 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
31187 #undef __need_ptrdiff_t
31188 # 233 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
31189 #undef __need_size_t
31190 # 342 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
31191 #undef __need_wchar_t
31192 # 395 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
31195 #define NULL __null
31196 # 406 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 3 4
31202 #define offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)
31203 # 39 "/usr/include/time.h" 2 3 4
31207 # 1 "/usr/include/bits/time.h" 1 3 4
31208 # 41 "/usr/include/bits/time.h" 3 4
31209 #define _BITS_TIME_H 1
31217 #define CLOCKS_PER_SEC 1000000l
31218 # 61 "/usr/include/bits/time.h" 3 4
31219 #define CLOCK_REALTIME 0
31221 #define CLOCK_MONOTONIC 1
31223 #define CLOCK_PROCESS_CPUTIME_ID 2
31225 #define CLOCK_THREAD_CPUTIME_ID 3
31227 #define CLOCK_MONOTONIC_RAW 4
31229 #define CLOCK_REALTIME_COARSE 5
31231 #define CLOCK_MONOTONIC_COARSE 6
31233 #define CLOCK_BOOTTIME 7
31235 #define CLOCK_REALTIME_ALARM 8
31237 #define CLOCK_BOOTTIME_ALARM 9
31240 #define TIMER_ABSTIME 1
31244 # 1 "/usr/include/bits/timex.h" 1 3 4
31245 # 20 "/usr/include/bits/timex.h" 3 4
31246 #define _BITS_TIMEX_H 1
31252 unsigned int modes;
31259 long int precision;
31260 long int tolerance;
31261 struct timeval time;
31276 int :32; int :32; int :32; int :32;
31277 int :32; int :32; int :32; int :32;
31278 int :32; int :32; int :32;
31282 #define ADJ_OFFSET 0x0001
31283 #define ADJ_FREQUENCY 0x0002
31284 #define ADJ_MAXERROR 0x0004
31285 #define ADJ_ESTERROR 0x0008
31286 #define ADJ_STATUS 0x0010
31287 #define ADJ_TIMECONST 0x0020
31288 #define ADJ_TAI 0x0080
31289 #define ADJ_MICRO 0x1000
31290 #define ADJ_NANO 0x2000
31291 #define ADJ_TICK 0x4000
31292 #define ADJ_OFFSET_SINGLESHOT 0x8001
31293 #define ADJ_OFFSET_SS_READ 0xa001
31296 #define MOD_OFFSET ADJ_OFFSET
31297 #define MOD_FREQUENCY ADJ_FREQUENCY
31298 #define MOD_MAXERROR ADJ_MAXERROR
31299 #define MOD_ESTERROR ADJ_ESTERROR
31300 #define MOD_STATUS ADJ_STATUS
31301 #define MOD_TIMECONST ADJ_TIMECONST
31302 #define MOD_CLKB ADJ_TICK
31303 #define MOD_CLKA ADJ_OFFSET_SINGLESHOT
31304 #define MOD_TAI ADJ_TAI
31305 #define MOD_MICRO ADJ_MICRO
31306 #define MOD_NANO ADJ_NANO
31310 #define STA_PLL 0x0001
31311 #define STA_PPSFREQ 0x0002
31312 #define STA_PPSTIME 0x0004
31313 #define STA_FLL 0x0008
31315 #define STA_INS 0x0010
31316 #define STA_DEL 0x0020
31317 #define STA_UNSYNC 0x0040
31318 #define STA_FREQHOLD 0x0080
31320 #define STA_PPSSIGNAL 0x0100
31321 #define STA_PPSJITTER 0x0200
31322 #define STA_PPSWANDER 0x0400
31323 #define STA_PPSERROR 0x0800
31325 #define STA_CLOCKERR 0x1000
31326 #define STA_NANO 0x2000
31327 #define STA_MODE 0x4000
31328 #define STA_CLK 0x8000
31331 #define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
31332 # 87 "/usr/include/bits/time.h" 2 3 4
31337 extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) throw ();
31345 #undef __need_timeval
31346 # 43 "/usr/include/time.h" 2 3 4
31347 # 67 "/usr/include/time.h" 3 4
31348 #undef __need_clock_t
31349 # 83 "/usr/include/time.h" 3 4
31350 #undef __need_time_t
31351 # 95 "/usr/include/time.h" 3 4
31352 #undef __clockid_time_t
31353 # 107 "/usr/include/time.h" 3 4
31354 #undef __need_timer_t
31355 # 127 "/usr/include/time.h" 3 4
31356 #undef __need_timespec
31375 long int tm_gmtoff;
31376 __const char *tm_zone;
31392 struct timespec it_interval;
31393 struct timespec it_value;
31398 # 180 "/usr/include/time.h" 3 4
31402 extern clock_t clock (void) throw ();
31405 extern time_t time (time_t *__timer) throw ();
31408 extern double difftime (time_t __time1, time_t __time0)
31409 throw () __attribute__ ((__const__));
31412 extern time_t mktime (struct tm *__tp) throw ();
31418 extern size_t strftime (char *__restrict __s, size_t __maxsize,
31419 __const char *__restrict __format,
31420 __const struct tm *__restrict __tp) throw ();
31426 extern char *strptime (__const char *__restrict __s,
31427 __const char *__restrict __fmt, struct tm *__tp)
31436 extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
31437 __const char *__restrict __format,
31438 __const struct tm *__restrict __tp,
31439 __locale_t __loc) throw ();
31443 extern char *strptime_l (__const char *__restrict __s,
31444 __const char *__restrict __fmt, struct tm *__tp,
31445 __locale_t __loc) throw ();
31452 extern struct tm *gmtime (__const time_t *__timer) throw ();
31456 extern struct tm *localtime (__const time_t *__timer) throw ();
31462 extern struct tm *gmtime_r (__const time_t *__restrict __timer,
31463 struct tm *__restrict __tp) throw ();
31467 extern struct tm *localtime_r (__const time_t *__restrict __timer,
31468 struct tm *__restrict __tp) throw ();
31474 extern char *asctime (__const struct tm *__tp) throw ();
31477 extern char *ctime (__const time_t *__timer) throw ();
31485 extern char *asctime_r (__const struct tm *__restrict __tp,
31486 char *__restrict __buf) throw ();
31489 extern char *ctime_r (__const time_t *__restrict __timer,
31490 char *__restrict __buf) throw ();
31495 extern char *__tzname[2];
31496 extern int __daylight;
31497 extern long int __timezone;
31502 extern char *tzname[2];
31506 extern void tzset (void) throw ();
31510 extern int daylight;
31511 extern long int timezone;
31517 extern int stime (__const time_t *__when) throw ();
31523 #define __isleap(year) ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
31524 # 313 "/usr/include/time.h" 3 4
31525 extern time_t timegm (struct tm *__tp) throw ();
31528 extern time_t timelocal (struct tm *__tp) throw ();
31531 extern int dysize (int __year) throw () __attribute__ ((__const__));
31532 # 328 "/usr/include/time.h" 3 4
31533 extern int nanosleep (__const struct timespec *__requested_time,
31534 struct timespec *__remaining);
31538 extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw ();
31541 extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw ();
31544 extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
31552 extern int clock_nanosleep (clockid_t __clock_id, int __flags,
31553 __const struct timespec *__req,
31554 struct timespec *__rem);
31557 extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw ();
31562 extern int timer_create (clockid_t __clock_id,
31563 struct sigevent *__restrict __evp,
31564 timer_t *__restrict __timerid) throw ();
31567 extern int timer_delete (timer_t __timerid) throw ();
31570 extern int timer_settime (timer_t __timerid, int __flags,
31571 __const struct itimerspec *__restrict __value,
31572 struct itimerspec *__restrict __ovalue) throw ();
31575 extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
31579 extern int timer_getoverrun (timer_t __timerid) throw ();
31580 # 390 "/usr/include/time.h" 3 4
31581 extern int getdate_err;
31582 # 399 "/usr/include/time.h" 3 4
31583 extern struct tm *getdate (__const char *__string);
31584 # 413 "/usr/include/time.h" 3 4
31585 extern int getdate_r (__const char *__restrict __string,
31586 struct tm *__restrict __resbufp);
31590 # 11 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/prmjtime.h" 2
31593 # 58 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/prmjtime.h"
31594 class DSTOffsetCache {
31596 inline DSTOffsetCache();
31597 int64_t getDSTOffsetMilliseconds(int64_t localTimeMilliseconds, JSContext *cx);
31599 inline void purge();
31602 int64_t computeDSTOffsetMilliseconds(int64_t localTimeSeconds);
31604 int64_t offsetMilliseconds;
31605 int64_t rangeStartSeconds, rangeEndSeconds;
31607 int64_t oldOffsetMilliseconds;
31608 int64_t oldRangeStartSeconds, oldRangeEndSeconds;
31610 static const int64_t MAX_UNIX_TIMET = 2145859200;
31611 static const int64_t MILLISECONDS_PER_SECOND = 1000;
31612 static const int64_t SECONDS_PER_MINUTE = 60;
31613 static const int64_t SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;
31614 static const int64_t SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;
31616 static const int64_t RANGE_EXPANSION_AMOUNT = 30 * SECONDS_PER_DAY;
31619 void sanityCheck();
31624 typedef struct PRMJTime PRMJTime;
31643 #define PRMJ_USEC_PER_SEC 1000000L
31644 #define PRMJ_USEC_PER_MSEC 1000L
31655 #define PRMJ_NowShutdown()
31660 PRMJ_LocalGMTDifference(void);
31664 PRMJ_FormatTime(char *buf, int buflen, const char *fmt, PRMJTime *tm);
31667 # 27 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h" 2
31673 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h" 1
31674 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
31677 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfun.h" 1
31693 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h" 1
31694 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
31695 #define jsscript_h___
31701 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsdbgapi.h" 1
31702 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsdbgapi.h"
31703 #define jsdbgapi_h___
31712 extern __attribute__((visibility("default"))) JSCrossCompartmentCall *
31713 JS_EnterCrossCompartmentCallScript(JSContext *cx, JSScript *target);
31715 extern __attribute__((visibility("default"))) JSCrossCompartmentCall *
31716 JS_EnterCrossCompartmentCallStackFrame(JSContext *cx, JSStackFrame *target);
31723 class __attribute__((visibility("default"))) AutoEnterScriptCompartment
31726 JSCrossCompartmentCall *call;
31729 AutoEnterScriptCompartment() : call(__null) {}
31731 bool enter(JSContext *cx, JSScript *target);
31733 bool entered() const { return call != __null; }
31735 ~AutoEnterScriptCompartment() {
31736 if (call && call != reinterpret_cast<JSCrossCompartmentCall*>(1))
31737 JS_LeaveCrossCompartmentCall(call);
31741 class __attribute__((visibility("default"))) AutoEnterFrameCompartment : public AutoEnterScriptCompartment
31744 bool enter(JSContext *cx, JSStackFrame *target);
31754 __attribute__((visibility("default"))) void js_DumpBacktrace(JSContext *cx);
31759 extern __attribute__((visibility("default"))) JSString *
31760 JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, unsigned indent);
31766 extern __attribute__((visibility("default"))) void
31767 JS_SetRuntimeDebugMode(JSRuntime *rt, JSBool debug);
31768 # 86 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsdbgapi.h"
31769 extern __attribute__((visibility("default"))) JSBool
31770 JS_GetDebugMode(JSContext *cx);
31776 __attribute__((visibility("default"))) JSBool
31777 JS_SetDebugModeForAllCompartments(JSContext *cx, JSBool debug);
31784 __attribute__((visibility("default"))) JSBool
31785 JS_SetDebugModeForCompartment(JSContext *cx, JSCompartment *comp, JSBool debug);
31790 __attribute__((visibility("default"))) JSBool
31791 JS_SetDebugMode(JSContext *cx, JSBool debug);
31794 extern __attribute__((visibility("default"))) JSBool
31795 JS_SetSingleStepMode(JSContext *cx, JSScript *script, JSBool singleStep);
31798 extern __attribute__((visibility("default"))) JSBool
31799 JS_SetTrap(JSContext *cx, JSScript *script, jsbytecode *pc,
31800 JSTrapHandler handler, jsval closure);
31802 extern __attribute__((visibility("default"))) void
31803 JS_ClearTrap(JSContext *cx, JSScript *script, jsbytecode *pc,
31804 JSTrapHandler *handlerp, jsval *closurep);
31806 extern __attribute__((visibility("default"))) void
31807 JS_ClearScriptTraps(JSContext *cx, JSScript *script);
31809 extern __attribute__((visibility("default"))) void
31810 JS_ClearAllTrapsForCompartment(JSContext *cx);
31812 extern __attribute__((visibility("default"))) JSBool
31813 JS_SetInterrupt(JSRuntime *rt, JSInterruptHook handler, void *closure);
31815 extern __attribute__((visibility("default"))) JSBool
31816 JS_ClearInterrupt(JSRuntime *rt, JSInterruptHook *handlerp, void **closurep);
31820 extern __attribute__((visibility("default"))) JSBool
31821 JS_SetWatchPoint(JSContext *cx, JSObject *obj, jsid id,
31822 JSWatchPointHandler handler, JSObject *closure);
31824 extern __attribute__((visibility("default"))) JSBool
31825 JS_ClearWatchPoint(JSContext *cx, JSObject *obj, jsid id,
31826 JSWatchPointHandler *handlerp, JSObject **closurep);
31828 extern __attribute__((visibility("default"))) JSBool
31829 JS_ClearWatchPointsForObject(JSContext *cx, JSObject *obj);
31831 extern __attribute__((visibility("default"))) JSBool
31832 JS_ClearAllWatchPoints(JSContext *cx);
31836 extern __attribute__((visibility("default"))) unsigned
31837 JS_PCToLineNumber(JSContext *cx, JSScript *script, jsbytecode *pc);
31839 extern __attribute__((visibility("default"))) jsbytecode *
31840 JS_LineNumberToPC(JSContext *cx, JSScript *script, unsigned lineno);
31842 extern __attribute__((visibility("default"))) jsbytecode *
31843 JS_EndPC(JSContext *cx, JSScript *script);
31845 extern __attribute__((visibility("default"))) JSBool
31846 JS_GetLinePCs(JSContext *cx, JSScript *script,
31847 unsigned startLine, unsigned maxLines,
31848 unsigned* count, unsigned** lines, jsbytecode*** pcs);
31850 extern __attribute__((visibility("default"))) unsigned
31851 JS_GetFunctionArgumentCount(JSContext *cx, JSFunction *fun);
31853 extern __attribute__((visibility("default"))) JSBool
31854 JS_FunctionHasLocalNames(JSContext *cx, JSFunction *fun);
31861 extern __attribute__((visibility("default"))) uintptr_t *
31862 JS_GetFunctionLocalNameArray(JSContext *cx, JSFunction *fun, void **markp);
31864 extern __attribute__((visibility("default"))) JSAtom *
31865 JS_LocalNameToAtom(uintptr_t w);
31867 extern __attribute__((visibility("default"))) JSString *
31868 JS_AtomKey(JSAtom *atom);
31870 extern __attribute__((visibility("default"))) void
31871 JS_ReleaseFunctionLocalNameArray(JSContext *cx, void *mark);
31873 extern __attribute__((visibility("default"))) JSScript *
31874 JS_GetFunctionScript(JSContext *cx, JSFunction *fun);
31876 extern __attribute__((visibility("default"))) JSNative
31877 JS_GetFunctionNative(JSContext *cx, JSFunction *fun);
31879 extern __attribute__((visibility("default"))) JSPrincipals *
31880 JS_GetScriptPrincipals(JSScript *script);
31882 extern __attribute__((visibility("default"))) JSPrincipals *
31883 JS_GetScriptOriginPrincipals(JSScript *script);
31884 # 209 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsdbgapi.h"
31885 extern __attribute__((visibility("default"))) JSStackFrame *
31886 JS_FrameIterator(JSContext *cx, JSStackFrame **iteratorp);
31888 extern __attribute__((visibility("default"))) JSScript *
31889 JS_GetFrameScript(JSContext *cx, JSStackFrame *fp);
31891 extern __attribute__((visibility("default"))) jsbytecode *
31892 JS_GetFramePC(JSContext *cx, JSStackFrame *fp);
31894 extern __attribute__((visibility("default"))) void *
31895 JS_GetFrameAnnotation(JSContext *cx, JSStackFrame *fp);
31897 extern __attribute__((visibility("default"))) void
31898 JS_SetFrameAnnotation(JSContext *cx, JSStackFrame *fp, void *annotation);
31900 extern __attribute__((visibility("default"))) JSBool
31901 JS_IsScriptFrame(JSContext *cx, JSStackFrame *fp);
31903 extern __attribute__((visibility("default"))) JSObject *
31904 JS_GetFrameScopeChain(JSContext *cx, JSStackFrame *fp);
31906 extern __attribute__((visibility("default"))) JSObject *
31907 JS_GetFrameCallObject(JSContext *cx, JSStackFrame *fp);
31909 extern __attribute__((visibility("default"))) JSBool
31910 JS_GetFrameThis(JSContext *cx, JSStackFrame *fp, jsval *thisv);
31912 extern __attribute__((visibility("default"))) JSFunction *
31913 JS_GetFrameFunction(JSContext *cx, JSStackFrame *fp);
31915 extern __attribute__((visibility("default"))) JSObject *
31916 JS_GetFrameFunctionObject(JSContext *cx, JSStackFrame *fp);
31918 __attribute__((visibility("default"))) JSFunction *
31919 JS_GetScriptFunction(JSContext *cx, JSScript *script);
31921 extern __attribute__((visibility("default"))) JSObject *
31922 JS_GetParentOrScopeChain(JSContext *cx, JSObject *obj);
31925 #define JS_IsContructorFrame JS_IsConstructorFrame
31926 extern __attribute__((visibility("default"))) JSBool
31927 JS_IsConstructorFrame(JSContext *cx, JSStackFrame *fp);
31929 extern __attribute__((visibility("default"))) JSBool
31930 JS_IsDebuggerFrame(JSContext *cx, JSStackFrame *fp);
31932 extern __attribute__((visibility("default"))) JSBool
31933 JS_IsGlobalFrame(JSContext *cx, JSStackFrame *fp);
31935 extern __attribute__((visibility("default"))) jsval
31936 JS_GetFrameReturnValue(JSContext *cx, JSStackFrame *fp);
31938 extern __attribute__((visibility("default"))) void
31939 JS_SetFrameReturnValue(JSContext *cx, JSStackFrame *fp, jsval rval);
31946 extern __attribute__((visibility("default"))) JSObject *
31947 JS_GetFrameCalleeObject(JSContext *cx, JSStackFrame *fp);
31948 # 281 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsdbgapi.h"
31949 extern __attribute__((visibility("default"))) const char *
31950 JS_GetDebugClassName(JSObject *obj);
31954 extern __attribute__((visibility("default"))) const char *
31955 JS_GetScriptFilename(JSContext *cx, JSScript *script);
31957 extern __attribute__((visibility("default"))) const jschar *
31958 JS_GetScriptSourceMap(JSContext *cx, JSScript *script);
31960 extern __attribute__((visibility("default"))) unsigned
31961 JS_GetScriptBaseLineNumber(JSContext *cx, JSScript *script);
31963 extern __attribute__((visibility("default"))) unsigned
31964 JS_GetScriptLineExtent(JSContext *cx, JSScript *script);
31966 extern __attribute__((visibility("default"))) JSVersion
31967 JS_GetScriptVersion(JSContext *cx, JSScript *script);
31968 # 308 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsdbgapi.h"
31969 #define JS_SetNewScriptHook JS_SetNewScriptHookProc
31970 #define JS_SetDestroyScriptHook JS_SetDestroyScriptHookProc
31972 extern __attribute__((visibility("default"))) void
31973 JS_SetNewScriptHookProc(JSRuntime *rt, JSNewScriptHook hook, void *callerdata);
31975 extern __attribute__((visibility("default"))) void
31976 JS_SetDestroyScriptHookProc(JSRuntime *rt, JSDestroyScriptHook hook,
31981 extern __attribute__((visibility("default"))) JSBool
31982 JS_EvaluateUCInStackFrame(JSContext *cx, JSStackFrame *fp,
31983 const jschar *chars, unsigned length,
31984 const char *filename, unsigned lineno,
31987 extern __attribute__((visibility("default"))) JSBool
31988 JS_EvaluateInStackFrame(JSContext *cx, JSStackFrame *fp,
31989 const char *bytes, unsigned length,
31990 const char *filename, unsigned lineno,
31995 typedef struct JSPropertyDesc {
32004 #define JSPD_ENUMERATE 0x01
32005 #define JSPD_READONLY 0x02
32006 #define JSPD_PERMANENT 0x04
32007 #define JSPD_ALIAS 0x08
32008 #define JSPD_ARGUMENT 0x10
32009 #define JSPD_VARIABLE 0x20
32010 #define JSPD_EXCEPTION 0x40
32012 #define JSPD_ERROR 0x80
32015 typedef struct JSPropertyDescArray {
32017 JSPropertyDesc *array;
32018 } JSPropertyDescArray;
32020 typedef struct JSScopeProperty JSScopeProperty;
32022 extern __attribute__((visibility("default"))) JSBool
32023 JS_GetPropertyDescArray(JSContext *cx, JSObject *obj, JSPropertyDescArray *pda);
32025 extern __attribute__((visibility("default"))) void
32026 JS_PutPropertyDescArray(JSContext *cx, JSPropertyDescArray *pda);
32030 extern __attribute__((visibility("default"))) JSBool
32031 JS_SetDebuggerHandler(JSRuntime *rt, JSDebuggerHandler hook, void *closure);
32033 extern __attribute__((visibility("default"))) JSBool
32034 JS_SetSourceHandler(JSRuntime *rt, JSSourceHandler handler, void *closure);
32036 extern __attribute__((visibility("default"))) JSBool
32037 JS_SetExecuteHook(JSRuntime *rt, JSInterpreterHook hook, void *closure);
32039 extern __attribute__((visibility("default"))) JSBool
32040 JS_SetCallHook(JSRuntime *rt, JSInterpreterHook hook, void *closure);
32042 extern __attribute__((visibility("default"))) JSBool
32043 JS_SetThrowHook(JSRuntime *rt, JSThrowHook hook, void *closure);
32045 extern __attribute__((visibility("default"))) JSBool
32046 JS_SetDebugErrorHook(JSRuntime *rt, JSDebugErrorHook hook, void *closure);
32050 extern __attribute__((visibility("default"))) size_t
32051 JS_GetObjectTotalSize(JSContext *cx, JSObject *obj);
32053 extern __attribute__((visibility("default"))) size_t
32054 JS_GetFunctionTotalSize(JSContext *cx, JSFunction *fun);
32056 extern __attribute__((visibility("default"))) size_t
32057 JS_GetScriptTotalSize(JSContext *cx, JSScript *script);
32065 extern __attribute__((visibility("default"))) JSBool
32066 JS_IsSystemObject(JSContext *cx, JSObject *obj);
32073 extern __attribute__((visibility("default"))) JSBool
32074 JS_MakeSystemObject(JSContext *cx, JSObject *obj);
32078 extern __attribute__((visibility("default"))) void
32079 js_RevertVersion(JSContext *cx);
32081 extern __attribute__((visibility("default"))) const JSDebugHooks *
32082 JS_GetGlobalDebugHooks(JSRuntime *rt);
32083 # 434 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsdbgapi.h"
32084 extern __attribute__((visibility("default"))) JSBool
32085 JS_StartProfiling(const char *profileName);
32091 extern __attribute__((visibility("default"))) JSBool
32092 JS_StopProfiling(const char *profileName);
32098 extern __attribute__((visibility("default"))) JSBool
32099 JS_DumpProfile(const char *outfile, const char *profileName);
32106 extern __attribute__((visibility("default"))) JSBool
32107 JS_PauseProfilers(const char *profileName);
32112 extern __attribute__((visibility("default"))) JSBool
32113 JS_ResumeProfilers(const char *profileName);
32118 extern __attribute__((visibility("default"))) JSBool
32119 JS_DefineProfilingFunctions(JSContext *cx, JSObject *obj);
32122 extern __attribute__((visibility("default"))) JSBool
32123 JS_DefineDebuggerObject(JSContext *cx, JSObject *obj);
32130 __attribute__((visibility("default"))) const char *
32131 JS_UnsafeGetLastProfilingError();
32132 # 514 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsdbgapi.h"
32133 extern __attribute__((visibility("default"))) JSBool
32136 extern __attribute__((visibility("default"))) JSBool
32141 extern __attribute__((visibility("default"))) void
32142 JS_DumpBytecode(JSContext *cx, JSScript *script);
32144 extern __attribute__((visibility("default"))) void
32145 JS_DumpCompartmentBytecode(JSContext *cx);
32147 extern __attribute__((visibility("default"))) void
32148 JS_DumpPCCounts(JSContext *cx, JSScript *script);
32150 extern __attribute__((visibility("default"))) void
32151 JS_DumpCompartmentPCCounts(JSContext *cx);
32153 extern __attribute__((visibility("default"))) JSObject *
32154 JS_UnwrapObject(JSObject *obj);
32156 extern __attribute__((visibility("default"))) JSObject *
32157 JS_UnwrapObjectAndInnerize(JSObject *obj);
32160 extern __attribute__((visibility("default"))) JSBool
32161 js_CallContextDebugHandler(JSContext *cx);
32164 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h" 2
32167 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.h" 1
32175 #define jsopcode_h___
32180 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
32181 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.h" 2
32191 typedef enum JSOp {
32192 #define OPDEF(op,val,name,token,length,nuses,ndefs,prec,format) op = val,
32194 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.tbl" 1
32195 # 80 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.tbl"
32199 JSOP_UNDEFINED = 1,
32201 JSOP_ENTERWITH = 3,
32202 JSOP_LEAVEWITH = 4,
32209 JSOP_ARGUMENTS = 9,
32217 JSOP_SETCONST = 14,
32262 JSOP_CALLNAME = 57,
32277 JSOP_TABLESWITCH = 70,
32278 JSOP_LOOKUPSWITCH = 71,
32281 JSOP_STRICTEQ = 72,
32282 JSOP_STRICTNE = 73,
32289 # 186 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.tbl"
32291 JSOP_MOREITER = 76,
32292 JSOP_ITERNEXT = 77,
32295 JSOP_FUNAPPLY = 79,
32311 JSOP_GETLOCAL = 86,
32312 JSOP_SETLOCAL = 87,
32316 # 221 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.tbl"
32318 JSOP_NEWARRAY = 90,
32319 JSOP_NEWOBJECT = 91,
32321 JSOP_INITPROP = 93,
32322 JSOP_INITELEM = 94,
32323 JSOP_UNUSED14 = 95,
32324 JSOP_UNUSED15 = 96,
32332 JSOP_INCLOCAL = 101,
32333 JSOP_DECLOCAL = 102,
32334 JSOP_LOCALINC = 103,
32335 JSOP_LOCALDEC = 104,
32338 JSOP_LEAVEFORLETIN = 105,
32342 JSOP_UNUSED3 = 107,
32345 JSOP_FUNCALL = 108,
32348 JSOP_LOOPHEAD = 109,
32351 JSOP_BINDNAME = 110,
32352 JSOP_SETNAME = 111,
32359 JSOP_INSTANCEOF = 114,
32362 JSOP_DEBUGGER = 115,
32369 JSOP_EXCEPTION = 118,
32379 JSOP_CONDSWITCH = 120,
32381 JSOP_DEFAULT = 122,
32391 JSOP_ENUMELEM = 124,
32405 JSOP_DEFCONST = 128,
32414 JSOP_UNUSED31 = 132,
32424 JSOP_FINALLY = 135,
32425 # 337 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.tbl"
32426 JSOP_GETALIASEDVAR = 136,
32427 JSOP_CALLALIASEDVAR = 137,
32428 JSOP_SETALIASEDVAR = 138,
32429 JSOP_INCALIASEDVAR = 139,
32430 JSOP_DECALIASEDVAR = 140,
32431 JSOP_ALIASEDVARINC = 141,
32432 JSOP_ALIASEDVARDEC = 142,
32435 JSOP_UNUSED8 = 143,
32436 JSOP_UNUSED9 = 144,
32437 JSOP_UNUSED10 = 145,
32438 JSOP_UNUSED11 = 146,
32439 JSOP_UNUSED12 = 147,
32440 JSOP_UNUSED13 = 148,
32443 JSOP_BACKPATCH = 149,
32444 JSOP_BACKPATCH_POP = 150,
32447 JSOP_THROWING = 151,
32450 JSOP_SETRVAL = 152,
32451 JSOP_RETRVAL = 153,
32454 JSOP_GETGNAME = 154,
32455 JSOP_SETGNAME = 155,
32456 JSOP_INCGNAME = 156,
32457 JSOP_DECGNAME = 157,
32458 JSOP_GNAMEINC = 158,
32459 JSOP_GNAMEDEC = 159,
32465 JSOP_DEFXMLNS = 161,
32466 JSOP_ANYNAME = 162,
32467 JSOP_QNAMEPART = 163,
32468 JSOP_QNAMECONST = 164,
32470 JSOP_TOATTRNAME = 166,
32471 JSOP_TOATTRVAL = 167,
32472 JSOP_ADDATTRNAME = 168,
32473 JSOP_ADDATTRVAL = 169,
32474 JSOP_BINDXMLNAME = 170,
32475 JSOP_SETXMLNAME = 171,
32476 JSOP_XMLNAME = 172,
32477 JSOP_DESCENDANTS = 173,
32479 JSOP_ENDFILTER = 175,
32481 JSOP_TOXMLLIST = 177,
32482 JSOP_XMLTAGEXPR = 178,
32483 JSOP_XMLELTEXPR = 179,
32484 JSOP_XMLCDATA = 180,
32485 JSOP_XMLCOMMENT = 181,
32487 JSOP_DELDESC = 183,
32489 JSOP_CALLPROP = 184,
32492 JSOP_ENTERLET0 = 185,
32495 JSOP_ENTERLET1 = 186,
32502 JSOP_UNUSED18 = 188,
32503 JSOP_UNUSED19 = 189,
32504 JSOP_UNUSED20 = 190,
32509 JSOP_STARTXML = 191,
32510 JSOP_STARTXMLEXPR = 192,
32512 JSOP_CALLELEM = 193,
32524 JSOP_GETXPROP = 195,
32526 JSOP_CALLXMLNAME = 196,
32531 JSOP_TYPEOFEXPR = 197,
32536 JSOP_ENTERBLOCK = 198,
32537 JSOP_LEAVEBLOCK = 199,
32540 JSOP_UNUSED1 = 200,
32541 JSOP_UNUSED2 = 201,
32546 JSOP_GENERATOR = 202,
32548 JSOP_ARRAYPUSH = 204,
32553 JSOP_GETFUNNS = 205,
32558 JSOP_ENUMCONSTELEM = 206,
32564 JSOP_LEAVEBLOCKEXPR = 207,
32566 JSOP_UNUSED21 = 208,
32567 JSOP_UNUSED22 = 209,
32568 JSOP_UNUSED23 = 210,
32570 JSOP_CALLGNAME = 211,
32571 JSOP_CALLLOCAL = 212,
32572 JSOP_CALLARG = 213,
32573 JSOP_BINDGNAME = 214,
32593 JSOP_UNUSED17 = 219,
32594 JSOP_UNUSED24 = 220,
32595 JSOP_UNUSED25 = 221,
32596 JSOP_UNUSED29 = 222,
32597 JSOP_UNUSED30 = 223,
32605 JSOP_IMPLICITTHIS = 226,
32608 JSOP_LOOPENTRY = 227,
32610 JSOP_ACTUALSFILLED = 228,
32611 # 27 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.h" 2
32620 JSOP_GETPROP2 = JSOP_LIMIT,
32621 JSOP_GETELEM2 = JSOP_LIMIT + 1,
32622 JSOP_FORLOCAL = JSOP_LIMIT + 2,
32623 JSOP_FAKE_LIMIT = JSOP_FORLOCAL
32632 #define JOF_UINT16 3
32633 #define JOF_TABLESWITCH 4
32634 #define JOF_LOOKUPSWITCH 5
32636 #define JOF_LOCAL 7
32637 #define JOF_DOUBLE 8
32638 #define JOF_UINT24 12
32639 #define JOF_UINT8 13
32641 #define JOF_INT32 14
32642 #define JOF_OBJECT 15
32643 #define JOF_SLOTOBJECT 16
32644 #define JOF_REGEXP 17
32645 #define JOF_INT8 18
32646 #define JOF_ATOMOBJECT 19
32647 #define JOF_UINT16PAIR 20
32648 #define JOF_SCOPECOORD 21
32649 #define JOF_TYPEMASK 0x001f
32651 #define JOF_NAME (1U<<5)
32652 #define JOF_PROP (2U<<5)
32653 #define JOF_ELEM (3U<<5)
32654 #define JOF_XMLNAME (4U<<5)
32655 #define JOF_MODEMASK (7U<<5)
32656 #define JOF_SET (1U<<8)
32657 #define JOF_DEL (1U<<9)
32658 #define JOF_DEC (1U<<10)
32659 #define JOF_INC (2U<<10)
32660 #define JOF_INCDEC (3U<<10)
32661 #define JOF_POST (1U<<12)
32662 #define JOF_ASSIGNING JOF_SET
32664 #define JOF_DETECTING (1U<<14)
32665 #define JOF_BACKPATCH (1U<<15)
32666 #define JOF_LEFTASSOC (1U<<16)
32667 #define JOF_DECLARING (1U<<17)
32669 #define JOF_PARENHEAD (1U<<20)
32671 #define JOF_INVOKE (1U<<21)
32672 #define JOF_TMPSLOT (1U<<22)
32675 #define JOF_TMPSLOT2 (2U<<22)
32677 #define JOF_TMPSLOT3 (3U<<22)
32679 #define JOF_TMPSLOT_SHIFT 22
32680 #define JOF_TMPSLOT_MASK (JS_BITMASK(2) << JOF_TMPSLOT_SHIFT)
32683 #define JOF_GNAME (1U<<25)
32684 #define JOF_TYPESET (1U<<26)
32685 #define JOF_DECOMPOSE (1U<<27)
32687 #define JOF_ARITH (1U<<28)
32690 #define JOF_TYPE(fmt) ((fmt) & JOF_TYPEMASK)
32691 #define JOF_OPTYPE(op) JOF_TYPE(js_CodeSpec[op].format)
32694 #define JOF_MODE(fmt) ((fmt) & JOF_MODEMASK)
32695 #define JOF_OPMODE(op) JOF_MODE(js_CodeSpec[op].format)
32697 #define JOF_TYPE_IS_EXTENDED_JUMP(t) ((unsigned)((t) - JOF_JUMP) <= (unsigned)(JOF_LOOKUPSWITCH - JOF_JUMP))
32704 static __attribute__((always_inline)) inline uint8_t
32705 GET_UINT8(jsbytecode *pc)
32707 return (uint8_t) pc[1];
32710 static __attribute__((always_inline)) inline void
32711 SET_UINT8(jsbytecode *pc, uint8_t u)
32713 pc[1] = (jsbytecode) u;
32717 #define UINT16_LEN 2
32718 #define UINT16_HI(i) ((jsbytecode)((i) >> 8))
32719 #define UINT16_LO(i) ((jsbytecode)(i))
32720 #define GET_UINT16(pc) ((unsigned)(((pc)[1] << 8) | (pc)[2]))
32721 #define SET_UINT16(pc,i) ((pc)[1] = UINT16_HI(i), (pc)[2] = UINT16_LO(i))
32722 #define UINT16_LIMIT ((unsigned)1 << 16)
32725 #define JUMP_OFFSET_LEN 4
32726 #define JUMP_OFFSET_MIN INT32_MIN
32727 #define JUMP_OFFSET_MAX INT32_MAX
32729 static __attribute__((always_inline)) inline int32_t
32730 GET_JUMP_OFFSET(jsbytecode *pc)
32732 return (pc[1] << 24) | (pc[2] << 16) | (pc[3] << 8) | pc[4];
32735 static __attribute__((always_inline)) inline void
32736 SET_JUMP_OFFSET(jsbytecode *pc, int32_t off)
32738 pc[1] = (jsbytecode)(off >> 24);
32739 pc[2] = (jsbytecode)(off >> 16);
32740 pc[3] = (jsbytecode)(off >> 8);
32741 pc[4] = (jsbytecode)off;
32744 #define UINT32_INDEX_LEN 4
32746 static __attribute__((always_inline)) inline uint32_t
32747 GET_UINT32_INDEX(const jsbytecode *pc)
32749 return (pc[1] << 24) | (pc[2] << 16) | (pc[3] << 8) | pc[4];
32752 static __attribute__((always_inline)) inline void
32753 SET_UINT32_INDEX(jsbytecode *pc, uint32_t index)
32755 pc[1] = (jsbytecode)(index >> 24);
32756 pc[2] = (jsbytecode)(index >> 16);
32757 pc[3] = (jsbytecode)(index >> 8);
32758 pc[4] = (jsbytecode)index;
32761 #define UINT24_HI(i) ((jsbytecode)((i) >> 16))
32762 #define UINT24_MID(i) ((jsbytecode)((i) >> 8))
32763 #define UINT24_LO(i) ((jsbytecode)(i))
32764 #define GET_UINT24(pc) ((jsatomid)(((pc)[1] << 16) | ((pc)[2] << 8) | (pc)[3]))
32767 #define SET_UINT24(pc,i) ((pc)[1] = UINT24_HI(i), (pc)[2] = UINT24_MID(i), (pc)[3] = UINT24_LO(i))
32771 #define GET_INT8(pc) (int8_t((pc)[1]))
32773 #define GET_INT32(pc) (((uint32_t((pc)[1]) << 24) | (uint32_t((pc)[2]) << 16) | (uint32_t((pc)[3]) << 8) | uint32_t((pc)[4])))
32777 #define SET_INT32(pc,i) ((pc)[1] = (jsbytecode)(uint32_t(i) >> 24), (pc)[2] = (jsbytecode)(uint32_t(i) >> 16), (pc)[3] = (jsbytecode)(uint32_t(i) >> 8), (pc)[4] = (jsbytecode)uint32_t(i))
32783 #define INDEX_LIMIT_LOG2 23
32784 #define INDEX_LIMIT (uint32_t(1) << INDEX_LIMIT_LOG2)
32787 #define ARGC_HI(argc) UINT16_HI(argc)
32788 #define ARGC_LO(argc) UINT16_LO(argc)
32789 #define GET_ARGC(pc) GET_UINT16(pc)
32790 #define ARGC_LIMIT UINT16_LIMIT
32793 #define GET_ARGNO(pc) GET_UINT16(pc)
32794 #define SET_ARGNO(pc,argno) SET_UINT16(pc,argno)
32795 #define ARGNO_LEN 2
32796 #define ARGNO_LIMIT UINT16_LIMIT
32798 #define GET_SLOTNO(pc) GET_UINT16(pc)
32799 #define SET_SLOTNO(pc,varno) SET_UINT16(pc,varno)
32800 #define SLOTNO_LEN 2
32801 #define SLOTNO_LIMIT UINT16_LIMIT
32803 struct JSCodeSpec {
32810 uint32_t type() const { return ((format) & 0x001f); }
32813 extern const JSCodeSpec js_CodeSpec[];
32814 extern unsigned js_NumCodeSpecs;
32815 extern const char *js_CodeName[];
32816 extern const char js_EscapeMap[];
32817 # 244 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.h"
32819 js_QuoteString(JSContext *cx, JSString *str, jschar quote);
32820 # 258 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.h"
32822 js_NewPrinter(JSContext *cx, const char *name, JSFunction *fun,
32823 unsigned indent, JSBool pretty, JSBool grouped, JSBool strict);
32826 js_DestroyPrinter(JSPrinter *jp);
32829 js_GetPrinterOutput(JSPrinter *jp);
32832 js_printf(JSPrinter *jp, const char *format, ...);
32835 js_puts(JSPrinter *jp, const char *s);
32837 #define GET_ATOM_FROM_BYTECODE(script,pc,pcoff,atom) JS_BEGIN_MACRO JS_ASSERT(js_CodeSpec[*(pc)].format & JOF_ATOM); (atom) = (script)->getAtom(GET_UINT32_INDEX((pc) + (pcoff))); JS_END_MACRO
32843 #define GET_NAME_FROM_BYTECODE(script,pc,pcoff,name) JS_BEGIN_MACRO JSAtom *atom_; GET_ATOM_FROM_BYTECODE(script, pc, pcoff, atom_); JS_ASSERT(js_CodeSpec[*(pc)].format & (JOF_NAME | JOF_PROP)); (name) = atom_->asPropertyName(); JS_END_MACRO
32854 StackUses(JSScript *script, jsbytecode *pc);
32857 StackDefs(JSScript *script, jsbytecode *pc);
32865 js_DecompileScript(JSPrinter *jp, JSScript *script);
32868 js_DecompileFunctionBody(JSPrinter *jp);
32871 js_DecompileFunction(JSPrinter *jp);
32872 # 317 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.h"
32873 typedef JSBool (* JSDecompilerPtr)(JSPrinter *);
32876 js_DecompileToString(JSContext *cx, const char *name, JSFunction *fun,
32877 unsigned indent, JSBool pretty, JSBool grouped, JSBool strict,
32878 JSDecompilerPtr decompiler);
32879 # 336 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsopcode.h"
32881 js_DecompileValueGenerator(JSContext *cx, int spindex, jsval v,
32882 JSString *fallback);
32889 js_ReconstructStackDepth(JSContext *cx, JSScript *script, jsbytecode *pc);
32897 #define JSDVG_IGNORE_STACK 0
32898 #define JSDVG_SEARCH_STACK 1
32904 js_GetVariableBytecodeLength(jsbytecode *pc);
32908 static inline char *
32909 DecompileValueGenerator(JSContext *cx, int spindex, const Value &v,
32910 JSString *fallback)
32912 return js_DecompileValueGenerator(cx, spindex, v, fallback);
32921 struct InvariantChecker
32923 const Sprinter *parent;
32925 explicit InvariantChecker(const Sprinter *p) : parent(p) {
32926 parent->checkInvariants();
32929 ~InvariantChecker() {
32930 parent->checkInvariants();
32934 JSContext *context;
32937 static const size_t DefaultSize;
32945 bool realloc_(size_t newSize);
32948 explicit Sprinter(JSContext *cx);
32954 void checkInvariants() const;
32956 const char *string() const;
32957 const char *stringEnd() const;
32959 char *stringAt(ptrdiff_t off) const;
32961 char &operator[](size_t off);
32963 bool empty() const;
32970 char *reserve(size_t len);
32972 char *reserveAndClear(size_t len);
32978 ptrdiff_t put(const char *s, size_t len);
32979 ptrdiff_t put(const char *s);
32980 ptrdiff_t putString(JSString *str);
32983 int printf(const char *fmt, ...);
32986 void setOffset(const char *end);
32987 void setOffset(ptrdiff_t off);
32990 ptrdiff_t getOffset() const;
32991 ptrdiff_t getOffsetOf(const char *string) const;
32995 Sprint(Sprinter *sp, const char *format, ...);
32998 CallResultEscapes(jsbytecode *pc);
33000 static inline unsigned
33001 GetDecomposeLength(jsbytecode *pc, size_t len)
33008 return (unsigned) pc[len - 1];
33011 static inline unsigned
33012 GetBytecodeLength(jsbytecode *pc)
33014 JSOp op = (JSOp)*pc;
33017 if (js_CodeSpec[op].length != -1)
33018 return js_CodeSpec[op].length;
33019 return js_GetVariableBytecodeLength(pc);
33023 IsValidBytecodeOffset(JSContext *cx, JSScript *script, size_t offset);
33026 FlowsIntoNext(JSOp op)
33029 return op != JSOP_STOP && op != JSOP_RETURN && op != JSOP_RETRVAL && op != JSOP_THROW &&
33030 op != JSOP_GOTO && op != JSOP_RETSUB;
33040 friend struct ::JSScript;
33052 BASE_METHODJIT_STUBS,
33053 BASE_METHODJIT_CODE,
33054 BASE_METHODJIT_PICS,
33059 enum AccessCounts {
33060 ACCESS_MONOMORPHIC = BASE_LIMIT,
33062 ACCESS_POLYMORPHIC,
33078 static bool accessOp(JSOp op) {
33083 if (op == JSOP_SETELEM || op == JSOP_SETPROP)
33085 int format = js_CodeSpec[op].format;
33086 return !!(format & ((1U<<5) | (1U<<25) | (3U<<5) | (2U<<5)))
33087 && !(format & ((1U<<8) | (3U<<10)));
33090 enum ElementCounts {
33091 ELEM_ID_INT = ACCESS_LIMIT,
33097 ELEM_OBJECT_PACKED,
33104 static bool elementOp(JSOp op) {
33105 return accessOp(op) && (((js_CodeSpec[op].format) & (7U<<5)) == (3U<<5));
33108 enum PropertyCounts {
33109 PROP_STATIC = ACCESS_LIMIT,
33116 static bool propertyOp(JSOp op) {
33117 return accessOp(op) && (((js_CodeSpec[op].format) & (7U<<5)) == (2U<<5));
33121 ARITH_INT = BASE_LIMIT,
33129 static bool arithOp(JSOp op) {
33130 return !!(js_CodeSpec[op].format & ((3U<<10) | (1U<<28)));
33133 static size_t numCounts(JSOp op)
33135 if (accessOp(op)) {
33138 if (propertyOp(op))
33140 return ACCESS_LIMIT;
33143 return ARITH_LIMIT;
33147 static const char *countName(JSOp op, size_t which);
33149 double *rawCounts() { return counts; }
33151 double& get(size_t which) {
33153 return counts[which];
33157 operator void*() const {
33163 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h" 2
33164 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscope.h" 1
33165 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h" 2
33173 typedef enum JSTryNoteKind {
33185 uint16_t stackDepth;
33193 struct ConstArray {
33194 js::HeapValue *vector;
33198 struct ObjectArray {
33199 js::HeapPtrObject *vector;
33203 struct TryNoteArray {
33208 struct ClosedSlotArray {
33215 enum BindingKind { NONE, ARGUMENT, VARIABLE, CONSTANT };
33217 struct BindingName {
33222 typedef Vector<BindingName, 32> BindingNames;
33232 HeapPtr<Shape> lastBinding;
33237 inline Shape *initialShape(JSContext *cx) const;
33239 inline Bindings(JSContext *cx);
33246 inline void transfer(JSContext *cx, Bindings *bindings);
33253 inline void clone(JSContext *cx, Bindings *bindings);
33255 uint16_t numArgs() const { return nargs; }
33256 uint16_t numVars() const { return nvars; }
33257 unsigned count() const { return nargs + nvars; }
33263 bool bindingIsArg(uint16_t i) const { return i < nargs; }
33264 bool bindingIsLocal(uint16_t i) const { return i >= nargs; }
33265 uint16_t argToBinding(uint16_t i) { do { } while(0); return i; }
33266 uint16_t localToBinding(uint16_t i) { return i + nargs; }
33267 uint16_t bindingToArg(uint16_t i) { do { } while(0); return i; }
33268 uint16_t bindingToLocal(uint16_t i) { do { } while(0); return i - nargs; }
33271 inline bool ensureShape(JSContext *cx);
33274 inline Shape *lastShape() const;
33280 Shape *callObjectShape(JSContext *cx) const;
33283 inline bool extensibleParents();
33284 bool setExtensibleParents(JSContext *cx);
33286 bool setParent(JSContext *cx, JSObject *obj);
33290 BINDING_COUNT_LIMIT = 0xFFFF
33292 # 162 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33293 bool add(JSContext *cx, HandleAtom name, BindingKind kind);
33296 bool addVariable(JSContext *cx, HandleAtom name) {
33297 return add(cx, name, VARIABLE);
33299 bool addConstant(JSContext *cx, HandleAtom name) {
33300 return add(cx, name, CONSTANT);
33302 bool addArgument(JSContext *cx, HandleAtom name, uint16_t *slotp) {
33305 return add(cx, name, ARGUMENT);
33307 bool addDestructuring(JSContext *cx, uint16_t *slotp) {
33309 return add(cx, RootedAtom(cx), ARGUMENT);
33312 void noteDup() { hasDup_ = true; }
33313 bool hasDup() const { return hasDup_; }
33321 BindingKind lookup(JSContext *cx, JSAtom *name, unsigned *indexp) const;
33324 bool hasBinding(JSContext *cx, JSAtom *name) const {
33325 return lookup(cx, name, __null) != NONE;
33327 # 206 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33328 bool getLocalNameArray(JSContext *cx, BindingNames *namesp);
33335 void makeImmutable();
33336 # 224 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33337 const js::Shape *lastArgument() const;
33338 const js::Shape *lastVariable() const;
33340 void trace(JSTracer *trc);
33342 class AutoRooter : private AutoGCRooter
33345 explicit AutoRooter(JSContext *cx, Bindings *bindings_
33347 : AutoGCRooter(cx, BINDINGS), bindings(bindings_), skip(cx, bindings_)
33352 friend void AutoGCRooter::trace(JSTracer *trc);
33353 void trace(JSTracer *trc);
33356 Bindings *bindings;
33364 #define JS_OBJECT_ARRAY_SIZE(length) (offsetof(ObjectArray, vector) + sizeof(JSObject *) * (length))
33369 class ExecutablePool;
33375 class CallCompiler;
33383 namespace analyze { class ScriptAnalysis; }
33387 friend struct ::JSScript;
33388 friend struct ScriptAndCounts;
33394 PCCounts *pcCountsVector;
33397 ScriptCounts() : pcCountsVector(__null) { }
33399 inline void destroy(FreeOp *fop);
33401 void set(js::ScriptCounts counts) {
33402 pcCountsVector = counts.pcCountsVector;
33406 typedef HashMap<JSScript *,
33408 DefaultHasher<JSScript *>,
33409 SystemAllocPolicy> ScriptCountsMap;
33411 typedef HashMap<JSScript *,
33413 DefaultHasher<JSScript *>,
33414 SystemAllocPolicy> SourceMapMap;
33418 friend struct ::JSScript;
33419 # 314 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33429 BreakpointSite *breakpoints[1];
33432 typedef HashMap<JSScript *,
33434 DefaultHasher<JSScript *>,
33435 SystemAllocPolicy> DebugScriptMap;
33439 struct JSScript : public js::gc::Cell
33442 static const uint32_t stepFlagMask = 0x80000000U;
33443 static const uint32_t stepCountMask = 0x7fffffffU;
33451 class JITScriptHandle
33455 friend class js::mjit::CallCompiler;
33456 # 358 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33457 static const js::mjit::JITScript *UNJITTABLE;
33458 js::mjit::JITScript *value;
33461 JITScriptHandle() { value = __null; }
33463 bool isEmpty() { return value == __null; }
33464 bool isUnjittable() { return value == UNJITTABLE; }
33465 bool isValid() { return value > UNJITTABLE; }
33467 js::mjit::JITScript *getValid() {
33472 void setEmpty() { value = __null; }
33473 void setUnjittable() { value = const_cast<js::mjit::JITScript *>(UNJITTABLE); }
33474 void setValid(js::mjit::JITScript *jit) {
33479 static void staticAsserts();
33483 struct JITScriptSet
33485 JITScriptHandle jitHandleNormal;
33486 JITScriptHandle jitHandleNormalBarriered;
33487 JITScriptHandle jitHandleCtor;
33488 JITScriptHandle jitHandleCtorBarriered;
33490 static size_t jitHandleOffset(bool constructing, bool barriers) {
33491 return constructing
33493 ? __builtin_offsetof (JITScriptSet, jitHandleCtorBarriered)
33494 : __builtin_offsetof (JITScriptSet, jitHandleCtor))
33496 ? __builtin_offsetof (JITScriptSet, jitHandleNormalBarriered)
33497 : __builtin_offsetof (JITScriptSet, jitHandleNormal));
33500 # 411 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33502 js::Bindings bindings;
33512 const char *filename;
33513 js::HeapPtrAtom *atoms;
33515 JSPrincipals *principals;
33516 JSPrincipals *originPrincipals;
33517 # 439 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33518 js::HeapPtr<js::GlobalObject, JSScript*> globalObject;
33521 js::types::TypeScript *types;
33525 JITScriptSet *jitInfo;
33528 js::HeapPtrFunction function_;
33537 uint32_t mainOffset;
33549 # 482 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33557 uint16_t nTypeSets;
33561 uint16_t staticLevel;
33564 uint16_t argsSlot_;
33580 typedef uint8_t ArrayBitsT;
33586 ArrayBitsT hasArrayBits;
33591 bool noScriptRval:1;
33593 bool savedCallerFun:1;
33594 bool strictModeCode:1;
33595 bool compileAndGo:1;
33596 bool bindingsAccessedDynamically:1;
33597 bool warnedAboutTwoArgumentEval:1;
33600 bool warnedAboutUndefinedProp:1;
33603 bool hasSingletons:1;
33604 bool isOuterFunction:1;
33605 bool isInnerFunction:1;
33607 bool isActiveEval:1;
33608 bool isCachedEval:1;
33609 bool uninlineable:1;
33610 bool reentrantOuterFunction:1;
33611 bool typesPurged:1;
33614 bool failedBoundsCheck:1;
33616 bool callDestroyHook:1;
33617 bool isGenerator:1;
33618 bool hasScriptCounts:1;
33620 bool hasSourceMap:1;
33622 bool hasDebugScript:1;
33627 bool argsHasLocalBinding_:1;
33628 bool needsArgsAnalysis_:1;
33629 bool needsArgsObj_:1;
33630 # 578 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33632 static JSScript *NewScript(JSContext *cx, uint32_t length, uint32_t nsrcnotes, uint32_t natoms,
33633 uint32_t nobjects, uint32_t nregexps,
33634 uint32_t ntrynotes, uint32_t nconsts,
33635 uint16_t nClosedArgs, uint16_t nClosedVars, uint32_t nTypeSets,
33636 JSVersion version);
33637 static JSScript *NewScriptFromEmitter(JSContext *cx, js::BytecodeEmitter *bce);
33639 void setVersion(JSVersion v) { version = v; }
33642 bool argumentsHasLocalBinding() const { return argsHasLocalBinding_; }
33643 jsbytecode *argumentsBytecode() const { do { } while(0); return code; }
33644 unsigned argumentsLocalSlot() const { do { } while(0); return argsSlot_; }
33645 void setArgumentsHasLocalBinding(uint16_t slot);
33646 # 604 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33647 bool analyzedArgsUsage() const { return !needsArgsAnalysis_; }
33648 bool needsArgsObj() const { do { } while(0); return needsArgsObj_; }
33649 void setNeedsArgsObj(bool needsArgsObj);
33650 static bool applySpeculationFailed(JSContext *cx, JSScript *script);
33651 # 618 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33652 bool argsObjAliasesFormals() const {
33653 return needsArgsObj() && !strictModeCode;
33657 JSScript *&evalHashLink() { return *globalObject.unsafeGetUnioned(); }
33663 JSFunction *function() const { return function_; }
33664 void setFunction(JSFunction *fun);
33669 unsigned id() { return 0; }
33673 inline bool ensureHasTypes(JSContext *cx);
33681 inline bool ensureRanAnalysis(JSContext *cx, JSObject *scope);
33684 inline bool ensureRanInference(JSContext *cx);
33686 inline bool hasAnalysis();
33687 inline void clearAnalysis();
33688 inline js::analyze::ScriptAnalysis *analysis();
33694 bool typeSetFunction(JSContext *cx, JSFunction *fun, bool singleton = false);
33696 inline bool hasGlobal() const;
33697 inline bool hasClearedGlobal() const;
33699 inline js::GlobalObject *global() const;
33700 inline js::types::TypeScriptNesting *nesting() const;
33702 inline void clearNesting();
33705 js::GlobalObject *getGlobalObjectOrNull() const {
33706 return (isCachedEval || isActiveEval) ? __null : globalObject.get();
33710 bool makeTypes(JSContext *cx);
33711 bool makeAnalysis(JSContext *cx);
33717 friend class js::mjit::CallCompiler;
33720 bool hasJITInfo() {
33721 return jitInfo != __null;
33724 static size_t offsetOfJITInfo() { return __builtin_offsetof (JSScript, jitInfo); }
33726 inline bool ensureHasJITInfo(JSContext *cx);
33727 inline void destroyJITInfo(js::FreeOp *fop);
33729 JITScriptHandle *jitHandle(bool constructing, bool barriers) {
33731 return constructing
33732 ? (barriers ? &jitInfo->jitHandleCtorBarriered : &jitInfo->jitHandleCtor)
33733 : (barriers ? &jitInfo->jitHandleNormalBarriered : &jitInfo->jitHandleNormal);
33736 js::mjit::JITScript *getJIT(bool constructing, bool barriers) {
33739 JITScriptHandle *jith = jitHandle(constructing, barriers);
33740 return jith->isValid() ? jith->getValid() : __null;
33743 static void ReleaseCode(js::FreeOp *fop, JITScriptHandle *jith);
33746 inline void **nativeMap(bool constructing);
33747 inline void *nativeCodeForPC(bool constructing, jsbytecode *pc);
33749 uint32_t getUseCount() const { return useCount; }
33750 uint32_t incUseCount() { return ++useCount; }
33751 uint32_t *addressOfUseCount() { return &useCount; }
33752 void resetUseCount() { useCount = 0; }
33759 size_t sizeOfJitScripts(JSMallocSizeOfFun mallocSizeOf);
33763 bool initScriptCounts(JSContext *cx);
33764 js::PCCounts getPCCounts(jsbytecode *pc);
33765 js::ScriptCounts releaseScriptCounts();
33766 void destroyScriptCounts(js::FreeOp *fop);
33768 bool setSourceMap(JSContext *cx, jschar *sourceMap);
33769 jschar *getSourceMap();
33770 jschar *releaseSourceMap();
33771 void destroySourceMap(js::FreeOp *fop);
33773 jsbytecode *main() {
33774 return code + mainOffset;
33782 size_t computedSizeOfData();
33783 size_t sizeOfData(JSMallocSizeOfFun mallocSizeOf);
33785 uint32_t numNotes();
33788 jssrcnote *notes() { return (jssrcnote *)(code + length); }
33790 bool hasArray(ArrayKind kind) { return (hasArrayBits & (1 << kind)); }
33791 void setHasArray(ArrayKind kind) { hasArrayBits |= (1 << kind); }
33792 void cloneHasArray(JSScript *script) { hasArrayBits = script->hasArrayBits; }
33794 bool hasConsts() { return hasArray(CONSTS); }
33795 bool hasObjects() { return hasArray(OBJECTS); }
33796 bool hasRegexps() { return hasArray(REGEXPS); }
33797 bool hasTrynotes() { return hasArray(TRYNOTES); }
33798 bool hasClosedArgs() { return hasArray(CLOSED_ARGS); }
33799 bool hasClosedVars() { return hasArray(CLOSED_VARS); }
33801 #define OFF(fooOff,hasFoo,t) (fooOff() + (hasFoo() ? sizeof(t) : 0))
33803 size_t constsOffset() { return 0; }
33804 size_t objectsOffset() { return (constsOffset() + (hasConsts() ? sizeof(js::ConstArray) : 0)); }
33805 size_t regexpsOffset() { return (objectsOffset() + (hasObjects() ? sizeof(js::ObjectArray) : 0)); }
33806 size_t trynotesOffset() { return (regexpsOffset() + (hasRegexps() ? sizeof(js::ObjectArray) : 0)); }
33807 size_t closedArgsOffset() { return (trynotesOffset() + (hasTrynotes() ? sizeof(js::TryNoteArray) : 0)); }
33808 size_t closedVarsOffset() { return (closedArgsOffset() + (hasClosedArgs() ? sizeof(js::ClosedSlotArray) : 0)); }
33810 js::ConstArray *consts() {
33812 return reinterpret_cast<js::ConstArray *>(data + constsOffset());
33815 js::ObjectArray *objects() {
33817 return reinterpret_cast<js::ObjectArray *>(data + objectsOffset());
33820 js::ObjectArray *regexps() {
33822 return reinterpret_cast<js::ObjectArray *>(data + regexpsOffset());
33825 js::TryNoteArray *trynotes() {
33827 return reinterpret_cast<js::TryNoteArray *>(data + trynotesOffset());
33830 js::ClosedSlotArray *closedArgs() {
33832 return reinterpret_cast<js::ClosedSlotArray *>(data + closedArgsOffset());
33835 js::ClosedSlotArray *closedVars() {
33837 return reinterpret_cast<js::ClosedSlotArray *>(data + closedVarsOffset());
33840 uint32_t numClosedArgs() {
33841 return hasClosedArgs() ? closedArgs()->length : 0;
33844 uint32_t numClosedVars() {
33845 return hasClosedVars() ? closedVars()->length : 0;
33848 js::HeapPtrAtom &getAtom(size_t index) const {
33850 return atoms[index];
33853 js::PropertyName *getName(size_t index) {
33854 return getAtom(index)->asPropertyName();
33857 JSObject *getObject(size_t index) {
33858 js::ObjectArray *arr = objects();
33860 return arr->vector[index];
33863 JSVersion getVersion() const {
33864 return JSVersion(version);
33867 inline JSFunction *getFunction(size_t index);
33868 inline JSFunction *getCallerFunction();
33870 inline JSObject *getRegExp(size_t index);
33872 const js::Value &getConst(size_t index) {
33873 js::ConstArray *arr = consts();
33875 return arr->vector[index];
33883 inline bool isEmpty() const;
33885 uint32_t getClosedArg(uint32_t index) {
33886 js::ClosedSlotArray *arr = closedArgs();
33888 return arr->vector[index];
33891 uint32_t getClosedVar(uint32_t index) {
33892 js::ClosedSlotArray *arr = closedVars();
33894 return arr->vector[index];
33896 # 870 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
33902 void recompileForStepMode(js::FreeOp *fop);
33905 bool tryNewStepMode(JSContext *cx, uint32_t newValue);
33907 bool ensureHasDebugScript(JSContext *cx);
33908 js::DebugScript *debugScript();
33909 js::DebugScript *releaseDebugScript();
33910 void destroyDebugScript(js::FreeOp *fop);
33913 bool hasBreakpointsAt(jsbytecode *pc) { return !!getBreakpointSite(pc); }
33914 bool hasAnyBreakpointsOrStepMode() { return hasDebugScript; }
33916 js::BreakpointSite *getBreakpointSite(jsbytecode *pc)
33919 return hasDebugScript ? debugScript()->breakpoints[pc - code] : __null;
33922 js::BreakpointSite *getOrCreateBreakpointSite(JSContext *cx, jsbytecode *pc,
33923 js::GlobalObject *scriptGlobal);
33925 void destroyBreakpointSite(js::FreeOp *fop, jsbytecode *pc);
33927 void clearBreakpointsIn(js::FreeOp *fop, js::Debugger *dbg, JSObject *handler);
33928 void clearTraps(js::FreeOp *fop);
33930 void markTrapClosures(JSTracer *trc);
33938 bool setStepModeFlag(JSContext *cx, bool step);
33946 bool changeStepModeCount(JSContext *cx, int delta);
33948 bool stepModeEnabled() { return hasDebugScript && !!debugScript()->stepMode; }
33954 void finalize(js::FreeOp *fop);
33956 static inline void writeBarrierPre(JSScript *script);
33957 static inline void writeBarrierPost(JSScript *script, void *addr);
33959 static inline js::ThingRootKind rootKind() { return js::THING_ROOT_SCRIPT; }
33961 static JSPrincipals *normalizeOriginPrincipals(JSPrincipals *principals,
33962 JSPrincipals *originPrincipals) {
33963 return originPrincipals ? originPrincipals : principals;
33966 void markChildren(JSTracer *trc);
33969 typedef int moz_static_assert87[(sizeof(JSScript::ArrayBitsT) * 8 >= JSScript::LIMIT) ? 1 : -1];
33972 typedef int moz_static_assert88[(sizeof(JSScript) % js::gc::Cell::CellSize == 0) ? 1 : -1];
33974 static inline unsigned
33975 StackDepth(JSScript *script)
33977 return script->nslots - script->nfixed;
33986 extern __attribute__((visibility("default"))) void
33987 js_CallNewScriptHook(JSContext *cx, JSScript *script, JSFunction *fun);
33992 CallDestroyScriptHook(FreeOp *fop, JSScript *script);
33994 extern const char *
33995 SaveScriptFilename(JSContext *cx, const char *filename);
33997 struct ScriptFilenameEntry
34002 static ScriptFilenameEntry *fromFilename(const char *filename) {
34003 return (ScriptFilenameEntry *)(filename - __builtin_offsetof (ScriptFilenameEntry, filename));
34007 struct ScriptFilenameHasher
34009 typedef const char *Lookup;
34010 static HashNumber hash(const char *l) { return JS_HashString(l); }
34011 static bool match(const ScriptFilenameEntry *e, const char *l) {
34012 return strcmp(e->filename, l) == 0;
34016 typedef HashSet<ScriptFilenameEntry *,
34017 ScriptFilenameHasher,
34018 SystemAllocPolicy> ScriptFilenameTable;
34021 MarkScriptFilename(JSRuntime *rt, const char *filename);
34024 SweepScriptFilenames(JSRuntime *rt);
34027 FreeScriptFilenames(JSRuntime *rt);
34029 struct ScriptAndCounts
34032 ScriptCounts scriptCounts;
34034 PCCounts &getPCCounts(jsbytecode *pc) const {
34036 return scriptCounts.pcCountsVector[pc - script->code];
34047 #define js_GetSrcNote(script,pc) js_GetSrcNoteCached(cx, script, pc)
34050 js_GetSrcNoteCached(JSContext *cx, JSScript *script, jsbytecode *pc);
34052 extern jsbytecode *
34053 js_LineNumberToPC(JSScript *script, unsigned lineno);
34055 extern __attribute__((visibility("default"))) unsigned
34056 js_GetScriptLineExtent(JSScript *script);
34061 PCToLineNumber(JSScript *script, jsbytecode *pc);
34064 PCToLineNumber(unsigned startLine, jssrcnote *notes, jsbytecode *code, jsbytecode *pc);
34067 CurrentLine(JSContext *cx);
34068 # 1051 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscript.h"
34070 CALLED_FROM_JSOP_EVAL,
34071 NOT_CALLED_FROM_JSOP_EVAL
34075 CurrentScriptFileLineOrigin(JSContext *cx, unsigned *linenop, LineOption = NOT_CALLED_FROM_JSOP_EVAL);
34078 CloneScript(JSContext *cx, JSScript *script);
34085 template<XDRMode mode>
34087 XDRScript(XDRState<mode> *xdr, JSScript **scriptp, JSScript *parentScript);
34090 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfun.h" 2
34091 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsstr.h" 1
34092 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfun.h" 2
34093 # 37 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfun.h"
34094 #define JSFUN_PROTOTYPE 0x0800
34097 #define JSFUN_EXPR_CLOSURE 0x1000
34098 #define JSFUN_EXTENDED 0x2000
34099 #define JSFUN_INTERPRETED 0x4000
34100 #define JSFUN_NULL_CLOSURE 0x8000
34101 #define JSFUN_KINDMASK 0xc000
34104 namespace js { class FunctionExtended; }
34106 struct JSFunction : public JSObject
34119 void *nativeOrScript;
34121 js::HeapPtrAtom atom;
34123 bool hasDefaults() const { return flags & 0x0400; }
34124 bool hasRest() const { return flags & 0x0100; }
34125 bool isInterpreted() const { return kind() >= 0x4000; }
34126 bool isNative() const { return !isInterpreted(); }
34127 bool isNativeConstructor() const { return flags & 0x0200; }
34128 bool isHeavyweight() const { return ((flags) & 0x80); }
34129 bool isNullClosure() const { return kind() == 0x8000; }
34130 bool isFunctionPrototype() const { return flags & 0x0800; }
34131 bool isInterpretedConstructor() const { return isInterpreted() && !isFunctionPrototype(); }
34133 uint16_t kind() const { return flags & 0xc000; }
34134 void setKind(uint16_t k) {
34136 flags = (flags & ~0xc000) | k;
34140 inline bool inStrictMode() const;
34142 void setArgCount(uint16_t nargs) {
34144 this->nargs = nargs;
34147 void setHasRest() {
34149 this->flags |= 0x0100;
34152 void setHasDefaults() {
34154 this->flags |= 0x0400;
34158 enum { MAX_ARGS_AND_VARS = 2 * ((1U << 16) - 1) };
34164 inline JSObject *environment() const;
34165 inline void setEnvironment(JSObject *obj);
34166 inline void initEnvironment(JSObject *obj);
34168 static inline size_t offsetOfEnvironment() { return __builtin_offsetof (JSFunction, u.i.env_); }
34170 JSScript *script() const {
34172 return *(js::HeapPtrScript *)&u.i.script_;
34175 js::HeapPtrScript &mutableScript() {
34177 return *(js::HeapPtrScript *)&u.i.script_;
34180 inline void setScript(JSScript *script_);
34181 inline void initScript(JSScript *script_);
34183 JSScript *maybeScript() const {
34184 return isInterpreted() ? script() : __null;
34187 JSNative native() const {
34192 JSNative maybeNative() const {
34193 return isInterpreted() ? __null : native();
34196 static unsigned offsetOfNativeOrScript() {
34197 typedef int moz_static_assert89[(__builtin_offsetof (U, native) == __builtin_offsetof (U, i.script_)) ? 1 : -1];
34198 typedef int moz_static_assert90[(__builtin_offsetof (U, native) == __builtin_offsetof (U, nativeOrScript)) ? 1 : -1];
34199 return __builtin_offsetof (JSFunction, u.nativeOrScript);
34204 static const js::gc::AllocKind FinalizeKind = js::gc::FINALIZE_OBJECT2_BACKGROUND;
34205 static const js::gc::AllocKind ExtendedFinalizeKind = js::gc::FINALIZE_OBJECT4_BACKGROUND;
34206 # 163 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfun.h"
34207 inline void trace(JSTracer *trc);
34211 inline bool initBoundFunction(JSContext *cx, js::HandleValue thisArg,
34212 const js::Value *args, unsigned argslen);
34214 inline JSObject *getBoundFunctionTarget() const;
34215 inline const js::Value &getBoundFunctionThis() const;
34216 inline const js::Value &getBoundFunctionArgument(unsigned which) const;
34217 inline size_t getBoundFunctionArgumentCount() const;
34220 inline js::FunctionExtended *toExtended();
34221 inline const js::FunctionExtended *toExtended() const;
34223 inline bool isExtended() const {
34224 typedef int moz_static_assert91[(FinalizeKind != ExtendedFinalizeKind) ? 1 : -1];
34226 return !!(flags & 0x2000);
34231 inline void initializeExtended();
34232 inline void setExtendedSlot(size_t which, const js::Value &val);
34233 inline const js::Value &getExtendedSlot(size_t which) const;
34240 inline JSFunction *toFunction() ;
34241 inline const JSFunction *toFunction() const ;
34244 inline JSFunction *
34245 JSObject::toFunction()
34248 return static_cast<JSFunction *>(this);
34251 inline const JSFunction *
34252 JSObject::toFunction() const
34255 return static_cast<const JSFunction *>(this);
34259 fun_toStringHelper(JSContext *cx, JSObject *obj, unsigned indent);
34261 extern JSFunction *
34262 js_NewFunction(JSContext *cx, JSObject *funobj, JSNative native, unsigned nargs,
34263 unsigned flags, js::HandleObject parent, JSAtom *atom,
34264 js::gc::AllocKind kind = JSFunction::FinalizeKind);
34266 extern JSFunction *
34267 js_CloneFunctionObject(JSContext *cx, js::HandleFunction fun,
34268 js::HandleObject parent, js::HandleObject proto,
34269 js::gc::AllocKind kind = JSFunction::FinalizeKind);
34271 extern JSFunction *
34272 js_DefineFunction(JSContext *cx, js::HandleObject obj, js::HandleId id, JSNative native,
34273 unsigned nargs, unsigned flags,
34274 js::gc::AllocKind kind = JSFunction::FinalizeKind);
34279 #define JSV2F_CONSTRUCT INITIAL_CONSTRUCT
34280 #define JSV2F_SEARCH_STACK 0x10000
34282 extern JSFunction *
34283 js_ValueToFunction(JSContext *cx, const js::Value *vp, unsigned flags);
34286 js_ValueToCallableObject(JSContext *cx, js::Value *vp, unsigned flags);
34289 js_ReportIsNotFunction(JSContext *cx, const js::Value *vp, unsigned flags);
34292 js_PutCallObject(js::StackFrame *fp, js::CallObject &callobj);
34301 class FunctionExtended : public JSFunction
34303 friend struct JSFunction;
34306 HeapValue extendedSlots[2];
34311 inline js::FunctionExtended *
34312 JSFunction::toExtended()
34315 return static_cast<js::FunctionExtended *>(this);
34318 inline const js::FunctionExtended *
34319 JSFunction::toExtended() const
34322 return static_cast<const js::FunctionExtended *>(this);
34326 js_PutArgsObject(js::StackFrame *fp);
34329 js_IsNamedLambda(JSFunction *fun) { return (fun->flags & 0x08) && fun->atom; }
34333 template<XDRMode mode>
34335 XDRInterpretedFunction(XDRState<mode> *xdr, JSObject **objp, JSScript *parentScript);
34338 CloneInterpretedFunction(JSContext *cx, JSFunction *fun);
34343 js_fun_apply(JSContext *cx, unsigned argc, js::Value *vp);
34346 js_fun_call(JSContext *cx, unsigned argc, js::Value *vp);
34349 js_fun_bind(JSContext *cx, js::HandleObject target, js::HandleValue thisArg,
34350 js::Value *boundArgs, unsigned argslen);
34351 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h" 2
34352 # 1 "./jsautooplen.h" 1
34358 #define JSOP_NOP_LENGTH 1
34359 #define JSOP_UNDEFINED_LENGTH 1
34360 #define JSOP_POPV_LENGTH 1
34361 #define JSOP_ENTERWITH_LENGTH 1
34362 #define JSOP_LEAVEWITH_LENGTH 1
34363 #define JSOP_RETURN_LENGTH 1
34364 #define JSOP_GOTO_LENGTH 5
34365 #define JSOP_IFEQ_LENGTH 5
34366 #define JSOP_IFNE_LENGTH 5
34367 #define JSOP_ARGUMENTS_LENGTH 1
34368 #define JSOP_SWAP_LENGTH 1
34369 #define JSOP_POPN_LENGTH 3
34370 #define JSOP_DUP_LENGTH 1
34371 #define JSOP_DUP2_LENGTH 1
34372 #define JSOP_SETCONST_LENGTH 5
34373 #define JSOP_BITOR_LENGTH 1
34374 #define JSOP_BITXOR_LENGTH 1
34375 #define JSOP_BITAND_LENGTH 1
34376 #define JSOP_EQ_LENGTH 1
34377 #define JSOP_NE_LENGTH 1
34378 #define JSOP_LT_LENGTH 1
34379 #define JSOP_LE_LENGTH 1
34380 #define JSOP_GT_LENGTH 1
34381 #define JSOP_GE_LENGTH 1
34382 #define JSOP_LSH_LENGTH 1
34383 #define JSOP_RSH_LENGTH 1
34384 #define JSOP_URSH_LENGTH 1
34385 #define JSOP_ADD_LENGTH 1
34386 #define JSOP_SUB_LENGTH 1
34387 #define JSOP_MUL_LENGTH 1
34388 #define JSOP_DIV_LENGTH 1
34389 #define JSOP_MOD_LENGTH 1
34390 #define JSOP_NOT_LENGTH 1
34391 #define JSOP_BITNOT_LENGTH 1
34392 #define JSOP_NEG_LENGTH 1
34393 #define JSOP_POS_LENGTH 1
34394 #define JSOP_DELNAME_LENGTH 5
34395 #define JSOP_DELPROP_LENGTH 5
34396 #define JSOP_DELELEM_LENGTH 1
34397 #define JSOP_TYPEOF_LENGTH 1
34398 #define JSOP_VOID_LENGTH 1
34399 #define JSOP_INCNAME_LENGTH 6
34400 #define JSOP_INCPROP_LENGTH 6
34401 #define JSOP_INCELEM_LENGTH 2
34402 #define JSOP_DECNAME_LENGTH 6
34403 #define JSOP_DECPROP_LENGTH 6
34404 #define JSOP_DECELEM_LENGTH 2
34405 #define JSOP_NAMEINC_LENGTH 6
34406 #define JSOP_PROPINC_LENGTH 6
34407 #define JSOP_ELEMINC_LENGTH 2
34408 #define JSOP_NAMEDEC_LENGTH 6
34409 #define JSOP_PROPDEC_LENGTH 6
34410 #define JSOP_ELEMDEC_LENGTH 2
34411 #define JSOP_GETPROP_LENGTH 5
34412 #define JSOP_SETPROP_LENGTH 5
34413 #define JSOP_GETELEM_LENGTH 1
34414 #define JSOP_SETELEM_LENGTH 1
34415 #define JSOP_CALLNAME_LENGTH 5
34416 #define JSOP_CALL_LENGTH 3
34417 #define JSOP_NAME_LENGTH 5
34418 #define JSOP_DOUBLE_LENGTH 5
34419 #define JSOP_STRING_LENGTH 5
34420 #define JSOP_ZERO_LENGTH 1
34421 #define JSOP_ONE_LENGTH 1
34422 #define JSOP_NULL_LENGTH 1
34423 #define JSOP_THIS_LENGTH 1
34424 #define JSOP_FALSE_LENGTH 1
34425 #define JSOP_TRUE_LENGTH 1
34426 #define JSOP_OR_LENGTH 5
34427 #define JSOP_AND_LENGTH 5
34428 #define JSOP_TABLESWITCH_LENGTH -1
34429 #define JSOP_LOOKUPSWITCH_LENGTH -1
34430 #define JSOP_STRICTEQ_LENGTH 1
34431 #define JSOP_STRICTNE_LENGTH 1
34432 #define JSOP_SETCALL_LENGTH 1
34433 #define JSOP_ITER_LENGTH 2
34434 #define JSOP_MOREITER_LENGTH 1
34435 #define JSOP_ITERNEXT_LENGTH 2
34436 #define JSOP_ENDITER_LENGTH 1
34437 #define JSOP_FUNAPPLY_LENGTH 3
34438 #define JSOP_OBJECT_LENGTH 5
34439 #define JSOP_POP_LENGTH 1
34440 #define JSOP_NEW_LENGTH 3
34441 #define JSOP_UNUSED0_LENGTH 1
34442 #define JSOP_GETARG_LENGTH 3
34443 #define JSOP_SETARG_LENGTH 3
34444 #define JSOP_GETLOCAL_LENGTH 3
34445 #define JSOP_SETLOCAL_LENGTH 3
34446 #define JSOP_UINT16_LENGTH 3
34447 #define JSOP_NEWINIT_LENGTH 5
34448 #define JSOP_NEWARRAY_LENGTH 4
34449 #define JSOP_NEWOBJECT_LENGTH 5
34450 #define JSOP_ENDINIT_LENGTH 1
34451 #define JSOP_INITPROP_LENGTH 5
34452 #define JSOP_INITELEM_LENGTH 1
34453 #define JSOP_UNUSED14_LENGTH 1
34454 #define JSOP_UNUSED15_LENGTH 1
34455 #define JSOP_INCARG_LENGTH 3
34456 #define JSOP_DECARG_LENGTH 3
34457 #define JSOP_ARGINC_LENGTH 3
34458 #define JSOP_ARGDEC_LENGTH 3
34459 #define JSOP_INCLOCAL_LENGTH 3
34460 #define JSOP_DECLOCAL_LENGTH 3
34461 #define JSOP_LOCALINC_LENGTH 3
34462 #define JSOP_LOCALDEC_LENGTH 3
34463 #define JSOP_LEAVEFORLETIN_LENGTH 1
34464 #define JSOP_LABEL_LENGTH 5
34465 #define JSOP_UNUSED3_LENGTH 1
34466 #define JSOP_FUNCALL_LENGTH 3
34467 #define JSOP_LOOPHEAD_LENGTH 1
34468 #define JSOP_BINDNAME_LENGTH 5
34469 #define JSOP_SETNAME_LENGTH 5
34470 #define JSOP_THROW_LENGTH 1
34471 #define JSOP_IN_LENGTH 1
34472 #define JSOP_INSTANCEOF_LENGTH 1
34473 #define JSOP_DEBUGGER_LENGTH 1
34474 #define JSOP_GOSUB_LENGTH 5
34475 #define JSOP_RETSUB_LENGTH 1
34476 #define JSOP_EXCEPTION_LENGTH 1
34477 #define JSOP_LINENO_LENGTH 3
34478 #define JSOP_CONDSWITCH_LENGTH 1
34479 #define JSOP_CASE_LENGTH 5
34480 #define JSOP_DEFAULT_LENGTH 5
34481 #define JSOP_EVAL_LENGTH 3
34482 #define JSOP_ENUMELEM_LENGTH 1
34483 #define JSOP_GETTER_LENGTH 1
34484 #define JSOP_SETTER_LENGTH 1
34485 #define JSOP_DEFFUN_LENGTH 5
34486 #define JSOP_DEFCONST_LENGTH 5
34487 #define JSOP_DEFVAR_LENGTH 5
34488 #define JSOP_LAMBDA_LENGTH 5
34489 #define JSOP_CALLEE_LENGTH 1
34490 #define JSOP_UNUSED31_LENGTH 1
34491 #define JSOP_PICK_LENGTH 2
34492 #define JSOP_TRY_LENGTH 1
34493 #define JSOP_FINALLY_LENGTH 1
34494 #define JSOP_GETALIASEDVAR_LENGTH 9
34495 #define JSOP_CALLALIASEDVAR_LENGTH 9
34496 #define JSOP_SETALIASEDVAR_LENGTH 9
34497 #define JSOP_INCALIASEDVAR_LENGTH 10
34498 #define JSOP_DECALIASEDVAR_LENGTH 10
34499 #define JSOP_ALIASEDVARINC_LENGTH 10
34500 #define JSOP_ALIASEDVARDEC_LENGTH 10
34501 #define JSOP_UNUSED8_LENGTH 1
34502 #define JSOP_UNUSED9_LENGTH 1
34503 #define JSOP_UNUSED10_LENGTH 1
34504 #define JSOP_UNUSED11_LENGTH 1
34505 #define JSOP_UNUSED12_LENGTH 1
34506 #define JSOP_UNUSED13_LENGTH 1
34507 #define JSOP_BACKPATCH_LENGTH 5
34508 #define JSOP_BACKPATCH_POP_LENGTH 5
34509 #define JSOP_THROWING_LENGTH 1
34510 #define JSOP_SETRVAL_LENGTH 1
34511 #define JSOP_RETRVAL_LENGTH 1
34512 #define JSOP_GETGNAME_LENGTH 5
34513 #define JSOP_SETGNAME_LENGTH 5
34514 #define JSOP_INCGNAME_LENGTH 6
34515 #define JSOP_DECGNAME_LENGTH 6
34516 #define JSOP_GNAMEINC_LENGTH 6
34517 #define JSOP_GNAMEDEC_LENGTH 6
34518 #define JSOP_REGEXP_LENGTH 5
34519 #define JSOP_DEFXMLNS_LENGTH 1
34520 #define JSOP_ANYNAME_LENGTH 1
34521 #define JSOP_QNAMEPART_LENGTH 5
34522 #define JSOP_QNAMECONST_LENGTH 5
34523 #define JSOP_QNAME_LENGTH 1
34524 #define JSOP_TOATTRNAME_LENGTH 1
34525 #define JSOP_TOATTRVAL_LENGTH 1
34526 #define JSOP_ADDATTRNAME_LENGTH 1
34527 #define JSOP_ADDATTRVAL_LENGTH 1
34528 #define JSOP_BINDXMLNAME_LENGTH 1
34529 #define JSOP_SETXMLNAME_LENGTH 1
34530 #define JSOP_XMLNAME_LENGTH 1
34531 #define JSOP_DESCENDANTS_LENGTH 1
34532 #define JSOP_FILTER_LENGTH 5
34533 #define JSOP_ENDFILTER_LENGTH 5
34534 #define JSOP_TOXML_LENGTH 1
34535 #define JSOP_TOXMLLIST_LENGTH 1
34536 #define JSOP_XMLTAGEXPR_LENGTH 1
34537 #define JSOP_XMLELTEXPR_LENGTH 1
34538 #define JSOP_XMLCDATA_LENGTH 5
34539 #define JSOP_XMLCOMMENT_LENGTH 5
34540 #define JSOP_XMLPI_LENGTH 5
34541 #define JSOP_DELDESC_LENGTH 1
34542 #define JSOP_CALLPROP_LENGTH 5
34543 #define JSOP_ENTERLET0_LENGTH 5
34544 #define JSOP_ENTERLET1_LENGTH 5
34545 #define JSOP_UINT24_LENGTH 4
34546 #define JSOP_UNUSED18_LENGTH 1
34547 #define JSOP_UNUSED19_LENGTH 1
34548 #define JSOP_UNUSED20_LENGTH 1
34549 #define JSOP_STARTXML_LENGTH 1
34550 #define JSOP_STARTXMLEXPR_LENGTH 1
34551 #define JSOP_CALLELEM_LENGTH 1
34552 #define JSOP_STOP_LENGTH 1
34553 #define JSOP_GETXPROP_LENGTH 5
34554 #define JSOP_CALLXMLNAME_LENGTH 1
34555 #define JSOP_TYPEOFEXPR_LENGTH 1
34556 #define JSOP_ENTERBLOCK_LENGTH 5
34557 #define JSOP_LEAVEBLOCK_LENGTH 3
34558 #define JSOP_UNUSED1_LENGTH 1
34559 #define JSOP_UNUSED2_LENGTH 1
34560 #define JSOP_GENERATOR_LENGTH 1
34561 #define JSOP_YIELD_LENGTH 1
34562 #define JSOP_ARRAYPUSH_LENGTH 3
34563 #define JSOP_GETFUNNS_LENGTH 1
34564 #define JSOP_ENUMCONSTELEM_LENGTH 1
34565 #define JSOP_LEAVEBLOCKEXPR_LENGTH 3
34566 #define JSOP_UNUSED21_LENGTH 1
34567 #define JSOP_UNUSED22_LENGTH 1
34568 #define JSOP_UNUSED23_LENGTH 1
34569 #define JSOP_CALLGNAME_LENGTH 5
34570 #define JSOP_CALLLOCAL_LENGTH 3
34571 #define JSOP_CALLARG_LENGTH 3
34572 #define JSOP_BINDGNAME_LENGTH 5
34573 #define JSOP_INT8_LENGTH 2
34574 #define JSOP_INT32_LENGTH 5
34575 #define JSOP_LENGTH_LENGTH 5
34576 #define JSOP_HOLE_LENGTH 1
34577 #define JSOP_UNUSED17_LENGTH 1
34578 #define JSOP_UNUSED24_LENGTH 1
34579 #define JSOP_UNUSED25_LENGTH 1
34580 #define JSOP_UNUSED29_LENGTH 1
34581 #define JSOP_UNUSED30_LENGTH 1
34582 #define JSOP_REST_LENGTH 1
34583 #define JSOP_TOID_LENGTH 1
34584 #define JSOP_IMPLICITTHIS_LENGTH 5
34585 #define JSOP_LOOPENTRY_LENGTH 1
34586 #define JSOP_ACTUALSFILLED_LENGTH 3
34587 # 13 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h" 2
34590 struct JSCompartment;
34593 namespace js { namespace mjit { struct CallSite; }}
34594 typedef js::mjit::CallSite JSInlinedSite;
34599 typedef size_t JSRejoinState;
34605 class StackSegment;
34607 class ContextStack;
34609 class InvokeArgsGuard;
34610 class InvokeFrameGuard;
34612 class ExecuteFrameGuard;
34613 class DummyFrameGuard;
34614 class GeneratorFrameGuard;
34617 class ScriptFrameIter;
34618 class AllFramesIter;
34620 class ArgumentsObject;
34621 class StaticBlockObject;
34626 jsbytecode *NativeToPC(JITScript *jit, void *ncode, CallSite **pinline);
34633 # 161 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
34642 void setUsedRval() const {}
34643 void clearUsedRval() const {}
34647 friend CallReceiver CallReceiverFromVp(Value *);
34648 friend CallReceiver CallReceiverFromArgv(Value *);
34649 Value *base() const { return argv_ - 2; }
34650 JSObject &callee() const { do { } while(0); return argv_[-2].toObject(); }
34651 Value &calleev() const { do { } while(0); return argv_[-2]; }
34652 Value &thisv() const { return argv_[-1]; }
34654 Value &rval() const {
34659 Value *spAfterCall() const {
34664 void setCallee(Value calleev) {
34666 this->calleev() = calleev;
34670 __attribute__((always_inline)) inline CallReceiver
34671 CallReceiverFromArgv(Value *argv)
34673 CallReceiver receiver;
34674 receiver.clearUsedRval();
34675 receiver.argv_ = argv;
34679 __attribute__((always_inline)) inline CallReceiver
34680 CallReceiverFromVp(Value *vp)
34682 return CallReceiverFromArgv(vp + 2);
34687 class CallArgs : public CallReceiver
34692 friend CallArgs CallArgsFromVp(unsigned, Value *);
34693 friend CallArgs CallArgsFromArgv(unsigned, Value *);
34694 friend CallArgs CallArgsFromSp(unsigned, Value *);
34695 Value &operator[](unsigned i) const { do { } while(0); return argv_[i]; }
34696 Value *array() const { return argv_; }
34697 unsigned length() const { return argc_; }
34698 Value *end() const { return argv_ + argc_; }
34699 bool hasDefined(unsigned i) const { return i < argc_ && !argv_[i].isUndefined(); }
34702 __attribute__((always_inline)) inline CallArgs
34703 CallArgsFromArgv(unsigned argc, Value *argv)
34706 args.clearUsedRval();
34712 __attribute__((always_inline)) inline CallArgs
34713 CallArgsFromVp(unsigned argc, Value *vp)
34715 return CallArgsFromArgv(argc, vp + 2);
34718 __attribute__((always_inline)) inline CallArgs
34719 CallArgsFromSp(unsigned argc, Value *sp)
34721 return CallArgsFromArgv(argc, sp - argc);
34723 # 260 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
34724 class CallArgsList : public CallArgs
34726 friend class StackSegment;
34727 CallArgsList *prev_;
34730 friend CallArgsList CallArgsListFromVp(unsigned, Value *, CallArgsList *);
34731 friend CallArgsList CallArgsListFromArgv(unsigned, Value *, CallArgsList *);
34732 CallArgsList *prev() const { return prev_; }
34733 bool active() const { return active_; }
34734 void setActive() { active_ = true; }
34735 void setInactive() { active_ = false; }
34738 __attribute__((always_inline)) inline CallArgsList
34739 CallArgsListFromArgv(unsigned argc, Value *argv, CallArgsList *prev)
34748 args.active_ = false;
34752 __attribute__((always_inline)) inline CallArgsList
34753 CallArgsListFromVp(unsigned argc, Value *vp, CallArgsList *prev)
34755 return CallArgsListFromArgv(argc, vp + 2, prev);
34761 enum InitialFrameFlags {
34763 INITIAL_CONSTRUCT = 0x80,
34764 INITIAL_LOWERED = 0x200000
34768 EXECUTE_GLOBAL = 0x1,
34769 EXECUTE_DIRECT_EVAL = 0x8,
34770 EXECUTE_INDIRECT_EVAL = 0x9,
34771 EXECUTE_DEBUG = 0x18
34789 FLOATING_GENERATOR = 0x40,
34790 CONSTRUCTING = 0x80,
34794 FINISHED_IN_INTERP = 0x200,
34797 OVERFLOW_ARGS = 0x400,
34798 UNDERFLOW_ARGS = 0x800,
34801 HAS_CALL_OBJ = 0x1000,
34802 HAS_ARGS_OBJ = 0x2000,
34803 HAS_HOOK_DATA = 0x4000,
34804 HAS_ANNOTATION = 0x8000,
34805 HAS_RVAL = 0x10000,
34806 HAS_SCOPECHAIN = 0x20000,
34807 HAS_PREVPC = 0x40000,
34808 HAS_BLOCKCHAIN = 0x80000,
34811 DOWN_FRAMES_EXPANDED = 0x100000,
34812 LOWERED_CALL_APPLY = 0x200000
34816 mutable uint32_t flags_;
34823 JSScript *evalScript;
34825 mutable JSObject *scopeChain_;
34831 StaticBlockObject *blockChain_;
34832 ArgumentsObject *argsObj_;
34833 jsbytecode *prevpc_;
34834 JSInlinedSite *prevInline_;
34837 JSRejoinState rejoin_;
34840 static void staticAsserts() {
34841 typedef int moz_static_assert92[(__builtin_offsetof (StackFrame, rval_) % sizeof(Value) == 0) ? 1 : -1];
34842 typedef int moz_static_assert93[(sizeof(StackFrame) % sizeof(Value) == 0) ? 1 : -1];
34845 inline void initPrev(JSContext *cx);
34846 jsbytecode *prevpcSlow(JSInlinedSite **pinlined);
34849 # 394 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
34850 void initCallFrame(JSContext *cx, JSFunction &callee,
34851 JSScript *script, uint32_t nactual, StackFrame::Flags flags);
34854 void initFixupFrame(StackFrame *prev, StackFrame::Flags flags, void *ncode, unsigned nactual);
34857 void initExecuteFrame(JSScript *script, StackFrame *prev, FrameRegs *regs,
34858 const Value &thisv, JSObject &scopeChain, ExecuteType type);
34861 enum TriggerPostBarriers {
34862 DoPostBarrier = true,
34863 NoPostBarrier = false
34865 template <class T, class U, TriggerPostBarriers doPostBarrier>
34866 void stealFrameAndSlots(JSContext *cx, StackFrame *fp, T *vp,
34867 StackFrame *otherfp, U *othervp, Value *othersp);
34868 void writeBarrierPost();
34871 void initDummyFrame(JSContext *cx, JSObject &chain);
34872 # 428 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
34873 bool isFunctionFrame() const {
34874 return !!(flags_ & FUNCTION);
34877 bool isGlobalFrame() const {
34878 return !!(flags_ & GLOBAL);
34881 bool isDummyFrame() const {
34882 return !!(flags_ & DUMMY);
34885 bool isScriptFrame() const {
34886 bool retval = !!(flags_ & (FUNCTION | GLOBAL));
34890 # 458 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
34891 bool isEvalFrame() const {
34893 return flags_ & EVAL;
34896 bool isEvalInFunction() const {
34897 return (flags_ & (EVAL | FUNCTION)) == (EVAL | FUNCTION);
34900 bool isNonEvalFunctionFrame() const {
34901 return (flags_ & (FUNCTION | EVAL)) == FUNCTION;
34904 inline bool isStrictEvalFrame() const {
34905 return isEvalFrame() && script()->strictModeCode;
34908 bool isNonStrictEvalFrame() const {
34909 return isEvalFrame() && !script()->strictModeCode;
34912 bool isDirectEvalFrame() const {
34913 return isEvalFrame() && script()->staticLevel > 0;
34916 bool isNonStrictDirectEvalFrame() const {
34917 return isNonStrictEvalFrame() && isDirectEvalFrame();
34919 # 500 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
34920 StackFrame *prev() const {
34924 inline void resetGeneratorPrev(JSContext *cx);
34925 inline void resetInlinePrev(StackFrame *prevfp, jsbytecode *prevpc);
34927 inline void initInlineFrame(JSFunction *fun, StackFrame *prevfp, jsbytecode *prevpc);
34929 inline JSObject *createRestParameter(JSContext *cx);
34930 # 519 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
34931 Value *slots() const {
34932 return (Value *)(this + 1);
34935 Value *base() const {
34936 return slots() + script()->nfixed;
34939 Value &varSlot(unsigned i) {
34945 Value &localSlot(unsigned i) {
34950 # 574 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
34951 jsbytecode *pcQuadratic(const ContextStack &stack, StackFrame *next = __null,
34952 JSInlinedSite **pinlined = __null);
34954 jsbytecode *prevpc(JSInlinedSite **pinlined) {
34955 if (flags_ & HAS_PREVPC) {
34957 *pinlined = prevInline_;
34960 return prevpcSlow(pinlined);
34963 JSInlinedSite *prevInline() {
34965 return prevInline_;
34968 JSScript *script() const {
34970 return isFunctionFrame()
34971 ? isEvalFrame() ? u.evalScript : fun()->script()
34975 JSScript *functionScript() const {
34977 return isEvalFrame() ? u.evalScript : fun()->script();
34980 JSScript *globalScript() const {
34982 return exec.script;
34985 JSScript *maybeScript() const {
34986 return isScriptFrame() ? script() : __null;
34989 size_t numFixed() const {
34990 return script()->nfixed;
34993 size_t numSlots() const {
34994 return script()->nslots;
34997 size_t numGlobalVars() const {
34999 return exec.script->nfixed;
35001 # 634 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35002 JSFunction* fun() const {
35007 JSFunction* maybeFun() const {
35008 return isFunctionFrame() ? fun() : __null;
35011 JSFunction* maybeScriptFunction() const {
35012 if (!isFunctionFrame())
35014 const StackFrame *fp = this;
35015 while (fp->isEvalFrame())
35017 return fp->script()->function();
35019 # 672 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35020 bool hasArgs() const {
35021 return isNonEvalFunctionFrame();
35024 unsigned numFormalArgs() const {
35026 return fun()->nargs;
35029 Value &formalArg(unsigned i) const {
35031 return formalArgs()[i];
35034 Value *formalArgs() const {
35036 return (Value *)this - numFormalArgs();
35039 Value *formalArgsEnd() const {
35041 return (Value *)this;
35044 Value *maybeFormalArgs() const {
35045 return (flags_ & (FUNCTION | EVAL)) == FUNCTION
35050 inline unsigned numActualArgs() const;
35051 inline Value *actualArgs() const;
35052 inline Value *actualArgsEnd() const;
35054 inline Value &canonicalActualArg(unsigned i) const;
35055 template <class Op>
35056 inline bool forEachCanonicalActualArg(Op op, unsigned start = 0, unsigned count = unsigned(-1));
35057 template <class Op> inline bool forEachFormalArg(Op op);
35061 bool hasArgsObj() const {
35069 return !!(flags_ & HAS_ARGS_OBJ);
35072 ArgumentsObject &argsObj() const {
35077 ArgumentsObject *maybeArgsObj() const {
35078 return hasArgsObj() ? &argsObj() : __null;
35081 void initArgsObj(ArgumentsObject &argsObj) {
35084 argsObj_ = &argsObj;
35085 flags_ |= HAS_ARGS_OBJ;
35087 # 754 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35088 Value &functionThis() const {
35091 return ((Value *)this)[-1];
35092 return formalArgs()[-1];
35095 JSObject &constructorThis() const {
35097 return formalArgs()[-1].toObject();
35100 Value &globalThis() const {
35102 return ((Value *)this)[-1];
35105 Value &thisValue() const {
35106 if (flags_ & (EVAL | GLOBAL))
35107 return ((Value *)this)[-1];
35108 return formalArgs()[-1];
35110 # 786 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35111 JSFunction &callee() const {
35113 return *calleev().toObject().toFunction();
35116 const Value &calleev() const {
35118 return mutableCalleev();
35121 const Value &maybeCalleev() const {
35123 Value &calleev = flags_ & (EVAL | GLOBAL)
35124 ? ((Value *)this)[-2]
35125 : formalArgs()[-2];
35130 Value &mutableCalleev() const {
35133 return ((Value *)this)[-2];
35134 return formalArgs()[-2];
35137 CallReceiver callReceiver() const {
35138 return CallReceiverFromArgv(formalArgs());
35140 # 846 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35141 inline HandleObject scopeChain() const;
35142 inline GlobalObject &global() const;
35144 bool hasCallObj() const {
35145 bool ret = !!(flags_ & HAS_CALL_OBJ);
35150 inline CallObject &callObj() const;
35151 inline void initScopeChain(CallObject &callobj);
35152 inline void setScopeChain(JSObject &obj);
35153 # 874 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35154 inline JSObject &varObj();
35158 bool hasBlockChain() const {
35159 return (flags_ & HAS_BLOCKCHAIN) && blockChain_;
35162 StaticBlockObject *maybeBlockChain() {
35163 return (flags_ & HAS_BLOCKCHAIN) ? blockChain_ : __null;
35166 StaticBlockObject &blockChain() const {
35168 return *blockChain_;
35172 bool pushBlock(JSContext *cx, StaticBlockObject &block);
35173 void popBlock(JSContext *cx);
35176 void popWith(JSContext *cx);
35182 inline bool functionPrologue(JSContext *cx);
35190 inline void functionEpilogue(JSContext *cx);
35196 inline void updateEpilogueFlags();
35198 inline bool maintainNestingState() const;
35199 # 927 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35200 inline JSCompartment *compartment() const;
35204 void* annotation() const {
35205 return (flags_ & HAS_ANNOTATION) ? annotation_ : __null;
35208 void setAnnotation(void *annot) {
35209 flags_ |= HAS_ANNOTATION;
35210 annotation_ = annot;
35215 JSRejoinState rejoin() const {
35219 void setRejoin(JSRejoinState state) {
35225 void setDownFramesExpanded() {
35226 flags_ |= DOWN_FRAMES_EXPANDED;
35229 bool downFramesExpanded() {
35230 return !!(flags_ & DOWN_FRAMES_EXPANDED);
35235 bool hasHookData() const {
35236 return !!(flags_ & HAS_HOOK_DATA);
35239 void* hookData() const {
35244 void* maybeHookData() const {
35245 return hasHookData() ? hookData_ : __null;
35248 void setHookData(void *v) {
35250 flags_ |= HAS_HOOK_DATA;
35255 bool hasReturnValue() const {
35256 return !!(flags_ & HAS_RVAL);
35259 Value &returnValue() {
35260 if (!(flags_ & HAS_RVAL))
35261 rval_.setUndefined();
35265 void markReturnValue() {
35266 flags_ |= HAS_RVAL;
35269 void setReturnValue(const Value &v) {
35274 void clearReturnValue() {
35275 rval_.setUndefined();
35281 void *nativeReturnAddress() const {
35285 void setNativeReturnAddress(void *addr) {
35289 void **addressOfNativeReturnAddress() {
35292 # 1028 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35293 bool isGeneratorFrame() const {
35294 return !!(flags_ & GENERATOR);
35297 bool isFloatingGenerator() const {
35299 return !!(flags_ & FLOATING_GENERATOR);
35302 void initFloatingGenerator() {
35304 flags_ |= (GENERATOR | FLOATING_GENERATOR);
35307 void unsetFloatingGenerator() {
35308 flags_ &= ~FLOATING_GENERATOR;
35311 void setFloatingGenerator() {
35312 flags_ |= FLOATING_GENERATOR;
35314 # 1057 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35315 bool isFramePushedByExecute() const {
35316 return !!(flags_ & (GLOBAL | EVAL));
35323 InitialFrameFlags initialFlags() const {
35324 typedef int moz_static_assert94[((int)INITIAL_NONE == 0) ? 1 : -1];
35325 typedef int moz_static_assert95[((int)INITIAL_CONSTRUCT == (int)CONSTRUCTING) ? 1 : -1];
35326 typedef int moz_static_assert96[((int)INITIAL_LOWERED == (int)LOWERED_CALL_APPLY) ? 1 : -1];
35327 uint32_t mask = CONSTRUCTING | LOWERED_CALL_APPLY;
35329 return InitialFrameFlags(flags_ & mask);
35332 bool isConstructing() const {
35333 return !!(flags_ & CONSTRUCTING);
35342 bool loweredCallOrApply() const {
35343 return !!(flags_ & LOWERED_CALL_APPLY);
35346 bool isDebuggerFrame() const {
35347 return !!(flags_ & DEBUGGER);
35350 bool hasOverflowArgs() const {
35351 return !!(flags_ & OVERFLOW_ARGS);
35354 bool isYielding() {
35355 return !!(flags_ & YIELDING);
35358 void setYielding() {
35359 flags_ |= YIELDING;
35362 void clearYielding() {
35363 flags_ &= ~YIELDING;
35366 void setFinishedInInterpreter() {
35367 flags_ |= FINISHED_IN_INTERP;
35370 bool finishedInInterpreter() const {
35371 return !!(flags_ & FINISHED_IN_INTERP);
35377 static size_t offsetOfFlags() {
35378 return __builtin_offsetof (StackFrame, flags_);
35381 static size_t offsetOfExec() {
35382 return __builtin_offsetof (StackFrame, exec);
35385 static size_t offsetOfNumActual() {
35386 return __builtin_offsetof (StackFrame, u.nactual);
35389 static size_t offsetOfScopeChain() {
35390 return __builtin_offsetof (StackFrame, scopeChain_);
35393 static size_t offsetOfPrev() {
35394 return __builtin_offsetof (StackFrame, prev_);
35397 static size_t offsetOfReturnValue() {
35398 return __builtin_offsetof (StackFrame, rval_);
35401 static size_t offsetOfArgsObj() {
35402 return __builtin_offsetof (StackFrame, argsObj_);
35405 static ptrdiff_t offsetOfNcode() {
35406 return __builtin_offsetof (StackFrame, ncode_);
35409 static ptrdiff_t offsetOfCallee(JSFunction *fun) {
35411 return -(fun->nargs + 2) * sizeof(Value);
35414 static ptrdiff_t offsetOfThis(JSFunction *fun) {
35415 return fun == __null
35416 ? -1 * ptrdiff_t(sizeof(Value))
35417 : -(fun->nargs + 1) * ptrdiff_t(sizeof(Value));
35420 static ptrdiff_t offsetOfFormalArg(JSFunction *fun, unsigned i) {
35422 return (-(int)fun->nargs + i) * sizeof(Value);
35425 static size_t offsetOfFixed(unsigned i) {
35426 return sizeof(StackFrame) + i * sizeof(Value);
35430 inline mjit::JITScript *jit();
35433 void methodjitStaticAsserts();
35436 void mark(JSTracer *trc);
35439 static const size_t VALUES_PER_STACK_FRAME = sizeof(StackFrame) / sizeof(Value);
35441 static inline unsigned
35442 ToReportFlags(InitialFrameFlags initial)
35444 return unsigned(initial & StackFrame::CONSTRUCTING);
35447 static inline StackFrame::Flags
35448 ToFrameFlags(InitialFrameFlags initial)
35450 return StackFrame::Flags(initial);
35453 static inline InitialFrameFlags
35454 InitialFrameFlagsFromConstructing(bool b)
35456 return b ? INITIAL_CONSTRUCT : INITIAL_NONE;
35460 InitialFrameFlagsAreConstructing(InitialFrameFlags initial)
35462 return !!(initial & INITIAL_CONSTRUCT);
35466 InitialFrameFlagsAreLowered(InitialFrameFlags initial)
35468 return !!(initial & INITIAL_LOWERED);
35471 inline StackFrame * Valueify(JSStackFrame *fp) { return (StackFrame *)fp; }
35472 static inline JSStackFrame * Jsvalify(StackFrame *fp) { return (JSStackFrame *)fp; }
35482 JSInlinedSite *inlined_;
35485 StackFrame *fp() const { return fp_; }
35486 JSInlinedSite *inlined() const { return inlined_; }
35489 static const size_t offsetOfFp = 3 * sizeof(void *);
35490 static const size_t offsetOfInlined = 2 * sizeof(void *);
35491 static void staticAssert() {
35492 typedef int moz_static_assert97[(offsetOfFp == __builtin_offsetof (FrameRegs, fp_)) ? 1 : -1];
35493 typedef int moz_static_assert98[(offsetOfInlined == __builtin_offsetof (FrameRegs, inlined_)) ? 1 : -1];
35495 void clearInlined() { inlined_ = __null; }
35498 void rebaseFromTo(const FrameRegs &from, StackFrame &to) {
35500 sp = to.slots() + (from.sp - from.fp_->slots());
35502 inlined_ = from.inlined_;
35507 void popFrame(Value *newsp) {
35508 pc = fp_->prevpc(&inlined_);
35515 void popPartialFrame(Value *newsp) {
35522 void restorePartialFrame(Value *newfp) {
35523 fp_ = (StackFrame *) newfp;
35527 void refreshFramePointer(StackFrame *fp) {
35532 void prepareToRun(StackFrame &fp, JSScript *script) {
35534 sp = fp.slots() + script->nfixed;
35539 void setToEndOfScript() {
35540 JSScript *script = fp()->script();
35542 pc = script->code + script->length - 1;
35547 void initDummyFrame(StackFrame &fp) {
35555 void expandInline(StackFrame *innerfp, jsbytecode *innerpc) {
35563 void updateForNcode(mjit::JITScript *jit, void *ncode) {
35564 pc = mjit::NativeToPC(jit, ncode, &inlined_);
35574 StackSegment *const prevInContext_;
35577 StackSegment *const prevInMemory_;
35583 CallArgsList *calls_;
35586 StackSegment(StackSegment *prevInContext,
35587 StackSegment *prevInMemory,
35589 CallArgsList *calls)
35590 : prevInContext_(prevInContext),
35591 prevInMemory_(prevInMemory),
35598 Value *slotsBegin() const {
35599 return (Value *)(this + 1);
35604 FrameRegs ®s() const {
35609 FrameRegs *maybeRegs() const {
35613 StackFrame *fp() const {
35614 return regs_->fp();
35617 StackFrame *maybefp() const {
35618 return regs_ ? regs_->fp() : __null;
35621 jsbytecode *maybepc() const {
35622 return regs_ ? regs_->pc : __null;
35625 CallArgsList &calls() const {
35630 CallArgsList *maybeCalls() const {
35634 Value *callArgv() const {
35635 return calls_->array();
35638 Value *maybeCallArgv() const {
35639 return calls_ ? calls_->array() : __null;
35642 StackSegment *prevInContext() const {
35643 return prevInContext_;
35646 StackSegment *prevInMemory() const {
35647 return prevInMemory_;
35650 void repointRegs(FrameRegs *regs) {
35655 bool isEmpty() const {
35656 return !calls_ && !regs_;
35659 bool contains(const StackFrame *fp) const;
35660 bool contains(const FrameRegs *regs) const;
35661 bool contains(const CallArgsList *call) const;
35663 StackFrame *computeNextFrame(const StackFrame *fp) const;
35665 Value *end() const;
35667 FrameRegs *pushRegs(FrameRegs ®s);
35668 void popRegs(FrameRegs *regs);
35669 void pushCall(CallArgsList &callList);
35670 void pointAtCall(CallArgsList &callList);
35675 static const size_t offsetOfRegs() { return __builtin_offsetof (StackSegment, regs_); }
35678 static const size_t VALUES_PER_STACK_SEGMENT = sizeof(StackSegment) / sizeof(Value);
35679 typedef int moz_static_assert99[(sizeof(StackSegment) % sizeof(Value) == 0) ? 1 : -1];
35685 StackSegment *seg_;
35687 mutable Value *conservativeEnd_;
35691 Value *defaultEnd_;
35692 Value *trustedEnd_;
35694 void assertInvariants() const {
35705 static const size_t CAPACITY_VALS = 512 * 1024;
35706 static const size_t CAPACITY_BYTES = CAPACITY_VALS * sizeof(Value);
35709 static const size_t COMMIT_VALS = 16 * 1024;
35710 static const size_t COMMIT_BYTES = COMMIT_VALS * sizeof(Value);
35713 static const size_t BUFFER_VALS = 16 * 1024;
35714 static const size_t BUFFER_BYTES = BUFFER_VALS * sizeof(Value);
35716 static void staticAsserts() {
35717 typedef int moz_static_assert100[(CAPACITY_VALS % COMMIT_VALS == 0) ? 1 : -1];
35720 friend class AllFramesIter;
35721 friend class ContextStack;
35722 friend class StackFrame;
35723 # 1474 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35724 static const size_t CX_COMPARTMENT = 0xc;
35726 inline bool ensureSpace(JSContext *cx, MaybeReportError report,
35727 Value *from, ptrdiff_t nvals,
35728 JSCompartment *dest = (JSCompartment *)CX_COMPARTMENT) const;
35729 __attribute__((visibility("default"))) bool ensureSpaceSlow(JSContext *cx, MaybeReportError report,
35730 Value *from, ptrdiff_t nvals,
35731 JSCompartment *dest) const;
35733 StackSegment &findContainingSegment(const StackFrame *target) const;
35739 # 1501 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35740 static const unsigned ARGS_LENGTH_MAX = CAPACITY_VALS - (2 * BUFFER_VALS);
35743 inline Value *firstUnused() const { return seg_ ? seg_->end() : base_; }
35745 StackSegment &containingSegment(const StackFrame *target) const;
35746 # 1516 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35747 static const size_t STACK_JIT_EXTRA = ( 8 + 18) * 10;
35748 # 1532 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35749 inline Value *getStackLimit(JSContext *cx, MaybeReportError report);
35750 bool tryBumpLimit(JSContext *cx, Value *from, unsigned nvals, Value **limit);
35753 void mark(JSTracer *trc);
35754 void markFrameSlots(JSTracer *trc, StackFrame *fp, Value *slotsEnd, jsbytecode *pc);
35757 void markActiveCompartments();
35760 __attribute__((visibility("default"))) size_t sizeOfCommitted();
35771 StackSegment *seg_;
35772 StackSpace *const space_;
35774 # 1566 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35775 bool onTop() const;
35780 void assertSpaceInSync() const {}
35784 StackSegment *pushSegment(JSContext *cx);
35785 enum MaybeExtend { CAN_EXTEND = true, CANT_EXTEND = false };
35786 Value *ensureOnTop(JSContext *cx, MaybeReportError report, unsigned nvars,
35787 MaybeExtend extend, bool *pushedSeg,
35788 JSCompartment *dest = (JSCompartment *)StackSpace::CX_COMPARTMENT);
35790 inline StackFrame *
35791 getCallFrame(JSContext *cx, MaybeReportError report, const CallArgs &args,
35792 JSFunction *fun, JSScript *script, StackFrame::Flags *pflags) const;
35796 friend class InvokeArgsGuard;
35797 void popInvokeArgs(const InvokeArgsGuard &iag);
35798 friend class FrameGuard;
35799 void popFrame(const FrameGuard &fg);
35800 friend class GeneratorFrameGuard;
35801 void popGeneratorFrame(const GeneratorFrameGuard &gfg);
35803 friend class StackIter;
35806 ContextStack(JSContext *cx);
35815 bool empty() const { return !seg_; }
35823 inline bool hasfp() const { return seg_ && seg_->maybeRegs(); }
35829 inline FrameRegs *maybeRegs() const { return seg_ ? seg_->maybeRegs() : __null; }
35830 inline StackFrame *maybefp() const { return seg_ ? seg_->maybefp() : __null; }
35833 inline FrameRegs ®s() const { do { } while(0); return seg_->regs(); }
35834 inline StackFrame *fp() const { do { } while(0); return seg_->fp(); }
35837 StackSpace &space() const { return *space_; }
35840 bool containsSlow(const StackFrame *target) const;
35841 # 1641 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35842 bool pushInvokeArgs(JSContext *cx, unsigned argc, InvokeArgsGuard *ag);
35845 bool pushInvokeFrame(JSContext *cx, const CallArgs &args,
35846 InitialFrameFlags initial, InvokeFrameGuard *ifg);
35849 bool pushExecuteFrame(JSContext *cx, JSScript *script, const Value &thisv,
35850 JSObject &scopeChain, ExecuteType type,
35851 StackFrame *evalInFrame, ExecuteFrameGuard *efg);
35859 bool pushGeneratorFrame(JSContext *cx, JSGenerator *gen, GeneratorFrameGuard *gfg);
35860 # 1669 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35861 bool pushDummyFrame(JSContext *cx, JSCompartment *dest, JSObject &scopeChain, DummyFrameGuard *dfg);
35868 bool pushInlineFrame(JSContext *cx, FrameRegs ®s, const CallArgs &args,
35869 JSFunction &callee, JSScript *script,
35870 InitialFrameFlags initial);
35871 bool pushInlineFrame(JSContext *cx, FrameRegs ®s, const CallArgs &args,
35872 JSFunction &callee, JSScript *script,
35873 InitialFrameFlags initial, Value **stackLimit);
35874 void popInlineFrame(FrameRegs ®s);
35877 void popFrameAfterOverflow();
35880 inline JSScript *currentScript(jsbytecode **pc = __null) const;
35881 inline JSScript *currentScriptWithDiagnostics(jsbytecode **pc = __null) const;
35884 inline HandleObject currentScriptedScopeChain() const;
35891 StackFrame *getFixupFrame(JSContext *cx, MaybeReportError report,
35892 const CallArgs &args, JSFunction *fun, JSScript *script,
35893 void *ncode, InitialFrameFlags initial, Value **stackLimit);
35895 bool saveFrameChain();
35896 void restoreFrameChain();
35902 inline void repointRegs(FrameRegs *regs) { do { } while(0); seg_->repointRegs(regs); }
35903 # 1719 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35904 void threadReset();
35908 static size_t offsetOfSeg() { return __builtin_offsetof (ContextStack, seg_); }
35913 class InvokeArgsGuard : public CallArgsList
35915 friend class ContextStack;
35916 ContextStack *stack_;
35918 void setPushed(ContextStack &stack) { do { } while(0); stack_ = &stack; }
35920 InvokeArgsGuard() : CallArgsList(), stack_(__null), pushedSeg_(false) {}
35921 ~InvokeArgsGuard() { if (pushed()) stack_->popInvokeArgs(*this); }
35922 bool pushed() const { return !!stack_; }
35923 void pop() { stack_->popInvokeArgs(*this); stack_ = __null; }
35929 friend class ContextStack;
35930 ContextStack *stack_;
35933 FrameRegs *prevRegs_;
35934 void setPushed(ContextStack &stack) { stack_ = &stack; }
35936 FrameGuard() : stack_(__null), pushedSeg_(false) {}
35937 ~FrameGuard() { if (pushed()) stack_->popFrame(*this); }
35938 bool pushed() const { return !!stack_; }
35939 void pop() { stack_->popFrame(*this); stack_ = __null; }
35941 StackFrame *fp() const { return regs_.fp(); }
35944 class InvokeFrameGuard : public FrameGuard
35947 class ExecuteFrameGuard : public FrameGuard
35950 class DummyFrameGuard : public FrameGuard
35953 class GeneratorFrameGuard : public FrameGuard
35955 friend class ContextStack;
35959 ~GeneratorFrameGuard() { if (pushed()) stack_->popGeneratorFrame(*this); }
35961 # 1797 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h"
35964 friend class ContextStack;
35965 JSContext *maybecx_;
35967 enum SavedOption { STOP_AT_SAVED, GO_THROUGH_SAVED };
35969 SavedOption savedOption_;
35971 enum State { DONE, SCRIPTED, NATIVE, IMPLICIT_NATIVE };
35975 CallArgsList *calls_;
35977 StackSegment *seg_;
35986 void settleOnNewSegment();
35987 void settleOnNewState();
35988 void startOnSegment(StackSegment *seg);
35991 StackIter(JSContext *cx, SavedOption = STOP_AT_SAVED);
35992 StackIter(JSRuntime *rt, StackSegment &seg);
35994 bool done() const { return state_ == DONE; }
35995 StackIter &operator++();
35997 bool operator==(const StackIter &rhs) const;
35998 bool operator!=(const StackIter &rhs) const { return !(*this == rhs); }
36000 bool isScript() const { do { } while(0); return state_ == SCRIPTED; }
36001 bool isImplicitNativeCall() const {
36003 return state_ == IMPLICIT_NATIVE;
36005 bool isNativeCall() const {
36007 return state_ == NATIVE || state_ == IMPLICIT_NATIVE;
36010 bool isFunctionFrame() const;
36011 bool isEvalFrame() const;
36012 bool isNonEvalFunctionFrame() const;
36013 bool isConstructing() const;
36015 StackFrame *fp() const { do { } while(0); return fp_; }
36016 Value *sp() const { do { } while(0); return sp_; }
36017 jsbytecode *pc() const { do { } while(0); return pc_; }
36018 JSScript *script() const { do { } while(0); return script_; }
36019 JSFunction *callee() const;
36020 Value calleev() const;
36021 Value thisv() const;
36023 CallArgs nativeArgs() const { do { } while(0); return args_; }
36027 class ScriptFrameIter : public StackIter
36030 while (!done() && !isScript())
36031 StackIter::operator++();
36035 ScriptFrameIter(JSContext *cx, StackIter::SavedOption opt = StackIter::STOP_AT_SAVED)
36036 : StackIter(cx, opt) { settle(); }
36038 ScriptFrameIter &operator++() { StackIter::operator++(); settle(); return *this; }
36047 class AllFramesIter
36050 AllFramesIter(StackSpace &space);
36052 bool done() const { return fp_ == __null; }
36053 AllFramesIter& operator++();
36055 StackFrame *fp() const { return fp_; }
36059 StackSegment *seg_;
36064 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h" 2
36065 # 41 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36070 struct JSSharpInfo {
36074 JSSharpInfo() : hasGen(false), isSharp(false) {}
36077 typedef js::HashMap<JSObject *, JSSharpInfo> JSSharpTable;
36079 struct JSSharpObjectMap {
36082 JSSharpTable table;
36084 JSSharpObjectMap(JSContext *cx) : depth(0), sharpgen(0), table(js::TempAllocPolicy(cx)) {
36092 class JaegerRuntime;
36097 class InterpreterFrames;
36107 typedef HashMap<jsbytecode *,
36109 PointerHasher<jsbytecode *, 0>,
36110 SystemAllocPolicy> Map;
36115 GSNCache() : code(__null) { }
36121 GetGSNCache(JSContext *cx);
36123 struct PendingProxyOperation {
36124 PendingProxyOperation *next;
36125 RootedObject object;
36126 PendingProxyOperation(JSContext *cx, JSObject *object) : next(__null), object(cx, object) {}
36129 typedef Vector<ScriptAndCounts, 0, SystemAllocPolicy> ScriptAndCountsVector;
36131 struct ConservativeGCData
36137 uintptr_t *nativeStackTop;
36138 # 126 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36141 uintptr_t words[(((sizeof(jmp_buf))+(sizeof(uintptr_t))-1)/(sizeof(uintptr_t)))];
36142 } registerSnapshot;
36144 ConservativeGCData() {
36148 ~ConservativeGCData() {
36158 __attribute__((noinline)) void recordStackTop();
36161 void updateForRequestEnd(unsigned suspendCount) {
36165 nativeStackTop = __null;
36169 bool hasStackToScan() const {
36170 return !!nativeStackTop;
36174 class ToSourceCache
36176 typedef HashMap<JSFunction *,
36178 DefaultHasher<JSFunction *>,
36179 SystemAllocPolicy> Map;
36182 ToSourceCache() : map_(__null) {}
36183 JSString *lookup(JSFunction *fun);
36184 void put(JSFunction *fun, JSString *);
36190 static const unsigned SHIFT = 6;
36191 static const unsigned LENGTH = 1 << SHIFT;
36192 JSScript *table_[LENGTH];
36195 EvalCache() { PodArrayZero(table_); }
36196 JSScript **bucket(JSLinearString *str);
36200 class NativeIterCache
36202 static const size_t SIZE = size_t(1) << 8;
36205 JSObject *data[SIZE];
36207 static size_t getIndex(uint32_t key) {
36208 return size_t(key) % SIZE;
36217 PodArrayZero(data);
36222 PodArrayZero(data);
36225 JSObject *get(uint32_t key) const {
36226 return data[getIndex(key)];
36229 void set(uint32_t key, JSObject *iterobj) {
36230 data[getIndex(key)] = iterobj;
36239 class NewObjectCache
36242 static const unsigned MAX_OBJ_SIZE = 4 * sizeof(void*) + 16 * sizeof(Value);
36243 static inline void staticAsserts();
36249 # 250 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36253 gc::AllocKind kind;
36262 char templateObject[MAX_OBJ_SIZE];
36269 typedef int EntryIndex;
36271 NewObjectCache() { PodZero(this); }
36272 void purge() { PodZero(this); }
36278 inline bool lookupProto(Class *clasp, JSObject *proto, gc::AllocKind kind, EntryIndex *pentry);
36279 inline bool lookupGlobal(Class *clasp, js::GlobalObject *global, gc::AllocKind kind, EntryIndex *pentry);
36280 inline bool lookupType(Class *clasp, js::types::TypeObject *type, gc::AllocKind kind, EntryIndex *pentry);
36283 inline JSObject *newObjectFromHit(JSContext *cx, EntryIndex entry);
36286 inline void fillProto(EntryIndex entry, Class *clasp, JSObject *proto, gc::AllocKind kind, JSObject *obj);
36287 inline void fillGlobal(EntryIndex entry, Class *clasp, js::GlobalObject *global, gc::AllocKind kind, JSObject *obj);
36288 inline void fillType(EntryIndex entry, Class *clasp, js::types::TypeObject *type, gc::AllocKind kind, JSObject *obj);
36291 void invalidateEntriesForShape(JSContext *cx, Shape *shape, JSObject *proto);
36294 inline bool lookup(Class *clasp, gc::Cell *key, gc::AllocKind kind, EntryIndex *pentry);
36295 inline void fill(EntryIndex entry, Class *clasp, gc::Cell *key, gc::AllocKind kind, JSObject *obj);
36296 static inline void copyCachedToObject(JSObject *dst, JSObject *src);
36298 # 306 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36299 class FreeOp : public JSFreeOp {
36300 bool shouldFreeLater_;
36301 bool onBackgroundThread_;
36304 static FreeOp *get(JSFreeOp *fop) {
36305 return static_cast<FreeOp *>(fop);
36308 FreeOp(JSRuntime *rt, bool shouldFreeLater, bool onBackgroundThread)
36310 shouldFreeLater_(shouldFreeLater),
36311 onBackgroundThread_(onBackgroundThread)
36315 bool shouldFreeLater() const {
36316 return shouldFreeLater_;
36319 bool onBackgroundThread() const {
36320 return onBackgroundThread_;
36323 inline void free_(void* p);
36325 template <class T> inline void delete_(T *p) { if (p) { p->~T(); free_(p); } } template <class T> inline void array_delete(T *p) { if (p) { void* p0 = (void *)(uintptr_t(p) - js::OffTheBooks::JSMinAlignment); size_t n = *(size_t *)p0; for (size_t i = 0; i < n; i++) (p + i)->~T(); free_(p0); } }
36327 static void staticAsserts() {
36334 typedef int moz_static_assert101[(__builtin_offsetof (FreeOp, shouldFreeLater_) == sizeof(JSFreeOp)) ? 1 : -1];
36341 struct RuntimeSizes;
36344 struct JSRuntime : js::RuntimeFriendFields
36347 JSCompartment *atomsCompartment;
36350 js::CompartmentVector compartments;
36355 void *ownerThread() const { return ownerThread_; }
36356 void clearOwnerThread();
36357 void setOwnerThread();
36358 __attribute__((visibility("default"))) bool onOwnerThread() const;
36360 void *ownerThread_;
36368 js::StackSpace stackSpace;
36371 static const size_t TEMP_LIFO_ALLOC_PRIMARY_CHUNK_SIZE = 1 << 12;
36372 js::LifoAlloc tempLifoAlloc;
36379 JSC::ExecutableAllocator *execAlloc_;
36380 WTF::BumpPointerAllocator *bumpAlloc_;
36382 js::mjit::JaegerRuntime *jaegerRuntime_;
36385 JSC::ExecutableAllocator *createExecutableAllocator(JSContext *cx);
36386 WTF::BumpPointerAllocator *createBumpPointerAllocator(JSContext *cx);
36387 js::mjit::JaegerRuntime *createJaegerRuntime(JSContext *cx);
36390 JSC::ExecutableAllocator *getExecAlloc(JSContext *cx) {
36391 return execAlloc_ ? execAlloc_ : createExecutableAllocator(cx);
36393 JSC::ExecutableAllocator &execAlloc() {
36395 return *execAlloc_;
36397 WTF::BumpPointerAllocator *getBumpPointerAllocator(JSContext *cx) {
36398 return bumpAlloc_ ? bumpAlloc_ : createBumpPointerAllocator(cx);
36401 js::mjit::JaegerRuntime *getJaegerRuntime(JSContext *cx) {
36402 return jaegerRuntime_ ? jaegerRuntime_ : createJaegerRuntime(cx);
36404 bool hasJaegerRuntime() const {
36405 return jaegerRuntime_;
36407 js::mjit::JaegerRuntime &jaegerRuntime() {
36409 return *jaegerRuntime_;
36414 uintptr_t nativeStackBase;
36417 size_t nativeStackQuota;
36423 js::InterpreterFrames *interpreterFrames;
36426 JSContextCallback cxCallback;
36429 JSDestroyCompartmentCallback destroyCompartmentCallback;
36431 js::ActivityCallback activityCallback;
36432 void *activityCallbackArg;
36436 unsigned suspendCount;
36439 unsigned requestDepth;
36440 # 460 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36441 js::GCChunkSet gcChunkSet;
36442 # 469 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36443 js::gc::Chunk *gcSystemAvailableChunkListHead;
36444 js::gc::Chunk *gcUserAvailableChunkListHead;
36445 js::gc::ChunkPool gcChunkPool;
36447 js::RootedValueMap gcRootsHash;
36448 js::GCLocks gcLocksHash;
36449 unsigned gcKeepAtoms;
36452 size_t gcMaxMallocBytes;
36459 volatile uint32_t gcNumArenasFreeCommitted;
36460 js::GCMarker gcMarker;
36461 void *gcVerifyData;
36462 bool gcChunkAllocationSinceLastGC;
36463 int64_t gcNextFullGCTime;
36464 int64_t gcJitReleaseTime;
36468 bool gcShouldCleanUpEverything;
36475 volatile uintptr_t gcIsNeeded;
36477 js::WeakMapBase *gcWeakMapList;
36478 js::gcstats::Statistics gcStats;
36484 uint64_t gcStartNumber;
36490 js::gcreason::Reason gcTriggerReason;
36496 bool gcStrictCompartmentChecking;
36502 js::gc::State gcIncrementalState;
36505 bool gcLastMarkSlice;
36512 volatile uintptr_t gcInterFrameGC;
36515 int64_t gcSliceBudget;
36521 bool gcIncrementalEnabled;
36528 bool gcExactScanningEnabled;
36529 # 572 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36532 # 614 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36533 int gcZeal() { return 0; }
36534 bool needZealousGC() { return false; }
36537 JSGCCallback gcCallback;
36538 js::GCSliceCallback gcSliceCallback;
36539 JSFinalizeCallback gcFinalizeCallback;
36546 volatile ptrdiff_t gcMallocBytes;
36555 JSTraceDataOp gcBlackRootsTraceOp;
36556 void *gcBlackRootsData;
36557 JSTraceDataOp gcGrayRootsTraceOp;
36558 void *gcGrayRootsData;
36561 js::AutoGCRooter *autoGCRooters;
36564 js::ScriptAndCountsVector *scriptAndCountsVector;
36567 js::Value NaNValue;
36568 js::Value negativeInfinityValue;
36569 js::Value positiveInfinityValue;
36571 JSAtom *emptyString;
36574 JSCList contextList;
36576 bool hasContexts() const {
36577 return !((&contextList)->next == (&contextList));
36581 JSDebugHooks debugHooks;
36587 bool profilingScripts;
36590 bool alwaysPreserveCode;
36593 JSBool hadOutOfMemory;
36599 JSCList debuggerList;
36602 js::DebugScopes *debugScopes;
36611 js::GCHelperThread gcHelperThread;
36615 js::FreeOp defaultFreeOp_;
36618 js::FreeOp *defaultFreeOp() {
36619 return &defaultFreeOp_;
36622 uint32_t debuggerMutations;
36624 const JSSecurityCallbacks *securityCallbacks;
36625 JSDestroyPrincipalsOp destroyPrincipals;
36628 const JSStructuredCloneCallbacks *structuredCloneCallbacks;
36631 JSAccumulateTelemetryDataCallback telemetryCallback;
36638 int32_t propertyRemovals;
36641 const char *thousandsSeparator;
36642 const char *decimalSeparator;
36643 const char *numGrouping;
36652 js::MathCache *mathCache_;
36653 js::MathCache *createMathCache(JSContext *cx);
36655 js::MathCache *getMathCache(JSContext *cx) {
36656 return mathCache_ ? mathCache_ : createMathCache(cx);
36659 js::GSNCache gsnCache;
36660 js::PropertyCache propertyCache;
36661 js::NewObjectCache newObjectCache;
36662 js::NativeIterCache nativeIterCache;
36663 js::ToSourceCache toSourceCache;
36664 js::EvalCache evalCache;
36667 DtoaState *dtoaState;
36670 js::PendingProxyOperation *pendingProxyOperation;
36672 js::ConservativeGCData conservativeGC;
36675 JSPrincipals *trustedPrincipals_;
36677 void setTrustedPrincipals(JSPrincipals *p) { trustedPrincipals_ = p; }
36678 JSPrincipals *trustedPrincipals() const { return trustedPrincipals_; }
36681 JSAtomState atomState;
36684 js::StaticStrings staticStrings;
36686 JSWrapObjectCallback wrapObjectCallback;
36687 JSSameCompartmentWrapObjectCallback sameCompartmentWrapObjectCallback;
36688 JSPreWrapCallback preWrapObjectCallback;
36689 js::PreserveWrapperCallback preserveWrapperCallback;
36691 js::ScriptFilenameTable scriptFilenameTable;
36692 # 783 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36693 int32_t inOOMReport;
36700 bool init(uint32_t maxbytes);
36702 JSRuntime *thisFromCtor() { return this; }
36708 void* malloc_(size_t bytes, JSContext *cx = __null) {
36709 updateMallocCounter(cx, bytes);
36710 void *p = ::js_malloc(bytes);
36711 return (__builtin_expect((!!p), 1)) ? p : onOutOfMemory(__null, bytes, cx);
36718 void* calloc_(size_t bytes, JSContext *cx = __null) {
36719 updateMallocCounter(cx, bytes);
36720 void *p = ::js_calloc(bytes);
36721 return (__builtin_expect((!!p), 1)) ? p : onOutOfMemory(reinterpret_cast<void *>(1), bytes, cx);
36724 void* realloc_(void* p, size_t oldBytes, size_t newBytes, JSContext *cx = __null) {
36726 updateMallocCounter(cx, newBytes - oldBytes);
36727 void *p2 = ::js_realloc(p, newBytes);
36728 return (__builtin_expect((!!p2), 1)) ? p2 : onOutOfMemory(p, newBytes, cx);
36731 void* realloc_(void* p, size_t bytes, JSContext *cx = __null) {
36737 updateMallocCounter(cx, bytes);
36738 void *p2 = ::js_realloc(p, bytes);
36739 return (__builtin_expect((!!p2), 1)) ? p2 : onOutOfMemory(p, bytes, cx);
36742 inline void free_(void* p) {
36744 js::Foreground::free_(p);
36747 template <class T> __attribute__((always_inline)) inline T *new_() { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T () : __null; } template <class T, class P1> __attribute__((always_inline)) inline T *new_(P1 p1) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1) : __null; } template <class T, class P1, class P2> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2) : __null; } template <class T, class P1, class P2, class P3> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3) : __null; } template <class T, class P1, class P2, class P3, class P4> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12> __attribute__((always_inline)) inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) : __null; } static const int JSMinAlignment = 8; template <class T> __attribute__((always_inline)) inline T *array_new(size_t n) { uint64_t numBytes64 = uint64_t(JSMinAlignment) + uint64_t(sizeof(T)) * uint64_t(n); size_t numBytes = size_t(numBytes64); if (numBytes64 != numBytes) { do { } while(0); return __null; } void *memory = malloc_(numBytes); if (!memory) return __null; *(size_t *)memory = n; memory = (void*)(uintptr_t(memory) + JSMinAlignment); return new(memory) T[n]; }
36748 template <class T> __attribute__((always_inline)) inline void delete_(T *p) { if (p) { p->~T(); free_(p); } } template <class T> __attribute__((always_inline)) inline void array_delete(T *p) { if (p) { void* p0 = (void *)(uintptr_t(p) - js::OffTheBooks::JSMinAlignment); size_t n = *(size_t *)p0; for (size_t i = 0; i < n; i++) (p + i)->~T(); free_(p0); } }
36750 void setGCMaxMallocBytes(size_t value);
36752 void resetGCMallocBytes() { gcMallocBytes = ptrdiff_t(gcMaxMallocBytes); }
36753 # 852 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36754 void updateMallocCounter(JSContext *cx, size_t nbytes);
36756 bool isTooMuchMalloc() const {
36757 return gcMallocBytes <= 0;
36763 __attribute__((visibility("default"))) void onTooMuchMalloc();
36764 # 871 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36765 __attribute__((visibility("default"))) void * onOutOfMemory(void *p, size_t nbytes, JSContext *cx);
36767 void triggerOperationCallback();
36769 void setJitHardening(bool enabled);
36770 bool getJitHardening() const {
36771 return jitHardening;
36774 void sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf, JS::RuntimeSizes *runtime);
36775 size_t sizeOfExplicitNonHeap();
36779 #define JS_PROPERTY_CACHE(cx) (cx->runtime->propertyCache)
36781 #define JS_KEEP_ATOMS(rt) (rt)->gcKeepAtoms++;
36782 #define JS_UNKEEP_ATOMS(rt) (rt)->gcKeepAtoms--;
36783 # 904 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36786 struct AutoResolving;
36789 OptionsHasAllowXML(uint32_t options)
36791 return !!(options & ((uint32_t)1 << (6)));
36795 OptionsHasMoarXML(uint32_t options)
36797 return !!(options & ((uint32_t)1 << (7)));
36801 OptionsSameVersionFlags(uint32_t self, uint32_t other)
36803 static const uint32_t mask = ((uint32_t)1 << (7));
36804 return !((self & mask) ^ (other & mask));
36806 # 935 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
36807 namespace VersionFlags {
36808 static const unsigned MASK = 0x0FFF;
36809 static const unsigned ALLOW_XML = 0x1000;
36810 static const unsigned MOAR_XML = 0x2000;
36811 static const unsigned FULL_MASK = 0x3FFF;
36814 static inline JSVersion
36815 VersionNumber(JSVersion version)
36817 return JSVersion(uint32_t(version) & VersionFlags::MASK);
36821 VersionHasAllowXML(JSVersion version)
36823 return !!(version & VersionFlags::ALLOW_XML);
36827 VersionHasMoarXML(JSVersion version)
36829 return !!(version & VersionFlags::MOAR_XML);
36834 VersionShouldParseXML(JSVersion version)
36836 return VersionHasMoarXML(version) || VersionNumber(version) >= JSVERSION_1_6;
36839 static inline JSVersion
36840 VersionExtractFlags(JSVersion version)
36842 return JSVersion(uint32_t(version) & ~VersionFlags::MASK);
36846 VersionCopyFlags(JSVersion *version, JSVersion from)
36848 *version = JSVersion(VersionNumber(*version) | VersionExtractFlags(from));
36852 VersionHasFlags(JSVersion version)
36854 return !!VersionExtractFlags(version);
36857 static inline unsigned
36858 VersionFlagsToOptions(JSVersion version)
36860 unsigned copts = (VersionHasAllowXML(version) ? ((uint32_t)1 << (6)) : 0) |
36861 (VersionHasMoarXML(version) ? ((uint32_t)1 << (7)) : 0);
36866 static inline JSVersion
36867 OptionFlagsToVersion(unsigned options, JSVersion version)
36869 uint32_t v = version;
36870 v &= ~(VersionFlags::ALLOW_XML | VersionFlags::MOAR_XML);
36871 if (OptionsHasAllowXML(options))
36872 v |= VersionFlags::ALLOW_XML;
36873 if (OptionsHasMoarXML(options))
36874 v |= VersionFlags::MOAR_XML;
36875 return JSVersion(v);
36879 VersionIsKnown(JSVersion version)
36881 return VersionNumber(version) != JSVERSION_UNKNOWN;
36884 typedef HashSet<JSObject *,
36885 DefaultHasher<JSObject *>,
36886 SystemAllocPolicy> BusyArraysSet;
36889 FreeOp::free_(void* p) {
36891 if (shouldFreeLater()) {
36892 runtime()->gcHelperThread.freeLater(p);
36896 runtime()->free_(p);
36901 struct JSContext : js::ContextFriendFields
36903 explicit JSContext(JSRuntime *rt);
36904 JSContext *thisDuringConstruction() { return this; }
36912 JSVersion defaultVersion;
36913 JSVersion versionOverride;
36914 bool hasVersionOverride;
36918 js::Value exception;
36921 unsigned runOptions;
36924 int32_t reportGranularity;
36927 JSLocaleCallbacks *localeCallbacks;
36929 js::AutoResolving *resolvingList;
36932 bool generatingError;
36935 JSCompartment *compartment;
36937 inline void setCompartment(JSCompartment *compartment);
36940 js::ContextStack stack;
36943 inline bool hasfp() const { return stack.hasfp(); }
36944 inline js::StackFrame* fp() const { return stack.fp(); }
36945 inline js::StackFrame* maybefp() const { return stack.maybefp(); }
36946 inline js::FrameRegs& regs() const { return stack.regs(); }
36947 inline js::FrameRegs* maybeRegs() const { return stack.maybeRegs(); }
36950 void resetCompartment();
36953 void wrapPendingException();
36957 js::ParseMapPool *parseMapPool_;
36961 JSObject *globalObject;
36964 JSSharpObjectMap sharpObjectMap;
36965 js::BusyArraysSet busyArrays;
36968 JSArgumentFormatMap *argumentFormatMap;
36974 JSErrorReporter errorReporter;
36977 JSOperationCallback operationCallback;
36983 inline js::RegExpStatics *regExpStatics();
36986 js::ParseMapPool &parseMapPool() {
36988 return *parseMapPool_;
36991 inline bool ensureParseMapPool();
36997 inline bool canSetDefaultVersion() const;
37000 inline void overrideVersion(JSVersion newVersion);
37003 void setDefaultVersion(JSVersion version) {
37004 defaultVersion = version;
37007 void clearVersionOverride() { hasVersionOverride = false; }
37008 JSVersion getDefaultVersion() const { return defaultVersion; }
37009 bool isVersionOverridden() const { return hasVersionOverride; }
37011 JSVersion getVersionOverride() const {
37013 return versionOverride;
37020 inline bool maybeOverrideVersion(JSVersion newVersion);
37026 void maybeMigrateVersionOverride() {
37028 if ((__builtin_expect((isVersionOverridden()), 0))) {
37029 defaultVersion = versionOverride;
37030 clearVersionOverride();
37033 # 1170 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
37034 inline JSVersion findVersion() const;
37036 void setRunOptions(unsigned ropts) {
37038 runOptions = ropts;
37042 inline void setCompileOptions(unsigned newcopts);
37044 unsigned getRunOptions() const { return runOptions; }
37045 inline unsigned getCompileOptions() const;
37046 inline unsigned allOptions() const;
37048 bool hasRunOption(unsigned ropt) const {
37050 return !!(runOptions & ropt);
37053 bool hasStrictOption() const { return hasRunOption(((uint32_t)1 << (0))); }
37054 bool hasWErrorOption() const { return hasRunOption(((uint32_t)1 << (1))); }
37055 bool hasAtLineOption() const { return hasRunOption(((uint32_t)1 << (5))); }
37057 js::LifoAlloc &tempLifoAlloc() { return runtime->tempLifoAlloc; }
37058 inline js::LifoAlloc &typeLifoAlloc();
37060 inline js::PropertyTree &propertyTree();
37063 unsigned outstandingRequests;
37069 unsigned resolveFlags;
37075 js::Value iterValue;
37078 bool methodJitEnabled;
37080 js::mjit::JaegerRuntime &jaegerRuntime() { return runtime->jaegerRuntime(); }
37083 bool inferenceEnabled;
37085 bool typeInferenceEnabled() { return inferenceEnabled; }
37088 void updateJITEnabled();
37089 # 1239 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
37090 DSTOffsetCache dstOffsetCache;
37093 JSObject *enumerators;
37102 js::Vector<JSGenerator *, 2, js::SystemAllocPolicy> genStack;
37106 JSGenerator *generatorFor(js::StackFrame *fp) const;
37109 inline bool ensureGeneratorStackSpace();
37111 bool enterGenerator(JSGenerator *gen) {
37112 return genStack.append(gen);
37115 void leaveGenerator(JSGenerator *gen) {
37117 genStack.popBack();
37120 inline void* malloc_(size_t bytes) {
37121 return runtime->malloc_(bytes, this);
37124 inline void* mallocNoReport(size_t bytes) {
37126 return runtime->malloc_(bytes, __null);
37129 inline void* calloc_(size_t bytes) {
37130 return runtime->calloc_(bytes, this);
37133 inline void* realloc_(void* p, size_t bytes) {
37134 return runtime->realloc_(p, bytes, this);
37137 inline void* realloc_(void* p, size_t oldBytes, size_t newBytes) {
37138 return runtime->realloc_(p, oldBytes, newBytes, this);
37141 inline void free_(void* p) {
37145 template <class T> inline T *new_() { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T () : __null; } template <class T, class P1> inline T *new_(P1 p1) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1) : __null; } template <class T, class P1, class P2> inline T *new_(P1 p1, P2 p2) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2) : __null; } template <class T, class P1, class P2, class P3> inline T *new_(P1 p1, P2 p2, P3 p3) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3) : __null; } template <class T, class P1, class P2, class P3, class P4> inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5> inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6> inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7> inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) : __null; } template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11, class P12> inline T *new_(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8, P9 p9, P10 p10, P11 p11, P12 p12) { void *memory = malloc_(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) : __null; } static const int JSMinAlignment = 8; template <class T> inline T *array_new(size_t n) { uint64_t numBytes64 = uint64_t(JSMinAlignment) + uint64_t(sizeof(T)) * uint64_t(n); size_t numBytes = size_t(numBytes64); if (numBytes64 != numBytes) { do { } while(0); return __null; } void *memory = malloc_(numBytes); if (!memory) return __null; *(size_t *)memory = n; memory = (void*)(uintptr_t(memory) + JSMinAlignment); return new(memory) T[n]; }
37146 template <class T> inline void delete_(T *p) { if (p) { p->~T(); free_(p); } } template <class T> inline void array_delete(T *p) { if (p) { void* p0 = (void *)(uintptr_t(p) - js::OffTheBooks::JSMinAlignment); size_t n = *(size_t *)p0; for (size_t i = 0; i < n; i++) (p + i)->~T(); free_(p0); } }
37151 inline void assertValidStackDepth(unsigned depth);
37153 bool isExceptionPending() {
37157 js::Value getPendingException() {
37162 void setPendingException(js::Value v);
37164 void clearPendingException() {
37165 this->throwing = false;
37166 this->exception.setUndefined();
37168 # 1337 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
37169 unsigned activeCompilations;
37175 bool runningWithTrustedPrincipals() const;
37177 __attribute__((visibility("default"))) size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf) const;
37179 static inline JSContext *fromLinkField(JSCList *link) {
37181 return reinterpret_cast<JSContext *>(uintptr_t(link) - __builtin_offsetof (JSContext, link));
37184 void mark(JSTracer *trc);
37193 __attribute__((visibility("default"))) void checkMallocGCPressure(void *p);
37198 class AutoAllowUnaliasedVarAccess
37202 AutoAllowUnaliasedVarAccess(JSContext *cx) : cx(cx) {
37207 ~AutoAllowUnaliasedVarAccess() {
37215 struct AutoResolving {
37222 AutoResolving(JSContext *cx, JSObject *obj, jsid id, Kind kind = LOOKUP
37224 : context(cx), object(obj), id(id), kind(kind), link(cx->resolvingList)
37228 cx->resolvingList = this;
37233 context->resolvingList = link;
37236 bool alreadyStarted() const {
37237 return link && alreadyStartedSlow();
37241 bool alreadyStartedSlow() const;
37243 JSContext *const context;
37244 JSObject *const object;
37247 AutoResolving *const link;
37252 class AutoXMLRooter : private AutoGCRooter {
37254 AutoXMLRooter(JSContext *cx, JSXML *xml
37256 : AutoGCRooter(cx, XML), xml(xml)
37262 friend void AutoGCRooter::trace(JSTracer *trc);
37271 #define JS_LOCK_GC(rt) PR_Lock((rt)->gcLock)
37272 #define JS_UNLOCK_GC(rt) PR_Unlock((rt)->gcLock)
37281 explicit AutoLockGC(JSRuntime *rt = __null
37289 PR_Lock((rt)->gcLock);
37297 PR_Unlock((runtime)->gcLock);
37301 bool locked() const {
37305 void lock(JSRuntime *rt) {
37309 PR_Lock((rt)->gcLock);
37313 JSRuntime *runtime;
37317 class AutoUnlockGC {
37323 explicit AutoUnlockGC(JSRuntime *rt
37328 PR_Unlock((rt)->gcLock);
37330 ~AutoUnlockGC() { PR_Lock((rt)->gcLock); }
37333 class AutoKeepAtoms {
37338 explicit AutoKeepAtoms(JSRuntime *rt
37343 (rt)->gcKeepAtoms++;;
37345 ~AutoKeepAtoms() { (rt)->gcKeepAtoms--;; }
37348 class AutoReleasePtr {
37353 AutoReleasePtr(const AutoReleasePtr &other) ;
37354 AutoReleasePtr operator=(const AutoReleasePtr &other) ;
37357 explicit AutoReleasePtr(JSContext *cx, void *ptr
37363 ~AutoReleasePtr() { cx->free_(ptr); }
37369 class AutoReleaseNullablePtr {
37374 AutoReleaseNullablePtr(const AutoReleaseNullablePtr &other) ;
37375 AutoReleaseNullablePtr operator=(const AutoReleaseNullablePtr &other) ;
37378 explicit AutoReleaseNullablePtr(JSContext *cx, void *ptr
37384 void reset(void *ptr2) {
37389 ~AutoReleaseNullablePtr() { if (ptr) cx->free_(ptr); }
37394 class JSAutoResolveFlags
37397 JSAutoResolveFlags(JSContext *cx, unsigned flags
37399 : mContext(cx), mSaved(cx->resolveFlags)
37402 cx->resolveFlags = flags;
37405 ~JSAutoResolveFlags() { mContext->resolveFlags = mSaved; }
37408 JSContext *mContext;
37418 class ContextIter {
37423 explicit ContextIter(JSRuntime *rt) {
37424 end = &rt->contextList;
37428 bool done() const {
37429 return begin == end;
37434 begin = begin->next;
37437 JSContext *get() const {
37439 return JSContext::fromLinkField(begin);
37442 operator JSContext *() const {
37446 JSContext *operator ->() const {
37456 NewContext(JSRuntime *rt, size_t stackChunkSize);
37458 enum DestroyContextMode {
37465 DestroyContext(JSContext *cx, DestroyContextMode mode);
37468 # 1653 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
37473 ReportUsageError(JSContext *cx, JSObject *callee, const char *msg);
37478 js_ReportOutOfMemory(JSContext *cx);
37480 extern __attribute__((visibility("default"))) void
37481 js_ReportAllocationOverflow(JSContext *cx);
37487 extern __attribute__((visibility("default"))) void
37488 js_ReportErrorAgain(JSContext *cx, const char *message, JSErrorReport *report);
37491 js_ReportIsNotDefined(JSContext *cx, const char *name);
37497 js_ReportIsNullOrUndefined(JSContext *cx, int spindex, const js::Value &v,
37498 JSString *fallback);
37501 js_ReportMissingArg(JSContext *cx, const js::Value &v, unsigned arg);
37509 js_ReportValueErrorFlags(JSContext *cx, unsigned flags, const unsigned errorNumber,
37510 int spindex, const js::Value &v, JSString *fallback,
37511 const char *arg1, const char *arg2);
37513 #define js_ReportValueError(cx,errorNumber,spindex,v,fallback) ((void)js_ReportValueErrorFlags(cx, JSREPORT_ERROR, errorNumber, spindex, v, fallback, NULL, NULL))
37517 #define js_ReportValueError2(cx,errorNumber,spindex,v,fallback,arg1) ((void)js_ReportValueErrorFlags(cx, JSREPORT_ERROR, errorNumber, spindex, v, fallback, arg1, NULL))
37521 #define js_ReportValueError3(cx,errorNumber,spindex,v,fallback,arg1,arg2) ((void)js_ReportValueErrorFlags(cx, JSREPORT_ERROR, errorNumber, spindex, v, fallback, arg1, arg2))
37525 extern JSErrorFormatString js_ErrorFormatString[JSErr_Limit];
37528 #define JS_ASSERT_REQUEST_DEPTH(cx) JS_ASSERT((cx)->runtime->requestDepth >= 1)
37529 # 1721 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
37531 js_InvokeOperationCallback(JSContext *cx);
37534 js_HandleExecutionInterrupt(JSContext *cx);
37537 js_GetCurrentBytecodePC(JSContext* cx);
37540 js_GetCurrentScript(JSContext* cx);
37547 static __attribute__((always_inline)) inline bool
37548 JS_CHECK_OPERATION_LIMIT(JSContext *cx)
37551 return !cx->runtime->interrupt || js_InvokeOperationCallback(cx);
37558 void ExpandInlineFrames(JSCompartment *compartment);
37565 enum FrameExpandKind {
37566 FRAME_EXPAND_NONE = 0,
37567 FRAME_EXPAND_ALL = 1
37574 static __attribute__((always_inline)) inline void
37575 MakeRangeGCSafe(Value *vec, size_t len)
37580 static __attribute__((always_inline)) inline void
37581 MakeRangeGCSafe(Value *beg, Value *end)
37583 PodZero(beg, end - beg);
37586 static __attribute__((always_inline)) inline void
37587 MakeRangeGCSafe(jsid *beg, jsid *end)
37589 for (jsid *id = beg; id != end; ++id)
37590 *id = INT_TO_JSID(0);
37593 static __attribute__((always_inline)) inline void
37594 MakeRangeGCSafe(jsid *vec, size_t len)
37596 MakeRangeGCSafe(vec, vec + len);
37599 static __attribute__((always_inline)) inline void
37600 MakeRangeGCSafe(const Shape **beg, const Shape **end)
37602 PodZero(beg, end - beg);
37605 static __attribute__((always_inline)) inline void
37606 MakeRangeGCSafe(const Shape **vec, size_t len)
37611 static __attribute__((always_inline)) inline void
37612 SetValueRangeToUndefined(Value *beg, Value *end)
37614 for (Value *v = beg; v != end; ++v)
37618 static __attribute__((always_inline)) inline void
37619 SetValueRangeToUndefined(Value *vec, size_t len)
37621 SetValueRangeToUndefined(vec, vec + len);
37624 static __attribute__((always_inline)) inline void
37625 SetValueRangeToNull(Value *beg, Value *end)
37627 for (Value *v = beg; v != end; ++v)
37631 static __attribute__((always_inline)) inline void
37632 SetValueRangeToNull(Value *vec, size_t len)
37634 SetValueRangeToNull(vec, vec + len);
37637 class AutoObjectVector : public AutoVectorRooter<JSObject *>
37640 explicit AutoObjectVector(JSContext *cx
37642 : AutoVectorRooter<JSObject *>(cx, OBJVECTOR)
37650 class AutoShapeVector : public AutoVectorRooter<const Shape *>
37653 explicit AutoShapeVector(JSContext *cx
37655 : AutoVectorRooter<const Shape *>(cx, SHAPEVECTOR)
37663 class AutoValueArray : public AutoGCRooter
37670 AutoValueArray(JSContext *cx, js::Value *start, unsigned length
37672 : AutoGCRooter(cx, VALARRAY), start_(start), length_(length), skip(cx, start, length)
37677 Value *start() { return start_; }
37678 unsigned length() const { return length_; }
37682 # 1885 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h"
37683 class RuntimeAllocPolicy
37685 JSRuntime *const runtime;
37688 RuntimeAllocPolicy(JSRuntime *rt) : runtime(rt) {}
37689 RuntimeAllocPolicy(JSContext *cx) : runtime(cx->runtime) {}
37690 void *malloc_(size_t bytes) { return runtime->malloc_(bytes); }
37691 void *realloc_(void *p, size_t bytes) { return runtime->realloc_(p, bytes); }
37692 void free_(void *p) { runtime->free_(p); }
37693 void reportAllocOverflow() const {}
37699 class ContextAllocPolicy
37701 JSContext *const cx;
37704 ContextAllocPolicy(JSContext *cx) : cx(cx) {}
37705 JSContext *context() const { return cx; }
37706 void *malloc_(size_t bytes) { return cx->malloc_(bytes); }
37707 void *realloc_(void *p, size_t oldBytes, size_t bytes) { return cx->realloc_(p, oldBytes, bytes); }
37708 void free_(void *p) { cx->free_(p); }
37709 void reportAllocOverflow() const { js_ReportAllocationOverflow(cx); }
37713 # 13 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsarray.h" 2
37720 const unsigned MIN_SPARSE_INDEX = 256;
37724 const uint32_t MAX_ARRAY_INDEX = 4294967294u;
37728 js_IdIsIndex(jsid id, uint32_t *indexp)
37730 if (JSID_IS_INT(id)) {
37731 int32_t i = JSID_TO_INT(id);
37734 *indexp = (uint32_t)i;
37738 if ((__builtin_expect((!JSID_IS_STRING(id)), 0)))
37741 return js::StringIsArrayIndex(JSID_TO_ATOM(id), indexp);
37745 js_InitArrayClass(JSContext *cx, JSObject *obj);
37748 js_InitContextBusyArrayTable(JSContext *cx);
37754 NewDenseEmptyArray(JSContext *cx, JSObject *proto=__null);
37758 NewDenseAllocatedArray(JSContext *cx, uint32_t length, JSObject *proto=__null);
37766 NewDenseAllocatedEmptyArray(JSContext *cx, uint32_t length, JSObject *proto=__null);
37773 NewDenseUnallocatedArray(JSContext *cx, uint32_t length, JSObject *proto=__null);
37777 NewDenseCopiedArray(JSContext *cx, uint32_t length, const Value *vp, JSObject *proto = __null);
37781 NewSlowEmptyArray(JSContext *cx);
37786 js_GetLengthProperty(JSContext *cx, JSObject *obj, uint32_t *lengthp);
37789 js_SetLengthProperty(JSContext *cx, JSObject *obj, double length);
37794 array_defineElement(JSContext *cx, HandleObject obj, uint32_t index, const Value *value,
37795 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
37798 array_deleteElement(JSContext *cx, HandleObject obj, uint32_t index, Value *rval, JSBool strict);
37807 GetElements(JSContext *cx, HandleObject aobj, uint32_t length, js::Value *vp);
37812 array_sort(JSContext *cx, unsigned argc, js::Value *vp);
37815 array_push(JSContext *cx, unsigned argc, js::Value *vp);
37818 array_pop(JSContext *cx, unsigned argc, js::Value *vp);
37821 array_concat(JSContext *cx, unsigned argc, js::Value *vp);
37824 array_shift(JSContext *cx, unsigned argc, js::Value *vp);
37827 # 139 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsarray.h"
37829 js_NewbornArrayPush(JSContext *cx, js::HandleObject obj, const js::Value &v);
37832 js_PrototypeHasIndexedProperties(JSContext *cx, JSObject *obj);
37838 js_GetDenseArrayElementValue(JSContext *cx, JSObject *obj, jsid id,
37843 js_Array(JSContext *cx, unsigned argc, js::Value *vp);
37844 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
37845 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsbool.h" 1
37853 #define jsbool_h___
37862 js_InitBooleanClass(JSContext *cx, JSObject *obj);
37865 js_BooleanToString(JSContext *cx, JSBool b);
37870 BooleanGetPrimitiveValue(JSContext *cx, JSObject &obj, Value *vp);
37875 js_ValueToBoolean(const js::Value &v);
37876 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
37878 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfun.h" 1
37879 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
37880 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsiter.h" 1
37881 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsiter.h"
37882 #define jsiter_h___
37890 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h" 1
37891 # 42 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
37892 #define JS_VERSION_ECMA_3 148
37893 #define JS_VERSION_ECMA_3_TEST 149
37894 # 124 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
37895 #define JS_HAS_STR_HTML_HELPERS 1
37896 #define JS_HAS_OBJ_PROTO_PROP 1
37897 #define JS_HAS_OBJ_WATCHPOINT 1
37898 #define JS_HAS_TOSOURCE 1
37899 #define JS_HAS_CATCH_GUARD 1
37900 #define JS_HAS_UNEVAL 1
37901 #define JS_HAS_CONST 1
37902 #define JS_HAS_FUN_EXPR_STMT 1
37903 #define JS_HAS_NO_SUCH_METHOD 1
37904 #define JS_HAS_GENERATORS 1
37905 #define JS_HAS_BLOCK_SCOPE 1
37906 #define JS_HAS_DESTRUCTURING 2
37907 #define JS_HAS_GENERATOR_EXPRS 1
37908 #define JS_HAS_EXPR_CLOSURES 1
37909 # 146 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsversion.h"
37910 #define JS_HAS_NEW_GLOBAL_OBJECT 1
37913 #define JS_HAS_MAKE_SYSTEM_OBJECT 1
37916 #define JS_HAS_DESTRUCTURING_SHORTHAND (JS_HAS_DESTRUCTURING == 2)
37922 #define OLD_GETTER_SETTER_METHODS 1
37925 #define USE_NEW_OBJECT_REPRESENTATION 0
37930 #define NEW_OBJECT_REPRESENTATION_ONLY() MOZ_NOT_REACHED("don't call this! to be used in the new object representation")
37931 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsiter.h" 2
37932 # 26 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsiter.h"
37933 #define JSITER_ACTIVE 0x1000
37934 #define JSITER_UNREUSABLE 0x2000
37938 struct NativeIterator {
37940 HeapPtr<JSFlatString> *props_array;
37941 HeapPtr<JSFlatString> *props_cursor;
37942 HeapPtr<JSFlatString> *props_end;
37943 const Shape **shapes_array;
37944 uint32_t shapes_length;
37945 uint32_t shapes_key;
37949 bool isKeyIter() const { return (flags & 0x2) == 0; }
37951 inline HeapPtr<JSFlatString> *begin() const {
37952 return props_array;
37955 inline HeapPtr<JSFlatString> *end() const {
37959 size_t numKeys() const {
37960 return end() - begin();
37963 HeapPtr<JSFlatString> *current() const {
37965 return props_cursor;
37969 props_cursor = props_cursor + 1;
37972 static NativeIterator *allocateIterator(JSContext *cx, uint32_t slength,
37973 const js::AutoIdVector &props);
37974 void init(JSObject *obj, unsigned flags, uint32_t slength, uint32_t key);
37976 void mark(JSTracer *trc);
37979 class ElementIteratorObject : public JSObject {
37987 static JSObject *create(JSContext *cx, HandleObject target);
37989 inline uint32_t getIndex() const;
37990 inline void setIndex(uint32_t index);
37991 inline JSObject *getTargetObject() const;
37992 # 130 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsiter.h"
37993 bool iteratorNext(JSContext *cx, Value *vp);
37997 VectorToIdArray(JSContext *cx, AutoIdVector &props, JSIdArray **idap);
38000 GetIterator(JSContext *cx, HandleObject obj, unsigned flags, Value *vp);
38003 VectorToKeyIterator(JSContext *cx, HandleObject obj, unsigned flags, AutoIdVector &props, Value *vp);
38006 VectorToValueIterator(JSContext *cx, HandleObject obj, unsigned flags, AutoIdVector &props, Value *vp);
38013 EnumeratedIdVectorToIterator(JSContext *cx, HandleObject obj, unsigned flags, AutoIdVector &props, Value *vp);
38022 ValueToIterator(JSContext *cx, unsigned flags, Value *vp);
38025 CloseIterator(JSContext *cx, JSObject *iterObj);
38028 UnwindIteratorForException(JSContext *cx, JSObject *obj);
38031 UnwindIteratorForUncatchableException(JSContext *cx, JSObject *obj);
38036 js_SuppressDeletedProperty(JSContext *cx, js::HandleObject obj, jsid id);
38039 js_SuppressDeletedElement(JSContext *cx, js::HandleObject obj, uint32_t index);
38042 js_SuppressDeletedElements(JSContext *cx, js::HandleObject obj, uint32_t begin, uint32_t end);
38050 js_IteratorMore(JSContext *cx, js::HandleObject iterobj, js::Value *rval);
38053 js_IteratorNext(JSContext *cx, JSObject *iterobj, js::Value *rval);
38056 js_ThrowStopIteration(JSContext *cx);
38067 Next(JSContext *cx, HandleObject iter, Value *vp)
38069 if (!js_IteratorMore(cx, iter, vp))
38071 if (vp->toBoolean())
38072 return js_IteratorNext(cx, iter, vp);
38073 vp->setMagic(JS_NO_ITER_VALUE);
38076 # 226 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsiter.h"
38077 template <class Op>
38079 ForOf(JSContext *cx, const Value &iterable, Op op)
38081 Value iterv(iterable);
38082 if (!ValueToIterator(cx, 0x20, &iterv))
38084 RootedObject iter(cx, &iterv.toObject());
38089 ok = Next(cx, iter, &v);
38091 if (v.isMagic(JS_NO_ITER_VALUE))
38097 bool throwing = !ok && cx->isExceptionPending();
38100 exc = cx->getPendingException();
38101 cx->clearPendingException();
38103 bool closedOK = CloseIterator(cx, iter);
38104 if (throwing && closedOK)
38105 cx->setPendingException(exc);
38106 return ok && closedOK;
38116 typedef enum JSGeneratorState {
38122 } JSGeneratorState;
38124 struct JSGenerator {
38125 js::HeapPtrObject obj;
38126 JSGeneratorState state;
38127 js::FrameRegs regs;
38128 JSObject *enumerators;
38129 js::StackFrame *floating;
38130 js::HeapValue floatingStack[1];
38132 js::StackFrame *floatingFrame() {
38136 js::StackFrame *liveFrame() {
38144 js_NewGenerator(JSContext *cx);
38145 # 306 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsiter.h"
38146 inline js::StackFrame *
38147 js_FloatingFrameIfGenerator(JSContext *cx, js::StackFrame *fp)
38149 if ((__builtin_expect((fp->isGeneratorFrame()), 0)))
38150 return cx->generatorFor(fp)->floatingFrame();
38155 extern JSGenerator *
38156 js_FloatingFrameToGenerator(js::StackFrame *fp);
38158 inline js::StackFrame *
38159 js_LiveFrameIfGenerator(js::StackFrame *fp)
38161 return fp->isGeneratorFrame() ? js_FloatingFrameToGenerator(fp)->liveFrame() : fp;
38167 js_InitIteratorClasses(JSContext *cx, JSObject *obj);
38168 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
38170 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsnum.h" 1
38186 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumericConversions.h" 1
38187 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsnum.h" 2
38189 extern double js_NaN;
38190 extern double js_PositiveInfinity;
38191 extern double js_NegativeInfinity;
38196 InitRuntimeNumberState(JSRuntime *rt);
38199 FinishRuntimeNumberState(JSRuntime *rt);
38205 js_InitNumberClass(JSContext *cx, JSObject *obj);
38210 extern const char js_isNaN_str[];
38211 extern const char js_isFinite_str[];
38212 extern const char js_parseFloat_str[];
38213 extern const char js_parseInt_str[];
38216 class JSFixedString;
38224 js_NumberToString(JSContext *cx, double d);
38228 extern JSFixedString *
38229 Int32ToString(JSContext *cx, int32_t i);
38236 NumberValueToStringBuffer(JSContext *cx, const Value &v, StringBuffer &sb);
38239 extern JSFixedString *
38240 NumberToString(JSContext *cx, double d);
38242 extern JSFixedString *
38243 IndexToString(JSContext *cx, uint32_t index);
38250 struct ToCStringBuf
38257 static const size_t sbufSize = 34;
38258 char sbuf[sbufSize];
38272 NumberToCString(JSContext *cx, ToCStringBuf *cbuf, double d, int base = 10);
38278 const double DOUBLE_INTEGRAL_PRECISION_LIMIT = uint64_t(1) << 53;
38279 # 121 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsnum.h"
38281 GetPrefixInteger(JSContext *cx, const jschar *start, const jschar *end, int base,
38282 const jschar **endp, double *dp);
38285 __attribute__((always_inline)) inline bool
38286 ToNumber(JSContext *cx, Value *vp)
38288 if (vp->isNumber())
38291 extern bool ToNumberSlow(JSContext *cx, js::Value v, double *dp);
38292 if (!ToNumberSlow(cx, *vp, &d))
38304 __attribute__((always_inline)) inline bool
38305 ToUint32(JSContext *cx, const js::Value &v, uint32_t *out)
38308 *out = (uint32_t)v.toInt32();
38311 extern bool ToUint32Slow(JSContext *cx, const js::Value &v, uint32_t *ip);
38312 return ToUint32Slow(cx, v, out);
38320 __attribute__((always_inline)) inline bool
38321 ValueToUint16(JSContext *cx, const js::Value &v, uint16_t *out)
38324 *out = uint16_t(v.toInt32());
38327 extern bool ValueToUint16Slow(JSContext *cx, const js::Value &v, uint16_t *out);
38328 return ValueToUint16Slow(cx, v, out);
38332 num_parseInt(JSContext *cx, unsigned argc, Value *vp);
38335 # 187 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsnum.h"
38337 js_strtod(JSContext *cx, const jschar *s, const jschar *send,
38338 const jschar **ep, double *dp);
38341 js_num_valueOf(JSContext *cx, unsigned argc, js::Value *vp);
38345 static __attribute__((always_inline)) inline bool
38346 ValueFitsInInt32(const Value &v, int32_t *pi)
38352 return v.isDouble() && MOZ_DOUBLE_IS_INT32(v.toDouble(), pi);
38354 # 215 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsnum.h"
38355 static __attribute__((always_inline)) inline bool
38356 IsDefinitelyIndex(const Value &v, uint32_t *indexp)
38358 if (v.isInt32() && v.toInt32() >= 0) {
38359 *indexp = v.toInt32();
38364 if (v.isDouble() && MOZ_DOUBLE_IS_INT32(v.toDouble(), &i) && i >= 0) {
38365 *indexp = uint32_t(i);
38374 ToInteger(JSContext *cx, const js::Value &v, double *dp)
38380 if (v.isDouble()) {
38381 *dp = v.toDouble();
38383 extern bool ToNumberSlow(JSContext *cx, Value v, double *dp);
38384 if (!ToNumberSlow(cx, v, dp))
38387 *dp = ToInteger(*dp);
38392 # 21 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
38394 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h" 1
38395 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
38396 #define _JSPROBES_H
38397 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
38398 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h" 1
38399 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
38400 #define jsjaeger_h__
38403 #define JSGC_INCREMENTAL_MJ
38406 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxt.h" 1
38407 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h" 2
38408 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscompartment.h" 1
38415 #define jscompartment_h___
38416 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscompartment.h"
38417 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h" 1
38418 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h"
38419 #define GlobalObject_h___
38423 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsarray.h" 1
38424 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h" 2
38425 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsbool.h" 1
38426 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h" 2
38427 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsexn.h" 1
38428 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsexn.h"
38437 js_InitExceptionClasses(JSContext *cx, JSObject *obj);
38438 # 30 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsexn.h"
38440 js_ErrorToException(JSContext *cx, const char *message, JSErrorReport *reportp,
38441 JSErrorCallback callback, void *userRef);
38442 # 50 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsexn.h"
38444 js_ReportUncaughtException(JSContext *cx);
38446 extern JSErrorReport *
38447 js_ErrorFromException(JSContext *cx, jsval exn);
38449 extern const JSErrorFormatString *
38450 js_GetLocalizedErrorMessage(JSContext* cx, void *userRef, const char *locale,
38451 const unsigned errorNumber);
38452 # 68 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsexn.h"
38454 js_CopyErrorObject(JSContext *cx, js::HandleObject errobj, js::HandleObject scope);
38456 static inline JSProtoKey
38457 GetExceptionProtoKey(int exn)
38461 return JSProtoKey(JSProto_Error + exn);
38463 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h" 2
38465 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsiter.h" 1
38466 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h" 2
38467 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsnum.h" 1
38468 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h" 2
38472 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/builtin/RegExp.h" 1
38473 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/builtin/RegExp.h"
38474 #define RegExp_h___
38476 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprvtd.h" 1
38477 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/builtin/RegExp.h" 2
38480 js_InitRegExpClass(JSContext *cx, JSObject *obj);
38495 ExecuteRegExp(JSContext *cx, RegExpStatics *res, RegExpObject &reobj,
38496 JSLinearString *input, const jschar *chars, size_t length,
38497 size_t *lastIndex, RegExpExecType type, Value *rval);
38500 ExecuteRegExp(JSContext *cx, RegExpStatics *res, RegExpShared &shared,
38501 JSLinearString *input, const jschar *chars, size_t length,
38502 size_t *lastIndex, RegExpExecType type, Value *rval);
38505 regexp_exec(JSContext *cx, unsigned argc, Value *vp);
38508 regexp_test(JSContext *cx, unsigned argc, Value *vp);
38511 # 23 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h" 2
38514 js_InitObjectClass(JSContext *cx, JSObject *obj);
38517 js_InitFunctionClass(JSContext *cx, JSObject *obj);
38520 js_InitTypedArrayClasses(JSContext *cx, JSObject *obj);
38525 # 64 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h"
38526 class GlobalObject : public JSObject
38532 static const unsigned STANDARD_CLASS_SLOTS = JSProto_LIMIT * 3;
38535 static const unsigned THROWTYPEERROR = STANDARD_CLASS_SLOTS;
38536 static const unsigned GENERATOR_PROTO = THROWTYPEERROR + 1;
38537 static const unsigned REGEXP_STATICS = GENERATOR_PROTO + 1;
38538 static const unsigned FUNCTION_NS = REGEXP_STATICS + 1;
38539 static const unsigned RUNTIME_CODEGEN_ENABLED = FUNCTION_NS + 1;
38540 static const unsigned EVAL = RUNTIME_CODEGEN_ENABLED + 1;
38541 static const unsigned FLAGS = EVAL + 1;
38542 static const unsigned DEBUGGERS = FLAGS + 1;
38545 static const unsigned RESERVED_SLOTS = DEBUGGERS + 1;
38547 void staticAsserts() {
38553 typedef int moz_static_assert102[((JSProto_LIMIT * 3 + 8) == RESERVED_SLOTS) ? 1 : -1];
38556 static const int32_t FLAGS_CLEARED = 0x1;
38558 inline void setFlags(int32_t flags);
38559 inline void initFlags(int32_t flags);
38562 ::js_InitObjectClass(JSContext *cx, JSObject *obj);
38564 ::js_InitFunctionClass(JSContext *cx, JSObject *obj);
38568 initFunctionAndObjectClasses(JSContext *cx);
38570 inline void setDetailsForKey(JSProtoKey key, JSObject *ctor, JSObject *proto);
38571 inline void setObjectClassDetails(JSFunction *ctor, JSObject *proto);
38572 inline void setFunctionClassDetails(JSFunction *ctor, JSObject *proto);
38574 inline void setThrowTypeError(JSFunction *fun);
38576 inline void setOriginalEval(JSObject *evalobj);
38578 Value getConstructor(JSProtoKey key) const {
38580 return getSlot(key);
38583 Value getPrototype(JSProtoKey key) const {
38585 return getSlot(JSProto_LIMIT + key);
38588 bool classIsInitialized(JSProtoKey key) const {
38589 bool inited = !getConstructor(key).isUndefined();
38594 bool functionObjectClassesInitialized() const {
38595 bool inited = classIsInitialized(JSProto_Function);
38600 bool arrayClassInitialized() const {
38601 return classIsInitialized(JSProto_Array);
38604 bool booleanClassInitialized() const {
38605 return classIsInitialized(JSProto_Boolean);
38607 bool numberClassInitialized() const {
38608 return classIsInitialized(JSProto_Number);
38610 bool stringClassInitialized() const {
38611 return classIsInitialized(JSProto_String);
38613 bool regexpClassInitialized() const {
38614 return classIsInitialized(JSProto_RegExp);
38616 bool arrayBufferClassInitialized() const {
38617 return classIsInitialized(JSProto_ArrayBuffer);
38619 bool errorClassesInitialized() const {
38620 return classIsInitialized(JSProto_Error);
38624 static GlobalObject *create(JSContext *cx, Class *clasp);
38631 createConstructor(JSContext *cx, JSNative ctor, JSAtom *name, unsigned length,
38632 gc::AllocKind kind = JSFunction::FinalizeKind);
38633 # 180 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h"
38634 JSObject *createBlankPrototype(JSContext *cx, js::Class *clasp);
38640 JSObject *createBlankPrototypeInheriting(JSContext *cx, js::Class *clasp, JSObject &proto);
38642 JSObject *getOrCreateObjectPrototype(JSContext *cx) {
38643 if (functionObjectClassesInitialized())
38644 return &getPrototype(JSProto_Object).toObject();
38645 Rooted<GlobalObject*> self(cx, this);
38646 if (!initFunctionAndObjectClasses(cx))
38648 return &self->getPrototype(JSProto_Object).toObject();
38651 JSObject *getOrCreateFunctionPrototype(JSContext *cx) {
38652 if (functionObjectClassesInitialized())
38653 return &getPrototype(JSProto_Function).toObject();
38654 Rooted<GlobalObject*> self(cx, this);
38655 if (!initFunctionAndObjectClasses(cx))
38657 return &self->getPrototype(JSProto_Function).toObject();
38660 JSObject *getOrCreateArrayPrototype(JSContext *cx) {
38661 if (arrayClassInitialized())
38662 return &getPrototype(JSProto_Array).toObject();
38663 Rooted<GlobalObject*> self(cx, this);
38664 if (!js_InitArrayClass(cx, this))
38666 return &self->getPrototype(JSProto_Array).toObject();
38669 JSObject *getOrCreateBooleanPrototype(JSContext *cx) {
38670 if (booleanClassInitialized())
38671 return &getPrototype(JSProto_Boolean).toObject();
38672 Rooted<GlobalObject*> self(cx, this);
38673 if (!js_InitBooleanClass(cx, this))
38675 return &self->getPrototype(JSProto_Boolean).toObject();
38678 JSObject *getOrCreateNumberPrototype(JSContext *cx) {
38679 if (numberClassInitialized())
38680 return &getPrototype(JSProto_Number).toObject();
38681 Rooted<GlobalObject*> self(cx, this);
38682 if (!js_InitNumberClass(cx, this))
38684 return &self->getPrototype(JSProto_Number).toObject();
38687 JSObject *getOrCreateStringPrototype(JSContext *cx) {
38688 if (stringClassInitialized())
38689 return &getPrototype(JSProto_String).toObject();
38690 Rooted<GlobalObject*> self(cx, this);
38691 if (!js_InitStringClass(cx, this))
38693 return &self->getPrototype(JSProto_String).toObject();
38696 JSObject *getOrCreateRegExpPrototype(JSContext *cx) {
38697 if (regexpClassInitialized())
38698 return &getPrototype(JSProto_RegExp).toObject();
38699 Rooted<GlobalObject*> self(cx, this);
38700 if (!js_InitRegExpClass(cx, this))
38702 return &self->getPrototype(JSProto_RegExp).toObject();
38705 JSObject *getOrCreateArrayBufferPrototype(JSContext *cx) {
38706 if (arrayBufferClassInitialized())
38707 return &getPrototype(JSProto_ArrayBuffer).toObject();
38708 Rooted<GlobalObject*> self(cx, this);
38709 if (!js_InitTypedArrayClasses(cx, this))
38711 return &self->getPrototype(JSProto_ArrayBuffer).toObject();
38714 JSObject *getOrCreateCustomErrorPrototype(JSContext *cx, int exnType) {
38715 JSProtoKey key = GetExceptionProtoKey(exnType);
38716 if (errorClassesInitialized())
38717 return &getPrototype(key).toObject();
38718 Rooted<GlobalObject*> self(cx, this);
38719 if (!js_InitExceptionClasses(cx, this))
38721 return &self->getPrototype(key).toObject();
38724 JSObject *getOrCreateGeneratorPrototype(JSContext *cx) {
38725 Value v = getSlotRef(GENERATOR_PROTO);
38727 return &v.toObject();
38728 Rooted<GlobalObject*> self(cx, this);
38729 if (!js_InitIteratorClasses(cx, this))
38731 return &self->getSlot(GENERATOR_PROTO).toObject();
38734 inline RegExpStatics *getRegExpStatics() const;
38736 JSObject *getThrowTypeError() const {
38738 return &getSlot(THROWTYPEERROR).toObject();
38741 void clear(JSContext *cx);
38743 bool isCleared() const {
38744 return getSlot(FLAGS).toInt32() & FLAGS_CLEARED;
38747 bool isRuntimeCodeGenEnabled(JSContext *cx);
38749 const Value &getOriginalEval() const {
38751 return getSlot(EVAL);
38754 bool getFunctionNamespace(JSContext *cx, Value *vp);
38756 static bool initGeneratorClass(JSContext *cx, Handle<GlobalObject*> global);
38757 static bool initStandardClasses(JSContext *cx, Handle<GlobalObject*> global);
38759 typedef js::Vector<js::Debugger *, 0, js::SystemAllocPolicy> DebuggerVector;
38765 DebuggerVector *getDebuggers();
38771 static DebuggerVector *getOrCreateDebuggers(JSContext *cx, Handle<GlobalObject*> global);
38773 static bool addDebugger(JSContext *cx, Handle<GlobalObject*> global, Debugger *dbg);
38782 LinkConstructorAndPrototype(JSContext *cx, JSObject *ctor, JSObject *proto);
38789 DefinePropertiesAndBrand(JSContext *cx, JSObject *obj, JSPropertySpec *ps, JSFunctionSpec *fs);
38791 typedef HashSet<GlobalObject *, DefaultHasher<GlobalObject *>, SystemAllocPolicy> GlobalObjectSet;
38796 JSObject::isGlobal() const
38798 return !!(js::GetObjectClass(this)->flags & (1<<((8 + 8)+2)));
38802 JSObject::asGlobal()
38805 return *static_cast<js::GlobalObject *>(this);
38807 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscompartment.h" 2
38808 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h" 1
38809 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h"
38810 #define RegExpObject_h__
38814 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
38815 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h" 2
38817 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobj.h" 1
38818 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h" 2
38822 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/Yarr.h" 1
38823 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/Yarr.h"
38826 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/limits.h" 1 3 4
38827 # 30 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/limits.h" 3 4
38828 #define _GCC_LIMITS_H_
38832 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/syslimits.h" 1 3 4
38838 #define _GCC_NEXT_LIMITS_H
38839 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/limits.h" 1 3 4
38840 # 169 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/limits.h" 3 4
38841 # 1 "/usr/include/limits.h" 1 3 4
38842 # 25 "/usr/include/limits.h" 3 4
38843 #define _LIBC_LIMITS_H_ 1
38851 #define MB_LEN_MAX 16
38852 # 133 "/usr/include/limits.h" 3 4
38853 #define LLONG_MIN (-LLONG_MAX-1)
38856 #define LLONG_MAX __LONG_LONG_MAX__
38859 #define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
38865 # 1 "/usr/include/bits/posix1_lim.h" 1 3 4
38866 # 26 "/usr/include/bits/posix1_lim.h" 3 4
38867 #define _BITS_POSIX1_LIM_H 1
38873 #define _POSIX_AIO_LISTIO_MAX 2
38876 #define _POSIX_AIO_MAX 1
38879 #define _POSIX_ARG_MAX 4096
38883 #define _POSIX_CHILD_MAX 25
38889 #define _POSIX_DELAYTIMER_MAX 32
38893 #define _POSIX_HOST_NAME_MAX 255
38896 #define _POSIX_LINK_MAX 8
38899 #define _POSIX_LOGIN_NAME_MAX 9
38902 #define _POSIX_MAX_CANON 255
38906 #define _POSIX_MAX_INPUT 255
38909 #define _POSIX_MQ_OPEN_MAX 8
38912 #define _POSIX_MQ_PRIO_MAX 32
38915 #define _POSIX_NAME_MAX 14
38919 #define _POSIX_NGROUPS_MAX 8
38926 #define _POSIX_OPEN_MAX 20
38934 #define _POSIX_FD_SETSIZE _POSIX_OPEN_MAX
38938 #define _POSIX_PATH_MAX 256
38941 #define _POSIX_PIPE_BUF 512
38945 #define _POSIX_RE_DUP_MAX 255
38948 #define _POSIX_RTSIG_MAX 8
38951 #define _POSIX_SEM_NSEMS_MAX 256
38954 #define _POSIX_SEM_VALUE_MAX 32767
38957 #define _POSIX_SIGQUEUE_MAX 32
38960 #define _POSIX_SSIZE_MAX 32767
38963 #define _POSIX_STREAM_MAX 8
38966 #define _POSIX_SYMLINK_MAX 255
38970 #define _POSIX_SYMLOOP_MAX 8
38973 #define _POSIX_TIMER_MAX 32
38976 #define _POSIX_TTY_NAME_MAX 9
38979 #define _POSIX_TZNAME_MAX 6
38983 #define _POSIX_QLIMIT 1
38987 #define _POSIX_HIWAT _POSIX_PIPE_BUF
38990 #define _POSIX_UIO_MAXIOV 16
38994 #define _POSIX_CLOCKRES_MIN 20000000
38998 # 1 "/usr/include/bits/local_lim.h" 1 3 4
38999 # 26 "/usr/include/bits/local_lim.h" 3 4
39000 #define __undef_NR_OPEN
39003 #define __undef_LINK_MAX
39006 #define __undef_OPEN_MAX
39009 #define __undef_ARG_MAX
39013 # 1 "/usr/include/linux/limits.h" 1 3 4
39015 #define _LINUX_LIMITS_H
39017 #define NR_OPEN 1024
39019 #define NGROUPS_MAX 65536
39020 #define ARG_MAX 131072
39021 #define LINK_MAX 127
39022 #define MAX_CANON 255
39023 #define MAX_INPUT 255
39024 #define NAME_MAX 255
39025 #define PATH_MAX 4096
39026 #define PIPE_BUF 4096
39027 #define XATTR_NAME_MAX 255
39028 #define XATTR_SIZE_MAX 65536
39029 #define XATTR_LIST_MAX 65536
39031 #define RTSIG_MAX 32
39032 # 40 "/usr/include/bits/local_lim.h" 2 3 4
39037 #undef __undef_NR_OPEN
39042 #undef __undef_LINK_MAX
39047 #undef __undef_OPEN_MAX
39052 #undef __undef_ARG_MAX
39056 #define _POSIX_THREAD_KEYS_MAX 128
39058 #define PTHREAD_KEYS_MAX 1024
39061 #define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
39063 #define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
39066 #define _POSIX_THREAD_THREADS_MAX 64
39068 #undef PTHREAD_THREADS_MAX
39072 #define AIO_PRIO_DELTA_MAX 20
39075 #define PTHREAD_STACK_MIN 16384
39078 #define DELAYTIMER_MAX 2147483647
39081 #define TTY_NAME_MAX 32
39084 #define LOGIN_NAME_MAX 256
39087 #define HOST_NAME_MAX 64
39090 #define MQ_PRIO_MAX 32768
39093 #define SEM_VALUE_MAX (2147483647)
39094 # 158 "/usr/include/bits/posix1_lim.h" 2 3 4
39098 #define SSIZE_MAX LONG_MAX
39099 # 146 "/usr/include/limits.h" 2 3 4
39103 # 1 "/usr/include/bits/posix2_lim.h" 1 3 4
39104 # 24 "/usr/include/bits/posix2_lim.h" 3 4
39105 #define _BITS_POSIX2_LIM_H 1
39109 #define _POSIX2_BC_BASE_MAX 99
39112 #define _POSIX2_BC_DIM_MAX 2048
39115 #define _POSIX2_BC_SCALE_MAX 99
39118 #define _POSIX2_BC_STRING_MAX 1000
39122 #define _POSIX2_COLL_WEIGHTS_MAX 2
39126 #define _POSIX2_EXPR_NEST_MAX 32
39129 #define _POSIX2_LINE_MAX 2048
39133 #define _POSIX2_RE_DUP_MAX 255
39137 #define _POSIX2_CHARCLASS_NAME_MAX 14
39145 #define BC_BASE_MAX _POSIX2_BC_BASE_MAX
39148 #define BC_DIM_MAX _POSIX2_BC_DIM_MAX
39151 #define BC_SCALE_MAX _POSIX2_BC_SCALE_MAX
39154 #define BC_STRING_MAX _POSIX2_BC_STRING_MAX
39157 #define COLL_WEIGHTS_MAX 255
39160 #define EXPR_NEST_MAX _POSIX2_EXPR_NEST_MAX
39163 #define LINE_MAX _POSIX2_LINE_MAX
39166 #define CHARCLASS_NAME_MAX 2048
39170 #define RE_DUP_MAX (0x7fff)
39171 # 150 "/usr/include/limits.h" 2 3 4
39175 # 1 "/usr/include/bits/xopen_lim.h" 1 3 4
39176 # 31 "/usr/include/bits/xopen_lim.h" 3 4
39177 #define _XOPEN_LIM_H 1
39179 #define __need_IOV_MAX
39180 # 1 "/usr/include/bits/stdio_lim.h" 1 3 4
39181 # 24 "/usr/include/bits/stdio_lim.h" 3 4
39182 #define L_tmpnam 20
39183 #define TMP_MAX 238328
39184 #define FILENAME_MAX 4096
39187 #define L_ctermid 9
39189 #define L_cuserid 9
39196 #define FOPEN_MAX 16
39200 #define IOV_MAX 1024
39201 # 35 "/usr/include/bits/xopen_lim.h" 2 3 4
39202 # 66 "/usr/include/bits/xopen_lim.h" 3 4
39203 #define _XOPEN_IOV_MAX _POSIX_UIO_MAXIOV
39208 #define NL_ARGMAX _POSIX_ARG_MAX
39211 #define NL_LANGMAX _POSIX2_LINE_MAX
39214 #define NL_MSGMAX INT_MAX
39218 #define NL_NMAX INT_MAX
39221 #define NL_SETMAX INT_MAX
39224 #define NL_TEXTMAX INT_MAX
39228 # 110 "/usr/include/bits/xopen_lim.h" 3 4
39229 #define WORD_BIT 32
39230 # 130 "/usr/include/bits/xopen_lim.h" 3 4
39231 #define LONG_BIT 32
39232 # 154 "/usr/include/limits.h" 2 3 4
39233 # 170 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/limits.h" 2 3 4
39234 # 8 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/syslimits.h" 2 3 4
39235 #undef _GCC_NEXT_LIMITS_H
39236 # 35 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/limits.h" 2 3 4
39237 # 61 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/limits.h" 3 4
39238 #define _LIMITS_H___
39242 #define CHAR_BIT __CHAR_BIT__
39251 #define SCHAR_MIN (-SCHAR_MAX - 1)
39253 #define SCHAR_MAX __SCHAR_MAX__
39260 #define UCHAR_MAX (SCHAR_MAX * 2 + 1)
39272 #define CHAR_MAX UCHAR_MAX
39273 # 104 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/limits.h" 3 4
39275 #define SHRT_MIN (-SHRT_MAX - 1)
39277 #define SHRT_MAX __SHRT_MAX__
39284 #define USHRT_MAX (SHRT_MAX * 2 + 1)
39289 #define INT_MIN (-INT_MAX - 1)
39291 #define INT_MAX __INT_MAX__
39295 #define UINT_MAX (INT_MAX * 2U + 1U)
39300 #define LONG_MIN (-LONG_MAX - 1L)
39302 #define LONG_MAX __LONG_MAX__
39306 #define ULONG_MAX (LONG_MAX * 2UL + 1UL)
39307 # 152 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include-fixed/limits.h" 3 4
39308 #undef LONG_LONG_MIN
39309 #define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
39310 #undef LONG_LONG_MAX
39311 #define LONG_LONG_MAX __LONG_LONG_MAX__
39314 #undef ULONG_LONG_MAX
39315 #define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
39316 # 36 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/Yarr.h" 2
39318 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrInterpreter.h" 1
39319 # 31 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrInterpreter.h"
39320 #define YarrInterpreter_h
39322 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrPattern.h" 1
39323 # 32 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrPattern.h"
39324 #define YarrPattern_h
39326 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/wtfbridge.h" 1
39334 #define jswtfbridge_h__
39335 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/wtfbridge.h"
39336 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h" 1
39337 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/wtfbridge.h" 2
39338 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h" 1
39339 # 29 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39340 #define WTF_Platform_h
39345 #define PLATFORM(WTF_FEATURE) (defined WTF_PLATFORM_ ##WTF_FEATURE && WTF_PLATFORM_ ##WTF_FEATURE)
39351 #define COMPILER(WTF_FEATURE) (defined WTF_COMPILER_ ##WTF_FEATURE && WTF_COMPILER_ ##WTF_FEATURE)
39353 #define CPU(WTF_FEATURE) (defined WTF_CPU_ ##WTF_FEATURE && WTF_CPU_ ##WTF_FEATURE)
39355 #define HAVE(WTF_FEATURE) (defined HAVE_ ##WTF_FEATURE && HAVE_ ##WTF_FEATURE)
39358 #define OS(WTF_FEATURE) (defined WTF_OS_ ##WTF_FEATURE && WTF_OS_ ##WTF_FEATURE)
39364 #define USE(WTF_FEATURE) (defined WTF_USE_ ##WTF_FEATURE && WTF_USE_ ##WTF_FEATURE)
39366 #define ENABLE(WTF_FEATURE) (defined ENABLE_ ##WTF_FEATURE && ENABLE_ ##WTF_FEATURE)
39367 # 80 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39368 #define RVCT_VERSION_AT_LEAST(major,minor,patch,build) 0
39374 #define WTF_COMPILER_GCC 1
39375 #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
39376 #define GCC_VERSION_AT_LEAST(major,minor,patch) (GCC_VERSION >= (major * 10000 + minor * 100 + patch))
39377 # 233 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39378 #define WTF_CPU_ARM 1
39379 # 247 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39380 #define WTF_ARM_ARCH_AT_LEAST(N) (CPU(ARM) && WTF_ARM_ARCH_VERSION >= N)
39381 # 279 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39382 #define WTF_ARM_ARCH_VERSION 7
39383 # 318 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39384 #define WTF_THUMB_ARCH_VERSION 4
39385 # 346 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39386 #define WTF_CPU_ARM_TRADITIONAL 1
39387 #define WTF_CPU_ARM_THUMB2 0
39388 # 362 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39389 #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1
39390 # 425 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39391 #define WTF_OS_LINUX 1
39392 # 478 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39393 #define WTF_OS_UNIX 1
39394 # 532 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39395 #define WTF_PLATFORM_IOS_SIMULATOR 0
39399 #define WTF_PLATFORM_IOS 0
39400 # 621 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39401 #define WTF_USE_ICU_UNICODE 1
39402 # 760 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39403 #define HAVE_SIGNAL_H 1
39404 # 772 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39405 #define HAVE_TM_GMTOFF 1
39406 #define HAVE_TM_ZONE 1
39407 #define HAVE_TIMEGM 1
39408 # 870 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39409 #define HAVE_ERRNO_H 1
39412 #define HAVE_LANGINFO_H 1
39414 #define HAVE_MMAP 1
39415 #define HAVE_SBRK 1
39416 #define HAVE_STRINGS_H 1
39417 #define HAVE_SYS_PARAM_H 1
39418 #define HAVE_SYS_TIME_H 1
39419 # 896 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39420 #define ENABLE_FAST_MALLOC_MATCH_VALIDATION 0
39424 #define ENABLE_ICONDATABASE 1
39428 #define ENABLE_DATABASE 1
39432 #define ENABLE_JAVASCRIPT_DEBUGGER 1
39436 #define ENABLE_FTPDIR 1
39440 #define ENABLE_CONTEXT_MENUS 1
39444 #define ENABLE_DRAG_SUPPORT 1
39448 #define ENABLE_DATA_TRANSFER_ITEMS 0
39452 #define ENABLE_DASHBOARD_SUPPORT 0
39456 #define ENABLE_INSPECTOR 1
39460 #define ENABLE_JAVA_BRIDGE 0
39464 #define ENABLE_NETSCAPE_PLUGIN_API 1
39468 #define ENABLE_NETSCAPE_PLUGIN_METADATA_CACHE 0
39472 #define ENABLE_PURGEABLE_MEMORY 0
39476 #define WTF_USE_PLUGIN_HOST_PROCESS 0
39480 #define ENABLE_ORIENTATION_EVENTS 0
39484 #define ENABLE_OPCODE_STATS 0
39488 #define ENABLE_GLOBAL_FASTMALLOC_NEW 1
39491 #define ENABLE_DEBUG_WITH_BREAKPOINT 0
39492 #define ENABLE_SAMPLING_COUNTERS 0
39493 #define ENABLE_SAMPLING_FLAGS 0
39494 #define ENABLE_OPCODE_SAMPLING 0
39495 #define ENABLE_CODEBLOCK_SAMPLING 0
39496 # 980 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39497 #define ENABLE_GEOLOCATION 0
39501 #define ENABLE_GESTURE_RECOGNIZER 0
39505 #define ENABLE_NOTIFICATIONS 0
39513 #define ENABLE_TEXT_CARET 1
39517 #define ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL 0
39521 #define ENABLE_FULLSCREEN_API 0
39522 # 1016 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39523 #define WTF_USE_JSVALUE32_64 1
39528 #define ENABLE_REPAINT_THROTTLING 0
39529 # 1064 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39530 #define ENABLE_JIT_USE_SOFT_MODULO 1
39535 #define ENABLE_JIT_OPTIMIZE_CALL 1
39538 #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1
39541 #define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
39544 #define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1
39545 # 1087 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39546 #define JSC_HOST_CALL
39551 #define HAVE_COMPUTED_GOTO 1
39558 #define ENABLE_REGEXP_TRACING 0
39565 #define ENABLE_YARR_JIT 1
39568 #define ENABLE_YARR_JIT_DEBUG 0
39572 #define ENABLE_ASSEMBLER 1
39573 # 1128 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39574 #define ENABLE_EXECUTABLE_ALLOCATOR_DEMAND 1
39575 # 1137 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39576 #define ENABLE_SMOOTH_SCROLLING 0
39580 #define ENABLE_WEB_ARCHIVE 0
39581 # 1176 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39582 #define WARN_UNUSED_RETURN __attribute__ ((warn_unused_result))
39583 # 1186 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39584 #define WTF_PLATFORM_CFNETWORK Error USE_macro_should_be_used_with_CFNETWORK
39586 #define ENABLE_JSC_ZOMBIES 0
39587 # 1226 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h"
39588 #define WTF_USE_EXPORT_MACROS 0
39589 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/wtfbridge.h" 2
39590 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h" 1
39591 # 27 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h"
39592 #define ExecutableAllocator_h
39594 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stddef.h" 1 3 4
39595 # 30 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h" 2
39598 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsalloc.h" 1
39599 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h" 2
39603 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Assertions.h" 1
39604 # 27 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Assertions.h"
39605 #define WTF_Assertions_h
39607 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Platform.h" 1
39608 # 30 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Assertions.h" 2
39616 #define ASSERT_DISABLED 1
39619 #define ASSERT(assertion) MOZ_ASSERT(assertion)
39620 #define ASSERT_UNUSED(variable,assertion) do { (void)variable; ASSERT(assertion); } while (0)
39624 #define ASSERT_NOT_REACHED() MOZ_NOT_REACHED("")
39625 #define CRASH() MOZ_CRASH()
39626 #define COMPILE_ASSERT(exp,name) MOZ_STATIC_ASSERT(exp, #name)
39627 # 37 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h" 2
39628 # 74 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h"
39629 #define INITIAL_PROTECTION_FLAGS (PROT_READ | PROT_WRITE | PROT_EXEC)
39638 class ExecutableAllocator;
39640 enum CodeKind { METHOD_CODE, REGEXP_CODE };
39643 class ExecutablePool {
39645 friend class js::OffTheBooks; friend class js::Foreground; friend class js::UnwantedForeground; friend struct ::JSContext; friend struct ::JSRuntime;
39646 friend class ExecutableAllocator;
39648 struct Allocation {
39656 ExecutableAllocator* m_allocator;
39659 Allocation m_allocation;
39662 unsigned m_refCount;
39665 size_t m_mjitCodeMethod;
39666 size_t m_mjitCodeRegexp;
39676 void release(bool willDestroy = false)
39681 if (--m_refCount == 0) {
39682 js::UnwantedForeground::delete_(this);
39696 ExecutablePool(ExecutableAllocator* allocator, Allocation a)
39697 : m_allocator(allocator), m_freePtr(a.pages), m_end(m_freePtr + a.size), m_allocation(a),
39698 m_refCount(1), m_mjitCodeMethod(0), m_mjitCodeRegexp(0), m_destroy(false), m_gcNumber(0)
39703 void* alloc(size_t n, CodeKind kind)
39706 void *result = m_freePtr;
39709 if ( kind == REGEXP_CODE )
39710 m_mjitCodeRegexp += n;
39712 m_mjitCodeMethod += n;
39717 size_t available() const {
39719 return m_end - m_freePtr;
39723 enum AllocationBehavior
39725 AllocationCanRandomize,
39726 AllocationDeterministic
39729 class ExecutableAllocator {
39730 typedef void (*DestroyCallback)(void* addr, size_t size);
39731 enum ProtectionSetting { Writable, Executable };
39732 DestroyCallback destroyCallback;
39737 explicit ExecutableAllocator(AllocationBehavior allocBehavior)
39738 : destroyCallback(__null),
39739 allocBehavior(allocBehavior)
39742 pageSize = determinePageSize();
39743 # 196 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h"
39744 largeAllocSize = pageSize * 16;
39754 ~ExecutableAllocator()
39756 for (size_t i = 0; i < m_smallPools.length(); i++)
39757 m_smallPools[i]->release( true);
39765 void* alloc(size_t n, ExecutablePool** poolp, CodeKind type)
39770 n = roundUpAllocationSize(n, sizeof(void*));
39771 if (n == OVERSIZE_ALLOCATION) {
39776 *poolp = poolForSize(n);
39782 void *result = (*poolp)->alloc(n, type);
39787 void releasePoolPages(ExecutablePool *pool) {
39789 if (destroyCallback)
39790 destroyCallback(pool->m_allocation.pages, pool->m_allocation.size);
39791 systemRelease(pool->m_allocation);
39793 m_pools.remove(m_pools.lookup(pool));
39796 void sizeOfCode(size_t *method, size_t *regexp, size_t *unused) const;
39798 void setDestroyCallback(DestroyCallback destroyCallback) {
39799 this->destroyCallback = destroyCallback;
39802 void setRandomize(bool enabled) {
39803 allocBehavior = enabled ? AllocationCanRandomize : AllocationDeterministic;
39807 static size_t pageSize;
39808 static size_t largeAllocSize;
39813 static const size_t OVERSIZE_ALLOCATION = size_t(-1);
39815 static size_t roundUpAllocationSize(size_t request, size_t granularity)
39823 if ((std::numeric_limits<size_t>::max() - granularity) <= request)
39824 return OVERSIZE_ALLOCATION;
39827 size_t size = request + (granularity - 1);
39828 size = size & ~(granularity - 1);
39834 ExecutablePool::Allocation systemAlloc(size_t n);
39835 static void systemRelease(const ExecutablePool::Allocation& alloc);
39836 void *computeRandomAllocationAddress();
39838 ExecutablePool* createPool(size_t n)
39840 size_t allocSize = roundUpAllocationSize(n, pageSize);
39841 if (allocSize == OVERSIZE_ALLOCATION)
39844 if (!m_pools.initialized() && !m_pools.init())
39850 ExecutablePool::Allocation a = systemAlloc(allocSize);
39855 ExecutablePool *pool = js::OffTheBooks::new_<ExecutablePool>(this, a);
39865 ExecutablePool* poolForSize(size_t n)
39873 ExecutablePool *minPool = __null;
39874 for (size_t i = 0; i < m_smallPools.length(); i++) {
39875 ExecutablePool *pool = m_smallPools[i];
39876 if (n <= pool->available() && (!minPool || pool->available() < minPool->available()))
39886 if (n > largeAllocSize)
39887 return createPool(n);
39890 ExecutablePool* pool = createPool(largeAllocSize);
39895 if (m_smallPools.length() < maxSmallPools) {
39897 m_smallPools.append(pool);
39902 for (size_t i = 1; i < m_smallPools.length(); i++)
39903 if (m_smallPools[i]->available() <
39904 m_smallPools[iMin]->available())
39911 ExecutablePool *minPool = m_smallPools[iMin];
39912 if ((pool->available() - n) > minPool->available()) {
39913 minPool->release();
39914 m_smallPools[iMin] = pool;
39922 # 386 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h"
39923 static void makeWritable(void*, size_t) {}
39924 static void makeExecutable(void*, size_t) {}
39925 # 451 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/jit/ExecutableAllocator.h"
39926 static void cacheFlush(void* code, size_t size)
39932 "mov r7, #0xf0000\n"
39933 "add r7, r7, #0x2\n"
39938 : "r" (code), "r" (reinterpret_cast<char*>(code) + size)
39939 : "r0", "r1", "r2");
39955 static const size_t maxSmallPools = 4;
39956 typedef js::Vector<ExecutablePool *, maxSmallPools, js::SystemAllocPolicy> SmallExecPoolVector;
39957 SmallExecPoolVector m_smallPools;
39962 typedef js::HashSet<ExecutablePool *, js::DefaultHasher<ExecutablePool *>, js::SystemAllocPolicy>
39964 ExecPoolHashSet m_pools;
39965 AllocationBehavior allocBehavior;
39967 static size_t determinePageSize();
39971 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/wtfbridge.h" 2
39973 namespace JSC { namespace Yarr {
39979 typedef jschar UChar;
39980 typedef JSLinearString UString;
39982 using namespace js::unicode;
39986 static UChar toUpper(UChar c) { return ToUpperCase(c); }
39987 static UChar toLower(UChar c) { return ToLowerCase(c); }
39995 template<typename T>
39999 template<typename T>
40003 RefPtr(T *p) { ptr = p; }
40004 operator bool() const { return ptr != __null; }
40005 const T *operator ->() const { return ptr; }
40006 T *get() { return ptr; }
40009 template<typename T>
40013 PassRefPtr(T *p) { ptr = p; }
40014 operator T*() { return ptr; }
40017 template<typename T>
40021 PassOwnPtr(T *p) { ptr = p; }
40023 T *get() { return ptr; }
40026 template<typename T>
40030 OwnPtr() : ptr(__null) { }
40031 OwnPtr(PassOwnPtr<T> p) : ptr(p.get()) { }
40035 js::Foreground::delete_(ptr);
40038 OwnPtr<T> &operator=(PassOwnPtr<T> p) {
40043 T *operator ->() { return ptr; }
40045 T *get() { return ptr; }
40054 template<typename T>
40055 PassRefPtr<T> adoptRef(T *p) { return PassRefPtr<T>(p); }
40057 template<typename T>
40058 PassOwnPtr<T> adoptPtr(T *p) { return PassOwnPtr<T>(p); }
40060 #define WTF_MAKE_FAST_ALLOCATED
40062 template<typename T>
40066 Ref(T &val) : val(val) { }
40067 operator T&() const { return val; }
40074 template<typename T, size_t N = 0>
40077 js::Vector<T, N, js::SystemAllocPolicy> impl;
40081 Vector(const Vector &v) {
40086 size_t size() const {
40087 return impl.length();
40090 T &operator[](size_t i) {
40094 const T &operator[](size_t i) const {
40102 const T *begin() const {
40103 return impl.begin();
40107 return impl.back();
40110 bool isEmpty() const {
40111 return impl.empty();
40114 template <typename U>
40115 void append(const U &u) {
40117 (void) impl.append(static_cast<T>(u));
40120 template <size_t M>
40121 void append(const Vector<T,M> &v) {
40123 (void) impl.append(v.impl);
40126 void insert(size_t i, const T& t) {
40128 (void) impl.insert(&impl[i], t);
40131 void remove(size_t i) {
40132 impl.erase(&impl[i]);
40136 return impl.clear();
40139 void shrink(size_t newLength) {
40142 (void) impl.resize(newLength);
40145 void deleteAllValues() {
40146 for (T *p = impl.begin(); p != impl.end(); ++p)
40147 js::Foreground::delete_(*p);
40151 template<typename T>
40152 class Vector<OwnPtr<T> > {
40154 js::Vector<T *, 0, js::SystemAllocPolicy> impl;
40158 size_t size() const {
40159 return impl.length();
40162 void append(T *t) {
40164 (void) impl.append(t);
40167 PassOwnPtr<T> operator[](size_t i) {
40168 return PassOwnPtr<T>(impl[i]);
40172 for (T **p = impl.begin(); p != impl.end(); ++p)
40173 js::Foreground::delete_(*p);
40174 return impl.clear();
40178 template <typename T, size_t N>
40180 deleteAllValues(Vector<T, N> &v) {
40181 v.deleteAllValues();
40189 class JSGlobalData {
40191 ExecutableAllocator *regexAllocator;
40193 JSGlobalData(ExecutableAllocator *regexAllocator)
40194 : regexAllocator(regexAllocator) { }
40202 const size_t notFound = size_t(-1);
40208 #define UNUSED_PARAM(e)
40218 # 276 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/wtfbridge.h"
40219 template<typename T>
40223 return ((t1)<(t2)?(t1):(t2));
40226 template<typename T>
40230 return ((t1)>(t2)?(t1):(t2));
40233 template<typename T>
40244 # 35 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrPattern.h" 2
40245 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/ASCIICType.h" 1
40246 # 34 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/ASCIICType.h"
40247 #define WTF_ASCIICType_h
40249 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Assertions.h" 1
40250 # 37 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/ASCIICType.h" 2
40251 # 48 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/ASCIICType.h"
40254 inline bool isASCII(char c) { return !(c & ~0x7F); }
40255 inline bool isASCII(unsigned short c) { return !(c & ~0x7F); }
40257 inline bool isASCII(wchar_t c) { return !(c & ~0x7F); }
40259 inline bool isASCII(int c) { return !(c & ~0x7F); }
40260 inline bool isASCII(unsigned c) { return !(c & ~0x7F); }
40262 inline bool isASCIIAlpha(char c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
40263 inline bool isASCIIAlpha(unsigned short c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
40265 inline bool isASCIIAlpha(wchar_t c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
40267 inline bool isASCIIAlpha(int c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
40268 inline bool isASCIIAlpha(unsigned c) { return (c | 0x20) >= 'a' && (c | 0x20) <= 'z'; }
40270 inline bool isASCIIAlphanumeric(char c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
40271 inline bool isASCIIAlphanumeric(unsigned short c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
40273 inline bool isASCIIAlphanumeric(wchar_t c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
40275 inline bool isASCIIAlphanumeric(int c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
40276 inline bool isASCIIAlphanumeric(unsigned c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); }
40278 inline bool isASCIIDigit(char c) { return (c >= '0') & (c <= '9'); }
40279 inline bool isASCIIDigit(unsigned short c) { return (c >= '0') & (c <= '9'); }
40281 inline bool isASCIIDigit(wchar_t c) { return (c >= '0') & (c <= '9'); }
40283 inline bool isASCIIDigit(int c) { return (c >= '0') & (c <= '9'); }
40284 inline bool isASCIIDigit(unsigned c) { return (c >= '0') & (c <= '9'); }
40286 inline bool isASCIIHexDigit(char c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
40287 inline bool isASCIIHexDigit(unsigned short c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
40289 inline bool isASCIIHexDigit(wchar_t c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
40291 inline bool isASCIIHexDigit(int c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
40292 inline bool isASCIIHexDigit(unsigned c) { return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f'); }
40294 inline bool isASCIIOctalDigit(char c) { return (c >= '0') & (c <= '7'); }
40295 inline bool isASCIIOctalDigit(unsigned short c) { return (c >= '0') & (c <= '7'); }
40297 inline bool isASCIIOctalDigit(wchar_t c) { return (c >= '0') & (c <= '7'); }
40299 inline bool isASCIIOctalDigit(int c) { return (c >= '0') & (c <= '7'); }
40300 inline bool isASCIIOctalDigit(unsigned c) { return (c >= '0') & (c <= '7'); }
40302 inline bool isASCIILower(char c) { return c >= 'a' && c <= 'z'; }
40303 inline bool isASCIILower(unsigned short c) { return c >= 'a' && c <= 'z'; }
40305 inline bool isASCIILower(wchar_t c) { return c >= 'a' && c <= 'z'; }
40307 inline bool isASCIILower(int c) { return c >= 'a' && c <= 'z'; }
40308 inline bool isASCIILower(unsigned c) { return c >= 'a' && c <= 'z'; }
40310 inline bool isASCIIUpper(char c) { return c >= 'A' && c <= 'Z'; }
40311 inline bool isASCIIUpper(unsigned short c) { return c >= 'A' && c <= 'Z'; }
40313 inline bool isASCIIUpper(wchar_t c) { return c >= 'A' && c <= 'Z'; }
40315 inline bool isASCIIUpper(int c) { return c >= 'A' && c <= 'Z'; }
40316 inline bool isASCIIUpper(unsigned c) { return c >= 'A' && c <= 'Z'; }
40317 # 127 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/ASCIICType.h"
40318 inline bool isASCIISpace(char c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
40319 inline bool isASCIISpace(unsigned short c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
40321 inline bool isASCIISpace(wchar_t c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
40323 inline bool isASCIISpace(int c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
40324 inline bool isASCIISpace(unsigned c) { return c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); }
40326 inline char toASCIILower(char c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
40327 inline unsigned short toASCIILower(unsigned short c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
40329 inline wchar_t toASCIILower(wchar_t c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
40331 inline int toASCIILower(int c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
40332 inline unsigned toASCIILower(unsigned c) { return c | ((c >= 'A' && c <= 'Z') << 5); }
40335 inline char toASCIIUpper(char c) { return static_cast<char>(c & ~((c >= 'a' && c <= 'z') << 5)); }
40336 inline unsigned short toASCIIUpper(unsigned short c) { return static_cast<unsigned short>(c & ~((c >= 'a' && c <= 'z') << 5)); }
40338 inline wchar_t toASCIIUpper(wchar_t c) { return static_cast<wchar_t>(c & ~((c >= 'a' && c <= 'z') << 5)); }
40340 inline int toASCIIUpper(int c) { return static_cast<int>(c & ~((c >= 'a' && c <= 'z') << 5)); }
40341 inline unsigned toASCIIUpper(unsigned c) { return static_cast<unsigned>(c & ~((c >= 'a' && c <= 'z') << 5)); }
40343 inline int toASCIIHexValue(char c) { do { } while(0); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
40344 inline int toASCIIHexValue(unsigned short c) { do { } while(0); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
40346 inline int toASCIIHexValue(wchar_t c) { do { } while(0); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
40348 inline int toASCIIHexValue(int c) { do { } while(0); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
40349 inline int toASCIIHexValue(unsigned c) { do { } while(0); return c < 'A' ? c - '0' : (c - 'A' + 10) & 0xF; }
40351 inline bool isASCIIPrintable(char c) { return c >= ' ' && c <= '~'; }
40352 inline bool isASCIIPrintable(unsigned short c) { return c >= ' ' && c <= '~'; }
40354 inline bool isASCIIPrintable(wchar_t c) { return c >= ' ' && c <= '~'; }
40356 inline bool isASCIIPrintable(int c) { return c >= ' ' && c <= '~'; }
40357 inline bool isASCIIPrintable(unsigned c) { return c >= ' ' && c <= '~'; }
40360 using WTF::isASCII;
40361 using WTF::isASCIIAlpha;
40362 using WTF::isASCIIAlphanumeric;
40363 using WTF::isASCIIDigit;
40364 using WTF::isASCIIHexDigit;
40365 using WTF::isASCIILower;
40366 using WTF::isASCIIOctalDigit;
40367 using WTF::isASCIIPrintable;
40368 using WTF::isASCIISpace;
40369 using WTF::isASCIIUpper;
40370 using WTF::toASCIIHexValue;
40371 using WTF::toASCIILower;
40372 using WTF::toASCIIUpper;
40373 # 36 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrPattern.h" 2
40375 namespace JSC { namespace Yarr {
40380 QuantifierOutOfOrder,
40381 QuantifierWithoutAtom,
40382 MissingParentheses,
40383 ParenthesesUnmatched,
40384 ParenthesesTypeInvalid,
40385 CharacterClassUnmatched,
40386 CharacterClassInvalidRange,
40387 CharacterClassOutOfOrder,
40388 EscapeUnterminated,
40389 QuantifierTooLarge,
40393 struct PatternDisjunction;
40395 struct CharacterRange {
40399 CharacterRange(UChar begin, UChar end)
40406 struct CharacterClassTable : RefCounted<CharacterClassTable> {
40407 friend class js::OffTheBooks;
40408 const char* m_table;
40410 static PassRefPtr<CharacterClassTable> create(const char* table, bool inverted)
40412 return adoptRef(js::OffTheBooks::new_<CharacterClassTable>(table, inverted));
40416 CharacterClassTable(const char* table, bool inverted)
40418 , m_inverted(inverted)
40423 struct CharacterClass {
40429 CharacterClass(PassRefPtr<CharacterClassTable> table)
40435 js::Foreground::delete_(m_table.get());
40437 Vector<UChar> m_matches;
40438 Vector<CharacterRange> m_ranges;
40439 Vector<UChar> m_matchesUnicode;
40440 Vector<CharacterRange> m_rangesUnicode;
40441 RefPtr<CharacterClassTable> m_table;
40444 enum QuantifierType {
40445 QuantifierFixedCount,
40447 QuantifierNonGreedy
40450 struct PatternTerm {
40454 TypeAssertionWordBoundary,
40455 TypePatternCharacter,
40456 TypeCharacterClass,
40458 TypeForwardReference,
40459 TypeParenthesesSubpattern,
40460 TypeParentheticalAssertion
40465 UChar patternCharacter;
40466 CharacterClass* characterClass;
40467 unsigned backReferenceSubpatternId;
40469 PatternDisjunction* disjunction;
40470 unsigned subpatternId;
40471 unsigned lastSubpatternId;
40476 QuantifierType quantityType;
40477 unsigned quantityCount;
40479 unsigned frameLocation;
40483 : type(PatternTerm::TypePatternCharacter)
40487 patternCharacter = 0;
40488 quantityType = QuantifierFixedCount;
40492 PatternTerm(UChar ch)
40493 : type(PatternTerm::TypePatternCharacter)
40497 patternCharacter = ch;
40498 quantityType = QuantifierFixedCount;
40502 PatternTerm(CharacterClass* charClass, bool invert)
40503 : type(PatternTerm::TypeCharacterClass)
40507 characterClass = charClass;
40508 quantityType = QuantifierFixedCount;
40512 PatternTerm(Type type, unsigned subpatternId, PatternDisjunction* disjunction, bool capture = false, bool invert = false)
40514 , m_capture(capture)
40517 parentheses.disjunction = disjunction;
40518 parentheses.subpatternId = subpatternId;
40519 parentheses.isCopy = false;
40520 parentheses.isTerminal = false;
40521 quantityType = QuantifierFixedCount;
40525 PatternTerm(Type type, bool invert = false)
40530 quantityType = QuantifierFixedCount;
40534 PatternTerm(unsigned spatternId)
40535 : type(TypeBackReference)
40539 backReferenceSubpatternId = spatternId;
40540 quantityType = QuantifierFixedCount;
40544 static PatternTerm ForwardReference()
40546 return PatternTerm(TypeForwardReference);
40549 static PatternTerm BOL()
40551 return PatternTerm(TypeAssertionBOL);
40554 static PatternTerm EOL()
40556 return PatternTerm(TypeAssertionEOL);
40559 static PatternTerm WordBoundary(bool invert)
40561 return PatternTerm(TypeAssertionWordBoundary, invert);
40574 void quantify(unsigned count, QuantifierType type)
40576 quantityCount = count;
40577 quantityType = type;
40581 struct PatternAlternative {
40584 PatternAlternative(PatternDisjunction* disjunction)
40585 : m_parent(disjunction)
40586 , m_onceThrough(false)
40587 , m_hasFixedSize(false)
40588 , m_startsWithBOL(false)
40589 , m_containsBOL(false)
40593 PatternTerm& lastTerm()
40596 return m_terms[m_terms.size() - 1];
40599 void removeLastTerm()
40602 m_terms.shrink(m_terms.size() - 1);
40605 void setOnceThrough()
40607 m_onceThrough = true;
40612 return m_onceThrough;
40615 Vector<PatternTerm> m_terms;
40616 PatternDisjunction* m_parent;
40617 unsigned m_minimumSize;
40618 bool m_onceThrough : 1;
40619 bool m_hasFixedSize : 1;
40620 bool m_startsWithBOL : 1;
40621 bool m_containsBOL : 1;
40624 struct PatternDisjunction {
40627 PatternDisjunction(PatternAlternative* parent = 0)
40629 , m_hasFixedSize(false)
40633 ~PatternDisjunction()
40635 deleteAllValues(m_alternatives);
40638 PatternAlternative* addNewAlternative()
40640 PatternAlternative* alternative = js::OffTheBooks::new_<PatternAlternative>(this);
40641 m_alternatives.append(alternative);
40642 return alternative;
40645 Vector<PatternAlternative*> m_alternatives;
40646 PatternAlternative* m_parent;
40647 unsigned m_minimumSize;
40648 unsigned m_callFrameSize;
40649 bool m_hasFixedSize;
40656 CharacterClass* newlineCreate();
40657 CharacterClass* digitsCreate();
40658 CharacterClass* spacesCreate();
40659 CharacterClass* wordcharCreate();
40660 CharacterClass* nondigitsCreate();
40661 CharacterClass* nonspacesCreate();
40662 CharacterClass* nonwordcharCreate();
40665 TermChain(PatternTerm term)
40670 Vector<TermChain> hotTerms;
40673 struct YarrPattern {
40674 YarrPattern(const UString& pattern, bool ignoreCase, bool multiline, ErrorCode* error);
40678 deleteAllValues(m_disjunctions);
40679 deleteAllValues(m_userCharacterClasses);
40684 m_numSubpatterns = 0;
40685 m_maxBackReference = 0;
40687 m_containsBackreferences = false;
40688 m_containsBOL = false;
40693 wordcharCached = 0;
40694 nondigitsCached = 0;
40695 nonspacesCached = 0;
40696 nonwordcharCached = 0;
40698 deleteAllValues(m_disjunctions);
40699 m_disjunctions.clear();
40700 deleteAllValues(m_userCharacterClasses);
40701 m_userCharacterClasses.clear();
40704 bool containsIllegalBackReference()
40706 return m_maxBackReference > m_numSubpatterns;
40709 CharacterClass* newlineCharacterClass()
40711 if (!newlineCached)
40712 m_userCharacterClasses.append(newlineCached = newlineCreate());
40713 return newlineCached;
40715 CharacterClass* digitsCharacterClass()
40718 m_userCharacterClasses.append(digitsCached = digitsCreate());
40719 return digitsCached;
40721 CharacterClass* spacesCharacterClass()
40724 m_userCharacterClasses.append(spacesCached = spacesCreate());
40725 return spacesCached;
40727 CharacterClass* wordcharCharacterClass()
40729 if (!wordcharCached)
40730 m_userCharacterClasses.append(wordcharCached = wordcharCreate());
40731 return wordcharCached;
40733 CharacterClass* nondigitsCharacterClass()
40735 if (!nondigitsCached)
40736 m_userCharacterClasses.append(nondigitsCached = nondigitsCreate());
40737 return nondigitsCached;
40739 CharacterClass* nonspacesCharacterClass()
40741 if (!nonspacesCached)
40742 m_userCharacterClasses.append(nonspacesCached = nonspacesCreate());
40743 return nonspacesCached;
40745 CharacterClass* nonwordcharCharacterClass()
40747 if (!nonwordcharCached)
40748 m_userCharacterClasses.append(nonwordcharCached = nonwordcharCreate());
40749 return nonwordcharCached;
40752 bool m_ignoreCase : 1;
40753 bool m_multiline : 1;
40754 bool m_containsBackreferences : 1;
40755 bool m_containsBOL : 1;
40756 unsigned m_numSubpatterns;
40757 unsigned m_maxBackReference;
40758 PatternDisjunction* m_body;
40759 Vector<PatternDisjunction*, 4> m_disjunctions;
40760 Vector<CharacterClass*> m_userCharacterClasses;
40763 ErrorCode compile(const UString& patternString);
40765 CharacterClass* newlineCached;
40766 CharacterClass* digitsCached;
40767 CharacterClass* spacesCached;
40768 CharacterClass* wordcharCached;
40769 CharacterClass* nondigitsCached;
40770 CharacterClass* nonspacesCached;
40771 CharacterClass* nonwordcharCached;
40775 # 34 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrInterpreter.h" 2
40778 class BumpPointerAllocator;
40780 using WTF::BumpPointerAllocator;
40782 namespace JSC { namespace Yarr {
40784 class ByteDisjunction;
40788 TypeBodyAlternativeBegin,
40789 TypeBodyAlternativeDisjunction,
40790 TypeBodyAlternativeEnd,
40791 TypeAlternativeBegin,
40792 TypeAlternativeDisjunction,
40793 TypeAlternativeEnd,
40794 TypeSubpatternBegin,
40798 TypeAssertionWordBoundary,
40799 TypePatternCharacterOnce,
40800 TypePatternCharacterFixed,
40801 TypePatternCharacterGreedy,
40802 TypePatternCharacterNonGreedy,
40803 TypePatternCasedCharacterOnce,
40804 TypePatternCasedCharacterFixed,
40805 TypePatternCasedCharacterGreedy,
40806 TypePatternCasedCharacterNonGreedy,
40807 TypeCharacterClass,
40809 TypeParenthesesSubpattern,
40810 TypeParenthesesSubpatternOnceBegin,
40811 TypeParenthesesSubpatternOnceEnd,
40812 TypeParenthesesSubpatternTerminalBegin,
40813 TypeParenthesesSubpatternTerminalEnd,
40814 TypeParentheticalAssertionBegin,
40815 TypeParentheticalAssertionEnd,
40822 UChar patternCharacter;
40827 CharacterClass* characterClass;
40828 unsigned subpatternId;
40831 ByteDisjunction* parenthesesDisjunction;
40832 unsigned parenthesesWidth;
40834 QuantifierType quantityType;
40835 unsigned quantityCount;
40842 unsigned checkInputCount;
40844 unsigned frameLocation;
40845 bool m_capture : 1;
40854 ByteTerm(UChar ch, int inputPos, unsigned frameLocation, unsigned quantityCount, QuantifierType quantityType)
40855 : frameLocation(frameLocation)
40859 switch (quantityType) {
40860 case QuantifierFixedCount:
40861 type = (quantityCount == 1) ? ByteTerm::TypePatternCharacterOnce : ByteTerm::TypePatternCharacterFixed;
40863 case QuantifierGreedy:
40864 type = ByteTerm::TypePatternCharacterGreedy;
40866 case QuantifierNonGreedy:
40867 type = ByteTerm::TypePatternCharacterNonGreedy;
40871 atom.patternCharacter = ch;
40872 atom.quantityType = quantityType;
40873 atom.quantityCount = quantityCount;
40874 inputPosition = inputPos;
40877 ByteTerm(UChar lo, UChar hi, int inputPos, unsigned frameLocation, unsigned quantityCount, QuantifierType quantityType)
40878 : frameLocation(frameLocation)
40882 switch (quantityType) {
40883 case QuantifierFixedCount:
40884 type = (quantityCount == 1) ? ByteTerm::TypePatternCasedCharacterOnce : ByteTerm::TypePatternCasedCharacterFixed;
40886 case QuantifierGreedy:
40887 type = ByteTerm::TypePatternCasedCharacterGreedy;
40889 case QuantifierNonGreedy:
40890 type = ByteTerm::TypePatternCasedCharacterNonGreedy;
40894 atom.casedCharacter.lo = lo;
40895 atom.casedCharacter.hi = hi;
40896 atom.quantityType = quantityType;
40897 atom.quantityCount = quantityCount;
40898 inputPosition = inputPos;
40901 ByteTerm(CharacterClass* characterClass, bool invert, int inputPos)
40902 : type(ByteTerm::TypeCharacterClass)
40906 atom.characterClass = characterClass;
40907 atom.quantityType = QuantifierFixedCount;
40908 atom.quantityCount = 1;
40909 inputPosition = inputPos;
40912 ByteTerm(Type type, unsigned subpatternId, ByteDisjunction* parenthesesInfo, bool capture, int inputPos)
40914 , m_capture(capture)
40917 atom.subpatternId = subpatternId;
40918 atom.parenthesesDisjunction = parenthesesInfo;
40919 atom.quantityType = QuantifierFixedCount;
40920 atom.quantityCount = 1;
40921 inputPosition = inputPos;
40924 ByteTerm(Type type, bool invert = false)
40929 atom.quantityType = QuantifierFixedCount;
40930 atom.quantityCount = 1;
40933 ByteTerm(Type type, unsigned subpatternId, bool capture, bool invert, int inputPos)
40935 , m_capture(capture)
40938 atom.subpatternId = subpatternId;
40939 atom.quantityType = QuantifierFixedCount;
40940 atom.quantityCount = 1;
40941 inputPosition = inputPos;
40944 static ByteTerm BOL(int inputPos)
40946 ByteTerm term(TypeAssertionBOL);
40947 term.inputPosition = inputPos;
40951 static ByteTerm CheckInput(unsigned count)
40953 ByteTerm term(TypeCheckInput);
40954 term.checkInputCount = count;
40958 static ByteTerm UncheckInput(unsigned count)
40960 ByteTerm term(TypeUncheckInput);
40961 term.checkInputCount = count;
40965 static ByteTerm EOL(int inputPos)
40967 ByteTerm term(TypeAssertionEOL);
40968 term.inputPosition = inputPos;
40972 static ByteTerm WordBoundary(bool invert, int inputPos)
40974 ByteTerm term(TypeAssertionWordBoundary, invert);
40975 term.inputPosition = inputPos;
40979 static ByteTerm BackReference(unsigned subpatternId, int inputPos)
40981 return ByteTerm(TypeBackReference, subpatternId, false, false, inputPos);
40984 static ByteTerm BodyAlternativeBegin(bool onceThrough)
40986 ByteTerm term(TypeBodyAlternativeBegin);
40987 term.alternative.next = 0;
40988 term.alternative.end = 0;
40989 term.alternative.onceThrough = onceThrough;
40993 static ByteTerm BodyAlternativeDisjunction(bool onceThrough)
40995 ByteTerm term(TypeBodyAlternativeDisjunction);
40996 term.alternative.next = 0;
40997 term.alternative.end = 0;
40998 term.alternative.onceThrough = onceThrough;
41002 static ByteTerm BodyAlternativeEnd()
41004 ByteTerm term(TypeBodyAlternativeEnd);
41005 term.alternative.next = 0;
41006 term.alternative.end = 0;
41007 term.alternative.onceThrough = false;
41011 static ByteTerm AlternativeBegin()
41013 ByteTerm term(TypeAlternativeBegin);
41014 term.alternative.next = 0;
41015 term.alternative.end = 0;
41016 term.alternative.onceThrough = false;
41020 static ByteTerm AlternativeDisjunction()
41022 ByteTerm term(TypeAlternativeDisjunction);
41023 term.alternative.next = 0;
41024 term.alternative.end = 0;
41025 term.alternative.onceThrough = false;
41029 static ByteTerm AlternativeEnd()
41031 ByteTerm term(TypeAlternativeEnd);
41032 term.alternative.next = 0;
41033 term.alternative.end = 0;
41034 term.alternative.onceThrough = false;
41038 static ByteTerm SubpatternBegin()
41040 return ByteTerm(TypeSubpatternBegin);
41043 static ByteTerm SubpatternEnd()
41045 return ByteTerm(TypeSubpatternEnd);
41059 class ByteDisjunction {
41062 ByteDisjunction(unsigned numSubpatterns, unsigned frameSize)
41063 : m_numSubpatterns(numSubpatterns)
41064 , m_frameSize(frameSize)
41068 Vector<ByteTerm> terms;
41069 unsigned m_numSubpatterns;
41070 unsigned m_frameSize;
41073 struct BytecodePattern {
41076 BytecodePattern(PassOwnPtr<ByteDisjunction> body, const Vector<ByteDisjunction*> &allParenthesesInfo, YarrPattern& pattern, BumpPointerAllocator* allocator)
41078 , m_ignoreCase(pattern.m_ignoreCase)
41079 , m_multiline(pattern.m_multiline)
41080 , m_allocator(allocator)
41082 newlineCharacterClass = pattern.newlineCharacterClass();
41083 wordcharCharacterClass = pattern.wordcharCharacterClass();
41085 m_allParenthesesInfo.append(allParenthesesInfo);
41086 m_userCharacterClasses.append(pattern.m_userCharacterClasses);
41090 pattern.m_userCharacterClasses.clear();
41095 deleteAllValues(m_allParenthesesInfo);
41096 deleteAllValues(m_userCharacterClasses);
41099 OwnPtr<ByteDisjunction> m_body;
41104 BumpPointerAllocator* m_allocator;
41106 CharacterClass* newlineCharacterClass;
41107 CharacterClass* wordcharCharacterClass;
41110 Vector<ByteDisjunction*> m_allParenthesesInfo;
41111 Vector<CharacterClass*> m_userCharacterClasses;
41115 # 38 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/Yarr.h" 2
41118 namespace JSC { namespace Yarr {
41120 #define YarrStackSpaceForBackTrackInfoPatternCharacter 1
41121 #define YarrStackSpaceForBackTrackInfoCharacterClass 1
41122 #define YarrStackSpaceForBackTrackInfoBackReference 2
41123 #define YarrStackSpaceForBackTrackInfoAlternative 1
41124 #define YarrStackSpaceForBackTrackInfoParentheticalAssertion 1
41125 #define YarrStackSpaceForBackTrackInfoParenthesesOnce 1
41126 #define YarrStackSpaceForBackTrackInfoParenthesesTerminal 1
41127 #define YarrStackSpaceForBackTrackInfoParentheses 2
41129 static const unsigned quantifyInfinite = (2147483647 * 2U + 1U);
41133 static const unsigned matchLimit = 1000000;
41135 enum JSRegExpResult {
41137 JSRegExpNoMatch = 0,
41138 JSRegExpErrorNoMatch = -1,
41139 JSRegExpErrorHitLimit = -2,
41140 JSRegExpErrorNoMemory = -3,
41141 JSRegExpErrorInternal = -4
41144 PassOwnPtr<BytecodePattern> byteCompile(YarrPattern&, BumpPointerAllocator*);
41145 int interpret(BytecodePattern*, const UChar* input, unsigned start, unsigned length, int* output);
41148 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h" 2
41150 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrJIT.h" 1
41151 # 31 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrJIT.h"
41158 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssembler.h" 1
41159 # 31 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssembler.h"
41160 #define MacroAssembler_h
41161 # 42 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssembler.h"
41162 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssemblerARM.h" 1
41163 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssemblerARM.h"
41164 #define MacroAssemblerARM_h
41170 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/ARMAssembler.h" 1
41171 # 32 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/ARMAssembler.h"
41172 #define ARMAssembler_h
41173 # 41 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/ARMAssembler.h"
41174 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h" 1
41175 # 32 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h"
41176 #define AssemblerBufferWithConstantPool_h
41182 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBuffer.h" 1
41183 # 31 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBuffer.h"
41184 #define AssemblerBuffer_h
41192 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Assertions.h" 1
41193 # 40 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBuffer.h" 2
41197 class AssemblerBuffer {
41198 static const int inlineCapacity = 256;
41201 : m_buffer(m_inlineBuffer)
41202 , m_capacity(inlineCapacity)
41210 if (m_buffer != m_inlineBuffer)
41214 void ensureSpace(int space)
41216 if (m_size > m_capacity - space)
41220 bool isAligned(int alignment) const
41222 return !(m_size & (alignment - 1));
41225 void putByteUnchecked(int value)
41228 m_buffer[m_size] = char(value);
41232 void putByte(int value)
41234 if (m_size > m_capacity - 4)
41236 putByteUnchecked(value);
41239 void putShortUnchecked(int value)
41242 *reinterpret_cast<short*>(&m_buffer[m_size]) = short(value);
41246 void putShort(int value)
41248 if (m_size > m_capacity - 4)
41250 putShortUnchecked(value);
41253 void putIntUnchecked(int value)
41256 *reinterpret_cast<int*>(&m_buffer[m_size]) = value;
41260 void putInt64Unchecked(int64_t value)
41263 *reinterpret_cast<int64_t*>(&m_buffer[m_size]) = value;
41267 void putInt(int value)
41269 if (m_size > m_capacity - 4)
41271 putIntUnchecked(value);
41293 void* executableAllocAndCopy(ExecutableAllocator* allocator, ExecutablePool** poolp, CodeKind kind)
41295 if (m_oom || m_size == 0) {
41300 void* result = allocator->alloc(m_size, poolp, kind);
41307 ExecutableAllocator::makeWritable(result, m_size);
41309 return memcpy(result, m_buffer, m_size);
41312 unsigned char *buffer() const {
41314 return reinterpret_cast<unsigned char *>(m_buffer);
41318 void append(const char* data, int size)
41320 if (m_size > m_capacity - size)
41326 memcpy(m_buffer + m_size, data, size);
41329 # 191 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBuffer.h"
41330 void grow(int extraCapacity = 0)
41336 int newCapacity = m_capacity + m_capacity + extraCapacity;
41339 if (m_buffer == m_inlineBuffer) {
41340 newBuffer = static_cast<char*>(malloc(newCapacity));
41346 memcpy(newBuffer, m_buffer, m_size);
41348 newBuffer = static_cast<char*>(realloc(m_buffer, newCapacity));
41356 m_buffer = newBuffer;
41357 m_capacity = newCapacity;
41360 char m_inlineBuffer[inlineCapacity];
41368 # 39 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h" 2
41369 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/SegmentedVector.h" 1
41370 # 30 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/SegmentedVector.h"
41371 #define SegmentedVector_h
41379 template <typename T, size_t SegmentSize> class SegmentedVector;
41380 template <typename T, size_t SegmentSize> class SegmentedVectorIterator {
41382 friend class SegmentedVector<T, SegmentSize>;
41384 typedef SegmentedVectorIterator<T, SegmentSize> Iterator;
41386 ~SegmentedVectorIterator() { }
41388 T& operator*() const { return (*m_vector.m_segments[m_segment])[m_index]; }
41389 T* operator->() const { return &(*m_vector.m_segments[m_segment])[m_index]; }
41392 Iterator& operator++()
41397 if (m_index >= m_vector.m_segments[m_segment]->length()) {
41399 if (m_segment + 1 < m_vector.m_segments.length()) {
41407 m_index = SegmentSize;
41413 bool operator==(const Iterator& other) const
41415 return (m_index == other.m_index && m_segment = other.m_segment && &m_vector == &other.m_vector);
41418 bool operator!=(const Iterator& other) const
41420 return (m_index != other.m_index || m_segment != other.m_segment || &m_vector != &other.m_vector);
41423 SegmentedVectorIterator& operator=(const SegmentedVectorIterator<T, SegmentSize>& other)
41425 m_vector = other.m_vector;
41426 m_segment = other.m_segment;
41427 m_index = other.m_index;
41432 SegmentedVectorIterator(SegmentedVector<T, SegmentSize>& vector, size_t segment, size_t index)
41434 , m_segment(segment)
41439 SegmentedVector<T, SegmentSize>& m_vector;
41447 template <typename T, size_t SegmentSize> class SegmentedVector {
41448 friend class SegmentedVectorIterator<T, SegmentSize>;
41450 typedef SegmentedVectorIterator<T, SegmentSize> Iterator;
41455 m_segments.append(&m_inlineSegment);
41460 deleteAllSegments();
41463 size_t size() const { return m_size; }
41464 bool isEmpty() const { return !size(); }
41466 T& at(size_t index)
41468 if (index < SegmentSize)
41469 return m_inlineSegment[index];
41470 return segmentFor(index)->at(subscriptFor(index));
41473 T& operator[](size_t index)
41480 return at(size() - 1);
41483 template <typename U> void append(const U& value)
41487 if (m_size <= SegmentSize) {
41489 m_inlineSegment.append(value);
41493 if (!segmentExistsFor(m_size - 1))
41494 m_segments.append(new Segment);
41496 segmentFor(m_size - 1)->append(value);
41507 if (m_size <= SegmentSize)
41508 m_inlineSegment.removeLast();
41510 segmentFor(m_size - 1)->removeLast();
41514 void grow(size_t size)
41517 ensureSegmentsFor(size);
41523 deleteAllSegments();
41524 m_segments.resize(1);
41525 m_inlineSegment.clear();
41531 return Iterator(*this, 0, m_size ? 0 : SegmentSize);
41536 return Iterator(*this, 0, SegmentSize);
41540 typedef js::Vector<T, SegmentSize ,js::SystemAllocPolicy > Segment;
41542 void deleteAllSegments()
41547 for (size_t i = 1; i < m_segments.length(); i++)
41548 delete m_segments[i];
41551 bool segmentExistsFor(size_t index)
41554 return index / SegmentSize < m_segments.length();
41557 Segment* segmentFor(size_t index)
41559 return m_segments[index / SegmentSize];
41562 size_t subscriptFor(size_t index)
41564 return index % SegmentSize;
41567 void ensureSegmentsFor(size_t size)
41569 size_t segmentCount = m_size / SegmentSize;
41570 if (m_size % SegmentSize)
41573 segmentCount = segmentCount > 1 ? segmentCount : 1;
41575 size_t neededSegmentCount = size / SegmentSize;
41576 if (size % SegmentSize)
41577 ++neededSegmentCount;
41580 size_t end = neededSegmentCount - 1;
41581 for (size_t i = segmentCount - 1; i < end; ++i)
41582 ensureSegment(i, SegmentSize);
41585 ensureSegment(end, subscriptFor(size - 1) + 1);
41588 void ensureSegment(size_t segmentIndex, size_t size)
41591 if (segmentIndex == m_segments.size())
41592 m_segments.append(new Segment);
41593 m_segments[segmentIndex]->grow(size);
41597 Segment m_inlineSegment;
41598 js::Vector<Segment*, 32 ,js::SystemAllocPolicy > m_segments;
41603 using WTF::SegmentedVector;
41604 # 40 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h" 2
41605 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Assertions.h" 1
41606 # 41 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h" 2
41608 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/Logging.h" 1
41609 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/Logging.h"
41610 #define jsjaeger_logging_h__
41613 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/prmjtime.h" 1
41614 # 13 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/Logging.h" 2
41620 #define JSPEW_CHAN_MAP(_) _(Abort) _(Scripts) _(Prof) _(JSOps) _(Insns) _(VMFrame) _(PICs) _(SlowCalls) _(Analysis) _(Regalloc) _(Inlining) _(Recompile)
41621 # 32 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/Logging.h"
41622 enum JaegerSpewChannel {
41623 #define _(name) JSpew_ ##name,
41624 JSpew_Abort, JSpew_Scripts, JSpew_Prof, JSpew_JSOps, JSpew_Insns, JSpew_VMFrame, JSpew_PICs, JSpew_SlowCalls, JSpew_Analysis, JSpew_Regalloc, JSpew_Inlining, JSpew_Recompile,
41628 # 88 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/Logging.h"
41629 static inline void JaegerSpew(JaegerSpewChannel channel, const char *fmt, ...)
41636 # 43 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h" 2
41638 #define ASSEMBLER_HAS_CONSTANT_POOL 1
41641 # 94 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h"
41642 template <int maxPoolSize, int barrierSize, int maxInstructionSize, class AssemblerType>
41643 class AssemblerBufferWithConstantPool: public AssemblerBuffer {
41644 typedef SegmentedVector<uint32_t, 512> LoadOffsets;
41652 AssemblerBufferWithConstantPool()
41653 : AssemblerBuffer()
41655 , m_maxDistance(maxPoolSize)
41656 , m_lastConstDelta(0)
41659 m_pool = static_cast<uint32_t*>(malloc(maxPoolSize));
41660 m_mask = static_cast<char*>(malloc(maxPoolSize / sizeof(uint32_t)));
41663 ~AssemblerBufferWithConstantPool()
41669 void ensureSpace(int space)
41671 flushIfNoSpaceFor(space);
41672 AssemblerBuffer::ensureSpace(space);
41675 void ensureSpace(int insnSpace, int constSpace)
41677 flushIfNoSpaceFor(insnSpace, constSpace);
41678 AssemblerBuffer::ensureSpace(insnSpace);
41681 bool isAligned(int alignment)
41683 flushIfNoSpaceFor(alignment);
41684 return AssemblerBuffer::isAligned(alignment);
41687 void putByteUnchecked(int value)
41689 AssemblerBuffer::putByteUnchecked(value);
41693 void putByte(int value)
41695 flushIfNoSpaceFor(1);
41696 AssemblerBuffer::putByte(value);
41700 void putShortUnchecked(int value)
41702 AssemblerBuffer::putShortUnchecked(value);
41706 void putShort(int value)
41708 flushIfNoSpaceFor(2);
41709 AssemblerBuffer::putShort(value);
41713 void putIntUnchecked(int value)
41715 AssemblerBuffer::putIntUnchecked(value);
41719 void putInt(int value)
41721 flushIfNoSpaceFor(4);
41722 AssemblerBuffer::putInt(value);
41726 void putInt64Unchecked(int64_t value)
41728 AssemblerBuffer::putInt64Unchecked(value);
41734 flushIfNoSpaceFor(maxInstructionSize, sizeof(uint64_t));
41735 return AssemblerBuffer::size();
41738 int uncheckedSize()
41740 return AssemblerBuffer::size();
41743 void* executableAllocAndCopy(ExecutableAllocator* allocator, ExecutablePool** poolp, CodeKind kind)
41745 flushConstantPool(false);
41746 return AssemblerBuffer::executableAllocAndCopy(allocator, poolp, kind);
41749 void putIntWithConstantInt(uint32_t insn, uint32_t constant, bool isReusable = false)
41751 flushIfNoSpaceFor(4, 4);
41753 m_loadOffsets.append(AssemblerBuffer::size());
41755 for (int i = 0; i < m_numConsts; ++i) {
41756 if (m_mask[i] == ReusableConst && m_pool[i] == constant) {
41757 AssemblerBuffer::putInt(AssemblerType::patchConstantPoolLoad(insn, i));
41763 m_pool[m_numConsts] = constant;
41764 m_mask[m_numConsts] = static_cast<char>(isReusable ? ReusableConst : UniqueConst);
41766 AssemblerBuffer::putInt(AssemblerType::patchConstantPoolLoad(insn, m_numConsts));
41769 correctDeltas(4, 4);
41773 void flushWithoutBarrier(bool isForced = false)
41776 if (isForced || (5 * m_numConsts * sizeof(uint32_t)) > (3 * maxPoolSize))
41777 flushConstantPool(false);
41780 uint32_t* poolAddress()
41785 int sizeOfConstantPool()
41787 return m_numConsts;
41792 return m_flushCount;
41796 void correctDeltas(int insnSize)
41798 m_maxDistance -= insnSize;
41800 m_lastConstDelta -= insnSize;
41801 if (m_lastConstDelta < 0)
41802 m_lastConstDelta = 0;
41805 void correctDeltas(int insnSize, int constSize)
41807 correctDeltas(insnSize);
41809 m_maxDistance -= m_lastConstDelta;
41811 m_lastConstDelta = constSize;
41814 void flushConstantPool(bool useBarrier = true)
41816 js::JaegerSpew(js::JSpew_Insns, " -- FLUSHING CONSTANT POOL WITH %d CONSTANTS --\n",
41818 if (m_numConsts == 0)
41821 int alignPool = (AssemblerBuffer::size() + (useBarrier ? barrierSize : 0)) & (sizeof(uint64_t) - 1);
41824 alignPool = sizeof(uint64_t) - alignPool;
41828 AssemblerBuffer::putInt(AssemblerType::placeConstantPoolBarrier(m_numConsts * sizeof(uint32_t) + alignPool));
41832 AssemblerBuffer::putByte(AssemblerType::padForAlign8);
41834 AssemblerBuffer::putShort(AssemblerType::padForAlign16);
41836 AssemblerBuffer::putInt(AssemblerType::padForAlign32);
41839 int constPoolOffset = AssemblerBuffer::size();
41840 append(reinterpret_cast<char*>(m_pool), m_numConsts * sizeof(uint32_t));
41843 for (LoadOffsets::Iterator iter = m_loadOffsets.begin(); iter != m_loadOffsets.end(); ++iter) {
41844 void* loadAddr = reinterpret_cast<void*>(m_buffer + *iter);
41845 AssemblerType::patchConstantPoolLoad(loadAddr, reinterpret_cast<void*>(m_buffer + constPoolOffset));
41848 m_loadOffsets.clear();
41850 m_maxDistance = maxPoolSize;
41855 void flushIfNoSpaceFor(int nextInsnSize)
41857 if (m_numConsts == 0) {
41858 m_maxDistance = maxPoolSize;
41861 int lastConstDelta = m_lastConstDelta > nextInsnSize ? m_lastConstDelta - nextInsnSize : 0;
41862 if ((m_maxDistance < nextInsnSize + lastConstDelta + barrierSize + (int)sizeof(uint32_t)))
41863 flushConstantPool();
41866 void flushIfNoSpaceFor(int nextInsnSize, int nextConstSize)
41868 if (m_numConsts == 0) {
41869 m_maxDistance = maxPoolSize;
41872 if ((m_maxDistance < nextInsnSize + m_lastConstDelta + nextConstSize + barrierSize + (int)sizeof(uint32_t)) ||
41873 (m_numConsts * sizeof(uint32_t) + nextConstSize >= maxPoolSize))
41874 flushConstantPool();
41879 LoadOffsets m_loadOffsets;
41883 int m_lastConstDelta;
41888 # 42 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/ARMAssembler.h" 2
41889 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/wtf/Assertions.h" 1
41890 # 43 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/ARMAssembler.h" 2
41895 # 57 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/ARMAssembler.h"
41896 #define MAYBE_PAD ""
41897 #define FIXME_INSN_PRINTING ((void) 0)
41905 typedef uint32_t ARMWord;
41907 namespace ARMRegisters {
41969 inline FPRegisterID floatShadow(FPRegisterID s)
41971 return (FPRegisterID)(s*2);
41973 inline FPRegisterID doubleShadow(FPRegisterID d)
41975 return (FPRegisterID)(d / 2);
41979 class ARMAssembler {
41990 typedef ARMRegisters::RegisterID RegisterID;
41991 typedef ARMRegisters::FPRegisterID FPRegisterID;
41992 typedef AssemblerBufferWithConstantPool<2048, 4, 4, ARMAssembler> ARMBuffer;
41993 typedef SegmentedVector<int, 64> Jumps;
41995 unsigned char *buffer() const { return m_buffer.buffer(); }
41996 bool oom() const { return m_buffer.oom(); }
42037 FCPYD = 0x0eb00b40,
42038 FADDD = 0x0e300b00,
42039 FNEGD = 0x0eb10b40,
42040 FABSD = 0x0eb00bc0,
42041 FDIVD = 0x0e800b00,
42042 FSUBD = 0x0e300b40,
42043 FMULD = 0x0e200b00,
42044 FCMPD = 0x0eb40b40,
42045 FSQRTD = 0x0eb10bc0,
42050 STMDB = 0x09200000,
42051 LDMIA = 0x08b00000,
42063 ,MOVW = 0x03000000,
42069 OP2_IMM = (1 << 25),
42070 OP2_IMMh = (1 << 22),
42071 OP2_INV_IMM = (1 << 26),
42072 SET_CC = (1 << 20),
42073 OP2_OFSREG = (1 << 25),
42075 DT_BYTE = (1 << 22),
42078 DT_PRE = (1 << 24),
42082 HDT_IMM = (1 << 22),
42085 DT_LOAD = (1 << 20)
42090 BRANCH_MASK = 0x00ffffff,
42091 NONARM = 0xf0000000,
42092 SDT_MASK = 0x0c000000,
42093 SDT_OFFSET_MASK = 0xfff
42097 BOFFSET_MIN = -0x00800000,
42098 BOFFSET_MAX = 0x007fffff,
42103 padForAlign8 = (int)0x00,
42104 padForAlign16 = (int)0x0000,
42105 padForAlign32 = (int)0xe12fff7f
42115 static const ARMWord INVALID_IMM = 0xf0000000;
42116 static const ARMWord InvalidBranchTarget = 0xffffffff;
42117 static const int DefaultPrefetching = 2;
42120 friend class ARMAssembler;
42137 friend class ARMAssembler;
42145 bool isUsed() const { return m_used; }
42146 void used() { m_used = true; }
42147 bool isValid() const { return m_offset != -1; }
42162 void emitInst(ARMWord op, int rd, int rn, ARMWord op2)
42165 m_buffer.putInt(op | RN(rn) | RD(rd) | op2);
42173 ARMWord getOp2RotLSL(int lsl)
42178 return (-(lsl/2) & 0xf) << 8;
42181 void and_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42183 spewInsWithOp2("and", cc, rd, rn, op2);
42184 emitInst(static_cast<ARMWord>(cc) | AND, rd, rn, op2);
42187 void ands_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42189 spewInsWithOp2("ands", cc, rd, rn, op2);
42190 emitInst(static_cast<ARMWord>(cc) | AND | SET_CC, rd, rn, op2);
42193 void eor_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42195 spewInsWithOp2("eor", cc, rd, rn, op2);
42196 emitInst(static_cast<ARMWord>(cc) | EOR, rd, rn, op2);
42199 void eors_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42201 spewInsWithOp2("eors", cc, rd, rn, op2);
42202 emitInst(static_cast<ARMWord>(cc) | EOR | SET_CC, rd, rn, op2);
42205 void sub_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42207 spewInsWithOp2("sub", cc, rd, rn, op2);
42208 emitInst(static_cast<ARMWord>(cc) | SUB, rd, rn, op2);
42211 void subs_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42213 spewInsWithOp2("subs", cc, rd, rn, op2);
42214 emitInst(static_cast<ARMWord>(cc) | SUB | SET_CC, rd, rn, op2);
42217 void rsb_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42219 spewInsWithOp2("rsb", cc, rd, rn, op2);
42220 emitInst(static_cast<ARMWord>(cc) | RSB, rd, rn, op2);
42223 void rsbs_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42225 spewInsWithOp2("rsbs", cc, rd, rn, op2);
42226 emitInst(static_cast<ARMWord>(cc) | RSB | SET_CC, rd, rn, op2);
42229 void add_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42231 spewInsWithOp2("add", cc, rd, rn, op2);
42232 emitInst(static_cast<ARMWord>(cc) | ADD, rd, rn, op2);
42235 void adds_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42237 spewInsWithOp2("adds", cc, rd, rn, op2);
42238 emitInst(static_cast<ARMWord>(cc) | ADD | SET_CC, rd, rn, op2);
42241 void adc_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42243 spewInsWithOp2("adc", cc, rd, rn, op2);
42244 emitInst(static_cast<ARMWord>(cc) | ADC, rd, rn, op2);
42247 void adcs_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42249 spewInsWithOp2("adcs", cc, rd, rn, op2);
42250 emitInst(static_cast<ARMWord>(cc) | ADC | SET_CC, rd, rn, op2);
42253 void sbc_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42255 spewInsWithOp2("sbc", cc, rd, rn, op2);
42256 emitInst(static_cast<ARMWord>(cc) | SBC, rd, rn, op2);
42259 void sbcs_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42261 spewInsWithOp2("sbcs", cc, rd, rn, op2);
42262 emitInst(static_cast<ARMWord>(cc) | SBC | SET_CC, rd, rn, op2);
42265 void rsc_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42267 spewInsWithOp2("rsc", cc, rd, rn, op2);
42268 emitInst(static_cast<ARMWord>(cc) | RSC, rd, rn, op2);
42271 void rscs_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42273 spewInsWithOp2("rscs", cc, rd, rn, op2);
42274 emitInst(static_cast<ARMWord>(cc) | RSC | SET_CC, rd, rn, op2);
42277 void tst_r(int rn, ARMWord op2, Condition cc = AL)
42279 spewInsWithOp2("tst", cc, rn, op2);
42280 emitInst(static_cast<ARMWord>(cc) | TST | SET_CC, 0, rn, op2);
42283 void teq_r(int rn, ARMWord op2, Condition cc = AL)
42285 spewInsWithOp2("teq", cc, rn, op2);
42286 emitInst(static_cast<ARMWord>(cc) | TEQ | SET_CC, 0, rn, op2);
42289 void cmp_r(int rn, ARMWord op2, Condition cc = AL)
42291 spewInsWithOp2("cmp", cc, rn, op2);
42292 emitInst(static_cast<ARMWord>(cc) | CMP | SET_CC, 0, rn, op2);
42295 void cmn_r(int rn, ARMWord op2, Condition cc = AL)
42297 spewInsWithOp2("cmn", cc, rn, op2);
42298 emitInst(static_cast<ARMWord>(cc) | CMN | SET_CC, 0, rn, op2);
42301 void orr_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42303 spewInsWithOp2("orr", cc, rd, rn, op2);
42304 emitInst(static_cast<ARMWord>(cc) | ORR, rd, rn, op2);
42307 void orrs_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42309 spewInsWithOp2("orrs", cc, rd, rn, op2);
42310 emitInst(static_cast<ARMWord>(cc) | ORR | SET_CC, rd, rn, op2);
42313 void mov_r(int rd, ARMWord op2, Condition cc = AL)
42315 spewInsWithOp2("mov", cc, rd, op2);
42316 emitInst(static_cast<ARMWord>(cc) | MOV, rd, ARMRegisters::r0, op2);
42320 void movw_r(int rd, ARMWord op2, Condition cc = AL)
42323 js::JaegerSpew(js::JSpew_Insns,
42324 " %s" "%-15s %s, 0x%04x\n", "", "movw", nameGpReg(rd), (op2 & 0xfff) | ((op2 >> 4) & 0xf000));
42325 m_buffer.putInt(static_cast<ARMWord>(cc) | MOVW | RD(rd) | op2);
42328 void movt_r(int rd, ARMWord op2, Condition cc = AL)
42331 js::JaegerSpew(js::JSpew_Insns,
42332 " %s" "%-15s %s, 0x%04x\n", "", "movt", nameGpReg(rd), (op2 & 0xfff) | ((op2 >> 4) & 0xf000));
42333 m_buffer.putInt(static_cast<ARMWord>(cc) | MOVT | RD(rd) | op2);
42337 void movs_r(int rd, ARMWord op2, Condition cc = AL)
42339 spewInsWithOp2("movs", cc, rd, op2);
42340 emitInst(static_cast<ARMWord>(cc) | MOV | SET_CC, rd, ARMRegisters::r0, op2);
42343 void bic_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42345 spewInsWithOp2("bic", cc, rd, rn, op2);
42346 emitInst(static_cast<ARMWord>(cc) | BIC, rd, rn, op2);
42349 void bics_r(int rd, int rn, ARMWord op2, Condition cc = AL)
42351 spewInsWithOp2("bics", cc, rd, rn, op2);
42352 emitInst(static_cast<ARMWord>(cc) | BIC | SET_CC, rd, rn, op2);
42355 void mvn_r(int rd, ARMWord op2, Condition cc = AL)
42357 spewInsWithOp2("mvn", cc, rd, op2);
42358 emitInst(static_cast<ARMWord>(cc) | MVN, rd, ARMRegisters::r0, op2);
42361 void mvns_r(int rd, ARMWord op2, Condition cc = AL)
42363 spewInsWithOp2("mvns", cc, rd, op2);
42364 emitInst(static_cast<ARMWord>(cc) | MVN | SET_CC, rd, ARMRegisters::r0, op2);
42367 void mul_r(int rd, int rn, int rm, Condition cc = AL)
42369 spewInsWithOp2("mul", cc, rd, rn, static_cast<ARMWord>(rm));
42370 m_buffer.putInt(static_cast<ARMWord>(cc) | MUL | RN(rd) | RS(rn) | RM(rm));
42373 void muls_r(int rd, int rn, int rm, Condition cc = AL)
42375 spewInsWithOp2("muls", cc, rd, rn, static_cast<ARMWord>(rm));
42376 m_buffer.putInt(static_cast<ARMWord>(cc) | MUL | SET_CC | RN(rd) | RS(rn) | RM(rm));
42379 void mull_r(int rdhi, int rdlo, int rn, int rm, Condition cc = AL)
42381 js::JaegerSpew(js::JSpew_Insns,
42382 " %s" "%-15s %s, %s, %s, %s\n", "", "mull", nameGpReg(rdlo), nameGpReg(rdhi), nameGpReg(rn), nameGpReg(rm));
42383 m_buffer.putInt(static_cast<ARMWord>(cc) | MULL | RN(rdhi) | RD(rdlo) | RS(rn) | RM(rm));
42387 void ldr_imm(int rd, ARMWord imm, Condition cc = AL)
42390 snprintf(mnemonic, 16, "ldr%s", nameCC(cc));
42391 js::JaegerSpew(js::JSpew_Insns,
42392 " %s" "%-15s %s, =0x%x @ (%d) (reusable pool entry)\n", "", mnemonic, nameGpReg(rd), imm, static_cast<int32_t>(imm));
42393 m_buffer.putIntWithConstantInt(static_cast<ARMWord>(cc) | DTR | DT_LOAD | DT_UP | RN(ARMRegisters::pc) | RD(rd), imm, true);
42396 void ldr_un_imm(int rd, ARMWord imm, Condition cc = AL)
42399 snprintf(mnemonic, 16, "ldr%s", nameCC(cc));
42400 js::JaegerSpew(js::JSpew_Insns,
42401 " %s" "%-15s %s, =0x%x @ (%d)\n", "", mnemonic, nameGpReg(rd), imm, static_cast<int32_t>(imm));
42402 m_buffer.putIntWithConstantInt(static_cast<ARMWord>(cc) | DTR | DT_LOAD | DT_UP | RN(ARMRegisters::pc) | RD(rd), imm);
42405 void mem_imm_off(bool isLoad, bool isSigned, int size, bool posOffset,
42406 int rd, int rb, ARMWord offset, Condition cc = AL)
42409 char const * mnemonic_act = (isLoad) ? ("ld") : ("st");
42410 char const * mnemonic_sign = (isSigned) ? ("s") : ("");
42412 char const * mnemonic_size = __null;
42413 switch (size / 8) {
42415 mnemonic_size = "b";
42418 mnemonic_size = "h";
42421 mnemonic_size = "";
42424 char const * off_sign = (posOffset) ? ("+") : ("-");
42425 js::JaegerSpew(js::JSpew_Insns,
42426 " %s" "%sr%s%s %s, [%s, #%s%u]\n",
42427 "", mnemonic_act, mnemonic_sign, mnemonic_size,
42428 nameGpReg(rd), nameGpReg(rb), off_sign, offset);
42429 if (size == 32 || (size == 8 && !isSigned)) {
42431 emitInst(static_cast<ARMWord>(cc) | DTR |
42432 (isLoad ? DT_LOAD : 0) |
42433 (size == 8 ? DT_BYTE : 0) |
42434 (posOffset ? DT_UP : 0), rd, rb, offset);
42437 emitInst(static_cast<ARMWord>(cc) | DTRH | HDT_IMM | DT_PRE |
42438 (isLoad ? DT_LOAD : 0) |
42439 (size == 16 ? HDT_UH : 0) |
42440 (isSigned ? HDT_S : 0) |
42441 (posOffset ? DT_UP : 0), rd, rb, offset);
42445 void mem_reg_off(bool isLoad, bool isSigned, int size, bool posOffset, int rd, int rb, int rm, Condition cc = AL)
42447 char const * mnemonic_act = (isLoad) ? ("ld") : ("st");
42448 char const * mnemonic_sign = (isSigned) ? ("s") : ("");
42450 char const * mnemonic_size = __null;
42451 switch (size / 8) {
42453 mnemonic_size = "b";
42456 mnemonic_size = "h";
42459 mnemonic_size = "";
42462 char const * off_sign = (posOffset) ? ("+") : ("-");
42463 js::JaegerSpew(js::JSpew_Insns,
42464 " %s" "%sr%s%s %s, [%s, #%s%s]\n", "", mnemonic_act, mnemonic_sign, mnemonic_size,
42465 nameGpReg(rd), nameGpReg(rb), off_sign, nameGpReg(rm));
42466 if (size == 32 || (size == 8 && !isSigned)) {
42468 emitInst(static_cast<ARMWord>(cc) | DTR |
42469 (isLoad ? DT_LOAD : 0) |
42470 (size == 8 ? DT_BYTE : 0) |
42471 (posOffset ? DT_UP : 0) |
42472 OP2_OFSREG, rd, rb, rm);
42475 emitInst(static_cast<ARMWord>(cc) | DTRH | DT_PRE |
42476 (isLoad ? DT_LOAD : 0) |
42477 (size == 16 ? HDT_UH : 0) |
42478 (isSigned ? HDT_S : 0) |
42479 (posOffset ? DT_UP : 0), rd, rb, rm);
42486 void dtr_u(bool isLoad, int rd, int rb, ARMWord offset, Condition cc = AL)
42488 char const * mnemonic = (isLoad) ? ("ldr") : ("str");
42489 js::JaegerSpew(js::JSpew_Insns,
42490 " %s" "%-15s %s, [%s, #+%u]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), offset);
42491 emitInst(static_cast<ARMWord>(cc) | DTR | (isLoad ? DT_LOAD : 0) | DT_UP, rd, rb, offset);
42497 void dtr_ur(bool isLoad, int rd, int rb, int rm, Condition cc = AL)
42499 char const * mnemonic = (isLoad) ? ("ldr") : ("str");
42500 js::JaegerSpew(js::JSpew_Insns,
42501 " %s" "%-15s %s, [%s, +%s]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), nameGpReg(rm));
42502 emitInst(static_cast<ARMWord>(cc) | DTR | (isLoad ? DT_LOAD : 0) | DT_UP | OP2_OFSREG, rd, rb, rm);
42508 void dtr_d(bool isLoad, int rd, int rb, ARMWord offset, Condition cc = AL)
42510 char const * mnemonic = (isLoad) ? ("ldr") : ("str");
42511 js::JaegerSpew(js::JSpew_Insns,
42512 " %s" "%-15s %s, [%s, #-%u]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), offset);
42513 emitInst(static_cast<ARMWord>(cc) | DTR | (isLoad ? DT_LOAD : 0), rd, rb, offset);
42519 void dtr_dr(bool isLoad, int rd, int rb, int rm, Condition cc = AL)
42521 char const * mnemonic = (isLoad) ? ("ldr") : ("str");
42522 js::JaegerSpew(js::JSpew_Insns,
42523 " %s" "%-15s %s, [%s, -%s]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), nameGpReg(rm));
42524 emitInst(static_cast<ARMWord>(cc) | DTR | (isLoad ? DT_LOAD : 0) | OP2_OFSREG, rd, rb, rm);
42530 void dtrb_u(bool isLoad, int rd, int rb, ARMWord offset, Condition cc = AL)
42532 char const * mnemonic = (isLoad) ? ("ldrb") : ("strb");
42533 js::JaegerSpew(js::JSpew_Insns,
42534 " %s" "%-15s %s, [%s, #+%u]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), offset);
42535 emitInst(static_cast<ARMWord>(cc) | DTR | DT_BYTE | (isLoad ? DT_LOAD : 0) | DT_UP, rd, rb, offset);
42541 void dtrsb_u(bool isLoad, int rd, int rb, ARMWord offset, Condition cc = AL)
42543 char const * mnemonic = (isLoad) ? ("ldrsb") : ("strb");
42544 js::JaegerSpew(js::JSpew_Insns,
42545 " %s" "%-15s %s, [%s, #+%u]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), offset);
42546 emitInst(static_cast<ARMWord>(cc) | DTRH | HDT_S | (isLoad ? DT_LOAD : 0) | DT_UP, rd, rb, offset);
42552 void dtrb_ur(bool isLoad, int rd, int rb, int rm, Condition cc = AL)
42554 char const * mnemonic = (isLoad) ? ("ldrb") : ("strb");
42555 js::JaegerSpew(js::JSpew_Insns,
42556 " %s" "%-15s %s, [%s, +%s]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), nameGpReg(rm));
42557 emitInst(static_cast<ARMWord>(cc) | DTR | DT_BYTE | (isLoad ? DT_LOAD : 0) | DT_UP | OP2_OFSREG, rd, rb, rm);
42563 void dtrb_d(bool isLoad, int rd, int rb, ARMWord offset, Condition cc = AL)
42565 char const * mnemonic = (isLoad) ? ("ldrb") : ("strb");
42566 js::JaegerSpew(js::JSpew_Insns,
42567 " %s" "%-15s %s, [%s, #-%u]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), offset);
42568 emitInst(static_cast<ARMWord>(cc) | DTR | DT_BYTE | (isLoad ? DT_LOAD : 0), rd, rb, offset);
42574 void dtrsb_d(bool isLoad, int rd, int rb, ARMWord offset, Condition cc = AL)
42577 char const * mnemonic = (isLoad) ? ("ldrsb") : ("strb");
42578 js::JaegerSpew(js::JSpew_Insns,
42579 " %s" "%-15s %s, [%s, #-%u]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), offset);
42580 emitInst(static_cast<ARMWord>(cc) | DTRH | HDT_S | (isLoad ? DT_LOAD : 0), rd, rb, offset);
42586 void dtrb_dr(bool isLoad, int rd, int rb, int rm, Condition cc = AL)
42588 char const * mnemonic = (isLoad) ? ("ldrb") : ("strb");
42589 js::JaegerSpew(js::JSpew_Insns,
42590 " %s" "%-15s %s, [%s, -%s]\n", "", mnemonic, nameGpReg(rd), nameGpReg(rb), nameGpReg(rm));
42591 emitInst(static_cast<ARMWord>(cc) | DTR | DT_BYTE | (isLoad ? DT_LOAD : 0) | OP2_OFSREG, rd, rb, rm);
42594 void ldrh_r(int rd, int rb, int rm, Condition cc = AL)
42596 js::JaegerSpew(js::JSpew_Insns,
42597 " %s" "%-15s %s, [%s, +%s]\n", "", "ldrh", nameGpReg(rd), nameGpReg(rb), nameGpReg(rm));
42598 emitInst(static_cast<ARMWord>(cc) | LDRH | HDT_UH | DT_UP | DT_PRE, rd, rb, rm);
42601 void ldrh_d(int rd, int rb, ARMWord offset, Condition cc = AL)
42603 js::JaegerSpew(js::JSpew_Insns,
42604 " %s" "%-15s %s, [%s, #-%u]\n", "", "ldrh", nameGpReg(rd), nameGpReg(rb), offset);
42605 emitInst(static_cast<ARMWord>(cc) | LDRH | HDT_UH | DT_PRE, rd, rb, offset);
42608 void ldrh_u(int rd, int rb, ARMWord offset, Condition cc = AL)
42610 js::JaegerSpew(js::JSpew_Insns,
42611 " %s" "%-15s %s, [%s, #+%u]\n", "", "ldrh", nameGpReg(rd), nameGpReg(rb), offset);
42612 emitInst(static_cast<ARMWord>(cc) | LDRH | HDT_UH | DT_UP | DT_PRE, rd, rb, offset);
42615 void ldrsh_d(int rd, int rb, ARMWord offset, Condition cc = AL)
42617 js::JaegerSpew(js::JSpew_Insns,
42618 " %s" "%-15s %s, [%s, #-%u]\n", "", "ldrsh", nameGpReg(rd), nameGpReg(rb), offset);
42619 emitInst(static_cast<ARMWord>(cc) | LDRH | HDT_UH | HDT_S | DT_PRE, rd, rb, offset);
42622 void ldrsh_u(int rd, int rb, ARMWord offset, Condition cc = AL)
42624 js::JaegerSpew(js::JSpew_Insns,
42625 " %s" "%-15s %s, [%s, #+%u]\n", "", "ldrsh", nameGpReg(rd), nameGpReg(rb), offset);
42626 emitInst(static_cast<ARMWord>(cc) | LDRH | HDT_UH | HDT_S | DT_UP | DT_PRE, rd, rb, offset);
42629 void strh_r(int rb, int rm, int rd, Condition cc = AL)
42631 js::JaegerSpew(js::JSpew_Insns,
42632 " %s" "%-15s %s, [%s, +%s]\n", "", "strh", nameGpReg(rd), nameGpReg(rb), nameGpReg(rm));
42633 emitInst(static_cast<ARMWord>(cc) | STRH | HDT_UH | DT_UP | DT_PRE, rd, rb, rm);
42636 void push_r(int reg, Condition cc = AL)
42638 js::JaegerSpew(js::JSpew_Insns,
42639 " %s" "%-15s {%s}\n", "", "push", nameGpReg(reg));
42641 m_buffer.putInt(cc | DTR | DT_WB | RN(ARMRegisters::sp) | RD(reg) | 0x4);
42644 void pop_r(int reg, Condition cc = AL)
42646 js::JaegerSpew(js::JSpew_Insns,
42647 " %s" "%-15s {%s}\n", "", "pop", nameGpReg(reg));
42649 m_buffer.putInt(cc | (DTR ^ DT_PRE) | DT_LOAD | DT_UP | RN(ARMRegisters::sp) | RD(reg) | 0x4);
42652 inline void poke_r(int reg, Condition cc = AL)
42654 dtr_d(false, ARMRegisters::sp, 0, reg, cc);
42657 inline void peek_r(int reg, Condition cc = AL)
42659 dtr_u(true, reg, ARMRegisters::sp, 0, cc);
42665 void clz_r(int rd, int rm, Condition cc = AL)
42667 spewInsWithOp2("clz", cc, rd, static_cast<ARMWord>(rm));
42668 m_buffer.putInt(static_cast<ARMWord>(cc) | CLZ | RD(rd) | RM(rm));
42672 void bkpt(ARMWord value)
42675 js::JaegerSpew(js::JSpew_Insns,
42676 " %s" "%-15s #0x%04x\n", "", "bkpt", value);
42677 m_buffer.putInt(BKPT | ((value & 0xfff0) << 4) | (value & 0xf));
42684 void bx(int rm, Condition cc = AL)
42689 " %s" "bx%-13s %s\n", "", nameCC(cc), nameGpReg(rm));
42690 emitInst(static_cast<ARMWord>(cc) | BX, 0, 0, RM(rm));
42696 JmpSrc blx(int rm, Condition cc = AL)
42699 int s = m_buffer.uncheckedSize();
42702 " %s" "blx%-12s %s\n", "", nameCC(cc), nameGpReg(rm));
42703 emitInst(static_cast<ARMWord>(cc) | BLX, 0, 0, RM(rm));
42714 static ARMWord lsl(int reg, ARMWord value)
42718 return reg | (value << 7) | (LSL << 5);
42721 static ARMWord lsr(int reg, ARMWord value)
42725 return reg | (value << 7) | (LSR << 5);
42728 static ARMWord asr(int reg, ARMWord value)
42732 return reg | (value << 7) | (ASR << 5);
42735 static ARMWord lsl_r(int reg, int shiftReg)
42739 return reg | (shiftReg << 8) | (LSL << 5) | 0x10;
42742 static ARMWord lsr_r(int reg, int shiftReg)
42746 return reg | (shiftReg << 8) | (LSR << 5) | 0x10;
42749 static ARMWord asr_r(int reg, int shiftReg)
42753 return reg | (shiftReg << 8) | (ASR << 5) | 0x10;
42758 void forceFlushConstantPool()
42760 m_buffer.flushWithoutBarrier(true);
42765 return m_buffer.size();
42768 void ensureSpace(int insnSpace, int constSpace)
42770 m_buffer.ensureSpace(insnSpace, constSpace);
42773 void ensureSpace(int space)
42775 m_buffer.ensureSpace(space);
42778 int sizeOfConstantPool()
42780 return m_buffer.sizeOfConstantPool();
42785 return m_buffer.flushCount();
42790 JmpDst label(m_buffer.size());
42791 js::JaegerSpew(js::JSpew_Insns, " %s" "#label ((%d))\n", "", label.m_offset);
42795 JmpDst align(int alignment)
42797 while (!m_buffer.isAligned(alignment))
42798 mov_r(ARMRegisters::r0, ARMRegisters::r0);
42803 JmpSrc loadBranchTarget(int rd, Condition cc = AL, int useConstantPool = 0)
42809 ensureSpace(sizeof(ARMWord), sizeof(ARMWord));
42810 int s = m_buffer.uncheckedSize();
42811 ldr_un_imm(rd, InvalidBranchTarget, cc);
42812 m_jumps.append(s | (useConstantPool & 0x1));
42816 JmpSrc jmp(Condition cc = AL, int useConstantPool = 0)
42818 return loadBranchTarget(ARMRegisters::pc, cc, useConstantPool);
42821 void* executableAllocAndCopy(ExecutableAllocator* allocator, ExecutablePool **poolp, CodeKind kind);
42822 void executableCopy(void* buffer);
42823 void fixUpOffsets(void* buffer);
42827 static ARMWord* getLdrImmAddress(ARMWord* insn)
42831 if ((*insn & 0x0f7f0000) != 0x051f0000) {
42840 ARMWord addr = reinterpret_cast<ARMWord>(insn) + DefaultPrefetching * sizeof(ARMWord);
42842 return reinterpret_cast<ARMWord*>(addr + (*insn & SDT_OFFSET_MASK));
42843 return reinterpret_cast<ARMWord*>(addr - (*insn & SDT_OFFSET_MASK));
42846 static ARMWord* getLdrImmAddressOnPool(ARMWord* insn, uint32_t* constPool)
42852 return reinterpret_cast<ARMWord*>(constPool + ((*insn & SDT_OFFSET_MASK) >> 1));
42853 return getLdrImmAddress(insn);
42856 static void patchPointerInternal(intptr_t from, void* to)
42858 ARMWord* insn = reinterpret_cast<ARMWord*>(from);
42859 ARMWord* addr = getLdrImmAddress(insn);
42860 *addr = reinterpret_cast<ARMWord>(to);
42863 static ARMWord patchConstantPoolLoad(ARMWord load, ARMWord value)
42865 value = (value << 1) + 1;
42867 return (load & ~0xfff) | value;
42870 static void patchConstantPoolLoad(void* loadAddr, void* constPoolAddr);
42874 static void linkPointer(void* code, JmpDst from, void* to)
42876 js::JaegerSpew(js::JSpew_Insns,
42877 " " "##linkPointer ((%p + %#x)) points to ((%p))\n",
42878 code, from.m_offset, to);
42880 patchPointerInternal(reinterpret_cast<intptr_t>(code) + from.m_offset, to);
42883 static void repatchInt32(void* from, int32_t to)
42885 js::JaegerSpew(js::JSpew_Insns,
42886 " " "##repatchInt32 ((%p)) holds ((%#x))\n",
42889 patchPointerInternal(reinterpret_cast<intptr_t>(from), reinterpret_cast<void*>(to));
42892 static void repatchPointer(void* from, void* to)
42894 js::JaegerSpew(js::JSpew_Insns,
42895 " " "##repatchPointer ((%p)) points to ((%p))\n",
42898 patchPointerInternal(reinterpret_cast<intptr_t>(from), to);
42901 static void repatchLoadPtrToLEA(void* from)
42905 ARMWord* insn = reinterpret_cast<ARMWord*>(from);
42908 *insn = (*insn & 0xf00ff0ff) | 0x02800000;
42909 ExecutableAllocator::cacheFlush(insn, sizeof(ARMWord));
42912 static void repatchLEAToLoadPtr(void* from)
42915 ARMWord* insn = reinterpret_cast<ARMWord*>(from);
42916 if ((*insn & 0x0ff00f00) == 0x05900000)
42921 *insn = (*insn & 0xf00ff0ff) | 0x05900000;
42922 ExecutableAllocator::cacheFlush(insn, sizeof(ARMWord));
42927 void linkJump(JmpSrc from, JmpDst to)
42929 ARMWord code = reinterpret_cast<ARMWord>(m_buffer.data());
42930 ARMWord* insn = reinterpret_cast<ARMWord*>(code + from.m_offset);
42931 ARMWord* addr = getLdrImmAddressOnPool(insn, m_buffer.poolAddress());
42933 js::JaegerSpew(js::JSpew_Insns,
42934 " %s" "##linkJump ((%#x)) jumps to ((%#x))\n", "",
42935 from.m_offset, to.m_offset);
42937 *addr = to.m_offset;
42940 static void linkJump(void* code, JmpSrc from, void* to)
42942 js::JaegerSpew(js::JSpew_Insns,
42943 " " "##linkJump ((%p + %#x)) jumps to ((%p))\n",
42944 code, from.m_offset, to);
42946 patchPointerInternal(reinterpret_cast<intptr_t>(code) + from.m_offset, to);
42949 static void relinkJump(void* from, void* to)
42951 js::JaegerSpew(js::JSpew_Insns,
42952 " " "##relinkJump ((%p)) jumps to ((%p))\n",
42955 patchPointerInternal(reinterpret_cast<intptr_t>(from), to);
42958 static bool canRelinkJump(void* from, void* to)
42963 static void linkCall(void* code, JmpSrc from, void* to)
42965 js::JaegerSpew(js::JSpew_Insns,
42966 " " "##linkCall ((%p + %#x)) jumps to ((%p))\n",
42967 code, from.m_offset, to);
42969 patchPointerInternal(reinterpret_cast<intptr_t>(code) + from.m_offset, to);
42972 static void relinkCall(void* from, void* to)
42974 js::JaegerSpew(js::JSpew_Insns,
42975 " " "##relinkCall ((%p)) jumps to ((%p))\n",
42978 patchPointerInternal(reinterpret_cast<intptr_t>(from), to);
42983 static void* getRelocatedAddress(void* code, JmpSrc jump)
42985 return reinterpret_cast<void*>(reinterpret_cast<ARMWord*>(code) + jump.m_offset / sizeof(ARMWord));
42988 static void* getRelocatedAddress(void* code, JmpDst label)
42990 return reinterpret_cast<void*>(reinterpret_cast<ARMWord*>(code) + label.m_offset / sizeof(ARMWord));
42995 static int getDifferenceBetweenLabels(JmpDst from, JmpSrc to)
42997 return to.m_offset - from.m_offset;
43000 static int getDifferenceBetweenLabels(JmpDst from, JmpDst to)
43002 return to.m_offset - from.m_offset;
43005 static unsigned getCallReturnOffset(JmpSrc call)
43007 return call.m_offset + sizeof(ARMWord);
43012 static ARMWord getOp2Byte(ARMWord imm)
43015 return OP2_IMMh | (imm & 0x0f) | ((imm & 0xf0) << 4) ;
43018 static ARMWord getOp2(ARMWord imm);
43022 static ARMWord getOp2RegScale(RegisterID reg, ARMWord scale);
43025 static ARMWord getImm16Op2(ARMWord imm)
43028 return (imm & 0xf000) << 4 | (imm & 0xfff);
43029 return INVALID_IMM;
43032 ARMWord getImm(ARMWord imm, int tmpReg, bool invert = false);
43033 void moveImm(ARMWord imm, int dest);
43034 ARMWord encodeComplexImm(ARMWord imm, int dest);
43036 ARMWord getOffsetForHalfwordDataTransfer(ARMWord imm, int tmpReg)
43040 return getOp2Byte(imm);
43042 return encodeComplexImm(imm, tmpReg);
43046 void dataTransferN(bool isLoad, bool isSigned, int size, RegisterID srcDst, RegisterID base, int32_t offset);
43048 void dataTransfer32(bool isLoad, RegisterID srcDst, RegisterID base, int32_t offset);
43049 void dataTransfer8(bool isLoad, RegisterID srcDst, RegisterID base, int32_t offset, bool isSigned);
43050 void baseIndexTransferN(bool isLoad, bool isSigned, int size, RegisterID srcDst, RegisterID base, RegisterID index, int scale, int32_t offset);
43051 void baseIndexTransfer32(bool isLoad, RegisterID srcDst, RegisterID base, RegisterID index, int scale, int32_t offset);
43052 void doubleTransfer(bool isLoad, FPRegisterID srcDst, RegisterID base, int32_t offset);
43053 void doubleTransfer(bool isLoad, FPRegisterID srcDst, RegisterID base, int32_t offset, RegisterID index, int32_t scale);
43055 void floatTransfer(bool isLoad, FPRegisterID srcDst, RegisterID base, int32_t offset);
43057 void baseIndexFloatTransfer(bool isLoad, bool isDouble, FPRegisterID srcDst, RegisterID base, RegisterID index, int scale, int32_t offset);
43061 static ARMWord placeConstantPoolBarrier(int offset)
43063 offset = (offset - sizeof(ARMWord)) >> 2;
43065 return AL | B | (offset & BRANCH_MASK);
43069 static char const * nameGpReg(int reg)
43073 static char const * names[] = {
43074 "r0", "r1", "r2", "r3",
43075 "r4", "r5", "r6", "r7",
43076 "r8", "r9", "r10", "r11",
43077 "ip", "sp", "lr", "pc"
43082 static char const * nameFpRegD(int reg)
43086 static char const * names[] = {
43087 "d0", "d1", "d2", "d3",
43088 "d4", "d5", "d6", "d7",
43089 "d8", "d9", "d10", "d11",
43090 "d12", "d13", "d14", "d15",
43091 "d16", "d17", "d18", "d19",
43092 "d20", "d21", "d22", "d23",
43093 "d24", "d25", "d26", "d27",
43094 "d28", "d29", "d30", "d31"
43098 static char const * nameFpRegS(int reg)
43102 static char const * names[] = {
43103 "s0", "s1", "s2", "s3",
43104 "s4", "s5", "s6", "s7",
43105 "s8", "s9", "s10", "s11",
43106 "s12", "s13", "s14", "s15",
43107 "s16", "s17", "s18", "s19",
43108 "s20", "s21", "s22", "s23",
43109 "s24", "s25", "s26", "s27",
43110 "s28", "s29", "s30", "s31"
43115 static char const * nameCC(Condition cc)
43121 uint32_t ccIndex = cc >> 28;
43122 static char const * names[] = {
43132 return names[ccIndex];
43137 inline uint32_t decOp2Imm(uint32_t op2)
43141 uint32_t imm8 = op2 & 0xff;
43142 uint32_t rot = ((op2 >> 7) & 0x1e);
43146 uint32_t imm = (imm8 >> rot);
43148 imm |= (imm8 << (32-rot));
43156 void fmtOp2(char * out, ARMWord op2)
43158 static char const * const shifts[4] = {"LSL", "LSR", "ASR", "ROR"};
43160 if ((op2 & OP2_IMM) || (op2 & OP2_IMMh)) {
43163 uint32_t imm = decOp2Imm(op2 & ~(OP2_IMM | OP2_IMMh));
43164 sprintf(out, "#0x%x @ (%d)", imm, static_cast<int32_t>(imm));
43168 char const * rm = nameGpReg(op2 & 0xf);
43169 Shift type = static_cast<Shift>((op2 >> 5) & 0x3);
43172 if (op2 & (1<<4)) {
43175 char const * rs = nameGpReg((op2 >> 8) & 0xf);
43176 sprintf(out, "%s, %s %s", rm, shifts[type], rs);
43180 uint32_t imm = (op2 >> 7) & 0x1f;
43183 if ((type == LSL) && (imm == 0)) {
43185 sprintf(out, "%s", rm);
43189 if ((type == ROR) && (imm == 0)) {
43191 sprintf(out, "%s, RRX", rm);
43195 if (((type == LSR) || (type == ASR)) && (imm == 0)) {
43203 sprintf(out, "%s, %s #%u", rm, shifts[type], imm);
43208 void spewInsWithOp2(char const * ins, Condition cc, int rd, int rn, ARMWord op2)
43211 snprintf(mnemonic, 16, "%s%s", ins, nameCC(cc));
43214 fmtOp2(op2_fmt, op2);
43216 js::JaegerSpew(js::JSpew_Insns,
43217 " %s" "%-15s %s, %s, %s\n", "", mnemonic, nameGpReg(rd), nameGpReg(rn), op2_fmt);
43220 void spewInsWithOp2(char const * ins, Condition cc, int r, ARMWord op2)
43223 snprintf(mnemonic, 16, "%s%s", ins, nameCC(cc));
43226 fmtOp2(op2_fmt, op2);
43228 js::JaegerSpew(js::JSpew_Insns,
43229 " %s" "%-15s %s, %s\n", "", mnemonic, nameGpReg(r), op2_fmt);
43232 ARMWord RM(int reg)
43238 ARMWord RS(int reg)
43244 ARMWord RD(int reg)
43250 ARMWord RN(int reg)
43256 ARMWord DD(int reg)
43260 return ((reg << 12) | (reg << 18)) & 0x0040f000;
43263 ARMWord DN(int reg)
43267 return ((reg << 16) | (reg << 3)) & 0x000f0080;
43270 ARMWord DM(int reg)
43274 return ((reg << 1) & 0x20) | (reg & 0xf);
43277 ARMWord SD(int reg)
43281 return ((reg << 11) | (reg << 22)) & 0x0040f000;
43284 ARMWord SM(int reg)
43288 return ((reg << 5) & 0x20) | ((reg >> 1) & 0xf);
43290 ARMWord SN(int reg)
43294 return ((reg << 15) & 0xf0000) | ((reg & 1) << 7);
43296 static ARMWord getConditionalField(ARMWord i)
43298 return i & 0xf0000000;
43301 int genInt(int reg, ARMWord imm, bool positive);
43303 ARMBuffer m_buffer;
43308 VFP_DATA = 0x0E000A00,
43309 VFP_EXT = 0x0C000A00,
43310 VFP_XFER = 0x0E000A08,
43311 VFP_DXFER = 0x0C400A00,
43316 VFP_ICVT = 0x00B80040,
43317 VFP_FPCVT = 0x00B700C0,
43319 VFP_DTR = 0x01000000,
43320 VFP_MOV = 0x00000010,
43324 FSITOD = 0x0eb80bc0,
43325 FUITOD = 0x0eb80b40,
43326 FTOSID = 0x0ebd0b40,
43327 FTOSIZD = 0x0ebd0bc0,
43328 FMSTAT = 0x0ef1fa10,
43339 const char * nameType(RegType t)
43341 const char * const name[4] =
43342 {"S32", "U32", "F32", "F64"};
43346 const char * nameTypedReg(RegType t, int reg)
43351 return nameGpReg(reg);
43353 return nameFpRegS(reg);
43355 return nameFpRegD(reg);
43360 bool isFloatType(RegType rt)
43362 if (rt == FloatReg32 || rt == FloatReg64)
43367 bool isIntType(RegType rt)
43369 if (rt == FloatReg32 || rt == FloatReg64)
43378 void emitVFPInst(ARMWord op, ARMWord rd, ARMWord rn, ARMWord op2)
43380 m_buffer.putInt(op | rn | rd | op2);
43384 void fmem_imm_off(bool isLoad, bool isDouble, bool isUp, int dest, int rn, ARMWord offset, Condition cc = AL)
43386 char const * ins = isLoad ? "vldr.f" : "vstr.f";
43387 js::JaegerSpew(js::JSpew_Insns,
43388 " %s" "%s%d %s, [%s, #%s%u]\n", "",
43389 ins, (isDouble ? 64 : 32), (isDouble ? nameFpRegD(dest) : nameFpRegS(dest)),
43390 nameGpReg(rn), (isUp ? "+" : "-"), offset);
43392 emitVFPInst(static_cast<ARMWord>(cc) |
43393 VFP_EXT | VFP_DTR |
43394 (isDouble ? VFP_DBL : 0) |
43395 (isUp ? DT_UP : 0) |
43396 (isLoad ? DT_LOAD : 0), isDouble ? DD(dest) : SD(dest), RN(rn), offset);
43402 void vcvt(RegType srcType, RegType dstType, int src, int dest, Condition cc = AL)
43407 js::JaegerSpew(js::JSpew_Insns,
43408 " %s" "vcvt.%s.%-15s, %s,%s\n", "",
43409 nameType(dstType), nameType(srcType),
43410 nameTypedReg(dstType,dest), nameTypedReg(srcType,src));
43412 if (isFloatType(srcType) && isFloatType (dstType)) {
43414 bool dblToFloat = srcType == FloatReg64;
43415 emitVFPInst(static_cast<ARMWord>(cc) | VFP_DATA | VFP_FPCVT |
43416 (dblToFloat ? VFP_DBL : 0),
43417 dblToFloat ? SD(dest) : DD(dest),
43418 dblToFloat ? DM(src) : SM(src), 0);
43420 __builtin_unreachable();
43425 void vmov64 (bool fromFP, bool isDbl, int r1, int r2, int rFP, Condition cc = AL)
43428 js::JaegerSpew(js::JSpew_Insns,
43429 " %s" "%-15s %s, %s, %s\n", "", "vmov",
43430 nameGpReg(r1), nameGpReg(r2), nameFpRegD(rFP));
43432 js::JaegerSpew(js::JSpew_Insns,
43433 " %s" "%-15s %s, %s, %s\n", "", "vmov",
43434 nameFpRegD(rFP), nameGpReg(r1), nameGpReg(r2));
43436 emitVFPInst(static_cast<ARMWord>(cc) | VFP_DXFER | VFP_MOV |
43437 (fromFP ? DT_LOAD : 0) |
43438 (isDbl ? VFP_DBL : 0), RD(r1), RN(r2), isDbl ? DM(rFP) : SM(rFP));
43441 void fcpyd_r(int dd, int dm, Condition cc = AL)
43443 js::JaegerSpew(js::JSpew_Insns,
43444 " %s" "%-15s %s, %s\n", "", "vmov.f64",
43445 nameFpRegD(dd), nameFpRegD(dm));
43448 emitVFPInst(static_cast<ARMWord>(cc) | FCPYD, DD(dd), DM(dm), 0);
43451 void faddd_r(int dd, int dn, int dm, Condition cc = AL)
43453 js::JaegerSpew(js::JSpew_Insns,
43454 " %s" "%-15s %s, %s, %s\n", "", "vadd.f64", nameFpRegD(dd), nameFpRegD(dn), nameFpRegD(dm));
43457 emitVFPInst(static_cast<ARMWord>(cc) | FADDD, DD(dd), DN(dn), DM(dm));
43460 void fnegd_r(int dd, int dm, Condition cc = AL)
43462 js::JaegerSpew(js::JSpew_Insns,
43463 " %s" "%-15s %s, %s\n", "", "fnegd", nameFpRegD(dd), nameFpRegD(dm));
43464 m_buffer.putInt(static_cast<ARMWord>(cc) | FNEGD | DD(dd) | DM(dm));
43467 void fdivd_r(int dd, int dn, int dm, Condition cc = AL)
43469 js::JaegerSpew(js::JSpew_Insns,
43470 " %s" "%-15s %s, %s, %s\n", "", "vdiv.f64", nameFpRegD(dd), nameFpRegD(dn), nameFpRegD(dm));
43473 emitVFPInst(static_cast<ARMWord>(cc) | FDIVD, DD(dd), DN(dn), DM(dm));
43476 void fsubd_r(int dd, int dn, int dm, Condition cc = AL)
43478 js::JaegerSpew(js::JSpew_Insns,
43479 " %s" "%-15s %s, %s, %s\n", "", "vsub.f64", nameFpRegD(dd), nameFpRegD(dn), nameFpRegD(dm));
43482 emitVFPInst(static_cast<ARMWord>(cc) | FSUBD, DD(dd), DN(dn), DM(dm));
43485 void fabsd_r(int dd, int dm, Condition cc = AL)
43487 js::JaegerSpew(js::JSpew_Insns,
43488 " %s" "%-15s %s, %s\n", "", "fabsd", nameFpRegD(dd), nameFpRegD(dm));
43489 m_buffer.putInt(static_cast<ARMWord>(cc) | FABSD | DD(dd) | DM(dm));
43492 void fmuld_r(int dd, int dn, int dm, Condition cc = AL)
43494 js::JaegerSpew(js::JSpew_Insns,
43495 " %s" "%-15s %s, %s, %s\n", "", "vmul.f64", nameFpRegD(dd), nameFpRegD(dn), nameFpRegD(dm));
43498 emitVFPInst(static_cast<ARMWord>(cc) | FMULD, DD(dd), DN(dn), DM(dm));
43501 void fcmpd_r(int dd, int dm, Condition cc = AL)
43503 js::JaegerSpew(js::JSpew_Insns,
43504 " %s" "%-15s %s, %s\n", "", "vcmp.f64", nameFpRegD(dd), nameFpRegD(dm));
43507 emitVFPInst(static_cast<ARMWord>(cc) | FCMPD, DD(dd), 0, DM(dm));
43510 void fsqrtd_r(int dd, int dm, Condition cc = AL)
43512 js::JaegerSpew(js::JSpew_Insns,
43513 " %s" "%-15s %s, %s\n", "", "vsqrt.f64", nameFpRegD(dd), nameFpRegD(dm));
43516 emitVFPInst(static_cast<ARMWord>(cc) | FSQRTD, DD(dd), 0, DM(dm));
43519 void fmsr_r(int dd, int rn, Condition cc = AL)
43523 emitVFPInst(static_cast<ARMWord>(cc) | FMSR, RD(rn), SN(dd), 0);
43526 void fmrs_r(int rd, int dn, Condition cc = AL)
43530 emitVFPInst(static_cast<ARMWord>(cc) | FMRS, RD(rd), SN(dn), 0);
43535 void fsitod_r(int dd, int dm, Condition cc = AL)
43539 emitVFPInst(static_cast<ARMWord>(cc) | FSITOD, DD(dd), 0, SM(dm));
43542 void fuitod_r(int dd, int dm, Condition cc = AL)
43546 emitVFPInst(static_cast<ARMWord>(cc) | FUITOD, DD(dd), 0, SM(dm));
43549 void ftosid_r(int fd, int dm, Condition cc = AL)
43552 emitVFPInst(static_cast<ARMWord>(cc) | FTOSID, SD(fd), 0, DM(dm));
43555 void ftosizd_r(int fd, int dm, Condition cc = AL)
43558 emitVFPInst(static_cast<ARMWord>(cc) | FTOSIZD, SD(fd), 0, DM(dm));
43561 void fmstat(Condition cc = AL)
43565 m_buffer.putInt(static_cast<ARMWord>(cc) | FMSTAT);
43570 # 40 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssemblerARM.h" 2
43571 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AbstractMacroAssembler.h" 1
43572 # 31 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AbstractMacroAssembler.h"
43573 #define AbstractMacroAssembler_h
43576 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssemblerCodeRef.h" 1
43577 # 31 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssemblerCodeRef.h"
43578 #define MacroAssemblerCodeRef_h
43579 # 52 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssemblerCodeRef.h"
43580 #define ASSERT_VALID_CODE_POINTER(ptr) ASSERT(ptr)
43582 #define ASSERT_VALID_CODE_OFFSET(offset)
43591 class FunctionPtr {
43598 template<typename FunctionType>
43599 explicit FunctionPtr(FunctionType* value)
43605 : m_value(reinterpret_cast<void*>(value))
43611 void* value() const { return m_value; }
43612 void* executableAddress() const { return m_value; }
43625 class ReturnAddressPtr {
43632 explicit ReturnAddressPtr(void* value)
43638 explicit ReturnAddressPtr(FunctionPtr function)
43639 : m_value(function.value())
43644 void* value() const { return m_value; }
43653 class MacroAssemblerCodePtr {
43655 MacroAssemblerCodePtr()
43660 explicit MacroAssemblerCodePtr(void* value)
43671 explicit MacroAssemblerCodePtr(ReturnAddressPtr ra)
43672 : m_value(ra.value())
43677 void* executableAddress() const {
43684 void* dataLocation() const { do { } while(0); return m_value; }
43692 ptrdiff_t operator -(const MacroAssemblerCodePtr &other) const
43695 return reinterpret_cast<uint8_t *>(m_value) -
43696 reinterpret_cast<uint8_t *>(other.m_value);
43708 class MacroAssemblerCodeRef {
43710 MacroAssemblerCodeRef()
43711 : m_executablePool(__null),
43716 MacroAssemblerCodeRef(void* code, ExecutablePool* executablePool, size_t size)
43718 , m_executablePool(executablePool)
43726 if (!m_executablePool)
43733 m_executablePool->release();
43734 m_executablePool = __null;
43737 MacroAssemblerCodePtr m_code;
43738 ExecutablePool* m_executablePool;
43743 # 35 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AbstractMacroAssembler.h" 2
43744 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/CodeLocation.h" 1
43745 # 31 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/CodeLocation.h"
43746 #define CodeLocation_h
43755 class CodeLocationInstruction;
43756 class CodeLocationLabel;
43757 class CodeLocationJump;
43758 class CodeLocationCall;
43759 class CodeLocationNearCall;
43760 class CodeLocationDataLabel32;
43761 class CodeLocationDataLabelPtr;
43762 # 59 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/CodeLocation.h"
43763 class CodeLocationCommon : public MacroAssemblerCodePtr {
43765 CodeLocationInstruction instructionAtOffset(int offset);
43766 CodeLocationLabel labelAtOffset(int offset);
43767 CodeLocationJump jumpAtOffset(int offset);
43768 CodeLocationCall callAtOffset(int offset);
43769 CodeLocationNearCall nearCallAtOffset(int offset);
43770 CodeLocationDataLabelPtr dataLabelPtrAtOffset(int offset);
43771 CodeLocationDataLabel32 dataLabel32AtOffset(int offset);
43774 CodeLocationCommon()
43778 CodeLocationCommon(MacroAssemblerCodePtr location)
43779 : MacroAssemblerCodePtr(location)
43784 class CodeLocationInstruction : public CodeLocationCommon {
43786 CodeLocationInstruction() {}
43787 explicit CodeLocationInstruction(MacroAssemblerCodePtr location)
43788 : CodeLocationCommon(location) {}
43789 explicit CodeLocationInstruction(void* location)
43790 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
43793 class CodeLocationLabel : public CodeLocationCommon {
43795 CodeLocationLabel() {}
43796 explicit CodeLocationLabel(MacroAssemblerCodePtr location)
43797 : CodeLocationCommon(location) {}
43798 explicit CodeLocationLabel(void* location)
43799 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
43802 class CodeLocationJump : public CodeLocationCommon {
43804 CodeLocationJump() {}
43805 explicit CodeLocationJump(MacroAssemblerCodePtr location)
43806 : CodeLocationCommon(location) {}
43807 explicit CodeLocationJump(void* location)
43808 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
43811 class CodeLocationCall : public CodeLocationCommon {
43813 CodeLocationCall() {}
43814 explicit CodeLocationCall(MacroAssemblerCodePtr location)
43815 : CodeLocationCommon(location) {}
43816 explicit CodeLocationCall(void* location)
43817 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
43820 class CodeLocationNearCall : public CodeLocationCommon {
43822 CodeLocationNearCall() {}
43823 explicit CodeLocationNearCall(MacroAssemblerCodePtr location)
43824 : CodeLocationCommon(location) {}
43825 explicit CodeLocationNearCall(void* location)
43826 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
43829 class CodeLocationDataLabel32 : public CodeLocationCommon {
43831 CodeLocationDataLabel32() {}
43832 explicit CodeLocationDataLabel32(MacroAssemblerCodePtr location)
43833 : CodeLocationCommon(location) {}
43834 explicit CodeLocationDataLabel32(void* location)
43835 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
43838 class CodeLocationDataLabelPtr : public CodeLocationCommon {
43840 CodeLocationDataLabelPtr() {}
43841 explicit CodeLocationDataLabelPtr(MacroAssemblerCodePtr location)
43842 : CodeLocationCommon(location) {}
43843 explicit CodeLocationDataLabelPtr(void* location)
43844 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
43847 inline CodeLocationInstruction CodeLocationCommon::instructionAtOffset(int offset)
43850 return CodeLocationInstruction(reinterpret_cast<char*>(dataLocation()) + offset);
43853 inline CodeLocationLabel CodeLocationCommon::labelAtOffset(int offset)
43856 return CodeLocationLabel(reinterpret_cast<char*>(dataLocation()) + offset);
43859 inline CodeLocationJump CodeLocationCommon::jumpAtOffset(int offset)
43862 return CodeLocationJump(reinterpret_cast<char*>(dataLocation()) + offset);
43865 inline CodeLocationCall CodeLocationCommon::callAtOffset(int offset)
43868 return CodeLocationCall(reinterpret_cast<char*>(dataLocation()) + offset);
43871 inline CodeLocationNearCall CodeLocationCommon::nearCallAtOffset(int offset)
43874 return CodeLocationNearCall(reinterpret_cast<char*>(dataLocation()) + offset);
43877 inline CodeLocationDataLabelPtr CodeLocationCommon::dataLabelPtrAtOffset(int offset)
43880 return CodeLocationDataLabelPtr(reinterpret_cast<char*>(dataLocation()) + offset);
43883 inline CodeLocationDataLabel32 CodeLocationCommon::dataLabel32AtOffset(int offset)
43886 return CodeLocationDataLabel32(reinterpret_cast<char*>(dataLocation()) + offset);
43890 # 36 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AbstractMacroAssembler.h" 2
43897 class RepatchBuffer;
43899 template <class AssemblerType>
43900 class AbstractMacroAssembler {
43902 typedef AssemblerType AssemblerType_T;
43904 typedef MacroAssemblerCodePtr CodePtr;
43905 typedef MacroAssemblerCodeRef CodeRef;
43909 typedef typename AssemblerType::RegisterID RegisterID;
43910 typedef typename AssemblerType::FPRegisterID FPRegisterID;
43911 typedef typename AssemblerType::JmpSrc JmpSrc;
43912 typedef typename AssemblerType::JmpDst JmpDst;
43913 # 72 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AbstractMacroAssembler.h"
43925 explicit Address() {}
43927 explicit Address(RegisterID base, int32_t offset = 0)
43937 struct ExtendedAddress {
43938 explicit ExtendedAddress(RegisterID base, intptr_t offset = 0)
43947 # 120 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AbstractMacroAssembler.h"
43948 struct ImplicitAddress {
43949 ImplicitAddress(RegisterID base)
43955 ImplicitAddress(Address address)
43956 : base(address.base)
43957 , offset(address.offset)
43969 BaseIndex(RegisterID base, RegisterID index, Scale scale, int32_t offset = 0)
43987 struct AbsoluteAddress {
43988 explicit AbsoluteAddress(void* ptr)
44001 struct TrustedImmPtr {
44002 explicit TrustedImmPtr(const void* value)
44007 intptr_t asIntptr()
44009 return reinterpret_cast<intptr_t>(m_value);
44012 const void* m_value;
44015 struct ImmPtr : public TrustedImmPtr {
44016 explicit ImmPtr(const void* value)
44017 : TrustedImmPtr(value)
44028 struct TrustedImm32 {
44029 explicit TrustedImm32(int32_t value)
44032 , m_isPointer(false)
44038 explicit TrustedImm32(TrustedImmPtr ptr)
44039 : m_value(ptr.asIntptr())
44041 , m_isPointer(true)
44048 # 228 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AbstractMacroAssembler.h"
44054 struct Imm32 : public TrustedImm32 {
44055 explicit Imm32(int32_t value)
44056 : TrustedImm32(value)
44060 explicit Imm32(TrustedImmPtr ptr)
44061 : TrustedImm32(ptr)
44080 explicit ImmDouble(double d) {
44084 # 276 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/AbstractMacroAssembler.h"
44086 template<class TemplateAssemblerType>
44087 friend class AbstractMacroAssembler;
44089 friend class MacroAssemblerCodeRef;
44090 friend class LinkBuffer;
44097 Label(AbstractMacroAssembler<AssemblerType>* masm)
44098 : m_label(masm->m_assembler.label())
44102 bool isUsed() const { return m_label.isUsed(); }
44103 void used() { m_label.used(); }
44104 bool isSet() const { return m_label.isValid(); }
44113 class DataLabelPtr {
44114 template<class TemplateAssemblerType>
44115 friend class AbstractMacroAssembler;
44116 friend class LinkBuffer;
44122 DataLabelPtr(AbstractMacroAssembler<AssemblerType>* masm)
44123 : m_label(masm->m_assembler.label())
44127 bool isSet() const { return m_label.isValid(); }
44137 class DataLabel32 {
44138 template<class TemplateAssemblerType>
44139 friend class AbstractMacroAssembler;
44140 friend class LinkBuffer;
44146 DataLabel32(AbstractMacroAssembler<AssemblerType>* masm)
44147 : m_label(masm->m_assembler.label())
44162 template<class TemplateAssemblerType>
44163 friend class AbstractMacroAssembler;
44178 Call(JmpSrc jmp, Flags flags)
44184 bool isFlagSet(Flags flag)
44186 return !!(m_flags & flag);
44189 static Call fromTailJump(Jump jump)
44191 return Call(jump.m_jmp, Linkable);
44206 template<class TemplateAssemblerType>
44207 friend class AbstractMacroAssembler;
44209 friend class LinkBuffer;
44220 void link(AbstractMacroAssembler<AssemblerType>* masm)
44222 masm->m_assembler.linkJump(m_jmp, masm->m_assembler.label());
44225 void linkTo(Label label, AbstractMacroAssembler<AssemblerType>* masm)
44227 masm->m_assembler.linkJump(m_jmp, label.m_label);
44239 friend class LinkBuffer;
44242 typedef js::Vector<Jump, 16 ,js::SystemAllocPolicy > JumpVector;
44246 JumpList(const JumpList &other)
44248 m_jumps.append(other.m_jumps);
44251 JumpList &operator=(const JumpList &other)
44254 m_jumps.append(other.m_jumps);
44258 void link(AbstractMacroAssembler<AssemblerType>* masm)
44260 size_t size = m_jumps.length();
44261 for (size_t i = 0; i < size; ++i)
44262 m_jumps[i].link(masm);
44266 void linkTo(Label label, AbstractMacroAssembler<AssemblerType>* masm)
44268 size_t size = m_jumps.length();
44269 for (size_t i = 0; i < size; ++i)
44270 m_jumps[i].linkTo(label, masm);
44274 void append(Jump jump)
44276 m_jumps.append(jump);
44279 void append(const JumpList& other)
44281 m_jumps.append(other.m_jumps.begin(), other.m_jumps.length());
44291 return !m_jumps.length();
44294 const JumpVector& jumps() const { return m_jumps; }
44297 JumpVector m_jumps;
44303 static CodePtr trampolineAt(CodeRef ref, Label label)
44305 return CodePtr(AssemblerType::getRelocatedAddress(ref.m_code.dataLocation(), label.m_label));
44310 return m_assembler.size();
44313 unsigned char *buffer()
44315 return m_assembler.buffer();
44320 return m_assembler.oom();
44323 void executableCopy(void* buffer)
44326 m_assembler.executableCopy(buffer);
44331 return Label(this);
44334 DataLabel32 dataLabel32()
44336 return DataLabel32(this);
44341 m_assembler.align(16);
44342 return Label(this);
44345 ptrdiff_t differenceBetween(Label from, Jump to)
44347 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_jmp);
44350 ptrdiff_t differenceBetween(Label from, Call to)
44352 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_jmp);
44355 ptrdiff_t differenceBetween(Label from, Label to)
44357 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label);
44360 ptrdiff_t differenceBetween(Label from, DataLabelPtr to)
44362 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label);
44365 ptrdiff_t differenceBetween(Label from, DataLabel32 to)
44367 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label);
44370 ptrdiff_t differenceBetween(DataLabel32 from, Label to)
44372 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label);
44375 ptrdiff_t differenceBetween(DataLabelPtr from, Label to)
44377 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label);
44380 ptrdiff_t differenceBetween(DataLabelPtr from, Jump to)
44382 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_jmp);
44385 ptrdiff_t differenceBetween(DataLabelPtr from, DataLabelPtr to)
44387 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label);
44390 ptrdiff_t differenceBetween(DataLabelPtr from, Call to)
44392 return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_jmp);
44396 AssemblerType m_assembler;
44398 friend class LinkBuffer;
44399 friend class RepatchBuffer;
44401 static void linkJump(void* code, Jump jump, CodeLocationLabel target)
44403 AssemblerType::linkJump(code, jump.m_jmp, target.dataLocation());
44406 static void linkPointer(void* code, typename AssemblerType::JmpDst label, void* value)
44408 AssemblerType::linkPointer(code, label, value);
44411 static void* getLinkerAddress(void* code, typename AssemblerType::JmpSrc label)
44413 return AssemblerType::getRelocatedAddress(code, label);
44416 static void* getLinkerAddress(void* code, typename AssemblerType::JmpDst label)
44418 return AssemblerType::getRelocatedAddress(code, label);
44421 static unsigned getLinkerCallReturnOffset(Call call)
44423 return AssemblerType::getCallReturnOffset(call.m_jmp);
44426 static void repatchJump(CodeLocationJump jump, CodeLocationLabel destination)
44428 AssemblerType::relinkJump(jump.dataLocation(), destination.dataLocation());
44431 static bool canRepatchJump(CodeLocationJump jump, CodeLocationLabel destination)
44433 return AssemblerType::canRelinkJump(jump.dataLocation(), destination.dataLocation());
44436 static void repatchNearCall(CodeLocationNearCall nearCall, CodeLocationLabel destination)
44438 AssemblerType::relinkCall(nearCall.dataLocation(), destination.executableAddress());
44441 static void repatchInt32(CodeLocationDataLabel32 dataLabel32, int32_t value)
44443 AssemblerType::repatchInt32(dataLabel32.dataLocation(), value);
44446 static void repatchPointer(CodeLocationDataLabelPtr dataLabelPtr, void* value)
44448 AssemblerType::repatchPointer(dataLabelPtr.dataLocation(), value);
44451 static void repatchLoadPtrToLEA(CodeLocationInstruction instruction)
44453 AssemblerType::repatchLoadPtrToLEA(instruction.dataLocation());
44456 static void repatchLEAToLoadPtr(CodeLocationInstruction instruction)
44458 AssemblerType::repatchLEAToLoadPtr(instruction.dataLocation());
44463 # 41 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssemblerARM.h" 2
44467 class MacroAssemblerARM : public AbstractMacroAssembler<ARMAssembler> {
44468 static const int DoubleConditionMask = 0x0f;
44469 static const int DoubleConditionBitSpecial = 0x8;
44472 Equal = ARMAssembler::EQ,
44473 NotEqual = ARMAssembler::NE,
44474 Above = ARMAssembler::HI,
44475 AboveOrEqual = ARMAssembler::CS,
44476 Below = ARMAssembler::CC,
44477 BelowOrEqual = ARMAssembler::LS,
44478 GreaterThan = ARMAssembler::GT,
44479 GreaterThanOrEqual = ARMAssembler::GE,
44480 LessThan = ARMAssembler::LT,
44481 LessThanOrEqual = ARMAssembler::LE,
44482 Overflow = ARMAssembler::VS,
44483 Signed = ARMAssembler::MI,
44484 Zero = ARMAssembler::EQ,
44485 NonZero = ARMAssembler::NE
44488 enum DoubleCondition {
44490 DoubleEqual = ARMAssembler::EQ,
44491 DoubleNotEqual = ARMAssembler::NE | DoubleConditionBitSpecial,
44492 DoubleGreaterThan = ARMAssembler::GT,
44493 DoubleGreaterThanOrEqual = ARMAssembler::GE,
44494 DoubleLessThan = ARMAssembler::CC,
44495 DoubleLessThanOrEqual = ARMAssembler::LS,
44497 DoubleEqualOrUnordered = ARMAssembler::EQ | DoubleConditionBitSpecial,
44498 DoubleNotEqualOrUnordered = ARMAssembler::NE,
44499 DoubleGreaterThanOrUnordered = ARMAssembler::HI,
44500 DoubleGreaterThanOrEqualOrUnordered = ARMAssembler::CS,
44501 DoubleLessThanOrUnordered = ARMAssembler::LT,
44502 DoubleLessThanOrEqualOrUnordered = ARMAssembler::LE
44505 static const RegisterID stackPointerRegister = ARMRegisters::sp;
44506 static const RegisterID linkRegister = ARMRegisters::lr;
44508 static const Scale ScalePtr = TimesFour;
44509 static const unsigned int TotalRegisters = 16;
44511 void add32(RegisterID src, RegisterID dest)
44513 m_assembler.adds_r(dest, dest, src);
44516 void add32(TrustedImm32 imm, Address address)
44518 load32(address, ARMRegisters::S1);
44519 add32(imm, ARMRegisters::S1);
44520 store32(ARMRegisters::S1, address);
44523 void add32(TrustedImm32 imm, RegisterID dest)
44525 m_assembler.adds_r(dest, dest, m_assembler.getImm(imm.m_value, ARMRegisters::S0));
44528 void add32(Address src, RegisterID dest)
44530 load32(src, ARMRegisters::S1);
44531 add32(ARMRegisters::S1, dest);
44534 void and32(Address src, RegisterID dest)
44536 load32(src, ARMRegisters::S1);
44537 and32(ARMRegisters::S1, dest);
44540 void and32(RegisterID src, RegisterID dest)
44542 m_assembler.ands_r(dest, dest, src);
44545 void and32(Imm32 imm, RegisterID dest)
44547 ARMWord w = m_assembler.getImm(imm.m_value, ARMRegisters::S0, true);
44548 if (w & ARMAssembler::OP2_INV_IMM)
44549 m_assembler.bics_r(dest, dest, w & ~ARMAssembler::OP2_INV_IMM);
44551 m_assembler.ands_r(dest, dest, w);
44554 void lshift32(RegisterID shift_amount, RegisterID dest)
44556 ARMWord w = ARMAssembler::getOp2(0x1f);
44558 m_assembler.and_r(ARMRegisters::S0, shift_amount, w);
44560 m_assembler.movs_r(dest, m_assembler.lsl_r(dest, ARMRegisters::S0));
44563 void lshift32(Imm32 imm, RegisterID dest)
44565 m_assembler.movs_r(dest, m_assembler.lsl(dest, imm.m_value & 0x1f));
44568 void mul32(RegisterID src, RegisterID dest)
44571 move(src, ARMRegisters::S0);
44572 src = ARMRegisters::S0;
44574 m_assembler.muls_r(dest, dest, src);
44577 void mul32(Imm32 imm, RegisterID src, RegisterID dest)
44579 move(imm, ARMRegisters::S0);
44580 m_assembler.muls_r(dest, src, ARMRegisters::S0);
44583 void neg32(RegisterID srcDest)
44585 m_assembler.rsbs_r(srcDest, srcDest, ARMAssembler::getOp2(0));
44588 void not32(RegisterID dest)
44590 m_assembler.mvns_r(dest, dest);
44593 void or32(RegisterID src, RegisterID dest)
44595 m_assembler.orrs_r(dest, dest, src);
44598 void or32(TrustedImm32 imm, RegisterID dest)
44600 m_assembler.orrs_r(dest, dest, m_assembler.getImm(imm.m_value, ARMRegisters::S0));
44603 void rshift32(RegisterID shift_amount, RegisterID dest)
44605 ARMWord w = ARMAssembler::getOp2(0x1f);
44607 m_assembler.and_r(ARMRegisters::S0, shift_amount, w);
44609 m_assembler.movs_r(dest, m_assembler.asr_r(dest, ARMRegisters::S0));
44612 void rshift32(Imm32 imm, RegisterID dest)
44614 m_assembler.movs_r(dest, m_assembler.asr(dest, imm.m_value & 0x1f));
44617 void urshift32(RegisterID shift_amount, RegisterID dest)
44619 ARMWord w = ARMAssembler::getOp2(0x1f);
44621 m_assembler.and_r(ARMRegisters::S0, shift_amount, w);
44623 m_assembler.movs_r(dest, m_assembler.lsr_r(dest, ARMRegisters::S0));
44626 void urshift32(Imm32 imm, RegisterID dest)
44628 m_assembler.movs_r(dest, m_assembler.lsr(dest, imm.m_value & 0x1f));
44631 void sub32(RegisterID src, RegisterID dest)
44633 m_assembler.subs_r(dest, dest, src);
44636 void sub32(TrustedImm32 imm, RegisterID dest)
44638 m_assembler.subs_r(dest, dest, m_assembler.getImm(imm.m_value, ARMRegisters::S0));
44641 void sub32(TrustedImm32 imm, Address address)
44643 load32(address, ARMRegisters::S1);
44644 sub32(imm, ARMRegisters::S1);
44645 store32(ARMRegisters::S1, address);
44648 void sub32(Address src, RegisterID dest)
44650 load32(src, ARMRegisters::S1);
44651 sub32(ARMRegisters::S1, dest);
44654 void or32(Address address, RegisterID dest)
44656 load32(address, ARMRegisters::S1);
44657 or32(ARMRegisters::S1, dest);
44660 void xor32(RegisterID src, RegisterID dest)
44662 m_assembler.eors_r(dest, dest, src);
44665 void xor32(TrustedImm32 imm, RegisterID dest)
44667 m_assembler.eors_r(dest, dest, m_assembler.getImm(imm.m_value, ARMRegisters::S0));
44670 void xor32(Address src, RegisterID dest)
44672 load32(src, ARMRegisters::S1);
44673 m_assembler.eors_r(dest, dest, ARMRegisters::S1);
44676 void load8SignExtend(ImplicitAddress address, RegisterID dest)
44678 m_assembler.dataTransferN(true, true, 8, dest, address.base, address.offset);
44681 void load8ZeroExtend(ImplicitAddress address, RegisterID dest)
44683 m_assembler.dataTransferN(true, false, 8, dest, address.base, address.offset);
44686 void load8SignExtend(BaseIndex address, RegisterID dest)
44688 m_assembler.baseIndexTransferN(true, true, 8, dest,
44689 address.base, address.index, address.scale, address.offset);
44692 void load8ZeroExtend(BaseIndex address, RegisterID dest)
44694 m_assembler.baseIndexTransferN(true, false, 8, dest,
44695 address.base, address.index, address.scale, address.offset);
44699 void load8(ImplicitAddress address, RegisterID dest)
44701 load8ZeroExtend(address, dest);
44704 void load16SignExtend(ImplicitAddress address, RegisterID dest)
44706 m_assembler.dataTransferN(true, true, 16, dest, address.base, address.offset);
44709 void load16ZeroExtend(ImplicitAddress address, RegisterID dest)
44711 m_assembler.dataTransferN(true, false, 16, dest, address.base, address.offset);
44713 void load16SignExtend(BaseIndex address, RegisterID dest)
44715 m_assembler.baseIndexTransferN(true, true, 16, dest,
44716 address.base, address.index, address.scale, address.offset);
44718 void load16ZeroExtend(BaseIndex address, RegisterID dest)
44720 m_assembler.baseIndexTransferN(true, false, 16, dest,
44721 address.base, address.index, address.scale, address.offset);
44724 void load32(ImplicitAddress address, RegisterID dest)
44726 m_assembler.dataTransfer32(true, dest, address.base, address.offset);
44729 void load32(BaseIndex address, RegisterID dest)
44731 m_assembler.baseIndexTransfer32(true, dest, address.base, address.index, static_cast<int>(address.scale), address.offset);
44737 void load32WithUnalignedHalfWords(BaseIndex address, RegisterID dest)
44739 load32(address, dest);
44743 DataLabel32 load32WithAddressOffsetPatch(Address address, RegisterID dest)
44746 DataLabel32 dataLabel(this);
44747 m_assembler.ldr_un_imm(ARMRegisters::S0, 0);
44748 m_assembler.dtr_ur(true, dest, address.base, ARMRegisters::S0);
44752 DataLabel32 load64WithAddressOffsetPatch(Address address, RegisterID hi, RegisterID lo)
44756 DataLabel32 dataLabel(this);
44757 m_assembler.ldr_un_imm(ARMRegisters::S0, 0);
44758 m_assembler.add_r(ARMRegisters::S0, ARMRegisters::S0, address.base);
44759 m_assembler.dtr_u(true, lo, ARMRegisters::S0, 0);
44760 m_assembler.dtr_u(true, hi, ARMRegisters::S0, 4);
44764 Label loadPtrWithPatchToLEA(Address address, RegisterID dest)
44767 load32(address, dest);
44771 void load16(BaseIndex address, RegisterID dest)
44773 m_assembler.add_r(ARMRegisters::S1, address.base, m_assembler.lsl(address.index, address.scale));
44774 load16(Address(ARMRegisters::S1, address.offset), dest);
44777 void load16(ImplicitAddress address, RegisterID dest)
44779 if (address.offset >= 0)
44780 m_assembler.ldrh_u(dest, address.base, m_assembler.getOffsetForHalfwordDataTransfer(address.offset, ARMRegisters::S0));
44782 m_assembler.ldrh_d(dest, address.base, m_assembler.getOffsetForHalfwordDataTransfer(-address.offset, ARMRegisters::S0));
44785 DataLabel32 store32WithAddressOffsetPatch(RegisterID src, Address address)
44788 DataLabel32 dataLabel(this);
44789 m_assembler.ldr_un_imm(ARMRegisters::S0, 0);
44790 m_assembler.dtr_ur(false, src, address.base, ARMRegisters::S0);
44794 DataLabel32 store64WithAddressOffsetPatch(RegisterID hi, RegisterID lo, Address address)
44799 DataLabel32 dataLabel(this);
44800 m_assembler.ldr_un_imm(ARMRegisters::S0, address.offset);
44801 m_assembler.add_r(ARMRegisters::S0, ARMRegisters::S0, address.base);
44802 m_assembler.dtr_u(false, lo, ARMRegisters::S0, 0);
44803 m_assembler.dtr_u(false, hi, ARMRegisters::S0, 4);
44807 DataLabel32 store64WithAddressOffsetPatch(Imm32 hi, RegisterID lo, Address address)
44814 DataLabel32 dataLabel(this);
44815 m_assembler.ldr_un_imm(ARMRegisters::S0, address.offset);
44816 m_assembler.moveImm(hi.m_value, ARMRegisters::S1);
44817 m_assembler.add_r(ARMRegisters::S0, ARMRegisters::S0, address.base);
44818 m_assembler.dtr_u(false, lo, ARMRegisters::S0, 0);
44819 m_assembler.dtr_u(false, ARMRegisters::S1, ARMRegisters::S0, 4);
44823 DataLabel32 store64WithAddressOffsetPatch(Imm32 hi, Imm32 lo, Address address)
44827 DataLabel32 dataLabel(this);
44828 m_assembler.ldr_un_imm(ARMRegisters::S0, address.offset);
44829 m_assembler.add_r(ARMRegisters::S0, ARMRegisters::S0, address.base);
44830 m_assembler.moveImm(lo.m_value, ARMRegisters::S1);
44831 m_assembler.dtr_u(false, ARMRegisters::S1, ARMRegisters::S0, 0);
44833 m_assembler.moveImm(hi.m_value, ARMRegisters::S1);
44834 m_assembler.dtr_u(false, ARMRegisters::S1, ARMRegisters::S0, 4);
44838 void store32(RegisterID src, ImplicitAddress address)
44840 m_assembler.dataTransfer32(false, src, address.base, address.offset);
44843 void store32(RegisterID src, BaseIndex address)
44845 m_assembler.baseIndexTransfer32(false, src, address.base, address.index, static_cast<int>(address.scale), address.offset);
44848 void store32(TrustedImm32 imm, BaseIndex address)
44850 if (imm.m_isPointer)
44851 m_assembler.ldr_un_imm(ARMRegisters::S1, imm.m_value);
44853 move(imm, ARMRegisters::S1);
44854 store32(ARMRegisters::S1, address);
44857 void store32(TrustedImm32 imm, ImplicitAddress address)
44859 if (imm.m_isPointer)
44860 m_assembler.ldr_un_imm(ARMRegisters::S1, imm.m_value);
44862 move(imm, ARMRegisters::S1);
44863 store32(ARMRegisters::S1, address);
44866 void store32(RegisterID src, void* address)
44868 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address));
44869 m_assembler.dtr_u(false, src, ARMRegisters::S0, 0);
44872 void store32(TrustedImm32 imm, void* address)
44874 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address));
44875 if (imm.m_isPointer)
44876 m_assembler.ldr_un_imm(ARMRegisters::S1, imm.m_value);
44878 m_assembler.moveImm(imm.m_value, ARMRegisters::S1);
44879 m_assembler.dtr_u(false, ARMRegisters::S1, ARMRegisters::S0, 0);
44882 void store16(RegisterID src, ImplicitAddress address)
44884 m_assembler.dataTransferN(false, false, 16, src, address.base, address.offset);
44886 void store16(RegisterID src, BaseIndex address)
44888 m_assembler.baseIndexTransferN(false, false, 16, src, address.base, address.index, static_cast<int>(address.scale), address.offset);
44891 void store16(TrustedImm32 imm, BaseIndex address)
44893 if (imm.m_isPointer)
44896 move(imm, ARMRegisters::S1);
44897 store16(ARMRegisters::S1, address);
44899 void store16(TrustedImm32 imm, ImplicitAddress address)
44901 if (imm.m_isPointer)
44904 move(imm, ARMRegisters::S1);
44905 store16(ARMRegisters::S1, address);
44908 void store16(RegisterID src, void* address)
44910 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address));
44911 m_assembler.mem_imm_off(false, false, 16, true, src, ARMRegisters::S0, 0);
44914 void store16(TrustedImm32 imm, void* address)
44916 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address));
44917 if (imm.m_isPointer)
44920 m_assembler.moveImm(imm.m_value, ARMRegisters::S1);
44921 m_assembler.mem_imm_off(false, false, 16, true, ARMRegisters::S1, ARMRegisters::S0, 0);
44924 void store8(RegisterID src, ImplicitAddress address)
44926 m_assembler.dataTransferN(false, false, 16, src, address.base, address.offset);
44929 void store8(RegisterID src, BaseIndex address)
44931 m_assembler.baseIndexTransferN(false, false, 8, src, address.base, address.index, static_cast<int>(address.scale), address.offset);
44934 void store8(TrustedImm32 imm, BaseIndex address)
44936 if (imm.m_isPointer)
44939 move(imm, ARMRegisters::S1);
44940 store8(ARMRegisters::S1, address);
44943 void store8(TrustedImm32 imm, ImplicitAddress address)
44945 if (imm.m_isPointer)
44948 move(imm, ARMRegisters::S1);
44949 store8(ARMRegisters::S1, address);
44952 void store8(RegisterID src, void* address)
44954 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address));
44955 m_assembler.mem_imm_off(false, false, 8, true, src, ARMRegisters::S0, 0);
44958 void store8(TrustedImm32 imm, void* address)
44960 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address));
44961 if (imm.m_isPointer)
44964 m_assembler.moveImm(imm.m_value, ARMRegisters::S1);
44965 m_assembler.mem_imm_off(false, false, 8, true, ARMRegisters::S1, ARMRegisters::S0, 0);
44968 void pop(RegisterID dest)
44970 m_assembler.pop_r(dest);
44973 void push(RegisterID src)
44975 m_assembler.push_r(src);
44978 void push(Address address)
44980 load32(address, ARMRegisters::S1);
44981 push(ARMRegisters::S1);
44984 void push(Imm32 imm)
44986 move(imm, ARMRegisters::S0);
44987 push(ARMRegisters::S0);
44990 void move(TrustedImm32 imm, RegisterID dest)
44992 if (imm.m_isPointer)
44993 m_assembler.ldr_un_imm(dest, imm.m_value);
44995 m_assembler.moveImm(imm.m_value, dest);
44998 void move(RegisterID src, RegisterID dest)
45000 m_assembler.mov_r(dest, src);
45003 void move(TrustedImmPtr imm, RegisterID dest)
45005 move(Imm32(imm), dest);
45008 void swap(RegisterID reg1, RegisterID reg2)
45010 m_assembler.mov_r(ARMRegisters::S0, reg1);
45011 m_assembler.mov_r(reg1, reg2);
45012 m_assembler.mov_r(reg2, ARMRegisters::S0);
45015 void signExtend32ToPtr(RegisterID src, RegisterID dest)
45021 void zeroExtend32ToPtr(RegisterID src, RegisterID dest)
45027 Jump branch8(Condition cond, Address left, Imm32 right)
45029 load8(left, ARMRegisters::S1);
45030 return branch32(cond, ARMRegisters::S1, right);
45033 Jump branch32(Condition cond, RegisterID left, RegisterID right, int useConstantPool = 0)
45035 m_assembler.cmp_r(left, right);
45036 return Jump(m_assembler.jmp(ARMCondition(cond), useConstantPool));
45039 Jump branch32(Condition cond, RegisterID left, TrustedImm32 right, int useConstantPool = 0)
45042 if (right.m_isPointer) {
45043 m_assembler.ldr_un_imm(ARMRegisters::S0, right.m_value);
45044 m_assembler.cmp_r(left, ARMRegisters::S0);
45052 ARMWord arg = m_assembler.getOp2(right.m_value);
45053 if (arg != m_assembler.INVALID_IMM) {
45054 m_assembler.cmp_r(left, arg);
45058 arg = m_assembler.getOp2(-right.m_value);
45059 if (arg != m_assembler.INVALID_IMM) {
45060 m_assembler.cmn_r(left, arg);
45065 m_assembler.cmp_r(left, m_assembler.getImm(right.m_value, ARMRegisters::S0));
45069 return Jump(m_assembler.jmp(ARMCondition(cond), useConstantPool));
45076 Jump branch32FixedLength(Condition cond, RegisterID left, TrustedImm32 right)
45078 m_assembler.ldr_un_imm(ARMRegisters::S1, right.m_value);
45079 return branch32(cond, left, ARMRegisters::S1, true);
45083 Jump branch32WithPatch(Condition cond, RegisterID left, TrustedImm32 right, DataLabel32 &dataLabel)
45086 dataLabel = moveWithPatch(right, ARMRegisters::S1);
45087 return branch32(cond, left, ARMRegisters::S1, true);
45090 Jump branch32WithPatch(Condition cond, Address left, TrustedImm32 right, DataLabel32 &dataLabel)
45093 load32(left, ARMRegisters::S1);
45094 dataLabel = moveWithPatch(right, ARMRegisters::S0);
45095 return branch32(cond, ARMRegisters::S1, ARMRegisters::S0, true);
45098 Jump branch32(Condition cond, RegisterID left, Address right)
45101 load32(right, ARMRegisters::S1);
45102 return branch32(cond, left, ARMRegisters::S1);
45105 Jump branch32(Condition cond, Address left, RegisterID right)
45107 load32(left, ARMRegisters::S1);
45108 return branch32(cond, ARMRegisters::S1, right);
45111 Jump branch32(Condition cond, Address left, TrustedImm32 right)
45113 load32(left, ARMRegisters::S1);
45114 return branch32(cond, ARMRegisters::S1, right);
45117 Jump branch32(Condition cond, BaseIndex left, TrustedImm32 right)
45119 load32(left, ARMRegisters::S1);
45120 return branch32(cond, ARMRegisters::S1, right);
45123 Jump branch32WithUnalignedHalfWords(Condition cond, BaseIndex left, TrustedImm32 right)
45125 load32WithUnalignedHalfWords(left, ARMRegisters::S1);
45126 return branch32(cond, ARMRegisters::S1, right);
45129 Jump branch16(Condition cond, BaseIndex left, RegisterID right)
45134 __builtin_unreachable();
45138 Jump branch16(Condition cond, BaseIndex left, Imm32 right)
45140 load16(left, ARMRegisters::S0);
45141 move(right, ARMRegisters::S1);
45142 m_assembler.cmp_r(ARMRegisters::S0, ARMRegisters::S1);
45143 return m_assembler.jmp(ARMCondition(cond));
45146 Jump branchTest8(Condition cond, Address address, Imm32 mask = Imm32(-1))
45148 load8(address, ARMRegisters::S1);
45149 return branchTest32(cond, ARMRegisters::S1, mask);
45152 Jump branchTest32(Condition cond, RegisterID reg, RegisterID mask)
45155 m_assembler.tst_r(reg, mask);
45156 return Jump(m_assembler.jmp(ARMCondition(cond)));
45159 Jump branchTest32(Condition cond, RegisterID reg, Imm32 mask = Imm32(-1))
45162 ARMWord w = m_assembler.getImm(mask.m_value, ARMRegisters::S0, true);
45163 if (w & ARMAssembler::OP2_INV_IMM)
45164 m_assembler.bics_r(ARMRegisters::S0, reg, w & ~ARMAssembler::OP2_INV_IMM);
45166 m_assembler.tst_r(reg, w);
45167 return Jump(m_assembler.jmp(ARMCondition(cond)));
45170 Jump branchTest32(Condition cond, Address address, Imm32 mask = Imm32(-1))
45172 load32(address, ARMRegisters::S1);
45173 return branchTest32(cond, ARMRegisters::S1, mask);
45176 Jump branchTest32(Condition cond, BaseIndex address, Imm32 mask = Imm32(-1))
45178 load32(address, ARMRegisters::S1);
45179 return branchTest32(cond, ARMRegisters::S1, mask);
45184 return Jump(m_assembler.jmp());
45187 void jump(RegisterID target)
45189 m_assembler.bx(target);
45192 void jump(Address address)
45194 load32(address, ARMRegisters::pc);
45197 Jump branchAdd32(Condition cond, RegisterID src, RegisterID dest)
45201 return Jump(m_assembler.jmp(ARMCondition(cond)));
45204 Jump branchAdd32(Condition cond, Imm32 imm, RegisterID dest)
45208 return Jump(m_assembler.jmp(ARMCondition(cond)));
45211 Jump branchAdd32(Condition cond, Address src, RegisterID dest)
45215 return Jump(m_assembler.jmp(ARMCondition(cond)));
45218 void mull32(RegisterID src1, RegisterID src2, RegisterID dest)
45220 if (src1 == dest) {
45221 move(src1, ARMRegisters::S0);
45222 src1 = ARMRegisters::S0;
45224 m_assembler.mull_r(ARMRegisters::S1, dest, src2, src1);
45225 m_assembler.cmp_r(ARMRegisters::S1, m_assembler.asr(dest, 31));
45228 Jump branchMul32(Condition cond, RegisterID src, RegisterID dest)
45231 if (cond == Overflow) {
45232 mull32(src, dest, dest);
45237 return Jump(m_assembler.jmp(ARMCondition(cond)));
45240 Jump branchMul32(Condition cond, Imm32 imm, RegisterID src, RegisterID dest)
45243 if (cond == Overflow) {
45244 move(imm, ARMRegisters::S0);
45245 mull32(ARMRegisters::S0, src, dest);
45249 mul32(imm, src, dest);
45250 return Jump(m_assembler.jmp(ARMCondition(cond)));
45253 Jump branchSub32(Condition cond, RegisterID src, RegisterID dest)
45257 return Jump(m_assembler.jmp(ARMCondition(cond)));
45260 Jump branchSub32(Condition cond, Imm32 imm, RegisterID dest)
45264 return Jump(m_assembler.jmp(ARMCondition(cond)));
45267 Jump branchSub32(Condition cond, Address src, RegisterID dest)
45271 return Jump(m_assembler.jmp(ARMCondition(cond)));
45274 Jump branchSub32(Condition cond, Imm32 imm, Address dest)
45278 return Jump(m_assembler.jmp(ARMCondition(cond)));
45281 Jump branchNeg32(Condition cond, RegisterID srcDest)
45285 return Jump(m_assembler.jmp(ARMCondition(cond)));
45288 Jump branchOr32(Condition cond, RegisterID src, RegisterID dest)
45292 return Jump(m_assembler.jmp(ARMCondition(cond)));
45300 m_assembler.mov_r(tag, tag);
45305 m_assembler.bkpt(0);
45311 Call call(m_assembler.loadBranchTarget(ARMRegisters::S1, ARMAssembler::AL, true), Call::LinkableNear);
45312 m_assembler.blx(ARMRegisters::S1);
45320 Call call(RegisterID target)
45322 m_assembler.blx(target);
45324 return Call(jmpSrc, Call::None);
45327 void call(Address address)
45329 call32(address.base, address.offset);
45334 m_assembler.bx(linkRegister);
45337 void set32(Condition cond, Address left, RegisterID right, RegisterID dest)
45339 load32(left, ARMRegisters::S1);
45340 set32(cond, ARMRegisters::S1, right, dest);
45343 void set32(Condition cond, RegisterID left, Address right, RegisterID dest)
45345 load32(right, ARMRegisters::S1);
45346 set32(cond, left, ARMRegisters::S1, dest);
45349 void set32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
45351 m_assembler.cmp_r(left, right);
45352 m_assembler.mov_r(dest, ARMAssembler::getOp2(0));
45353 m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond));
45356 void set32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
45358 m_assembler.cmp_r(left, m_assembler.getImm(right.m_value, ARMRegisters::S0));
45359 m_assembler.mov_r(dest, ARMAssembler::getOp2(0));
45360 m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond));
45363 void set32(Condition cond, Address left, Imm32 right, RegisterID dest)
45365 load32(left, ARMRegisters::S1);
45366 set32(cond, ARMRegisters::S1, right, dest);
45369 void set8(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
45372 set32(cond, left, right, dest);
45375 void set8(Condition cond, Address left, RegisterID right, RegisterID dest)
45378 load32(left, ARMRegisters::S1);
45379 set32(cond, ARMRegisters::S1, right, dest);
45382 void set8(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
45385 set32(cond, left, right, dest);
45388 void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest)
45390 load32(address, ARMRegisters::S1);
45391 if (mask.m_value == -1)
45392 m_assembler.cmp_r(0, ARMRegisters::S1);
45394 m_assembler.tst_r(ARMRegisters::S1, m_assembler.getImm(mask.m_value, ARMRegisters::S0));
45395 m_assembler.mov_r(dest, ARMAssembler::getOp2(0));
45396 m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond));
45399 void setTest8(Condition cond, Address address, Imm32 mask, RegisterID dest)
45402 setTest32(cond, address, mask, dest);
45405 void add32(TrustedImm32 imm, RegisterID src, RegisterID dest)
45407 m_assembler.add_r(dest, src, m_assembler.getImm(imm.m_value, ARMRegisters::S0));
45410 void lea(Address address, RegisterID dest)
45412 m_assembler.add_r(dest, address.base, m_assembler.getImm(address.offset, ARMRegisters::S0));
45415 void lea(BaseIndex address, RegisterID dest)
45418 move(address.index, ARMRegisters::S1);
45419 if (address.scale != 0)
45420 lshift32(Imm32(address.scale), ARMRegisters::S1);
45421 if (address.offset)
45422 add32(Imm32(address.offset), ARMRegisters::S1);
45423 add32(address.base, ARMRegisters::S1);
45424 move(ARMRegisters::S1, dest);
45427 void add32(TrustedImm32 imm, AbsoluteAddress address)
45429 m_assembler.ldr_un_imm(ARMRegisters::S1, reinterpret_cast<ARMWord>(address.m_ptr));
45430 m_assembler.dtr_u(true, ARMRegisters::S1, ARMRegisters::S1, 0);
45431 add32(imm, ARMRegisters::S1);
45432 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address.m_ptr));
45433 m_assembler.dtr_u(false, ARMRegisters::S1, ARMRegisters::S0, 0);
45436 void sub32(TrustedImm32 imm, AbsoluteAddress address)
45438 m_assembler.ldr_un_imm(ARMRegisters::S1, reinterpret_cast<ARMWord>(address.m_ptr));
45439 m_assembler.dtr_u(true, ARMRegisters::S1, ARMRegisters::S1, 0);
45440 sub32(imm, ARMRegisters::S1);
45441 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address.m_ptr));
45442 m_assembler.dtr_u(false, ARMRegisters::S1, ARMRegisters::S0, 0);
45445 void load32(void* address, RegisterID dest)
45447 m_assembler.ldr_un_imm(ARMRegisters::S0, reinterpret_cast<ARMWord>(address));
45448 m_assembler.dtr_u(true, dest, ARMRegisters::S0, 0);
45451 Jump branch32(Condition cond, AbsoluteAddress left, RegisterID right)
45453 load32(left.m_ptr, ARMRegisters::S1);
45454 return branch32(cond, ARMRegisters::S1, right);
45457 Jump branch32(Condition cond, AbsoluteAddress left, TrustedImm32 right)
45459 load32(left.m_ptr, ARMRegisters::S1);
45460 return branch32(cond, ARMRegisters::S1, right);
45466 Call call(m_assembler.loadBranchTarget(ARMRegisters::S1, ARMAssembler::AL, true), Call::Linkable);
45467 m_assembler.blx(ARMRegisters::S1);
45475 Call tailRecursiveCall()
45477 return Call::fromTailJump(jump());
45480 Call makeTailRecursiveCall(Jump oldJump)
45482 return Call::fromTailJump(oldJump);
45485 DataLabelPtr moveWithPatch(TrustedImmPtr initialValue, RegisterID dest)
45487 DataLabelPtr dataLabel(this);
45488 m_assembler.ldr_un_imm(dest, reinterpret_cast<ARMWord>(initialValue.m_value));
45492 DataLabel32 moveWithPatch(TrustedImm32 initialValue, RegisterID dest)
45494 DataLabel32 dataLabel(this);
45495 m_assembler.ldr_un_imm(dest, initialValue.m_value);
45499 Jump branchPtrWithPatch(Condition cond, RegisterID left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0))
45501 dataLabel = moveWithPatch(initialRightValue, ARMRegisters::S1);
45502 Jump jump = branch32(cond, left, ARMRegisters::S1, true);
45506 Jump branchPtrWithPatch(Condition cond, Address left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0))
45508 load32(left, ARMRegisters::S1);
45509 dataLabel = moveWithPatch(initialRightValue, ARMRegisters::S0);
45510 Jump jump = branch32(cond, ARMRegisters::S0, ARMRegisters::S1, true);
45514 DataLabelPtr storePtrWithPatch(TrustedImmPtr initialValue, ImplicitAddress address)
45516 DataLabelPtr dataLabel = moveWithPatch(initialValue, ARMRegisters::S1);
45517 store32(ARMRegisters::S1, address);
45521 DataLabelPtr storePtrWithPatch(ImplicitAddress address)
45523 return storePtrWithPatch(ImmPtr(0), address);
45527 bool supportsFloatingPoint() const
45529 return s_isVFPPresent;
45532 bool supportsFloatingPointTruncate() const
45537 bool supportsFloatingPointSqrt() const
45539 return s_isVFPPresent;
45542 void moveDouble(FPRegisterID src, FPRegisterID dest)
45544 m_assembler.fcpyd_r(dest, src);
45547 void loadDouble(ImplicitAddress address, FPRegisterID dest)
45550 m_assembler.doubleTransfer(true, dest, address.base, address.offset);
45553 void loadDouble(BaseIndex address, FPRegisterID dest)
45555 m_assembler.baseIndexFloatTransfer(true, true, dest,
45556 address.base, address.index,
45557 address.scale, address.offset);
45560 DataLabelPtr loadDouble(const void* address, FPRegisterID dest)
45562 DataLabelPtr label = moveWithPatch(ImmPtr(address), ARMRegisters::S0);
45563 m_assembler.doubleTransfer(true, dest, ARMRegisters::S0, 0);
45567 void fastLoadDouble(RegisterID lo, RegisterID hi, FPRegisterID fpReg) {
45568 m_assembler.vmov64(false, true, lo, hi, fpReg);
45571 void loadFloat(ImplicitAddress address, FPRegisterID dest)
45574 dest = (FPRegisterID) (dest * 2);
45576 m_assembler.floatTransfer(true, dest, address.base, address.offset);
45577 m_assembler.vcvt(m_assembler.FloatReg32, m_assembler.FloatReg64, (FPRegisterID)(dest*2), dest);
45579 void loadFloat(BaseIndex address, FPRegisterID dest)
45581 m_assembler.baseIndexFloatTransfer(true, false, (FPRegisterID)(dest*2),
45582 address.base, address.index,
45583 address.scale, address.offset);
45584 m_assembler.vcvt(m_assembler.FloatReg32, m_assembler.FloatReg64, (FPRegisterID)(dest*2), dest);
45587 DataLabelPtr loadFloat(const void* address, FPRegisterID dest)
45589 DataLabelPtr label = moveWithPatch(ImmPtr(address), ARMRegisters::S0);
45590 m_assembler.fmem_imm_off(true, false, true, (FPRegisterID)(dest*2), ARMRegisters::S0, 0);
45591 m_assembler.vcvt(m_assembler.FloatReg32, m_assembler.FloatReg64, (FPRegisterID)(dest*2), dest);
45595 void storeDouble(FPRegisterID src, ImplicitAddress address)
45598 m_assembler.doubleTransfer(false, src, address.base, address.offset);
45601 void storeDouble(FPRegisterID src, BaseIndex address)
45603 m_assembler.baseIndexFloatTransfer(false, true, src,
45604 address.base, address.index,
45605 address.scale, address.offset);
45608 void storeDouble(ImmDouble imm, Address address)
45610 store32(Imm32(imm.u.s.lsb), address);
45611 store32(Imm32(imm.u.s.msb), Address(address.base, address.offset + 4));
45614 void storeDouble(ImmDouble imm, BaseIndex address)
45616 store32(Imm32(imm.u.s.lsb), address);
45617 store32(Imm32(imm.u.s.msb),
45618 BaseIndex(address.base, address.index, address.scale, address.offset + 4));
45620 void fastStoreDouble(FPRegisterID fpReg, RegisterID lo, RegisterID hi) {
45621 m_assembler.vmov64(true, true, lo, hi, fpReg);
45624 void storeFloat(FPRegisterID src, ImplicitAddress address)
45626 m_assembler.floatTransfer(false, src, address.base, address.offset);
45629 void storeFloat(FPRegisterID src, BaseIndex address)
45631 m_assembler.baseIndexFloatTransfer(false, false, src,
45632 address.base, address.index,
45633 address.scale, address.offset);
45635 void storeFloat(ImmDouble imm, Address address)
45642 store32(Imm32(u.u32), address);
45645 void storeFloat(ImmDouble imm, BaseIndex address)
45652 store32(Imm32(u.u32), address);
45655 void addDouble(FPRegisterID src, FPRegisterID dest)
45657 m_assembler.faddd_r(dest, dest, src);
45660 void addDouble(Address src, FPRegisterID dest)
45662 loadDouble(src, ARMRegisters::SD0);
45663 addDouble(ARMRegisters::SD0, dest);
45666 void divDouble(FPRegisterID src, FPRegisterID dest)
45668 m_assembler.fdivd_r(dest, dest, src);
45671 void divDouble(Address src, FPRegisterID dest)
45673 __builtin_unreachable();
45674 loadDouble(src, ARMRegisters::SD0);
45675 divDouble(ARMRegisters::SD0, dest);
45678 void subDouble(FPRegisterID src, FPRegisterID dest)
45680 m_assembler.fsubd_r(dest, dest, src);
45683 void subDouble(Address src, FPRegisterID dest)
45685 loadDouble(src, ARMRegisters::SD0);
45686 subDouble(ARMRegisters::SD0, dest);
45689 void mulDouble(FPRegisterID src, FPRegisterID dest)
45691 m_assembler.fmuld_r(dest, dest, src);
45694 void mulDouble(Address src, FPRegisterID dest)
45696 loadDouble(src, ARMRegisters::SD0);
45697 mulDouble(ARMRegisters::SD0, dest);
45700 void negDouble(FPRegisterID src, FPRegisterID dest)
45702 m_assembler.fnegd_r(dest, src);
45705 void absDouble(FPRegisterID src, FPRegisterID dest)
45707 m_assembler.fabsd_r(dest, src);
45710 void sqrtDouble(FPRegisterID src, FPRegisterID dest)
45712 m_assembler.fsqrtd_r(dest, src);
45715 void convertInt32ToDouble(RegisterID src, FPRegisterID dest)
45717 m_assembler.fmsr_r(floatShadow(dest), src);
45718 m_assembler.fsitod_r(dest, floatShadow(dest));
45721 void convertUInt32ToDouble(RegisterID src, FPRegisterID dest)
45723 m_assembler.fmsr_r(floatShadow(dest), src);
45724 m_assembler.fuitod_r(dest, floatShadow(dest));
45727 void convertInt32ToDouble(Address src, FPRegisterID dest)
45730 load32(src, ARMRegisters::S1);
45731 convertInt32ToDouble(ARMRegisters::S1, dest);
45734 void convertInt32ToDouble(AbsoluteAddress src, FPRegisterID dest)
45736 __builtin_unreachable();
45738 m_assembler.ldr_un_imm(ARMRegisters::S1, (ARMWord)src.m_ptr);
45739 m_assembler.dtr_u(true, ARMRegisters::S1, ARMRegisters::S1, 0);
45740 convertInt32ToDouble(ARMRegisters::S1, dest);
45743 void convertDoubleToFloat(FPRegisterID src, FPRegisterID dest)
45745 m_assembler.vcvt(m_assembler.FloatReg64, m_assembler.FloatReg32, src, dest);
45748 Jump branchDouble(DoubleCondition cond, FPRegisterID left, FPRegisterID right)
45750 m_assembler.fcmpd_r(left, right);
45751 m_assembler.fmstat();
45752 if (cond & DoubleConditionBitSpecial)
45753 m_assembler.cmp_r(ARMRegisters::S0, ARMRegisters::S0, ARMAssembler::VS);
45754 return Jump(m_assembler.jmp(static_cast<ARMAssembler::Condition>(cond & ~DoubleConditionMask)));
45760 Jump branchTruncateDoubleToInt32(FPRegisterID src, RegisterID dest)
45762 m_assembler.ftosizd_r(floatShadow(ARMRegisters::SD0), src);
45766 m_assembler.fmrs_r(dest, floatShadow(ARMRegisters::SD0));
45767 m_assembler.cmn_r(dest, ARMAssembler::getOp2(-0x7fffffff));
45768 m_assembler.cmp_r(dest, ARMAssembler::getOp2(0x80000000), ARMCondition(NonZero));
45769 return Jump(m_assembler.jmp(ARMCondition(Zero)));
45776 void branchConvertDoubleToInt32(FPRegisterID src, RegisterID dest, JumpList& failureCases, FPRegisterID fpTemp)
45778 m_assembler.ftosid_r(floatShadow(ARMRegisters::SD0), src);
45779 m_assembler.fmrs_r(dest, floatShadow(ARMRegisters::SD0));
45782 m_assembler.fsitod_r(ARMRegisters::SD0, floatShadow(ARMRegisters::SD0));
45783 failureCases.append(branchDouble(DoubleNotEqualOrUnordered, src, ARMRegisters::SD0));
45786 failureCases.append(branchTest32(Zero, dest));
45789 void zeroDouble(FPRegisterID srcDest)
45791 m_assembler.mov_r(ARMRegisters::S0, ARMAssembler::getOp2(0));
45792 convertInt32ToDouble(ARMRegisters::S0, srcDest);
45795 void ensureSpace(int space)
45797 m_assembler.ensureSpace(space);
45800 void forceFlushConstantPool()
45802 m_assembler.forceFlushConstantPool();
45807 return m_assembler.flushCount();
45811 ARMAssembler::Condition ARMCondition(Condition cond)
45813 return static_cast<ARMAssembler::Condition>(cond);
45816 void ensureSpace(int insnSpace, int constSpace)
45818 m_assembler.ensureSpace(insnSpace, constSpace);
45821 int sizeOfConstantPool()
45823 return m_assembler.sizeOfConstantPool();
45825 # 1460 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssemblerARM.h"
45826 void call32(RegisterID base, int32_t offset)
45829 if (base == ARMRegisters::sp)
45831 # 1480 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssemblerARM.h"
45833 if (offset <= 0xfff) {
45834 m_assembler.dtr_u(true, ARMRegisters::S0, base, offset);
45835 } else if (offset <= 0xfffff) {
45836 m_assembler.add_r(ARMRegisters::S0, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8));
45837 m_assembler.dtr_u(true, ARMRegisters::S0, ARMRegisters::S0, offset & 0xfff);
45839 m_assembler.moveImm(offset, ARMRegisters::S0);
45840 m_assembler.dtr_ur(true, ARMRegisters::S0, base, ARMRegisters::S0);
45844 if (offset <= 0xfff) {
45845 m_assembler.dtr_d(true, ARMRegisters::S0, base, offset);
45846 } else if (offset <= 0xfffff) {
45847 m_assembler.sub_r(ARMRegisters::S0, base, ARMAssembler::OP2_IMM | (offset >> 12) | (10 << 8));
45848 m_assembler.dtr_d(true, ARMRegisters::S0, ARMRegisters::S0, offset & 0xfff);
45850 m_assembler.moveImm(offset, ARMRegisters::S0);
45851 m_assembler.dtr_dr(true, ARMRegisters::S0, base, ARMRegisters::S0);
45854 m_assembler.blx(ARMRegisters::S0);
45859 friend class LinkBuffer;
45860 friend class RepatchBuffer;
45862 static void linkCall(void* code, Call call, FunctionPtr function)
45864 ARMAssembler::linkCall(code, call.m_jmp, function.value());
45867 static void repatchCall(CodeLocationCall call, CodeLocationLabel destination)
45869 ARMAssembler::relinkCall(call.dataLocation(), destination.executableAddress());
45872 static void repatchCall(CodeLocationCall call, FunctionPtr destination)
45874 ARMAssembler::relinkCall(call.dataLocation(), destination.executableAddress());
45877 static const bool s_isVFPPresent;
45881 # 43 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssembler.h" 2
45882 namespace JSC { typedef MacroAssemblerARM MacroAssemblerBase; }
45883 # 66 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssembler.h"
45886 class MacroAssembler : public MacroAssemblerBase {
45889 using MacroAssemblerBase::pop;
45890 using MacroAssemblerBase::jump;
45891 using MacroAssemblerBase::branch32;
45892 using MacroAssemblerBase::branch16;
45893 # 83 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/assembler/assembler/MacroAssembler.h"
45896 addPtr(Imm32(sizeof(void*)), stackPointerRegister);
45899 void peek(RegisterID dest, int index = 0)
45901 loadPtr(Address(stackPointerRegister, (index * sizeof(void*))), dest);
45904 void poke(RegisterID src, int index = 0)
45906 storePtr(src, Address(stackPointerRegister, (index * sizeof(void*))));
45909 void poke(TrustedImm32 value, int index = 0)
45911 store32(value, Address(stackPointerRegister, (index * sizeof(void*))));
45914 void poke(TrustedImmPtr imm, int index = 0)
45916 storePtr(imm, Address(stackPointerRegister, (index * sizeof(void*))));
45921 void branchPtr(Condition cond, RegisterID op1, ImmPtr imm, Label target)
45923 branchPtr(cond, op1, imm).linkTo(target, this);
45926 void branch32(Condition cond, RegisterID op1, RegisterID op2, Label target)
45928 branch32(cond, op1, op2).linkTo(target, this);
45931 void branch32(Condition cond, RegisterID op1, TrustedImm32 imm, Label target)
45933 branch32(cond, op1, imm).linkTo(target, this);
45936 void branch32(Condition cond, RegisterID left, Address right, Label target)
45938 branch32(cond, left, right).linkTo(target, this);
45941 void branch16(Condition cond, BaseIndex left, RegisterID right, Label target)
45943 branch16(cond, left, right).linkTo(target, this);
45946 void branchTestPtr(Condition cond, RegisterID reg, Label target)
45948 branchTestPtr(cond, reg).linkTo(target, this);
45951 void jump(Label target)
45953 jump().linkTo(target, this);
45961 void addPtr(RegisterID src, RegisterID dest)
45966 void addPtr(Imm32 imm32, Address address)
45968 add32(imm32, address);
45971 void addPtr(Imm32 imm, RegisterID srcDest)
45973 add32(imm, srcDest);
45976 void addPtr(ImmPtr imm, RegisterID dest)
45978 add32(Imm32(imm), dest);
45981 void addPtr(Imm32 imm, RegisterID src, RegisterID dest)
45983 add32(imm, src, dest);
45986 void andPtr(RegisterID src, RegisterID dest)
45991 void andPtr(Imm32 imm, RegisterID srcDest)
45993 and32(imm, srcDest);
45996 void andPtr(ImmPtr ptr, RegisterID srcDest)
45998 and32(Imm32(ptr), srcDest);
46001 void negPtr(RegisterID srcDest)
46006 void notPtr(RegisterID srcDest)
46011 void orPtr(RegisterID src, RegisterID dest)
46016 void orPtr(ImmPtr imm, RegisterID dest)
46018 or32(Imm32(imm), dest);
46021 void orPtr(Imm32 imm, RegisterID dest)
46026 void subPtr(RegisterID src, RegisterID dest)
46031 void subPtr(Imm32 imm, RegisterID dest)
46036 void subPtr(ImmPtr imm, RegisterID dest)
46038 sub32(Imm32(imm), dest);
46041 void subPtr(ImmPtr imm, Address address)
46043 sub32(Imm32(imm), address);
46046 void xorPtr(RegisterID src, RegisterID dest)
46051 void xorPtr(Imm32 imm, RegisterID srcDest)
46053 xor32(imm, srcDest);
46057 void loadPtr(ImplicitAddress address, RegisterID dest)
46059 load32(address, dest);
46062 void loadPtr(BaseIndex address, RegisterID dest)
46064 load32(address, dest);
46067 void loadPtr(void* address, RegisterID dest)
46069 load32(address, dest);
46072 DataLabel32 loadPtrWithAddressOffsetPatch(Address address, RegisterID dest)
46074 return load32WithAddressOffsetPatch(address, dest);
46077 void setPtr(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
46079 set32(cond, left, right, dest);
46082 void storePtr(RegisterID src, ImplicitAddress address)
46084 store32(src, address);
46087 void storePtr(RegisterID src, void* address)
46089 store32(src, address);
46092 void storePtr(TrustedImmPtr imm, ImplicitAddress address)
46094 store32(Imm32(imm), address);
46097 void storePtr(TrustedImmPtr imm, BaseIndex address)
46099 store32(Imm32(imm), address);
46102 void storePtr(TrustedImmPtr imm, void* address)
46104 store32(Imm32(imm), address);
46107 DataLabel32 storePtrWithAddressOffsetPatch(RegisterID src, Address address)
46109 return store32WithAddressOffsetPatch(src, address);
46113 Jump branchPtr(Condition cond, RegisterID left, RegisterID right)
46115 return branch32(cond, left, right);
46118 Jump branchPtr(Condition cond, RegisterID left, ImmPtr right)
46120 return branch32(cond, left, Imm32(right));
46123 Jump branchPtr(Condition cond, RegisterID left, Imm32 right)
46125 return branch32(cond, left, right);
46128 Jump branchPtr(Condition cond, RegisterID left, Address right)
46130 return branch32(cond, left, right);
46133 Jump branchPtr(Condition cond, Address left, RegisterID right)
46135 return branch32(cond, left, right);
46138 Jump branchPtr(Condition cond, AbsoluteAddress left, RegisterID right)
46140 return branch32(cond, left, right);
46143 Jump branchPtr(Condition cond, Address left, ImmPtr right)
46145 return branch32(cond, left, Imm32(right));
46148 Jump branchPtr(Condition cond, AbsoluteAddress left, ImmPtr right, RegisterID scratch)
46150 return branch32(cond, left, Imm32(right));
46153 Jump branchTestPtr(Condition cond, RegisterID reg, RegisterID mask)
46155 return branchTest32(cond, reg, mask);
46158 Jump branchTestPtr(Condition cond, RegisterID reg, Imm32 mask = Imm32(-1))
46160 return branchTest32(cond, reg, mask);
46163 Jump branchTestPtr(Condition cond, Address address, Imm32 mask = Imm32(-1))
46165 return branchTest32(cond, address, mask);
46168 Jump branchTestPtr(Condition cond, BaseIndex address, Imm32 mask = Imm32(-1))
46170 return branchTest32(cond, address, mask);
46174 Jump branchAddPtr(Condition cond, RegisterID src, RegisterID dest)
46176 return branchAdd32(cond, src, dest);
46179 Jump branchSubPtr(Condition cond, Imm32 imm, RegisterID dest)
46181 return branchSub32(cond, imm, dest);
46184 using MacroAssemblerBase::branchTest8;
46185 Jump branchTest8(Condition cond, ExtendedAddress address, Imm32 mask = Imm32(-1))
46187 return MacroAssemblerBase::branchTest8(cond, Address(address.base, address.offset), mask);
46190 void rshiftPtr(Imm32 imm, RegisterID dest)
46192 rshift32(imm, dest);
46195 void lshiftPtr(Imm32 imm, RegisterID dest)
46197 lshift32(imm, dest);
46204 # 38 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrJIT.h" 2
46215 class JSGlobalData;
46216 class ExecutablePool;
46220 class YarrCodeBlock {
46221 typedef int (*YarrJITCode)(const UChar* input, unsigned start, unsigned length, int* output) ;
46225 : m_needFallBack(false)
46233 void setFallBack(bool fallback) { m_needFallBack = fallback; }
46234 bool isFallBack() { return m_needFallBack; }
46235 void set(MacroAssembler::CodeRef ref) { m_ref = ref; }
46237 int execute(const UChar* input, unsigned start, unsigned length, int* output)
46239 return __extension__((reinterpret_cast<YarrJITCode>(m_ref.m_code.executableAddress()))(input, start, length, output));
46246 void release() { m_ref.release(); }
46249 MacroAssembler::CodeRef m_ref;
46250 bool m_needFallBack;
46253 void jitCompile(YarrPattern&, JSGlobalData*, YarrCodeBlock& jitObject);
46254 int execute(YarrCodeBlock& jitObject, const UChar* input, unsigned start, unsigned length, int* output);
46257 # 22 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h" 2
46259 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrSyntaxChecker.h" 1
46260 # 31 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrSyntaxChecker.h"
46261 #define YarrSyntaxChecker_h
46264 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrParser.h" 1
46265 # 31 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrParser.h"
46266 #define YarrParser_h
46268 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/Yarr.h" 1
46269 # 34 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrParser.h" 2
46271 namespace JSC { namespace Yarr {
46273 #define REGEXP_ERROR_PREFIX "Invalid regular expression: "
46275 enum BuiltInCharacterClassID {
46283 template<class Delegate>
46286 template<class FriendDelegate>
46287 friend ErrorCode parse(FriendDelegate& delegate, const UString& pattern, unsigned backReferenceLimit);
46288 # 62 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrParser.h"
46289 class CharacterClassParserDelegate {
46291 CharacterClassParserDelegate(Delegate& delegate, ErrorCode& err)
46292 : m_delegate(delegate)
46304 void begin(bool invert)
46306 m_delegate.atomCharacterClassBegin(invert);
46308 # 91 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrParser.h"
46309 void atomPatternCharacter(UChar ch, bool hyphenIsRange = false)
46312 case AfterCharacterClass:
46320 if (hyphenIsRange && ch == '-') {
46321 m_delegate.atomCharacterClassAtom('-');
46322 m_state = AfterCharacterClassHyphen;
46329 m_state = CachedCharacter;
46332 case CachedCharacter:
46333 if (hyphenIsRange && ch == '-')
46334 m_state = CachedCharacterHyphen;
46336 m_delegate.atomCharacterClassAtom(m_character);
46341 case CachedCharacterHyphen:
46342 if (ch < m_character) {
46343 m_err = CharacterClassOutOfOrder;
46346 m_delegate.atomCharacterClassRange(m_character, ch);
46350 case AfterCharacterClassHyphen:
46351 m_delegate.atomCharacterClassAtom(ch);
46362 void atomBuiltInCharacterClass(BuiltInCharacterClassID classID, bool invert)
46365 case CachedCharacter:
46367 m_delegate.atomCharacterClassAtom(m_character);
46370 case AfterCharacterClass:
46371 m_state = AfterCharacterClass;
46372 m_delegate.atomCharacterClassBuiltIn(classID, invert);
46375 case CachedCharacterHyphen:
46378 m_err = CharacterClassInvalidRange;
46381 case AfterCharacterClassHyphen:
46382 m_delegate.atomCharacterClassBuiltIn(classID, invert);
46395 if (m_state == CachedCharacter)
46396 m_delegate.atomCharacterClassAtom(m_character);
46397 else if (m_state == CachedCharacterHyphen) {
46398 m_delegate.atomCharacterClassAtom(m_character);
46399 m_delegate.atomCharacterClassAtom('-');
46401 m_delegate.atomCharacterClassEnd();
46406 void assertionWordBoundary(bool) { __builtin_unreachable(); }
46407 void atomBackReference(unsigned) { __builtin_unreachable(); }
46410 Delegate& m_delegate;
46412 enum CharacterClassConstructionState {
46415 CachedCharacterHyphen,
46416 AfterCharacterClass,
46417 AfterCharacterClassHyphen
46422 Parser(Delegate& delegate, const UString& pattern, unsigned backReferenceLimit)
46423 : m_delegate(delegate)
46424 , m_backReferenceLimit(backReferenceLimit)
46426 , m_data(pattern.chars())
46427 , m_size(pattern.length())
46429 , m_parenthesesNestingDepth(0)
46432 # 235 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrParser.h"
46433 template<bool inCharacterClass, class EscapeDelegate>
46434 bool parseEscape(EscapeDelegate& delegate)
46440 if (atEndOfPattern()) {
46441 m_err = EscapeUnterminated;
46449 if (inCharacterClass)
46450 delegate.atomPatternCharacter('\b');
46452 delegate.assertionWordBoundary(false);
46458 if (inCharacterClass)
46459 delegate.atomPatternCharacter('B');
46461 delegate.assertionWordBoundary(true);
46469 delegate.atomBuiltInCharacterClass(DigitClassID, false);
46473 delegate.atomBuiltInCharacterClass(SpaceClassID, false);
46477 delegate.atomBuiltInCharacterClass(WordClassID, false);
46481 delegate.atomBuiltInCharacterClass(DigitClassID, true);
46485 delegate.atomBuiltInCharacterClass(SpaceClassID, true);
46489 delegate.atomBuiltInCharacterClass(WordClassID, true);
46504 if (!inCharacterClass) {
46505 ParseState state = saveState();
46507 unsigned backReference;
46508 if (!consumeNumber(backReference))
46510 if (backReference <= m_backReferenceLimit) {
46511 delegate.atomBackReference(backReference);
46515 restoreState(state);
46519 if (peek() >= '8') {
46520 delegate.atomPatternCharacter('\\');
46529 delegate.atomPatternCharacter(consumeOctal());
46535 delegate.atomPatternCharacter('\f');
46539 delegate.atomPatternCharacter('\n');
46543 delegate.atomPatternCharacter('\r');
46547 delegate.atomPatternCharacter('\t');
46551 delegate.atomPatternCharacter('\v');
46556 ParseState state = saveState();
46558 if (!atEndOfPattern()) {
46559 int control = consume();
46562 if (inCharacterClass ? WTF::isASCIIAlphanumeric(control) || (control == '_') : WTF::isASCIIAlpha(control)) {
46563 delegate.atomPatternCharacter(control & 0x1f);
46567 restoreState(state);
46568 delegate.atomPatternCharacter('\\');
46575 int x = tryConsumeHex(2);
46577 delegate.atomPatternCharacter('x');
46579 delegate.atomPatternCharacter(x);
46586 int u = tryConsumeHex(4);
46588 delegate.atomPatternCharacter('u');
46590 delegate.atomPatternCharacter(u);
46596 delegate.atomPatternCharacter(consume());
46607 bool parseAtomEscape()
46609 return parseEscape<false>(m_delegate);
46611 void parseCharacterClassEscape(CharacterClassParserDelegate& delegate)
46613 parseEscape<true>(delegate);
46615 # 425 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrParser.h"
46616 void parseCharacterClass()
46622 CharacterClassParserDelegate characterClassConstructor(m_delegate, m_err);
46624 characterClassConstructor.begin(tryConsume('^'));
46626 while (!atEndOfPattern()) {
46630 characterClassConstructor.end();
46634 parseCharacterClassEscape(characterClassConstructor);
46638 characterClassConstructor.atomPatternCharacter(consume(), true);
46645 m_err = CharacterClassUnmatched;
46653 void parseParenthesesBegin()
46659 if (tryConsume('?')) {
46660 if (atEndOfPattern()) {
46661 m_err = ParenthesesTypeInvalid;
46665 switch (consume()) {
46667 m_delegate.atomParenthesesSubpatternBegin(false);
46671 m_delegate.atomParentheticalAssertionBegin();
46675 m_delegate.atomParentheticalAssertionBegin(true);
46679 m_err = ParenthesesTypeInvalid;
46682 m_delegate.atomParenthesesSubpatternBegin();
46684 ++m_parenthesesNestingDepth;
46692 void parseParenthesesEnd()
46698 if (m_parenthesesNestingDepth > 0)
46699 m_delegate.atomParenthesesEnd();
46701 m_err = ParenthesesUnmatched;
46703 --m_parenthesesNestingDepth;
46711 void parseQuantifier(bool lastTokenWasAnAtom, unsigned min, unsigned max)
46716 if (min == unsigned(-1)) {
46717 m_err = QuantifierTooLarge;
46721 if (lastTokenWasAnAtom)
46722 m_delegate.quantifyAtom(min, max, !tryConsume('?'));
46724 m_err = QuantifierWithoutAtom;
46726 # 545 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrParser.h"
46729 bool lastTokenWasAnAtom = false;
46731 while (!atEndOfPattern()) {
46735 m_delegate.disjunction();
46736 lastTokenWasAnAtom = false;
46740 parseParenthesesBegin();
46741 lastTokenWasAnAtom = false;
46745 parseParenthesesEnd();
46746 lastTokenWasAnAtom = true;
46751 m_delegate.assertionBOL();
46752 lastTokenWasAnAtom = false;
46757 m_delegate.assertionEOL();
46758 lastTokenWasAnAtom = false;
46763 m_delegate.atomBuiltInCharacterClass(NewlineClassID, true);
46764 lastTokenWasAnAtom = true;
46768 parseCharacterClass();
46769 lastTokenWasAnAtom = true;
46773 lastTokenWasAnAtom = parseAtomEscape();
46778 parseQuantifier(lastTokenWasAnAtom, 0, quantifyInfinite);
46779 lastTokenWasAnAtom = false;
46784 parseQuantifier(lastTokenWasAnAtom, 1, quantifyInfinite);
46785 lastTokenWasAnAtom = false;
46790 parseQuantifier(lastTokenWasAnAtom, 0, 1);
46791 lastTokenWasAnAtom = false;
46795 ParseState state = saveState();
46798 if (peekIsDigit()) {
46800 if (!consumeNumber(min))
46802 unsigned max = min;
46804 if (tryConsume(',')) {
46805 if (peekIsDigit()) {
46806 if (!consumeNumber(max))
46809 max = quantifyInfinite;
46813 if (tryConsume('}')) {
46815 parseQuantifier(lastTokenWasAnAtom, min, max);
46817 m_err = QuantifierOutOfOrder;
46818 lastTokenWasAnAtom = false;
46823 restoreState(state);
46827 m_delegate.atomPatternCharacter(consume());
46828 lastTokenWasAnAtom = true;
46835 if (m_parenthesesNestingDepth > 0)
46836 m_err = MissingParentheses;
46847 if (m_size > MAX_PATTERN_SIZE)
46848 m_err = PatternTooLarge;
46859 typedef unsigned ParseState;
46861 ParseState saveState()
46866 void restoreState(ParseState state)
46871 bool atEndOfPattern()
46874 return m_index == m_size;
46880 return m_data[m_index];
46885 return !atEndOfPattern() && WTF::isASCIIDigit(peek());
46888 unsigned peekDigit()
46891 return peek() - '0';
46897 return m_data[m_index++];
46900 unsigned consumeDigit()
46903 return consume() - '0';
46906 bool consumeNumber(unsigned &accum)
46908 accum = consumeDigit();
46909 while (peekIsDigit()) {
46910 unsigned newValue = accum * 10 + peekDigit();
46911 if (newValue < accum) {
46912 m_err = QuantifierTooLarge;
46921 unsigned consumeOctal()
46925 unsigned n = consumeDigit();
46926 while (n < 32 && !atEndOfPattern() && WTF::isASCIIOctalDigit(peek()))
46927 n = n * 8 + consumeDigit();
46931 bool tryConsume(UChar ch)
46933 if (atEndOfPattern() || (m_data[m_index] != ch))
46939 int tryConsumeHex(int count)
46941 ParseState state = saveState();
46945 if (atEndOfPattern() || !WTF::isASCIIHexDigit(peek())) {
46946 restoreState(state);
46949 n = (n << 4) | WTF::toASCIIHexValue(consume());
46954 Delegate& m_delegate;
46955 unsigned m_backReferenceLimit;
46957 const UChar* m_data;
46960 unsigned m_parenthesesNestingDepth;
46963 static const unsigned MAX_PATTERN_SIZE = 1024 * 1024;
46965 # 843 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrParser.h"
46966 template<class Delegate>
46967 ErrorCode parse(Delegate& delegate, const UString& pattern, unsigned backReferenceLimit = quantifyInfinite)
46969 return Parser<Delegate>(delegate, pattern, backReferenceLimit).parse();
46973 # 35 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/yarr/YarrSyntaxChecker.h" 2
46975 namespace JSC { namespace Yarr {
46977 ErrorCode checkSyntax(const UString& pattern);
46980 # 24 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h" 2
46981 # 45 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h"
46984 enum RegExpRunStatus
46986 RegExpRunStatus_Error,
46987 RegExpRunStatus_Success,
46988 RegExpRunStatus_Success_NotFound
46991 class RegExpObjectBuilder
46994 Rooted<RegExpObject*> reobj_;
46996 bool getOrCreate();
46997 bool getOrCreateClone(RegExpObject *proto);
47000 RegExpObjectBuilder(JSContext *cx, RegExpObject *reobj = __null);
47002 RegExpObject *reobj() { return reobj_; }
47004 RegExpObject *build(HandleAtom source, RegExpFlag flags);
47005 RegExpObject *build(HandleAtom source, RegExpShared &shared);
47008 RegExpObject *clone(Handle<RegExpObject*> other, Handle<RegExpObject*> proto);
47012 CloneRegExpObject(JSContext *cx, JSObject *obj, JSObject *proto);
47018 typedef JSC::Yarr::BytecodePattern BytecodePattern;
47019 typedef JSC::Yarr::ErrorCode ErrorCode;
47020 typedef JSC::Yarr::YarrPattern YarrPattern;
47022 typedef JSC::Yarr::JSGlobalData JSGlobalData;
47023 typedef JSC::Yarr::YarrCodeBlock YarrCodeBlock;
47026 YarrCodeBlock codeBlock;
47028 BytecodePattern *byteCode;
47041 codeBlock.release();
47044 Foreground::delete_<BytecodePattern>(byteCode);
47047 static bool checkSyntax(JSContext *cx, TokenStream *tokenStream, JSLinearString *source) {
47048 ErrorCode error = JSC::Yarr::checkSyntax(*source);
47049 if (error == JSC::Yarr::NoError)
47052 reportYarrError(cx, tokenStream, error);
47057 static inline bool isJITRuntimeEnabled(JSContext *cx);
47059 static void reportYarrError(JSContext *cx, TokenStream *ts, JSC::Yarr::ErrorCode error);
47061 static size_t getOutputSize(size_t pairCount) {
47062 return pairCount * 2;
47065 bool compile(JSContext *cx, JSLinearString &pattern, unsigned *parenCount, RegExpFlag flags);
47069 execute(JSContext *cx, const jschar *chars, size_t length, size_t start,
47070 int *output, size_t outputCount);
47074 # 161 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h"
47077 friend class RegExpCompartment;
47078 friend class RegExpGuard;
47080 detail::RegExpCode code;
47081 unsigned parenCount;
47083 size_t activeUseCount;
47084 uint64_t gcNumberWhenUsed;
47086 bool compile(JSContext *cx, JSAtom *source);
47088 RegExpShared(JSRuntime *rt, RegExpFlag flags);
47089 friend class js::OffTheBooks; friend class js::Foreground; friend class js::UnwantedForeground; friend struct ::JSContext; friend struct ::JSRuntime;
47094 inline void prepareForUse(JSContext *cx);
47099 execute(JSContext *cx, const jschar *chars, size_t length, size_t *lastIndex,
47100 MatchPairs **output);
47104 size_t getParenCount() const { return parenCount; }
47105 void incRef() { activeUseCount++; }
47106 void decRef() { do { } while(0); activeUseCount--; }
47109 size_t pairCount() const { return parenCount + 1; }
47111 RegExpFlag getFlags() const { return flags; }
47112 bool ignoreCase() const { return flags & IgnoreCaseFlag; }
47113 bool global() const { return flags & GlobalFlag; }
47114 bool multiline() const { return flags & MultilineFlag; }
47115 bool sticky() const { return flags & StickyFlag; }
47125 RegExpGuard(const RegExpGuard &) ;
47126 void operator=(const RegExpGuard &) ;
47128 RegExpGuard() : re_(__null) {}
47129 RegExpGuard(RegExpShared &re) : re_(&re) {
47132 void init(RegExpShared &re) {
47141 bool initialized() const { return !!re_; }
47142 RegExpShared *re() const { do { } while(0); return re_; }
47143 RegExpShared *operator->() { return re(); }
47144 RegExpShared &operator*() { return *re(); }
47147 class RegExpCompartment
47149 enum Type { Normal = 0x0, Hack = 0x1 };
47156 Key(JSAtom *atom, RegExpFlag flag, Type type)
47157 : atom(atom), flag(flag), type(type) {}
47158 typedef Key Lookup;
47159 static HashNumber hash(const Lookup &l) {
47160 return DefaultHasher<JSAtom *>::hash(l.atom) ^ (l.flag << 1) ^ l.type;
47162 static bool match(Key l, Key r) {
47163 return l.atom == r.atom && l.flag == r.flag && l.type == r.type;
47167 typedef HashMap<Key, RegExpShared *, Key, RuntimeAllocPolicy> Map;
47170 bool get(JSContext *cx, JSAtom *key, JSAtom *source, RegExpFlag flags, Type type,
47174 RegExpCompartment(JSRuntime *rt);
47175 ~RegExpCompartment();
47177 bool init(JSContext *cx);
47178 void sweep(JSRuntime *rt);
47181 bool get(JSContext *cx, JSAtom *source, RegExpFlag flags, RegExpGuard *g);
47184 bool get(JSContext *cx, JSAtom *source, JSString *maybeOpt, RegExpGuard *g);
47185 # 283 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h"
47186 bool getHack(JSContext *cx, JSAtom *source, JSAtom *hackedSource, RegExpFlag flags,
47194 bool lookupHack(JSAtom *source, RegExpFlag flags, JSContext *cx, RegExpGuard *g);
47197 class RegExpObject : public JSObject
47199 typedef detail::RegExpCode RegExpCode;
47201 static const unsigned LAST_INDEX_SLOT = 0;
47202 static const unsigned SOURCE_SLOT = 1;
47203 static const unsigned GLOBAL_FLAG_SLOT = 2;
47204 static const unsigned IGNORE_CASE_FLAG_SLOT = 3;
47205 static const unsigned MULTILINE_FLAG_SLOT = 4;
47206 static const unsigned STICKY_FLAG_SLOT = 5;
47209 static const unsigned RESERVED_SLOTS = 6;
47216 static RegExpObject *
47217 create(JSContext *cx, RegExpStatics *res, const jschar *chars, size_t length,
47218 RegExpFlag flags, TokenStream *ts);
47220 static RegExpObject *
47221 createNoStatics(JSContext *cx, const jschar *chars, size_t length, RegExpFlag flags,
47224 static RegExpObject *
47225 createNoStatics(JSContext *cx, HandleAtom atom, RegExpFlag flags, TokenStream *ts);
47226 # 335 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h"
47228 execute(JSContext *cx, const jschar *chars, size_t length, size_t *lastIndex,
47229 MatchPairs **output);
47233 const Value &getLastIndex() const {
47234 return getSlot(LAST_INDEX_SLOT);
47236 inline void setLastIndex(const Value &v);
47237 inline void setLastIndex(double d);
47238 inline void zeroLastIndex();
47240 JSFlatString *toString(JSContext *cx) const;
47242 JSAtom *getSource() const {
47243 return &getSlot(SOURCE_SLOT).toString()->asAtom();
47245 inline void setSource(JSAtom *source);
47247 RegExpFlag getFlags() const {
47248 unsigned flags = 0;
47249 flags |= global() ? GlobalFlag : 0;
47250 flags |= ignoreCase() ? IgnoreCaseFlag : 0;
47251 flags |= multiline() ? MultilineFlag : 0;
47252 flags |= sticky() ? StickyFlag : 0;
47253 return RegExpFlag(flags);
47258 inline void setIgnoreCase(bool enabled);
47259 inline void setGlobal(bool enabled);
47260 inline void setMultiline(bool enabled);
47261 inline void setSticky(bool enabled);
47262 bool ignoreCase() const { return getSlot(IGNORE_CASE_FLAG_SLOT).toBoolean(); }
47263 bool global() const { return getSlot(GLOBAL_FLAG_SLOT).toBoolean(); }
47264 bool multiline() const { return getSlot(MULTILINE_FLAG_SLOT).toBoolean(); }
47265 bool sticky() const { return getSlot(STICKY_FLAG_SLOT).toBoolean(); }
47267 inline void shared(RegExpGuard *g) const;
47268 inline bool getShared(JSContext *cx, RegExpGuard *g);
47269 inline void setShared(JSContext *cx, RegExpShared &shared);
47272 friend class RegExpObjectBuilder;
47279 Shape *assignInitialShape(JSContext *cx);
47281 inline bool init(JSContext *cx, HandleAtom source, RegExpFlag flags);
47287 bool createShared(JSContext *cx, RegExpGuard *g);
47288 RegExpShared *maybeShared() const;
47291 void setPrivate(void *priv) ;
47301 ParseRegExpFlags(JSContext *cx, JSString *flagStr, RegExpFlag *flagsOut);
47302 # 419 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpObject.h"
47304 RegExpToShared(JSContext *cx, JSObject &obj, RegExpGuard *g);
47306 template<XDRMode mode>
47308 XDRScriptRegExpObject(XDRState<mode> *xdr, HeapPtrObject *objp);
47311 CloneScriptRegExpObject(JSContext *cx, RegExpObject &re);
47314 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscompartment.h" 2
47319 extern Class dummy_class;
47320 # 32 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscompartment.h"
47326 DtoaCache() : s(__null) {}
47327 void purge() { s = __null; }
47329 JSFixedString *lookup(int base, double d) {
47330 return this->s && base == this->base && d == this->d ? this->s : __null;
47333 void cache(int base, double d, JSFixedString *s) {
47342 typedef int moz_static_assert103[(sizeof(HashNumber) == 4) ? 1 : -1];
47344 struct WrapperHasher
47346 typedef Value Lookup;
47348 static HashNumber hash(Value key) {
47350 uint64_t bits = JSVAL_TO_IMPL(key).asBits;
47351 return uint32_t(bits) ^ uint32_t(bits >> 32);
47354 static bool match(const Value &l, const Value &k) { return l == k; }
47357 typedef HashMap<Value, ReadBarrieredValue, WrapperHasher, SystemAllocPolicy> WrapperMap;
47362 struct TypeInferenceSizes;
47366 class AutoDebugModeGC;
47369 struct JSCompartment
47372 JSPrincipals *principals;
47374 js::gc::ArenaLists arenas;
47377 bool needsBarrier_;
47380 bool needsBarrier() const {
47381 return needsBarrier_;
47384 void setNeedsBarrier(bool needs);
47386 js::GCMarker *barrierTracer() {
47388 return &rt->gcMarker;
47392 enum CompartmentGCState {
47398 CompartmentGCState gcState;
47399 bool gcPreserveCode;
47402 bool isCollecting() const {
47404 if (rt->gcRunning) {
47405 return gcState == GCRunning;
47408 return needsBarrier();
47412 bool isPreservingCode() const {
47413 return gcPreserveCode;
47420 bool requireGCTracer() const {
47421 return gcState == GCRunning;
47424 void setCollecting(bool collecting) {
47427 gcState = GCRunning;
47429 gcState = NoGCScheduled;
47432 void scheduleGC() {
47435 gcState = GCScheduled;
47438 void unscheduleGC() {
47441 gcState = NoGCScheduled;
47444 bool isGCScheduled() const {
47445 return gcState == GCScheduled;
47448 void setPreservingCode(bool preserving) {
47449 gcPreserveCode = preserving;
47453 size_t gcTriggerBytes;
47454 size_t gcMaxMallocBytes;
47457 bool isSystemCompartment;
47459 int64_t lastCodeRelease;
47466 static const size_t TYPE_LIFO_ALLOC_PRIMARY_CHUNK_SIZE = 128 * 1024;
47467 js::LifoAlloc typeLifoAlloc;
47468 bool activeAnalysis;
47469 bool activeInference;
47472 js::types::TypeCompartment types;
47476 js::WrapperMap crossCompartmentWrappers;
47479 int64_t lastAnimationTime;
47481 js::RegExpCompartment regExps;
47483 size_t sizeOfShapeTable(JSMallocSizeOfFun mallocSizeOf);
47484 void sizeOfTypeInferenceData(JS::TypeInferenceSizes *stats, JSMallocSizeOfFun mallocSizeOf);
47489 js::PropertyTree propertyTree;
47492 js::BaseShapeSet baseShapes;
47493 void sweepBaseShapeTable();
47496 js::InitialShapeSet initialShapes;
47497 void sweepInitialShapeTable();
47500 js::types::TypeObjectSet newTypeObjects;
47501 js::types::TypeObjectSet lazyTypeObjects;
47502 void sweepNewTypeObjectTable(js::types::TypeObjectSet &table);
47504 js::ReadBarriered<js::types::TypeObject> emptyTypeObject;
47507 inline js::types::TypeObject *getEmptyType(JSContext *cx);
47509 js::types::TypeObject *getLazyType(JSContext *cx, JSObject *proto);
47517 size_t gcMallocAndFreeBytes;
47518 size_t gcTriggerMallocAndFreeBytes;
47526 ptrdiff_t gcMallocBytes;
47528 enum { DebugFromC = 1, DebugFromJS = 2 };
47530 unsigned debugModeBits;
47533 JSCompartment(JSRuntime *rt);
47536 bool init(JSContext *cx);
47539 void markCrossCompartmentWrappers(JSTracer *trc);
47541 bool wrap(JSContext *cx, js::Value *vp);
47542 bool wrap(JSContext *cx, JSString **strp);
47543 bool wrap(JSContext *cx, js::HeapPtrString *strp);
47544 bool wrap(JSContext *cx, JSObject **objp);
47545 bool wrapId(JSContext *cx, jsid *idp);
47546 bool wrap(JSContext *cx, js::PropertyOp *op);
47547 bool wrap(JSContext *cx, js::StrictPropertyOp *op);
47548 bool wrap(JSContext *cx, js::PropertyDescriptor *desc);
47549 bool wrap(JSContext *cx, js::AutoIdVector &props);
47551 void markTypes(JSTracer *trc);
47552 void discardJitCode(js::FreeOp *fop);
47553 void sweep(js::FreeOp *fop, bool releaseTypes);
47554 void sweepCrossCompartmentWrappers();
47557 void setGCLastBytes(size_t lastBytes, size_t lastMallocBytes, js::JSGCInvocationKind gckind);
47558 void reduceGCTriggerBytes(size_t amount);
47560 void resetGCMallocBytes();
47561 void setGCMaxMallocBytes(size_t value);
47562 void updateMallocCounter(size_t nbytes) {
47563 ptrdiff_t oldCount = gcMallocBytes;
47564 ptrdiff_t newCount = oldCount - ptrdiff_t(nbytes);
47565 gcMallocBytes = newCount;
47566 if ((__builtin_expect((newCount <= 0 && oldCount > 0), 0)))
47570 bool isTooMuchMalloc() const {
47571 return gcMallocBytes <= 0;
47574 void onTooMuchMalloc();
47576 void mallocInCompartment(size_t nbytes) {
47577 gcMallocAndFreeBytes += nbytes;
47580 void freeInCompartment(size_t nbytes) {
47582 gcMallocAndFreeBytes -= nbytes;
47585 js::DtoaCache dtoaCache;
47592 js::GlobalObjectSet debuggees;
47595 JSCompartment *thisForCtor() { return this; }
47605 bool debugMode() const { return !!debugModeBits; }
47608 bool hasScriptsOnStack();
47612 void updateForDebugMode(js::FreeOp *fop, js::AutoDebugModeGC &dmgc);
47615 js::GlobalObjectSet &getDebuggees() { return debuggees; }
47616 bool addDebuggee(JSContext *cx, js::GlobalObject *global);
47617 void removeDebuggee(js::FreeOp *fop, js::GlobalObject *global,
47618 js::GlobalObjectSet::Enum *debuggeesEnum = __null);
47619 bool setDebugModeFromC(JSContext *cx, bool b, js::AutoDebugModeGC &dmgc);
47621 void clearBreakpointsIn(js::FreeOp *fop, js::Debugger *dbg, JSObject *handler);
47622 void clearTraps(js::FreeOp *fop);
47625 void sweepBreakpoints(js::FreeOp *fop);
47628 js::WatchpointMap *watchpointMap;
47630 js::ScriptCountsMap *scriptCountsMap;
47632 js::SourceMapMap *sourceMapMap;
47634 js::DebugScriptMap *debugScriptMap;
47641 class js::AutoDebugModeGC
47646 explicit AutoDebugModeGC(JSRuntime *rt) : rt(rt), needGC(false) {}
47648 ~AutoDebugModeGC() {
47654 GC(rt, GC_NORMAL, gcreason::DEBUG_MODE_GC);
47657 void scheduleGC(JSCompartment *compartment) {
47659 PrepareCompartmentForGC(compartment);
47665 JSContext::setCompartment(JSCompartment *compartment)
47667 this->compartment = compartment;
47668 this->inferenceEnabled = compartment ? compartment->types.inferenceEnabled : false;
47673 class PreserveCompartment {
47677 JSCompartment *oldCompartment;
47678 bool oldInferenceEnabled;
47681 PreserveCompartment(JSContext *cx ) : cx(cx) {
47683 oldCompartment = cx->compartment;
47684 oldInferenceEnabled = cx->inferenceEnabled;
47687 ~PreserveCompartment() {
47689 cx->compartment = oldCompartment;
47690 cx->inferenceEnabled = oldInferenceEnabled;
47694 class SwitchToCompartment : public PreserveCompartment {
47696 SwitchToCompartment(JSContext *cx, JSCompartment *newCompartment
47698 : PreserveCompartment(cx)
47701 cx->setCompartment(newCompartment);
47704 SwitchToCompartment(JSContext *cx, JSObject *target )
47705 : PreserveCompartment(cx)
47708 cx->setCompartment(target->compartment());
47714 class AssertCompartmentUnchanged {
47716 JSContext * const cx;
47717 JSCompartment * const oldCompartment;
47720 AssertCompartmentUnchanged(JSContext *cx )
47721 : cx(cx), oldCompartment(cx->compartment) {
47725 ~AssertCompartmentUnchanged() {
47730 class AutoCompartment
47733 JSContext * const context;
47734 JSCompartment * const origin;
47735 JSObject * const target;
47736 JSCompartment * const destination;
47738 Maybe<DummyFrameGuard> frame;
47742 AutoCompartment(JSContext *cx, JSObject *target);
47743 ~AutoCompartment();
47749 AutoCompartment(const AutoCompartment &) ;
47750 AutoCompartment & operator=(const AutoCompartment &) ;
47760 AutoCompartment ∾
47761 RootedObject scope;
47764 ErrorCopier(AutoCompartment &ac, JSObject *scope) : ac(ac), scope(ac.context, scope) {
47770 class CompartmentsIter {
47772 JSCompartment **it, **end;
47775 CompartmentsIter(JSRuntime *rt) {
47776 it = rt->compartments.begin();
47777 end = rt->compartments.end();
47780 bool done() const { return it == end; }
47787 JSCompartment *get() const {
47792 operator JSCompartment *() const { return get(); }
47793 JSCompartment *operator->() const { return get(); }
47797 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h" 2
47798 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
47808 # 82 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
47815 uint32_t dynamicArgc;
47819 static size_t offsetOfDynamicArgc() {
47820 return __builtin_offsetof (VMFrame, u.call.dynamicArgc);
47827 static size_t offsetOfRegsSp() {
47828 return __builtin_offsetof (VMFrame, regs.sp);
47831 static size_t offsetOfRegsPc() {
47832 return __builtin_offsetof (VMFrame, regs.pc);
47837 StackFrame *entryfp;
47838 FrameRegs *oldregs;
47839 JSRejoinState stubRejoin;
47840 # 162 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
47851 inline void** returnAddressLocation() {
47852 return reinterpret_cast<void**>(this) - 1;
47854 # 202 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
47855 JSRuntime *runtime() { return cx->runtime; }
47863 StackFrame *fp() { return regs.fp(); }
47864 mjit::JITScript *jit() { return fp()->jit(); }
47866 inline mjit::JITChunk *chunk();
47867 inline unsigned chunkIndex();
47870 inline JSScript *script();
47871 inline jsbytecode *pc();
47872 # 227 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
47873 static const size_t offsetOfFp = 4 * sizeof(void *) + FrameRegs::offsetOfFp;
47874 static const size_t offsetOfInlined = 4 * sizeof(void *) + FrameRegs::offsetOfInlined;
47877 static void staticAssert() {
47878 typedef int moz_static_assert104[(offsetOfFp == __builtin_offsetof (VMFrame, regs) + FrameRegs::offsetOfFp) ? 1 : -1];
47879 typedef int moz_static_assert105[(offsetOfInlined == __builtin_offsetof (VMFrame, regs) + FrameRegs::offsetOfInlined) ? 1 : -1];
47885 extern "C" void JaegerStubVeneer(void);
47896 # 259 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
47897 REJOIN_SCRIPTED = 1,
47912 REJOIN_FALLTHROUGH,
47921 REJOIN_NATIVE_LOWERED,
47922 REJOIN_NATIVE_GETTER,
47929 REJOIN_NATIVE_PATCHED,
47932 REJOIN_PUSH_BOOLEAN,
47933 REJOIN_PUSH_OBJECT,
47936 REJOIN_DEFLOCALFUN,
47942 REJOIN_THIS_PROTOTYPE,
47948 REJOIN_CHECK_ARGUMENTS,
47954 REJOIN_FUNCTION_PROLOGUE,
47960 REJOIN_CALL_PROLOGUE,
47961 REJOIN_CALL_PROLOGUE_LOWERED_CALL,
47962 REJOIN_CALL_PROLOGUE_LOWERED_APPLY,
47980 static inline JSRejoinState
47981 ScriptedRejoin(uint32_t pcOffset)
47983 return REJOIN_SCRIPTED | (pcOffset << 1);
47987 static inline JSRejoinState
47988 StubRejoin(RejoinState rejoin)
47990 return rejoin << 1;
47994 struct RecompilationMonitor
48003 unsigned recompilations;
48004 unsigned frameExpansions;
48009 RecompilationMonitor(JSContext *cx)
48011 recompilations(cx->compartment->types.recompilations),
48012 frameExpansions(cx->compartment->types.frameExpansions),
48013 gcNumber(cx->runtime->gcNumber)
48016 bool recompiled() {
48017 return cx->compartment->types.recompilations != recompilations
48018 || cx->compartment->types.frameExpansions != frameExpansions
48019 || cx->runtime->gcNumber != gcNumber;
48027 struct Trampolines {
48028 typedef void (*TrampolinePtr)();
48030 TrampolinePtr forceReturn;
48031 JSC::ExecutablePool *forceReturnPool;
48043 Jaeger_Throwing = 0,
48046 Jaeger_Returned = 1,
48052 Jaeger_Unfinished = 2,
48059 Jaeger_UnfinishedAtTrap = 3,
48065 Jaeger_ThrowBeforeEnter = 4
48069 JaegerStatusToSuccess(JaegerStatus status)
48073 return status == Jaeger_Returned;
48077 class JaegerRuntime
48079 Trampolines trampolines;
48080 VMFrame *activeFrame_;
48081 JaegerStatus lastUnfinished_;
48087 bool init(JSContext *cx);
48090 ~JaegerRuntime() { finish(); }
48092 VMFrame *activeFrame() {
48093 return activeFrame_;
48096 void pushActiveFrame(VMFrame *f) {
48098 f->previous = activeFrame_;
48099 f->scratch = __null;
48103 void popActiveFrame() {
48105 activeFrame_ = activeFrame_->previous;
48108 void setLastUnfinished(JaegerStatus status) {
48110 lastUnfinished_ = status;
48113 JaegerStatus lastUnfinished() {
48114 JaegerStatus result = lastUnfinished_;
48115 lastUnfinished_ = (JaegerStatus) 0;
48125 void *forceReturnFromExternC() const {
48126 return (__extension__ (void *) (size_t) (trampolines.forceReturn));
48134 void *forceReturnFromFastCall() const {
48138 return (__extension__ (void *) (size_t) (trampolines.forceReturn));
48147 Vector<StackFrame *, 8, SystemAllocPolicy> orphanedNativeFrames;
48148 Vector<JSC::ExecutablePool *, 8, SystemAllocPolicy> orphanedNativePools;
48150 # 520 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
48151 class CompilerAllocPolicy : public TempAllocPolicy
48155 void *checkAlloc(void *p) {
48162 CompilerAllocPolicy(JSContext *cx, bool *oomFlag)
48163 : TempAllocPolicy(cx), oomFlag(oomFlag) {}
48164 CompilerAllocPolicy(JSContext *cx, Compiler &compiler);
48166 void *malloc_(size_t bytes) { return checkAlloc(TempAllocPolicy::malloc_(bytes)); }
48167 void *realloc_(void *p, size_t oldBytes, size_t bytes) {
48168 return checkAlloc(TempAllocPolicy::realloc_(p, oldBytes, bytes));
48175 struct GetElementIC;
48176 struct SetElementIC;
48179 struct GetGlobalNameIC;
48180 struct SetGlobalNameIC;
48181 struct EqualityICInfo;
48187 typedef void ( *VoidStub)(VMFrame &);
48188 typedef void ( *VoidVpStub)(VMFrame &, Value *);
48189 typedef void ( *VoidStubUInt32)(VMFrame &, uint32_t);
48190 typedef void ( *VoidStubInt32)(VMFrame &, int32_t);
48191 typedef JSBool ( *BoolStub)(VMFrame &);
48192 typedef void * ( *VoidPtrStub)(VMFrame &);
48193 typedef void * ( *VoidPtrStubPC)(VMFrame &, jsbytecode *);
48194 typedef void * ( *VoidPtrStubUInt32)(VMFrame &, uint32_t);
48195 typedef JSObject * ( *JSObjStub)(VMFrame &);
48196 typedef JSObject * ( *JSObjStubUInt32)(VMFrame &, uint32_t);
48197 typedef JSObject * ( *JSObjStubFun)(VMFrame &, JSFunction *);
48198 typedef void ( *VoidStubFun)(VMFrame &, JSFunction *);
48199 typedef JSObject * ( *JSObjStubJSObj)(VMFrame &, JSObject *);
48200 typedef void ( *VoidStubName)(VMFrame &, PropertyName *);
48201 typedef JSString * ( *JSStrStub)(VMFrame &);
48202 typedef JSString * ( *JSStrStubUInt32)(VMFrame &, uint32_t);
48203 typedef void ( *VoidStubJSObj)(VMFrame &, JSObject *);
48204 typedef void ( *VoidStubPC)(VMFrame &, jsbytecode *);
48205 typedef JSBool ( *BoolStubUInt32)(VMFrame &f, uint32_t);
48207 typedef void ( *VoidStubCallIC)(VMFrame &, js::mjit::ic::CallICInfo *);
48208 typedef void * ( *VoidPtrStubCallIC)(VMFrame &, js::mjit::ic::CallICInfo *);
48209 typedef void ( *VoidStubGetGlobal)(VMFrame &, js::mjit::ic::GetGlobalNameIC *);
48210 typedef void ( *VoidStubSetGlobal)(VMFrame &, js::mjit::ic::SetGlobalNameIC *);
48211 typedef JSBool ( *BoolStubEqualityIC)(VMFrame &, js::mjit::ic::EqualityICInfo *);
48214 typedef void ( *VoidStubPIC)(VMFrame &, js::mjit::ic::PICInfo *);
48215 typedef void ( *VoidStubGetElemIC)(VMFrame &, js::mjit::ic::GetElementIC *);
48216 typedef void ( *VoidStubSetElemIC)(VMFrame &f, js::mjit::ic::SetElementIC *);
48221 struct InlineFrame;
48224 struct NativeMapEntry {
48230 struct PCLengthEntry {
48240 struct NativeCallStub {
48245 JSC::ExecutablePool *pool;
48246 # 624 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
48247 JSC::CodeLocationJump jump;
48253 typedef JSC::MacroAssemblerCodeRef CodeRef;
48256 PCLengthEntry *pcLengths;
48257 # 643 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
48258 uint32_t nNmapPairs : 31;
48260 uint32_t nInlineFrames;
48261 uint32_t nCallSites;
48262 uint32_t nRootedTemplates;
48263 uint32_t nRootedRegExps;
48265 uint32_t nGetGlobalNames;
48266 uint32_t nSetGlobalNames;
48268 uint32_t nEqualityICs;
48271 uint32_t nGetElems;
48272 uint32_t nSetElems;
48278 typedef Vector<JSC::ExecutablePool *, 0, SystemAllocPolicy> ExecPoolVector;
48279 ExecPoolVector execPools;
48283 Vector<NativeCallStub, 0, SystemAllocPolicy> nativeCallStubs;
48285 NativeMapEntry *nmap() const;
48286 js::mjit::InlineFrame *inlineFrames() const;
48287 js::mjit::CallSite *callSites() const;
48288 JSObject **rootedTemplates() const;
48289 RegExpShared **rootedRegExps() const;
48291 ic::GetGlobalNameIC *getGlobalNames() const;
48292 ic::SetGlobalNameIC *setGlobalNames() const;
48293 ic::CallICInfo *callICs() const;
48294 ic::EqualityICInfo *equalityICs() const;
48297 ic::GetElementIC *getElems() const;
48298 ic::SetElementIC *setElems() const;
48299 ic::PICInfo *pics() const;
48302 bool isValidCode(void *ptr) {
48303 char *jitcode = (char *)code.m_code.executableAddress();
48304 char *jcheck = (char *)ptr;
48305 return jcheck >= jitcode && jcheck < jitcode + code.m_size;
48308 size_t computedSizeOfIncludingThis();
48309 size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf);
48313 void trace(JSTracer *trc);
48314 void purgeCaches();
48318 char *commonSectionLimit() const;
48319 char *monoICSectionsLimit() const;
48320 char *polyICSectionsLimit() const;
48324 SetChunkLimit(uint32_t limit);
48327 struct ChunkDescriptor
48339 ChunkDescriptor() { PodZero(this); }
48343 struct CrossChunkEdge
48352 # 747 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h"
48353 typedef Vector<void**,4,SystemAllocPolicy> JumpTableEntryVector;
48354 JumpTableEntryVector *jumpTableEntries;
48366 CrossChunkEdge() { PodZero(this); }
48375 void *arityCheckEntry;
48376 void *argsCheckEntry;
48388 JSC::ExecutablePool *shimPool;
48392 JSC::CodeLocationLabel argsCheckStub;
48393 JSC::CodeLocationLabel argsCheckFallthrough;
48394 JSC::CodeLocationJump argsCheckJump;
48395 JSC::ExecutablePool *argsCheckPool;
48396 void resetArgsCheck();
48399 ChunkDescriptor &chunkDescriptor(unsigned i) {
48401 ChunkDescriptor *descs = (ChunkDescriptor *) ((char *) this + sizeof(JITScript));
48405 unsigned chunkIndex(jsbytecode *pc) {
48406 unsigned offset = pc - script->code;
48408 for (unsigned i = 0; i < nchunks; i++) {
48409 const ChunkDescriptor &desc = chunkDescriptor(i);
48411 if (offset < desc.end)
48414 __builtin_unreachable();
48418 JITChunk *chunk(jsbytecode *pc) {
48419 return chunkDescriptor(chunkIndex(pc)).chunk;
48422 JITChunk *findCodeChunk(void *addr);
48424 CrossChunkEdge *edges() {
48425 return (CrossChunkEdge *) (&chunkDescriptor(0) + nchunks);
48429 void patchEdge(const CrossChunkEdge &edge, void *label);
48431 jsbytecode *nativeToPC(void *returnAddress, CallSite **pinline);
48433 size_t sizeOfIncludingThis(JSMallocSizeOfFun mallocSizeOf);
48435 void destroy(FreeOp *fop);
48436 void destroyChunk(FreeOp *fop, unsigned chunkIndex, bool resetUses = true);
48438 void trace(JSTracer *trc);
48439 void purgeCaches();
48446 JaegerStatus EnterMethodJIT(JSContext *cx, StackFrame *fp, void *code, Value *stackLimit,
48450 JaegerStatus JaegerShot(JSContext *cx, bool partial);
48453 JaegerStatus JaegerShotAtSafePoint(JSContext *cx, void *safePoint, bool partial);
48459 Compile_InlineAbort,
48466 ProfileStubCall(VMFrame &f);
48468 enum CompileRequest
48470 CompileRequest_Interpreter,
48475 CanMethodJIT(JSContext *cx, JSScript *script, jsbytecode *pc,
48476 bool construct, CompileRequest request);
48479 ReleaseScriptCode(FreeOp *fop, JSScript *script)
48481 if (!script->hasJITInfo())
48484 for (int constructing = 0; constructing <= 1; constructing++) {
48485 for (int barriers = 0; barriers <= 1; barriers++) {
48486 JSScript::JITScriptHandle *jith = script->jitHandle((bool) constructing, (bool) barriers);
48487 if (jith && jith->isValid())
48488 JSScript::ReleaseCode(fop, jith);
48492 script->destroyJITInfo(fop);
48497 ExpandInlineFrames(JSCompartment *compartment);
48502 ClearAllFrames(JSCompartment *compartment);
48507 InlineFrame *parent;
48508 jsbytecode *parentpc;
48509 HeapPtrFunction fun;
48518 uint32_t codeOffset;
48519 uint32_t inlineIndex;
48521 RejoinState rejoin;
48523 void initialize(uint32_t codeOffset, uint32_t inlineIndex, uint32_t pcOffset,
48524 RejoinState rejoin) {
48525 this->codeOffset = codeOffset;
48526 this->inlineIndex = inlineIndex;
48527 this->pcOffset = pcOffset;
48528 this->rejoin = rejoin;
48531 bool isTrap() const {
48532 return rejoin == REJOIN_TRAP;
48537 DumpAllProfiles(JSContext *cx);
48539 inline void * bsearch_nmap(NativeMapEntry *nmap, size_t nPairs, size_t bcOff)
48541 size_t lo = 1, hi = nPairs;
48546 size_t mid = (lo + hi) / 2;
48547 size_t bcOff_mid = nmap[mid-1].bcOff;
48548 if (bcOff < bcOff_mid) {
48552 if (bcOff > bcOff_mid) {
48556 return nmap[mid-1].ncode;
48561 IsLowerableFunCallOrApply(jsbytecode *pc)
48564 return (*pc == JSOP_FUNCALL && ((unsigned)(((pc)[1] << 8) | (pc)[2])) >= 1) ||
48565 (*pc == JSOP_FUNAPPLY && ((unsigned)(((pc)[1] << 8) | (pc)[2])) == 2);
48573 inline mjit::JITChunk *
48576 return jit()->chunk(regs.pc);
48580 VMFrame::chunkIndex()
48582 return jit()->chunkIndex(regs.pc);
48588 if (regs.inlined())
48589 return chunk()->inlineFrames()[regs.inlined()->inlineIndex].fun->script();
48590 return fp()->script();
48593 inline jsbytecode *
48596 if (regs.inlined())
48597 return script()->code + regs.inlined()->pcOffset;
48604 JSScript::nativeCodeForPC(bool constructing, jsbytecode *pc)
48606 js::mjit::JITScript *jit = getJIT(constructing, compartment()->needsBarrier());
48609 js::mjit::JITChunk *chunk = jit->chunk(pc);
48612 return bsearch_nmap(chunk->nmap(), chunk->nNmapPairs, (size_t)(pc - code));
48615 extern "C" void JaegerTrampolineReturn();
48616 extern "C" void JaegerInterpoline();
48617 extern "C" void JaegerInterpolineScripted();
48622 extern "C" void JaegerThrowpoline();
48623 # 21 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h" 2
48626 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl-inl.h" 1
48627 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl-inl.h"
48628 #define ObjectImpl_inl_h___
48633 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgc.h" 1
48634 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl-inl.h" 2
48635 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinterp.h" 1
48636 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinterp.h"
48637 #define jsinterp_h___
48638 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinterp.h"
48648 ScriptPrologue(JSContext *cx, StackFrame *fp, JSScript *script);
48651 ScriptEpilogue(JSContext *cx, StackFrame *fp, bool ok);
48652 # 40 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinterp.h"
48654 ScriptPrologueOrGeneratorResume(JSContext *cx, StackFrame *fp);
48657 ScriptEpilogueOrGeneratorYield(JSContext *cx, StackFrame *fp, bool ok);
48658 # 65 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinterp.h"
48659 extern JSTrapStatus
48660 ScriptDebugPrologue(JSContext *cx, StackFrame *fp);
48661 # 83 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinterp.h"
48663 ScriptDebugEpilogue(JSContext *cx, StackFrame *fp, bool ok);
48672 BoxNonStrictThis(JSContext *cx, const CallReceiver &call);
48681 ComputeThis(JSContext *cx, StackFrame *fp);
48683 enum MaybeConstruct {
48684 NO_CONSTRUCT = INITIAL_NONE,
48685 CONSTRUCT = INITIAL_CONSTRUCT
48694 InvokeKernel(JSContext *cx, CallArgs args, MaybeConstruct construct = NO_CONSTRUCT);
48701 Invoke(JSContext *cx, InvokeArgsGuard &args, MaybeConstruct construct = NO_CONSTRUCT)
48704 bool ok = InvokeKernel(cx, args, construct);
48705 args.setInactive();
48715 Invoke(JSContext *cx, const Value &thisv, const Value &fval, unsigned argc, Value *argv,
48723 InvokeGetterOrSetter(JSContext *cx, JSObject *obj, const Value &fval, unsigned argc, Value *argv,
48731 InvokeConstructorKernel(JSContext *cx, const CallArgs &args);
48735 InvokeConstructor(JSContext *cx, InvokeArgsGuard &args)
48738 bool ok = InvokeConstructorKernel(cx, ImplicitCast<CallArgs>(args));
48739 args.setInactive();
48745 InvokeConstructor(JSContext *cx, const Value &fval, unsigned argc, Value *argv, Value *rval);
48754 ExecuteKernel(JSContext *cx, JSScript *script, JSObject &scopeChain, const Value &thisv,
48755 ExecuteType type, StackFrame *evalInFrame, Value *result);
48759 Execute(JSContext *cx, JSScript *script, JSObject &scopeChain, Value *rval);
48764 JSINTERP_NORMAL = 0,
48765 JSINTERP_REJOIN = 1,
48766 JSINTERP_SKIP_TRAP = 2
48773 extern __attribute__((noinline)) bool
48774 Interpret(JSContext *cx, StackFrame *stopFp, InterpMode mode = JSINTERP_NORMAL);
48777 RunScript(JSContext *cx, JSScript *script, StackFrame *fp);
48780 StrictlyEqual(JSContext *cx, const Value &lval, const Value &rval, bool *equal);
48783 LooselyEqual(JSContext *cx, const Value &lval, const Value &rval, bool *equal);
48787 SameValue(JSContext *cx, const Value &v1, const Value &v2, bool *same);
48790 TypeOfValue(JSContext *cx, const Value &v);
48793 HasInstance(JSContext *cx, HandleObject obj, const js::Value *v, JSBool *bp);
48794 # 239 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinterp.h"
48795 class InterpreterFrames {
48797 class InterruptEnablerBase {
48799 virtual void enableInterrupts() const = 0;
48802 InterpreterFrames(JSContext *cx, FrameRegs *regs, const InterruptEnablerBase &enabler);
48803 ~InterpreterFrames();
48806 inline void enableInterruptsIfRunning(JSScript *script);
48808 InterpreterFrames *older;
48811 JSContext *context;
48813 const InterruptEnablerBase &enabler;
48821 UnwindScope(JSContext *cx, uint32_t stackDepth);
48828 UnwindForUncatchableException(JSContext *cx, const FrameRegs ®s);
48831 OnUnknownMethod(JSContext *cx, HandleObject obj, Value idval, Value *vp);
48834 AssertValidFunctionScopeChainAtExit(StackFrame *fp);
48838 const FrameRegs ®s;
48841 JSTryNote *tn, *tnEnd;
48844 TryNoteIter(const FrameRegs ®s);
48847 JSTryNote *operator*() const { return tn; }
48849 # 302 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinterp.h"
48850 static __attribute__((always_inline)) inline void
48851 Debug_SetValueRangeToCrashOnTouch(Value *beg, Value *end)
48859 static __attribute__((always_inline)) inline void
48860 Debug_SetValueRangeToCrashOnTouch(Value *vec, size_t len)
48867 static __attribute__((always_inline)) inline void
48868 Debug_SetValueRangeToCrashOnTouch(HeapValue *vec, size_t len)
48876 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl-inl.h" 2
48879 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Marking.h" 1
48887 #define gc_marking_h___
48891 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jslock.h" 1
48892 # 13 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Marking.h" 2
48905 class JSLinearString;
48909 class ArgumentsObject;
48911 class GlobalObject;
48912 class UnownedBaseShape;
48915 template<class, typename> class HeapPtr;
48918 # 65 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Marking.h"
48919 #define DeclMarker(base,type) void Mark ##base(JSTracer *trc, HeapPtr<type> *thing, const char *name); void Mark ##base ##Root(JSTracer *trc, type **thingp, const char *name); void Mark ##base ##Unbarriered(JSTracer *trc, type **thingp, const char *name); void Mark ##base ##Range(JSTracer *trc, size_t len, HeapPtr<type> *thing, const char *name); void Mark ##base ##RootRange(JSTracer *trc, size_t len, type **thing, const char *name); bool Is ##base ##Marked(type **thingp); bool Is ##base ##Marked(HeapPtr<type> *thingp);
48920 # 74 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Marking.h"
48921 void MarkBaseShape(JSTracer *trc, HeapPtr<BaseShape> *thing, const char *name); void MarkBaseShapeRoot(JSTracer *trc, BaseShape **thingp, const char *name); void MarkBaseShapeUnbarriered(JSTracer *trc, BaseShape **thingp, const char *name); void MarkBaseShapeRange(JSTracer *trc, size_t len, HeapPtr<BaseShape> *thing, const char *name); void MarkBaseShapeRootRange(JSTracer *trc, size_t len, BaseShape **thing, const char *name); bool IsBaseShapeMarked(BaseShape **thingp); bool IsBaseShapeMarked(HeapPtr<BaseShape> *thingp);
48922 void MarkBaseShape(JSTracer *trc, HeapPtr<UnownedBaseShape> *thing, const char *name); void MarkBaseShapeRoot(JSTracer *trc, UnownedBaseShape **thingp, const char *name); void MarkBaseShapeUnbarriered(JSTracer *trc, UnownedBaseShape **thingp, const char *name); void MarkBaseShapeRange(JSTracer *trc, size_t len, HeapPtr<UnownedBaseShape> *thing, const char *name); void MarkBaseShapeRootRange(JSTracer *trc, size_t len, UnownedBaseShape **thing, const char *name); bool IsBaseShapeMarked(UnownedBaseShape **thingp); bool IsBaseShapeMarked(HeapPtr<UnownedBaseShape> *thingp);
48923 void MarkObject(JSTracer *trc, HeapPtr<ArgumentsObject> *thing, const char *name); void MarkObjectRoot(JSTracer *trc, ArgumentsObject **thingp, const char *name); void MarkObjectUnbarriered(JSTracer *trc, ArgumentsObject **thingp, const char *name); void MarkObjectRange(JSTracer *trc, size_t len, HeapPtr<ArgumentsObject> *thing, const char *name); void MarkObjectRootRange(JSTracer *trc, size_t len, ArgumentsObject **thing, const char *name); bool IsObjectMarked(ArgumentsObject **thingp); bool IsObjectMarked(HeapPtr<ArgumentsObject> *thingp);
48924 void MarkObject(JSTracer *trc, HeapPtr<DebugScopeObject> *thing, const char *name); void MarkObjectRoot(JSTracer *trc, DebugScopeObject **thingp, const char *name); void MarkObjectUnbarriered(JSTracer *trc, DebugScopeObject **thingp, const char *name); void MarkObjectRange(JSTracer *trc, size_t len, HeapPtr<DebugScopeObject> *thing, const char *name); void MarkObjectRootRange(JSTracer *trc, size_t len, DebugScopeObject **thing, const char *name); bool IsObjectMarked(DebugScopeObject **thingp); bool IsObjectMarked(HeapPtr<DebugScopeObject> *thingp);
48925 void MarkObject(JSTracer *trc, HeapPtr<GlobalObject> *thing, const char *name); void MarkObjectRoot(JSTracer *trc, GlobalObject **thingp, const char *name); void MarkObjectUnbarriered(JSTracer *trc, GlobalObject **thingp, const char *name); void MarkObjectRange(JSTracer *trc, size_t len, HeapPtr<GlobalObject> *thing, const char *name); void MarkObjectRootRange(JSTracer *trc, size_t len, GlobalObject **thing, const char *name); bool IsObjectMarked(GlobalObject **thingp); bool IsObjectMarked(HeapPtr<GlobalObject> *thingp);
48926 void MarkObject(JSTracer *trc, HeapPtr<JSObject> *thing, const char *name); void MarkObjectRoot(JSTracer *trc, JSObject **thingp, const char *name); void MarkObjectUnbarriered(JSTracer *trc, JSObject **thingp, const char *name); void MarkObjectRange(JSTracer *trc, size_t len, HeapPtr<JSObject> *thing, const char *name); void MarkObjectRootRange(JSTracer *trc, size_t len, JSObject **thing, const char *name); bool IsObjectMarked(JSObject **thingp); bool IsObjectMarked(HeapPtr<JSObject> *thingp);
48927 void MarkObject(JSTracer *trc, HeapPtr<JSFunction> *thing, const char *name); void MarkObjectRoot(JSTracer *trc, JSFunction **thingp, const char *name); void MarkObjectUnbarriered(JSTracer *trc, JSFunction **thingp, const char *name); void MarkObjectRange(JSTracer *trc, size_t len, HeapPtr<JSFunction> *thing, const char *name); void MarkObjectRootRange(JSTracer *trc, size_t len, JSFunction **thing, const char *name); bool IsObjectMarked(JSFunction **thingp); bool IsObjectMarked(HeapPtr<JSFunction> *thingp);
48928 void MarkScript(JSTracer *trc, HeapPtr<JSScript> *thing, const char *name); void MarkScriptRoot(JSTracer *trc, JSScript **thingp, const char *name); void MarkScriptUnbarriered(JSTracer *trc, JSScript **thingp, const char *name); void MarkScriptRange(JSTracer *trc, size_t len, HeapPtr<JSScript> *thing, const char *name); void MarkScriptRootRange(JSTracer *trc, size_t len, JSScript **thing, const char *name); bool IsScriptMarked(JSScript **thingp); bool IsScriptMarked(HeapPtr<JSScript> *thingp);
48929 void MarkShape(JSTracer *trc, HeapPtr<Shape> *thing, const char *name); void MarkShapeRoot(JSTracer *trc, Shape **thingp, const char *name); void MarkShapeUnbarriered(JSTracer *trc, Shape **thingp, const char *name); void MarkShapeRange(JSTracer *trc, size_t len, HeapPtr<Shape> *thing, const char *name); void MarkShapeRootRange(JSTracer *trc, size_t len, Shape **thing, const char *name); bool IsShapeMarked(Shape **thingp); bool IsShapeMarked(HeapPtr<Shape> *thingp);
48930 void MarkString(JSTracer *trc, HeapPtr<JSAtom> *thing, const char *name); void MarkStringRoot(JSTracer *trc, JSAtom **thingp, const char *name); void MarkStringUnbarriered(JSTracer *trc, JSAtom **thingp, const char *name); void MarkStringRange(JSTracer *trc, size_t len, HeapPtr<JSAtom> *thing, const char *name); void MarkStringRootRange(JSTracer *trc, size_t len, JSAtom **thing, const char *name); bool IsStringMarked(JSAtom **thingp); bool IsStringMarked(HeapPtr<JSAtom> *thingp);
48931 void MarkString(JSTracer *trc, HeapPtr<JSString> *thing, const char *name); void MarkStringRoot(JSTracer *trc, JSString **thingp, const char *name); void MarkStringUnbarriered(JSTracer *trc, JSString **thingp, const char *name); void MarkStringRange(JSTracer *trc, size_t len, HeapPtr<JSString> *thing, const char *name); void MarkStringRootRange(JSTracer *trc, size_t len, JSString **thing, const char *name); bool IsStringMarked(JSString **thingp); bool IsStringMarked(HeapPtr<JSString> *thingp);
48932 void MarkString(JSTracer *trc, HeapPtr<JSFlatString> *thing, const char *name); void MarkStringRoot(JSTracer *trc, JSFlatString **thingp, const char *name); void MarkStringUnbarriered(JSTracer *trc, JSFlatString **thingp, const char *name); void MarkStringRange(JSTracer *trc, size_t len, HeapPtr<JSFlatString> *thing, const char *name); void MarkStringRootRange(JSTracer *trc, size_t len, JSFlatString **thing, const char *name); bool IsStringMarked(JSFlatString **thingp); bool IsStringMarked(HeapPtr<JSFlatString> *thingp);
48933 void MarkString(JSTracer *trc, HeapPtr<JSLinearString> *thing, const char *name); void MarkStringRoot(JSTracer *trc, JSLinearString **thingp, const char *name); void MarkStringUnbarriered(JSTracer *trc, JSLinearString **thingp, const char *name); void MarkStringRange(JSTracer *trc, size_t len, HeapPtr<JSLinearString> *thing, const char *name); void MarkStringRootRange(JSTracer *trc, size_t len, JSLinearString **thing, const char *name); bool IsStringMarked(JSLinearString **thingp); bool IsStringMarked(HeapPtr<JSLinearString> *thingp);
48934 void MarkTypeObject(JSTracer *trc, HeapPtr<types::TypeObject> *thing, const char *name); void MarkTypeObjectRoot(JSTracer *trc, types::TypeObject **thingp, const char *name); void MarkTypeObjectUnbarriered(JSTracer *trc, types::TypeObject **thingp, const char *name); void MarkTypeObjectRange(JSTracer *trc, size_t len, HeapPtr<types::TypeObject> *thing, const char *name); void MarkTypeObjectRootRange(JSTracer *trc, size_t len, types::TypeObject **thing, const char *name); bool IsTypeObjectMarked(types::TypeObject **thingp); bool IsTypeObjectMarked(HeapPtr<types::TypeObject> *thingp);
48936 void MarkXML(JSTracer *trc, HeapPtr<JSXML> *thing, const char *name); void MarkXMLRoot(JSTracer *trc, JSXML **thingp, const char *name); void MarkXMLUnbarriered(JSTracer *trc, JSXML **thingp, const char *name); void MarkXMLRange(JSTracer *trc, size_t len, HeapPtr<JSXML> *thing, const char *name); void MarkXMLRootRange(JSTracer *trc, size_t len, JSXML **thing, const char *name); bool IsXMLMarked(JSXML **thingp); bool IsXMLMarked(HeapPtr<JSXML> *thingp);
48940 # 101 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Marking.h"
48942 MarkKind(JSTracer *trc, void **thingp, JSGCTraceKind kind);
48945 MarkGCThingRoot(JSTracer *trc, void **thingp, const char *name);
48950 MarkId(JSTracer *trc, EncapsulatedId *id, const char *name);
48953 MarkIdRoot(JSTracer *trc, jsid *id, const char *name);
48956 MarkIdUnbarriered(JSTracer *trc, jsid *id, const char *name);
48959 MarkIdRange(JSTracer *trc, size_t len, HeapId *vec, const char *name);
48962 MarkIdRootRange(JSTracer *trc, size_t len, jsid *vec, const char *name);
48967 MarkValue(JSTracer *trc, EncapsulatedValue *v, const char *name);
48970 MarkValueRange(JSTracer *trc, size_t len, EncapsulatedValue *vec, const char *name);
48973 MarkValueRoot(JSTracer *trc, Value *v, const char *name);
48976 MarkValueRootRange(JSTracer *trc, size_t len, Value *vec, const char *name);
48979 MarkValueRootRange(JSTracer *trc, Value *begin, Value *end, const char *name)
48981 MarkValueRootRange(trc, end - begin, begin, name);
48985 IsValueMarked(Value *v);
48990 MarkSlot(JSTracer *trc, HeapSlot *s, const char *name);
48993 MarkArraySlots(JSTracer *trc, size_t len, HeapSlot *vec, const char *name);
48996 MarkObjectSlots(JSTracer *trc, JSObject *obj, uint32_t start, uint32_t nslots);
48999 MarkCrossCompartmentObjectUnbarriered(JSTracer *trc, JSObject **obj, const char *name);
49002 MarkCrossCompartmentScriptUnbarriered(JSTracer *trc, JSScript **script, const char *name);
49009 MarkCrossCompartmentSlot(JSTracer *trc, HeapSlot *s, const char *name);
49010 # 178 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Marking.h"
49012 MarkObject(JSTracer *trc, HeapPtr<GlobalObject, JSScript *> *thingp, const char *name);
49016 MarkValueUnbarriered(JSTracer *trc, Value *v, const char *name);
49023 MarkChildren(JSTracer *trc, JSObject *obj);
49031 MarkCycleCollectorChildren(JSTracer *trc, Shape *shape);
49034 PushArena(GCMarker *gcmarker, ArenaHeader *aheader);
49035 # 210 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Marking.h"
49037 Mark(JSTracer *trc, HeapValue *v, const char *name)
49039 MarkValue(trc, v, name);
49043 Mark(JSTracer *trc, HeapPtr<JSObject> *o, const char *name)
49045 MarkObject(trc, o, name);
49049 Mark(JSTracer *trc, HeapPtr<JSScript> *o, const char *name)
49051 MarkScript(trc, o, name);
49056 Mark(JSTracer *trc, HeapPtr<JSXML> *xml, const char *name)
49058 MarkXML(trc, xml, name);
49063 IsCellMarked(Cell **thingp);
49066 IsMarked(EncapsulatedValue *v)
49068 if (!v->isMarkable())
49070 return IsValueMarked(v->unsafeGet());
49074 IsMarked(HeapPtrObject *objp)
49076 return IsObjectMarked(objp);
49080 IsMarked(HeapPtrScript *scriptp)
49082 return IsScriptMarked(scriptp);
49086 ToMarkable(const Value &v)
49088 if (v.isMarkable())
49089 return (Cell *)v.toGCThing();
49094 ToMarkable(Cell *cell)
49099 inline JSGCTraceKind
49100 TraceKind(const Value &v)
49104 return JSTRACE_OBJECT;
49105 return JSTRACE_STRING;
49108 inline JSGCTraceKind
49109 TraceKind(JSObject *obj)
49111 return JSTRACE_OBJECT;
49114 inline JSGCTraceKind
49115 TraceKind(JSScript *script)
49117 return JSTRACE_SCRIPT;
49123 TraceChildren(JSTracer *trc, void *thing, JSGCTraceKind kind);
49126 CallTracer(JSTracer *trc, void *thing, JSGCTraceKind kind);
49129 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl-inl.h" 2
49132 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.h" 1
49133 # 22 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl-inl.h" 2
49137 static __attribute__((always_inline)) inline void
49138 Debug_SetSlotRangeToCrashOnTouch(HeapSlot *vec, uint32_t len)
49145 static __attribute__((always_inline)) inline void
49146 Debug_SetSlotRangeToCrashOnTouch(HeapSlot *begin, HeapSlot *end)
49156 js::ObjectImpl::isExtensible() const
49158 return !lastProperty()->hasObjectFlag(BaseShape::NOT_EXTENSIBLE);
49162 js::ObjectImpl::isDenseArray() const
49164 bool result = hasClass(&ArrayClass);
49170 js::ObjectImpl::isSlowArray() const
49172 bool result = hasClass(&SlowArrayClass);
49178 js::ObjectImpl::isArray() const
49180 return isSlowArray() || isDenseArray();
49184 js::ObjectImpl::getDenseArrayInitializedLength()
49187 return getElementsHeader()->initializedLength;
49190 inline js::HeapSlotArray
49191 js::ObjectImpl::getDenseArrayElements()
49194 return HeapSlotArray(elements);
49197 inline const js::Value &
49198 js::ObjectImpl::getDenseArrayElement(uint32_t idx)
49201 return elements[idx];
49205 js::ObjectImpl::getSlotRangeUnchecked(uint32_t start, uint32_t length,
49206 HeapSlot **fixedStart, HeapSlot **fixedEnd,
49207 HeapSlot **slotsStart, HeapSlot **slotsEnd)
49212 uint32_t fixed = numFixedSlots();
49213 if (start < fixed) {
49214 if (start + length < fixed) {
49215 *fixedStart = &fixedSlots()[start];
49216 *fixedEnd = &fixedSlots()[start + length];
49217 *slotsStart = *slotsEnd = __null;
49219 uint32_t localCopy = fixed - start;
49220 *fixedStart = &fixedSlots()[start];
49221 *fixedEnd = &fixedSlots()[start + localCopy];
49222 *slotsStart = &slots[0];
49223 *slotsEnd = &slots[length - localCopy];
49226 *fixedStart = *fixedEnd = __null;
49227 *slotsStart = &slots[start - fixed];
49228 *slotsEnd = &slots[start - fixed + length];
49233 js::ObjectImpl::getSlotRange(uint32_t start, uint32_t length,
49234 HeapSlot **fixedStart, HeapSlot **fixedEnd,
49235 HeapSlot **slotsStart, HeapSlot **slotsEnd)
49238 getSlotRangeUnchecked(start, length, fixedStart, fixedEnd, slotsStart, slotsEnd);
49242 js::ObjectImpl::hasContiguousSlots(uint32_t start, uint32_t count) const
49249 return start + count <= numFixedSlots() || start >= numFixedSlots();
49253 js::ObjectImpl::invalidateSlotRange(uint32_t start, uint32_t length)
49255 # 151 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl-inl.h"
49259 js::ObjectImpl::initializeSlotRange(uint32_t start, uint32_t length)
49265 HeapSlot *fixedStart, *fixedEnd, *slotsStart, *slotsEnd;
49266 getSlotRangeUnchecked(start, length, &fixedStart, &fixedEnd, &slotsStart, &slotsEnd);
49268 JSCompartment *comp = compartment();
49269 uint32_t offset = start;
49270 for (HeapSlot *sp = fixedStart; sp < fixedEnd; sp++)
49271 sp->init(comp, this->asObjectPtr(), offset++, UndefinedValue());
49272 for (HeapSlot *sp = slotsStart; sp < slotsEnd; sp++)
49273 sp->init(comp, this->asObjectPtr(), offset++, UndefinedValue());
49277 js::ObjectImpl::isNative() const
49279 return lastProperty()->isNative();
49282 inline js::HeapSlot &
49283 js::ObjectImpl::nativeGetSlotRef(uint32_t slot)
49287 return getSlotRef(slot);
49290 inline const js::Value &
49291 js::ObjectImpl::nativeGetSlot(uint32_t slot) const
49295 return getSlot(slot);
49299 js::ObjectImpl::setSlot(uint32_t slot, const js::Value &value)
49302 getSlotRef(slot).set(this->asObjectPtr(), slot, value);
49306 js::ObjectImpl::initSlot(uint32_t slot, const js::Value &value)
49310 initSlotUnchecked(slot, value);
49314 js::ObjectImpl::initSlotUnchecked(uint32_t slot, const js::Value &value)
49316 getSlotAddressUnchecked(slot)->init(this->asObjectPtr(), slot, value);
49320 js::ObjectImpl::setFixedSlot(uint32_t slot, const js::Value &value)
49323 fixedSlots()[slot].set(this->asObjectPtr(), slot, value);
49327 js::ObjectImpl::initFixedSlot(uint32_t slot, const js::Value &value)
49330 fixedSlots()[slot].init(this->asObjectPtr(), slot, value);
49334 js::ObjectImpl::slotSpan() const
49336 if (inDictionaryMode())
49337 return lastProperty()->base()->slotSpan();
49338 return lastProperty()->slotSpan();
49342 js::ObjectImpl::numDynamicSlots() const
49344 return dynamicSlotsCount(numFixedSlots(), slotSpan());
49348 js::ObjectImpl::getClass() const
49350 return lastProperty()->getObjectClass();
49354 js::ObjectImpl::getJSClass() const
49356 return Jsvalify(getClass());
49360 js::ObjectImpl::hasClass(const Class *c) const
49362 return getClass() == c;
49365 inline const js::ObjectOps *
49366 js::ObjectImpl::getOps() const
49368 return &getClass()->ops;
49372 js::ObjectImpl::isDelegate() const
49374 return lastProperty()->hasObjectFlag(BaseShape::DELEGATE);
49378 js::ObjectImpl::inDictionaryMode() const
49380 return lastProperty()->inDictionary();
49384 js::ObjectImpl::dynamicSlotsCount(uint32_t nfixed, uint32_t span)
49386 if (span <= nfixed)
49389 if (span <= SLOT_CAPACITY_MIN)
49390 return SLOT_CAPACITY_MIN;
49392 uint32_t slots = RoundUpPow2(span);
49398 js::ObjectImpl::sizeOfThis() const
49400 return arenaHeader()->getThingSize();
49404 js::ObjectImpl::readBarrier(ObjectImpl *obj)
49407 JSCompartment *comp = obj->compartment();
49408 if (comp->needsBarrier()) {
49410 JSObject *tmp = obj->asObjectPtr();
49411 MarkObjectUnbarriered(comp->barrierTracer(), &tmp, "read barrier");
49418 js::ObjectImpl::privateWriteBarrierPre(void **old)
49421 JSCompartment *comp = compartment();
49422 if (comp->needsBarrier()) {
49423 if (*old && getClass()->trace)
49424 getClass()->trace(comp->barrierTracer(), this->asObjectPtr());
49430 js::ObjectImpl::privateWriteBarrierPost(void **old)
49435 js::ObjectImpl::writeBarrierPre(ObjectImpl *obj)
49442 if (uintptr_t(obj) < 32)
49445 JSCompartment *comp = obj->compartment();
49446 if (comp->needsBarrier()) {
49448 JSObject *tmp = obj->asObjectPtr();
49449 MarkObjectUnbarriered(comp->barrierTracer(), &tmp, "write barrier");
49456 js::ObjectImpl::writeBarrierPost(ObjectImpl *obj, void *addr)
49461 js::ObjectImpl::hasPrivate() const
49463 return getClass()->hasPrivate();
49467 js::ObjectImpl::privateRef(uint32_t nfixed) const
49476 HeapSlot *end = &fixedSlots()[nfixed];
49477 return *reinterpret_cast<void**>(end);
49481 js::ObjectImpl::getPrivate() const
49483 return privateRef(numFixedSlots());
49487 js::ObjectImpl::getPrivate(uint32_t nfixed) const
49489 return privateRef(nfixed);
49493 js::ObjectImpl::setPrivate(void *data)
49495 void **pprivate = &privateRef(numFixedSlots());
49497 privateWriteBarrierPre(pprivate);
49499 privateWriteBarrierPost(pprivate);
49503 js::ObjectImpl::setPrivateUnbarriered(void *data)
49505 void **pprivate = &privateRef(numFixedSlots());
49510 js::ObjectImpl::initPrivate(void *data)
49512 privateRef(numFixedSlots()) = data;
49514 # 24 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h" 2
49519 struct NativeAddressInfo;
49520 struct JSActiveFrame;
49524 # 64 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49525 extern bool ProfilingActive;
49527 extern const char nullName[];
49528 extern const char anonymousName[];
49531 JSBool startEngine();
49534 bool createRuntime(JSRuntime *rt);
49537 bool destroyRuntime(JSRuntime *rt);
49547 bool callTrackingActive(JSContext *);
49553 bool wantNativeAddressInfo(JSContext *);
49556 bool enterJSFun(JSContext *, JSFunction *, JSScript *, int counter = 1);
49559 bool exitJSFun(JSContext *, JSFunction *, JSScript *, int counter = 0);
49562 bool startExecution(JSContext *cx, JSScript *script);
49565 bool stopExecution(JSContext *cx, JSScript *script);
49568 bool resizeHeap(JSCompartment *compartment, size_t oldSize, size_t newSize);
49573 bool createObject(JSContext *cx, JSObject *obj);
49576 bool objectResizeActive();
49579 bool resizeObject(JSContext *cx, JSObject *obj, size_t oldSize, size_t newSize);
49585 bool finalizeObject(JSObject *obj);
49586 # 134 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49587 bool createString(JSContext *cx, JSString *string, size_t length);
49594 bool finalizeString(JSString *string);
49597 bool compileScriptBegin(const char *filename, int lineno);
49600 bool compileScriptEnd(const char *filename, int lineno);
49603 bool calloutBegin(JSContext *cx, JSFunction *fun);
49606 bool calloutEnd(JSContext *cx, JSFunction *fun);
49609 bool acquireMemory(JSContext *cx, void *address, size_t nbytes);
49610 bool releaseMemory(JSContext *cx, void *address, size_t nbytes);
49611 # 170 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49615 bool GCStartMarkPhase();
49616 bool GCEndMarkPhase();
49618 bool GCStartSweepPhase();
49619 bool GCEndSweepPhase();
49620 # 187 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49621 bool CustomMark(JSString *string);
49622 bool CustomMark(const char *string);
49623 bool CustomMark(int marker);
49627 enum JITReportGranularity {
49628 JITREPORT_GRANULARITY_NONE = 0,
49629 JITREPORT_GRANULARITY_FUNCTION = 1,
49630 JITREPORT_GRANULARITY_LINE = 2,
49631 JITREPORT_GRANULARITY_OP = 3
49641 struct NativeRegion {
49642 mjit::JSActiveFrame *frame;
49644 size_t inlinedOffset;
49647 uintptr_t mainOffset;
49648 uintptr_t stubOffset;
49652 typedef Vector<NativeRegion, 0, RuntimeAllocPolicy> RegionVector;
49654 virtual JITReportGranularity granularityRequested() = 0;
49657 static bool CollectNativeRegions(RegionVector ®ions,
49659 mjit::JITChunk *jit,
49660 mjit::JSActiveFrame *outerFrame,
49661 mjit::JSActiveFrame **inlineFrames);
49663 virtual void registerMJITCode(JSContext *cx, js::mjit::JITChunk *chunk,
49664 mjit::JSActiveFrame *outerFrame,
49665 mjit::JSActiveFrame **inlineFrames,
49666 void *mainCodeAddress, size_t mainCodeSize,
49667 void *stubCodeAddress, size_t stubCodeSize) = 0;
49669 virtual void discardMJITCode(FreeOp *fop, mjit::JITScript *jscr, mjit::JITChunk *chunk,
49670 void* address) = 0;
49672 virtual void registerICCode(JSContext *cx,
49673 js::mjit::JITChunk *chunk, JSScript *script, jsbytecode* pc,
49674 void *start, size_t size) = 0;
49677 virtual void discardExecutableRegion(void *start, size_t size) = 0;
49685 addJITWatcher(JITWatcher *watcher);
49692 removeJITWatcher(JSRuntime *rt, JITWatcher *watcher);
49698 removeAllJITWatchers(JSRuntime *rt);
49703 JITReportGranularity
49704 JITGranularityRequested();
49711 registerMJITCode(JSContext *cx, js::mjit::JITChunk *chunk,
49712 mjit::JSActiveFrame *outerFrame,
49713 mjit::JSActiveFrame **inlineFrames,
49714 void *mainCodeAddress, size_t mainCodeSize,
49715 void *stubCodeAddress, size_t stubCodeSize);
49721 discardMJITCode(FreeOp *fop, mjit::JITScript *jscr, mjit::JITChunk *chunk, void* address);
49727 registerICCode(JSContext *cx,
49728 mjit::JITChunk *chunk, JSScript *script, jsbytecode* pc,
49729 void *start, size_t size);
49737 discardExecutableRegion(void *start, size_t size);
49745 void DTraceEnterJSFun(JSContext *cx, JSFunction *fun, JSScript *script);
49746 void DTraceExitJSFun(JSContext *cx, JSFunction *fun, JSScript *script);
49747 # 350 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49756 Probes::callTrackingActive(JSContext *cx)
49758 # 372 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49763 Probes::wantNativeAddressInfo(JSContext *cx)
49765 return (cx->reportGranularity >= JITREPORT_GRANULARITY_FUNCTION &&
49766 JITGranularityRequested() >= JITREPORT_GRANULARITY_FUNCTION);
49770 Probes::enterJSFun(JSContext *cx, JSFunction *fun, JSScript *script, int counter)
49773 # 398 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49778 Probes::exitJSFun(JSContext *cx, JSFunction *fun, JSScript *script, int counter)
49781 # 420 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49786 Probes::resizeHeap(JSCompartment *compartment, size_t oldSize, size_t newSize)
49797 # 450 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49799 Probes::createObject(JSContext *cx, JSObject *obj)
49802 # 464 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49807 Probes::finalizeObject(JSObject *obj)
49810 # 485 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
49815 Probes::objectResizeActive()
49826 Probes::resizeObject(JSContext *cx, JSObject *obj, size_t oldSize, size_t newSize)
49839 Probes::createString(JSContext *cx, JSString *string, size_t length)
49852 Probes::finalizeString(JSString *string)
49865 Probes::compileScriptBegin(const char *filename, int lineno)
49878 Probes::compileScriptEnd(const char *filename, int lineno)
49891 Probes::calloutBegin(JSContext *cx, JSFunction *fun)
49904 Probes::calloutEnd(JSContext *cx, JSFunction *fun)
49917 Probes::acquireMemory(JSContext *cx, void *address, size_t nbytes)
49930 Probes::releaseMemory(JSContext *cx, void *address, size_t nbytes)
49969 Probes::GCStartMarkPhase()
49982 Probes::GCEndMarkPhase()
49995 Probes::GCStartSweepPhase()
50008 Probes::GCEndSweepPhase()
50021 Probes::CustomMark(JSString *string)
50034 Probes::CustomMark(const char *string)
50047 Probes::CustomMark(int marker)
50060 Probes::startExecution(JSContext *cx, JSScript *script)
50063 # 748 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
50068 Probes::stopExecution(JSContext *cx, JSScript *script)
50071 # 766 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h"
50075 struct AutoFunctionCallProbe {
50076 JSContext * const cx;
50081 AutoFunctionCallProbe(JSContext *cx, JSFunction *fun, JSScript *script
50083 : cx(cx), fun(fun), script(script)
50086 Probes::enterJSFun(cx, fun, script);
50089 ~AutoFunctionCallProbe() {
50090 Probes::exitJSFun(cx, fun, script);
50095 # 23 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
50097 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsproxy.h" 1
50098 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsproxy.h"
50099 #define jsproxy_h___
50107 class __attribute__((visibility("default"))) BaseProxyHandler {
50110 explicit BaseProxyHandler(void *family);
50111 virtual ~BaseProxyHandler();
50114 virtual bool getPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
50115 PropertyDescriptor *desc) = 0;
50116 virtual bool getOwnPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
50117 PropertyDescriptor *desc) = 0;
50118 virtual bool defineProperty(JSContext *cx, JSObject *proxy, jsid id,
50119 PropertyDescriptor *desc) = 0;
50120 virtual bool getOwnPropertyNames(JSContext *cx, JSObject *proxy, AutoIdVector &props) = 0;
50121 virtual bool delete_(JSContext *cx, JSObject *proxy, jsid id, bool *bp) = 0;
50122 virtual bool enumerate(JSContext *cx, JSObject *proxy, AutoIdVector &props) = 0;
50125 virtual bool has(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
50126 virtual bool hasOwn(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
50127 virtual bool get(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, Value *vp);
50128 virtual bool set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, bool strict,
50130 virtual bool keys(JSContext *cx, JSObject *proxy, AutoIdVector &props);
50131 virtual bool iterate(JSContext *cx, JSObject *proxy, unsigned flags, Value *vp);
50134 virtual bool call(JSContext *cx, JSObject *proxy, unsigned argc, Value *vp);
50135 virtual bool construct(JSContext *cx, JSObject *proxy, unsigned argc, Value *argv, Value *rval);
50136 virtual bool nativeCall(JSContext *cx, JSObject *proxy, Class *clasp, Native native, CallArgs args);
50137 virtual bool hasInstance(JSContext *cx, JSObject *proxy, const Value *vp, bool *bp);
50138 virtual JSType typeOf(JSContext *cx, JSObject *proxy);
50139 virtual bool objectClassIs(JSObject *obj, ESClassValue classValue, JSContext *cx);
50140 virtual JSString *obj_toString(JSContext *cx, JSObject *proxy);
50141 virtual JSString *fun_toString(JSContext *cx, JSObject *proxy, unsigned indent);
50142 virtual bool regexp_toShared(JSContext *cx, JSObject *proxy, RegExpGuard *g);
50143 virtual bool defaultValue(JSContext *cx, JSObject *obj, JSType hint, Value *vp);
50144 virtual bool iteratorNext(JSContext *cx, JSObject *proxy, Value *vp);
50145 virtual void finalize(JSFreeOp *fop, JSObject *proxy);
50146 virtual bool getElementIfPresent(JSContext *cx, JSObject *obj, JSObject *receiver,
50147 uint32_t index, Value *vp, bool *present);
50149 virtual bool isOuterWindow() {
50153 inline void *family() {
50158 class __attribute__((visibility("default"))) IndirectProxyHandler : public BaseProxyHandler {
50160 explicit IndirectProxyHandler(void *family);
50163 virtual bool getPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id,
50165 PropertyDescriptor *desc) ;
50166 virtual bool getOwnPropertyDescriptor(JSContext *cx, JSObject *proxy,
50168 PropertyDescriptor *desc) ;
50169 virtual bool defineProperty(JSContext *cx, JSObject *proxy, jsid id,
50170 PropertyDescriptor *desc) ;
50171 virtual bool getOwnPropertyNames(JSContext *cx, JSObject *proxy,
50172 AutoIdVector &props) ;
50173 virtual bool delete_(JSContext *cx, JSObject *proxy, jsid id,
50175 virtual bool enumerate(JSContext *cx, JSObject *proxy,
50176 AutoIdVector &props) ;
50181 virtual bool call(JSContext *cx, JSObject *proxy, unsigned argc,
50183 virtual bool construct(JSContext *cx, JSObject *proxy, unsigned argc,
50184 Value *argv, Value *rval) ;
50185 virtual bool nativeCall(JSContext *cx, JSObject *proxy, Class *clasp,
50186 Native native, CallArgs args) ;
50187 virtual bool hasInstance(JSContext *cx, JSObject *proxy, const Value *vp,
50189 virtual JSType typeOf(JSContext *cx, JSObject *proxy) ;
50190 virtual bool objectClassIs(JSObject *obj, ESClassValue classValue,
50192 virtual JSString *obj_toString(JSContext *cx, JSObject *proxy) ;
50193 virtual JSString *fun_toString(JSContext *cx, JSObject *proxy,
50195 virtual bool regexp_toShared(JSContext *cx, JSObject *proxy,
50197 virtual bool defaultValue(JSContext *cx, JSObject *obj, JSType hint,
50199 virtual bool iteratorNext(JSContext *cx, JSObject *proxy,
50203 class __attribute__((visibility("default"))) DirectProxyHandler : public IndirectProxyHandler {
50205 explicit DirectProxyHandler(void *family);
50208 virtual bool has(JSContext *cx, JSObject *proxy, jsid id,
50210 virtual bool hasOwn(JSContext *cx, JSObject *proxy, jsid id,
50212 virtual bool get(JSContext *cx, JSObject *proxy, JSObject *receiver,
50213 jsid id, Value *vp) ;
50214 virtual bool set(JSContext *cx, JSObject *proxy, JSObject *receiver,
50215 jsid id, bool strict, Value *vp) ;
50216 virtual bool keys(JSContext *cx, JSObject *proxy,
50217 AutoIdVector &props) ;
50218 virtual bool iterate(JSContext *cx, JSObject *proxy, unsigned flags,
50226 static bool getPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
50227 PropertyDescriptor *desc);
50228 static bool getPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set, Value *vp);
50229 static bool getOwnPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
50230 PropertyDescriptor *desc);
50231 static bool getOwnPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
50233 static bool defineProperty(JSContext *cx, JSObject *proxy, jsid id, PropertyDescriptor *desc);
50234 static bool defineProperty(JSContext *cx, JSObject *proxy, jsid id, const Value &v);
50235 static bool getOwnPropertyNames(JSContext *cx, JSObject *proxy, AutoIdVector &props);
50236 static bool delete_(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
50237 static bool enumerate(JSContext *cx, JSObject *proxy, AutoIdVector &props);
50240 static bool has(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
50241 static bool hasOwn(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
50242 static bool get(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, Value *vp);
50243 static bool getElementIfPresent(JSContext *cx, JSObject *proxy, JSObject *receiver,
50244 uint32_t index, Value *vp, bool *present);
50245 static bool set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, bool strict,
50247 static bool keys(JSContext *cx, JSObject *proxy, AutoIdVector &props);
50248 static bool iterate(JSContext *cx, JSObject *proxy, unsigned flags, Value *vp);
50251 static bool call(JSContext *cx, JSObject *proxy, unsigned argc, Value *vp);
50252 static bool construct(JSContext *cx, JSObject *proxy, unsigned argc, Value *argv, Value *rval);
50253 static bool nativeCall(JSContext *cx, JSObject *proxy, Class *clasp, Native native, CallArgs args);
50254 static bool hasInstance(JSContext *cx, JSObject *proxy, const Value *vp, bool *bp);
50255 static JSType typeOf(JSContext *cx, JSObject *proxy);
50256 static bool objectClassIs(JSObject *obj, ESClassValue classValue, JSContext *cx);
50257 static JSString *obj_toString(JSContext *cx, JSObject *proxy);
50258 static JSString *fun_toString(JSContext *cx, JSObject *proxy, unsigned indent);
50259 static bool regexp_toShared(JSContext *cx, JSObject *proxy, RegExpGuard *g);
50260 static bool defaultValue(JSContext *cx, JSObject *obj, JSType hint, Value *vp);
50261 static bool iteratorNext(JSContext *cx, JSObject *proxy, Value *vp);
50264 inline bool IsObjectProxyClass(const Class *clasp)
50266 return clasp == &js::ObjectProxyClass || clasp == &js::OuterWindowProxyClass;
50269 inline bool IsFunctionProxyClass(const Class *clasp)
50271 return clasp == &js::FunctionProxyClass;
50274 inline bool IsObjectProxy(const JSObject *obj)
50276 return IsObjectProxyClass(GetObjectClass(obj));
50279 inline bool IsFunctionProxy(const JSObject *obj)
50281 return IsFunctionProxyClass(GetObjectClass(obj));
50284 inline bool IsProxy(const JSObject *obj)
50286 Class *clasp = GetObjectClass(obj);
50287 return IsObjectProxyClass(clasp) || IsFunctionProxyClass(clasp);
50291 const uint32_t JSSLOT_PROXY_HANDLER = 0;
50292 const uint32_t JSSLOT_PROXY_PRIVATE = 1;
50293 const uint32_t JSSLOT_PROXY_EXTRA = 2;
50295 const uint32_t JSSLOT_PROXY_CALL = 4;
50296 const uint32_t JSSLOT_PROXY_CONSTRUCT = 5;
50298 inline BaseProxyHandler *
50299 GetProxyHandler(const JSObject *obj)
50302 return (BaseProxyHandler *) GetReservedSlot(obj, JSSLOT_PROXY_HANDLER).toPrivate();
50305 inline const Value &
50306 GetProxyPrivate(const JSObject *obj)
50309 return GetReservedSlot(obj, JSSLOT_PROXY_PRIVATE);
50313 GetProxyTargetObject(const JSObject *obj)
50316 return GetProxyPrivate(obj).toObjectOrNull();
50319 inline const Value &
50320 GetProxyCall(const JSObject *obj)
50323 return GetReservedSlot(obj, JSSLOT_PROXY_CALL);
50326 inline const Value &
50327 GetProxyExtra(const JSObject *obj, size_t n)
50330 return GetReservedSlot(obj, JSSLOT_PROXY_EXTRA + n);
50334 SetProxyHandler(JSObject *obj, BaseProxyHandler *handler)
50337 SetReservedSlot(obj, JSSLOT_PROXY_HANDLER, PrivateValue(handler));
50341 SetProxyPrivate(JSObject *obj, const Value &value)
50344 SetReservedSlot(obj, JSSLOT_PROXY_PRIVATE, value);
50348 SetProxyExtra(JSObject *obj, size_t n, const Value &extra)
50352 SetReservedSlot(obj, JSSLOT_PROXY_EXTRA + n, extra);
50355 __attribute__((visibility("default"))) JSObject *
50356 NewProxyObject(JSContext *cx, BaseProxyHandler *handler, const Value &priv,
50357 JSObject *proto, JSObject *parent,
50358 JSObject *call = __null, JSObject *construct = __null);
50364 extern __attribute__((visibility("default"))) JSObject *
50365 js_InitProxyClass(JSContext *cx, JSObject *obj);
50368 # 25 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
50371 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypedarray.h" 1
50379 #define jstypedarray_h
50387 typedef struct JSProperty JSProperty;
50390 # 28 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypedarray.h"
50391 class ArrayBufferObject : public JSObject
50394 static Class protoClass;
50395 static JSPropertySpec jsprops[];
50396 static JSFunctionSpec jsfuncs[];
50398 static JSBool prop_getByteLength(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
50400 static JSBool fun_slice(JSContext *cx, unsigned argc, Value *vp);
50402 static JSBool class_constructor(JSContext *cx, unsigned argc, Value *vp);
50404 static JSObject *create(JSContext *cx, uint32_t nbytes, uint8_t *contents = __null);
50406 static JSObject *createSlice(JSContext *cx, ArrayBufferObject &arrayBuffer,
50407 uint32_t begin, uint32_t end);
50410 obj_trace(JSTracer *trc, JSObject *obj);
50413 obj_lookupGeneric(JSContext *cx, HandleObject obj, HandleId id,
50414 JSObject **objp, JSProperty **propp);
50416 obj_lookupProperty(JSContext *cx, HandleObject obj, HandlePropertyName name,
50417 JSObject **objp, JSProperty **propp);
50419 obj_lookupElement(JSContext *cx, HandleObject obj, uint32_t index,
50420 JSObject **objp, JSProperty **propp);
50422 obj_lookupSpecial(JSContext *cx, HandleObject obj, HandleSpecialId sid, JSObject **objp,
50423 JSProperty **propp);
50426 obj_defineGeneric(JSContext *cx, HandleObject obj, HandleId id, const Value *v,
50427 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
50429 obj_defineProperty(JSContext *cx, HandleObject obj, HandlePropertyName name, const Value *v,
50430 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
50432 obj_defineElement(JSContext *cx, HandleObject obj, uint32_t index, const Value *v,
50433 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
50435 obj_defineSpecial(JSContext *cx, HandleObject obj, HandleSpecialId sid, const Value *v,
50436 PropertyOp getter, StrictPropertyOp setter, unsigned attrs);
50439 obj_getGeneric(JSContext *cx, HandleObject obj, HandleObject receiver, HandleId id, Value *vp);
50442 obj_getProperty(JSContext *cx, HandleObject obj, HandleObject receiver, HandlePropertyName name,
50446 obj_getElement(JSContext *cx, HandleObject obj, HandleObject receiver, uint32_t index, Value *vp);
50448 obj_getElementIfPresent(JSContext *cx, HandleObject obj, HandleObject receiver, uint32_t index,
50449 Value *vp, bool *present);
50452 obj_getSpecial(JSContext *cx, HandleObject obj, HandleObject receiver, HandleSpecialId sid, Value *vp);
50455 obj_setGeneric(JSContext *cx, HandleObject obj, HandleId id, Value *vp, JSBool strict);
50457 obj_setProperty(JSContext *cx, HandleObject obj, HandlePropertyName name, Value *vp, JSBool strict);
50459 obj_setElement(JSContext *cx, HandleObject obj, uint32_t index, Value *vp, JSBool strict);
50461 obj_setSpecial(JSContext *cx, HandleObject obj, HandleSpecialId sid, Value *vp, JSBool strict);
50464 obj_getGenericAttributes(JSContext *cx, HandleObject obj, HandleId id, unsigned *attrsp);
50466 obj_getPropertyAttributes(JSContext *cx, HandleObject obj, HandlePropertyName name, unsigned *attrsp);
50468 obj_getElementAttributes(JSContext *cx, HandleObject obj, uint32_t index, unsigned *attrsp);
50470 obj_getSpecialAttributes(JSContext *cx, HandleObject obj, HandleSpecialId sid, unsigned *attrsp);
50473 obj_setGenericAttributes(JSContext *cx, HandleObject obj, HandleId id, unsigned *attrsp);
50475 obj_setPropertyAttributes(JSContext *cx, HandleObject obj, HandlePropertyName name, unsigned *attrsp);
50477 obj_setElementAttributes(JSContext *cx, HandleObject obj, uint32_t index, unsigned *attrsp);
50479 obj_setSpecialAttributes(JSContext *cx, HandleObject obj, HandleSpecialId sid, unsigned *attrsp);
50482 obj_deleteProperty(JSContext *cx, HandleObject obj, HandlePropertyName name, Value *rval, JSBool strict);
50484 obj_deleteElement(JSContext *cx, HandleObject obj, uint32_t index, Value *rval, JSBool strict);
50486 obj_deleteSpecial(JSContext *cx, HandleObject obj, HandleSpecialId sid, Value *rval, JSBool strict);
50489 obj_enumerate(JSContext *cx, HandleObject obj, JSIterateOp enum_op,
50490 Value *statep, jsid *idp);
50493 obj_typeOf(JSContext *cx, HandleObject obj);
50496 allocateSlots(JSContext *cx, uint32_t size, uint8_t *contents = __null);
50498 inline uint32_t byteLength() const;
50500 inline uint8_t * dataPointer() const;
50506 inline bool hasData() const;
50508 # 154 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jstypedarray.h"
50509 struct TypedArray {
50524 TYPE_UINT8_CLAMPED,
50537 NUM_FIXED_SLOTS = 7
50541 static Class classes[TYPE_MAX];
50545 static Class protoClasses[TYPE_MAX];
50547 static JSPropertySpec jsprops[];
50549 static JSBool prop_getBuffer(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
50550 static JSBool prop_getByteOffset(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
50551 static JSBool prop_getByteLength(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
50552 static JSBool prop_getLength(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
50554 static JSBool obj_lookupGeneric(JSContext *cx, HandleObject obj, HandleId id,
50555 JSObject **objp, JSProperty **propp);
50556 static JSBool obj_lookupProperty(JSContext *cx, HandleObject obj, HandlePropertyName name,
50557 JSObject **objp, JSProperty **propp);
50558 static JSBool obj_lookupElement(JSContext *cx, HandleObject obj, uint32_t index,
50559 JSObject **objp, JSProperty **propp);
50560 static JSBool obj_lookupSpecial(JSContext *cx, HandleObject obj, HandleSpecialId sid,
50561 JSObject **objp, JSProperty **propp);
50563 static JSBool obj_getGenericAttributes(JSContext *cx, HandleObject obj, HandleId id, unsigned *attrsp);
50564 static JSBool obj_getPropertyAttributes(JSContext *cx, HandleObject obj, HandlePropertyName name, unsigned *attrsp);
50565 static JSBool obj_getElementAttributes(JSContext *cx, HandleObject obj, uint32_t index, unsigned *attrsp);
50566 static JSBool obj_getSpecialAttributes(JSContext *cx, HandleObject obj, HandleSpecialId sid, unsigned *attrsp);
50568 static JSBool obj_setGenericAttributes(JSContext *cx, HandleObject obj, HandleId id, unsigned *attrsp);
50569 static JSBool obj_setPropertyAttributes(JSContext *cx, HandleObject obj, HandlePropertyName name, unsigned *attrsp);
50570 static JSBool obj_setElementAttributes(JSContext *cx, HandleObject obj, uint32_t index, unsigned *attrsp);
50571 static JSBool obj_setSpecialAttributes(JSContext *cx, HandleObject obj, HandleSpecialId sid, unsigned *attrsp);
50573 static uint32_t getLength(JSObject *obj);
50574 static uint32_t getByteOffset(JSObject *obj);
50575 static uint32_t getByteLength(JSObject *obj);
50576 static uint32_t getType(JSObject *obj);
50577 static ArrayBufferObject * getBuffer(JSObject *obj);
50578 static void * getDataOffset(JSObject *obj);
50582 isArrayIndex(JSContext *cx, JSObject *obj, jsid id, uint32_t *ip = __null);
50584 static inline uint32_t slotWidth(int atype) {
50586 case js::TypedArray::TYPE_INT8:
50587 case js::TypedArray::TYPE_UINT8:
50588 case js::TypedArray::TYPE_UINT8_CLAMPED:
50590 case js::TypedArray::TYPE_INT16:
50591 case js::TypedArray::TYPE_UINT16:
50593 case js::TypedArray::TYPE_INT32:
50594 case js::TypedArray::TYPE_UINT32:
50595 case js::TypedArray::TYPE_FLOAT32:
50597 case js::TypedArray::TYPE_FLOAT64:
50600 __builtin_unreachable();
50605 static inline int slotWidth(JSObject *obj) {
50606 return slotWidth(getType(obj));
50609 static int lengthOffset();
50610 static int dataOffset();
50614 IsTypedArrayClass(const Class *clasp)
50616 return &TypedArray::classes[0] <= clasp &&
50617 clasp < &TypedArray::classes[TypedArray::TYPE_MAX];
50621 IsTypedArrayProtoClass(const Class *clasp)
50623 return &TypedArray::protoClasses[0] <= clasp &&
50624 clasp < &TypedArray::protoClasses[TypedArray::TYPE_MAX];
50628 IsTypedArray(JSObject *obj)
50630 return IsTypedArrayClass(obj->getClass());
50634 IsTypedArrayProto(JSObject *obj)
50636 return IsTypedArrayProtoClass(obj->getClass());
50639 class DataViewObject : public JSObject
50641 static Class protoClass;
50643 static const size_t BYTEOFFSET_SLOT = 0;
50644 static const size_t BYTELENGTH_SLOT = 1;
50645 static const size_t BUFFER_SLOT = 2;
50648 static const size_t RESERVED_SLOTS = 3;
50650 static JSBool prop_getBuffer(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
50651 static JSBool prop_getByteOffset(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
50652 static JSBool prop_getByteLength(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
50654 static JSBool class_constructor(JSContext *cx, unsigned argc, Value *vp);
50655 static JSBool constructWithProto(JSContext *cx, unsigned argc, Value *vp);
50656 static JSBool construct(JSContext *cx, JSObject *bufobj, const CallArgs &args, JSObject *proto);
50658 static inline DataViewObject *
50659 create(JSContext *cx, uint32_t byteOffset, uint32_t byteLength,
50660 Handle<ArrayBufferObject*> arrayBuffer, JSObject *proto);
50662 static JSBool fun_getInt8(JSContext *cx, unsigned argc, Value *vp);
50663 static JSBool fun_getUint8(JSContext *cx, unsigned argc, Value *vp);
50664 static JSBool fun_getInt16(JSContext *cx, unsigned argc, Value *vp);
50665 static JSBool fun_getUint16(JSContext *cx, unsigned argc, Value *vp);
50666 static JSBool fun_getInt32(JSContext *cx, unsigned argc, Value *vp);
50667 static JSBool fun_getUint32(JSContext *cx, unsigned argc, Value *vp);
50668 static JSBool fun_getFloat32(JSContext *cx, unsigned argc, Value *vp);
50669 static JSBool fun_getFloat64(JSContext *cx, unsigned argc, Value *vp);
50670 static JSBool fun_setInt8(JSContext *cx, unsigned argc, Value *vp);
50671 static JSBool fun_setUint8(JSContext *cx, unsigned argc, Value *vp);
50672 static JSBool fun_setInt16(JSContext *cx, unsigned argc, Value *vp);
50673 static JSBool fun_setUint16(JSContext *cx, unsigned argc, Value *vp);
50674 static JSBool fun_setInt32(JSContext *cx, unsigned argc, Value *vp);
50675 static JSBool fun_setUint32(JSContext *cx, unsigned argc, Value *vp);
50676 static JSBool fun_setFloat32(JSContext *cx, unsigned argc, Value *vp);
50677 static JSBool fun_setFloat64(JSContext *cx, unsigned argc, Value *vp);
50678 inline uint32_t byteLength();
50679 inline uint32_t byteOffset();
50680 inline JSObject & arrayBuffer();
50681 inline void *dataPointer();
50682 inline bool hasBuffer() const;
50683 static JSObject *initClass(JSContext *cx, GlobalObject *global);
50684 bool getDataPointer(JSContext *cx, CallArgs args, size_t typeSize, uint8_t **data);
50685 template<typename NativeType>
50686 bool read(JSContext *cx, CallArgs &args, NativeType *val, const char *method);
50687 template<typename NativeType>
50688 bool write(JSContext *cx, CallArgs &args, const char *method);
50690 static JSPropertySpec jsprops[];
50691 static JSFunctionSpec jsfuncs[];
50695 IsDataView(JSObject *obj);
50698 # 28 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
50699 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsxml.h" 1
50708 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsxml.h"
50709 extern const char js_AnyName_str[];
50710 extern const char js_AttributeName_str[];
50711 extern const char js_isXMLName_str[];
50712 extern const char js_XMLList_str[];
50714 extern const char js_amp_entity_str[];
50715 extern const char js_gt_entity_str[];
50716 extern const char js_lt_entity_str[];
50717 extern const char js_quot_entity_str[];
50720 struct JSXMLArrayCursor;
50727 js::HeapPtr<T> *vector;
50728 JSXMLArrayCursor<T> *cursors;
50731 length = capacity = 0;
50736 void finish(js::FreeOp *fop);
50738 bool setCapacity(JSContext *cx, uint32_t capacity);
50743 struct JSXMLArrayCursor
50745 typedef js::HeapPtr<T> HeapPtrT;
50747 JSXMLArray<T> *array;
50749 JSXMLArrayCursor<T> *next;
50750 JSXMLArrayCursor<T> **prevp;
50753 JSXMLArrayCursor(JSXMLArray<T> *array)
50754 : array(array), index(0), next(array->cursors), prevp(&array->cursors),
50758 next->prevp = &next;
50759 array->cursors = this;
50762 ~JSXMLArrayCursor() { disconnect(); }
50764 void disconnect() {
50768 next->prevp = prevp;
50775 if (!array || index >= array->length)
50777 return root = array->vector[index++];
50781 if (!array || index >= array->length)
50783 return root = array->vector[index];
50787 void js_XMLArrayCursorTrace(JSTracer *trc, JSXMLArrayCursor<JSXML> *cursor);
50788 void js_XMLArrayCursorTrace(JSTracer *trc, JSXMLArrayCursor<JSObject> *cursor);
50790 #define JSXML_PRESET_CAPACITY JS_BIT(31)
50791 #define JSXML_CAPACITY_MASK JS_BITMASK(31)
50792 #define JSXML_CAPACITY(array) ((array)->capacity & JSXML_CAPACITY_MASK)
50798 typedef enum JSXMLClass {
50800 JSXML_CLASS_ELEMENT,
50801 JSXML_CLASS_ATTRIBUTE,
50802 JSXML_CLASS_PROCESSING_INSTRUCTION,
50804 JSXML_CLASS_COMMENT,
50808 #define JSXML_CLASS_HAS_KIDS(class_) ((class_) < JSXML_CLASS_ATTRIBUTE)
50809 #define JSXML_CLASS_HAS_VALUE(class_) ((class_) >= JSXML_CLASS_ATTRIBUTE)
50810 #define JSXML_CLASS_HAS_NAME(class_) ((unsigned)((class_) - JSXML_CLASS_ELEMENT) <= (unsigned)(JSXML_CLASS_PROCESSING_INSTRUCTION - JSXML_CLASS_ELEMENT))
50818 typedef struct JSXMLListVar {
50819 JSXMLArray<JSXML> kids;
50820 js::HeapPtrXML target;
50821 js::HeapPtrObject targetprop;
50824 typedef struct JSXMLElemVar {
50825 JSXMLArray<JSXML> kids;
50826 JSXMLArray<JSObject> namespaces;
50827 JSXMLArray<JSXML> attrs;
50831 #define xml_kids list.kids
50832 #define xml_target list.target
50833 #define xml_targetprop list.targetprop
50834 #define xml_namespaces elem.namespaces
50835 #define xml_attrs elem.attrs
50836 #define xml_value value
50839 #define JSXML_HAS_KIDS(xml) JSXML_CLASS_HAS_KIDS((xml)->xml_class)
50840 #define JSXML_HAS_VALUE(xml) JSXML_CLASS_HAS_VALUE((xml)->xml_class)
50841 #define JSXML_HAS_NAME(xml) JSXML_CLASS_HAS_NAME((xml)->xml_class)
50842 #define JSXML_LENGTH(xml) (JSXML_CLASS_HAS_KIDS((xml)->xml_class) ? (xml)->xml_kids.length : 0)
50846 struct JSXML : js::gc::Cell {
50851 js::HeapPtrObject object;
50853 js::HeapPtrXML parent;
50854 js::HeapPtrObject name;
50855 uint32_t xml_class;
50856 uint32_t xml_flags;
50860 js::HeapPtrString value;
50867 void finalize(js::FreeOp *fop);
50869 static void writeBarrierPre(JSXML *xml);
50870 static void writeBarrierPost(JSXML *xml, void *addr);
50874 #define XMLF_WHITESPACE_TEXT 0x1
50877 js_NewXML(JSContext *cx, JSXMLClass xml_class);
50880 js_TraceXML(JSTracer *trc, JSXML *xml);
50883 js_NewXMLObject(JSContext *cx, JSXMLClass xml_class);
50886 js_GetXMLObject(JSContext *cx, JSXML *xml);
50889 js_InitNamespaceClass(JSContext *cx, JSObject *obj);
50892 js_InitQNameClass(JSContext *cx, JSObject *obj);
50895 js_InitXMLClass(JSContext *cx, JSObject *obj);
50898 js_InitXMLClasses(JSContext *cx, JSObject *obj);
50905 js_GetLocalNameFromFunctionQName(JSObject *obj, jsid *funidp, JSContext *cx);
50908 js_GetDefaultXMLNamespace(JSContext *cx, jsval *vp);
50911 js_SetDefaultXMLNamespace(JSContext *cx, const js::Value &v);
50919 js_IsXMLName(JSContext *cx, jsval v);
50922 js_ToAttributeName(JSContext *cx, js::Value *vp);
50924 extern JSFlatString *
50925 js_EscapeAttributeValue(JSContext *cx, JSString *str, JSBool quote);
50928 js_AddAttributePart(JSContext *cx, JSBool isName, JSString *str,
50931 extern JSFlatString *
50932 js_EscapeElementValue(JSContext *cx, JSString *str);
50935 js_ValueToXMLString(JSContext *cx, const js::Value &v);
50938 js_ConstructXMLQNameObject(JSContext *cx, const js::Value & nsval,
50939 const js::Value & lnval);
50942 js_GetAnyName(JSContext *cx, jsid *idp);
50948 js_FindXMLProperty(JSContext *cx, const js::Value &nameval, JSObject **objp, jsid *idp);
50951 js_GetXMLMethod(JSContext *cx, js::HandleObject obj, jsid id, js::Value *vp);
50954 js_GetXMLDescendants(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
50957 js_DeleteXMLListElements(JSContext *cx, JSObject *listobj);
50960 js_StepXMLListFilter(JSContext *cx, JSBool initialized);
50963 js_ValueToXMLObject(JSContext *cx, const js::Value &v);
50966 js_ValueToXMLListObject(JSContext *cx, const js::Value &v);
50969 js_NewXMLSpecialObject(JSContext *cx, JSXMLClass xml_class, JSString *name,
50973 js_MakeXMLCDATAString(JSContext *cx, JSString *str);
50976 js_MakeXMLCommentString(JSContext *cx, JSString *str);
50979 js_MakeXMLPIString(JSContext *cx, JSString *name, JSString *str);
50983 js_TestXMLEquality(JSContext *cx, const js::Value &v1, const js::Value &v2,
50987 js_ConcatenateXML(JSContext *cx, JSObject *obj1, JSObject *obj2, js::Value *vp);
50992 GetLocalNameFromFunctionQName(JSObject *qn, JSAtom **namep, JSContext *cx);
50995 # 29 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
50996 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jswrapper.h" 1
50997 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jswrapper.h"
50998 #define jswrapper_h___
51007 class DummyFrameGuard;
51014 class __attribute__((visibility("default"))) AbstractWrapper : public IndirectProxyHandler
51018 unsigned flags() const { return mFlags; }
51020 explicit AbstractWrapper(unsigned flags);
51023 virtual bool getPropertyDescriptor(JSContext *cx, JSObject *wrapper, jsid id, bool set,
51024 PropertyDescriptor *desc) ;
51025 virtual bool getOwnPropertyDescriptor(JSContext *cx, JSObject *wrapper, jsid id, bool set,
51026 PropertyDescriptor *desc) ;
51027 virtual bool defineProperty(JSContext *cx, JSObject *wrapper, jsid id,
51028 PropertyDescriptor *desc) ;
51029 virtual bool getOwnPropertyNames(JSContext *cx, JSObject *wrapper, AutoIdVector &props) ;
51030 virtual bool delete_(JSContext *cx, JSObject *wrapper, jsid id, bool *bp) ;
51031 virtual bool enumerate(JSContext *cx, JSObject *wrapper, AutoIdVector &props) ;
51032 # 72 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jswrapper.h"
51033 enum Action { GET, SET, CALL, PUNCTURE };
51034 virtual bool enter(JSContext *cx, JSObject *wrapper, jsid id, Action act, bool *bp);
51035 virtual void leave(JSContext *cx, JSObject *wrapper);
51037 static JSObject *wrappedObject(const JSObject *wrapper);
51038 static AbstractWrapper *wrapperHandler(const JSObject *wrapper);
51042 class __attribute__((visibility("default"))) DirectWrapper : public AbstractWrapper
51045 explicit DirectWrapper(unsigned flags);
51047 typedef enum { PermitObjectAccess, PermitPropertyAccess, DenyAccess } Permission;
51049 virtual ~DirectWrapper();
51052 virtual bool has(JSContext *cx, JSObject *wrapper, jsid id, bool *bp) ;
51053 virtual bool hasOwn(JSContext *cx, JSObject *wrapper, jsid id, bool *bp) ;
51054 virtual bool get(JSContext *cx, JSObject *wrapper, JSObject *receiver, jsid id, Value *vp) ;
51055 virtual bool set(JSContext *cx, JSObject *wrapper, JSObject *receiver, jsid id, bool strict,
51057 virtual bool keys(JSContext *cx, JSObject *wrapper, AutoIdVector &props) ;
51058 virtual bool iterate(JSContext *cx, JSObject *wrapper, unsigned flags, Value *vp) ;
51061 virtual bool call(JSContext *cx, JSObject *wrapper, unsigned argc, Value *vp) ;
51062 virtual bool construct(JSContext *cx, JSObject *wrapper, unsigned argc, Value *argv, Value *rval) ;
51063 virtual bool nativeCall(JSContext *cx, JSObject *wrapper, Class *clasp, Native native, CallArgs args) ;
51064 virtual bool hasInstance(JSContext *cx, JSObject *wrapper, const Value *vp, bool *bp) ;
51065 virtual JSString *obj_toString(JSContext *cx, JSObject *wrapper) ;
51066 virtual JSString *fun_toString(JSContext *cx, JSObject *wrapper, unsigned indent) ;
51068 using AbstractWrapper::Action;
51070 static DirectWrapper singleton;
51072 static JSObject *New(JSContext *cx, JSObject *obj, JSObject *proto, JSObject *parent,
51073 DirectWrapper *handler);
51075 using AbstractWrapper::wrappedObject;
51076 using AbstractWrapper::wrapperHandler;
51079 CROSS_COMPARTMENT = 1 << 0,
51080 LAST_USED_FLAG = CROSS_COMPARTMENT
51083 static void *getWrapperFamily();
51090 typedef DirectWrapper Wrapper;
51093 class __attribute__((visibility("default"))) CrossCompartmentWrapper : public DirectWrapper
51096 CrossCompartmentWrapper(unsigned flags);
51098 virtual ~CrossCompartmentWrapper();
51101 virtual bool getPropertyDescriptor(JSContext *cx, JSObject *wrapper, jsid id, bool set,
51102 PropertyDescriptor *desc) ;
51103 virtual bool getOwnPropertyDescriptor(JSContext *cx, JSObject *wrapper, jsid id, bool set,
51104 PropertyDescriptor *desc) ;
51105 virtual bool defineProperty(JSContext *cx, JSObject *wrapper, jsid id,
51106 PropertyDescriptor *desc) ;
51107 virtual bool getOwnPropertyNames(JSContext *cx, JSObject *wrapper, AutoIdVector &props) ;
51108 virtual bool delete_(JSContext *cx, JSObject *wrapper, jsid id, bool *bp) ;
51109 virtual bool enumerate(JSContext *cx, JSObject *wrapper, AutoIdVector &props) ;
51112 virtual bool has(JSContext *cx, JSObject *wrapper, jsid id, bool *bp) ;
51113 virtual bool hasOwn(JSContext *cx, JSObject *wrapper, jsid id, bool *bp) ;
51114 virtual bool get(JSContext *cx, JSObject *wrapper, JSObject *receiver, jsid id, Value *vp) ;
51115 virtual bool set(JSContext *cx, JSObject *wrapper, JSObject *receiver, jsid id, bool strict,
51117 virtual bool keys(JSContext *cx, JSObject *wrapper, AutoIdVector &props) ;
51118 virtual bool iterate(JSContext *cx, JSObject *wrapper, unsigned flags, Value *vp) ;
51121 virtual bool call(JSContext *cx, JSObject *wrapper, unsigned argc, Value *vp) ;
51122 virtual bool construct(JSContext *cx, JSObject *wrapper, unsigned argc, Value *argv, Value *rval) ;
51123 virtual bool nativeCall(JSContext *cx, JSObject *wrapper, Class *clasp, Native native, CallArgs args) ;
51124 virtual bool hasInstance(JSContext *cx, JSObject *wrapper, const Value *vp, bool *bp) ;
51125 virtual JSString *obj_toString(JSContext *cx, JSObject *wrapper) ;
51126 virtual JSString *fun_toString(JSContext *cx, JSObject *wrapper, unsigned indent) ;
51127 virtual bool regexp_toShared(JSContext *cx, JSObject *proxy, RegExpGuard *g) ;
51128 virtual bool defaultValue(JSContext *cx, JSObject *wrapper, JSType hint, Value *vp) ;
51129 virtual bool iteratorNext(JSContext *cx, JSObject *wrapper, Value *vp);
51131 static CrossCompartmentWrapper singleton;
51133 # 182 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jswrapper.h"
51134 template <class Base>
51135 class __attribute__((visibility("default"))) SecurityWrapper : public Base
51138 SecurityWrapper(unsigned flags);
51140 virtual bool nativeCall(JSContext *cx, JSObject *wrapper, Class *clasp, Native native, CallArgs args) ;
51141 virtual bool objectClassIs(JSObject *obj, ESClassValue classValue, JSContext *cx) ;
51142 virtual bool regexp_toShared(JSContext *cx, JSObject *proxy, RegExpGuard *g) ;
51145 typedef SecurityWrapper<DirectWrapper> SameCompartmentSecurityWrapper;
51146 typedef SecurityWrapper<CrossCompartmentWrapper> CrossCompartmentSecurityWrapper;
51152 class __attribute__((visibility("default"))) ForceFrame
51155 JSContext * const context;
51156 JSObject * const target;
51158 DummyFrameGuard *frame;
51161 ForceFrame(JSContext *cx, JSObject *target);
51167 class __attribute__((visibility("default"))) DeadObjectProxy : public BaseProxyHandler
51170 static int sDeadObjectFamily;
51172 explicit DeadObjectProxy();
51175 virtual bool getPropertyDescriptor(JSContext *cx, JSObject *wrapper, jsid id, bool set,
51176 PropertyDescriptor *desc) ;
51177 virtual bool getOwnPropertyDescriptor(JSContext *cx, JSObject *wrapper, jsid id, bool set,
51178 PropertyDescriptor *desc) ;
51179 virtual bool defineProperty(JSContext *cx, JSObject *wrapper, jsid id,
51180 PropertyDescriptor *desc) ;
51181 virtual bool getOwnPropertyNames(JSContext *cx, JSObject *wrapper, AutoIdVector &props) ;
51182 virtual bool delete_(JSContext *cx, JSObject *wrapper, jsid id, bool *bp) ;
51183 virtual bool enumerate(JSContext *cx, JSObject *wrapper, AutoIdVector &props) ;
51186 virtual bool call(JSContext *cx, JSObject *proxy, unsigned argc, Value *vp);
51187 virtual bool construct(JSContext *cx, JSObject *proxy, unsigned argc, Value *argv, Value *rval);
51188 virtual bool nativeCall(JSContext *cx, JSObject *proxy, Class *clasp, Native native, CallArgs args);
51189 virtual bool hasInstance(JSContext *cx, JSObject *proxy, const Value *vp, bool *bp);
51190 virtual bool objectClassIs(JSObject *obj, ESClassValue classValue, JSContext *cx);
51191 virtual JSString *obj_toString(JSContext *cx, JSObject *proxy);
51192 virtual JSString *fun_toString(JSContext *cx, JSObject *proxy, unsigned indent);
51193 virtual bool regexp_toShared(JSContext *cx, JSObject *proxy, RegExpGuard *g);
51194 virtual bool defaultValue(JSContext *cx, JSObject *obj, JSType hint, Value *vp);
51195 virtual bool iteratorNext(JSContext *cx, JSObject *proxy, Value *vp);
51196 virtual bool getElementIfPresent(JSContext *cx, JSObject *obj, JSObject *receiver,
51197 uint32_t index, Value *vp, bool *present);
51200 static DeadObjectProxy singleton;
51204 TransparentObjectWrapper(JSContext *cx, JSObject *obj, JSObject *wrappedProto, JSObject *parent,
51209 extern __attribute__((visibility("default"))) int sWrapperFamily;
51212 IsWrapper(const JSObject *obj)
51214 return IsProxy(obj) && GetProxyHandler(obj)->family() == &sWrapperFamily;
51221 __attribute__((visibility("default"))) JSObject *
51222 UnwrapObject(JSObject *obj, bool stopAtOuter = true, unsigned *flagsp = __null);
51228 __attribute__((visibility("default"))) JSObject *
51229 UnwrapObjectChecked(JSContext *cx, JSObject *obj);
51231 __attribute__((visibility("default"))) bool
51232 IsCrossCompartmentWrapper(const JSObject *obj);
51235 NewDeadProxyObject(JSContext *cx, JSObject *parent);
51238 NukeCrossCompartmentWrapper(JSObject *wrapper);
51241 # 30 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
51244 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Marking.h" 1
51245 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
51247 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/BooleanObject.h" 1
51248 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/BooleanObject.h"
51249 #define BooleanObject_h___
51255 class BooleanObject : public JSObject
51258 static const unsigned PRIMITIVE_VALUE_SLOT = 0;
51261 static const unsigned RESERVED_SLOTS = 1;
51267 static inline BooleanObject *create(JSContext *cx, bool b);
51273 static inline BooleanObject *createWithProto(JSContext *cx, bool b, JSObject &proto);
51275 bool unbox() const {
51276 return getFixedSlot(PRIMITIVE_VALUE_SLOT).toBoolean();
51280 inline void setPrimitiveValue(bool b) {
51281 setFixedSlot(PRIMITIVE_VALUE_SLOT, BooleanValue(b));
51286 ::js_InitBooleanClass(JSContext *cx, JSObject *global);
51290 # 35 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
51292 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumberObject.h" 1
51293 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/NumberObject.h"
51294 #define NumberObject_h___
51300 class NumberObject : public JSObject
51303 static const unsigned PRIMITIVE_VALUE_SLOT = 0;
51306 static const unsigned RESERVED_SLOTS = 1;
51312 static inline NumberObject *create(JSContext *cx, double d);
51318 static inline NumberObject *createWithProto(JSContext *cx, double d, JSObject &proto);
51320 double unbox() const {
51321 return getFixedSlot(PRIMITIVE_VALUE_SLOT).toNumber();
51325 inline void setPrimitiveValue(double d) {
51326 setFixedSlot(PRIMITIVE_VALUE_SLOT, NumberValue(d));
51331 ::js_InitNumberClass(JSContext *cx, JSObject *global);
51335 # 37 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
51336 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics.h" 1
51337 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics.h"
51338 #define RegExpStatics_h__
51346 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/MatchPairs.h" 1
51347 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/MatchPairs.h"
51348 #define MatchPairs_h__
51349 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/MatchPairs.h"
51357 MatchPair(int start, int limit) : start(start), limit(limit) {}
51359 size_t length() const {
51361 return limit - start;
51364 bool isUndefined() const {
51365 return start == -1;
51368 void check() const {
51379 explicit MatchPairs(size_t pairCount) : pairCount_(pairCount) {
51383 void initPairValues() {
51384 for (int *it = buffer_; it < buffer_ + 2 * pairCount_; ++it)
51388 static size_t calculateSize(size_t backingPairCount) {
51389 return sizeof(MatchPairs) - sizeof(int) + sizeof(int) * backingPairCount;
51392 int *buffer() { return buffer_; }
51394 friend class RegExpShared;
51401 static MatchPairs *create(LifoAlloc &alloc, size_t pairCount, size_t backingPairCount);
51403 size_t pairCount() const { return pairCount_; }
51405 MatchPair pair(size_t i) {
51407 return MatchPair(buffer_[2 * i], buffer_[2 * i + 1]);
51410 void displace(size_t amount) {
51414 for (int *it = buffer_; it < buffer_ + 2 * pairCount_; ++it)
51415 *it = (*it < 0) ? -1 : *it + amount;
51418 inline void checkAgainst(size_t length);
51422 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics.h" 2
51426 class RegExpStatics
51428 typedef Vector<int, 20, SystemAllocPolicy> Pairs;
51431 HeapPtr<JSLinearString> matchPairsInput;
51433 HeapPtr<JSString> pendingInput;
51435 RegExpStatics *bufferLink;
51438 bool createDependent(JSContext *cx, size_t start, size_t end, Value *out) const;
51440 inline void copyTo(RegExpStatics &dst);
51442 inline void aboutToWrite();
51444 bool save(JSContext *cx, RegExpStatics *buffer) {
51446 buffer->bufferLink = bufferLink;
51447 bufferLink = buffer;
51448 if (!buffer->matchPairs.reserve(matchPairs.length())) {
51449 js_ReportOutOfMemory(cx);
51455 inline void restore();
51457 void checkInvariants() {
51458 # 76 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics.h"
51465 void checkParenNum(size_t pairNum) const {
51471 size_t getParenLength(size_t pairNum) const {
51472 checkParenNum(pairNum);
51474 return get(pairNum, 1) - get(pairNum, 0);
51477 int get(size_t pairNum, bool which) const {
51479 return matchPairs[2 * pairNum + which];
51487 bool makeMatch(JSContext *cx, size_t checkValidIndex, size_t pairNum, Value *out) const;
51489 void markFlagsSet(JSContext *cx);
51491 struct InitBuffer {};
51492 explicit RegExpStatics(InitBuffer) : bufferLink(__null), copied(false) {}
51494 friend class PreserveRegExpStatics;
51497 inline RegExpStatics();
51499 static JSObject *create(JSContext *cx, GlobalObject *parent);
51503 inline bool updateFromMatchPairs(JSContext *cx, JSLinearString *input, MatchPairs *newPairs);
51504 inline void setMultiline(JSContext *cx, bool enabled);
51506 inline void clear();
51509 inline void reset(JSContext *cx, JSString *newInput, bool newMultiline);
51511 inline void setPendingInput(JSString *newInput);
51512 # 139 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics.h"
51514 size_t pairCount() const {
51516 return matchPairs.length() / 2;
51520 size_t parenCount() const {
51521 size_t pc = pairCount();
51526 JSString *getPendingInput() const { return pendingInput; }
51527 RegExpFlag getFlags() const { return flags; }
51528 bool multiline() const { return flags & MultilineFlag; }
51530 size_t matchStart() const {
51531 int start = get(0, 0);
51533 return size_t(start);
51536 size_t matchLimit() const {
51537 int limit = get(0, 1);
51539 return size_t(limit);
51543 bool matched() const {
51546 return get(0, 1) - get(0, 0) > 0;
51549 void mark(JSTracer *trc) {
51551 MarkString(trc, &pendingInput, "res->pendingInput");
51552 if (matchPairsInput)
51553 MarkString(trc, &matchPairsInput, "res->matchPairsInput");
51556 bool pairIsPresent(size_t pairNum) const {
51557 return get(pairNum, 0) >= 0;
51562 bool createPendingInput(JSContext *cx, Value *out) const;
51563 bool createLastMatch(JSContext *cx, Value *out) const { return makeMatch(cx, 0, 0, out); }
51564 bool createLastParen(JSContext *cx, Value *out) const;
51565 bool createLeftContext(JSContext *cx, Value *out) const;
51566 bool createRightContext(JSContext *cx, Value *out) const;
51569 bool createParen(JSContext *cx, size_t pairNum, Value *out) const {
51571 if (pairNum >= pairCount()) {
51572 out->setString(cx->runtime->emptyString);
51575 return makeMatch(cx, pairNum * 2, pairNum, out);
51580 void getParen(size_t pairNum, JSSubString *out) const;
51581 void getLastMatch(JSSubString *out) const;
51582 void getLastParen(JSSubString *out) const;
51583 void getLeftContext(JSSubString *out) const;
51584 void getRightContext(JSSubString *out) const;
51586 class AutoRooter : private AutoGCRooter
51589 explicit AutoRooter(JSContext *cx, RegExpStatics *statics_
51591 : AutoGCRooter(cx, REGEXPSTATICS), statics(statics_), skip(cx, statics_)
51596 friend void AutoGCRooter::trace(JSTracer *trc);
51597 void trace(JSTracer *trc);
51600 RegExpStatics *statics;
51606 class PreserveRegExpStatics
51608 RegExpStatics * const original;
51609 RegExpStatics buffer;
51610 RegExpStatics::AutoRooter bufferRoot;
51613 explicit PreserveRegExpStatics(JSContext *cx, RegExpStatics *original)
51614 : original(original),
51615 buffer(RegExpStatics::InitBuffer()),
51616 bufferRoot(cx, &buffer)
51619 bool init(JSContext *cx) {
51620 return original->save(cx, &buffer);
51623 inline ~PreserveRegExpStatics();
51626 size_t SizeOfRegExpStaticsData(const JSObject *obj, JSMallocSizeOfFun mallocSizeOf);
51629 # 38 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
51630 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/StringObject.h" 1
51631 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/StringObject.h"
51632 #define StringObject_h___
51639 class StringObject : public JSObject
51641 static const unsigned PRIMITIVE_VALUE_SLOT = 0;
51642 static const unsigned LENGTH_SLOT = 1;
51645 static const unsigned RESERVED_SLOTS = 2;
51651 static inline StringObject *create(JSContext *cx, HandleString str);
51657 static inline StringObject *createWithProto(JSContext *cx, HandleString str, JSObject &proto);
51659 JSString *unbox() const {
51660 return getFixedSlot(PRIMITIVE_VALUE_SLOT).toString();
51663 inline size_t length() const {
51664 return size_t(getFixedSlot(LENGTH_SLOT).toInt32());
51667 static size_t getPrimitiveValueOffset() {
51668 return getFixedSlotOffset(PRIMITIVE_VALUE_SLOT);
51672 inline bool init(JSContext *cx, HandleString str);
51674 void setStringThis(JSString *str) {
51676 setFixedSlot(PRIMITIVE_VALUE_SLOT, StringValue(str));
51677 setFixedSlot(LENGTH_SLOT, Int32Value(int32_t(str->length())));
51682 ::js_InitStringClass(JSContext *cx, JSObject *global);
51689 Shape *assignInitialShape(JSContext *cx);
51693 # 39 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
51695 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatominlines.h" 1
51703 #define jsatominlines_h___
51710 # 1 "./../../dist/include/mozilla/RangedPtr.h" 1
51711 # 14 "./../../dist/include/mozilla/RangedPtr.h"
51712 #define mozilla_RangedPtr_h_
51718 namespace mozilla {
51719 # 41 "./../../dist/include/mozilla/RangedPtr.h"
51720 template <typename T>
51730 void checkSanity() {
51736 RangedPtr<T> create(T *ptr) const {
51740 return RangedPtr<T>(ptr, __null, size_t(0));
51745 RangedPtr(T* p, T* start, T* end)
51754 RangedPtr(T* p, T* start, size_t length)
51766 RangedPtr(T* p, size_t length)
51779 RangedPtr(T arr[N])
51791 # 123 "./../../dist/include/mozilla/RangedPtr.h"
51792 RangedPtr<T>& operator=(const RangedPtr<T>& other) {
51800 RangedPtr<T> operator+(size_t inc) {
51803 return create(ptr + inc);
51806 RangedPtr<T> operator-(size_t dec) {
51809 return create(ptr - dec);
51816 template <typename U>
51817 RangedPtr<T>& operator=(U* p) {
51822 template <typename U>
51823 RangedPtr<T>& operator=(const RangedPtr<U>& p) {
51831 RangedPtr<T>& operator++() {
51832 return (*this += 1);
51835 RangedPtr<T> operator++(int) {
51836 RangedPtr<T> rcp = *this;
51841 RangedPtr<T>& operator--() {
51842 return (*this -= 1);
51845 RangedPtr<T> operator--(int) {
51846 RangedPtr<T> rcp = *this;
51851 RangedPtr<T>& operator+=(size_t inc) {
51852 this->operator=<T>(*this + inc);
51856 RangedPtr<T>& operator-=(size_t dec) {
51857 this->operator=<T>(*this - dec);
51861 T& operator[](int index) const {
51863 return *create(ptr + index);
51866 T& operator*() const {
51870 template <typename U>
51871 bool operator==(const RangedPtr<U>& other) const {
51872 return ptr == other.ptr;
51874 template <typename U>
51875 bool operator!=(const RangedPtr<U>& other) const {
51876 return !(*this == other);
51879 template<typename U>
51880 bool operator==(const U* u) const {
51883 template<typename U>
51884 bool operator!=(const U* u) const {
51885 return !(*this == u);
51888 template <typename U>
51889 bool operator<(const RangedPtr<U>& other) const {
51890 return ptr < other.ptr;
51892 template <typename U>
51893 bool operator<=(const RangedPtr<U>& other) const {
51894 return ptr <= other.ptr;
51897 template <typename U>
51898 bool operator>(const RangedPtr<U>& other) const {
51899 return ptr > other.ptr;
51901 template <typename U>
51902 bool operator>=(const RangedPtr<U>& other) const {
51903 return ptr >= other.ptr;
51906 size_t operator-(const RangedPtr<T>& other) const {
51908 return PointerRangeSize(other.ptr, ptr);
51914 operator T*() const ;
51918 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatominlines.h" 2
51922 js::AtomStateEntry::asPtr() const
51925 JSAtom *atom = reinterpret_cast<JSAtom *>(bits & NO_TAG_MASK);
51926 JSString::readBarrier(atom);
51931 js_ValueToAtom(JSContext *cx, const js::Value &v, JSAtom **atomp)
51933 if (!v.isString()) {
51934 JSString *str = js::ToStringSlow(cx, v);
51937 JS::Anchor<JSString *> anchor(str);
51938 *atomp = js_AtomizeString(cx, str);
51942 JSString *str = v.toString();
51943 if (str->isAtom()) {
51944 *atomp = &str->asAtom();
51948 *atomp = js_AtomizeString(cx, str);
51955 ValueToId(JSContext* cx, JSObject *obj, const Value &v, jsid *idp)
51958 if (ValueFitsInInt32(v, &i) && INT_FITS_IN_JSID(i)) {
51959 *idp = INT_TO_JSID(i);
51963 return InternNonIntElementId(cx, obj, v, idp);
51967 ValueToId(JSContext* cx, const Value &v, jsid *idp)
51969 return ValueToId(cx, __null, v, idp);
51971 # 76 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatominlines.h"
51972 template <typename T>
51973 inline mozilla::RangedPtr<T>
51974 BackfillIndexInCharBuffer(uint32_t index, mozilla::RangedPtr<T> end)
51976 # 89 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsatominlines.h"
51978 uint32_t next = index / 10, digit = index % 10;
51979 *--end = '0' + digit;
51981 } while (index > 0);
51987 IndexToId(JSContext *cx, uint32_t index, jsid *idp)
51989 MaybeCheckStackRoots(cx);
51991 if (index <= (2147483647)) {
51992 *idp = INT_TO_JSID(index);
51996 extern bool IndexToIdSlow(JSContext *cx, uint32_t index, jsid *idp);
51997 return IndexToIdSlow(cx, index, idp);
52001 AtomToId(JSAtom *atom)
52003 typedef int moz_static_assert106[(0 == 0) ? 1 : -1];
52006 if (atom->isIndex(&index) && index <= (2147483647))
52007 return INT_TO_JSID((int32_t) index);
52009 return JSID_FROM_BITS((size_t)atom);
52012 static __attribute__((always_inline)) inline JSFlatString *
52013 IdToString(JSContext *cx, jsid id)
52015 if (JSID_IS_STRING(id))
52016 return JSID_TO_ATOM(id);
52018 if ((__builtin_expect((JSID_IS_INT(id)), 1)))
52019 return Int32ToString(cx, JSID_TO_INT(id));
52021 JSString *str = ToStringSlow(cx, IdToValue(id));
52025 return str->ensureFlat(cx);
52029 AtomHasher::Lookup::Lookup(const JSAtom *atom)
52030 : chars(atom->chars()), length(atom->length()), atom(atom)
52034 AtomHasher::match(const AtomStateEntry &entry, const Lookup &lookup)
52036 JSAtom *key = entry.asPtr();
52038 return lookup.atom == key;
52039 if (key->length() != lookup.length)
52041 return PodEqual(key->chars(), lookup.chars, lookup.length);
52045 # 41 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
52046 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfuninlines.h" 1
52047 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfuninlines.h"
52048 #define jsfuninlines_h___
52055 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject-inl.h" 1
52056 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject-inl.h"
52057 #define ScopeObject_inl_h___
52059 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject.h" 1
52060 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject.h"
52061 #define ScopeObject_h___
52065 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsweakmap.h" 1
52066 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsweakmap.h"
52067 #define jsweakmap_h___
52068 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsweakmap.h"
52070 # 68 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsweakmap.h"
52071 static WeakMapBase * const WeakMapNotInList = reinterpret_cast<WeakMapBase *>(1);
52073 typedef Vector<WeakMapBase *, 0, SystemAllocPolicy> WeakMapVector;
52077 class WeakMapBase {
52079 WeakMapBase(JSObject *memOf) : memberOf(memOf), next(WeakMapNotInList) { }
52080 virtual ~WeakMapBase() { }
52082 void trace(JSTracer *tracer) {
52083 if (((tracer)->callback == __null || (tracer)->callback == GCMarker::GrayCallback)) {
52092 if (next == WeakMapNotInList) {
52093 JSRuntime *rt = tracer->runtime;
52094 next = rt->gcWeakMapList;
52095 rt->gcWeakMapList = this;
52102 if (tracer->eagerlyTraceWeakMaps)
52103 nonMarkingTrace(tracer);
52113 static bool markAllIteratively(JSTracer *tracer);
52117 static void sweepAll(JSTracer *tracer);
52120 static void traceAllMappings(WeakMapTracer *tracer);
52122 void check() { do { } while(0); }
52125 static void resetWeakMapList(JSRuntime *rt);
52128 static bool saveWeakMapList(JSRuntime *rt, WeakMapVector &vector);
52129 static void restoreWeakMapList(JSRuntime *rt, WeakMapVector &vector);
52134 virtual void nonMarkingTrace(JSTracer *tracer) = 0;
52135 virtual bool markIteratively(JSTracer *tracer) = 0;
52136 virtual void sweep(JSTracer *tracer) = 0;
52137 virtual void traceMappings(WeakMapTracer *tracer) = 0;
52140 JSObject *memberOf;
52151 template <class Key, class Value,
52152 class HashPolicy = DefaultHasher<Key> >
52153 class WeakMap : public HashMap<Key, Value, HashPolicy, RuntimeAllocPolicy>, public WeakMapBase {
52155 typedef HashMap<Key, Value, HashPolicy, RuntimeAllocPolicy> Base;
52156 typedef typename Base::Enum Enum;
52159 typedef typename Base::Range Range;
52161 explicit WeakMap(JSRuntime *rt, JSObject *memOf=__null) : Base(rt), WeakMapBase(memOf) { }
52162 explicit WeakMap(JSContext *cx, JSObject *memOf=__null) : Base(cx), WeakMapBase(memOf) { }
52165 Range nondeterministicAll() {
52166 return Base::all();
52170 bool markValue(JSTracer *trc, Value *x) {
52171 if (gc::IsMarked(x))
52173 gc::Mark(trc, x, "WeakMap entry");
52177 void nonMarkingTrace(JSTracer *trc) {
52178 for (Range r = Base::all(); !r.empty(); r.popFront())
52179 markValue(trc, &r.front().value);
52182 bool markIteratively(JSTracer *trc) {
52183 bool markedAny = false;
52184 for (Enum e(*this); !e.empty(); e.popFront()) {
52186 Key k(e.front().key);
52187 bool keyIsMarked = gc::IsMarked(&k);
52189 if (markValue(trc, &e.front().value))
52197 void sweep(JSTracer *trc) {
52199 for (Enum e(*this); !e.empty(); e.popFront()) {
52200 Key k(e.front().key);
52201 if (!gc::IsMarked(&k))
52204 # 216 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsweakmap.h"
52208 void traceMappings(WeakMapTracer *tracer) {
52209 for (Range r = Base::all(); !r.empty(); r.popFront()) {
52210 gc::Cell *key = gc::ToMarkable(r.front().key);
52211 gc::Cell *value = gc::ToMarkable(r.front().value);
52212 if (key && value) {
52213 tracer->callback(tracer, memberOf,
52214 key, gc::TraceKind(r.front().key),
52215 value, gc::TraceKind(r.front().value));
52224 js_InitWeakMapClass(JSContext *cx, JSObject *obj);
52225 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject.h" 2
52228 # 33 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject.h"
52229 struct ScopeCoordinate
52233 inline ScopeCoordinate(jsbytecode *pc);
52237 ScopeCoordinateAtom(JSScript *script, jsbytecode *pc);
52238 # 83 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject.h"
52239 class ScopeObject : public JSObject
52242 void *getPrivate() const;
52245 static const uint32_t SCOPE_CHAIN_SLOT = 0;
52253 inline JSObject &enclosingScope() const;
52254 inline bool setEnclosingScope(JSContext *cx, HandleObject obj);
52261 inline StackFrame *maybeStackFrame() const;
52262 inline void setStackFrame(StackFrame *frame);
52265 static inline size_t offsetOfEnclosingScope();
52268 class CallObject : public ScopeObject
52270 static const uint32_t CALLEE_SLOT = 1;
52272 static CallObject *
52273 create(JSContext *cx, JSScript *script, HandleObject enclosing, HandleObject callee);
52276 static const uint32_t RESERVED_SLOTS = 3;
52278 static CallObject *createForFunction(JSContext *cx, StackFrame *fp);
52279 static CallObject *createForStrictEval(JSContext *cx, StackFrame *fp);
52282 inline bool isForEval() const;
52288 inline JSObject *getCallee() const;
52289 inline JSFunction *getCalleeFunction() const;
52290 inline void setCallee(JSObject *callee);
52293 inline const Value &arg(unsigned i) const;
52294 inline void setArg(unsigned i, const Value &v);
52295 inline void initArgUnchecked(unsigned i, const Value &v);
52298 inline const Value &var(unsigned i) const;
52299 inline void setVar(unsigned i, const Value &v);
52300 inline void initVarUnchecked(unsigned i, const Value &v);
52307 inline HeapSlotArray argArray();
52308 inline HeapSlotArray varArray();
52310 inline void copyValues(unsigned nargs, Value *argv, unsigned nvars, Value *slots);
52312 static JSBool getArgOp(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
52313 static JSBool getVarOp(JSContext *cx, HandleObject obj, HandleId id, Value *vp);
52314 static JSBool setArgOp(JSContext *cx, HandleObject obj, HandleId id, JSBool strict, Value *vp);
52315 static JSBool setVarOp(JSContext *cx, HandleObject obj, HandleId id, JSBool strict, Value *vp);
52318 bool containsVarOrArg(PropertyName *name, Value *vp, JSContext *cx);
52321 class DeclEnvObject : public ScopeObject
52324 static const uint32_t RESERVED_SLOTS = 1;
52325 static const gc::AllocKind FINALIZE_KIND = gc::FINALIZE_OBJECT2;
52327 static DeclEnvObject *create(JSContext *cx, StackFrame *fp);
52331 class NestedScopeObject : public ScopeObject
52334 static const unsigned DEPTH_SLOT = 1;
52338 uint32_t stackDepth() const;
52341 class WithObject : public NestedScopeObject
52344 js::StackFrame *maybeStackFrame() const;
52345 void setStackFrame(StackFrame *frame);
52347 static const unsigned THIS_SLOT = 2;
52350 JSObject *getProto() const;
52353 static const unsigned RESERVED_SLOTS = 3;
52354 static const gc::AllocKind FINALIZE_KIND = gc::FINALIZE_OBJECT4;
52356 static WithObject *
52357 create(JSContext *cx, HandleObject proto, HandleObject enclosing, uint32_t depth);
52360 JSObject &withThis() const;
52363 JSObject &object() const;
52366 class BlockObject : public NestedScopeObject
52369 static const unsigned RESERVED_SLOTS = 2;
52370 static const gc::AllocKind FINALIZE_KIND = gc::FINALIZE_OBJECT4;
52373 inline uint32_t slotCount() const;
52377 inline HeapSlot &slotValue(unsigned i);
52380 class StaticBlockObject : public BlockObject
52383 StackFrame *maybeStackFrame() const;
52384 void setStackFrame(StackFrame *frame);
52387 static StaticBlockObject *create(JSContext *cx);
52389 inline StaticBlockObject *enclosingBlock() const;
52390 inline void setEnclosingBlock(StaticBlockObject *blockObj);
52392 void setStackDepth(uint32_t depth);
52393 bool containsVarAtDepth(uint32_t depth);
52399 void setDefinitionParseNode(unsigned i, Definition *def);
52400 Definition *maybeDefinitionParseNode(unsigned i);
52406 void setAliased(unsigned i, bool aliased);
52407 bool isAliased(unsigned i);
52413 bool needsClone() const;
52415 const Shape *addVar(JSContext *cx, jsid id, int index, bool *redeclared);
52418 class ClonedBlockObject : public BlockObject
52421 static ClonedBlockObject *create(JSContext *cx, Handle<StaticBlockObject *> block,
52425 StaticBlockObject &staticBlock() const;
52431 void put(StackFrame *fp);
52434 const Value &closedSlot(unsigned i);
52437 bool containsVar(PropertyName *name, Value *vp, JSContext *cx);
52440 template<XDRMode mode>
52442 XDRStaticBlockObject(XDRState<mode> *xdr, JSScript *script, StaticBlockObject **objp);
52445 CloneStaticBlockObject(JSContext *cx, StaticBlockObject &srcBlock,
52446 const AutoObjectVector &objects, JSScript *src);
52447 # 307 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject.h"
52451 enum Type { Call, Block, With, StrictEvalScope };
52456 StaticBlockObject *block_;
52458 bool hasScopeObject_;
52464 explicit ScopeIter();
52467 explicit ScopeIter(StackFrame *fp);
52473 explicit ScopeIter(JSObject &enclosingScope);
52479 ScopeIter(ScopeIter si, StackFrame *fp);
52482 ScopeIter(StackFrame *fp, ScopeObject &scope);
52484 bool done() const { return !fp_; }
52488 JSObject &enclosingScope() const { do { } while(0); return *cur_; }
52492 ScopeIter enclosing() const;
52494 StackFrame *fp() const { do { } while(0); return fp_; }
52495 Type type() const { do { } while(0); return type_; }
52496 bool hasScopeObject() const { do { } while(0); return hasScopeObject_; }
52497 ScopeObject &scope() const;
52499 StaticBlockObject &staticBlock() const { do { } while(0); return *block_; }
52502 typedef ScopeIter Lookup;
52503 static HashNumber hash(ScopeIter si);
52504 static bool match(ScopeIter si1, ScopeIter si2);
52506 # 393 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject.h"
52508 GetDebugScopeForFunction(JSContext *cx, JSFunction *fun);
52511 GetDebugScopeForFrame(JSContext *cx, StackFrame *fp);
52514 class DebugScopeObject : public JSObject
52516 static const unsigned ENCLOSING_EXTRA = 0;
52519 static DebugScopeObject *create(JSContext *cx, ScopeObject &scope, JSObject &enclosing);
52521 ScopeObject &scope() const;
52522 JSObject &enclosingScope() const;
52525 bool isForDeclarative() const;
52532 typedef WeakMap<HeapPtrObject, HeapPtrObject> ObjectWeakMap;
52533 ObjectWeakMap proxiedScopes;
52539 typedef HashMap<ScopeIter, DebugScopeObject *, ScopeIter, RuntimeAllocPolicy> MissingScopeMap;
52540 MissingScopeMap missingScopes;
52543 DebugScopes(JSRuntime *rt);
52547 void mark(JSTracer *trc);
52550 DebugScopeObject *hasDebugScope(JSContext *cx, ScopeObject &scope) const;
52551 bool addDebugScope(JSContext *cx, ScopeObject &scope, DebugScopeObject &debugScope);
52553 DebugScopeObject *hasDebugScope(JSContext *cx, ScopeIter si) const;
52554 bool addDebugScope(JSContext *cx, ScopeIter si, DebugScopeObject &debugScope);
52560 void onPopCall(StackFrame *fp);
52561 void onPopBlock(JSContext *cx, StackFrame *fp);
52562 void onGeneratorFrameChange(StackFrame *from, StackFrame *to);
52563 void onCompartmentLeaveDebugMode(JSCompartment *c);
52567 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject-inl.h" 2
52572 ScopeCoordinate::ScopeCoordinate(jsbytecode *pc)
52573 : hops(((unsigned)(((pc)[1] << 8) | (pc)[2]))), binding(((unsigned)(((pc + 2)[1] << 8) | (pc + 2)[2])))
52579 ScopeCoordinateAtom(JSScript *script, jsbytecode *pc)
52582 return script->getAtom(GET_UINT32_INDEX(pc + 2 * sizeof(uint16_t)));
52586 ScopeObject::enclosingScope() const
52588 return getReservedSlot(SCOPE_CHAIN_SLOT).toObject();
52592 ScopeObject::setEnclosingScope(JSContext *cx, HandleObject obj)
52594 RootedObject self(cx, this);
52595 if (!obj->setDelegate(cx))
52597 self->setFixedSlot(SCOPE_CHAIN_SLOT, ObjectValue(*obj));
52601 inline StackFrame *
52602 ScopeObject::maybeStackFrame() const
52605 return reinterpret_cast<StackFrame *>(JSObject::getPrivate());
52609 ScopeObject::setStackFrame(StackFrame *frame)
52611 return setPrivate(frame);
52615 ScopeObject::offsetOfEnclosingScope()
52617 return getFixedSlotOffset(SCOPE_CHAIN_SLOT);
52621 CallObject::isForEval() const
52626 return getReservedSlot(CALLEE_SLOT).isNull();
52630 CallObject::setCallee(JSObject *callee)
52633 setFixedSlot(CALLEE_SLOT, ObjectOrNullValue(callee));
52637 CallObject::getCallee() const
52639 return getReservedSlot(CALLEE_SLOT).toObjectOrNull();
52642 inline JSFunction *
52643 CallObject::getCalleeFunction() const
52645 return getReservedSlot(CALLEE_SLOT).toObject().toFunction();
52648 inline const Value &
52649 CallObject::arg(unsigned i) const
52652 return getSlot(RESERVED_SLOTS + i);
52656 CallObject::setArg(unsigned i, const Value &v)
52659 setSlot(RESERVED_SLOTS + i, v);
52663 CallObject::initArgUnchecked(unsigned i, const Value &v)
52666 initSlotUnchecked(RESERVED_SLOTS + i, v);
52669 inline const Value &
52670 CallObject::var(unsigned i) const
52672 JSFunction *fun = getCalleeFunction();
52675 return getSlot(RESERVED_SLOTS + fun->nargs + i);
52679 CallObject::setVar(unsigned i, const Value &v)
52681 JSFunction *fun = getCalleeFunction();
52684 setSlot(RESERVED_SLOTS + fun->nargs + i, v);
52688 CallObject::initVarUnchecked(unsigned i, const Value &v)
52690 JSFunction *fun = getCalleeFunction();
52693 initSlotUnchecked(RESERVED_SLOTS + fun->nargs + i, v);
52697 CallObject::copyValues(unsigned nargs, Value *argv, unsigned nvars, Value *slots)
52700 copySlotRange(RESERVED_SLOTS, argv, nargs);
52701 copySlotRange(RESERVED_SLOTS + nargs, slots, nvars);
52704 inline HeapSlotArray
52705 CallObject::argArray()
52707 DebugOnly<JSFunction*> fun = getCalleeFunction();
52709 return HeapSlotArray(getSlotAddress(RESERVED_SLOTS));
52712 inline HeapSlotArray
52713 CallObject::varArray()
52715 JSFunction *fun = getCalleeFunction();
52718 return HeapSlotArray(getSlotAddress(RESERVED_SLOTS + fun->nargs));
52722 NestedScopeObject::stackDepth() const
52724 return getReservedSlot(DEPTH_SLOT).toPrivateUint32();
52728 WithObject::withThis() const
52730 return getReservedSlot(THIS_SLOT).toObject();
52734 WithObject::object() const
52736 return *JSObject::getProto();
52740 BlockObject::slotCount() const
52742 return propertyCount();
52746 BlockObject::slotValue(unsigned i)
52749 return getSlotRef(RESERVED_SLOTS + i);
52752 inline StaticBlockObject *
52753 StaticBlockObject::enclosingBlock() const
52755 JSObject *obj = getReservedSlot(SCOPE_CHAIN_SLOT).toObjectOrNull();
52756 return obj ? &obj->asStaticBlock() : __null;
52760 StaticBlockObject::setEnclosingBlock(StaticBlockObject *blockObj)
52762 setFixedSlot(SCOPE_CHAIN_SLOT, ObjectOrNullValue(blockObj));
52766 StaticBlockObject::setStackDepth(uint32_t depth)
52769 initReservedSlot(DEPTH_SLOT, PrivateUint32Value(depth));
52773 StaticBlockObject::setDefinitionParseNode(unsigned i, Definition *def)
52776 slotValue(i).init(this, i, PrivateValue(def));
52779 inline Definition *
52780 StaticBlockObject::maybeDefinitionParseNode(unsigned i)
52782 Value v = slotValue(i);
52783 return v.isUndefined() ? __null : reinterpret_cast<Definition *>(v.toPrivate());
52787 StaticBlockObject::setAliased(unsigned i, bool aliased)
52789 slotValue(i).init(this, i, BooleanValue(aliased));
52791 JSObject::setPrivate(reinterpret_cast<void *>(1));
52795 StaticBlockObject::isAliased(unsigned i)
52797 return slotValue(i).isTrue();
52801 StaticBlockObject::needsClone() const
52803 return JSObject::getPrivate() != __null;
52807 StaticBlockObject::containsVarAtDepth(uint32_t depth)
52809 return depth >= stackDepth() && depth < stackDepth() + slotCount();
52812 inline StaticBlockObject &
52813 ClonedBlockObject::staticBlock() const
52815 return getProto()->asStaticBlock();
52818 inline const Value &
52819 ClonedBlockObject::closedSlot(unsigned i)
52822 return slotValue(i);
52827 inline js::ScopeObject &
52828 JSObject::asScope()
52831 return *static_cast<js::ScopeObject *>(this);
52834 inline js::CallObject &
52838 return *static_cast<js::CallObject *>(this);
52841 inline js::DeclEnvObject &
52842 JSObject::asDeclEnv()
52845 return *static_cast<js::DeclEnvObject *>(this);
52848 inline js::NestedScopeObject &
52849 JSObject::asNestedScope()
52852 return *static_cast<js::NestedScopeObject *>(this);
52855 inline js::WithObject &
52859 return *static_cast<js::WithObject *>(this);
52862 inline js::BlockObject &
52863 JSObject::asBlock()
52866 return *static_cast<js::BlockObject *>(this);
52869 inline js::StaticBlockObject &
52870 JSObject::asStaticBlock()
52873 return *static_cast<js::StaticBlockObject *>(this);
52876 inline js::ClonedBlockObject &
52877 JSObject::asClonedBlock()
52880 return *static_cast<js::ClonedBlockObject *>(this);
52883 inline js::DebugScopeObject &
52884 JSObject::asDebugScope()
52887 return *static_cast<js::DebugScopeObject *>(this);
52889 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfuninlines.h" 2
52892 JSFunction::inStrictMode() const
52894 return script()->strictModeCode;
52898 JSFunction::environment() const
52905 JSFunction::setEnvironment(JSObject *obj)
52908 *(js::HeapPtrObject *)&u.i.env_ = obj;
52912 JSFunction::initEnvironment(JSObject *obj)
52915 ((js::HeapPtrObject *)&u.i.env_)->init(obj);
52919 JSFunction::initializeExtended()
52924 toExtended()->extendedSlots[0].init(js::UndefinedValue());
52925 toExtended()->extendedSlots[1].init(js::UndefinedValue());
52929 JSFunction::setExtendedSlot(size_t which, const js::Value &val)
52932 toExtended()->extendedSlots[which] = val;
52935 inline const js::Value &
52936 JSFunction::getExtendedSlot(size_t which) const
52939 return toExtended()->extendedSlots[which];
52944 static __attribute__((always_inline)) inline bool
52945 IsFunctionObject(const js::Value &v)
52947 return v.isObject() && v.toObject().isFunction();
52950 static __attribute__((always_inline)) inline bool
52951 IsFunctionObject(const js::Value &v, JSFunction **fun)
52953 if (v.isObject() && v.toObject().isFunction()) {
52954 *fun = v.toObject().toFunction();
52960 static __attribute__((always_inline)) inline bool
52961 IsNativeFunction(const js::Value &v)
52964 return IsFunctionObject(v, &fun) && fun->isNative();
52967 static __attribute__((always_inline)) inline bool
52968 IsNativeFunction(const js::Value &v, JSFunction **fun)
52970 return IsFunctionObject(v, fun) && (*fun)->isNative();
52973 static __attribute__((always_inline)) inline bool
52974 IsNativeFunction(const js::Value &v, JSNative native)
52977 return IsFunctionObject(v, &fun) && fun->maybeNative() == native;
52979 # 115 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfuninlines.h"
52980 static __attribute__((always_inline)) inline bool
52981 ClassMethodIsNative(JSContext *cx, HandleObject obj, Class *clasp, HandleId methodid, JSNative native)
52986 if (!HasDataProperty(cx, obj, methodid, &v)) {
52987 RootedObject proto(cx, obj->getProto());
52988 if (!proto || proto->getClass() != clasp || !HasDataProperty(cx, proto, methodid, &v))
52992 return js::IsNativeFunction(v, native);
52995 extern __attribute__((always_inline)) inline bool
52996 SameTraceType(const Value &lhs, const Value &rhs)
52998 return SameType(lhs, rhs) &&
52999 (lhs.isPrimitive() ||
53000 lhs.toObject().isFunction() == rhs.toObject().isFunction());
53004 static __attribute__((always_inline)) inline bool
53005 IsConstructing(const Value *vp)
53007 # 151 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsfuninlines.h"
53008 return vp[1].isMagic();
53012 IsConstructing(CallReceiver call)
53014 return IsConstructing(call.base());
53017 inline const char *
53018 GetFunctionNameBytes(JSContext *cx, JSFunction *fun, JSAutoByteString *bytes)
53021 return bytes->encode(cx, fun->atom);
53022 return js_anonymous_str;
53025 extern JSFunctionSpec function_methods[];
53028 Function(JSContext *cx, unsigned argc, Value *vp);
53031 IsBuiltinFunctionConstructor(JSFunction *fun);
53033 static inline JSObject *
53034 SkipScopeParent(JSObject *parent)
53038 while (parent->isScope())
53039 parent = &parent->asScope().enclosingScope();
53043 inline JSFunction *
53044 CloneFunctionObject(JSContext *cx, HandleFunction fun, HandleObject parent,
53045 gc::AllocKind kind = JSFunction::FinalizeKind)
53048 RootedObject proto(cx, parent->global().getOrCreateFunctionPrototype(cx));
53052 return js_CloneFunctionObject(cx, fun, parent, proto, kind);
53055 inline JSFunction *
53056 CloneFunctionObjectIfNotSingleton(JSContext *cx, HandleFunction fun, HandleObject parent)
53065 if (fun->hasSingletonType()) {
53066 if (!JSObject::setParent(cx, fun, RootedObject(cx, SkipScopeParent(parent))))
53068 fun->setEnvironment(parent);
53072 return CloneFunctionObject(cx, fun, parent);
53075 inline JSFunction *
53076 CloneFunctionObject(JSContext *cx, HandleFunction fun)
53087 if (fun->hasSingletonType())
53090 return js_CloneFunctionObject(cx, fun,
53091 RootedObject(cx, fun->environment()),
53092 RootedObject(cx, fun->getProto()),
53093 JSFunction::ExtendedFinalizeKind);
53099 JSFunction::setScript(JSScript *script_)
53102 mutableScript() = script_;
53106 JSFunction::initScript(JSScript *script_)
53109 mutableScript().init(script_);
53111 # 42 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
53112 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgcinlines.h" 1
53120 #define jsgcinlines_h___
53124 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscompartment.h" 1
53125 # 13 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgcinlines.h" 2
53138 inline JSGCTraceKind
53139 GetGCThingTraceKind(const void *thing)
53142 const Cell *cell = reinterpret_cast<const Cell *>(thing);
53143 return MapAllocToTraceKind(cell->getAllocKind());
53147 const size_t SLOTS_TO_THING_KIND_LIMIT = 17;
53150 static inline AllocKind
53151 GetGCObjectKind(size_t numSlots)
53153 extern AllocKind slotsToThingKind[];
53155 if (numSlots >= SLOTS_TO_THING_KIND_LIMIT)
53156 return FINALIZE_OBJECT16;
53157 return slotsToThingKind[numSlots];
53160 static inline AllocKind
53161 GetGCObjectKind(Class *clasp)
53163 if (clasp == &FunctionClass)
53164 return JSFunction::FinalizeKind;
53165 uint32_t nslots = (((clasp)->flags >> 8) & (((uint32_t)1 << (8)) - 1));
53166 if (clasp->flags & (1<<0))
53168 return GetGCObjectKind(nslots);
53172 static inline AllocKind
53173 GetGCArrayKind(size_t numSlots)
53175 extern AllocKind slotsToThingKind[];
53183 typedef int moz_static_assert107[(ObjectElements::VALUES_PER_HEADER == 2) ? 1 : -1];
53184 if (numSlots > JSObject::NELEMENTS_LIMIT || numSlots + 2 >= SLOTS_TO_THING_KIND_LIMIT)
53185 return FINALIZE_OBJECT2;
53186 return slotsToThingKind[numSlots + 2];
53189 static inline AllocKind
53190 GetGCObjectFixedSlotsKind(size_t numFixedSlots)
53192 extern AllocKind slotsToThingKind[];
53195 return slotsToThingKind[numFixedSlots];
53199 IsBackgroundAllocKind(AllocKind kind)
53202 return kind <= FINALIZE_OBJECT_LAST && kind % 2 == 1;
53205 static inline AllocKind
53206 GetBackgroundAllocKind(AllocKind kind)
53209 return (AllocKind) (kind + 1);
53217 TryIncrementAllocKind(AllocKind *kindp)
53219 size_t next = size_t(*kindp) + 2;
53220 if (next >= size_t(FINALIZE_OBJECT_LIMIT))
53222 *kindp = AllocKind(next);
53227 static inline size_t
53228 GetGCKindSlots(AllocKind thingKind)
53231 switch (thingKind) {
53232 case FINALIZE_OBJECT0:
53233 case FINALIZE_OBJECT0_BACKGROUND:
53235 case FINALIZE_OBJECT2:
53236 case FINALIZE_OBJECT2_BACKGROUND:
53238 case FINALIZE_OBJECT4:
53239 case FINALIZE_OBJECT4_BACKGROUND:
53241 case FINALIZE_OBJECT8:
53242 case FINALIZE_OBJECT8_BACKGROUND:
53244 case FINALIZE_OBJECT12:
53245 case FINALIZE_OBJECT12_BACKGROUND:
53247 case FINALIZE_OBJECT16:
53248 case FINALIZE_OBJECT16_BACKGROUND:
53251 __builtin_unreachable();
53256 static inline size_t
53257 GetGCKindSlots(AllocKind thingKind, Class *clasp)
53259 size_t nslots = GetGCKindSlots(thingKind);
53262 if (clasp->flags & (1<<0)) {
53271 if (clasp == &FunctionClass)
53278 GCPoke(JSRuntime *rt, Value oldval)
53287 # 183 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgcinlines.h"
53294 template <class ArenaOp, class CellOp>
53296 ForEachArenaAndCell(JSCompartment *compartment, AllocKind thingKind,
53297 ArenaOp arenaOp, CellOp cellOp)
53299 size_t thingSize = Arena::thingSize(thingKind);
53300 ArenaHeader *aheader = compartment->arenas.getFirstArena(thingKind);
53302 for (; aheader; aheader = aheader->next) {
53303 Arena *arena = aheader->getArena();
53305 FreeSpan firstSpan(aheader->getFirstFreeSpan());
53306 const FreeSpan *span = &firstSpan;
53308 for (uintptr_t thing = arena->thingsStart(thingKind); ; thing += thingSize) {
53310 if (thing == span->first) {
53311 if (!span->hasNext())
53313 thing = span->last;
53314 span = span->nextSpan();
53316 Cell *t = reinterpret_cast<Cell *>(thing);
53325 size_t firstThingOffset;
53327 ArenaHeader *aheader;
53328 FreeSpan firstSpan;
53329 const FreeSpan *span;
53337 void initSpan(JSCompartment *comp, AllocKind kind) {
53339 firstThingOffset = Arena::firstThingOffset(kind);
53340 thingSize = Arena::thingSize(kind);
53341 firstSpan.initAsEmpty();
53343 thing = span->first;
53346 void init(ArenaHeader *singleAheader) {
53347 aheader = singleAheader;
53348 initSpan(aheader->compartment, aheader->getAllocKind());
53353 void init(JSCompartment *comp, AllocKind kind) {
53354 initSpan(comp, kind);
53355 aheader = comp->arenas.getFirstArena(kind);
53360 bool done() const {
53364 template<typename T> T *get() const {
53366 return static_cast<T *>(cell);
53369 Cell *getCell() const {
53376 if (thing != span->first)
53378 if ((__builtin_expect((span->hasNext()), 1))) {
53379 thing = span->last + thingSize;
53380 span = span->nextSpan();
53387 firstSpan = aheader->getFirstFreeSpan();
53389 thing = aheader->arenaAddress() | firstThingOffset;
53390 aheader = aheader->next;
53392 cell = reinterpret_cast<Cell *>(thing);
53393 thing += thingSize;
53397 class CellIterUnderGC : public CellIterImpl
53400 CellIterUnderGC(JSCompartment *comp, AllocKind kind) {
53405 CellIterUnderGC(ArenaHeader *aheader) {
53416 class CellIter : public CellIterImpl
53424 CellIter(JSCompartment *comp, AllocKind kind)
53425 : lists(&comp->arenas),
53435 if (lists->isSynchronizedFreeList(kind)) {
53439 lists->copyFreeListToArena(kind);
53454 lists->clearFreeListInArena(kind);
53460 inline void EmptyArenaOp(Arena *arena) {}
53461 inline void EmptyCellOp(Cell *t) {}
53463 class GCCompartmentsIter {
53465 JSCompartment **it, **end;
53468 GCCompartmentsIter(JSRuntime *rt) {
53470 it = rt->compartments.begin();
53471 end = rt->compartments.end();
53472 if (!(*it)->isCollecting())
53476 bool done() const { return it == end; }
53482 } while (it != end && !(*it)->isCollecting());
53485 JSCompartment *get() const {
53490 operator JSCompartment *() const { return get(); }
53491 JSCompartment *operator->() const { return get(); }
53493 # 396 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgcinlines.h"
53494 template <typename T>
53496 NewGCThing(JSContext *cx, js::gc::AllocKind kind, size_t thingSize)
53514 MaybeCheckStackRoots(cx);
53516 JSCompartment *comp = cx->compartment;
53517 void *t = comp->arenas.allocateFromFreeList(kind, thingSize);
53519 t = js::gc::ArenaLists::refillFreeList(cx, kind);
53523 return static_cast<T *>(t);
53527 template <typename T>
53529 TryNewGCThing(JSContext *cx, js::gc::AllocKind kind, size_t thingSize)
53544 void *t = cx->compartment->arenas.allocateFromFreeList(kind, thingSize);
53547 return static_cast<T *>(t);
53554 js_NewGCObject(JSContext *cx, js::gc::AllocKind kind)
53557 return js::gc::NewGCThing<JSObject>(cx, kind, js::gc::Arena::thingSize(kind));
53561 js_TryNewGCObject(JSContext *cx, js::gc::AllocKind kind)
53564 return js::gc::TryNewGCThing<JSObject>(cx, kind, js::gc::Arena::thingSize(kind));
53568 js_NewGCString(JSContext *cx)
53570 return js::gc::NewGCThing<JSString>(cx, js::gc::FINALIZE_STRING, sizeof(JSString));
53573 inline JSShortString *
53574 js_NewGCShortString(JSContext *cx)
53576 return js::gc::NewGCThing<JSShortString>(cx, js::gc::FINALIZE_SHORT_STRING, sizeof(JSShortString));
53579 inline JSExternalString *
53580 js_NewGCExternalString(JSContext *cx)
53582 return js::gc::NewGCThing<JSExternalString>(cx, js::gc::FINALIZE_EXTERNAL_STRING,
53583 sizeof(JSExternalString));
53587 js_NewGCScript(JSContext *cx)
53589 return js::gc::NewGCThing<JSScript>(cx, js::gc::FINALIZE_SCRIPT, sizeof(JSScript));
53593 js_NewGCShape(JSContext *cx)
53595 return js::gc::NewGCThing<js::Shape>(cx, js::gc::FINALIZE_SHAPE, sizeof(js::Shape));
53598 inline js::BaseShape *
53599 js_NewGCBaseShape(JSContext *cx)
53601 return js::gc::NewGCThing<js::BaseShape>(cx, js::gc::FINALIZE_BASE_SHAPE, sizeof(js::BaseShape));
53606 js_NewGCXML(JSContext *cx);
53607 # 43 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
53608 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h" 1
53609 # 10 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h"
53610 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsanalyze.h" 1
53611 # 10 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsanalyze.h"
53612 #define jsanalyze_h___
53614 # 1 "./jsautooplen.h" 1
53620 #define JSOP_NOP_LENGTH 1
53621 #define JSOP_UNDEFINED_LENGTH 1
53622 #define JSOP_POPV_LENGTH 1
53623 #define JSOP_ENTERWITH_LENGTH 1
53624 #define JSOP_LEAVEWITH_LENGTH 1
53625 #define JSOP_RETURN_LENGTH 1
53626 #define JSOP_GOTO_LENGTH 5
53627 #define JSOP_IFEQ_LENGTH 5
53628 #define JSOP_IFNE_LENGTH 5
53629 #define JSOP_ARGUMENTS_LENGTH 1
53630 #define JSOP_SWAP_LENGTH 1
53631 #define JSOP_POPN_LENGTH 3
53632 #define JSOP_DUP_LENGTH 1
53633 #define JSOP_DUP2_LENGTH 1
53634 #define JSOP_SETCONST_LENGTH 5
53635 #define JSOP_BITOR_LENGTH 1
53636 #define JSOP_BITXOR_LENGTH 1
53637 #define JSOP_BITAND_LENGTH 1
53638 #define JSOP_EQ_LENGTH 1
53639 #define JSOP_NE_LENGTH 1
53640 #define JSOP_LT_LENGTH 1
53641 #define JSOP_LE_LENGTH 1
53642 #define JSOP_GT_LENGTH 1
53643 #define JSOP_GE_LENGTH 1
53644 #define JSOP_LSH_LENGTH 1
53645 #define JSOP_RSH_LENGTH 1
53646 #define JSOP_URSH_LENGTH 1
53647 #define JSOP_ADD_LENGTH 1
53648 #define JSOP_SUB_LENGTH 1
53649 #define JSOP_MUL_LENGTH 1
53650 #define JSOP_DIV_LENGTH 1
53651 #define JSOP_MOD_LENGTH 1
53652 #define JSOP_NOT_LENGTH 1
53653 #define JSOP_BITNOT_LENGTH 1
53654 #define JSOP_NEG_LENGTH 1
53655 #define JSOP_POS_LENGTH 1
53656 #define JSOP_DELNAME_LENGTH 5
53657 #define JSOP_DELPROP_LENGTH 5
53658 #define JSOP_DELELEM_LENGTH 1
53659 #define JSOP_TYPEOF_LENGTH 1
53660 #define JSOP_VOID_LENGTH 1
53661 #define JSOP_INCNAME_LENGTH 6
53662 #define JSOP_INCPROP_LENGTH 6
53663 #define JSOP_INCELEM_LENGTH 2
53664 #define JSOP_DECNAME_LENGTH 6
53665 #define JSOP_DECPROP_LENGTH 6
53666 #define JSOP_DECELEM_LENGTH 2
53667 #define JSOP_NAMEINC_LENGTH 6
53668 #define JSOP_PROPINC_LENGTH 6
53669 #define JSOP_ELEMINC_LENGTH 2
53670 #define JSOP_NAMEDEC_LENGTH 6
53671 #define JSOP_PROPDEC_LENGTH 6
53672 #define JSOP_ELEMDEC_LENGTH 2
53673 #define JSOP_GETPROP_LENGTH 5
53674 #define JSOP_SETPROP_LENGTH 5
53675 #define JSOP_GETELEM_LENGTH 1
53676 #define JSOP_SETELEM_LENGTH 1
53677 #define JSOP_CALLNAME_LENGTH 5
53678 #define JSOP_CALL_LENGTH 3
53679 #define JSOP_NAME_LENGTH 5
53680 #define JSOP_DOUBLE_LENGTH 5
53681 #define JSOP_STRING_LENGTH 5
53682 #define JSOP_ZERO_LENGTH 1
53683 #define JSOP_ONE_LENGTH 1
53684 #define JSOP_NULL_LENGTH 1
53685 #define JSOP_THIS_LENGTH 1
53686 #define JSOP_FALSE_LENGTH 1
53687 #define JSOP_TRUE_LENGTH 1
53688 #define JSOP_OR_LENGTH 5
53689 #define JSOP_AND_LENGTH 5
53690 #define JSOP_TABLESWITCH_LENGTH -1
53691 #define JSOP_LOOKUPSWITCH_LENGTH -1
53692 #define JSOP_STRICTEQ_LENGTH 1
53693 #define JSOP_STRICTNE_LENGTH 1
53694 #define JSOP_SETCALL_LENGTH 1
53695 #define JSOP_ITER_LENGTH 2
53696 #define JSOP_MOREITER_LENGTH 1
53697 #define JSOP_ITERNEXT_LENGTH 2
53698 #define JSOP_ENDITER_LENGTH 1
53699 #define JSOP_FUNAPPLY_LENGTH 3
53700 #define JSOP_OBJECT_LENGTH 5
53701 #define JSOP_POP_LENGTH 1
53702 #define JSOP_NEW_LENGTH 3
53703 #define JSOP_UNUSED0_LENGTH 1
53704 #define JSOP_GETARG_LENGTH 3
53705 #define JSOP_SETARG_LENGTH 3
53706 #define JSOP_GETLOCAL_LENGTH 3
53707 #define JSOP_SETLOCAL_LENGTH 3
53708 #define JSOP_UINT16_LENGTH 3
53709 #define JSOP_NEWINIT_LENGTH 5
53710 #define JSOP_NEWARRAY_LENGTH 4
53711 #define JSOP_NEWOBJECT_LENGTH 5
53712 #define JSOP_ENDINIT_LENGTH 1
53713 #define JSOP_INITPROP_LENGTH 5
53714 #define JSOP_INITELEM_LENGTH 1
53715 #define JSOP_UNUSED14_LENGTH 1
53716 #define JSOP_UNUSED15_LENGTH 1
53717 #define JSOP_INCARG_LENGTH 3
53718 #define JSOP_DECARG_LENGTH 3
53719 #define JSOP_ARGINC_LENGTH 3
53720 #define JSOP_ARGDEC_LENGTH 3
53721 #define JSOP_INCLOCAL_LENGTH 3
53722 #define JSOP_DECLOCAL_LENGTH 3
53723 #define JSOP_LOCALINC_LENGTH 3
53724 #define JSOP_LOCALDEC_LENGTH 3
53725 #define JSOP_LEAVEFORLETIN_LENGTH 1
53726 #define JSOP_LABEL_LENGTH 5
53727 #define JSOP_UNUSED3_LENGTH 1
53728 #define JSOP_FUNCALL_LENGTH 3
53729 #define JSOP_LOOPHEAD_LENGTH 1
53730 #define JSOP_BINDNAME_LENGTH 5
53731 #define JSOP_SETNAME_LENGTH 5
53732 #define JSOP_THROW_LENGTH 1
53733 #define JSOP_IN_LENGTH 1
53734 #define JSOP_INSTANCEOF_LENGTH 1
53735 #define JSOP_DEBUGGER_LENGTH 1
53736 #define JSOP_GOSUB_LENGTH 5
53737 #define JSOP_RETSUB_LENGTH 1
53738 #define JSOP_EXCEPTION_LENGTH 1
53739 #define JSOP_LINENO_LENGTH 3
53740 #define JSOP_CONDSWITCH_LENGTH 1
53741 #define JSOP_CASE_LENGTH 5
53742 #define JSOP_DEFAULT_LENGTH 5
53743 #define JSOP_EVAL_LENGTH 3
53744 #define JSOP_ENUMELEM_LENGTH 1
53745 #define JSOP_GETTER_LENGTH 1
53746 #define JSOP_SETTER_LENGTH 1
53747 #define JSOP_DEFFUN_LENGTH 5
53748 #define JSOP_DEFCONST_LENGTH 5
53749 #define JSOP_DEFVAR_LENGTH 5
53750 #define JSOP_LAMBDA_LENGTH 5
53751 #define JSOP_CALLEE_LENGTH 1
53752 #define JSOP_UNUSED31_LENGTH 1
53753 #define JSOP_PICK_LENGTH 2
53754 #define JSOP_TRY_LENGTH 1
53755 #define JSOP_FINALLY_LENGTH 1
53756 #define JSOP_GETALIASEDVAR_LENGTH 9
53757 #define JSOP_CALLALIASEDVAR_LENGTH 9
53758 #define JSOP_SETALIASEDVAR_LENGTH 9
53759 #define JSOP_INCALIASEDVAR_LENGTH 10
53760 #define JSOP_DECALIASEDVAR_LENGTH 10
53761 #define JSOP_ALIASEDVARINC_LENGTH 10
53762 #define JSOP_ALIASEDVARDEC_LENGTH 10
53763 #define JSOP_UNUSED8_LENGTH 1
53764 #define JSOP_UNUSED9_LENGTH 1
53765 #define JSOP_UNUSED10_LENGTH 1
53766 #define JSOP_UNUSED11_LENGTH 1
53767 #define JSOP_UNUSED12_LENGTH 1
53768 #define JSOP_UNUSED13_LENGTH 1
53769 #define JSOP_BACKPATCH_LENGTH 5
53770 #define JSOP_BACKPATCH_POP_LENGTH 5
53771 #define JSOP_THROWING_LENGTH 1
53772 #define JSOP_SETRVAL_LENGTH 1
53773 #define JSOP_RETRVAL_LENGTH 1
53774 #define JSOP_GETGNAME_LENGTH 5
53775 #define JSOP_SETGNAME_LENGTH 5
53776 #define JSOP_INCGNAME_LENGTH 6
53777 #define JSOP_DECGNAME_LENGTH 6
53778 #define JSOP_GNAMEINC_LENGTH 6
53779 #define JSOP_GNAMEDEC_LENGTH 6
53780 #define JSOP_REGEXP_LENGTH 5
53781 #define JSOP_DEFXMLNS_LENGTH 1
53782 #define JSOP_ANYNAME_LENGTH 1
53783 #define JSOP_QNAMEPART_LENGTH 5
53784 #define JSOP_QNAMECONST_LENGTH 5
53785 #define JSOP_QNAME_LENGTH 1
53786 #define JSOP_TOATTRNAME_LENGTH 1
53787 #define JSOP_TOATTRVAL_LENGTH 1
53788 #define JSOP_ADDATTRNAME_LENGTH 1
53789 #define JSOP_ADDATTRVAL_LENGTH 1
53790 #define JSOP_BINDXMLNAME_LENGTH 1
53791 #define JSOP_SETXMLNAME_LENGTH 1
53792 #define JSOP_XMLNAME_LENGTH 1
53793 #define JSOP_DESCENDANTS_LENGTH 1
53794 #define JSOP_FILTER_LENGTH 5
53795 #define JSOP_ENDFILTER_LENGTH 5
53796 #define JSOP_TOXML_LENGTH 1
53797 #define JSOP_TOXMLLIST_LENGTH 1
53798 #define JSOP_XMLTAGEXPR_LENGTH 1
53799 #define JSOP_XMLELTEXPR_LENGTH 1
53800 #define JSOP_XMLCDATA_LENGTH 5
53801 #define JSOP_XMLCOMMENT_LENGTH 5
53802 #define JSOP_XMLPI_LENGTH 5
53803 #define JSOP_DELDESC_LENGTH 1
53804 #define JSOP_CALLPROP_LENGTH 5
53805 #define JSOP_ENTERLET0_LENGTH 5
53806 #define JSOP_ENTERLET1_LENGTH 5
53807 #define JSOP_UINT24_LENGTH 4
53808 #define JSOP_UNUSED18_LENGTH 1
53809 #define JSOP_UNUSED19_LENGTH 1
53810 #define JSOP_UNUSED20_LENGTH 1
53811 #define JSOP_STARTXML_LENGTH 1
53812 #define JSOP_STARTXMLEXPR_LENGTH 1
53813 #define JSOP_CALLELEM_LENGTH 1
53814 #define JSOP_STOP_LENGTH 1
53815 #define JSOP_GETXPROP_LENGTH 5
53816 #define JSOP_CALLXMLNAME_LENGTH 1
53817 #define JSOP_TYPEOFEXPR_LENGTH 1
53818 #define JSOP_ENTERBLOCK_LENGTH 5
53819 #define JSOP_LEAVEBLOCK_LENGTH 3
53820 #define JSOP_UNUSED1_LENGTH 1
53821 #define JSOP_UNUSED2_LENGTH 1
53822 #define JSOP_GENERATOR_LENGTH 1
53823 #define JSOP_YIELD_LENGTH 1
53824 #define JSOP_ARRAYPUSH_LENGTH 3
53825 #define JSOP_GETFUNNS_LENGTH 1
53826 #define JSOP_ENUMCONSTELEM_LENGTH 1
53827 #define JSOP_LEAVEBLOCKEXPR_LENGTH 3
53828 #define JSOP_UNUSED21_LENGTH 1
53829 #define JSOP_UNUSED22_LENGTH 1
53830 #define JSOP_UNUSED23_LENGTH 1
53831 #define JSOP_CALLGNAME_LENGTH 5
53832 #define JSOP_CALLLOCAL_LENGTH 3
53833 #define JSOP_CALLARG_LENGTH 3
53834 #define JSOP_BINDGNAME_LENGTH 5
53835 #define JSOP_INT8_LENGTH 2
53836 #define JSOP_INT32_LENGTH 5
53837 #define JSOP_LENGTH_LENGTH 5
53838 #define JSOP_HOLE_LENGTH 1
53839 #define JSOP_UNUSED17_LENGTH 1
53840 #define JSOP_UNUSED24_LENGTH 1
53841 #define JSOP_UNUSED25_LENGTH 1
53842 #define JSOP_UNUSED29_LENGTH 1
53843 #define JSOP_UNUSED30_LENGTH 1
53844 #define JSOP_REST_LENGTH 1
53845 #define JSOP_TOID_LENGTH 1
53846 #define JSOP_IMPLICITTHIS_LENGTH 5
53847 #define JSOP_LOOPENTRY_LENGTH 1
53848 #define JSOP_ACTUALSFILLED_LENGTH 3
53849 # 13 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsanalyze.h" 2
53857 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject.h" 1
53858 # 21 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsanalyze.h" 2
53863 namespace js { namespace mjit { struct RegisterAllocation; } }
53866 namespace analyze {
53867 # 59 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsanalyze.h"
53870 friend class ScriptAnalysis;
53873 Bytecode() { PodZero(this); }
53878 bool jumpTarget : 1;
53881 bool fallthrough : 1;
53884 bool jumpFallthrough : 1;
53887 bool switchTarget : 1;
53893 bool unconditional : 1;
53899 bool exceptionEntry : 1;
53902 bool inTryBlock : 1;
53908 bool safePoint : 1;
53914 bool monitoredTypes : 1;
53917 bool monitoredTypesReturn : 1;
53923 bool arrayWriteHole: 1;
53924 bool getStringElement:1;
53925 bool accessGetter: 1;
53928 uint32_t stackDepth;
53934 types::TypeSet *observedTypes;
53937 LoopAnalysis *loop;
53943 mjit::RegisterAllocation *allocation;
53948 SSAValue *poppedValues;
53951 SSAUseChain **pushedUses;
53960 SlotValue *newValues;
53961 # 161 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsanalyze.h"
53962 Vector<SlotValue> *pendingValues;
53968 types::TypeSet *pushedTypes;
53971 types::TypeBarrier *typeBarriers;
53974 static inline unsigned
53975 GetDefCount(JSScript *script, unsigned offset)
53978 jsbytecode *pc = script->code + offset;
53984 switch (JSOp(*pc)) {
53997 return (pc[1] + 1);
53999 return StackDefs(script, pc);
54003 static inline unsigned
54004 GetUseCount(JSScript *script, unsigned offset)
54007 jsbytecode *pc = script->code + offset;
54009 if (JSOp(*pc) == JSOP_PICK)
54010 return (pc[1] + 1);
54011 if (js_CodeSpec[*pc].nuses == -1)
54012 return StackUses(script, pc);
54013 return js_CodeSpec[*pc].nuses;
54021 ExtendedDef(jsbytecode *pc)
54023 switch ((JSOp)*pc) {
54029 case JSOP_SETLOCAL:
54030 case JSOP_INCLOCAL:
54031 case JSOP_DECLOCAL:
54032 case JSOP_LOCALINC:
54033 case JSOP_LOCALDEC:
54042 BytecodeNoFallThrough(JSOp op)
54051 case JSOP_TABLESWITCH:
54052 case JSOP_LOOKUPSWITCH:
54068 ExtendedUse(jsbytecode *pc)
54070 if (ExtendedDef(pc))
54072 switch ((JSOp)*pc) {
54075 case JSOP_GETLOCAL:
54076 case JSOP_CALLLOCAL:
54084 ReverseCompareOp(JSOp op)
54096 __builtin_unreachable();
54101 static inline unsigned
54102 FollowBranch(JSContext *cx, JSScript *script, unsigned offset)
54109 jsbytecode *pc = script->code + offset;
54110 unsigned targetOffset = offset + GET_JUMP_OFFSET(pc);
54111 if (targetOffset < offset) {
54112 jsbytecode *target = script->code + targetOffset;
54113 JSOp nop = JSOp(*target);
54114 if (nop == JSOP_GOTO)
54115 return targetOffset + GET_JUMP_OFFSET(target);
54117 return targetOffset;
54121 static inline uint32_t CalleeSlot() {
54124 static inline uint32_t ThisSlot() {
54127 static inline uint32_t ArgSlot(uint32_t arg) {
54130 static inline uint32_t LocalSlot(JSScript *script, uint32_t local) {
54131 return 2 + (script->function() ? script->function()->nargs : 0) + local;
54133 static inline uint32_t TotalSlots(JSScript *script) {
54134 return LocalSlot(script, 0) + script->nfixed;
54137 static inline uint32_t StackSlot(JSScript *script, uint32_t index) {
54138 return TotalSlots(script) + index;
54141 static inline uint32_t GetBytecodeSlot(JSScript *script, jsbytecode *pc)
54143 switch (JSOp(*pc)) {
54152 return ArgSlot(((unsigned)(((pc)[1] << 8) | (pc)[2])));
54154 case JSOP_GETLOCAL:
54155 case JSOP_CALLLOCAL:
54156 case JSOP_SETLOCAL:
54157 case JSOP_INCLOCAL:
54158 case JSOP_DECLOCAL:
54159 case JSOP_LOCALINC:
54160 case JSOP_LOCALDEC:
54161 return LocalSlot(script, ((unsigned)(((pc)[1] << 8) | (pc)[2])));
54163 case JSOP_GETALIASEDVAR:
54164 case JSOP_CALLALIASEDVAR:
54165 case JSOP_SETALIASEDVAR:
54167 ScopeCoordinate sc = ScopeCoordinate(pc);
54168 return script->bindings.bindingIsArg(sc.binding)
54169 ? ArgSlot(script->bindings.bindingToArg(sc.binding))
54170 : LocalSlot(script, script->bindings.bindingToLocal(sc.binding));
54178 __builtin_unreachable();
54185 BytecodeUpdatesSlot(JSOp op)
54189 case JSOP_SETLOCAL:
54194 case JSOP_INCLOCAL:
54195 case JSOP_DECLOCAL:
54196 case JSOP_LOCALINC:
54197 case JSOP_LOCALDEC:
54204 static inline int32_t
54205 GetBytecodeInteger(jsbytecode *pc)
54207 switch (JSOp(*pc)) {
54208 case JSOP_ZERO: return 0;
54209 case JSOP_ONE: return 1;
54210 case JSOP_UINT16: return ((unsigned)(((pc)[1] << 8) | (pc)[2]));
54211 case JSOP_UINT24: return ((jsatomid)(((pc)[1] << 16) | ((pc)[2] << 8) | (pc)[3]));
54212 case JSOP_INT8: return (int8_t((pc)[1]));
54213 case JSOP_INT32: return (((uint32_t((pc)[1]) << 24) | (uint32_t((pc)[2]) << 16) | (uint32_t((pc)[3]) << 8) | uint32_t((pc)[4])));
54215 __builtin_unreachable();
54219 # 426 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsanalyze.h"
54251 Lifetime(uint32_t offset, uint32_t savedEnd, Lifetime *next)
54252 : start(offset), end(offset), savedEnd(savedEnd),
54253 loopTail(false), write(false), next(next)
54262 LoopAnalysis *parent;
54282 uint32_t lastBlock;
54288 bool hasSafePoints;
54291 bool hasCallsLoops;
54295 struct LifetimeVariable
54298 Lifetime *lifetime;
54304 uint32_t savedEnd : 31;
54310 Lifetime * live(uint32_t offset) const {
54311 if (lifetime && lifetime->end >= offset)
54313 Lifetime *segment = lifetime ? lifetime : saved;
54314 while (segment && segment->start <= offset) {
54315 if (segment->end >= offset)
54317 segment = segment->next;
54326 uint32_t firstWrite(uint32_t start, uint32_t end) const {
54327 Lifetime *segment = lifetime ? lifetime : saved;
54328 while (segment && segment->start <= end) {
54329 if (segment->start >= start && segment->write)
54330 return segment->start;
54331 segment = segment->next;
54333 return (4294967295U);
54335 uint32_t firstWrite(LoopAnalysis *loop) const {
54336 return firstWrite(loop->head, loop->backedge);
54340 bool nonDecreasing(JSScript *script, LoopAnalysis *loop) const {
54341 Lifetime *segment = lifetime ? lifetime : saved;
54342 while (segment && segment->start <= loop->backedge) {
54343 if (segment->start >= loop->head && segment->write) {
54344 switch (JSOp(script->code[segment->start])) {
54345 case JSOP_INCLOCAL:
54346 case JSOP_LOCALINC:
54354 segment = segment->next;
54363 uint32_t onlyWrite(LoopAnalysis *loop) const {
54364 uint32_t offset = (4294967295U);
54365 Lifetime *segment = lifetime ? lifetime : saved;
54366 while (segment && segment->start <= loop->backedge) {
54367 if (segment->start >= loop->head && segment->write) {
54368 if (offset != (4294967295U))
54369 return (4294967295U);
54370 offset = segment->start;
54372 segment = segment->next;
54392 friend class ScriptAnalysis;
54402 Kind kind() const {
54406 return (Kind) (u.pushed.kind & 0x3);
54409 bool operator==(const SSAValue &o) const {
54410 return !memcmp(this, &o, sizeof(SSAValue));
54415 uint32_t pushedOffset() const {
54417 return u.pushed.offset;
54420 uint32_t pushedIndex() const {
54422 return u.pushed.index;
54427 bool varInitial() const {
54429 return u.var.initial;
54432 uint32_t varSlot() const {
54437 uint32_t varOffset() const {
54439 return u.var.offset;
54444 uint32_t phiSlot() const;
54445 uint32_t phiLength() const;
54446 const SSAValue &phiValue(uint32_t i) const;
54447 types::TypeSet *phiTypes() const;
54450 uint32_t phiOffset() const {
54452 return u.phi.offset;
54455 SSAPhiNode *phiNode() const {
54471 void initPushed(uint32_t offset, uint32_t index) {
54473 u.pushed.kind = PUSHED;
54474 u.pushed.offset = offset;
54475 u.pushed.index = index;
54478 static SSAValue PushedValue(uint32_t offset, uint32_t index) {
54480 v.initPushed(offset, index);
54484 void initInitial(uint32_t slot) {
54487 u.var.initial = true;
54491 void initWritten(uint32_t slot, uint32_t offset) {
54494 u.var.initial = false;
54496 u.var.offset = offset;
54499 static SSAValue WrittenVar(uint32_t slot, uint32_t offset) {
54501 v.initWritten(slot, offset);
54505 void initPhi(uint32_t offset, SSAPhiNode *node) {
54508 u.phi.offset = offset;
54512 static SSAValue PhiValue(uint32_t offset, SSAPhiNode *node) {
54514 v.initPhi(offset, node);
54522 uint32_t offset : 30;
54528 uint32_t slot : 29;
54533 uint32_t offset : 30;
54547 types::TypeSet types;
54552 SSAPhiNode() { PodZero(this); }
54556 SSAValue::phiSlot() const
54558 return u.phi.node->slot;
54562 SSAValue::phiLength() const
54565 return u.phi.node->length;
54568 inline const SSAValue &
54569 SSAValue::phiValue(uint32_t i) const
54572 return u.phi.node->options[i];
54575 inline types::TypeSet *
54576 SSAValue::phiTypes() const
54579 return &u.phi.node->types;
54586 uint32_t offset : 31;
54594 SSAUseChain() { PodZero(this); }
54602 SlotValue(uint32_t slot, const SSAValue &value) : slot(slot), value(value) {}
54605 struct NeedsArgsObjState;
54608 class ScriptAnalysis
54610 friend class Bytecode;
54614 Bytecode **codeArray;
54621 bool *escapedSlots;
54626 bool ranLifetimes_;
54627 bool ranInference_;
54628 # 842 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsanalyze.h"
54629 bool usesReturnValue_:1;
54630 bool usesScopeChain_:1;
54631 bool usesThisValue_:1;
54632 bool hasFunctionCalls_:1;
54633 bool modifiesArguments_:1;
54634 bool extendsScope_:1;
54635 bool addsScopeObjects_:1;
54636 bool localsAliasStack_:1;
54637 bool isInlineable:1;
54638 bool isJaegerCompileable:1;
54639 bool canTrackVars:1;
54641 uint32_t numReturnSites_;
54645 LifetimeVariable *lifetimes;
54649 ScriptAnalysis(JSScript *script) {
54651 this->script = script;
54657 bool ranBytecode() { return ranBytecode_; }
54658 bool ranSSA() { return ranSSA_; }
54659 bool ranLifetimes() { return ranLifetimes_; }
54660 bool ranInference() { return ranInference_; }
54662 void analyzeBytecode(JSContext *cx);
54663 void analyzeSSA(JSContext *cx);
54664 void analyzeLifetimes(JSContext *cx);
54665 void analyzeTypes(JSContext *cx);
54668 void analyzeTypesNew(JSContext *cx);
54670 bool OOM() { return outOfMemory; }
54671 bool failed() { return hadFailure; }
54672 bool inlineable(uint32_t argc) { return isInlineable && argc == script->function()->nargs; }
54673 bool jaegerCompileable() { return isJaegerCompileable; }
54676 bool usesReturnValue() const { return usesReturnValue_; }
54679 bool usesScopeChain() const { return usesScopeChain_; }
54681 bool usesThisValue() const { return usesThisValue_; }
54682 bool hasFunctionCalls() const { return hasFunctionCalls_; }
54683 uint32_t numReturnSites() const { return numReturnSites_; }
54689 bool modifiesArguments() { return modifiesArguments_; }
54695 bool extendsScope() { return extendsScope_; }
54698 bool addsScopeObjects() { return addsScopeObjects_; }
54704 bool localsAliasStack() { return localsAliasStack_; }
54708 Bytecode& getCode(uint32_t offset) {
54711 return *codeArray[offset];
54713 Bytecode& getCode(const jsbytecode *pc) { return getCode(pc - script->code); }
54715 Bytecode* maybeCode(uint32_t offset) {
54717 return codeArray[offset];
54719 Bytecode* maybeCode(const jsbytecode *pc) { return maybeCode(pc - script->code); }
54721 bool jumpTarget(uint32_t offset) {
54723 return codeArray[offset] && codeArray[offset]->jumpTarget;
54725 bool jumpTarget(const jsbytecode *pc) { return jumpTarget(pc - script->code); }
54727 bool popGuaranteed(jsbytecode *pc) {
54728 jsbytecode *next = pc + GetBytecodeLength(pc);
54729 return JSOp(*next) == JSOP_POP && !jumpTarget(next);
54732 bool incrementInitialValueObserved(jsbytecode *pc) {
54733 const JSCodeSpec *cs = &js_CodeSpec[*pc];
54734 return (cs->format & (1U<<12)) && !popGuaranteed(pc);
54737 types::TypeSet *bytecodeTypes(const jsbytecode *pc) {
54739 return getCode(pc).observedTypes;
54742 const SSAValue &poppedValue(uint32_t offset, uint32_t which) {
54746 return getCode(offset).poppedValues[which];
54748 const SSAValue &poppedValue(const jsbytecode *pc, uint32_t which) {
54749 return poppedValue(pc - script->code, which);
54752 const SlotValue *newValues(uint32_t offset) {
54754 return getCode(offset).newValues;
54756 const SlotValue *newValues(const jsbytecode *pc) { return newValues(pc - script->code); }
54758 types::TypeSet *pushedTypes(uint32_t offset, uint32_t which = 0) {
54762 types::TypeSet *array = getCode(offset).pushedTypes;
54764 return array + which;
54766 types::TypeSet *pushedTypes(const jsbytecode *pc, uint32_t which) {
54767 return pushedTypes(pc - script->code, which);
54770 bool hasPushedTypes(const jsbytecode *pc) { return getCode(pc).pushedTypes != __null; }
54772 types::TypeBarrier *typeBarriers(JSContext *cx, uint32_t offset) {
54773 if (getCode(offset).typeBarriers)
54774 pruneTypeBarriers(cx, offset);
54775 return getCode(offset).typeBarriers;
54777 types::TypeBarrier *typeBarriers(JSContext *cx, const jsbytecode *pc) {
54778 return typeBarriers(cx, pc - script->code);
54780 void addTypeBarrier(JSContext *cx, const jsbytecode *pc,
54781 types::TypeSet *target, types::Type type);
54782 void addSingletonTypeBarrier(JSContext *cx, const jsbytecode *pc,
54783 types::TypeSet *target, JSObject *singleton, jsid singletonId);
54786 void pruneTypeBarriers(JSContext *cx, uint32_t offset);
54793 void breakTypeBarriers(JSContext *cx, uint32_t offset, bool all);
54796 void breakTypeBarriersSSA(JSContext *cx, const SSAValue &v);
54798 inline void addPushedType(JSContext *cx, uint32_t offset, uint32_t which, types::Type type);
54800 types::TypeSet *getValueTypes(const SSAValue &v) {
54801 switch (v.kind()) {
54802 case SSAValue::PUSHED:
54803 return pushedTypes(v.pushedOffset(), v.pushedIndex());
54804 case SSAValue::VAR:
54806 if (v.varInitial()) {
54807 return types::TypeScript::SlotTypes(script, v.varSlot());
54815 return pushedTypes(v.varOffset(), 0);
54817 case SSAValue::PHI:
54818 return &v.phiNode()->types;
54821 __builtin_unreachable();
54826 types::TypeSet *poppedTypes(uint32_t offset, uint32_t which) {
54827 return getValueTypes(poppedValue(offset, which));
54829 types::TypeSet *poppedTypes(const jsbytecode *pc, uint32_t which) {
54830 return getValueTypes(poppedValue(pc, which));
54834 bool integerOperation(JSContext *cx, jsbytecode *pc);
54836 bool trackUseChain(const SSAValue &v) {
54838 return v.kind() != SSAValue::EMPTY &&
54839 (v.kind() != SSAValue::VAR || !v.varInitial());
54846 SSAUseChain *& useChain(const SSAValue &v) {
54848 if (v.kind() == SSAValue::PUSHED)
54849 return getCode(v.pushedOffset()).pushedUses[v.pushedIndex()];
54850 if (v.kind() == SSAValue::VAR)
54851 return getCode(v.varOffset()).pushedUses[GetDefCount(script, v.varOffset())];
54852 return v.phiNode()->uses;
54855 mjit::RegisterAllocation *&getAllocation(uint32_t offset) {
54857 return getCode(offset).allocation;
54859 mjit::RegisterAllocation *&getAllocation(const jsbytecode *pc) {
54860 return getAllocation(pc - script->code);
54863 LoopAnalysis *getLoop(uint32_t offset) {
54865 return getCode(offset).loop;
54867 LoopAnalysis *getLoop(const jsbytecode *pc) { return getLoop(pc - script->code); }
54870 jsbytecode *getCallPC(jsbytecode *pc)
54872 SSAUseChain *uses = useChain(SSAValue::PushedValue(pc - script->code, 0));
54875 return script->code + uses->offset;
54877 # 1100 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsanalyze.h"
54878 bool slotEscapes(uint32_t slot) {
54880 if (slot >= numSlots)
54882 return escapedSlots[slot];
54891 bool trackSlot(uint32_t slot) { return !slotEscapes(slot) && canTrackVars && slot < 1000; }
54893 const LifetimeVariable & liveness(uint32_t slot) {
54896 return lifetimes[slot];
54903 struct NameAccess {
54905 types::TypeScriptNesting *nesting;
54912 const Value **basePointer() const {
54913 return arg ? &nesting->argArray : &nesting->varArray;
54916 NameAccess resolveNameAccess(JSContext *cx, jsid id, bool addDependency = false);
54918 void printSSA(JSContext *cx);
54919 void printTypes(JSContext *cx);
54921 void clearAllocations();
54924 void setOOM(JSContext *cx) {
54926 js_ReportOutOfMemory(cx);
54927 outOfMemory = true;
54932 inline bool addJump(JSContext *cx, unsigned offset,
54933 unsigned *currentOffset, unsigned *forwardJump, unsigned *forwardLoop,
54934 unsigned stackDepth);
54937 inline void addVariable(JSContext *cx, LifetimeVariable &var, unsigned offset,
54938 LifetimeVariable **&saved, unsigned &savedCount);
54939 inline void killVariable(JSContext *cx, LifetimeVariable &var, unsigned offset,
54940 LifetimeVariable **&saved, unsigned &savedCount);
54941 inline void extendVariable(JSContext *cx, LifetimeVariable &var, unsigned start, unsigned end);
54942 inline void ensureVariable(LifetimeVariable &var, unsigned until);
54945 struct SSAValueInfo
54954 int32_t branchSize;
54958 bool makePhi(JSContext *cx, uint32_t slot, uint32_t offset, SSAValue *pv);
54959 void insertPhi(JSContext *cx, SSAValue &phi, const SSAValue &v);
54960 void mergeValue(JSContext *cx, uint32_t offset, const SSAValue &v, SlotValue *pv);
54961 void checkPendingValue(JSContext *cx, const SSAValue &v, uint32_t slot,
54962 Vector<SlotValue> *pending);
54963 void checkBranchTarget(JSContext *cx, uint32_t targetOffset, Vector<uint32_t> &branchTargets,
54964 SSAValueInfo *values, uint32_t stackDepth);
54965 void checkExceptionTarget(JSContext *cx, uint32_t catchOffset,
54966 Vector<uint32_t> &exceptionTargets);
54967 void mergeBranchTarget(JSContext *cx, SSAValueInfo &value, uint32_t slot,
54968 const Vector<uint32_t> &branchTargets, uint32_t currentOffset);
54969 void mergeExceptionTarget(JSContext *cx, const SSAValue &value, uint32_t slot,
54970 const Vector<uint32_t> &exceptionTargets);
54971 void mergeAllExceptionTargets(JSContext *cx, SSAValueInfo *values,
54972 const Vector<uint32_t> &exceptionTargets);
54973 void freezeNewValues(JSContext *cx, uint32_t offset);
54975 struct TypeInferenceState {
54976 Vector<SSAPhiNode *> phiNodes;
54979 types::TypeSet *forTypes;
54980 TypeInferenceState(JSContext *cx)
54981 : phiNodes(cx), hasGetSet(false), hasHole(false), forTypes(__null)
54986 bool analyzeTypesBytecode(JSContext *cx, unsigned offset, TypeInferenceState &state);
54987 bool needsArgsObj(NeedsArgsObjState &state, const SSAValue &v);
54988 bool needsArgsObj(NeedsArgsObjState &state, SSAUseChain *use);
54989 bool needsArgsObj(JSContext *cx);
54995 void assertMatchingDebugMode() { }
55000 class AutoEnterAnalysis
55002 JSCompartment *compartment;
55003 bool oldActiveAnalysis;
55006 void construct(JSCompartment *compartment)
55008 this->compartment = compartment;
55009 oldActiveAnalysis = compartment->activeAnalysis;
55010 compartment->activeAnalysis = true;
55015 AutoEnterAnalysis(JSContext *cx) { construct(cx->compartment); }
55016 AutoEnterAnalysis(JSCompartment *compartment) { construct(compartment); }
55022 compartment->activeAnalysis = oldActiveAnalysis;
55026 ~AutoEnterAnalysis()
55033 struct CrossSSAValue
55037 CrossSSAValue(unsigned frame, const SSAValue &v) : frame(frame), v(v) {}
55045 class CrossScriptSSA
55049 static const uint32_t OUTER_FRAME = (4294967295U);
55050 static const unsigned INVALID_FRAME = uint32_t(-2);
55057 jsbytecode *parentpc;
55059 Frame(uint32_t index, JSScript *script, uint32_t depth, uint32_t parent, jsbytecode *parentpc)
55060 : index(index), script(script), depth(depth), parent(parent), parentpc(parentpc)
55064 const Frame &getFrame(uint32_t index) {
55065 if (index == OUTER_FRAME)
55067 return inlineFrames[index];
55070 unsigned numFrames() { return 1 + inlineFrames.length(); }
55071 const Frame &iterFrame(unsigned i) {
55074 return inlineFrames[i - 1];
55077 JSScript *outerScript() { return outerFrame.script; }
55080 size_t frameLength(uint32_t index) {
55081 if (index == OUTER_FRAME)
55083 size_t res = outerFrame.script->length;
55084 for (unsigned i = 0; i < index; i++)
55085 res += inlineFrames[i].script->length;
55089 types::TypeSet *getValueTypes(const CrossSSAValue &cv) {
55090 return getFrame(cv.frame).script->analysis()->getValueTypes(cv.v);
55093 bool addInlineFrame(JSScript *script, uint32_t depth, uint32_t parent, jsbytecode *parentpc)
55095 uint32_t index = inlineFrames.length();
55096 return inlineFrames.append(Frame(index, script, depth, parent, parentpc));
55099 CrossScriptSSA(JSContext *cx, JSScript *outer)
55100 : cx(cx), outerFrame(OUTER_FRAME, outer, 0, INVALID_FRAME, __null), inlineFrames(cx)
55103 CrossSSAValue foldValue(const CrossSSAValue &cv);
55109 Vector<Frame> inlineFrames;
55122 template <> struct IsPodType<js::analyze::LifetimeVariable> { static const bool result = true; };
55123 template <> struct IsPodType<js::analyze::LoopAnalysis> { static const bool result = true; };
55124 template <> struct IsPodType<js::analyze::SlotValue> { static const bool result = true; };
55125 template <> struct IsPodType<js::analyze::SSAValue> { static const bool result = true; };
55126 template <> struct IsPodType<js::analyze::SSAUseChain> { static const bool result = true; };
55130 # 11 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h" 2
55133 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprf.h" 1
55141 # 29 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprf.h"
55142 # 1 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stdarg.h" 1 3 4
55143 # 31 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stdarg.h" 3 4
55145 #define _ANSI_STDARG_H_
55147 #undef __need___va_list
55148 # 47 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stdarg.h" 3 4
55149 #define va_start(v,l) __builtin_va_start(v,l)
55150 #define va_end(v) __builtin_va_end(v)
55151 #define va_arg(v,l) __builtin_va_arg(v,l)
55153 #define va_copy(d,s) __builtin_va_copy(d,s)
55155 #define __va_copy(d,s) __builtin_va_copy(d,s)
55156 # 108 "/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.5.4/include/stdarg.h" 3 4
55166 #define _VA_LIST_T_H
55169 #define __va_list__
55170 # 30 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprf.h" 2
55179 extern __attribute__((visibility("default"))) uint32_t JS_snprintf(char *out, uint32_t outlen, const char *fmt, ...);
55186 extern __attribute__((visibility("default"))) char* JS_smprintf(const char *fmt, ...);
55191 extern __attribute__((visibility("default"))) void JS_smprintf_free(char *mem);
55192 # 59 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprf.h"
55193 extern __attribute__((visibility("default"))) char* JS_sprintf_append(char *last, const char *fmt, ...);
55194 # 68 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprf.h"
55195 typedef int (*JSStuffFunc)(void *arg, const char *s, uint32_t slen);
55197 extern __attribute__((visibility("default"))) uint32_t JS_sxprintf(JSStuffFunc f, void *arg, const char *fmt, ...);
55202 extern __attribute__((visibility("default"))) uint32_t JS_vsnprintf(char *out, uint32_t outlen, const char *fmt, va_list ap);
55203 extern __attribute__((visibility("default"))) char* JS_vsmprintf(const char *fmt, va_list ap);
55204 extern __attribute__((visibility("default"))) char* JS_vsprintf_append(char *last, const char *fmt, va_list ap);
55205 extern __attribute__((visibility("default"))) uint32_t JS_vsxprintf(JSStuffFunc f, void *arg, const char *fmt, va_list ap);
55208 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h" 2
55213 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack-inl.h" 1
55214 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack-inl.h"
55215 #define Stack_inl_h__
55220 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/methodjit/MethodJIT.h" 1
55221 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack-inl.h" 2
55222 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack.h" 1
55223 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack-inl.h" 2
55225 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscriptinlines.h" 1
55226 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscriptinlines.h"
55227 #define jsscriptinlines_h___
55229 # 1 "./jsautooplen.h" 1
55235 #define JSOP_NOP_LENGTH 1
55236 #define JSOP_UNDEFINED_LENGTH 1
55237 #define JSOP_POPV_LENGTH 1
55238 #define JSOP_ENTERWITH_LENGTH 1
55239 #define JSOP_LEAVEWITH_LENGTH 1
55240 #define JSOP_RETURN_LENGTH 1
55241 #define JSOP_GOTO_LENGTH 5
55242 #define JSOP_IFEQ_LENGTH 5
55243 #define JSOP_IFNE_LENGTH 5
55244 #define JSOP_ARGUMENTS_LENGTH 1
55245 #define JSOP_SWAP_LENGTH 1
55246 #define JSOP_POPN_LENGTH 3
55247 #define JSOP_DUP_LENGTH 1
55248 #define JSOP_DUP2_LENGTH 1
55249 #define JSOP_SETCONST_LENGTH 5
55250 #define JSOP_BITOR_LENGTH 1
55251 #define JSOP_BITXOR_LENGTH 1
55252 #define JSOP_BITAND_LENGTH 1
55253 #define JSOP_EQ_LENGTH 1
55254 #define JSOP_NE_LENGTH 1
55255 #define JSOP_LT_LENGTH 1
55256 #define JSOP_LE_LENGTH 1
55257 #define JSOP_GT_LENGTH 1
55258 #define JSOP_GE_LENGTH 1
55259 #define JSOP_LSH_LENGTH 1
55260 #define JSOP_RSH_LENGTH 1
55261 #define JSOP_URSH_LENGTH 1
55262 #define JSOP_ADD_LENGTH 1
55263 #define JSOP_SUB_LENGTH 1
55264 #define JSOP_MUL_LENGTH 1
55265 #define JSOP_DIV_LENGTH 1
55266 #define JSOP_MOD_LENGTH 1
55267 #define JSOP_NOT_LENGTH 1
55268 #define JSOP_BITNOT_LENGTH 1
55269 #define JSOP_NEG_LENGTH 1
55270 #define JSOP_POS_LENGTH 1
55271 #define JSOP_DELNAME_LENGTH 5
55272 #define JSOP_DELPROP_LENGTH 5
55273 #define JSOP_DELELEM_LENGTH 1
55274 #define JSOP_TYPEOF_LENGTH 1
55275 #define JSOP_VOID_LENGTH 1
55276 #define JSOP_INCNAME_LENGTH 6
55277 #define JSOP_INCPROP_LENGTH 6
55278 #define JSOP_INCELEM_LENGTH 2
55279 #define JSOP_DECNAME_LENGTH 6
55280 #define JSOP_DECPROP_LENGTH 6
55281 #define JSOP_DECELEM_LENGTH 2
55282 #define JSOP_NAMEINC_LENGTH 6
55283 #define JSOP_PROPINC_LENGTH 6
55284 #define JSOP_ELEMINC_LENGTH 2
55285 #define JSOP_NAMEDEC_LENGTH 6
55286 #define JSOP_PROPDEC_LENGTH 6
55287 #define JSOP_ELEMDEC_LENGTH 2
55288 #define JSOP_GETPROP_LENGTH 5
55289 #define JSOP_SETPROP_LENGTH 5
55290 #define JSOP_GETELEM_LENGTH 1
55291 #define JSOP_SETELEM_LENGTH 1
55292 #define JSOP_CALLNAME_LENGTH 5
55293 #define JSOP_CALL_LENGTH 3
55294 #define JSOP_NAME_LENGTH 5
55295 #define JSOP_DOUBLE_LENGTH 5
55296 #define JSOP_STRING_LENGTH 5
55297 #define JSOP_ZERO_LENGTH 1
55298 #define JSOP_ONE_LENGTH 1
55299 #define JSOP_NULL_LENGTH 1
55300 #define JSOP_THIS_LENGTH 1
55301 #define JSOP_FALSE_LENGTH 1
55302 #define JSOP_TRUE_LENGTH 1
55303 #define JSOP_OR_LENGTH 5
55304 #define JSOP_AND_LENGTH 5
55305 #define JSOP_TABLESWITCH_LENGTH -1
55306 #define JSOP_LOOKUPSWITCH_LENGTH -1
55307 #define JSOP_STRICTEQ_LENGTH 1
55308 #define JSOP_STRICTNE_LENGTH 1
55309 #define JSOP_SETCALL_LENGTH 1
55310 #define JSOP_ITER_LENGTH 2
55311 #define JSOP_MOREITER_LENGTH 1
55312 #define JSOP_ITERNEXT_LENGTH 2
55313 #define JSOP_ENDITER_LENGTH 1
55314 #define JSOP_FUNAPPLY_LENGTH 3
55315 #define JSOP_OBJECT_LENGTH 5
55316 #define JSOP_POP_LENGTH 1
55317 #define JSOP_NEW_LENGTH 3
55318 #define JSOP_UNUSED0_LENGTH 1
55319 #define JSOP_GETARG_LENGTH 3
55320 #define JSOP_SETARG_LENGTH 3
55321 #define JSOP_GETLOCAL_LENGTH 3
55322 #define JSOP_SETLOCAL_LENGTH 3
55323 #define JSOP_UINT16_LENGTH 3
55324 #define JSOP_NEWINIT_LENGTH 5
55325 #define JSOP_NEWARRAY_LENGTH 4
55326 #define JSOP_NEWOBJECT_LENGTH 5
55327 #define JSOP_ENDINIT_LENGTH 1
55328 #define JSOP_INITPROP_LENGTH 5
55329 #define JSOP_INITELEM_LENGTH 1
55330 #define JSOP_UNUSED14_LENGTH 1
55331 #define JSOP_UNUSED15_LENGTH 1
55332 #define JSOP_INCARG_LENGTH 3
55333 #define JSOP_DECARG_LENGTH 3
55334 #define JSOP_ARGINC_LENGTH 3
55335 #define JSOP_ARGDEC_LENGTH 3
55336 #define JSOP_INCLOCAL_LENGTH 3
55337 #define JSOP_DECLOCAL_LENGTH 3
55338 #define JSOP_LOCALINC_LENGTH 3
55339 #define JSOP_LOCALDEC_LENGTH 3
55340 #define JSOP_LEAVEFORLETIN_LENGTH 1
55341 #define JSOP_LABEL_LENGTH 5
55342 #define JSOP_UNUSED3_LENGTH 1
55343 #define JSOP_FUNCALL_LENGTH 3
55344 #define JSOP_LOOPHEAD_LENGTH 1
55345 #define JSOP_BINDNAME_LENGTH 5
55346 #define JSOP_SETNAME_LENGTH 5
55347 #define JSOP_THROW_LENGTH 1
55348 #define JSOP_IN_LENGTH 1
55349 #define JSOP_INSTANCEOF_LENGTH 1
55350 #define JSOP_DEBUGGER_LENGTH 1
55351 #define JSOP_GOSUB_LENGTH 5
55352 #define JSOP_RETSUB_LENGTH 1
55353 #define JSOP_EXCEPTION_LENGTH 1
55354 #define JSOP_LINENO_LENGTH 3
55355 #define JSOP_CONDSWITCH_LENGTH 1
55356 #define JSOP_CASE_LENGTH 5
55357 #define JSOP_DEFAULT_LENGTH 5
55358 #define JSOP_EVAL_LENGTH 3
55359 #define JSOP_ENUMELEM_LENGTH 1
55360 #define JSOP_GETTER_LENGTH 1
55361 #define JSOP_SETTER_LENGTH 1
55362 #define JSOP_DEFFUN_LENGTH 5
55363 #define JSOP_DEFCONST_LENGTH 5
55364 #define JSOP_DEFVAR_LENGTH 5
55365 #define JSOP_LAMBDA_LENGTH 5
55366 #define JSOP_CALLEE_LENGTH 1
55367 #define JSOP_UNUSED31_LENGTH 1
55368 #define JSOP_PICK_LENGTH 2
55369 #define JSOP_TRY_LENGTH 1
55370 #define JSOP_FINALLY_LENGTH 1
55371 #define JSOP_GETALIASEDVAR_LENGTH 9
55372 #define JSOP_CALLALIASEDVAR_LENGTH 9
55373 #define JSOP_SETALIASEDVAR_LENGTH 9
55374 #define JSOP_INCALIASEDVAR_LENGTH 10
55375 #define JSOP_DECALIASEDVAR_LENGTH 10
55376 #define JSOP_ALIASEDVARINC_LENGTH 10
55377 #define JSOP_ALIASEDVARDEC_LENGTH 10
55378 #define JSOP_UNUSED8_LENGTH 1
55379 #define JSOP_UNUSED9_LENGTH 1
55380 #define JSOP_UNUSED10_LENGTH 1
55381 #define JSOP_UNUSED11_LENGTH 1
55382 #define JSOP_UNUSED12_LENGTH 1
55383 #define JSOP_UNUSED13_LENGTH 1
55384 #define JSOP_BACKPATCH_LENGTH 5
55385 #define JSOP_BACKPATCH_POP_LENGTH 5
55386 #define JSOP_THROWING_LENGTH 1
55387 #define JSOP_SETRVAL_LENGTH 1
55388 #define JSOP_RETRVAL_LENGTH 1
55389 #define JSOP_GETGNAME_LENGTH 5
55390 #define JSOP_SETGNAME_LENGTH 5
55391 #define JSOP_INCGNAME_LENGTH 6
55392 #define JSOP_DECGNAME_LENGTH 6
55393 #define JSOP_GNAMEINC_LENGTH 6
55394 #define JSOP_GNAMEDEC_LENGTH 6
55395 #define JSOP_REGEXP_LENGTH 5
55396 #define JSOP_DEFXMLNS_LENGTH 1
55397 #define JSOP_ANYNAME_LENGTH 1
55398 #define JSOP_QNAMEPART_LENGTH 5
55399 #define JSOP_QNAMECONST_LENGTH 5
55400 #define JSOP_QNAME_LENGTH 1
55401 #define JSOP_TOATTRNAME_LENGTH 1
55402 #define JSOP_TOATTRVAL_LENGTH 1
55403 #define JSOP_ADDATTRNAME_LENGTH 1
55404 #define JSOP_ADDATTRVAL_LENGTH 1
55405 #define JSOP_BINDXMLNAME_LENGTH 1
55406 #define JSOP_SETXMLNAME_LENGTH 1
55407 #define JSOP_XMLNAME_LENGTH 1
55408 #define JSOP_DESCENDANTS_LENGTH 1
55409 #define JSOP_FILTER_LENGTH 5
55410 #define JSOP_ENDFILTER_LENGTH 5
55411 #define JSOP_TOXML_LENGTH 1
55412 #define JSOP_TOXMLLIST_LENGTH 1
55413 #define JSOP_XMLTAGEXPR_LENGTH 1
55414 #define JSOP_XMLELTEXPR_LENGTH 1
55415 #define JSOP_XMLCDATA_LENGTH 5
55416 #define JSOP_XMLCOMMENT_LENGTH 5
55417 #define JSOP_XMLPI_LENGTH 5
55418 #define JSOP_DELDESC_LENGTH 1
55419 #define JSOP_CALLPROP_LENGTH 5
55420 #define JSOP_ENTERLET0_LENGTH 5
55421 #define JSOP_ENTERLET1_LENGTH 5
55422 #define JSOP_UINT24_LENGTH 4
55423 #define JSOP_UNUSED18_LENGTH 1
55424 #define JSOP_UNUSED19_LENGTH 1
55425 #define JSOP_UNUSED20_LENGTH 1
55426 #define JSOP_STARTXML_LENGTH 1
55427 #define JSOP_STARTXMLEXPR_LENGTH 1
55428 #define JSOP_CALLELEM_LENGTH 1
55429 #define JSOP_STOP_LENGTH 1
55430 #define JSOP_GETXPROP_LENGTH 5
55431 #define JSOP_CALLXMLNAME_LENGTH 1
55432 #define JSOP_TYPEOFEXPR_LENGTH 1
55433 #define JSOP_ENTERBLOCK_LENGTH 5
55434 #define JSOP_LEAVEBLOCK_LENGTH 3
55435 #define JSOP_UNUSED1_LENGTH 1
55436 #define JSOP_UNUSED2_LENGTH 1
55437 #define JSOP_GENERATOR_LENGTH 1
55438 #define JSOP_YIELD_LENGTH 1
55439 #define JSOP_ARRAYPUSH_LENGTH 3
55440 #define JSOP_GETFUNNS_LENGTH 1
55441 #define JSOP_ENUMCONSTELEM_LENGTH 1
55442 #define JSOP_LEAVEBLOCKEXPR_LENGTH 3
55443 #define JSOP_UNUSED21_LENGTH 1
55444 #define JSOP_UNUSED22_LENGTH 1
55445 #define JSOP_UNUSED23_LENGTH 1
55446 #define JSOP_CALLGNAME_LENGTH 5
55447 #define JSOP_CALLLOCAL_LENGTH 3
55448 #define JSOP_CALLARG_LENGTH 3
55449 #define JSOP_BINDGNAME_LENGTH 5
55450 #define JSOP_INT8_LENGTH 2
55451 #define JSOP_INT32_LENGTH 5
55452 #define JSOP_LENGTH_LENGTH 5
55453 #define JSOP_HOLE_LENGTH 1
55454 #define JSOP_UNUSED17_LENGTH 1
55455 #define JSOP_UNUSED24_LENGTH 1
55456 #define JSOP_UNUSED25_LENGTH 1
55457 #define JSOP_UNUSED29_LENGTH 1
55458 #define JSOP_UNUSED30_LENGTH 1
55459 #define JSOP_REST_LENGTH 1
55460 #define JSOP_TOID_LENGTH 1
55461 #define JSOP_IMPLICITTHIS_LENGTH 5
55462 #define JSOP_LOOPENTRY_LENGTH 1
55463 #define JSOP_ACTUALSFILLED_LENGTH 3
55464 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscriptinlines.h" 2
55465 # 22 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscriptinlines.h"
55466 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscopeinlines.h" 1
55474 #define jsscopeinlines_h___
55475 # 22 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscopeinlines.h"
55476 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject.h" 1
55477 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject.h"
55478 #define ArgumentsObject_h___
55483 # 22 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject.h"
55484 struct ArgumentsData
55496 size_t *deletedBits;
55502 HeapValue slots[1];
55504 # 95 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject.h"
55505 class ArgumentsObject : public JSObject
55507 static const uint32_t INITIAL_LENGTH_SLOT = 0;
55508 static const uint32_t DATA_SLOT = 1;
55509 static const uint32_t STACK_FRAME_SLOT = 2;
55512 static const uint32_t LENGTH_OVERRIDDEN_BIT = 0x1;
55513 static const uint32_t PACKED_BITS_COUNT = 1;
55515 void initInitialLength(uint32_t length);
55516 void initData(ArgumentsData *data);
55517 static ArgumentsObject *create(JSContext *cx, uint32_t argc, HandleObject callee);
55520 static const uint32_t RESERVED_SLOTS = 3;
55521 static const gc::AllocKind FINALIZE_KIND = gc::FINALIZE_OBJECT4;
55524 static ArgumentsObject *create(JSContext *cx, StackFrame *fp);
55532 static ArgumentsObject *createUnexpected(JSContext *cx, StackFrame *fp);
55538 inline uint32_t initialLength() const;
55541 inline bool hasOverriddenLength() const;
55542 inline void markLengthOverridden();
55543 # 142 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject.h"
55544 inline bool getElement(uint32_t i, js::Value *vp);
55545 # 153 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject.h"
55546 inline bool getElements(uint32_t start, uint32_t count, js::Value *vp);
55548 inline js::ArgumentsData *data() const;
55549 # 171 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject.h"
55550 inline bool isElementDeleted(uint32_t i) const;
55551 inline bool isAnyElementDeleted() const;
55552 inline void markElementDeleted(uint32_t i);
55554 inline const js::Value &element(uint32_t i) const;
55555 inline void setElement(uint32_t i, const js::Value &v);
55558 inline js::StackFrame *maybeStackFrame() const;
55559 inline void setStackFrame(js::StackFrame *frame);
55565 inline size_t sizeOfMisc(JSMallocSizeOfFun mallocSizeOf) const;
55568 class NormalArgumentsObject : public ArgumentsObject
55575 inline const js::Value &callee() const;
55578 inline void clearCallee();
55585 static bool optimizedGetElem(JSContext *cx, StackFrame *fp, const Value &elem, Value *vp);
55588 class StrictArgumentsObject : public ArgumentsObject
55593 js::NormalArgumentsObject &
55594 JSObject::asNormalArguments()
55597 return *static_cast<js::NormalArgumentsObject *>(this);
55600 js::StrictArgumentsObject &
55601 JSObject::asStrictArguments()
55604 return *static_cast<js::StrictArgumentsObject *>(this);
55607 js::ArgumentsObject &
55608 JSObject::asArguments()
55611 return *static_cast<js::ArgumentsObject *>(this);
55614 const js::ArgumentsObject &
55615 JSObject::asArguments() const
55618 return *static_cast<const js::ArgumentsObject *>(this);
55620 # 23 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscopeinlines.h" 2
55624 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxtinlines.h" 1
55625 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxtinlines.h"
55626 #define jscntxtinlines_h___
55631 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinterp.h" 1
55632 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxtinlines.h" 2
55637 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/frontend/ParseMaps.h" 1
55638 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/frontend/ParseMaps.h"
55639 #define ParseMaps_h__
55643 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/InlineMap.h" 1
55644 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/ds/InlineMap.h"
55645 #define InlineMap_h__
55655 template <typename T> struct ZeroIsReserved { static const bool result = false; };
55656 template <typename T> struct ZeroIsReserved<T *> { static const bool result = true; };
55658 template <typename K, typename V, size_t InlineElems>
55662 typedef HashMap<K, V, DefaultHasher<K>, TempAllocPolicy> WordMap;
55671 typedef typename WordMap::Ptr WordMapPtr;
55672 typedef typename WordMap::AddPtr WordMapAddPtr;
55673 typedef typename WordMap::Range WordMapRange;
55677 InlineElem inl[InlineElems];
55680 void checkStaticInvariants() {
55681 typedef int moz_static_assert108[(ZeroIsReserved<K>::result) ? 1 : -1];
55684 bool usingMap() const {
55685 return inlNext > InlineElems;
55688 bool switchToMap() {
55691 if (map.initialized()) {
55694 if (!map.init(count()))
55699 for (InlineElem *it = inl, *end = inl + inlNext; it != end; ++it) {
55700 if (it->key && !map.putNew(it->key, it->value))
55704 inlNext = InlineElems + 1;
55710 __attribute__((noinline))
55711 bool switchAndAdd(const K &key, const V &value) {
55712 if (!switchToMap())
55715 return map.putNew(key, value);
55719 explicit InlineMap(JSContext *cx)
55720 : inlNext(0), inlCount(0), map(cx) {
55721 checkStaticInvariants();
55726 friend class InlineMap;
55730 Entry(const K &key, const V &value) : key_(key), value_(value) {}
55733 const K &key() { return key_; }
55734 const V &value() { return value_; }
55739 friend class InlineMap;
55742 InlineElem *inlPtr;
55745 typedef Ptr ******* ConvertibleToBool;
55747 explicit Ptr(WordMapPtr p) : mapPtr(p), isInlinePtr(false) {}
55748 explicit Ptr(InlineElem *ie) : inlPtr(ie), isInlinePtr(true) {}
55749 void operator==(const Ptr &other);
55762 bool found() const {
55763 return isInlinePtr ? bool(inlPtr) : mapPtr.found();
55766 operator ConvertibleToBool() const {
55767 return ConvertibleToBool(found());
55772 return isInlinePtr ? inlPtr->key : mapPtr->key;
55777 return isInlinePtr ? inlPtr->value : mapPtr->value;
55783 friend class InlineMap;
55785 WordMapAddPtr mapAddPtr;
55786 InlineElem *inlAddPtr;
55791 AddPtr(InlineElem *ptr, bool found)
55792 : inlAddPtr(ptr), isInlinePtr(true), inlPtrFound(found)
55795 AddPtr(const WordMapAddPtr &p) : mapAddPtr(p), isInlinePtr(false) {}
55797 void operator==(const AddPtr &other);
55799 typedef AddPtr ******* ConvertibleToBool;
55804 bool found() const {
55805 return isInlinePtr ? inlPtrFound : mapAddPtr.found();
55808 operator ConvertibleToBool() const {
55809 return found() ? ConvertibleToBool(1) : ConvertibleToBool(0);
55815 return inlAddPtr->value;
55816 return mapAddPtr->value;
55821 return usingMap() ? map.count() : inlCount;
55824 bool empty() const {
55825 return usingMap() ? map.empty() : !inlCount;
55833 bool isMap() const {
55837 const WordMap &asMap() const {
55842 const InlineElem *asInline() const {
55847 const InlineElem *inlineEnd() const {
55849 return inl + inlNext;
55852 __attribute__((always_inline)) inline
55853 Ptr lookup(const K &key) {
55855 return Ptr(map.lookup(key));
55857 for (InlineElem *it = inl, *end = inl + inlNext; it != end; ++it) {
55858 if (it->key == key)
55862 return Ptr(__null);
55865 __attribute__((always_inline)) inline
55866 AddPtr lookupForAdd(const K &key) {
55868 return AddPtr(map.lookupForAdd(key));
55870 for (InlineElem *it = inl, *end = inl + inlNext; it != end; ++it) {
55871 if (it->key == key)
55872 return AddPtr(it, true);
55880 return AddPtr(inl + inlNext, false);
55883 __attribute__((always_inline)) inline
55884 bool add(AddPtr &p, const K &key, const V &value) {
55887 if (p.isInlinePtr) {
55888 InlineElem *addPtr = p.inlAddPtr;
55892 if (addPtr == inl + InlineElems)
55893 return switchAndAdd(key, value);
55897 p.inlAddPtr->key = key;
55898 p.inlAddPtr->value = value;
55904 return map.add(p.mapAddPtr, key, value);
55907 __attribute__((always_inline)) inline
55908 bool put(const K &key, const V &value) {
55909 AddPtr p = lookupForAdd(key);
55914 return add(p, key, value);
55917 void remove(Ptr p) {
55919 if (p.isInlinePtr) {
55922 p.inlPtr->key = __null;
55927 map.remove(p.mapPtr);
55930 void remove(const K &key) {
55931 if (Ptr p = lookup(key))
55937 friend class InlineMap;
55939 WordMapRange mapRange;
55944 explicit Range(WordMapRange r)
55945 : cur(__null), end(__null),
55951 Range(const InlineElem *begin, const InlineElem *end_)
55952 : cur(const_cast<InlineElem *>(begin)),
55953 end(const_cast<InlineElem *>(end_)),
55955 advancePastNulls(cur);
55959 bool checkInlineRangeInvariants() const {
55965 bool isInlineRange() const {
55970 void advancePastNulls(InlineElem *begin) {
55971 InlineElem *newCur = begin;
55972 while (newCur < end && __null == newCur->key)
55978 void bumpCurPtr() {
55980 advancePastNulls(cur + 1);
55983 void operator==(const Range &other);
55986 bool empty() const {
55987 return isInlineRange() ? cur == end : mapRange.empty();
55992 if (isInlineRange())
55993 return Entry(cur->key, cur->value);
55994 return Entry(mapRange.front().key, mapRange.front().value);
55999 if (isInlineRange())
56002 mapRange.popFront();
56006 Range all() const {
56007 return usingMap() ? Range(map.all()) : Range(inl, inl + inlNext);
56012 # 14 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/frontend/ParseMaps.h" 2
56019 # 28 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/frontend/ParseMaps.h"
56022 typedef Vector<void *, 32, SystemAllocPolicy> RecyclableMaps;
56024 RecyclableMaps all;
56025 RecyclableMaps recyclable;
56028 void checkInvariants();
56030 void recycle(void *map) {
56032 # 53 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/frontend/ParseMaps.h"
56034 recyclable.infallibleAppend(map);
56037 void *allocateFresh();
56041 typedef AtomIndexMap AtomMapT;
56043 static AtomMapT *asAtomMap(void *ptr) {
56044 return reinterpret_cast<AtomMapT *>(ptr);
56048 explicit ParseMapPool(JSContext *cx) : cx(cx) {}
56056 bool empty() const {
56057 return all.empty();
56061 template <typename T>
56066 void release(AtomIndexMap *map) {
56067 recycle((void *) map);
56070 void release(AtomDefnMap *map) {
56071 recycle((void *) map);
56074 void release(AtomDOHMap *map) {
56075 recycle((void *) map);
56083 template <class Map>
56084 struct AtomThingMapPtr
56088 void init() { clearMap(); }
56090 bool ensureMap(JSContext *cx);
56091 void releaseMap(JSContext *cx);
56093 bool hasMap() const { return map_; }
56094 Map *getMap() { return map_; }
56095 void setMap(Map *newMap) { do { } while(0); map_ = newMap; }
56096 void clearMap() { map_ = __null; }
56098 Map *operator->() { return map_; }
56099 const Map *operator->() const { return map_; }
56100 Map &operator*() const { return *map_; }
56103 struct AtomDefnMapPtr : public AtomThingMapPtr<AtomDefnMap>
56105 __attribute__((always_inline)) inline
56106 Definition *lookupDefn(JSAtom *atom) {
56107 AtomDefnMap::Ptr p = map_->lookup(atom);
56108 return p ? p.value() : __null;
56112 typedef AtomThingMapPtr<AtomIndexMap> AtomIndexMapPtr;
56118 template <typename AtomThingMapPtrT>
56119 class OwnedAtomThingMapPtr : public AtomThingMapPtrT
56124 explicit OwnedAtomThingMapPtr(JSContext *cx) : cx(cx) {
56125 AtomThingMapPtrT::init();
56128 ~OwnedAtomThingMapPtr() {
56129 AtomThingMapPtrT::releaseMap(cx);
56133 typedef OwnedAtomThingMapPtr<AtomDefnMapPtr> OwnedAtomDefnMapPtr;
56134 typedef OwnedAtomThingMapPtr<AtomIndexMapPtr> OwnedAtomIndexMapPtr;
56137 struct AtomDeclNode
56140 AtomDeclNode *next;
56142 explicit AtomDeclNode(Definition *defn)
56143 : defn(defn), next(__null)
56155 AtomDeclNode *head;
56164 explicit DefnOrHeader(Definition *defn) {
56169 explicit DefnOrHeader(AtomDeclNode *node) {
56175 bool isHeader() const {
56176 return u.bits & 0x1;
56179 Definition *defn() const {
56184 AtomDeclNode *header() const {
56186 return (AtomDeclNode *) (u.bits & ~0x1);
56196 template <> struct IsPodType<DefnOrHeader> {
56197 static const bool result = true;
56201 # 231 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/frontend/ParseMaps.h"
56205 friend class AtomDeclsIter;
56210 AtomDecls(const AtomDecls &other) ;
56211 void operator=(const AtomDecls &other) ;
56213 AtomDeclNode *allocNode(Definition *defn);
56219 AtomDeclNode *lastAsNode(DefnOrHeader *doh);
56222 explicit AtomDecls(JSContext *cx)
56223 : cx(cx), map(__null)
56235 inline Definition *lookupFirst(JSAtom *atom);
56238 inline MultiDeclRange lookupMulti(JSAtom *atom);
56241 inline bool addUnique(JSAtom *atom, Definition *defn);
56242 bool addShadow(JSAtom *atom, Definition *defn);
56243 bool addHoist(JSAtom *atom, Definition *defn);
56246 void updateFirst(JSAtom *atom, Definition *defn) {
56248 AtomDOHMap::Ptr p = map->lookup(atom);
56250 if (p.value().isHeader())
56251 p.value().header()->defn = defn;
56253 p.value() = DefnOrHeader(defn);
56257 void remove(JSAtom *atom) {
56259 AtomDOHMap::Ptr p = map->lookup(atom);
56263 DefnOrHeader &doh = p.value();
56264 if (!doh.isHeader()) {
56269 AtomDeclNode *node = doh.header();
56270 AtomDeclNode *newHead = node->next;
56272 p.value() = DefnOrHeader(newHead);
56277 AtomDOHMap::Range all() {
56292 class MultiDeclRange
56294 friend class AtomDecls;
56296 AtomDeclNode *node;
56299 explicit MultiDeclRange(Definition *defn) : node(__null), defn(defn) {}
56300 explicit MultiDeclRange(AtomDeclNode *node) : node(node), defn(node->defn) {}
56310 defn = node ? node->defn : __null;
56313 Definition *front() {
56318 bool empty() const {
56325 class AtomDeclsIter
56327 AtomDOHMap::Range r;
56328 AtomDeclNode *link;
56331 explicit AtomDeclsIter(AtomDecls *decls) : r(decls->all()), link(__null) {}
56333 Definition *next() {
56336 Definition *result = link->defn;
56345 const DefnOrHeader &doh = r.front().value();
56348 if (!doh.isHeader())
56352 AtomDeclNode *node = doh.header();
56358 typedef AtomDefnMap::Range AtomDefnRange;
56359 typedef AtomDefnMap::AddPtr AtomDefnAddPtr;
56360 typedef AtomDefnMap::Ptr AtomDefnPtr;
56361 typedef AtomIndexMap::AddPtr AtomIndexAddPtr;
56362 typedef AtomIndexMap::Ptr AtomIndexPtr;
56363 typedef AtomDOHMap::Ptr AtomDOHPtr;
56364 typedef AtomDOHMap::AddPtr AtomDOHAddPtr;
56365 typedef AtomDOHMap::Range AtomDOHRange;
56368 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxtinlines.h" 2
56376 NewObjectCache::staticAsserts()
56378 typedef int moz_static_assert109[(NewObjectCache::MAX_OBJ_SIZE == sizeof(JSObject_Slots16)) ? 1 : -1];
56379 typedef int moz_static_assert110[(gc::FINALIZE_OBJECT_LAST == gc::FINALIZE_OBJECT16_BACKGROUND) ? 1 : -1];
56383 NewObjectCache::lookup(Class *clasp, gc::Cell *key, gc::AllocKind kind, EntryIndex *pentry)
56385 uintptr_t hash = (uintptr_t(clasp) ^ uintptr_t(key)) + kind;
56386 *pentry = hash % js::ArrayLength(entries);
56388 Entry *entry = &entries[*pentry];
56391 return (entry->clasp == clasp && entry->key == key);
56395 NewObjectCache::lookupProto(Class *clasp, JSObject *proto, gc::AllocKind kind, EntryIndex *pentry)
56398 return lookup(clasp, proto, kind, pentry);
56402 NewObjectCache::lookupGlobal(Class *clasp, js::GlobalObject *global, gc::AllocKind kind, EntryIndex *pentry)
56404 return lookup(clasp, global, kind, pentry);
56408 NewObjectCache::lookupType(Class *clasp, js::types::TypeObject *type, gc::AllocKind kind, EntryIndex *pentry)
56410 return lookup(clasp, type, kind, pentry);
56414 NewObjectCache::fill(EntryIndex entry_, Class *clasp, gc::Cell *key, gc::AllocKind kind, JSObject *obj)
56417 Entry *entry = &entries[entry_];
56421 entry->clasp = clasp;
56423 entry->kind = kind;
56425 entry->nbytes = obj->sizeOfThis();
56426 js_memcpy(&entry->templateObject, obj, entry->nbytes);
56430 NewObjectCache::fillProto(EntryIndex entry, Class *clasp, JSObject *proto, gc::AllocKind kind, JSObject *obj)
56434 return fill(entry, clasp, proto, kind, obj);
56438 NewObjectCache::fillGlobal(EntryIndex entry, Class *clasp, js::GlobalObject *global, gc::AllocKind kind, JSObject *obj)
56441 return fill(entry, clasp, global, kind, obj);
56445 NewObjectCache::fillType(EntryIndex entry, Class *clasp, js::types::TypeObject *type, gc::AllocKind kind, JSObject *obj)
56448 return fill(entry, clasp, type, kind, obj);
56452 NewObjectCache::newObjectFromHit(JSContext *cx, EntryIndex entry_)
56455 Entry *entry = &entries[entry_];
56457 JSObject *obj = js_TryNewGCObject(cx, entry->kind);
56459 copyCachedToObject(obj, reinterpret_cast<JSObject *>(&entry->templateObject));
56460 Probes::createObject(cx, obj);
56465 size_t nbytes = entry->nbytes;
56466 char stackObject[sizeof(JSObject_Slots16)];
56468 js_memcpy(&stackObject, &entry->templateObject, nbytes);
56470 JSObject *baseobj = (JSObject *) stackObject;
56472 obj = js_NewGCObject(cx, entry->kind);
56474 copyCachedToObject(obj, baseobj);
56475 Probes::createObject(cx, obj);
56482 struct PreserveRegsGuard
56484 PreserveRegsGuard(JSContext *cx, FrameRegs ®s)
56485 : prevContextRegs(cx->maybeRegs()), cx(cx), regs_(regs) {
56486 cx->stack.repointRegs(®s_);
56488 ~PreserveRegsGuard() {
56490 *prevContextRegs = regs_;
56491 cx->stack.repointRegs(prevContextRegs);
56494 FrameRegs *prevContextRegs;
56501 static inline GlobalObject *
56502 GetGlobalForScopeChain(JSContext *cx)
56505 return &cx->fp()->global();
56507 JSObject *scope = JS_ObjectToInnerObject(cx, cx->globalObject);
56510 return &scope->asGlobal();
56514 GetGSNCache(JSContext *cx)
56516 return &cx->runtime->gsnCache;
56521 class AutoNamespaceArray : protected AutoGCRooter {
56523 AutoNamespaceArray(JSContext *cx)
56524 : AutoGCRooter(cx, NAMESPACES), context(cx) {
56528 ~AutoNamespaceArray() {
56529 array.finish(context->runtime->defaultFreeOp());
56532 uint32_t length() const { return array.length; }
56535 JSContext *context;
56536 friend void AutoGCRooter::trace(JSTracer *trc);
56539 JSXMLArray<JSObject> array;
56544 template <typename T>
56550 AutoPtr(const AutoPtr &other) ;
56553 explicit AutoPtr(JSContext *cx) : cx(cx), value(__null) {}
56555 cx->delete_<T>(value);
56558 void operator=(T *ptr) { value = ptr; }
56560 typedef void ***** ConvertibleToBool;
56561 operator ConvertibleToBool() const { return (ConvertibleToBool) value; }
56563 const T *operator->() const { return value; }
56564 T *operator->() { return value; }
56566 T *get() { return value; }
56568 # 325 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxtinlines.h"
56569 #define START_ASSERT_SAME_COMPARTMENT() if (cx->runtime->gcRunning) return; CompartmentChecker c(cx)
56574 template <class T1> inline void
56575 assertSameCompartment(JSContext *cx, const T1 &t1)
56583 template <class T1, class T2> inline void
56584 assertSameCompartment(JSContext *cx, const T1 &t1, const T2 &t2)
56593 template <class T1, class T2, class T3> inline void
56594 assertSameCompartment(JSContext *cx, const T1 &t1, const T2 &t2, const T3 &t3)
56604 template <class T1, class T2, class T3, class T4> inline void
56605 assertSameCompartment(JSContext *cx, const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4)
56616 template <class T1, class T2, class T3, class T4, class T5> inline void
56617 assertSameCompartment(JSContext *cx, const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4, const T5 &t5)
56619 # 383 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxtinlines.h"
56622 #undef START_ASSERT_SAME_COMPARTMENT
56625 __attribute__((always_inline)) inline bool
56626 CallJSNative(JSContext *cx, Native native, const CallArgs &args)
56631 assertSameCompartment(cx, args);
56632 bool ok = native(cx, args.length(), args.base());
56634 assertSameCompartment(cx, args.rval());
56640 extern JSBool CallOrConstructBoundFunction(JSContext *, unsigned, js::Value *);
56643 __attribute__((always_inline)) inline bool
56644 CallJSNativeConstructor(JSContext *cx, Native native, const CallArgs &args)
56651 if (!CallJSNative(cx, native, args))
56653 # 432 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jscntxtinlines.h"
56662 __attribute__((always_inline)) inline bool
56663 CallJSPropertyOp(JSContext *cx, PropertyOp op, HandleObject receiver, HandleId id, Value *vp)
56665 assertSameCompartment(cx, receiver, id, *vp);
56666 JSBool ok = op(cx, receiver, id, vp);
56668 assertSameCompartment(cx, *vp);
56672 __attribute__((always_inline)) inline bool
56673 CallJSPropertyOpSetter(JSContext *cx, StrictPropertyOp op, HandleObject obj, HandleId id,
56674 JSBool strict, Value *vp)
56676 assertSameCompartment(cx, obj, id, *vp);
56677 return op(cx, obj, id, strict, vp);
56681 CallSetter(JSContext *cx, HandleObject obj, HandleId id, StrictPropertyOp op, unsigned attrs,
56682 unsigned shortid, JSBool strict, Value *vp)
56685 return InvokeGetterOrSetter(cx, obj, CastAsObjectJsval(op), 1, vp, vp);
56688 return js_ReportGetterOnlyAssignment(cx);
56690 if (!(attrs & 0x100))
56691 return CallJSPropertyOpSetter(cx, op, obj, id, strict, vp);
56693 RootedId nid(cx, INT_TO_JSID(shortid));
56695 return CallJSPropertyOpSetter(cx, op, obj, nid, strict, vp);
56698 static inline HeapPtrAtom *
56699 FrameAtomBase(JSContext *cx, js::StackFrame *fp)
56701 return fp->script()->atoms;
56707 JSContext::findVersion() const
56709 if (hasVersionOverride)
56710 return versionOverride;
56712 if (stack.hasfp()) {
56714 js::StackFrame *f = fp();
56715 while (f && !f->isScriptFrame())
56718 return f->script()->getVersion();
56721 return defaultVersion;
56725 JSContext::canSetDefaultVersion() const
56727 return !stack.hasfp() && !hasVersionOverride;
56731 JSContext::overrideVersion(JSVersion newVersion)
56734 versionOverride = newVersion;
56735 hasVersionOverride = true;
56739 JSContext::maybeOverrideVersion(JSVersion newVersion)
56741 if (canSetDefaultVersion()) {
56742 setDefaultVersion(newVersion);
56745 overrideVersion(newVersion);
56750 JSContext::getCompileOptions() const { return js::VersionFlagsToOptions(findVersion()); }
56753 JSContext::allOptions() const { return getRunOptions() | getCompileOptions(); }
56756 JSContext::setCompileOptions(unsigned newcopts)
56759 if ((__builtin_expect((getCompileOptions() == newcopts), 1)))
56761 JSVersion version = findVersion();
56762 JSVersion newVersion = js::OptionFlagsToVersion(newcopts, version);
56763 maybeOverrideVersion(newVersion);
56767 JSContext::assertValidStackDepth(unsigned depth)
56775 inline js::LifoAlloc &
56776 JSContext::typeLifoAlloc()
56778 return compartment->typeLifoAlloc;
56782 JSContext::ensureGeneratorStackSpace()
56784 bool ok = genStack.reserve(genStack.length() + 1);
56786 js_ReportOutOfMemory(this);
56791 JSContext::setPendingException(js::Value v) {
56793 this->throwing = true;
56794 this->exception = v;
56795 js::assertSameCompartment(this, v);
56799 JSContext::ensureParseMapPool()
56803 parseMapPool_ = js::OffTheBooks::new_<js::ParseMapPool>(this);
56804 return parseMapPool_;
56807 inline js::PropertyTree&
56808 JSContext::propertyTree()
56810 return compartment->propertyTree;
56814 static inline js::StackFrame *
56815 js_GetTopStackFrame(JSContext *cx, FrameExpandKind expand)
56819 js::mjit::ExpandInlineFrames(cx->compartment);
56822 return cx->maybefp();
56824 # 27 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscopeinlines.h" 2
56826 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 1
56827 # 29 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscopeinlines.h" 2
56834 BaseShape::BaseShape(Class *clasp, JSObject *parent, uint32_t objectFlags)
56838 this->clasp = clasp;
56839 this->parent = parent;
56840 this->flags = objectFlags;
56844 BaseShape::BaseShape(Class *clasp, JSObject *parent, uint32_t objectFlags,
56845 uint8_t attrs, js::PropertyOp rawGetter, js::StrictPropertyOp rawSetter)
56849 this->clasp = clasp;
56850 this->parent = parent;
56851 this->flags = objectFlags;
56852 this->rawGetter = rawGetter;
56853 this->rawSetter = rawSetter;
56854 if ((attrs & 0x10) && rawGetter) {
56855 this->flags |= HAS_GETTER_OBJECT;
56856 JSObject::writeBarrierPost(this->getterObj, &this->getterObj);
56858 if ((attrs & 0x20) && rawSetter) {
56859 this->flags |= HAS_SETTER_OBJECT;
56860 JSObject::writeBarrierPost(this->setterObj, &this->setterObj);
56865 BaseShape::BaseShape(const StackBaseShape &base)
56868 this->clasp = base.clasp;
56869 this->parent = base.parent;
56870 this->flags = base.flags;
56871 this->rawGetter = base.rawGetter;
56872 this->rawSetter = base.rawSetter;
56873 if ((base.flags & HAS_GETTER_OBJECT) && base.rawGetter) {
56874 JSObject::writeBarrierPost(this->getterObj, &this->getterObj);
56876 if ((base.flags & HAS_SETTER_OBJECT) && base.rawSetter) {
56877 JSObject::writeBarrierPost(this->setterObj, &this->setterObj);
56882 BaseShape::operator=(const BaseShape &other)
56884 clasp = other.clasp;
56885 parent = other.parent;
56886 flags = other.flags;
56887 slotSpan_ = other.slotSpan_;
56888 if (flags & HAS_GETTER_OBJECT) {
56889 getterObj = other.getterObj;
56890 JSObject::writeBarrierPost(getterObj, &getterObj);
56892 rawGetter = other.rawGetter;
56894 if (flags & HAS_SETTER_OBJECT) {
56895 setterObj = other.setterObj;
56896 JSObject::writeBarrierPost(setterObj, &setterObj);
56898 rawSetter = other.rawSetter;
56904 BaseShape::matchesGetterSetter(PropertyOp rawGetter, StrictPropertyOp rawSetter) const
56906 return rawGetter == this->rawGetter && rawSetter == this->rawSetter;
56910 StackBaseShape::StackBaseShape(Shape *shape)
56911 : flags(shape->getObjectFlags()),
56912 clasp(shape->getObjectClass()),
56913 parent(shape->getObjectParent())
56915 updateGetterSetter(shape->attrs, shape->getter(), shape->setter());
56919 StackBaseShape::updateGetterSetter(uint8_t attrs,
56920 PropertyOp rawGetter,
56921 StrictPropertyOp rawSetter)
56923 flags &= ~(BaseShape::HAS_GETTER_OBJECT | BaseShape::HAS_SETTER_OBJECT);
56924 if ((attrs & 0x10) && rawGetter)
56925 flags |= BaseShape::HAS_GETTER_OBJECT;
56926 if ((attrs & 0x20) && rawSetter)
56927 flags |= BaseShape::HAS_SETTER_OBJECT;
56929 this->rawGetter = rawGetter;
56930 this->rawSetter = rawSetter;
56934 BaseShape::adoptUnowned(UnownedBaseShape *other)
56941 DebugOnly<uint32_t> flags = getObjectFlags();
56944 uint32_t span = slotSpan();
56945 ShapeTable *table = &this->table();
56952 assertConsistency();
56956 BaseShape::setOwned(UnownedBaseShape *unowned)
56958 flags |= OWNED_SHAPE;
56959 this->unowned_ = unowned;
56963 BaseShape::assertConsistency()
56965 # 177 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscopeinlines.h"
56969 Shape::Shape(const StackShape &other, uint32_t nfixed)
56970 : base_(other.base),
56971 propid_(other.propid),
56972 slotInfo(other.maybeSlot() | (nfixed << FIXED_SLOTS_SHIFT)),
56973 attrs(other.attrs),
56974 flags(other.flags),
56975 shortid_(other.shortid),
56982 Shape::Shape(UnownedBaseShape *base, uint32_t nfixed)
56984 propid_(((jsid)0x4)),
56985 slotInfo(SHAPE_INVALID_SLOT | (nfixed << FIXED_SLOTS_SHIFT)),
56996 StackShape::hash() const
56998 HashNumber hash = uintptr_t(base);
57001 hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ (flags & Shape::PUBLIC_FLAGS);
57002 hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ attrs;
57003 hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ shortid;
57004 hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ slot_;
57005 hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ (propid);
57010 Shape::matches(const js::Shape *other) const
57012 return propid_.get() == other->propid_.get() &&
57013 matchesParamsAfterId(other->base(), other->maybeSlot(), other->attrs,
57014 other->flags, other->shortid_);
57018 Shape::matches(const StackShape &other) const
57020 return propid_.get() == other.propid &&
57021 matchesParamsAfterId(other.base, other.slot_, other.attrs, other.flags, other.shortid);
57025 Shape::matchesParamsAfterId(BaseShape *base, uint32_t aslot,
57026 unsigned aattrs, unsigned aflags, int ashortid) const
57028 return base->unowned() == this->base()->unowned() &&
57029 maybeSlot() == aslot &&
57031 ((flags ^ aflags) & PUBLIC_FLAGS) == 0 &&
57032 shortid_ == ashortid;
57036 Shape::getUserId(JSContext *cx, jsid *idp) const
57038 const Shape *self = this;
57045 if (self->hasShortID()) {
57046 int16_t id = self->shortid();
57048 return ValueToId(cx, Int32Value(id), idp);
57049 *idp = INT_TO_JSID(id);
57057 Shape::get(JSContext* cx, HandleObject receiver, JSObject* obj, JSObject *pobj, Value* vp) const
57061 if (hasGetterValue()) {
57062 Value fval = getterValue();
57063 return InvokeGetterOrSetter(cx, receiver, fval, 0, 0, vp);
57067 if (!getUserId(cx, id.address()))
57070 return CallJSPropertyOp(cx, getterOp(), receiver, id, vp);
57074 Shape::set(JSContext* cx, HandleObject obj, bool strict, Value* vp) const
57078 if (attrs & 0x20) {
57079 Value fval = setterValue();
57080 return InvokeGetterOrSetter(cx, obj, fval, 1, vp, vp);
57084 return js_ReportGetterOnlyAssignment(cx);
57087 if (!getUserId(cx, id.address()))
57094 if (obj->isWith()) {
57095 RootedObject nobj(cx, &obj->asWith().object());
57096 return CallJSPropertyOpSetter(cx, setterOp(), nobj, id, strict, vp);
57099 return CallJSPropertyOpSetter(cx, setterOp(), obj, id, strict, vp);
57103 Shape::setParent(js::Shape *p)
57113 Shape::removeFromDictionary(JSObject *obj)
57123 parent->listp = listp;
57129 Shape::insertIntoDictionary(HeapPtrShape *dictp)
57144 parent->listp = &parent;
57145 listp = (HeapPtrShape *) dictp;
57150 Shape::initDictionaryShape(const StackShape &child, uint32_t nfixed, HeapPtrShape *dictp)
57152 new (this) Shape(child, nfixed);
57153 this->flags |= IN_DICTIONARY;
57155 this->listp = __null;
57156 insertIntoDictionary(dictp);
57160 EmptyShape::EmptyShape(UnownedBaseShape *base, uint32_t nfixed)
57161 : js::Shape(base, nfixed)
57164 if (!getObjectClass()->isNative())
57165 flags |= NON_NATIVE;
57169 Shape::writeBarrierPre(const js::Shape *shape)
57175 JSCompartment *comp = shape->compartment();
57176 if (comp->needsBarrier()) {
57177 Shape *tmp = const_cast<Shape *>(shape);
57178 MarkShapeUnbarriered(comp->barrierTracer(), &tmp, "write barrier");
57185 Shape::writeBarrierPost(const js::Shape *shape, void *addr)
57190 Shape::readBarrier(const Shape *shape)
57193 JSCompartment *comp = shape->compartment();
57194 if (comp->needsBarrier()) {
57195 Shape *tmp = const_cast<Shape *>(shape);
57196 MarkShapeUnbarriered(comp->barrierTracer(), &tmp, "read barrier");
57203 Shape::markChildren(JSTracer *trc)
57205 MarkBaseShape(trc, &base_, "base");
57206 gc::MarkId(trc, &propidRef(), "propid");
57208 MarkShape(trc, &parent, "parent");
57212 BaseShape::writeBarrierPre(BaseShape *base)
57218 JSCompartment *comp = base->compartment();
57219 if (comp->needsBarrier()) {
57220 BaseShape *tmp = base;
57221 MarkBaseShapeUnbarriered(comp->barrierTracer(), &tmp, "write barrier");
57228 BaseShape::writeBarrierPost(BaseShape *shape, void *addr)
57233 BaseShape::readBarrier(BaseShape *base)
57236 JSCompartment *comp = base->compartment();
57237 if (comp->needsBarrier()) {
57238 BaseShape *tmp = base;
57239 MarkBaseShapeUnbarriered(comp->barrierTracer(), &tmp, "read barrier");
57246 BaseShape::markChildren(JSTracer *trc)
57248 if (hasGetterObject())
57249 MarkObjectUnbarriered(trc, &getterObj, "getter");
57251 if (hasSetterObject())
57252 MarkObjectUnbarriered(trc, &setterObj, "setter");
57255 MarkBaseShape(trc, &unowned_, "base");
57258 MarkObject(trc, &parent, "parent");
57262 # 23 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscriptinlines.h" 2
57267 Bindings::Bindings(JSContext *cx)
57268 : lastBinding(__null), nargs(0), nvars(0), hasDup_(false)
57272 Bindings::transfer(JSContext *cx, Bindings *bindings)
57284 Bindings::clone(JSContext *cx, Bindings *bindings)
57293 Bindings::lastShape() const
57297 return lastBinding;
57301 Bindings::initialShape(JSContext *cx) const
57304 gc::AllocKind kind = gc::FINALIZE_OBJECT4;
57307 return EmptyShape::getInitialShape(cx, &CallClass, __null, __null, kind,
57308 BaseShape::VAROBJ);
57312 Bindings::ensureShape(JSContext *cx)
57314 if (!lastBinding) {
57315 lastBinding = initialShape(cx);
57323 Bindings::extensibleParents()
57325 return lastBinding && lastBinding->extensibleParents();
57329 CurrentScriptFileLineOriginSlow(JSContext *cx, const char **file, unsigned *linenop, JSPrincipals **origin);
57332 CurrentScriptFileLineOrigin(JSContext *cx, const char **file, unsigned *linenop, JSPrincipals **origin,
57333 LineOption opt = NOT_CALLED_FROM_JSOP_EVAL)
57335 if (opt == CALLED_FROM_JSOP_EVAL) {
57338 JSScript *script = cx->fp()->script();
57339 *file = script->filename;
57340 *linenop = ((unsigned)(((cx->regs().pc + 3)[1] << 8) | (cx->regs().pc + 3)[2]));
57341 *origin = script->originPrincipals;
57345 CurrentScriptFileLineOriginSlow(cx, file, linenop, origin);
57349 ScriptCounts::destroy(FreeOp *fop)
57351 fop->free_(pcCountsVector);
57355 MarkScriptFilename(JSRuntime *rt, const char *filename)
57363 ScriptFilenameEntry::fromFilename(filename)->marked = true;
57369 JSScript::setFunction(JSFunction *fun)
57374 inline JSFunction *
57375 JSScript::getFunction(size_t index)
57377 JSObject *funobj = getObject(index);
57379 return funobj->toFunction();
57382 inline JSFunction *
57383 JSScript::getCallerFunction()
57386 return getFunction(0);
57390 JSScript::getRegExp(size_t index)
57392 js::ObjectArray *arr = regexps();
57394 JSObject *obj = arr->vector[index];
57400 JSScript::isEmpty() const
57405 jsbytecode *pc = code;
57406 if (noScriptRval && JSOp(*pc) == JSOP_FALSE)
57408 return JSOp(*pc) == JSOP_STOP;
57412 JSScript::hasGlobal() const
57420 js::GlobalObject *obj = types->global;
57421 return obj && !obj->isCleared();
57424 inline js::GlobalObject *
57425 JSScript::global() const
57428 return types->global;
57432 JSScript::hasClearedGlobal() const
57435 js::GlobalObject *obj = types->global;
57436 return obj && obj->isCleared();
57439 inline js::types::TypeScriptNesting *
57440 JSScript::nesting() const
57443 return types->nesting;
57447 JSScript::clearNesting()
57449 js::types::TypeScriptNesting *nesting = this->nesting();
57451 js::Foreground::delete_(nesting);
57452 types->nesting = __null;
57458 JSScript::ensureHasJITInfo(JSContext *cx)
57462 jitInfo = cx->new_<JITScriptSet>();
57463 return jitInfo != __null;
57467 JSScript::destroyJITInfo(js::FreeOp *fop)
57469 fop->delete_(jitInfo);
57475 JSScript::writeBarrierPre(JSScript *script)
57481 JSCompartment *comp = script->compartment();
57482 if (comp->needsBarrier()) {
57484 JSScript *tmp = script;
57485 MarkScriptUnbarriered(comp->barrierTracer(), &tmp, "write barrier");
57492 JSScript::writeBarrierPost(JSScript *script, void *addr)
57495 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack-inl.h" 2
57497 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject-inl.h" 1
57498 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject-inl.h"
57499 #define ArgumentsObject_inl_h___
57501 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject.h" 1
57502 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ArgumentsObject-inl.h" 2
57507 ArgumentsObject::initInitialLength(uint32_t length)
57510 initFixedSlot(INITIAL_LENGTH_SLOT, Int32Value(length << PACKED_BITS_COUNT));
57516 ArgumentsObject::initialLength() const
57518 uint32_t argc = uint32_t(getFixedSlot(INITIAL_LENGTH_SLOT).toInt32()) >> PACKED_BITS_COUNT;
57524 ArgumentsObject::markLengthOverridden()
57526 uint32_t v = getFixedSlot(INITIAL_LENGTH_SLOT).toInt32() | LENGTH_OVERRIDDEN_BIT;
57527 setFixedSlot(INITIAL_LENGTH_SLOT, Int32Value(v));
57531 ArgumentsObject::hasOverriddenLength() const
57533 const js::Value &v = getFixedSlot(INITIAL_LENGTH_SLOT);
57534 return v.toInt32() & LENGTH_OVERRIDDEN_BIT;
57538 ArgumentsObject::initData(ArgumentsData *data)
57541 initFixedSlot(DATA_SLOT, PrivateValue(data));
57544 inline ArgumentsData *
57545 ArgumentsObject::data() const
57547 return reinterpret_cast<js::ArgumentsData *>(getFixedSlot(DATA_SLOT).toPrivate());
57551 ArgumentsObject::isElementDeleted(uint32_t i) const
57553 return IsBitArrayElementSet(data()->deletedBits, initialLength(), i);
57557 ArgumentsObject::isAnyElementDeleted() const
57559 return IsAnyBitArrayElementSet(data()->deletedBits, initialLength());
57563 ArgumentsObject::markElementDeleted(uint32_t i)
57565 SetBitArrayElement(data()->deletedBits, initialLength(), i);
57568 inline const js::Value &
57569 ArgumentsObject::element(uint32_t i) const
57572 return data()->slots[i];
57576 ArgumentsObject::setElement(uint32_t i, const js::Value &v)
57579 data()->slots[i] = v;
57583 ArgumentsObject::getElement(uint32_t i, Value *vp)
57585 if (i >= initialLength() || isElementDeleted(i))
57593 StackFrame *fp = maybeStackFrame();
57596 *vp = fp->canonicalActualArg(i);
57604 struct CopyNonHoleArgsTo
57606 CopyNonHoleArgsTo(ArgumentsObject *argsobj, Value *dst) : argsobj(*argsobj), dst(dst) {}
57607 ArgumentsObject &argsobj;
57609 bool operator()(uint32_t argi, Value *src) {
57618 ArgumentsObject::getElements(uint32_t start, uint32_t count, Value *vp)
57622 uint32_t length = initialLength();
57623 if (start > length || start + count > length || isAnyElementDeleted())
57626 StackFrame *fp = maybeStackFrame();
57630 const Value *srcbeg = Valueify(data()->slots) + start;
57631 const Value *srcend = srcbeg + count;
57632 const Value *src = srcbeg;
57633 for (Value *dst = vp; src < srcend; ++dst, ++src)
57640 return fp->forEachCanonicalActualArg(detail::CopyNonHoleArgsTo(this, vp), start, count);
57643 inline js::StackFrame *
57644 ArgumentsObject::maybeStackFrame() const
57646 return reinterpret_cast<js::StackFrame *>(getFixedSlot(STACK_FRAME_SLOT).toPrivate());
57650 ArgumentsObject::setStackFrame(StackFrame *frame)
57652 setFixedSlot(STACK_FRAME_SLOT, PrivateValue(frame));
57656 ArgumentsObject::sizeOfMisc(JSMallocSizeOfFun mallocSizeOf) const
57658 return mallocSizeOf(data());
57661 inline const js::Value &
57662 NormalArgumentsObject::callee() const
57664 return data()->callee;
57668 NormalArgumentsObject::clearCallee()
57670 data()->callee.set(compartment(), MagicValue(JS_OVERWRITTEN_CALLEE));
57674 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack-inl.h" 2
57675 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ScopeObject-inl.h" 1
57676 # 21 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack-inl.h" 2
57687 IsCacheableNonGlobalScope(JSObject *obj)
57689 bool cacheable = (obj->isCall() || obj->isBlock() || obj->isDeclEnv());
57695 inline HandleObject
57696 StackFrame::scopeChain() const
57699 if (!(flags_ & HAS_SCOPECHAIN)) {
57700 scopeChain_ = callee().environment();
57701 flags_ |= HAS_SCOPECHAIN;
57703 return HandleObject::fromMarkedLocation(&scopeChain_);
57706 inline GlobalObject &
57707 StackFrame::global() const
57709 return scopeChain()->global();
57713 StackFrame::varObj()
57715 JSObject *obj = scopeChain();
57716 while (!obj->isVarObj())
57717 obj = obj->enclosingScope();
57721 inline JSCompartment *
57722 StackFrame::compartment() const
57725 return scopeChain()->compartment();
57729 inline mjit::JITScript *
57732 JSScript *script_ = script();
57733 return script_->getJIT(isConstructing(), script_->compartment()->needsBarrier());
57738 StackFrame::initPrev(JSContext *cx)
57741 if (FrameRegs *regs = cx->maybeRegs()) {
57742 prev_ = regs->fp();
57743 prevpc_ = regs->pc;
57744 prevInline_ = regs->inlined();
57757 StackFrame::resetGeneratorPrev(JSContext *cx)
57759 flags_ |= HAS_PREVPC;
57764 StackFrame::initInlineFrame(JSFunction *fun, StackFrame *prevfp, jsbytecode *prevpc)
57770 flags_ = StackFrame::FUNCTION;
57772 resetInlinePrev(prevfp, prevpc);
57776 StackFrame::resetInlinePrev(StackFrame *prevfp, jsbytecode *prevpc)
57779 flags_ |= StackFrame::HAS_PREVPC;
57782 prevInline_ = __null;
57786 StackFrame::initCallFrame(JSContext *cx, JSFunction &callee,
57787 JSScript *script, uint32_t nactual, StackFrame::Flags flagsArg)
57796 flags_ = FUNCTION | HAS_PREVPC | HAS_SCOPECHAIN | HAS_BLOCKCHAIN | flagsArg;
57797 exec.fun = &callee;
57798 u.nactual = nactual;
57799 scopeChain_ = callee.environment();
57802 blockChain_= __null;
57808 SetValueRangeToUndefined(slots(), script->nfixed);
57816 StackFrame::initFixupFrame(StackFrame *prev, StackFrame::Flags flags, void *ncode, unsigned nactual)
57824 flags_ = FUNCTION | flags;
57827 u.nactual = nactual;
57831 StackFrame::createRestParameter(JSContext *cx)
57834 unsigned nformal = fun()->nargs - 1, nactual = numActualArgs();
57835 unsigned nrest = (nactual > nformal) ? nactual - nformal : 0;
57836 return NewDenseCopiedArray(cx, nrest, actualArgs() + nformal);
57840 StackFrame::canonicalActualArg(unsigned i) const
57842 if (i < numFormalArgs())
57843 return formalArg(i);
57845 return actualArgs()[i];
57848 template <class Op>
57850 StackFrame::forEachCanonicalActualArg(Op op, unsigned start , unsigned count )
57852 unsigned nformal = fun()->nargs;
57855 Value *formals = formalArgsEnd() - nformal;
57856 unsigned nactual = numActualArgs();
57857 if (count == unsigned(-1))
57858 count = nactual - start;
57860 unsigned end = start + count;
57864 if (end <= nformal) {
57865 Value *p = formals + start;
57866 for (; start < end; ++p, ++start) {
57871 for (Value *p = formals + start; start < nformal; ++p, ++start) {
57876 Value *actuals = formals - (nactual + 2) + start;
57877 for (Value *p = actuals; start < end; ++p, ++start) {
57885 template <class Op>
57887 StackFrame::forEachFormalArg(Op op)
57889 Value *formals = formalArgsEnd() - fun()->nargs;
57890 Value *formalsEnd = formalArgsEnd();
57892 for (Value *p = formals; p != formalsEnd; ++p, ++i) {
57902 CopyTo(Value *dst) : dst(dst) {}
57903 bool operator()(unsigned, Value *src) {
57910 StackFrame::numActualArgs() const
57912 # 264 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack-inl.h"
57914 if ((__builtin_expect((flags_ & (OVERFLOW_ARGS | UNDERFLOW_ARGS)), 0)))
57916 return numFormalArgs();
57920 StackFrame::actualArgs() const
57923 Value *argv = formalArgs();
57924 if ((__builtin_expect((flags_ & OVERFLOW_ARGS), 0)))
57925 return argv - (2 + u.nactual);
57930 StackFrame::actualArgsEnd() const
57933 if ((__builtin_expect((flags_ & OVERFLOW_ARGS), 0)))
57934 return formalArgs() - 2;
57935 return formalArgs() + numActualArgs();
57939 StackFrame::setScopeChain(JSObject &obj)
57941 # 304 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Stack-inl.h"
57942 scopeChain_ = &obj;
57943 flags_ |= HAS_SCOPECHAIN;
57947 StackFrame::initScopeChain(CallObject &obj)
57951 scopeChain_ = &obj;
57952 flags_ |= HAS_SCOPECHAIN | HAS_CALL_OBJ;
57955 inline CallObject &
57956 StackFrame::callObj() const
57960 JSObject *pobj = scopeChain();
57961 while ((__builtin_expect((!pobj->isCall()), 0)))
57962 pobj = pobj->enclosingScope();
57963 return pobj->asCall();
57967 StackFrame::maintainNestingState() const
57973 return isNonEvalFunctionFrame() && !isGeneratorFrame() && script()->nesting();
57977 StackFrame::functionPrologue(JSContext *cx)
57982 if (fun()->isHeavyweight()) {
57983 CallObject *callobj = CallObject::createForFunction(cx, this);
57986 initScopeChain(*callobj);
57992 if (script()->nesting()) {
57994 types::NestingPrologue(cx, this);
58001 StackFrame::functionEpilogue(JSContext *cx)
58005 if (cx->compartment->debugMode())
58006 cx->runtime->debugScopes->onPopCall(this);
58008 if (flags_ & (HAS_ARGS_OBJ | HAS_CALL_OBJ)) {
58010 js_PutCallObject(this, scopeChain_->asCall());
58012 js_PutArgsObject(this);
58015 if (maintainNestingState())
58016 types::NestingEpilogue(this);
58020 StackFrame::updateEpilogueFlags()
58022 if (flags_ & (HAS_ARGS_OBJ | HAS_CALL_OBJ)) {
58023 if (hasArgsObj() && !argsObj().maybeStackFrame())
58024 flags_ &= ~HAS_ARGS_OBJ;
58025 if (hasCallObj() && !callObj().maybeStackFrame()) {
58033 scopeChain_ = isFunctionFrame()
58034 ? callee().environment()
58035 : &scopeChain_->asScope().enclosingScope();
58036 flags_ &= ~HAS_CALL_OBJ;
58045 if (maintainNestingState())
58046 script()->nesting()->activeFrames++;
58052 __attribute__((always_inline)) inline bool
58053 StackSpace::ensureSpace(JSContext *cx, MaybeReportError report, Value *from, ptrdiff_t nvals,
58054 JSCompartment *dest) const
58056 assertInvariants();
58061 if ((__builtin_expect((conservativeEnd_ - from < nvals), 0)))
58062 return ensureSpaceSlow(cx, report, from, nvals, dest);
58067 StackSpace::getStackLimit(JSContext *cx, MaybeReportError report)
58069 FrameRegs ®s = cx->regs();
58070 unsigned nvals = regs.fp()->numSlots() + STACK_JIT_EXTRA;
58071 return ensureSpace(cx, report, regs.sp, nvals)
58078 __attribute__((always_inline)) inline StackFrame *
58079 ContextStack::getCallFrame(JSContext *cx, MaybeReportError report, const CallArgs &args,
58080 JSFunction *fun, JSScript *script, StackFrame::Flags *flags) const
58083 unsigned nformal = fun->nargs;
58085 Value *firstUnused = args.end();
58089 unsigned nvals = VALUES_PER_STACK_FRAME + script->nslots + StackSpace::STACK_JIT_EXTRA;
58093 if (args.length() == nformal) {
58094 if (!space().ensureSpace(cx, report, firstUnused, nvals))
58096 return reinterpret_cast<StackFrame *>(firstUnused);
58099 if (args.length() < nformal) {
58100 *flags = StackFrame::Flags(*flags | StackFrame::UNDERFLOW_ARGS);
58101 unsigned nmissing = nformal - args.length();
58102 if (!space().ensureSpace(cx, report, firstUnused, nmissing + nvals))
58104 SetValueRangeToUndefined(firstUnused, nmissing);
58105 return reinterpret_cast<StackFrame *>(firstUnused + nmissing);
58108 *flags = StackFrame::Flags(*flags | StackFrame::OVERFLOW_ARGS);
58109 unsigned ncopy = 2 + nformal;
58110 if (!space().ensureSpace(cx, report, firstUnused, ncopy + nvals))
58112 Value *dst = firstUnused;
58113 Value *src = args.base();
58114 PodCopy(dst, src, ncopy);
58115 return reinterpret_cast<StackFrame *>(firstUnused + ncopy);
58118 __attribute__((always_inline)) inline bool
58119 ContextStack::pushInlineFrame(JSContext *cx, FrameRegs ®s, const CallArgs &args,
58120 JSFunction &callee, JSScript *script,
58121 InitialFrameFlags initial)
58128 StackFrame::Flags flags = ToFrameFlags(initial);
58129 StackFrame *fp = getCallFrame(cx, REPORT_ERROR, args, &callee, script, &flags);
58134 fp->initCallFrame(cx, callee, script, args.length(), flags);
58140 regs.prepareToRun(*fp, script);
58144 __attribute__((always_inline)) inline bool
58145 ContextStack::pushInlineFrame(JSContext *cx, FrameRegs ®s, const CallArgs &args,
58146 JSFunction &callee, JSScript *script,
58147 InitialFrameFlags initial, Value **stackLimit)
58149 if (!pushInlineFrame(cx, regs, args, callee, script, initial))
58151 *stackLimit = space().conservativeEnd_;
58155 __attribute__((always_inline)) inline StackFrame *
58156 ContextStack::getFixupFrame(JSContext *cx, MaybeReportError report,
58157 const CallArgs &args, JSFunction *fun, JSScript *script,
58158 void *ncode, InitialFrameFlags initial, Value **stackLimit)
58164 StackFrame::Flags flags = ToFrameFlags(initial);
58165 StackFrame *fp = getCallFrame(cx, report, args, fun, script, &flags);
58170 fp->initFixupFrame(cx->fp(), flags, ncode, args.length());
58172 *stackLimit = space().conservativeEnd_;
58176 __attribute__((always_inline)) inline void
58177 ContextStack::popInlineFrame(FrameRegs ®s)
58182 StackFrame *fp = regs.fp();
58183 fp->functionEpilogue(cx_);
58185 Value *newsp = fp->actualArgs() - 1;
58188 newsp[-1] = fp->returnValue();
58189 regs.popFrame(newsp);
58193 ContextStack::popFrameAfterOverflow()
58196 FrameRegs ®s = seg_->regs();
58197 StackFrame *fp = regs.fp();
58198 regs.popFrame(fp->actualArgsEnd());
58202 ContextStack::currentScript(jsbytecode **ppc) const
58207 FrameRegs *regs = maybeRegs();
58208 StackFrame *fp = regs ? regs->fp() : __null;
58209 while (fp && fp->isDummyFrame())
58215 mjit::CallSite *inlined = regs->inlined();
58217 mjit::JITChunk *chunk = fp->jit()->chunk(regs->pc);
58219 mjit::InlineFrame *frame = &chunk->inlineFrames()[inlined->inlineIndex];
58220 JSScript *script = frame->fun->script();
58221 if (script->compartment() != cx_->compartment)
58224 *ppc = script->code + inlined->pcOffset;
58229 JSScript *script = fp->script();
58230 if (script->compartment() != cx_->compartment)
58234 *ppc = fp->pcQuadratic(*this);
58239 ContextStack::currentScriptWithDiagnostics(jsbytecode **ppc) const
58244 FrameRegs *regs = maybeRegs();
58245 StackFrame *fp = regs ? regs->fp() : __null;
58246 while (fp && fp->isDummyFrame())
58252 mjit::CallSite *inlined = regs->inlined();
58254 mjit::JITChunk *chunk = fp->jit()->chunk(regs->pc);
58256 mjit::InlineFrame *frame = &chunk->inlineFrames()[inlined->inlineIndex];
58257 JSScript *script = frame->fun->script();
58258 if (script->compartment() != cx_->compartment)
58261 *ppc = script->code + inlined->pcOffset;
58266 JSScript *script = fp->script();
58267 if (script->compartment() != cx_->compartment)
58271 *ppc = fp->pcQuadratic(*this);
58277 inline HandleObject
58278 ContextStack::currentScriptedScopeChain() const
58280 return fp()->scopeChain();
58284 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h" 2
58287 #define jsinferinlines_h___
58297 Type::ObjectType(JSObject *obj)
58299 if (obj->hasSingletonType())
58300 return Type(uintptr_t(obj) | 1);
58301 return Type(uintptr_t(obj->type()));
58305 Type::ObjectType(TypeObject *obj)
58307 if (obj->singleton)
58308 return Type(uintptr_t(obj->singleton.get()) | 1);
58309 return Type(uintptr_t(obj));
58313 Type::ObjectType(TypeObjectKey *obj)
58315 return Type(uintptr_t(obj));
58319 GetValueType(JSContext *cx, const Value &val)
58322 if (val.isDouble())
58323 return Type::DoubleType();
58324 if (val.isObject())
58325 return Type::ObjectType(&val.toObject());
58326 return Type::PrimitiveType(val.extractNonDoubleType());
58330 PrimitiveTypeFlag(JSValueType type)
58333 case JSVAL_TYPE_UNDEFINED:
58334 return TYPE_FLAG_UNDEFINED;
58335 case JSVAL_TYPE_NULL:
58336 return TYPE_FLAG_NULL;
58337 case JSVAL_TYPE_BOOLEAN:
58338 return TYPE_FLAG_BOOLEAN;
58339 case JSVAL_TYPE_INT32:
58340 return TYPE_FLAG_INT32;
58341 case JSVAL_TYPE_DOUBLE:
58342 return TYPE_FLAG_DOUBLE;
58343 case JSVAL_TYPE_STRING:
58344 return TYPE_FLAG_STRING;
58345 case JSVAL_TYPE_MAGIC:
58346 return TYPE_FLAG_LAZYARGS;
58348 __builtin_unreachable();
58354 TypeFlagPrimitive(TypeFlags flags)
58357 case TYPE_FLAG_UNDEFINED:
58358 return JSVAL_TYPE_UNDEFINED;
58359 case TYPE_FLAG_NULL:
58360 return JSVAL_TYPE_NULL;
58361 case TYPE_FLAG_BOOLEAN:
58362 return JSVAL_TYPE_BOOLEAN;
58363 case TYPE_FLAG_INT32:
58364 return JSVAL_TYPE_INT32;
58365 case TYPE_FLAG_DOUBLE:
58366 return JSVAL_TYPE_DOUBLE;
58367 case TYPE_FLAG_STRING:
58368 return JSVAL_TYPE_STRING;
58369 case TYPE_FLAG_LAZYARGS:
58370 return JSVAL_TYPE_MAGIC;
58372 __builtin_unreachable();
58373 return (JSValueType) 0;
58383 MakeTypeId(JSContext *cx, jsid id)
58391 if (JSID_IS_INT(id))
58392 return ((jsid)0x2);
58398 if (JSID_IS_STRING(id)) {
58399 JSFlatString *str = JSID_TO_FLAT_STRING(id);
58400 const jschar *cp = str->getCharsZ(cx);
58401 if (((((unsigned)(*cp)) - '0') <= 9) || *cp == '-') {
58403 while (((((unsigned)(*cp)) - '0') <= 9))
58406 return ((jsid)0x2);
58411 return ((jsid)0x2);
58414 const char * TypeIdStringImpl(jsid id);
58417 static inline const char *
58418 TypeIdString(jsid id)
58423 return "(missing)";
58426 # 171 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h"
58427 struct AutoEnterTypeInference
58430 JSCompartment *compartment;
58431 bool oldActiveAnalysis;
58432 bool oldActiveInference;
58434 AutoEnterTypeInference(JSContext *cx, bool compiling = false)
58437 init(cx->runtime->defaultFreeOp(), cx->compartment);
58440 AutoEnterTypeInference(FreeOp *fop, JSCompartment *comp)
58445 ~AutoEnterTypeInference()
58447 compartment->activeAnalysis = oldActiveAnalysis;
58448 compartment->activeInference = oldActiveInference;
58456 if (!compartment->activeInference) {
58457 TypeCompartment *types = &compartment->types;
58458 if (types->pendingNukeTypes)
58459 types->nukeTypes(freeOp);
58460 else if (types->pendingRecompiles)
58461 types->processPendingRecompiles(freeOp);
58466 void init(FreeOp *fop, JSCompartment *comp) {
58468 compartment = comp;
58469 oldActiveAnalysis = compartment->activeAnalysis;
58470 oldActiveInference = compartment->activeInference;
58471 compartment->activeAnalysis = true;
58472 compartment->activeInference = true;
58480 struct AutoEnterCompilation
58482 RecompileInfo &info;
58484 AutoEnterCompilation(JSContext *cx, JSScript *script, bool constructing, unsigned chunkIndex)
58485 : info(cx->compartment->types.compiledInfo)
58488 info.script = script;
58489 info.constructing = constructing;
58490 info.barriers = cx->compartment->needsBarrier();
58491 info.chunkIndex = chunkIndex;
58494 ~AutoEnterCompilation()
58497 info.script = __null;
58498 info.constructing = false;
58499 info.barriers = false;
58500 info.chunkIndex = 0;
58503 # 263 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h"
58504 inline TypeObject *
58505 GetTypeNewObject(JSContext *cx, JSProtoKey key)
58508 if (!js_GetClassPrototype(cx, __null, key, &proto, __null))
58510 return proto->getNewType(cx);
58514 inline TypeObject *
58515 GetTypeCallerInitObject(JSContext *cx, JSProtoKey key)
58517 if (cx->typeInferenceEnabled()) {
58519 JSScript *script = cx->stack.currentScript(&pc);
58521 return TypeScript::InitObject(cx, script, pc, key);
58523 return GetTypeNewObject(cx, key);
58531 MarkIteratorUnknown(JSContext *cx)
58533 extern void MarkIteratorUnknownSlow(JSContext *cx);
58535 if (cx->typeInferenceEnabled())
58536 MarkIteratorUnknownSlow(cx);
58544 TypeMonitorCall(JSContext *cx, const js::CallArgs &args, bool constructing)
58546 extern void TypeMonitorCallSlow(JSContext *cx, JSObject *callee,
58547 const CallArgs &args, bool constructing);
58549 JSObject *callee = &args.callee();
58550 if (callee->isFunction()) {
58551 JSFunction *fun = callee->toFunction();
58552 if (fun->isInterpreted()) {
58553 JSScript *script = fun->script();
58554 if (!script->ensureRanAnalysis(cx, fun->environment()))
58556 if (cx->typeInferenceEnabled())
58557 TypeMonitorCallSlow(cx, callee, args, constructing);
58565 TrackPropertyTypes(JSContext *cx, JSObject *obj, jsid id)
58567 if (!cx->typeInferenceEnabled() || obj->hasLazyType() || obj->type()->unknownProperties())
58570 if (obj->hasSingletonType() && !obj->type()->maybeGetProperty(cx, id))
58578 AddTypePropertyId(JSContext *cx, JSObject *obj, jsid id, Type type)
58580 if (cx->typeInferenceEnabled())
58581 id = MakeTypeId(cx, id);
58582 if (TrackPropertyTypes(cx, obj, id))
58583 obj->type()->addPropertyType(cx, id, type);
58587 AddTypePropertyId(JSContext *cx, JSObject *obj, jsid id, const Value &value)
58589 if (cx->typeInferenceEnabled())
58590 id = MakeTypeId(cx, id);
58591 if (TrackPropertyTypes(cx, obj, id))
58592 obj->type()->addPropertyType(cx, id, value);
58596 AddTypeProperty(JSContext *cx, TypeObject *obj, const char *name, Type type)
58598 if (cx->typeInferenceEnabled() && !obj->unknownProperties())
58599 obj->addPropertyType(cx, name, type);
58603 AddTypeProperty(JSContext *cx, TypeObject *obj, const char *name, const Value &value)
58605 if (cx->typeInferenceEnabled() && !obj->unknownProperties())
58606 obj->addPropertyType(cx, name, value);
58611 MarkTypeObjectFlags(JSContext *cx, JSObject *obj, TypeObjectFlags flags)
58613 if (cx->typeInferenceEnabled() && !obj->hasLazyType() && !obj->type()->hasAllFlags(flags))
58614 obj->type()->setFlags(cx, flags);
58624 MarkTypeObjectUnknownProperties(JSContext *cx, TypeObject *obj,
58625 bool markSetsUnknown = false)
58627 if (cx->typeInferenceEnabled()) {
58628 if (!obj->unknownProperties())
58629 obj->markUnknown(cx);
58630 if (markSetsUnknown && !(obj->flags & OBJECT_FLAG_SETS_MARKED_UNKNOWN))
58631 cx->compartment->types.markSetsUnknown(cx, obj);
58640 MarkTypePropertyConfigured(JSContext *cx, JSObject *obj, jsid id)
58642 if (cx->typeInferenceEnabled())
58643 id = MakeTypeId(cx, id);
58644 if (TrackPropertyTypes(cx, obj, id))
58645 obj->type()->markPropertyConfigured(cx, id);
58650 MarkObjectStateChange(JSContext *cx, JSObject *obj)
58652 if (cx->typeInferenceEnabled() && !obj->hasLazyType() && !obj->type()->unknownProperties())
58653 obj->type()->markStateChange(cx);
58662 FixArrayType(JSContext *cx, JSObject *obj)
58664 if (cx->typeInferenceEnabled())
58665 cx->compartment->types.fixArrayType(cx, obj);
58669 FixObjectType(JSContext *cx, JSObject *obj)
58671 if (cx->typeInferenceEnabled())
58672 cx->compartment->types.fixObjectType(cx, obj);
58676 extern void TypeMonitorResult(JSContext *cx, JSScript *script, jsbytecode *pc, const js::Value &rval);
58677 extern void TypeDynamicResult(JSContext *cx, JSScript *script, jsbytecode *pc, js::types::Type type);
58680 UseNewTypeAtEntry(JSContext *cx, StackFrame *fp)
58682 return fp->isConstructing() && cx->typeInferenceEnabled() &&
58683 fp->prev() && fp->prev()->isScriptFrame() &&
58684 UseNewType(cx, fp->prev()->script(), fp->prev()->pcQuadratic(cx->stack, fp));
58692 TypeScript::TypeScript()
58694 this->global = (js::GlobalObject *) GLOBAL_MISSING_SCOPE;
58698 TypeScript::NumTypeSets(JSScript *script)
58700 return script->nTypeSets + analyze::TotalSlots(script);
58704 TypeScript::ReturnTypes(JSScript *script)
58706 return script->types->typeArray() + script->nTypeSets + js::analyze::CalleeSlot();
58710 TypeScript::ThisTypes(JSScript *script)
58712 return script->types->typeArray() + script->nTypeSets + js::analyze::ThisSlot();
58722 TypeScript::ArgTypes(JSScript *script, unsigned i)
58725 return script->types->typeArray() + script->nTypeSets + js::analyze::ArgSlot(i);
58729 TypeScript::LocalTypes(JSScript *script, unsigned i)
58732 return script->types->typeArray() + script->nTypeSets + js::analyze::LocalSlot(script, i);
58736 TypeScript::SlotTypes(JSScript *script, unsigned slot)
58739 return script->types->typeArray() + script->nTypeSets + slot;
58742 inline TypeObject *
58743 TypeScript::StandardType(JSContext *cx, JSScript *script, JSProtoKey key)
58746 if (!js_GetClassPrototype(cx, script->global(), key, &proto, __null))
58748 return proto->getNewType(cx);
58751 struct AllocationSiteKey {
58754 uint32_t offset : 24;
58755 JSProtoKey kind : 8;
58757 static const uint32_t OFFSET_LIMIT = (1 << 23);
58759 AllocationSiteKey() { PodZero(this); }
58761 typedef AllocationSiteKey Lookup;
58763 static inline uint32_t hash(AllocationSiteKey key) {
58764 return uint32_t(size_t(key.script->code + key.offset)) ^ key.kind;
58767 static inline bool match(const AllocationSiteKey &a, const AllocationSiteKey &b) {
58768 return a.script == b.script && a.offset == b.offset && a.kind == b.kind;
58772 inline TypeObject *
58773 TypeScript::InitObject(JSContext *cx, JSScript *script, jsbytecode *pc, JSProtoKey kind)
58778 uint32_t offset = pc - script->code;
58780 if (!cx->typeInferenceEnabled() || !script->hasGlobal() || offset >= AllocationSiteKey::OFFSET_LIMIT)
58781 return GetTypeNewObject(cx, kind);
58783 AllocationSiteKey key;
58784 key.script = script;
58785 key.offset = offset;
58788 if (!cx->compartment->types.allocationSiteTable)
58789 return cx->compartment->types.newAllocationSiteTypeObject(cx, key);
58791 AllocationSiteTable::Ptr p = cx->compartment->types.allocationSiteTable->lookup(key);
58795 return cx->compartment->types.newAllocationSiteTypeObject(cx, key);
58800 SetInitializerObjectType(JSContext *cx, JSScript *script, jsbytecode *pc, JSObject *obj)
58802 if (!cx->typeInferenceEnabled())
58805 if (UseNewTypeForInitializer(cx, script, pc)) {
58806 if (!obj->setSingletonType(cx))
58814 TypeScript::Monitor(cx, script, pc, ObjectValue(*obj));
58816 JSProtoKey key = obj->isDenseArray() ? JSProto_Array : JSProto_Object;
58817 types::TypeObject *type = TypeScript::InitObject(cx, script, pc, key);
58820 obj->setType(type);
58827 TypeScript::Monitor(JSContext *cx, JSScript *script, jsbytecode *pc, const js::Value &rval)
58829 if (cx->typeInferenceEnabled())
58830 TypeMonitorResult(cx, script, pc, rval);
58834 TypeScript::MonitorOverflow(JSContext *cx, JSScript *script, jsbytecode *pc)
58836 if (cx->typeInferenceEnabled())
58837 TypeDynamicResult(cx, script, pc, Type::DoubleType());
58841 TypeScript::MonitorString(JSContext *cx, JSScript *script, jsbytecode *pc)
58843 if (cx->typeInferenceEnabled())
58844 TypeDynamicResult(cx, script, pc, Type::StringType());
58848 TypeScript::MonitorUnknown(JSContext *cx, JSScript *script, jsbytecode *pc)
58850 if (cx->typeInferenceEnabled())
58851 TypeDynamicResult(cx, script, pc, Type::UnknownType());
58855 TypeScript::GetPcScript(JSContext *cx, JSScript **script, jsbytecode **pc)
58857 *script = cx->fp()->script();
58858 *pc = cx->regs().pc;
58862 TypeScript::MonitorOverflow(JSContext *cx)
58866 GetPcScript(cx, &script, &pc);
58867 MonitorOverflow(cx, script, pc);
58871 TypeScript::MonitorString(JSContext *cx)
58875 GetPcScript(cx, &script, &pc);
58876 MonitorString(cx, script, pc);
58880 TypeScript::MonitorUnknown(JSContext *cx)
58884 GetPcScript(cx, &script, &pc);
58885 MonitorUnknown(cx, script, pc);
58889 TypeScript::Monitor(JSContext *cx, const js::Value &rval)
58893 GetPcScript(cx, &script, &pc);
58894 Monitor(cx, script, pc, rval);
58898 TypeScript::MonitorAssign(JSContext *cx, JSObject *obj, jsid id)
58900 if (cx->typeInferenceEnabled() && !obj->hasSingletonType()) {
58901 # 668 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h"
58903 if (js_IdIsIndex(id, &i))
58905 MarkTypeObjectUnknownProperties(cx, obj->type());
58910 TypeScript::SetThis(JSContext *cx, JSScript *script, Type type)
58912 if (!cx->typeInferenceEnabled())
58917 bool analyze = cx->hasRunOption(((uint32_t)1 << (16)));
58919 if (!ThisTypes(script)->hasType(type) || analyze) {
58920 AutoEnterTypeInference enter(cx);
58922 InferSpew(ISpewOps, "externalType: setThis #%u: %s",
58923 script->id(), TypeString(type));
58924 ThisTypes(script)->addType(cx, type);
58926 if (analyze && script->types->hasScope())
58927 script->ensureRanInference(cx);
58932 TypeScript::SetThis(JSContext *cx, JSScript *script, const js::Value &value)
58934 if (cx->typeInferenceEnabled())
58935 SetThis(cx, script, GetValueType(cx, value));
58939 TypeScript::SetLocal(JSContext *cx, JSScript *script, unsigned local, Type type)
58941 if (!cx->typeInferenceEnabled())
58945 if (!LocalTypes(script, local)->hasType(type)) {
58946 AutoEnterTypeInference enter(cx);
58948 InferSpew(ISpewOps, "externalType: setLocal #%u %u: %s",
58949 script->id(), local, TypeString(type));
58950 LocalTypes(script, local)->addType(cx, type);
58955 TypeScript::SetLocal(JSContext *cx, JSScript *script, unsigned local, const js::Value &value)
58957 if (cx->typeInferenceEnabled()) {
58958 Type type = GetValueType(cx, value);
58959 SetLocal(cx, script, local, type);
58964 TypeScript::SetArgument(JSContext *cx, JSScript *script, unsigned arg, Type type)
58966 if (!cx->typeInferenceEnabled())
58970 if (!ArgTypes(script, arg)->hasType(type)) {
58971 AutoEnterTypeInference enter(cx);
58973 InferSpew(ISpewOps, "externalType: setArg #%u %u: %s",
58974 script->id(), arg, TypeString(type));
58975 ArgTypes(script, arg)->addType(cx, type);
58980 TypeScript::SetArgument(JSContext *cx, JSScript *script, unsigned arg, const js::Value &value)
58982 if (cx->typeInferenceEnabled()) {
58983 Type type = GetValueType(cx, value);
58984 SetArgument(cx, script, arg, type);
58989 TypeScript::trace(JSTracer *trc)
58991 if (hasScope() && global)
58992 gc::MarkObject(trc, &global, "script_global");
59001 inline JSCompartment *
59002 TypeCompartment::compartment()
59004 return (JSCompartment *)((char *)this - __builtin_offsetof (JSCompartment, types));
59008 TypeCompartment::addPending(JSContext *cx, TypeConstraint *constraint, TypeSet *source, Type type)
59013 InferSpew(ISpewOps, "pending: %sC%p%s %s",
59014 InferSpewColor(constraint), constraint, InferSpewColorReset(),
59017 if ((pendingCount == pendingCapacity) && !growPendingArray(cx))
59020 PendingWork &pending = pendingArray[pendingCount++];
59021 pending.constraint = constraint;
59022 pending.source = source;
59023 pending.type = type;
59027 TypeCompartment::resolvePending(JSContext *cx)
59039 while (pendingCount) {
59040 const PendingWork &pending = pendingArray[--pendingCount];
59041 InferSpew(ISpewOps, "resolve: %sC%p%s %s",
59042 InferSpewColor(pending.constraint), pending.constraint,
59043 InferSpewColorReset(), TypeString(pending.type));
59044 pending.constraint->newType(cx, pending.source, pending.type);
59049 # 828 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h"
59050 const unsigned SET_ARRAY_SIZE = 8;
59053 static inline unsigned
59054 HashSetCapacity(unsigned count)
59058 if (count <= SET_ARRAY_SIZE)
59059 return SET_ARRAY_SIZE;
59062 do { (log2) = 31 - __builtin_clz(((unsigned int)(count)) | 1); } while (0);
59063 return 1 << (log2 + 2);
59067 template <class T, class KEY>
59068 static inline uint32_t
59071 uint32_t nv = KEY::keyBits(v);
59073 uint32_t hash = 84696351 ^ (nv & 0xff);
59074 hash = (hash * 16777619) ^ ((nv >> 8) & 0xff);
59075 hash = (hash * 16777619) ^ ((nv >> 16) & 0xff);
59076 return (hash * 16777619) ^ ((nv >> 24) & 0xff);
59083 template <class T, class U, class KEY>
59085 HashSetInsertTry(JSCompartment *compartment, U **&values, unsigned &count, T key)
59087 unsigned capacity = HashSetCapacity(count);
59088 unsigned insertpos = HashKey<T,KEY>(key) & (capacity - 1);
59091 bool converting = (count == SET_ARRAY_SIZE);
59094 while (values[insertpos] != __null) {
59095 if (KEY::getKey(values[insertpos]) == key)
59096 return &values[insertpos];
59097 insertpos = (insertpos + 1) & (capacity - 1);
59102 unsigned newCapacity = HashSetCapacity(count);
59104 if (newCapacity == capacity) {
59106 return &values[insertpos];
59109 U **newValues = compartment->typeLifoAlloc.newArray<U*>(newCapacity);
59112 PodZero(newValues, newCapacity);
59114 for (unsigned i = 0; i < capacity; i++) {
59116 unsigned pos = HashKey<T,KEY>(KEY::getKey(values[i])) & (newCapacity - 1);
59117 while (newValues[pos] != __null)
59118 pos = (pos + 1) & (newCapacity - 1);
59119 newValues[pos] = values[i];
59123 values = newValues;
59125 insertpos = HashKey<T,KEY>(key) & (newCapacity - 1);
59126 while (values[insertpos] != __null)
59127 insertpos = (insertpos + 1) & (newCapacity - 1);
59128 return &values[insertpos];
59135 template <class T, class U, class KEY>
59137 HashSetInsert(JSCompartment *compartment, U **&values, unsigned &count, T key)
59142 return (U **) &values;
59146 U *oldData = (U*) values;
59147 if (KEY::getKey(oldData) == key)
59148 return (U **) &values;
59150 values = compartment->typeLifoAlloc.newArray<U*>(SET_ARRAY_SIZE);
59152 values = (U **) oldData;
59155 PodZero(values, SET_ARRAY_SIZE);
59158 values[0] = oldData;
59162 if (count <= SET_ARRAY_SIZE) {
59163 for (unsigned i = 0; i < count; i++) {
59164 if (KEY::getKey(values[i]) == key)
59168 if (count < SET_ARRAY_SIZE) {
59170 return &values[count - 1];
59174 return HashSetInsertTry<T,U,KEY>(compartment, values, count, key);
59178 template <class T, class U, class KEY>
59180 HashSetLookup(U **values, unsigned count, T key)
59186 return (KEY::getKey((U *) values) == key) ? (U *) values : __null;
59188 if (count <= SET_ARRAY_SIZE) {
59189 for (unsigned i = 0; i < count; i++) {
59190 if (KEY::getKey(values[i]) == key)
59196 unsigned capacity = HashSetCapacity(count);
59197 unsigned pos = HashKey<T,KEY>(key) & (capacity - 1);
59199 while (values[pos] != __null) {
59200 if (KEY::getKey(values[pos]) == key)
59201 return values[pos];
59202 pos = (pos + 1) & (capacity - 1);
59208 inline TypeObjectKey *
59209 Type::objectKey() const
59212 if (isTypeObject())
59213 TypeObject::readBarrier((TypeObject *) data);
59215 JSObject::readBarrier((JSObject *) (data ^ 1));
59216 return (TypeObjectKey *) data;
59220 Type::singleObject() const
59223 JSObject::readBarrier((JSObject *) (data ^ 1));
59224 return (JSObject *) (data ^ 1);
59227 inline TypeObject *
59228 Type::typeObject() const
59231 TypeObject::readBarrier((TypeObject *) data);
59232 return (TypeObject *) data;
59236 TypeSet::hasType(Type type)
59241 if (type.isUnknown()) {
59243 } else if (type.isPrimitive()) {
59244 return !!(flags & PrimitiveTypeFlag(type.primitive()));
59245 } else if (type.isAnyObject()) {
59246 return !!(flags & TYPE_FLAG_ANYOBJECT);
59248 return !!(flags & TYPE_FLAG_ANYOBJECT) ||
59249 HashSetLookup<TypeObjectKey*,TypeObjectKey,TypeObjectKey>
59250 (objectSet, baseObjectCount(), type.objectKey()) != __null;
59255 TypeSet::setBaseObjectCount(uint32_t count)
59258 flags = (flags & ~TYPE_FLAG_OBJECT_COUNT_MASK)
59259 | (count << TYPE_FLAG_OBJECT_COUNT_SHIFT);
59263 TypeSet::clearObjects()
59265 setBaseObjectCount(0);
59266 objectSet = __null;
59270 TypeSet::addType(JSContext *cx, Type type)
59277 if (type.isUnknown()) {
59278 flags |= TYPE_FLAG_BASE_MASK;
59281 } else if (type.isPrimitive()) {
59282 TypeFlags flag = PrimitiveTypeFlag(type.primitive());
59287 if (flag == TYPE_FLAG_DOUBLE)
59288 flag |= TYPE_FLAG_INT32;
59292 if (flags & TYPE_FLAG_ANYOBJECT)
59294 if (type.isAnyObject())
59295 goto unknownObject;
59296 uint32_t objectCount = baseObjectCount();
59297 TypeObjectKey *object = type.objectKey();
59298 TypeObjectKey **pentry = HashSetInsert<TypeObjectKey *,TypeObjectKey,TypeObjectKey>
59299 (cx->compartment, objectSet, objectCount, object);
59301 cx->compartment->types.setPendingNukeTypes(cx);
59308 setBaseObjectCount(objectCount);
59310 if (objectCount == TYPE_FLAG_OBJECT_COUNT_LIMIT)
59311 goto unknownObject;
59313 if (type.isTypeObject()) {
59314 TypeObject *nobject = type.typeObject();
59316 if (nobject->unknownProperties())
59317 goto unknownObject;
59318 if (objectCount > 1) {
59319 nobject->contribution += (objectCount - 1) * (objectCount - 1);
59320 if (nobject->contribution >= TypeObject::CONTRIBUTION_LIMIT) {
59321 InferSpew(ISpewOps, "limitUnknown: %sT%p%s",
59322 InferSpewColor(this), this, InferSpewColorReset());
59323 goto unknownObject;
59331 type = Type::AnyObjectType();
59332 flags |= TYPE_FLAG_ANYOBJECT;
59336 InferSpew(ISpewOps, "addType: %sT%p%s %s",
59337 InferSpewColor(this), this, InferSpewColorReset(),
59341 TypeConstraint *constraint = constraintList;
59342 while (constraint) {
59343 cx->compartment->types.addPending(cx, constraint, this, type);
59344 constraint = constraint->next;
59347 cx->compartment->types.resolvePending(cx);
59351 TypeSet::setOwnProperty(JSContext *cx, bool configured)
59353 TypeFlags nflags = TYPE_FLAG_OWN_PROPERTY | (configured ? TYPE_FLAG_CONFIGURED_PROPERTY : 0);
59355 if ((flags & nflags) == nflags)
59361 TypeConstraint *constraint = constraintList;
59362 while (constraint) {
59363 constraint->newPropertyState(cx, this);
59364 constraint = constraint->next;
59369 TypeSet::getObjectCount()
59372 uint32_t count = baseObjectCount();
59373 if (count > SET_ARRAY_SIZE)
59374 return HashSetCapacity(count);
59378 inline TypeObjectKey *
59379 TypeSet::getObject(unsigned i)
59382 if (baseObjectCount() == 1) {
59384 return (TypeObjectKey *) objectSet;
59386 return objectSet[i];
59390 TypeSet::getSingleObject(unsigned i)
59392 TypeObjectKey *key = getObject(i);
59393 return (uintptr_t(key) & 1) ? (JSObject *)(uintptr_t(key) ^ 1) : __null;
59396 inline TypeObject *
59397 TypeSet::getTypeObject(unsigned i)
59399 TypeObjectKey *key = getObject(i);
59400 return (key && !(uintptr_t(key) & 1)) ? (TypeObject *) key : __null;
59408 TypeCallsite::TypeCallsite(JSContext *cx, JSScript *script, jsbytecode *pc,
59409 bool isNew, unsigned argumentCount)
59410 : script(script), pc(pc), isNew(isNew), argumentCount(argumentCount),
59411 thisTypes(__null), returnTypes(__null)
59414 argumentTypes = cx->typeLifoAlloc().newArray<TypeSet*>(argumentCount);
59421 inline TypeObject::TypeObject(JSObject *proto, bool function, bool unknown)
59428 this->proto = proto;
59431 flags |= OBJECT_FLAG_FUNCTION;
59433 flags |= OBJECT_FLAG_UNKNOWN_MASK;
59435 InferSpew(ISpewOps, "newObject: %s", TypeObjectString(this));
59439 TypeObject::basePropertyCount() const
59441 return (flags & OBJECT_FLAG_PROPERTY_COUNT_MASK) >> OBJECT_FLAG_PROPERTY_COUNT_SHIFT;
59445 TypeObject::setBasePropertyCount(uint32_t count)
59448 flags = (flags & ~OBJECT_FLAG_PROPERTY_COUNT_MASK)
59449 | (count << OBJECT_FLAG_PROPERTY_COUNT_SHIFT);
59453 TypeObject::getProperty(JSContext *cx, jsid id, bool assign)
59460 uint32_t propertyCount = basePropertyCount();
59461 Property **pprop = HashSetInsert<jsid,Property,Property>
59462 (cx->compartment, propertySet, propertyCount, id);
59464 cx->compartment->types.setPendingNukeTypes(cx);
59469 setBasePropertyCount(propertyCount);
59470 if (!addProperty(cx, id, pprop)) {
59471 setBasePropertyCount(0);
59472 propertySet = __null;
59475 if (propertyCount == OBJECT_FLAG_PROPERTY_COUNT_LIMIT) {
59477 TypeSet *types = TypeSet::make(cx, "propertyOverflow");
59478 types->addType(cx, Type::UnknownType());
59483 TypeSet *types = &(*pprop)->types;
59486 types->setOwnProperty(cx, false);
59492 TypeObject::maybeGetProperty(JSContext *cx, jsid id)
59498 Property *prop = HashSetLookup<jsid,Property,Property>
59499 (propertySet, basePropertyCount(), id);
59501 return prop ? &prop->types : __null;
59505 TypeObject::getPropertyCount()
59507 uint32_t count = basePropertyCount();
59508 if (count > SET_ARRAY_SIZE)
59509 return HashSetCapacity(count);
59514 TypeObject::getProperty(unsigned i)
59517 if (basePropertyCount() == 1) {
59519 return (Property *) propertySet;
59521 return propertySet[i];
59525 TypeObject::setFlagsFromKey(JSContext *cx, JSProtoKey key)
59527 TypeObjectFlags flags = 0;
59530 case JSProto_Function:
59534 case JSProto_Object:
59535 flags = OBJECT_FLAG_NON_DENSE_ARRAY
59536 | OBJECT_FLAG_NON_PACKED_ARRAY
59537 | OBJECT_FLAG_NON_TYPED_ARRAY;
59540 case JSProto_Array:
59541 flags = OBJECT_FLAG_NON_TYPED_ARRAY;
59547 # 1333 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsinferinlines.h"
59549 flags = OBJECT_FLAG_NON_DENSE_ARRAY
59550 | OBJECT_FLAG_NON_PACKED_ARRAY;
59554 if (!hasAllFlags(flags))
59555 setFlags(cx, flags);
59559 TypeObject::getGlobal()
59562 return &singleton->global();
59563 if (interpretedFunction && interpretedFunction->script()->compileAndGo)
59564 return &interpretedFunction->global();
59569 TypeObject::writeBarrierPre(TypeObject *type)
59575 JSCompartment *comp = type->compartment();
59576 if (comp->needsBarrier()) {
59577 TypeObject *tmp = type;
59578 MarkTypeObjectUnbarriered(comp->barrierTracer(), &tmp, "write barrier");
59585 TypeObject::writeBarrierPost(TypeObject *type, void *addr)
59590 TypeObject::readBarrier(TypeObject *type)
59593 JSCompartment *comp = type->compartment();
59594 if (comp->needsBarrier()) {
59595 TypeObject *tmp = type;
59596 MarkTypeObjectUnbarriered(comp->barrierTracer(), &tmp, "read barrier");
59603 TypeNewScript::writeBarrierPre(TypeNewScript *newScript)
59609 JSCompartment *comp = newScript->fun->compartment();
59610 if (comp->needsBarrier()) {
59611 MarkObject(comp->barrierTracer(), &newScript->fun, "write barrier");
59612 MarkShape(comp->barrierTracer(), &newScript->shape, "write barrier");
59618 TypeNewScript::writeBarrierPost(TypeNewScript *newScript, void *addr)
59623 Property::Property(jsid id)
59629 Property::Property(const Property &o)
59630 : id(o.id.get()), types(o.types)
59637 JSScript::ensureHasTypes(JSContext *cx)
59639 return types || makeTypes(cx);
59643 JSScript::ensureRanAnalysis(JSContext *cx, JSObject *scope)
59645 JSScript *self = this;
59646 JS::SkipRoot root(cx, &self);
59648 if (!self->ensureHasTypes(cx))
59650 if (!self->types->hasScope()) {
59651 js::RootedObject scopeRoot(cx, scope);
59652 if (!js::types::TypeScript::SetScope(cx, self, scope))
59656 if (!self->hasAnalysis() && !self->makeAnalysis(cx))
59663 JSScript::ensureRanInference(JSContext *cx)
59665 if (!ensureRanAnalysis(cx, __null))
59667 if (!analysis()->ranInference()) {
59668 js::types::AutoEnterTypeInference enter(cx);
59669 analysis()->analyzeTypes(cx);
59671 return !analysis()->OOM() &&
59672 !cx->compartment->types.pendingNukeTypes;
59676 JSScript::hasAnalysis()
59678 return types && types->analysis;
59681 inline js::analyze::ScriptAnalysis *
59682 JSScript::analysis()
59685 return types->analysis;
59689 JSScript::clearAnalysis()
59692 types->analysis = __null;
59696 js::analyze::ScriptAnalysis::addPushedType(JSContext *cx, uint32_t offset, uint32_t which,
59697 js::types::Type type)
59699 js::types::TypeSet *pushed = pushedTypes(offset, which);
59700 pushed->addType(cx, type);
59703 inline js::types::TypeObject *
59704 JSCompartment::getEmptyType(JSContext *cx)
59706 if (!emptyTypeObject)
59707 emptyTypeObject = types.newTypeObject(cx, __null, JSProto_Object, __null, true);
59708 return emptyTypeObject;
59710 # 44 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
59712 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsscriptinlines.h" 1
59713 # 46 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
59715 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier-inl.h" 1
59716 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier-inl.h"
59717 #define jsgc_barrier_inl_h___
59722 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl-inl.h" 1
59723 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier-inl.h" 2
59724 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String-inl.h" 1
59725 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String-inl.h"
59726 #define String_inl_h__
59729 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsprobes.h" 1
59730 # 13 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String-inl.h" 2
59733 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String.h" 1
59734 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String-inl.h" 2
59736 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsgcinlines.h" 1
59737 # 18 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String-inl.h" 2
59738 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 1
59739 # 19 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String-inl.h" 2
59740 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier-inl.h" 1
59741 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String-inl.h" 2
59744 JSString::writeBarrierPre(JSString *str)
59750 JSCompartment *comp = str->compartment();
59751 if (comp->needsBarrier()) {
59752 JSString *tmp = str;
59753 MarkStringUnbarriered(comp->barrierTracer(), &tmp, "write barrier");
59760 JSString::writeBarrierPost(JSString *str, void *addr)
59765 JSString::needWriteBarrierPre(JSCompartment *comp)
59768 return comp->needsBarrier();
59775 JSString::readBarrier(JSString *str)
59778 JSCompartment *comp = str->compartment();
59779 if (comp->needsBarrier()) {
59780 JSString *tmp = str;
59781 MarkStringUnbarriered(comp->barrierTracer(), &tmp, "read barrier");
59787 __attribute__((always_inline)) inline bool
59788 JSString::validateLength(JSContext *cx, size_t length)
59790 if ((__builtin_expect((length > JSString::MAX_LENGTH), 0))) {
59791 js_ReportAllocationOverflow(cx);
59798 __attribute__((always_inline)) inline void
59799 JSRope::init(JSString *left, JSString *right, size_t length)
59801 d.lengthAndFlags = buildLengthAndFlags(length, ROPE_BIT);
59803 d.s.u2.right = right;
59804 JSString::writeBarrierPost(d.u1.left, &d.u1.left);
59805 JSString::writeBarrierPost(d.s.u2.right, &d.s.u2.right);
59808 __attribute__((always_inline)) inline JSRope *
59809 JSRope::new_(JSContext *cx, js::HandleString left, js::HandleString right, size_t length)
59811 if (!validateLength(cx, length))
59813 JSRope *str = (JSRope *)js_NewGCString(cx);
59816 str->init(left, right, length);
59821 JSRope::markChildren(JSTracer *trc)
59823 js::gc::MarkStringUnbarriered(trc, &d.u1.left, "left child");
59824 js::gc::MarkStringUnbarriered(trc, &d.s.u2.right, "right child");
59827 __attribute__((always_inline)) inline void
59828 JSDependentString::init(JSLinearString *base, const jschar *chars, size_t length)
59831 d.lengthAndFlags = buildLengthAndFlags(length, DEPENDENT_FLAGS);
59832 d.u1.chars = chars;
59833 d.s.u2.base = base;
59834 JSString::writeBarrierPost(d.s.u2.base, &d.s.u2.base);
59837 __attribute__((always_inline)) inline JSDependentString *
59838 JSDependentString::new_(JSContext *cx, JSLinearString *base_, const jschar *chars, size_t length)
59840 JS::Rooted<JSLinearString*> base(cx, base_);
59843 while (base->isDependent())
59844 base = base->asDependent().base();
59855 JS::SkipRoot charsRoot(cx, &chars);
59857 JSDependentString *str = (JSDependentString *)js_NewGCString(cx);
59860 str->init(base, chars, length);
59865 JSString::markBase(JSTracer *trc)
59868 js::gc::MarkStringUnbarriered(trc, &d.s.u2.base, "base");
59871 inline js::PropertyName *
59872 JSFlatString::toPropertyName(JSContext *cx)
59879 return asAtom().asPropertyName();
59880 JSAtom *atom = js_AtomizeString(cx, this);
59883 return atom->asPropertyName();
59886 __attribute__((always_inline)) inline void
59887 JSFixedString::init(const jschar *chars, size_t length)
59889 d.lengthAndFlags = buildLengthAndFlags(length, FIXED_FLAGS);
59890 d.u1.chars = chars;
59893 __attribute__((always_inline)) inline JSFixedString *
59894 JSFixedString::new_(JSContext *cx, const jschar *chars, size_t length)
59898 if (!validateLength(cx, length))
59900 JSFixedString *str = (JSFixedString *)js_NewGCString(cx);
59903 str->init(chars, length);
59907 __attribute__((always_inline)) inline JSAtom *
59908 JSFixedString::morphAtomizedStringIntoAtom()
59910 d.lengthAndFlags = buildLengthAndFlags(length(), NON_STATIC_ATOM_FLAGS);
59914 __attribute__((always_inline)) inline JSInlineString *
59915 JSInlineString::new_(JSContext *cx)
59917 return (JSInlineString *)js_NewGCString(cx);
59920 __attribute__((always_inline)) inline jschar *
59921 JSInlineString::init(size_t length)
59923 d.lengthAndFlags = buildLengthAndFlags(length, FIXED_FLAGS);
59924 d.u1.chars = d.inlineStorage;
59926 return d.inlineStorage;
59929 __attribute__((always_inline)) inline void
59930 JSInlineString::resetLength(size_t length)
59932 d.lengthAndFlags = buildLengthAndFlags(length, FIXED_FLAGS);
59936 __attribute__((always_inline)) inline JSShortString *
59937 JSShortString::new_(JSContext *cx)
59939 return js_NewGCShortString(cx);
59942 __attribute__((always_inline)) inline void
59943 JSShortString::initAtOffsetInBuffer(const jschar *chars, size_t length)
59947 d.lengthAndFlags = buildLengthAndFlags(length, FIXED_FLAGS);
59948 d.u1.chars = chars;
59951 __attribute__((always_inline)) inline void
59952 JSExternalString::init(const jschar *chars, size_t length, const JSStringFinalizer *fin)
59956 d.lengthAndFlags = buildLengthAndFlags(length, FIXED_FLAGS);
59957 d.u1.chars = chars;
59958 d.s.u2.externalFinalizer = fin;
59961 __attribute__((always_inline)) inline JSExternalString *
59962 JSExternalString::new_(JSContext *cx, const jschar *chars, size_t length,
59963 const JSStringFinalizer *fin)
59967 if (!validateLength(cx, length))
59969 JSExternalString *str = js_NewGCExternalString(cx);
59972 str->init(chars, length, fin);
59973 cx->runtime->updateMallocCounter(cx, (length + 1) * sizeof(jschar));
59978 js::StaticStrings::fitsInSmallChar(jschar c)
59980 return c < SMALL_CHAR_LIMIT && toSmallChar[c] != INVALID_SMALL_CHAR;
59984 js::StaticStrings::hasUnit(jschar c)
59986 return c < UNIT_STATIC_LIMIT;
59990 js::StaticStrings::getUnit(jschar c)
59993 return unitStaticTable[c];
59997 js::StaticStrings::hasUint(uint32_t u)
59999 return u < INT_STATIC_LIMIT;
60003 js::StaticStrings::getUint(uint32_t u)
60006 return intStaticTable[u];
60010 js::StaticStrings::hasInt(int32_t i)
60012 return uint32_t(i) < INT_STATIC_LIMIT;
60016 js::StaticStrings::getInt(int32_t i)
60019 return getUint(uint32_t(i));
60022 inline JSLinearString *
60023 js::StaticStrings::getUnitStringForElement(JSContext *cx, JSString *str, size_t index)
60026 const jschar *chars = str->getChars(cx);
60029 jschar c = chars[index];
60030 if (c < UNIT_STATIC_LIMIT)
60032 return js_NewDependentString(cx, str, index, 1);
60036 js::StaticStrings::getLength2(jschar c1, jschar c2)
60040 size_t index = (((size_t)toSmallChar[c1]) << 6) + toSmallChar[c2];
60041 return length2StaticTable[index];
60045 js::StaticStrings::getLength2(uint32_t i)
60048 return getLength2('0' + i / 10, '0' + i % 10);
60053 js::StaticStrings::lookup(const jschar *chars, size_t length)
60057 if (chars[0] < UNIT_STATIC_LIMIT)
60058 return getUnit(chars[0]);
60061 if (fitsInSmallChar(chars[0]) && fitsInSmallChar(chars[1]))
60062 return getLength2(chars[0], chars[1]);
60071 typedef int moz_static_assert111[(INT_STATIC_LIMIT <= 999) ? 1 : -1];
60072 if ('1' <= chars[0] && chars[0] <= '9' &&
60073 '0' <= chars[1] && chars[1] <= '9' &&
60074 '0' <= chars[2] && chars[2] <= '9') {
60075 int i = (chars[0] - '0') * 100 +
60076 (chars[1] - '0') * 10 +
60079 if (unsigned(i) < INT_STATIC_LIMIT)
60088 __attribute__((always_inline)) inline void
60089 JSString::finalize(js::FreeOp *fop)
60095 asFlat().finalize(fop);
60101 JSFlatString::finalize(js::FreeOp *fop)
60109 if (chars() != d.inlineStorage)
60110 fop->free_(const_cast<jschar *>(chars()));
60114 JSShortString::finalize(js::FreeOp *fop)
60120 JSAtom::finalize(js::FreeOp *fop)
60123 if (getAllocKind() == js::gc::FINALIZE_STRING)
60124 JSFlatString::finalize(fop);
60130 JSExternalString::finalize(js::FreeOp *fop)
60132 const JSStringFinalizer *fin = externalFinalizer();
60133 fin->finalize(fin, const_cast<jschar *>(chars()));
60138 static __attribute__((always_inline)) inline JSFixedString *
60139 NewShortString(JSContext *cx, const jschar *chars, size_t length)
60141 SkipRoot skip(cx, &chars);
60148 JSInlineString *str = JSInlineString::lengthFits(length)
60149 ? JSInlineString::new_(cx)
60150 : JSShortString::new_(cx);
60154 jschar *storage = str->init(length);
60155 PodCopy(storage, chars, length);
60156 storage[length] = 0;
60157 Probes::createString(cx, str, length);
60162 # 16 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier-inl.h" 2
60167 EncapsulatedValue::writeBarrierPre(const Value &value)
60170 if (value.isMarkable()) {
60171 js::gc::Cell *cell = (js::gc::Cell *)value.toGCThing();
60172 writeBarrierPre(cell->compartment(), value);
60178 EncapsulatedValue::writeBarrierPre(JSCompartment *comp, const Value &value)
60181 if (comp->needsBarrier()) {
60183 js::gc::MarkValueUnbarriered(comp->barrierTracer(), &tmp, "write barrier");
60190 EncapsulatedValue::pre()
60192 writeBarrierPre(value);
60196 EncapsulatedValue::pre(JSCompartment *comp)
60198 writeBarrierPre(comp, value);
60202 HeapValue::HeapValue()
60203 : EncapsulatedValue(UndefinedValue())
60209 HeapValue::HeapValue(const Value &v)
60210 : EncapsulatedValue(v)
60217 HeapValue::HeapValue(const HeapValue &v)
60218 : EncapsulatedValue(v.value)
60225 HeapValue::~HeapValue()
60231 HeapValue::init(const Value &v)
60239 HeapValue::init(JSCompartment *comp, const Value &v)
60247 HeapValue::operator=(const Value &v)
60257 HeapValue::operator=(const HeapValue &v)
60267 HeapValue::set(JSCompartment *comp, const Value &v)
60269 # 130 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/gc/Barrier-inl.h"
60277 HeapValue::writeBarrierPost(const Value &value, Value *addr)
60284 HeapValue::writeBarrierPost(JSCompartment *comp, const Value &value, Value *addr)
60293 writeBarrierPost(value, &value);
60297 HeapValue::post(JSCompartment *comp)
60299 writeBarrierPost(comp, value, &value);
60303 RelocatableValue::RelocatableValue()
60304 : EncapsulatedValue(UndefinedValue())
60309 RelocatableValue::RelocatableValue(const Value &v)
60310 : EncapsulatedValue(v)
60317 RelocatableValue::RelocatableValue(const RelocatableValue &v)
60318 : EncapsulatedValue(v.value)
60325 RelocatableValue::~RelocatableValue()
60331 inline RelocatableValue &
60332 RelocatableValue::operator=(const Value &v)
60341 inline RelocatableValue &
60342 RelocatableValue::operator=(const RelocatableValue &v)
60352 RelocatableValue::post()
60359 RelocatableValue::post(JSCompartment *comp)
60366 RelocatableValue::relocate()
60373 HeapSlot::HeapSlot(JSObject *obj, uint32_t slot, const Value &v)
60374 : EncapsulatedValue(v)
60381 HeapSlot::HeapSlot(JSObject *obj, uint32_t slot, const HeapSlot &s)
60382 : EncapsulatedValue(s.value)
60389 HeapSlot::~HeapSlot()
60395 HeapSlot::init(JSObject *obj, uint32_t slot, const Value &v)
60402 HeapSlot::init(JSCompartment *comp, JSObject *obj, uint32_t slot, const Value &v)
60405 post(comp, obj, slot);
60409 HeapSlot::set(JSObject *obj, uint32_t slot, const Value &v)
60421 HeapSlot::set(JSCompartment *comp, JSObject *obj, uint32_t slot, const Value &v)
60430 post(comp, obj, slot);
60434 HeapSlot::writeBarrierPost(JSObject *obj, uint32_t slot)
60439 HeapSlot::writeBarrierPost(JSCompartment *comp, JSObject *obj, uint32_t slotno)
60444 HeapSlot::post(JSObject *owner, uint32_t slot)
60446 HeapSlot::writeBarrierPost(owner, slot);
60450 HeapSlot::post(JSCompartment *comp, JSObject *owner, uint32_t slot)
60452 HeapSlot::writeBarrierPost(comp, owner, slot);
60456 EncapsulatedId::pre()
60459 if (JSID_IS_OBJECT(value)) {
60460 JSObject *obj = JSID_TO_OBJECT(value);
60461 JSCompartment *comp = obj->compartment();
60462 if (comp->needsBarrier()) {
60463 js::gc::MarkObjectUnbarriered(comp->barrierTracer(), &obj, "write barrier");
60466 } else if (JSID_IS_STRING(value)) {
60467 JSString *str = JSID_TO_STRING(value);
60468 JSCompartment *comp = str->compartment();
60469 if (comp->needsBarrier()) {
60470 js::gc::MarkStringUnbarriered(comp->barrierTracer(), &str, "write barrier");
60478 RelocatableId::~RelocatableId()
60483 inline RelocatableId &
60484 RelocatableId::operator=(jsid id)
60493 inline RelocatableId &
60494 RelocatableId::operator=(const RelocatableId &v)
60496 if (v.value != value)
60504 HeapId::HeapId(jsid id)
60505 : EncapsulatedId(id)
60518 HeapId::init(jsid id)
60531 HeapId::operator=(jsid id)
60542 HeapId::operator=(const HeapId &v)
60544 if (v.value != value)
60552 inline const Value &
60553 ReadBarrieredValue::get() const
60555 if (value.isObject())
60556 JSObject::readBarrier(&value.toObject());
60557 else if (value.isString())
60558 JSString::readBarrier(value.toString());
60566 ReadBarrieredValue::operator const Value &() const
60572 ReadBarrieredValue::toObject() const
60574 return get().toObject();
60578 # 48 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
60581 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics-inl.h" 1
60582 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics-inl.h"
60583 #define RegExpStatics_inl_h__
60585 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics.h" 1
60586 # 12 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics-inl.h" 2
60592 inline js::RegExpStatics *
60593 js::GlobalObject::getRegExpStatics() const
60595 JSObject &resObj = getSlot(REGEXP_STATICS).toObject();
60596 return static_cast<RegExpStatics *>(resObj.getPrivate());
60600 SizeOfRegExpStaticsData(const JSObject *obj, JSMallocSizeOfFun mallocSizeOf)
60602 return mallocSizeOf(obj->getPrivate());
60606 RegExpStatics::RegExpStatics()
60607 : bufferLink(__null),
60614 RegExpStatics::createDependent(JSContext *cx, size_t start, size_t end, Value *out) const
60618 JSString *str = js_NewDependentString(cx, matchPairsInput, start, end - start);
60621 *out = StringValue(str);
60626 RegExpStatics::createPendingInput(JSContext *cx, Value *out) const
60628 out->setString(pendingInput ? pendingInput.get() : cx->runtime->emptyString);
60633 RegExpStatics::makeMatch(JSContext *cx, size_t checkValidIndex, size_t pairNum, Value *out) const
60635 if (checkValidIndex / 2 >= pairCount() || matchPairs[checkValidIndex] < 0) {
60636 out->setString(cx->runtime->emptyString);
60639 return createDependent(cx, get(pairNum, 0), get(pairNum, 1), out);
60643 RegExpStatics::createLastParen(JSContext *cx, Value *out) const
60645 if (pairCount() <= 1) {
60646 out->setString(cx->runtime->emptyString);
60649 size_t num = pairCount() - 1;
60650 int start = get(num, 0);
60651 int end = get(num, 1);
60653 out->setString(cx->runtime->emptyString);
60658 return createDependent(cx, start, end, out);
60662 RegExpStatics::createLeftContext(JSContext *cx, Value *out) const
60664 if (!pairCount()) {
60665 out->setString(cx->runtime->emptyString);
60668 if (matchPairs[0] < 0) {
60669 *out = UndefinedValue();
60672 return createDependent(cx, 0, matchPairs[0], out);
60676 RegExpStatics::createRightContext(JSContext *cx, Value *out) const
60678 if (!pairCount()) {
60679 out->setString(cx->runtime->emptyString);
60682 if (matchPairs[1] < 0) {
60683 *out = UndefinedValue();
60686 return createDependent(cx, matchPairs[1], matchPairsInput->length(), out);
60690 RegExpStatics::getParen(size_t pairNum, JSSubString *out) const
60692 checkParenNum(pairNum);
60693 if (!pairIsPresent(pairNum)) {
60694 *out = js_EmptySubString;
60697 out->chars = matchPairsInput->chars() + get(pairNum, 0);
60698 out->length = getParenLength(pairNum);
60702 RegExpStatics::getLastMatch(JSSubString *out) const
60704 if (!pairCount()) {
60705 *out = js_EmptySubString;
60709 out->chars = matchPairsInput->chars() + get(0, 0);
60711 out->length = get(0, 1) - get(0, 0);
60715 RegExpStatics::getLastParen(JSSubString *out) const
60717 size_t pc = pairCount();
60720 *out = js_EmptySubString;
60723 getParen(pc - 1, out);
60727 RegExpStatics::getLeftContext(JSSubString *out) const
60729 if (!pairCount()) {
60730 *out = js_EmptySubString;
60733 out->chars = matchPairsInput->chars();
60734 out->length = get(0, 0);
60738 RegExpStatics::getRightContext(JSSubString *out) const
60740 if (!pairCount()) {
60741 *out = js_EmptySubString;
60744 out->chars = matchPairsInput->chars() + get(0, 1);
60746 out->length = matchPairsInput->length() - get(0, 1);
60750 RegExpStatics::copyTo(RegExpStatics &dst)
60752 dst.matchPairs.clear();
60754 dst.matchPairs.infallibleAppend(matchPairs);
60755 dst.matchPairsInput = matchPairsInput;
60756 dst.pendingInput = pendingInput;
60761 RegExpStatics::aboutToWrite()
60763 if (bufferLink && !bufferLink->copied) {
60764 copyTo(*bufferLink);
60765 bufferLink->copied = true;
60770 RegExpStatics::restore()
60772 if (bufferLink->copied)
60773 bufferLink->copyTo(*this);
60774 bufferLink = bufferLink->bufferLink;
60778 RegExpStatics::updateFromMatchPairs(JSContext *cx, JSLinearString *input, MatchPairs *newPairs)
60782 BarrieredSetPair<JSString, JSLinearString>(cx->compartment,
60783 pendingInput, input,
60784 matchPairsInput, input);
60786 if (!matchPairs.resizeUninitialized(2 * newPairs->pairCount())) {
60787 js_ReportOutOfMemory(cx);
60791 for (size_t i = 0; i < newPairs->pairCount(); ++i) {
60792 matchPairs[2 * i] = newPairs->pair(i).start;
60793 matchPairs[2 * i + 1] = newPairs->pair(i).limit;
60800 RegExpStatics::clear()
60803 flags = RegExpFlag(0);
60804 pendingInput = __null;
60805 matchPairsInput = __null;
60806 matchPairs.clear();
60810 RegExpStatics::setPendingInput(JSString *newInput)
60813 pendingInput = newInput;
60816 PreserveRegExpStatics::~PreserveRegExpStatics()
60818 original->restore();
60822 RegExpStatics::setMultiline(JSContext *cx, bool enabled)
60826 flags = RegExpFlag(flags | MultilineFlag);
60829 flags = RegExpFlag(flags & ~MultilineFlag);
60834 RegExpStatics::markFlagsSet(JSContext *cx)
60836 # 269 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/RegExpStatics-inl.h"
60837 GlobalObject *global = GetGlobalForScopeChain(cx);
60840 types::MarkTypeObjectFlags(cx, global, types::OBJECT_FLAG_REGEXP_FLAGS_SET);
60844 RegExpStatics::reset(JSContext *cx, JSString *newInput, bool newMultiline)
60848 pendingInput = newInput;
60849 setMultiline(cx, newMultiline);
60855 inline js::RegExpStatics *
60856 JSContext::regExpStatics()
60858 return js::GetGlobalForScopeChain(this)->getRegExpStatics();
60860 # 51 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
60861 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/String-inl.h" 1
60862 # 52 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h" 2
60865 JSObject::enumerate(JSContext *cx, JSIterateOp iterop, js::Value *statep, jsid *idp)
60867 JSNewEnumerateOp op = getOps()->enumerate;
60868 return (op ? op : JS_EnumerateState)(cx, js::RootedObject(cx, this), iterop, statep, idp);
60872 JSObject::defaultValue(JSContext *cx, JSType hint, js::Value *vp)
60874 js::RootedObject self(cx, this);
60876 JSConvertOp op = getClass()->convert;
60878 if (op == JS_ConvertStub)
60879 ok = js::DefaultValue(cx, self, hint, vp);
60881 ok = op(cx, self, hint, vp);
60887 JSObject::typeOf(JSContext *cx)
60889 js::TypeOfOp op = getOps()->typeOf;
60890 return (op ? op : js::baseops::TypeOf)(cx, js::RootedObject(cx, this));
60894 JSObject::thisObject(JSContext *cx)
60896 JSObjectOp op = getOps()->thisObject;
60897 return op ? op(cx, js::RootedObject(cx, this)) : this;
60901 JSObject::setGeneric(JSContext *cx, js::HandleId id, js::Value *vp, JSBool strict)
60903 if (getOps()->setGeneric)
60904 return nonNativeSetProperty(cx, id, vp, strict);
60905 return js::baseops::SetPropertyHelper(cx,
60906 js::RootedObject(cx, this),
60907 id, 0, vp, strict);
60911 JSObject::setProperty(JSContext *cx, js::PropertyName *name, js::Value *vp, JSBool strict)
60913 return setGeneric(cx, js::RootedId(cx, js::NameToId(name)), vp, strict);
60917 JSObject::setElement(JSContext *cx, uint32_t index, js::Value *vp, JSBool strict)
60919 if (getOps()->setElement)
60920 return nonNativeSetElement(cx, index, vp, strict);
60921 return js::baseops::SetElementHelper(cx, js::RootedObject(cx, this), index, 0, vp, strict);
60925 JSObject::setSpecial(JSContext *cx, js::SpecialId sid, js::Value *vp, JSBool strict)
60927 return setGeneric(cx, js::RootedId(cx, SPECIALID_TO_JSID(sid)), vp, strict);
60931 JSObject::setGenericAttributes(JSContext *cx, js::HandleId id, unsigned *attrsp)
60933 js::types::MarkTypePropertyConfigured(cx, this, id);
60934 js::GenericAttributesOp op = getOps()->setGenericAttributes;
60935 return (op ? op : js::baseops::SetAttributes)(cx, js::RootedObject(cx, this), id, attrsp);
60939 JSObject::setPropertyAttributes(JSContext *cx, js::PropertyName *name, unsigned *attrsp)
60941 return setGenericAttributes(cx, js::RootedId(cx, js::NameToId(name)), attrsp);
60945 JSObject::setElementAttributes(JSContext *cx, uint32_t index, unsigned *attrsp)
60947 js::ElementAttributesOp op = getOps()->setElementAttributes;
60948 return (op ? op : js::baseops::SetElementAttributes)(cx, js::RootedObject(cx, this), index, attrsp);
60952 JSObject::setSpecialAttributes(JSContext *cx, js::SpecialId sid, unsigned *attrsp)
60954 return setGenericAttributes(cx, js::RootedId(cx, SPECIALID_TO_JSID(sid)), attrsp);
60958 JSObject::changePropertyAttributes(JSContext *cx, js::Shape *shape, unsigned attrs)
60960 return !!changeProperty(cx, shape, attrs, 0, shape->getter(), shape->setter());
60964 JSObject::getGeneric(JSContext *cx, js::HandleObject receiver, js::HandleId id, js::Value *vp)
60966 js::RootedObject self(cx, this);
60968 js::GenericIdOp op = getOps()->getGeneric;
60970 if (!op(cx, self, receiver, id, vp))
60973 if (!js::baseops::GetProperty(cx, self, receiver, id, vp))
60980 JSObject::getProperty(JSContext *cx, js::HandleObject receiver, js::PropertyName *name, js::Value *vp)
60982 return getGeneric(cx, receiver, js::RootedId(cx, js::NameToId(name)), vp);
60986 JSObject::getGeneric(JSContext *cx, js::HandleId id, js::Value *vp)
60988 return getGeneric(cx, js::RootedObject(cx, this), id, vp);
60992 JSObject::getProperty(JSContext *cx, js::PropertyName *name, js::Value *vp)
60994 return getGeneric(cx, js::RootedId(cx, js::NameToId(name)), vp);
60998 JSObject::deleteProperty(JSContext *cx, js::HandlePropertyName name, js::Value *rval, bool strict)
61000 jsid id = js::NameToId(name);
61001 js::types::AddTypePropertyId(cx, this, id, js::types::Type::UndefinedType());
61002 js::types::MarkTypePropertyConfigured(cx, this, id);
61003 js::DeletePropertyOp op = getOps()->deleteProperty;
61004 return (op ? op : js::baseops::DeleteProperty)(cx, js::RootedObject(cx, this), name, rval, strict);
61008 JSObject::deleteElement(JSContext *cx, uint32_t index, js::Value *rval, bool strict)
61010 js::RootedObject self(cx, this);
61013 if (!js::IndexToId(cx, index, &id))
61015 js::types::AddTypePropertyId(cx, self, id, js::types::Type::UndefinedType());
61016 js::types::MarkTypePropertyConfigured(cx, self, id);
61017 js::DeleteElementOp op = self->getOps()->deleteElement;
61018 return (op ? op : js::baseops::DeleteElement)(cx, self, index, rval, strict);
61022 JSObject::deleteSpecial(JSContext *cx, js::HandleSpecialId sid, js::Value *rval, bool strict)
61024 jsid id = SPECIALID_TO_JSID(sid);
61025 js::types::AddTypePropertyId(cx, this, id, js::types::Type::UndefinedType());
61026 js::types::MarkTypePropertyConfigured(cx, this, id);
61027 js::DeleteSpecialOp op = getOps()->deleteSpecial;
61028 return (op ? op : js::baseops::DeleteSpecial)(cx, js::RootedObject(cx, this), sid, rval, strict);
61032 JSObject::finalize(js::FreeOp *fop)
61034 js::Probes::finalizeObject(this);
61036 if (!fop->onBackgroundThread()) {
61042 js::Class *clasp = getClass();
61043 if (clasp->finalize)
61044 clasp->finalize(fop, this);
61051 JSObject::getParent() const
61053 return lastProperty()->getObjectParent();
61057 JSObject::enclosingScope()
61060 ? &asScope().enclosingScope()
61062 ? &asDebugScope().enclosingScope()
61067 JSObject::isFixedSlot(size_t slot)
61070 return slot < numFixedSlots();
61074 JSObject::dynamicSlotIndex(size_t slot)
61077 return slot - numFixedSlots();
61081 JSObject::setLastPropertyInfallible(const js::Shape *shape)
61089 shape_ = const_cast<js::Shape *>(shape);
61093 JSObject::removeLastProperty(JSContext *cx)
61096 ((void)(setLastProperty(cx, lastProperty()->previous())));
61100 JSObject::canRemoveLastProperty()
61110 const js::Shape *previous = lastProperty()->previous();
61111 return previous->getObjectParent() == lastProperty()->getObjectParent()
61112 && previous->getObjectFlags() == lastProperty()->getObjectFlags();
61115 inline const js::HeapSlot *
61116 JSObject::getRawSlots()
61122 inline const js::Value &
61123 JSObject::getReservedSlot(unsigned index) const
61126 return getSlot(index);
61129 inline js::HeapSlot &
61130 JSObject::getReservedSlotRef(unsigned index)
61133 return getSlotRef(index);
61137 JSObject::setReservedSlot(unsigned index, const js::Value &v)
61144 JSObject::initReservedSlot(unsigned index, const js::Value &v)
61147 initSlot(index, v);
61151 JSObject::prepareSlotRangeForOverwrite(size_t start, size_t end)
61153 for (size_t i = start; i < end; i++)
61154 getSlotAddressUnchecked(i)->js::HeapSlot::~HeapSlot();
61158 JSObject::prepareElementRangeForOverwrite(size_t start, size_t end)
61162 for (size_t i = start; i < end; i++)
61163 elements[i].js::HeapSlot::~HeapSlot();
61167 JSObject::getArrayLength() const
61170 return getElementsHeader()->length;
61174 JSObject::setArrayLength(JSContext *cx, uint32_t length)
61178 if (length > (2147483647)) {
61183 js::types::MarkTypeObjectFlags(cx, this,
61184 js::types::OBJECT_FLAG_NON_PACKED_ARRAY |
61185 js::types::OBJECT_FLAG_NON_DENSE_ARRAY);
61186 jsid lengthId = js::NameToId(cx->runtime->atomState.lengthAtom);
61187 js::types::AddTypePropertyId(cx, this, lengthId,
61188 js::types::Type::DoubleType());
61191 getElementsHeader()->length = length;
61195 JSObject::setDenseArrayLength(uint32_t length)
61200 getElementsHeader()->length = length;
61204 JSObject::setDenseArrayInitializedLength(uint32_t length)
61208 prepareElementRangeForOverwrite(length, getElementsHeader()->initializedLength);
61209 getElementsHeader()->initializedLength = length;
61213 JSObject::getDenseArrayCapacity()
61216 return getElementsHeader()->capacity;
61220 JSObject::ensureElements(JSContext *cx, uint32_t capacity)
61222 if (capacity > getDenseArrayCapacity())
61223 return growElements(cx, capacity);
61228 JSObject::setDenseArrayElement(unsigned idx, const js::Value &val)
61231 elements[idx].set(this, idx, val);
61235 JSObject::initDenseArrayElement(unsigned idx, const js::Value &val)
61238 elements[idx].init(this, idx, val);
61242 JSObject::setDenseArrayElementWithType(JSContext *cx, unsigned idx, const js::Value &val)
61244 js::types::AddTypePropertyId(cx, this, ((jsid)0x2), val);
61245 setDenseArrayElement(idx, val);
61249 JSObject::initDenseArrayElementWithType(JSContext *cx, unsigned idx, const js::Value &val)
61251 js::types::AddTypePropertyId(cx, this, ((jsid)0x2), val);
61252 initDenseArrayElement(idx, val);
61256 JSObject::copyDenseArrayElements(unsigned dstStart, const js::Value *src, unsigned count)
61259 JSCompartment *comp = compartment();
61260 for (unsigned i = 0; i < count; ++i)
61261 elements[dstStart + i].set(comp, this, dstStart + i, src[i]);
61265 JSObject::initDenseArrayElements(unsigned dstStart, const js::Value *src, unsigned count)
61268 JSCompartment *comp = compartment();
61269 for (unsigned i = 0; i < count; ++i)
61270 elements[dstStart + i].init(comp, this, dstStart + i, src[i]);
61274 JSObject::moveDenseArrayElements(unsigned dstStart, unsigned srcStart, unsigned count)
61278 # 480 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h"
61279 JSCompartment *comp = compartment();
61280 if (comp->needsBarrier()) {
61281 if (dstStart < srcStart) {
61282 js::HeapSlot *dst = elements + dstStart;
61283 js::HeapSlot *src = elements + srcStart;
61284 for (unsigned i = 0; i < count; i++, dst++, src++)
61285 dst->set(comp, this, dst - elements, *src);
61287 js::HeapSlot *dst = elements + dstStart + count - 1;
61288 js::HeapSlot *src = elements + srcStart + count - 1;
61289 for (unsigned i = 0; i < count; i++, dst--, src--)
61290 dst->set(comp, this, dst - elements, *src);
61293 memmove(elements + dstStart, elements + srcStart, count * sizeof(js::HeapSlot));
61294 SlotRangeWriteBarrierPost(comp, this, dstStart, count);
61299 JSObject::moveDenseArrayElementsUnbarriered(unsigned dstStart, unsigned srcStart, unsigned count)
61306 memmove(elements + dstStart, elements + srcStart, count * sizeof(js::Value));
61310 JSObject::denseArrayHasInlineSlots() const
61313 return elements == fixedElements();
61322 static inline JSAtom *
61323 CallObjectLambdaName(JSFunction *fun)
61325 return (fun->flags & 0x08) ? fun->atom.get() : __null;
61330 inline const js::Value &
61331 JSObject::getDateUTCTime() const
61334 return getFixedSlot(JSSLOT_DATE_UTC_TIME);
61338 JSObject::setDateUTCTime(const js::Value &time)
61341 setFixedSlot(JSSLOT_DATE_UTC_TIME, time);
61344 inline js::NativeIterator *
61345 JSObject::getNativeIterator() const
61347 return (js::NativeIterator *) getPrivate();
61351 JSObject::setNativeIterator(js::NativeIterator *ni)
61358 inline JSLinearString *
61359 JSObject::getNamePrefix() const
61362 const js::Value &v = getSlot(JSSLOT_NAME_PREFIX);
61363 return !v.isUndefined() ? &v.toString()->asLinear() : __null;
61367 JSObject::getNamePrefixVal() const
61370 return getSlot(JSSLOT_NAME_PREFIX);
61374 JSObject::setNamePrefix(JSLinearString *prefix)
61377 setSlot(JSSLOT_NAME_PREFIX, prefix ? js::StringValue(prefix) : js::UndefinedValue());
61381 JSObject::clearNamePrefix()
61384 setSlot(JSSLOT_NAME_PREFIX, js::UndefinedValue());
61387 inline JSLinearString *
61388 JSObject::getNameURI() const
61391 const js::Value &v = getSlot(JSSLOT_NAME_URI);
61392 return !v.isUndefined() ? &v.toString()->asLinear() : __null;
61396 JSObject::getNameURIVal() const
61399 return getSlot(JSSLOT_NAME_URI);
61403 JSObject::setNameURI(JSLinearString *uri)
61406 setSlot(JSSLOT_NAME_URI, uri ? js::StringValue(uri) : js::UndefinedValue());
61410 JSObject::getNamespaceDeclared() const
61413 return getSlot(JSSLOT_NAMESPACE_DECLARED);
61417 JSObject::setNamespaceDeclared(jsval decl)
61420 setSlot(JSSLOT_NAMESPACE_DECLARED, decl);
61424 JSObject::getQNameLocalName() const
61427 const js::Value &v = getSlot(JSSLOT_QNAME_LOCAL_NAME);
61428 return !v.isUndefined() ? &v.toString()->asAtom() : __null;
61432 JSObject::getQNameLocalNameVal() const
61435 return getSlot(JSSLOT_QNAME_LOCAL_NAME);
61439 JSObject::setQNameLocalName(JSAtom *name)
61442 setSlot(JSSLOT_QNAME_LOCAL_NAME, name ? js::StringValue(name) : js::UndefinedValue());
61448 JSObject::setSingletonType(JSContext *cx)
61450 if (!cx->typeInferenceEnabled())
61456 js::types::TypeObject *type = cx->compartment->getLazyType(cx, getProto());
61464 inline js::types::TypeObject *
61465 JSObject::getType(JSContext *cx)
61473 JSObject::clearType(JSContext *cx)
61477 js::types::TypeObject *type = cx->compartment->getEmptyType(cx);
61486 JSObject::setType(js::types::TypeObject *newType)
61499 inline bool JSObject::setIteratedSingleton(JSContext *cx)
61501 return setFlag(cx, js::BaseShape::ITERATED_SINGLETON);
61504 inline bool JSObject::isSystem() const
61506 return lastProperty()->hasObjectFlag(js::BaseShape::SYSTEM);
61509 inline bool JSObject::setSystem(JSContext *cx)
61511 return setFlag(cx, js::BaseShape::SYSTEM);
61514 inline bool JSObject::setDelegate(JSContext *cx)
61516 return setFlag(cx, js::BaseShape::DELEGATE, GENERATE_SHAPE);
61519 inline bool JSObject::isVarObj()
61521 if (isDebugScope())
61522 return asDebugScope().scope().isVarObj();
61523 return lastProperty()->hasObjectFlag(js::BaseShape::VAROBJ);
61526 inline bool JSObject::setVarObj(JSContext *cx)
61528 return setFlag(cx, js::BaseShape::VAROBJ);
61531 inline bool JSObject::setWatched(JSContext *cx)
61533 return setFlag(cx, js::BaseShape::WATCHED, GENERATE_SHAPE);
61536 inline bool JSObject::hasUncacheableProto() const
61538 return lastProperty()->hasObjectFlag(js::BaseShape::UNCACHEABLE_PROTO);
61541 inline bool JSObject::setUncacheableProto(JSContext *cx)
61543 return setFlag(cx, js::BaseShape::UNCACHEABLE_PROTO, GENERATE_SHAPE);
61546 inline bool JSObject::isBoundFunction() const
61548 return lastProperty()->hasObjectFlag(js::BaseShape::BOUND_FUNCTION);
61551 inline bool JSObject::isIndexed() const
61553 return lastProperty()->hasObjectFlag(js::BaseShape::INDEXED);
61556 inline bool JSObject::watched() const
61558 return lastProperty()->hasObjectFlag(js::BaseShape::WATCHED);
61561 inline bool JSObject::hasSpecialEquality() const
61563 return !!getClass()->ext.equality;
61566 inline bool JSObject::isArguments() const { return isNormalArguments() || isStrictArguments(); }
61567 inline bool JSObject::isArrayBuffer() const { return hasClass(&js::ArrayBufferClass); }
61568 inline bool JSObject::isBlock() const { return hasClass(&js::BlockClass); }
61569 inline bool JSObject::isBoolean() const { return hasClass(&js::BooleanClass); }
61570 inline bool JSObject::isCall() const { return hasClass(&js::CallClass); }
61571 inline bool JSObject::isClonedBlock() const { return isBlock() && !!getProto(); }
61572 inline bool JSObject::isDataView() const { return hasClass(&js::DataViewClass); }
61573 inline bool JSObject::isDate() const { return hasClass(&js::DateClass); }
61574 inline bool JSObject::isDeclEnv() const { return hasClass(&js::DeclEnvClass); }
61575 inline bool JSObject::isElementIterator() const { return hasClass(&js::ElementIteratorClass); }
61576 inline bool JSObject::isError() const { return hasClass(&js::ErrorClass); }
61577 inline bool JSObject::isFunction() const { return hasClass(&js::FunctionClass); }
61578 inline bool JSObject::isFunctionProxy() const { return hasClass(&js::FunctionProxyClass); }
61579 inline bool JSObject::isGenerator() const { return hasClass(&js::GeneratorClass); }
61580 inline bool JSObject::isIterator() const { return hasClass(&js::IteratorClass); }
61581 inline bool JSObject::isNestedScope() const { return isBlock() || isWith(); }
61582 inline bool JSObject::isNormalArguments() const { return hasClass(&js::NormalArgumentsObjectClass); }
61583 inline bool JSObject::isNumber() const { return hasClass(&js::NumberClass); }
61584 inline bool JSObject::isObject() const { return hasClass(&js::ObjectClass); }
61585 inline bool JSObject::isPrimitive() const { return isNumber() || isString() || isBoolean(); }
61586 inline bool JSObject::isRegExp() const { return hasClass(&js::RegExpClass); }
61587 inline bool JSObject::isRegExpStatics() const { return hasClass(&js::RegExpStaticsClass); }
61588 inline bool JSObject::isScope() const { return isCall() || isDeclEnv() || isNestedScope(); }
61589 inline bool JSObject::isStaticBlock() const { return isBlock() && !getProto(); }
61590 inline bool JSObject::isStopIteration() const { return hasClass(&js::StopIterationClass); }
61591 inline bool JSObject::isStrictArguments() const { return hasClass(&js::StrictArgumentsObjectClass); }
61592 inline bool JSObject::isString() const { return hasClass(&js::StringClass); }
61593 inline bool JSObject::isTypedArray() const { return IsTypedArrayClass(getClass()); }
61594 inline bool JSObject::isWeakMap() const { return hasClass(&js::WeakMapClass); }
61595 inline bool JSObject::isWith() const { return hasClass(&js::WithClass); }
61598 JSObject::isDebugScope() const
61600 extern bool js_IsDebugScopeSlow(const JSObject *obj);
61601 return getClass() == &js::ObjectProxyClass && js_IsDebugScopeSlow(this);
61605 inline bool JSObject::isNamespace() const { return hasClass(&js::NamespaceClass); }
61606 inline bool JSObject::isXML() const { return hasClass(&js::XMLClass); }
61609 JSObject::isXMLId() const
61611 return hasClass(&js::QNameClass)
61612 || hasClass(&js::AttributeNameClass)
61613 || hasClass(&js::AnyNameClass);
61617 JSObject::isQName() const
61619 return hasClass(&js::QNameClass)
61620 || hasClass(&js::AttributeNameClass)
61621 || hasClass(&js::AnyNameClass);
61626 JSObject::create(JSContext *cx, js::gc::AllocKind kind,
61627 js::HandleShape shape, js::HandleTypeObject type, js::HeapSlot *slots)
61638 JSObject *obj = js_NewGCObject(cx, kind);
61642 obj->shape_.init(shape);
61643 obj->type_.init(type);
61644 obj->slots = slots;
61645 obj->elements = js::emptyObjectElements;
61647 const js::Class *clasp = shape->getObjectClass();
61648 if (clasp->hasPrivate())
61649 obj->privateRef(shape->numFixedSlots()) = __null;
61651 size_t span = shape->slotSpan();
61652 if (span && clasp != &js::ArrayBufferClass)
61653 obj->initializeSlotRange(0, span);
61659 JSObject::createDenseArray(JSContext *cx, js::gc::AllocKind kind,
61660 js::HandleShape shape, js::HandleTypeObject type,
61678 uint32_t capacity = js::gc::GetGCKindSlots(kind) - js::ObjectElements::VALUES_PER_HEADER;
61680 JSObject *obj = js_NewGCObject(cx, kind);
61682 js_ReportOutOfMemory(cx);
61686 obj->shape_.init(shape);
61687 obj->type_.init(type);
61688 obj->slots = __null;
61689 obj->setFixedElements();
61690 new (obj->getElementsHeader()) js::ObjectElements(capacity, length);
61696 JSObject::finish(js::FreeOp *fop)
61698 if (hasDynamicSlots())
61700 if (hasDynamicElements())
61701 fop->free_(getElementsHeader());
61705 JSObject::hasProperty(JSContext *cx, js::HandleId id, bool *foundp, unsigned flags)
61709 JSAutoResolveFlags rf(cx, flags);
61710 if (!lookupGeneric(cx, id, &pobj, &prop))
61717 JSObject::isCallable()
61719 return isFunction() || getClass()->call;
61722 inline JSPrincipals *
61723 JSObject::principals(JSContext *cx)
61725 if (JSObjectPrincipalsFinder find = cx->runtime->securityCallbacks->findObjectPrincipals)
61727 return cx->compartment ? cx->compartment->principals : __null;
61731 JSObject::nativeSetSlot(unsigned slot, const js::Value &value)
61735 return setSlot(slot, value);
61739 JSObject::nativeSetSlotWithType(JSContext *cx, const js::Shape *shape, const js::Value &value)
61741 nativeSetSlot(shape->slot(), value);
61742 js::types::AddTypePropertyId(cx, this, shape->propid(), value);
61746 JSObject::nativeContains(JSContext *cx, jsid id)
61748 return nativeLookup(cx, id) != __null;
61752 JSObject::nativeContains(JSContext *cx, const js::Shape &shape)
61754 return nativeLookup(cx, shape.propid()) == &shape;
61758 JSObject::nativeEmpty() const
61760 return lastProperty()->isEmptyShape();
61764 JSObject::propertyCount() const
61766 return lastProperty()->entryCount();
61770 JSObject::hasShapeTable() const
61772 return lastProperty()->hasTable();
61776 JSObject::computedSizeOfThisSlotsElements() const
61778 size_t n = sizeOfThis();
61780 if (hasDynamicSlots())
61781 n += numDynamicSlots() * sizeof(js::Value);
61783 if (hasDynamicElements())
61784 n += (js::ObjectElements::VALUES_PER_HEADER + getElementsHeader()->capacity) *
61791 JSObject::sizeOfExcludingThis(JSMallocSizeOfFun mallocSizeOf,
61792 size_t *slotsSize, size_t *elementsSize,
61793 size_t *miscSize) const
61796 if (hasDynamicSlots()) {
61797 *slotsSize += mallocSizeOf(slots);
61801 if (hasDynamicElements()) {
61802 *elementsSize += mallocSizeOf(getElementsHeader());
61807 if (isArguments()) {
61808 *miscSize += asArguments().sizeOfMisc(mallocSizeOf);
61809 } else if (isRegExpStatics()) {
61810 *miscSize += js::SizeOfRegExpStaticsData(this, mallocSizeOf);
61815 JSObject::lookupGeneric(JSContext *cx, js::HandleId id, JSObject **objp, JSProperty **propp)
61817 js::RootedObject self(cx, this);
61819 js::LookupGenericOp op = getOps()->lookupGeneric;
61821 return op(cx, self, id, objp, propp);
61822 return js::baseops::LookupProperty(cx, self, id, objp, propp);
61826 JSObject::lookupProperty(JSContext *cx, js::PropertyName *name, JSObject **objp, JSProperty **propp)
61828 return lookupGeneric(cx, js::RootedId(cx, js::NameToId(name)), objp, propp);
61832 JSObject::defineGeneric(JSContext *cx, js::HandleId id, const js::Value &value,
61833 JSPropertyOp getter ,
61834 JSStrictPropertyOp setter ,
61837 js::RootedObject self(cx, this);
61840 js::DefineGenericOp op = getOps()->defineGeneric;
61841 return (op ? op : js::baseops::DefineProperty)(cx, self, id, &value, getter, setter, attrs);
61845 JSObject::defineProperty(JSContext *cx, js::PropertyName *name, const js::Value &value,
61846 JSPropertyOp getter ,
61847 JSStrictPropertyOp setter ,
61850 return defineGeneric(cx, js::RootedId(cx, js::NameToId(name)), value, getter, setter, attrs);
61854 JSObject::defineElement(JSContext *cx, uint32_t index, const js::Value &value,
61855 JSPropertyOp getter ,
61856 JSStrictPropertyOp setter ,
61859 js::RootedObject self(cx, this);
61861 js::DefineElementOp op = getOps()->defineElement;
61862 return (op ? op : js::baseops::DefineElement)(cx, self, index, &value, getter, setter, attrs);
61866 JSObject::defineSpecial(JSContext *cx, js::SpecialId sid, const js::Value &value,
61867 JSPropertyOp getter ,
61868 JSStrictPropertyOp setter ,
61871 return defineGeneric(cx, js::RootedId(cx, SPECIALID_TO_JSID(sid)), value, getter, setter, attrs);
61875 JSObject::lookupElement(JSContext *cx, uint32_t index, JSObject **objp, JSProperty **propp)
61877 js::RootedObject self(cx, this);
61879 js::LookupElementOp op = getOps()->lookupElement;
61880 return (op ? op : js::baseops::LookupElement)(cx, self, index, objp, propp);
61884 JSObject::lookupSpecial(JSContext *cx, js::SpecialId sid, JSObject **objp, JSProperty **propp)
61886 return lookupGeneric(cx, js::RootedId(cx, SPECIALID_TO_JSID(sid)), objp, propp);
61890 JSObject::getElement(JSContext *cx, js::HandleObject receiver, uint32_t index, js::Value *vp)
61892 js::RootedObject self(cx, this);
61894 js::ElementIdOp op = getOps()->getElement;
61896 return op(cx, self, receiver, index, vp);
61898 js::RootedId id(cx);
61899 if (!js::IndexToId(cx, index, id.address()))
61901 return self->getGeneric(cx, receiver, id, vp);
61905 JSObject::getElement(JSContext *cx, uint32_t index, js::Value *vp)
61907 return getElement(cx, js::RootedObject(cx, this), index, vp);
61911 JSObject::getElementIfPresent(JSContext *cx, js::HandleObject receiver, uint32_t index, js::Value *vp,
61914 js::RootedObject self(cx, this);
61916 js::ElementIfPresentOp op = getOps()->getElementIfPresent;
61918 return op(cx, self, receiver, index, vp, present);
61925 js::RootedId id(cx);
61926 if (!js::IndexToId(cx, index, id.address()))
61931 if (!self->lookupGeneric(cx, id, &obj2, &prop))
61936 js::Debug_SetValueRangeToCrashOnTouch(vp, 1);
61941 return self->getGeneric(cx, receiver, id, vp);
61945 JSObject::getSpecial(JSContext *cx, js::HandleObject receiver, js::SpecialId sid, js::Value *vp)
61947 return getGeneric(cx, receiver, js::RootedId(cx, SPECIALID_TO_JSID(sid)), vp);
61951 JSObject::getGenericAttributes(JSContext *cx, js::HandleId id, unsigned *attrsp)
61953 js::GenericAttributesOp op = getOps()->getGenericAttributes;
61954 return (op ? op : js::baseops::GetAttributes)(cx, js::RootedObject(cx, this), id, attrsp);
61958 JSObject::getPropertyAttributes(JSContext *cx, js::PropertyName *name, unsigned *attrsp)
61960 return getGenericAttributes(cx, js::RootedId(cx, js::NameToId(name)), attrsp);
61964 JSObject::getElementAttributes(JSContext *cx, uint32_t index, unsigned *attrsp)
61966 js::RootedId id(cx);
61967 if (!js::IndexToId(cx, index, id.address()))
61969 return getGenericAttributes(cx, id, attrsp);
61973 JSObject::getSpecialAttributes(JSContext *cx, js::SpecialId sid, unsigned *attrsp)
61975 return getGenericAttributes(cx, js::RootedId(cx, SPECIALID_TO_JSID(sid)), attrsp);
61979 JSObject::isProxy() const
61981 return js::IsProxy(this);
61985 JSObject::isCrossCompartmentWrapper() const
61987 return js::IsCrossCompartmentWrapper(this);
61991 JSObject::isWrapper() const
61993 return js::IsWrapper(this);
61996 inline js::GlobalObject &
61997 JSObject::global() const
61999 JSObject *obj = const_cast<JSObject *>(this);
62000 while (JSObject *parent = obj->getParent())
62002 return obj->asGlobal();
62006 js_IsCallable(const js::Value &v)
62008 return v.isObject() && v.toObject().isCallable();
62014 GetInnerObject(JSContext *cx, HandleObject obj)
62016 if (JSObjectOp op = obj->getClass()->ext.innerObject)
62017 return op(cx, obj);
62022 GetOuterObject(JSContext *cx, HandleObject obj)
62024 if (JSObjectOp op = obj->getClass()->ext.outerObject)
62025 return op(cx, obj);
62034 #define VALUE_IS_XML(v) ((v).isObject() && (v).toObject().isXML())
62037 IsXML(const js::Value &v)
62039 return v.isObject() && v.toObject().isXML();
62049 IsStopIteration(const js::Value &v)
62051 return v.isObject() && v.toObject().isStopIteration();
62055 static __attribute__((always_inline)) inline bool
62056 ToPrimitive(JSContext *cx, Value *vp)
62058 if (vp->isPrimitive())
62060 return vp->toObject().defaultValue(cx, JSTYPE_VOID, vp);
62064 static __attribute__((always_inline)) inline bool
62065 ToPrimitive(JSContext *cx, JSType preferredType, Value *vp)
62068 if (vp->isPrimitive())
62070 return vp->toObject().defaultValue(cx, preferredType, vp);
62079 IsInternalFunctionObject(JSObject *funobj)
62081 JSFunction *fun = funobj->toFunction();
62082 return (fun->flags & 0x08) && !funobj->getParent();
62085 class AutoPropDescArrayRooter : private AutoGCRooter
62088 AutoPropDescArrayRooter(JSContext *cx)
62089 : AutoGCRooter(cx, DESCRIPTORS), descriptors(cx), skip(cx, &descriptors)
62092 PropDesc *append() {
62093 if (!descriptors.append(PropDesc()))
62095 return &descriptors.back();
62098 bool reserve(size_t n) {
62099 return descriptors.reserve(n);
62102 PropDesc& operator[](size_t i) {
62104 return descriptors[i];
62107 friend void AutoGCRooter::trace(JSTracer *trc);
62110 PropDescArray descriptors;
62114 class AutoPropertyDescriptorRooter : private AutoGCRooter, public PropertyDescriptor
62118 AutoPropertyDescriptorRooter *thisDuringConstruction() { return this; }
62121 AutoPropertyDescriptorRooter(JSContext *cx)
62122 : AutoGCRooter(cx, DESCRIPTOR), skip(cx, thisDuringConstruction())
62126 getter = (PropertyOp) __null;
62127 setter = (StrictPropertyOp) __null;
62128 value.setUndefined();
62131 AutoPropertyDescriptorRooter(JSContext *cx, PropertyDescriptor *desc)
62132 : AutoGCRooter(cx, DESCRIPTOR), skip(cx, thisDuringConstruction())
62135 attrs = desc->attrs;
62136 getter = desc->getter;
62137 setter = desc->setter;
62138 value = desc->value;
62141 friend void AutoGCRooter::trace(JSTracer *trc);
62145 NewObjectCache::copyCachedToObject(JSObject *dst, JSObject *src)
62147 js_memcpy(dst, src, dst->sizeOfThis());
62155 CanBeFinalizedInBackground(gc::AllocKind kind, Class *clasp)
62166 if (!gc::IsBackgroundAllocKind(kind) && !clasp->finalize)
62177 NewObjectWithGivenProto(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent,
62178 gc::AllocKind kind);
62181 NewObjectWithGivenProto(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent)
62183 gc::AllocKind kind = gc::GetGCObjectKind(clasp);
62184 return NewObjectWithGivenProto(cx, clasp, proto, parent, kind);
62188 GetClassProtoKey(js::Class *clasp)
62190 JSProtoKey key = ((JSProtoKey) (((clasp)->flags >> ((8 + 8) + 10)) & (((uint32_t)1 << (6)) - 1)));
62191 if (key != JSProto_Null)
62193 if (clasp->flags & (1<<((8 + 8)+1)))
62194 return JSProto_Object;
62195 return JSProto_Null;
62199 FindProto(JSContext *cx, js::Class *clasp, HandleObject parent, JSObject **proto)
62201 JSProtoKey protoKey = GetClassProtoKey(clasp);
62202 if (!js_GetClassPrototype(cx, parent, protoKey, proto, clasp))
62204 if (!(*proto) && !js_GetClassPrototype(cx, parent, JSProto_Object, proto))
62208 # 1427 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsobjinlines.h"
62210 NewObjectWithClassProto(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent,
62211 gc::AllocKind kind);
62214 NewObjectWithClassProto(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent)
62216 gc::AllocKind kind = gc::GetGCObjectKind(clasp);
62217 return NewObjectWithClassProto(cx, clasp, proto, parent, kind);
62225 NewBuiltinClassInstance(JSContext *cx, Class *clasp, gc::AllocKind kind)
62227 return NewObjectWithClassProto(cx, clasp, __null, __null, kind);
62231 NewBuiltinClassInstance(JSContext *cx, Class *clasp)
62233 gc::AllocKind kind = gc::GetGCObjectKind(clasp);
62234 return NewBuiltinClassInstance(cx, clasp, kind);
62237 inline GlobalObject *
62238 GetCurrentGlobal(JSContext *cx)
62240 JSObject *scopeChain = (cx->hasfp()) ? cx->fp()->scopeChain() : cx->globalObject;
62241 return scopeChain ? &scopeChain->global() : __null;
62245 FindClassPrototype(JSContext *cx, JSObject *scope, JSProtoKey protoKey, JSObject **protop,
62253 NewObjectWithType(JSContext *cx, HandleTypeObject type, JSObject *parent, gc::AllocKind kind);
62256 static inline JSObject *
62257 CopyInitializerObject(JSContext *cx, HandleObject baseobj)
62262 gc::AllocKind kind = gc::GetGCObjectFixedSlotsKind(baseobj->numFixedSlots());
62264 kind = gc::GetBackgroundAllocKind(kind);
62267 JSObject *obj = NewBuiltinClassInstance(cx, &ObjectClass, kind);
62272 if (!obj->setLastProperty(cx, baseobj->lastProperty()))
62279 NewReshapedObject(JSContext *cx, HandleTypeObject type, JSObject *parent,
62280 gc::AllocKind kind, const Shape *shape);
62287 static inline gc::AllocKind
62288 GuessObjectGCKind(size_t numSlots)
62291 return gc::GetGCObjectKind(numSlots);
62292 return gc::FINALIZE_OBJECT4;
62295 static inline gc::AllocKind
62296 GuessArrayGCKind(size_t numSlots)
62299 return gc::GetGCArrayKind(numSlots);
62300 return gc::FINALIZE_OBJECT8;
62307 static inline gc::AllocKind
62308 NewObjectGCKind(JSContext *cx, js::Class *clasp)
62310 if (clasp == &ArrayClass || clasp == &SlowArrayClass)
62311 return gc::FINALIZE_OBJECT8;
62312 if (clasp == &FunctionClass)
62313 return gc::FINALIZE_OBJECT2;
62314 return gc::FINALIZE_OBJECT4;
62322 PreallocateObjectDynamicSlots(JSContext *cx, Shape *shape, HeapSlot **slots)
62324 if (size_t count = JSObject::dynamicSlotsCount(shape->numFixedSlots(), shape->slotSpan())) {
62325 *slots = (HeapSlot *) cx->malloc_(count * sizeof(HeapSlot));
62328 Debug_SetSlotRangeToCrashOnTouch(*slots, count);
62336 DefineConstructorAndPrototype(JSContext *cx, GlobalObject *global,
62337 JSProtoKey key, JSObject *ctor, JSObject *proto)
62343 jsid id = NameToId(cx->runtime->atomState.classAtoms[key]);
62347 global->setSlot(key, ObjectValue(*ctor));
62348 global->setSlot(key + JSProto_LIMIT, ObjectValue(*proto));
62349 global->setSlot(key + JSProto_LIMIT * 2, ObjectValue(*ctor));
62351 types::AddTypePropertyId(cx, global, id, ObjectValue(*ctor));
62352 if (!global->addDataProperty(cx, id, key + JSProto_LIMIT * 2, 0)) {
62353 global->setSlot(key, UndefinedValue());
62354 global->setSlot(key + JSProto_LIMIT, UndefinedValue());
62355 global->setSlot(key + JSProto_LIMIT * 2, UndefinedValue());
62363 ObjectClassIs(JSObject &obj, ESClassValue classValue, JSContext *cx)
62365 if ((__builtin_expect((obj.isProxy()), 0)))
62366 return Proxy::objectClassIs(&obj, classValue, cx);
62368 switch (classValue) {
62369 case ESClass_Array: return obj.isArray();
62370 case ESClass_Number: return obj.isNumber();
62371 case ESClass_String: return obj.isString();
62372 case ESClass_Boolean: return obj.isBoolean();
62373 case ESClass_RegExp: return obj.isRegExp();
62374 case ESClass_ArrayBuffer: return obj.isArrayBuffer();
62376 __builtin_unreachable();
62381 IsObjectWithClass(const Value &v, ESClassValue classValue, JSContext *cx)
62385 return ObjectClassIs(v.toObject(), classValue, cx);
62388 static __attribute__((always_inline)) inline bool
62389 ValueIsSpecial(JSObject *obj, Value *propval, SpecialId *sidp, JSContext *cx)
62392 if (!propval->isObject())
62395 if (obj->isXML()) {
62396 *sidp = SpecialId(propval->toObject());
62400 JSObject &propobj = propval->toObject();
62402 if (propobj.isQName() && GetLocalNameFromFunctionQName(&propobj, &name, cx)) {
62403 propval->setString(name);
62412 DefineConstructorAndPrototype(JSContext *cx, HandleObject obj, JSProtoKey key, HandleAtom atom,
62413 JSObject *protoProto, Class *clasp,
62414 Native constructor, unsigned nargs,
62415 JSPropertySpec *ps, JSFunctionSpec *fs,
62416 JSPropertySpec *static_ps, JSFunctionSpec *static_fs,
62417 JSObject **ctorp = __null,
62418 gc::AllocKind ctorKind = JSFunction::FinalizeKind);
62423 js_InitClass(JSContext *cx, js::HandleObject obj, JSObject *parent_proto,
62424 js::Class *clasp, JSNative constructor, unsigned nargs,
62425 JSPropertySpec *ps, JSFunctionSpec *fs,
62426 JSPropertySpec *static_ps, JSFunctionSpec *static_fs,
62427 JSObject **ctorp = __null,
62428 js::gc::AllocKind ctorKind = JSFunction::FinalizeKind);
62437 js_PurgeScopeChainHelper(JSContext *cx, JSObject *obj, jsid id);
62440 js_PurgeScopeChain(JSContext *cx, JSObject *obj, jsid id)
62442 if (obj->isDelegate())
62443 return js_PurgeScopeChainHelper(cx, obj, id);
62448 js::DestroyIdArray(FreeOp *fop, JSIdArray *ida)
62452 # 13 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp" 2
62456 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h" 1
62457 # 9 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62458 #define Debugger_h__
62463 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jsclist.h" 1
62464 # 15 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h" 2
62469 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/jswrapper.h" 1
62470 # 20 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h" 2
62474 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/GlobalObject.h" 1
62475 # 24 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h" 2
62480 friend class Breakpoint;
62481 friend JSBool (::JS_DefineDebuggerObject)(JSContext *cx, JSObject *obj);
62485 OnDebuggerStatement,
62493 JSSLOT_DEBUG_PROTO_START,
62494 JSSLOT_DEBUG_FRAME_PROTO = JSSLOT_DEBUG_PROTO_START,
62495 JSSLOT_DEBUG_ENV_PROTO,
62496 JSSLOT_DEBUG_OBJECT_PROTO,
62497 JSSLOT_DEBUG_SCRIPT_PROTO,
62498 JSSLOT_DEBUG_PROTO_STOP,
62499 JSSLOT_DEBUG_HOOK_START = JSSLOT_DEBUG_PROTO_STOP,
62500 JSSLOT_DEBUG_HOOK_STOP = JSSLOT_DEBUG_HOOK_START + HookCount,
62501 JSSLOT_DEBUG_COUNT = JSSLOT_DEBUG_HOOK_STOP
62506 HeapPtrObject object;
62507 GlobalObjectSet debuggees;
62508 js::HeapPtrObject uncaughtExceptionHook;
62510 JSCList breakpoints;
62511 # 73 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62512 typedef HashMap<StackFrame *, HeapPtrObject, DefaultHasher<StackFrame *>, RuntimeAllocPolicy>
62517 typedef WeakMap<HeapPtrScript, HeapPtrObject> ScriptWeakMap;
62518 ScriptWeakMap scripts;
62521 typedef WeakMap<HeapPtrObject, HeapPtrObject> ObjectWeakMap;
62522 ObjectWeakMap objects;
62525 ObjectWeakMap environments;
62530 bool addDebuggeeGlobal(JSContext *cx, Handle<GlobalObject*> obj);
62531 void removeDebuggeeGlobal(FreeOp *fop, GlobalObject *global,
62532 GlobalObjectSet::Enum *compartmentEnum,
62533 GlobalObjectSet::Enum *debugEnum);
62534 # 110 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62535 JSTrapStatus handleUncaughtException(AutoCompartment &ac, Value *vp, bool callHook);
62536 # 137 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62537 JSTrapStatus parseResumptionValue(AutoCompartment &ac, bool ok, const Value &rv, Value *vp,
62538 bool callHook = true);
62540 JSObject *unwrapDebuggeeArgument(JSContext *cx, const Value &v);
62542 static void traceObject(JSTracer *trc, JSObject *obj);
62543 void trace(JSTracer *trc);
62544 static void finalize(FreeOp *fop, JSObject *obj);
62545 void markKeysInCompartment(JSTracer *tracer);
62547 static Class jsclass;
62549 static Debugger *fromThisValue(JSContext *cx, const CallArgs &ca, const char *fnname);
62550 static JSBool getEnabled(JSContext *cx, unsigned argc, Value *vp);
62551 static JSBool setEnabled(JSContext *cx, unsigned argc, Value *vp);
62552 static JSBool getHookImpl(JSContext *cx, unsigned argc, Value *vp, Hook which);
62553 static JSBool setHookImpl(JSContext *cx, unsigned argc, Value *vp, Hook which);
62554 static JSBool getOnDebuggerStatement(JSContext *cx, unsigned argc, Value *vp);
62555 static JSBool setOnDebuggerStatement(JSContext *cx, unsigned argc, Value *vp);
62556 static JSBool getOnExceptionUnwind(JSContext *cx, unsigned argc, Value *vp);
62557 static JSBool setOnExceptionUnwind(JSContext *cx, unsigned argc, Value *vp);
62558 static JSBool getOnNewScript(JSContext *cx, unsigned argc, Value *vp);
62559 static JSBool setOnNewScript(JSContext *cx, unsigned argc, Value *vp);
62560 static JSBool getOnEnterFrame(JSContext *cx, unsigned argc, Value *vp);
62561 static JSBool setOnEnterFrame(JSContext *cx, unsigned argc, Value *vp);
62562 static JSBool getUncaughtExceptionHook(JSContext *cx, unsigned argc, Value *vp);
62563 static JSBool setUncaughtExceptionHook(JSContext *cx, unsigned argc, Value *vp);
62564 static JSBool addDebuggee(JSContext *cx, unsigned argc, Value *vp);
62565 static JSBool removeDebuggee(JSContext *cx, unsigned argc, Value *vp);
62566 static JSBool hasDebuggee(JSContext *cx, unsigned argc, Value *vp);
62567 static JSBool getDebuggees(JSContext *cx, unsigned argc, Value *vp);
62568 static JSBool getNewestFrame(JSContext *cx, unsigned argc, Value *vp);
62569 static JSBool clearAllBreakpoints(JSContext *cx, unsigned argc, Value *vp);
62570 static JSBool findScripts(JSContext *cx, unsigned argc, Value *vp);
62571 static JSBool wrap(JSContext *cx, unsigned argc, Value *vp);
62572 static JSBool construct(JSContext *cx, unsigned argc, Value *vp);
62573 static JSPropertySpec properties[];
62574 static JSFunctionSpec methods[];
62576 JSObject *getHook(Hook hook) const;
62577 bool hasAnyLiveHooks() const;
62579 static JSTrapStatus slowPathOnEnterFrame(JSContext *cx, Value *vp);
62580 static bool slowPathOnLeaveFrame(JSContext *cx, bool ok);
62581 static void slowPathOnNewScript(JSContext *cx, JSScript *script,
62582 GlobalObject *compileAndGoGlobal);
62583 static JSTrapStatus dispatchHook(JSContext *cx, Value *vp, Hook which);
62585 JSTrapStatus fireDebuggerStatement(JSContext *cx, Value *vp);
62586 JSTrapStatus fireExceptionUnwind(JSContext *cx, Value *vp);
62587 JSTrapStatus fireEnterFrame(JSContext *cx, Value *vp);
62593 JSObject *newDebuggerScript(JSContext *cx, Handle<JSScript*> script);
62599 void fireNewScript(JSContext *cx, Handle<JSScript*> script);
62601 static inline Debugger *fromLinks(JSCList *links);
62602 inline Breakpoint *firstBreakpoint() const;
62605 Debugger(JSContext *cx, JSObject *dbg);
62608 bool init(JSContext *cx);
62609 inline const js::HeapPtrObject &toJSObject() const;
62610 inline js::HeapPtrObject &toJSObjectRef();
62611 static inline Debugger *fromJSObject(JSObject *obj);
62612 static Debugger *fromChildJSObject(JSObject *obj);
62613 # 231 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62614 static void markCrossCompartmentDebuggerObjectReferents(JSTracer *tracer);
62615 static bool markAllIteratively(GCMarker *trc);
62616 static void sweepAll(FreeOp *fop);
62617 static void detachAllDebuggersFromGlobal(FreeOp *fop, GlobalObject *global,
62618 GlobalObjectSet::Enum *compartmentEnum);
62620 static inline JSTrapStatus onEnterFrame(JSContext *cx, Value *vp);
62621 static inline bool onLeaveFrame(JSContext *cx, bool ok);
62622 static inline JSTrapStatus onDebuggerStatement(JSContext *cx, Value *vp);
62623 static inline JSTrapStatus onExceptionUnwind(JSContext *cx, Value *vp);
62624 static inline void onNewScript(JSContext *cx, JSScript *script,
62625 GlobalObject *compileAndGoGlobal);
62626 static JSTrapStatus onTrap(JSContext *cx, Value *vp);
62627 static JSTrapStatus onSingleStep(JSContext *cx, Value *vp);
62631 inline bool observesEnterFrame() const;
62632 inline bool observesNewScript() const;
62633 inline bool observesGlobal(GlobalObject *global) const;
62634 inline bool observesFrame(StackFrame *fp) const;
62635 bool observesScript(JSScript *script) const;
62642 bool wrapEnvironment(JSContext *cx, Handle<Env*> env, Value *vp);
62643 # 270 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62644 bool wrapDebuggeeValue(JSContext *cx, Value *vp);
62645 # 299 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62646 bool unwrapDebuggeeValue(JSContext *cx, Value *vp);
62649 bool getScriptFrame(JSContext *cx, StackFrame *fp, Value *vp);
62650 # 311 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62651 static void resultToCompletion(JSContext *cx, bool ok, const Value &rv,
62652 JSTrapStatus *status, Value *value);
62659 bool newCompletionValue(JSContext *cx, JSTrapStatus status, Value value, Value *result);
62660 # 333 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62661 bool receiveCompletionValue(AutoCompartment &ac, bool ok, Value val, Value *vp);
62668 JSObject *wrapScript(JSContext *cx, Handle<JSScript*> script);
62671 Debugger(const Debugger &) ;
62672 Debugger & operator=(const Debugger &) ;
62675 class BreakpointSite {
62676 friend class Breakpoint;
62677 friend struct ::JSCompartment;
62678 friend struct ::JSScript;
62679 friend class Debugger;
62683 jsbytecode * const pc;
62691 GlobalObject *scriptGlobal;
62693 JSCList breakpoints;
62694 size_t enabledCount;
62695 JSTrapHandler trapHandler;
62696 HeapValue trapClosure;
62698 void recompile(FreeOp *fop);
62701 BreakpointSite(JSScript *script, jsbytecode *pc);
62702 Breakpoint *firstBreakpoint() const;
62703 bool hasBreakpoint(Breakpoint *bp);
62704 bool hasTrap() const { return !!trapHandler; }
62705 GlobalObject *getScriptGlobal() const { return scriptGlobal; }
62707 void inc(FreeOp *fop);
62708 void dec(FreeOp *fop);
62709 void setTrap(FreeOp *fop, JSTrapHandler handler, const Value &closure);
62710 void clearTrap(FreeOp *fop, JSTrapHandler *handlerp = __null, Value *closurep = __null);
62711 void destroyIfEmpty(FreeOp *fop);
62713 # 404 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/Debugger.h"
62715 friend struct ::JSCompartment;
62716 friend class Debugger;
62719 Debugger * const debugger;
62720 BreakpointSite * const site;
62722 js::HeapPtrObject handler;
62723 JSCList debuggerLinks;
62727 static Breakpoint *fromDebuggerLinks(JSCList *links);
62728 static Breakpoint *fromSiteLinks(JSCList *links);
62729 Breakpoint(Debugger *debugger, BreakpointSite *site, JSObject *handler);
62730 void destroy(FreeOp *fop);
62731 Breakpoint *nextInDebugger();
62732 Breakpoint *nextInSite();
62733 const HeapPtrObject &getHandler() const { return handler; }
62734 HeapPtrObject &getHandlerRef() { return handler; }
62738 Debugger::fromLinks(JSCList *links)
62740 unsigned char *p = reinterpret_cast<unsigned char *>(links);
62741 return reinterpret_cast<Debugger *>(p - __builtin_offsetof (Debugger, link));
62745 Debugger::firstBreakpoint() const
62747 if (((&breakpoints)->next == (&breakpoints)))
62749 return Breakpoint::fromDebuggerLinks(((&breakpoints)->next));
62752 const js::HeapPtrObject &
62753 Debugger::toJSObject() const
62759 js::HeapPtrObject &
62760 Debugger::toJSObjectRef()
62767 Debugger::fromJSObject(JSObject *obj)
62770 return (Debugger *) obj->getPrivate();
62774 Debugger::observesEnterFrame() const
62776 return enabled && getHook(OnEnterFrame);
62780 Debugger::observesNewScript() const
62782 return enabled && getHook(OnNewScript);
62786 Debugger::observesGlobal(GlobalObject *global) const
62788 return debuggees.has(global);
62792 Debugger::observesFrame(StackFrame *fp) const
62794 return !fp->isDummyFrame() && observesGlobal(&fp->global());
62798 Debugger::onEnterFrame(JSContext *cx, Value *vp)
62800 if (cx->compartment->getDebuggees().empty())
62801 return JSTRAP_CONTINUE;
62802 return slowPathOnEnterFrame(cx, vp);
62806 Debugger::onLeaveFrame(JSContext *cx, bool ok)
62809 bool evalTraps = cx->fp()->isEvalFrame() &&
62810 cx->fp()->script()->hasAnyBreakpointsOrStepMode();
62811 if (!cx->compartment->getDebuggees().empty() || evalTraps)
62812 ok = slowPathOnLeaveFrame(cx, ok);
62817 Debugger::onDebuggerStatement(JSContext *cx, Value *vp)
62819 return cx->compartment->getDebuggees().empty()
62821 : dispatchHook(cx, vp, OnDebuggerStatement);
62825 Debugger::onExceptionUnwind(JSContext *cx, Value *vp)
62827 return cx->compartment->getDebuggees().empty()
62829 : dispatchHook(cx, vp, OnExceptionUnwind);
62833 Debugger::onNewScript(JSContext *cx, JSScript *script, GlobalObject *compileAndGoGlobal)
62837 if (!script->compartment()->getDebuggees().empty())
62838 slowPathOnNewScript(cx, script, compileAndGoGlobal);
62842 EvaluateInEnv(JSContext *cx, Handle<Env*> env, StackFrame *fp, const jschar *chars,
62843 unsigned length, const char *filename, unsigned lineno, Value *rval);
62846 # 17 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp" 2
62851 # 1 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl-inl.h" 1
62852 # 22 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp" 2
62854 using namespace js;
62856 PropDesc::PropDesc()
62857 : pd_(UndefinedValue()),
62858 value_(UndefinedValue()),
62859 get_(UndefinedValue()),
62860 set_(UndefinedValue()),
62865 hasWritable_(false),
62866 hasEnumerable_(false),
62867 hasConfigurable_(false),
62873 PropDesc::checkGetter(JSContext *cx)
62876 if (!js_IsCallable(get_) && !get_.isUndefined()) {
62877 JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_BAD_GET_SET_FIELD,
62886 PropDesc::checkSetter(JSContext *cx)
62889 if (!js_IsCallable(set_) && !set_.isUndefined()) {
62890 JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_BAD_GET_SET_FIELD,
62899 CheckArgCompartment(JSContext *cx, JSObject *obj, const Value &v,
62900 const char *methodname, const char *propname)
62902 if (v.isObject() && v.toObject().compartment() != obj->compartment()) {
62903 JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_DEBUG_COMPARTMENT_MISMATCH,
62904 methodname, propname);
62915 PropDesc::unwrapDebuggerObjectsInto(JSContext *cx, Debugger *dbg, JSObject *obj,
62916 PropDesc *unwrapped) const
62920 *unwrapped = *this;
62922 if (unwrapped->hasValue()) {
62923 if (!dbg->unwrapDebuggeeValue(cx, &unwrapped->value_) ||
62924 !CheckArgCompartment(cx, obj, unwrapped->value_, "defineProperty", "value"))
62930 if (unwrapped->hasGet()) {
62931 if (!dbg->unwrapDebuggeeValue(cx, &unwrapped->get_) ||
62932 !CheckArgCompartment(cx, obj, unwrapped->get_, "defineProperty", "get"))
62938 if (unwrapped->hasSet()) {
62939 if (!dbg->unwrapDebuggeeValue(cx, &unwrapped->set_) ||
62940 !CheckArgCompartment(cx, obj, unwrapped->set_, "defineProperty", "set"))
62955 PropDesc::wrapInto(JSContext *cx, JSObject *obj, const jsid &id, jsid *wrappedId,
62956 PropDesc *desc) const
62960 JSCompartment *comp = cx->compartment;
62963 if (!comp->wrapId(cx, wrappedId))
62967 if (!comp->wrap(cx, &desc->value_))
62969 if (!comp->wrap(cx, &desc->get_))
62971 if (!comp->wrap(cx, &desc->set_))
62973 return !obj->isProxy() || desc->makeObject(cx);
62976 static ObjectElements emptyElementsHeader(0, 0);
62979 HeapSlot *js::emptyObjectElements =
62980 reinterpret_cast<HeapSlot *>(uintptr_t(&emptyElementsHeader) + sizeof(ObjectElements));
62981 # 217 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp"
62983 js::ObjectImpl::initSlotRange(uint32_t start, const Value *vector, uint32_t length)
62985 JSCompartment *comp = compartment();
62986 HeapSlot *fixedStart, *fixedEnd, *slotsStart, *slotsEnd;
62987 getSlotRange(start, length, &fixedStart, &fixedEnd, &slotsStart, &slotsEnd);
62988 for (HeapSlot *sp = fixedStart; sp < fixedEnd; sp++)
62989 sp->init(comp, this->asObjectPtr(), start++, *vector++);
62990 for (HeapSlot *sp = slotsStart; sp < slotsEnd; sp++)
62991 sp->init(comp, this->asObjectPtr(), start++, *vector++);
62995 js::ObjectImpl::copySlotRange(uint32_t start, const Value *vector, uint32_t length)
62997 JSCompartment *comp = compartment();
62998 HeapSlot *fixedStart, *fixedEnd, *slotsStart, *slotsEnd;
62999 getSlotRange(start, length, &fixedStart, &fixedEnd, &slotsStart, &slotsEnd);
63000 for (HeapSlot *sp = fixedStart; sp < fixedEnd; sp++)
63001 sp->set(comp, this->asObjectPtr(), start++, *vector++);
63002 for (HeapSlot *sp = slotsStart; sp < slotsEnd; sp++)
63003 sp->set(comp, this->asObjectPtr(), start++, *vector++);
63005 # 260 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp"
63007 js::ObjectImpl::nativeLookup(JSContext *cx, jsid id)
63011 return Shape::search(cx, lastProperty(), id, &spp);
63013 # 277 "/var/tmp/portage/www-client/firefox-15.0.1/work/mozilla-release/js/src/vm/ObjectImpl.cpp"
63015 js::ObjectImpl::markChildren(JSTracer *trc)
63017 MarkTypeObject(trc, &type_, "type");
63019 MarkShape(trc, &shape_, "shape");
63021 Class *clasp = shape_->getObjectClass();
63022 JSObject *obj = asObjectPtr();
63024 clasp->trace(trc, obj);
63026 if (shape_->isNative())
63027 MarkObjectSlots(trc, obj, 0, obj->slotSpan());
63031 DenseElementsHeader::getOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index, PropDesc *desc)
63035 uint32_t len = initializedLength();
63036 if (index >= len) {
63037 *desc = PropDesc::undefined();
63041 HeapSlot &slot = obj->elements[index];
63042 if (slot.isMagic(JS_ARRAY_HOLE)) {
63043 *desc = PropDesc::undefined();
63047 *desc = PropDesc(slot, PropDesc::Writable, PropDesc::Enumerable, PropDesc::Configurable);
63052 SparseElementsHeader::getOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index, PropDesc *desc)
63056 __builtin_unreachable();
63060 template<typename T>
63062 ElementToValue(const T &t)
63064 return NumberValue(t);
63069 ElementToValue(const uint8_clamped &u)
63071 return NumberValue(uint8_t(u));
63074 template<typename T>
63076 TypedElementsHeader<T>::getOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index,
63081 if (index >= length()) {
63082 *desc = PropDesc::undefined();
63086 *desc = PropDesc(ElementToValue(getElement(index)), PropDesc::Writable,
63087 PropDesc::Enumerable, PropDesc::Configurable);
63092 ArrayBufferElementsHeader::getOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index,
63097 __builtin_unreachable();
63102 SparseElementsHeader::defineElement(JSContext *cx, ObjectImpl *obj, uint32_t index,
63103 const PropDesc &desc, bool shouldThrow, bool *succeeded)
63107 __builtin_unreachable();
63112 DenseElementsHeader::defineElement(JSContext *cx, ObjectImpl *obj, uint32_t index,
63113 const PropDesc &desc, bool shouldThrow, bool *succeeded)
63124 if (desc.hasGet() || desc.hasSet() ||
63125 (desc.hasEnumerable() && !desc.enumerable()) ||
63126 (desc.hasConfigurable() && !desc.configurable()) ||
63127 (desc.hasWritable() && !desc.writable()))
63129 if (!obj->makeElementsSparse(cx))
63131 SparseElementsHeader &elts = obj->elementsHeader().asSparseElements();
63132 return elts.defineElement(cx, obj, index, desc, shouldThrow, succeeded);
63136 uint32_t initLen = initializedLength();
63137 if (index < initLen) {
63138 HeapSlot &slot = obj->elements[index];
63139 if (!slot.isMagic(JS_ARRAY_HOLE)) {
63152 if (!obj->isExtensible()) {
63153 *succeeded = false;
63156 ((void)(js_ReportValueErrorFlags(cx, 0x0, JSMSG_OBJECT_NOT_EXTENSIBLE, 0, ObjectValue(*obj), __null, __null, __null)))
63164 ObjectImpl::DenseElementsResult res = obj->ensureDenseElementsInitialized(cx, index, 0);
63167 if (res == ObjectImpl::Failure)
63171 if (res == ObjectImpl::ConvertToSparse) {
63172 if (!obj->makeElementsSparse(cx))
63174 SparseElementsHeader &elts = obj->elementsHeader().asSparseElements();
63175 return elts.defineElement(cx, obj, index, desc, shouldThrow, succeeded);
63180 obj->elements[index].set(obj->asObjectPtr(), index, desc.value());
63186 ArrayBufferDelegate(JSContext *cx, ObjectImpl *obj)
63189 if (obj->getPrivate())
63190 return static_cast<JSObject *>(obj->getPrivate());
63191 JSObject *delegate = NewObjectWithGivenProto(cx, &ObjectClass, obj->getProto(), __null);
63192 obj->setPrivate(delegate);
63196 template <typename T>
63198 TypedElementsHeader<T>::defineElement(JSContext *cx, ObjectImpl *obj,
63199 uint32_t index, const PropDesc &desc, bool shouldThrow,
63203 *succeeded = false;
63204 js_ReportValueErrorFlags(cx, 0x0, JSMSG_OBJECT_NOT_EXTENSIBLE,
63207 __null, __null, __null);
63212 ArrayBufferElementsHeader::defineElement(JSContext *cx, ObjectImpl *obj,
63213 uint32_t index, const PropDesc &desc, bool shouldThrow,
63218 JSObject *delegate = ArrayBufferDelegate(cx, obj);
63221 return DefineElement(cx, delegate, index, desc, shouldThrow, succeeded);
63225 js::GetOwnElement(JSContext *cx, ObjectImpl *obj, uint32_t index, PropDesc *desc)
63227 ElementsHeader &header = obj->elementsHeader();
63228 switch (header.kind()) {
63229 case DenseElements:
63230 return header.asDenseElements().getOwnElement(cx, obj, index, desc);
63231 case SparseElements:
63232 return header.asSparseElements().getOwnElement(cx, obj, index, desc);
63233 case Uint8Elements:
63234 return header.asUint8Elements().getOwnElement(cx, obj, index, desc);
63236 return header.asInt8Elements().getOwnElement(cx, obj, index, desc);
63237 case Uint16Elements:
63238 return header.asUint16Elements().getOwnElement(cx, obj, index, desc);
63239 case Int16Elements:
63240 return header.asInt16Elements().getOwnElement(cx, obj, index, desc);
63241 case Uint32Elements:
63242 return header.asUint32Elements().getOwnElement(cx, obj, index, desc);
63243 case Int32Elements:
63244 return header.asInt32Elements().getOwnElement(cx, obj, index, desc);
63245 case Uint8ClampedElements:
63246 return header.asUint8ClampedElements().getOwnElement(cx, obj, index, desc);
63247 case Float32Elements:
63248 return header.asFloat32Elements().getOwnElement(cx, obj, index, desc);
63249 case Float64Elements:
63250 return header.asFloat64Elements().getOwnElement(cx, obj, index, desc);
63251 case ArrayBufferElements:
63252 return header.asArrayBufferElements().getOwnElement(cx, obj, index, desc);
63255 __builtin_unreachable();
63260 js::GetElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver, uint32_t index,
63263 __builtin_unreachable();
63268 if (static_cast<JSObject *>(obj)->isProxy()) {
63269 __builtin_unreachable();
63274 if (!GetOwnElement(cx, obj, index, &desc))
63278 if (desc.isUndefined()) {
63279 obj = obj->getProto();
63283 vp->setUndefined();
63288 if (desc.isDataDescriptor()) {
63289 *vp = desc.value();
63294 if (desc.isAccessorDescriptor()) {
63295 Value get = desc.getterValue();
63296 if (get.isUndefined()) {
63297 vp->setUndefined();
63301 InvokeArgsGuard args;
63302 if (!cx->stack.pushInvokeArgs(cx, 0, &args))
63306 args.calleev() = get;
63307 args.thisv() = ObjectValue(*receiver);
63309 bool ok = Invoke(cx, args);
63315 __builtin_unreachable();
63321 js::HasElement(JSContext *cx, ObjectImpl *obj, uint32_t index, bool *found)
63323 __builtin_unreachable();
63328 if (static_cast<JSObject *>(obj)->isProxy()) {
63329 __builtin_unreachable();
63334 if (!GetOwnElement(cx, obj, index, &prop))
63337 if (!prop.isUndefined()) {
63342 obj = obj->getProto();
63352 js::DefineElement(JSContext *cx, ObjectImpl *obj, uint32_t index, const PropDesc &desc,
63353 bool shouldThrow, bool *succeeded)
63355 __builtin_unreachable();
63357 ElementsHeader &header = obj->elementsHeader();
63359 switch (header.kind()) {
63360 case DenseElements:
63361 return header.asDenseElements().defineElement(cx, obj, index, desc, shouldThrow,
63363 case SparseElements:
63364 return header.asSparseElements().defineElement(cx, obj, index, desc, shouldThrow,
63366 case Uint8Elements:
63367 return header.asUint8Elements().defineElement(cx, obj, index, desc, shouldThrow,
63370 return header.asInt8Elements().defineElement(cx, obj, index, desc, shouldThrow,
63372 case Uint16Elements:
63373 return header.asUint16Elements().defineElement(cx, obj, index, desc, shouldThrow,
63375 case Int16Elements:
63376 return header.asInt16Elements().defineElement(cx, obj, index, desc, shouldThrow,
63378 case Uint32Elements:
63379 return header.asUint32Elements().defineElement(cx, obj, index, desc, shouldThrow,
63381 case Int32Elements:
63382 return header.asInt32Elements().defineElement(cx, obj, index, desc, shouldThrow,
63384 case Uint8ClampedElements:
63385 return header.asUint8ClampedElements().defineElement(cx, obj, index, desc, shouldThrow,
63387 case Float32Elements:
63388 return header.asFloat32Elements().defineElement(cx, obj, index, desc, shouldThrow,
63390 case Float64Elements:
63391 return header.asFloat64Elements().defineElement(cx, obj, index, desc, shouldThrow,
63393 case ArrayBufferElements:
63394 return header.asArrayBufferElements().defineElement(cx, obj, index, desc, shouldThrow,
63398 __builtin_unreachable();
63403 SparseElementsHeader::setElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver,
63404 uint32_t index, const Value &v, bool *succeeded)
63408 __builtin_unreachable();
63413 DenseElementsHeader::setElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver,
63414 uint32_t index, const Value &v, bool *succeeded)
63418 __builtin_unreachable();
63422 template <typename T>
63424 TypedElementsHeader<T>::setElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver,
63425 uint32_t index, const Value &v, bool *succeeded)
63429 uint32_t len = length();
63430 if (index >= len) {
63441 if (v.isNumber()) {
63443 } else if (v.isNull()) {
63445 } else if (v.isPrimitive()) {
63446 if (v.isString()) {
63447 if (!ToNumber(cx, v, &d))
63449 } else if (v.isUndefined()) {
63452 d = double(v.toBoolean());
63465 ArrayBufferElementsHeader::setElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver,
63466 uint32_t index, const Value &v, bool *succeeded)
63470 JSObject *delegate = ArrayBufferDelegate(cx, obj);
63473 return SetElement(cx, obj, receiver, index, v, succeeded);
63477 js::SetElement(JSContext *cx, ObjectImpl *obj, ObjectImpl *receiver, uint32_t index,
63478 const Value &v, bool *succeeded)
63480 __builtin_unreachable();
63485 if (static_cast<JSObject *>(obj)->isProxy()) {
63486 __builtin_unreachable();
63491 if (!GetOwnElement(cx, obj, index, &ownDesc))
63494 if (!ownDesc.isUndefined()) {
63495 if (ownDesc.isDataDescriptor()) {
63496 if (!ownDesc.writable()) {
63497 *succeeded = false;
63501 if (receiver == obj) {
63502 PropDesc updateDesc = PropDesc::valueOnly(v);
63503 return DefineElement(cx, receiver, index, updateDesc, false, succeeded);
63507 return DefineElement(cx, receiver, index, newDesc, false, succeeded);
63510 if (ownDesc.isAccessorDescriptor()) {
63511 Value setter = ownDesc.setterValue();
63512 if (setter.isUndefined()) {
63513 *succeeded = false;
63517 InvokeArgsGuard args;
63518 if (!cx->stack.pushInvokeArgs(cx, 1, &args))
63522 args.calleev() = setter;
63523 args.thisv() = ObjectValue(*receiver);
63527 return Invoke(cx, args);
63530 __builtin_unreachable();
63534 obj = obj->getProto();
63538 PropDesc newDesc(v, PropDesc::Writable, PropDesc::Enumerable, PropDesc::Configurable);
63539 return DefineElement(cx, receiver, index, newDesc, false, succeeded);