]> git.wh0rd.org - ICEs.git/blobdiff - 571482/jsxml.ii.0
more
[ICEs.git] / 571482 / jsxml.ii.0
diff --git a/571482/jsxml.ii.0 b/571482/jsxml.ii.0
new file mode 100644 (file)
index 0000000..370d909
--- /dev/null
@@ -0,0 +1,38814 @@
+# 1 "jsxml.cpp"
+# 1 "<built-in>"
+# 1 "<command-line>"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdc-predef.h" 1 3 4
+# 1 "<command-line>" 2
+# 1 "././js-confdefs.h" 1
+# 1 "<command-line>" 2
+# 1 "jsxml.cpp"
+# 40 "jsxml.cpp"
+# 1 "jsversion.h" 1
+# 41 "jsxml.cpp" 2
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 1 3 4
+# 26 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/features.h" 1 3 4
+# 365 "/usr/powerpc64-unknown-linux-gnu/usr/include/features.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/cdefs.h" 1 3 4
+# 410 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/cdefs.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/wordsize.h" 1 3 4
+# 411 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/cdefs.h" 2 3 4
+# 366 "/usr/powerpc64-unknown-linux-gnu/usr/include/features.h" 2 3 4
+# 389 "/usr/powerpc64-unknown-linux-gnu/usr/include/features.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/gnu/stubs.h" 1 3 4
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/wordsize.h" 1 3 4
+# 6 "/usr/powerpc64-unknown-linux-gnu/usr/include/gnu/stubs.h" 2 3 4
+
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/gnu/stubs-64-v1.h" 1 3 4
+# 12 "/usr/powerpc64-unknown-linux-gnu/usr/include/gnu/stubs.h" 2 3 4
+# 390 "/usr/powerpc64-unknown-linux-gnu/usr/include/features.h" 2 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+
+extern "C" {
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/math-vector.h" 1 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/math-vector.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/libm-simd-decl-stubs.h" 1 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/math-vector.h" 2 3 4
+# 32 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/huge_val.h" 1 3 4
+# 36 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/huge_valf.h" 1 3 4
+# 38 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/huge_vall.h" 1 3 4
+# 39 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/inf.h" 1 3 4
+# 42 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/nan.h" 1 3 4
+# 45 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathdef.h" 1 3 4
+# 33 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathdef.h" 3 4
+typedef float float_t;
+typedef double double_t;
+# 49 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+# 82 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathcalls.h" 1 3 4
+# 52 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathcalls.h" 3 4
+
+
+extern double acos (double __x) throw (); extern double __acos (double __x) throw ();
+
+extern double asin (double __x) throw (); extern double __asin (double __x) throw ();
+
+extern double atan (double __x) throw (); extern double __atan (double __x) throw ();
+
+extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw ();
+
+
+ extern double cos (double __x) throw (); extern double __cos (double __x) throw ();
+
+ extern double sin (double __x) throw (); extern double __sin (double __x) throw ();
+
+extern double tan (double __x) throw (); extern double __tan (double __x) throw ();
+
+
+
+
+extern double cosh (double __x) throw (); extern double __cosh (double __x) throw ();
+
+extern double sinh (double __x) throw (); extern double __sinh (double __x) throw ();
+
+extern double tanh (double __x) throw (); extern double __tanh (double __x) throw ();
+
+
+
+
+ extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw ()
+                                                        ;
+
+
+
+
+
+extern double acosh (double __x) throw (); extern double __acosh (double __x) throw ();
+
+extern double asinh (double __x) throw (); extern double __asinh (double __x) throw ();
+
+extern double atanh (double __x) throw (); extern double __atanh (double __x) throw ();
+
+
+
+
+
+
+
+ extern double exp (double __x) throw (); extern double __exp (double __x) throw ();
+
+
+extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw ();
+
+
+extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw ();
+
+
+ extern double log (double __x) throw (); extern double __log (double __x) throw ();
+
+
+extern double log10 (double __x) throw (); extern double __log10 (double __x) throw ();
+
+
+extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+
+
+
+
+extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw ();
+
+extern double pow10 (double __x) throw (); extern double __pow10 (double __x) throw ();
+
+
+
+
+
+extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw ();
+
+
+extern double log1p (double __x) throw (); extern double __log1p (double __x) throw ();
+
+
+extern double logb (double __x) throw (); extern double __logb (double __x) throw ();
+
+
+
+
+
+
+extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw ();
+
+
+extern double log2 (double __x) throw (); extern double __log2 (double __x) throw ();
+
+
+
+
+
+
+
+
+ extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw ();
+
+
+extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw ();
+
+
+
+
+
+extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw ();
+
+
+
+
+
+
+extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw ();
+
+
+
+
+
+
+
+
+extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__));
+
+
+extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__));
+
+
+extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__));
+
+
+extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw ();
+
+
+
+
+extern int __isinf (double __value) throw () __attribute__ ((__const__));
+
+
+extern int __finite (double __value) throw () __attribute__ ((__const__));
+
+
+
+
+
+extern int isinf (double __value) throw () __attribute__ ((__const__));
+
+
+extern int finite (double __value) throw () __attribute__ ((__const__));
+
+
+extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw ();
+
+
+
+extern double significand (double __x) throw (); extern double __significand (double __x) throw ();
+
+
+
+
+
+extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__));
+
+
+
+
+
+
+extern double nan (const char *__tagb) throw () __attribute__ ((__const__)); extern double __nan (const char *__tagb) throw () __attribute__ ((__const__));
+
+
+
+
+
+extern int __isnan (double __value) throw () __attribute__ ((__const__));
+
+
+
+extern int isnan (double __value) throw () __attribute__ ((__const__));
+
+
+extern double j0 (double) throw (); extern double __j0 (double) throw ();
+extern double j1 (double) throw (); extern double __j1 (double) throw ();
+extern double jn (int, double) throw (); extern double __jn (int, double) throw ();
+extern double y0 (double) throw (); extern double __y0 (double) throw ();
+extern double y1 (double) throw (); extern double __y1 (double) throw ();
+extern double yn (int, double) throw (); extern double __yn (int, double) throw ();
+
+
+
+
+
+
+extern double erf (double) throw (); extern double __erf (double) throw ();
+extern double erfc (double) throw (); extern double __erfc (double) throw ();
+extern double lgamma (double) throw (); extern double __lgamma (double) throw ();
+
+
+
+
+
+
+extern double tgamma (double) throw (); extern double __tgamma (double) throw ();
+
+
+
+
+
+extern double gamma (double) throw (); extern double __gamma (double) throw ();
+
+
+
+
+
+
+extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw ();
+
+
+
+
+
+
+
+extern double rint (double __x) throw (); extern double __rint (double __x) throw ();
+
+
+extern double nextafter (double __x, double __y) throw () __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) throw () __attribute__ ((__const__));
+
+extern double nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); extern double __nexttoward (double __x, long double __y) throw () __attribute__ ((__const__));
+
+
+
+extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw ();
+
+
+
+extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw ();
+
+
+
+extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw ();
+
+
+
+
+extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw ();
+
+
+
+extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw ();
+
+
+
+extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__));
+
+
+
+extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__));
+
+
+
+
+extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw ();
+
+
+
+
+
+
+extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw ();
+__extension__
+extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw ();
+
+
+
+extern long int lround (double __x) throw (); extern long int __lround (double __x) throw ();
+__extension__
+extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw ();
+
+
+
+extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw ();
+
+
+extern double fmax (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmax (double __x, double __y) throw () __attribute__ ((__const__));
+
+
+extern double fmin (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmin (double __x, double __y) throw () __attribute__ ((__const__));
+
+
+
+extern int __fpclassify (double __value) throw ()
+     __attribute__ ((__const__));
+
+
+extern int __signbit (double __value) throw ()
+     __attribute__ ((__const__));
+
+
+
+extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw ();
+
+
+
+
+
+
+
+
+extern int __issignaling (double __value) throw ()
+     __attribute__ ((__const__));
+
+
+
+
+extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw ();
+# 83 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+# 101 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathcalls.h" 1 3 4
+# 52 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathcalls.h" 3 4
+
+
+extern float acosf (float __x) throw (); extern float __acosf (float __x) throw ();
+
+extern float asinf (float __x) throw (); extern float __asinf (float __x) throw ();
+
+extern float atanf (float __x) throw (); extern float __atanf (float __x) throw ();
+
+extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw ();
+
+
+ extern float cosf (float __x) throw (); extern float __cosf (float __x) throw ();
+
+ extern float sinf (float __x) throw (); extern float __sinf (float __x) throw ();
+
+extern float tanf (float __x) throw (); extern float __tanf (float __x) throw ();
+
+
+
+
+extern float coshf (float __x) throw (); extern float __coshf (float __x) throw ();
+
+extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw ();
+
+extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw ();
+
+
+
+
+ extern void sincosf (float __x, float *__sinx, float *__cosx) throw (); extern void __sincosf (float __x, float *__sinx, float *__cosx) throw ()
+                                                        ;
+
+
+
+
+
+extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw ();
+
+extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw ();
+
+extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw ();
+
+
+
+
+
+
+
+ extern float expf (float __x) throw (); extern float __expf (float __x) throw ();
+
+
+extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw ();
+
+
+extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw ();
+
+
+ extern float logf (float __x) throw (); extern float __logf (float __x) throw ();
+
+
+extern float log10f (float __x) throw (); extern float __log10f (float __x) throw ();
+
+
+extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+
+
+
+
+extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw ();
+
+extern float pow10f (float __x) throw (); extern float __pow10f (float __x) throw ();
+
+
+
+
+
+extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw ();
+
+
+extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw ();
+
+
+extern float logbf (float __x) throw (); extern float __logbf (float __x) throw ();
+
+
+
+
+
+
+extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw ();
+
+
+extern float log2f (float __x) throw (); extern float __log2f (float __x) throw ();
+
+
+
+
+
+
+
+
+ extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw ();
+
+
+extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw ();
+
+
+
+
+
+extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw ();
+
+
+
+
+
+
+extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw ();
+
+
+
+
+
+
+
+
+extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__));
+
+
+extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__));
+
+
+extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__));
+
+
+extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw ();
+
+
+
+
+extern int __isinff (float __value) throw () __attribute__ ((__const__));
+
+
+extern int __finitef (float __value) throw () __attribute__ ((__const__));
+
+
+
+
+
+extern int isinff (float __value) throw () __attribute__ ((__const__));
+
+
+extern int finitef (float __value) throw () __attribute__ ((__const__));
+
+
+extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw ();
+
+
+
+extern float significandf (float __x) throw (); extern float __significandf (float __x) throw ();
+
+
+
+
+
+extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__));
+
+
+
+
+
+
+extern float nanf (const char *__tagb) throw () __attribute__ ((__const__)); extern float __nanf (const char *__tagb) throw () __attribute__ ((__const__));
+
+
+
+
+
+extern int __isnanf (float __value) throw () __attribute__ ((__const__));
+
+
+
+extern int isnanf (float __value) throw () __attribute__ ((__const__));
+
+
+extern float j0f (float) throw (); extern float __j0f (float) throw ();
+extern float j1f (float) throw (); extern float __j1f (float) throw ();
+extern float jnf (int, float) throw (); extern float __jnf (int, float) throw ();
+extern float y0f (float) throw (); extern float __y0f (float) throw ();
+extern float y1f (float) throw (); extern float __y1f (float) throw ();
+extern float ynf (int, float) throw (); extern float __ynf (int, float) throw ();
+
+
+
+
+
+
+extern float erff (float) throw (); extern float __erff (float) throw ();
+extern float erfcf (float) throw (); extern float __erfcf (float) throw ();
+extern float lgammaf (float) throw (); extern float __lgammaf (float) throw ();
+
+
+
+
+
+
+extern float tgammaf (float) throw (); extern float __tgammaf (float) throw ();
+
+
+
+
+
+extern float gammaf (float) throw (); extern float __gammaf (float) throw ();
+
+
+
+
+
+
+extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw ();
+
+
+
+
+
+
+
+extern float rintf (float __x) throw (); extern float __rintf (float __x) throw ();
+
+
+extern float nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) throw () __attribute__ ((__const__));
+
+extern float nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); extern float __nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__));
+
+
+
+extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw ();
+
+
+
+extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw ();
+
+
+
+extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw ();
+
+
+
+
+extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw ();
+
+
+
+extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw ();
+
+
+
+extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__));
+
+
+
+extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__));
+
+
+
+
+extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw ();
+
+
+
+
+
+
+extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw ();
+__extension__
+extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw ();
+
+
+
+extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw ();
+__extension__
+extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw ();
+
+
+
+extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw ();
+
+
+extern float fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) throw () __attribute__ ((__const__));
+
+
+extern float fminf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminf (float __x, float __y) throw () __attribute__ ((__const__));
+
+
+
+extern int __fpclassifyf (float __value) throw ()
+     __attribute__ ((__const__));
+
+
+extern int __signbitf (float __value) throw ()
+     __attribute__ ((__const__));
+
+
+
+extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw ();
+
+
+
+
+
+
+
+
+extern int __issignalingf (float __value) throw ()
+     __attribute__ ((__const__));
+
+
+
+
+extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw ();
+# 102 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+# 146 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathcalls.h" 1 3 4
+# 52 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathcalls.h" 3 4
+
+
+extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw ();
+
+extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw ();
+
+extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw ();
+
+extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw ();
+
+
+ extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw ();
+
+ extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw ();
+
+extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw ();
+
+
+
+
+extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw ();
+
+extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw ();
+
+extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw ();
+
+
+
+
+ extern void sincosl (long double __x, long double *__sinx, long double *__cosx) throw (); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) throw ()
+                                                        ;
+
+
+
+
+
+extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw ();
+
+extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw ();
+
+extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw ();
+
+
+
+
+
+
+
+ extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw ();
+
+
+extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw ();
+
+
+extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw ();
+
+
+ extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw ();
+
+
+extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw ();
+
+
+extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+
+
+
+
+extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw ();
+
+extern long double pow10l (long double __x) throw (); extern long double __pow10l (long double __x) throw ();
+
+
+
+
+
+extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw ();
+
+
+extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw ();
+
+
+extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw ();
+
+
+
+
+
+
+extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw ();
+
+
+extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw ();
+
+
+
+
+
+
+
+
+ extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw ();
+
+
+extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw ();
+
+
+
+
+
+extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw ();
+
+
+
+
+
+
+extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw ();
+
+
+
+
+
+
+
+
+extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__));
+
+
+extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__));
+
+
+extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__));
+
+
+extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw ();
+
+
+
+
+extern int __isinfl (long double __value) throw () __attribute__ ((__const__));
+
+
+extern int __finitel (long double __value) throw () __attribute__ ((__const__));
+
+
+
+
+
+extern int isinfl (long double __value) throw () __attribute__ ((__const__));
+
+
+extern int finitel (long double __value) throw () __attribute__ ((__const__));
+
+
+extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw ();
+
+
+
+extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw ();
+
+
+
+
+
+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__));
+
+
+
+
+
+
+extern long double nanl (const char *__tagb) throw () __attribute__ ((__const__)); extern long double __nanl (const char *__tagb) throw () __attribute__ ((__const__));
+
+
+
+
+
+extern int __isnanl (long double __value) throw () __attribute__ ((__const__));
+
+
+
+extern int isnanl (long double __value) throw () __attribute__ ((__const__));
+
+
+extern long double j0l (long double) throw (); extern long double __j0l (long double) throw ();
+extern long double j1l (long double) throw (); extern long double __j1l (long double) throw ();
+extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw ();
+extern long double y0l (long double) throw (); extern long double __y0l (long double) throw ();
+extern long double y1l (long double) throw (); extern long double __y1l (long double) throw ();
+extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw ();
+
+
+
+
+
+
+extern long double erfl (long double) throw (); extern long double __erfl (long double) throw ();
+extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw ();
+extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw ();
+
+
+
+
+
+
+extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw ();
+
+
+
+
+
+extern long double gammal (long double) throw (); extern long double __gammal (long double) throw ();
+
+
+
+
+
+
+extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw ();
+
+
+
+
+
+
+
+extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw ();
+
+
+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__));
+
+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__));
+
+
+
+extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw ();
+
+
+
+extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw ();
+
+
+
+extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw ();
+
+
+
+
+extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw ();
+
+
+
+extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw ();
+
+
+
+extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__));
+
+
+
+extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__));
+
+
+
+
+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 ();
+
+
+
+
+
+
+extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw ();
+__extension__
+extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw ();
+
+
+
+extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw ();
+__extension__
+extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw ();
+
+
+
+extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw ();
+
+
+extern long double fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__));
+
+
+extern long double fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) throw () __attribute__ ((__const__));
+
+
+
+extern int __fpclassifyl (long double __value) throw ()
+     __attribute__ ((__const__));
+
+
+extern int __signbitl (long double __value) throw ()
+     __attribute__ ((__const__));
+
+
+
+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 ();
+
+
+
+
+
+
+
+
+extern int __issignalingl (long double __value) throw ()
+     __attribute__ ((__const__));
+
+
+
+
+extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw ();
+# 147 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+# 162 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+extern int signgam;
+# 203 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+enum
+  {
+    FP_NAN =
+
+      0,
+    FP_INFINITE =
+
+      1,
+    FP_ZERO =
+
+      2,
+    FP_SUBNORMAL =
+
+      3,
+    FP_NORMAL =
+
+      4
+  };
+# 315 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+typedef enum
+{
+  _IEEE_ = -1,
+  _SVID_,
+  _XOPEN_,
+  _POSIX_,
+  _ISOC_
+} _LIB_VERSION_TYPE;
+
+
+
+
+extern _LIB_VERSION_TYPE _LIB_VERSION;
+# 338 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+struct __exception
+
+
+
+  {
+    int type;
+    char *name;
+    double arg1;
+    double arg2;
+    double retval;
+  };
+
+
+extern int matherr (struct __exception *__exc) throw ();
+# 440 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathinline.h" 1 3 4
+# 61 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathinline.h" 3 4
+extern __inline __attribute__ ((__gnu_inline__)) int
+__attribute__ ((__leaf__)) __signbitf (float __x) throw ()
+{
+
+  return __builtin_signbitf (__x);
+
+
+
+
+}
+extern __inline __attribute__ ((__gnu_inline__)) int
+__attribute__ ((__leaf__)) __signbit (double __x) throw ()
+{
+
+  return __builtin_signbit (__x);
+
+
+
+
+}
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+__attribute__ ((__leaf__)) __signbitl (long double __x) throw ()
+{
+  return __signbit ((double) __x);
+}
+# 116 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/mathinline.h" 3 4
+extern __inline __attribute__ ((__gnu_inline__)) double fdim (double __x, double __y) throw ();
+extern __inline __attribute__ ((__gnu_inline__)) double
+__attribute__ ((__leaf__)) fdim (double __x, double __y) throw ()
+{
+  return __x <= __y ? 0 : __x - __y;
+}
+
+extern __inline __attribute__ ((__gnu_inline__)) float fdimf (float __x, float __y) throw ();
+extern __inline __attribute__ ((__gnu_inline__)) float
+__attribute__ ((__leaf__)) fdimf (float __x, float __y) throw ()
+{
+  return __x <= __y ? 0 : __x - __y;
+}
+# 441 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 2 3 4
+# 502 "/usr/powerpc64-unknown-linux-gnu/usr/include/math.h" 3 4
+}
+# 45 "jsxml.cpp" 2
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 1 3 4
+# 32 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 212 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 3 4
+typedef long unsigned int size_t;
+# 33 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 2 3 4
+
+extern "C" {
+
+
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/waitflags.h" 1 3 4
+# 42 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 2 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/waitstatus.h" 1 3 4
+# 64 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/waitstatus.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/endian.h" 1 3 4
+# 36 "/usr/powerpc64-unknown-linux-gnu/usr/include/endian.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/endian.h" 1 3 4
+# 37 "/usr/powerpc64-unknown-linux-gnu/usr/include/endian.h" 2 3 4
+# 60 "/usr/powerpc64-unknown-linux-gnu/usr/include/endian.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/byteswap.h" 1 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/byteswap.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/types.h" 1 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/types.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/wordsize.h" 1 3 4
+# 28 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/types.h" 2 3 4
+
+
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+
+
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+
+typedef signed long int __int64_t;
+typedef unsigned long int __uint64_t;
+
+
+
+
+
+
+
+typedef long int __quad_t;
+typedef unsigned long int __u_quad_t;
+# 121 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/types.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/typesizes.h" 1 3 4
+# 122 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/types.h" 2 3 4
+
+
+typedef unsigned long int __dev_t;
+typedef unsigned int __uid_t;
+typedef unsigned int __gid_t;
+typedef unsigned long int __ino_t;
+typedef unsigned long int __ino64_t;
+typedef unsigned int __mode_t;
+typedef unsigned long int __nlink_t;
+typedef long int __off_t;
+typedef long int __off64_t;
+typedef int __pid_t;
+typedef struct { int __val[2]; } __fsid_t;
+typedef long int __clock_t;
+typedef unsigned long int __rlim_t;
+typedef unsigned long int __rlim64_t;
+typedef unsigned int __id_t;
+typedef long int __time_t;
+typedef unsigned int __useconds_t;
+typedef long int __suseconds_t;
+
+typedef int __daddr_t;
+typedef int __key_t;
+
+
+typedef int __clockid_t;
+
+
+typedef void * __timer_t;
+
+
+typedef long int __blksize_t;
+
+
+
+
+typedef long int __blkcnt_t;
+typedef long int __blkcnt64_t;
+
+
+typedef unsigned long int __fsblkcnt_t;
+typedef unsigned long int __fsblkcnt64_t;
+
+
+typedef unsigned long int __fsfilcnt_t;
+typedef unsigned long int __fsfilcnt64_t;
+
+
+typedef long int __fsword_t;
+
+typedef long int __ssize_t;
+
+
+typedef long int __syscall_slong_t;
+
+typedef unsigned long int __syscall_ulong_t;
+
+
+
+typedef __off64_t __loff_t;
+typedef __quad_t *__qaddr_t;
+typedef char *__caddr_t;
+
+
+typedef long int __intptr_t;
+
+
+typedef unsigned int __socklen_t;
+# 28 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/byteswap.h" 2 3 4
+
+
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/byteswap-16.h" 1 3 4
+# 35 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/byteswap.h" 2 3 4
+# 43 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/byteswap.h" 3 4
+static __inline unsigned int
+__bswap_32 (unsigned int __bsx)
+{
+  return __builtin_bswap32 (__bsx);
+}
+# 74 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/byteswap.h" 3 4
+static __inline __uint64_t
+__bswap_64 (__uint64_t __bsx)
+{
+  return __builtin_bswap64 (__bsx);
+}
+# 61 "/usr/powerpc64-unknown-linux-gnu/usr/include/endian.h" 2 3 4
+# 65 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/waitstatus.h" 2 3 4
+
+union wait
+  {
+    int w_status;
+    struct
+      {
+
+
+
+
+
+
+
+ unsigned int:16;
+ unsigned int __w_retcode:8;
+ unsigned int __w_coredump:1;
+ unsigned int __w_termsig:7;
+
+      } __wait_terminated;
+    struct
+      {
+
+
+
+
+
+
+ unsigned int:16;
+ unsigned int __w_stopsig:8;
+ unsigned int __w_stopval:8;
+
+      } __wait_stopped;
+  };
+# 43 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 2 3 4
+# 95 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+
+
+typedef struct
+  {
+    int quot;
+    int rem;
+  } div_t;
+
+
+
+typedef struct
+  {
+    long int quot;
+    long int rem;
+  } ldiv_t;
+
+
+
+
+
+
+
+__extension__ typedef struct
+  {
+    long long int quot;
+    long long int rem;
+  } lldiv_t;
+
+
+# 139 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern size_t __ctype_get_mb_cur_max (void) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern double atof (const char *__nptr)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+
+extern int atoi (const char *__nptr)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+
+extern long int atol (const char *__nptr)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+__extension__ extern long long int atoll (const char *__nptr)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+extern double strtod (const char *__restrict __nptr,
+        char **__restrict __endptr)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+extern float strtof (const char *__restrict __nptr,
+       char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1)));
+
+extern long double strtold (const char *__restrict __nptr,
+       char **__restrict __endptr)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+extern long int strtol (const char *__restrict __nptr,
+   char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+extern unsigned long int strtoul (const char *__restrict __nptr,
+      char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+__extension__
+extern long long int strtoq (const char *__restrict __nptr,
+        char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+__extension__
+extern unsigned long long int strtouq (const char *__restrict __nptr,
+           char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+__extension__
+extern long long int strtoll (const char *__restrict __nptr,
+         char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+__extension__
+extern unsigned long long int strtoull (const char *__restrict __nptr,
+     char **__restrict __endptr, int __base)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+# 235 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/xlocale.h" 1 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/xlocale.h" 3 4
+typedef struct __locale_struct
+{
+
+  struct __locale_data *__locales[13];
+
+
+  const unsigned short int *__ctype_b;
+  const int *__ctype_tolower;
+  const int *__ctype_toupper;
+
+
+  const char *__names[13];
+} *__locale_t;
+
+
+typedef __locale_t locale_t;
+# 236 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 2 3 4
+
+
+
+extern long int strtol_l (const char *__restrict __nptr,
+     char **__restrict __endptr, int __base,
+     __locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4)));
+
+extern unsigned long int strtoul_l (const char *__restrict __nptr,
+        char **__restrict __endptr,
+        int __base, __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 4)));
+
+__extension__
+extern long long int strtoll_l (const char *__restrict __nptr,
+    char **__restrict __endptr, int __base,
+    __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 4)));
+
+__extension__
+extern unsigned long long int strtoull_l (const char *__restrict __nptr,
+       char **__restrict __endptr,
+       int __base, __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 4)));
+
+extern double strtod_l (const char *__restrict __nptr,
+   char **__restrict __endptr, __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 3)));
+
+extern float strtof_l (const char *__restrict __nptr,
+         char **__restrict __endptr, __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 3)));
+
+extern long double strtold_l (const char *__restrict __nptr,
+         char **__restrict __endptr,
+         __locale_t __loc)
+     throw () __attribute__ ((__nonnull__ (1, 3)));
+
+
+
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+__attribute__ ((__leaf__)) atoi (const char *__nptr) throw ()
+{
+  return (int) strtol (__nptr, (char **) __null, 10);
+}
+extern __inline __attribute__ ((__gnu_inline__)) long int
+__attribute__ ((__leaf__)) atol (const char *__nptr) throw ()
+{
+  return strtol (__nptr, (char **) __null, 10);
+}
+
+
+
+
+__extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int
+__attribute__ ((__leaf__)) atoll (const char *__nptr) throw ()
+{
+  return strtoll (__nptr, (char **) __null, 10);
+}
+
+# 305 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern char *l64a (long int __n) throw () __attribute__ ((__warn_unused_result__));
+
+
+extern long int a64l (const char *__s)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 1 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 3 4
+extern "C" {
+
+
+
+
+
+typedef __u_char u_char;
+typedef __u_short u_short;
+typedef __u_int u_int;
+typedef __u_long u_long;
+typedef __quad_t quad_t;
+typedef __u_quad_t u_quad_t;
+typedef __fsid_t fsid_t;
+
+
+
+
+typedef __loff_t loff_t;
+
+
+
+typedef __ino_t ino_t;
+
+
+
+
+
+
+typedef __ino64_t ino64_t;
+
+
+
+
+typedef __dev_t dev_t;
+
+
+
+
+typedef __gid_t gid_t;
+
+
+
+
+typedef __mode_t mode_t;
+
+
+
+
+typedef __nlink_t nlink_t;
+
+
+
+
+typedef __uid_t uid_t;
+
+
+
+
+
+typedef __off_t off_t;
+
+
+
+
+
+
+typedef __off64_t off64_t;
+
+
+
+
+typedef __pid_t pid_t;
+
+
+
+
+
+typedef __id_t id_t;
+
+
+
+
+typedef __ssize_t ssize_t;
+
+
+
+
+
+typedef __daddr_t daddr_t;
+typedef __caddr_t caddr_t;
+
+
+
+
+
+typedef __key_t key_t;
+# 132 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 1 3 4
+# 57 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+
+
+typedef __clock_t clock_t;
+
+
+
+# 73 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+
+
+typedef __time_t time_t;
+
+
+
+# 91 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+typedef __clockid_t clockid_t;
+# 103 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+typedef __timer_t timer_t;
+# 133 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 2 3 4
+
+
+
+typedef __useconds_t useconds_t;
+
+
+
+typedef __suseconds_t suseconds_t;
+
+
+
+
+
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 147 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 2 3 4
+
+
+
+typedef unsigned long int ulong;
+typedef unsigned short int ushort;
+typedef unsigned int uint;
+# 194 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 3 4
+typedef int int8_t __attribute__ ((__mode__ (__QI__)));
+typedef int int16_t __attribute__ ((__mode__ (__HI__)));
+typedef int int32_t __attribute__ ((__mode__ (__SI__)));
+typedef int int64_t __attribute__ ((__mode__ (__DI__)));
+
+
+typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
+typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
+typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
+typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
+
+typedef int register_t __attribute__ ((__mode__ (__word__)));
+# 219 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 1 3 4
+# 30 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/select.h" 1 3 4
+# 31 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 2 3 4
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/sigset.h" 1 3 4
+# 22 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/sigset.h" 3 4
+typedef int __sig_atomic_t;
+
+
+
+
+typedef struct
+  {
+    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
+  } __sigset_t;
+# 34 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 2 3 4
+
+
+
+typedef __sigset_t sigset_t;
+
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 1 3 4
+# 120 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+struct timespec
+  {
+    __time_t tv_sec;
+    __syscall_slong_t tv_nsec;
+  };
+# 44 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 2 3 4
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/time.h" 1 3 4
+# 30 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/time.h" 3 4
+struct timeval
+  {
+    __time_t tv_sec;
+    __suseconds_t tv_usec;
+  };
+# 46 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 2 3 4
+# 54 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 3 4
+typedef long int __fd_mask;
+# 64 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 3 4
+typedef struct
+  {
+
+
+
+    __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
+
+
+
+
+
+  } fd_set;
+
+
+
+
+
+
+typedef __fd_mask fd_mask;
+# 96 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 3 4
+extern "C" {
+# 106 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 3 4
+extern int select (int __nfds, fd_set *__restrict __readfds,
+     fd_set *__restrict __writefds,
+     fd_set *__restrict __exceptfds,
+     struct timeval *__restrict __timeout);
+# 118 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 3 4
+extern int pselect (int __nfds, fd_set *__restrict __readfds,
+      fd_set *__restrict __writefds,
+      fd_set *__restrict __exceptfds,
+      const struct timespec *__restrict __timeout,
+      const __sigset_t *__restrict __sigmask);
+
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/select2.h" 1 3 4
+# 24 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/select2.h" 3 4
+extern long int __fdelt_chk (long int __d);
+extern long int __fdelt_warn (long int __d)
+  __attribute__((__warning__ ("bit outside of fd_set selected")));
+# 129 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/select.h" 2 3 4
+
+
+}
+# 220 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 2 3 4
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/sysmacros.h" 1 3 4
+# 24 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/sysmacros.h" 3 4
+extern "C" {
+
+__extension__
+extern unsigned int gnu_dev_major (unsigned long long int __dev)
+     throw () __attribute__ ((__const__));
+__extension__
+extern unsigned int gnu_dev_minor (unsigned long long int __dev)
+     throw () __attribute__ ((__const__));
+__extension__
+extern unsigned long long int gnu_dev_makedev (unsigned int __major,
+            unsigned int __minor)
+     throw () __attribute__ ((__const__));
+
+
+__extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned int
+__attribute__ ((__leaf__)) gnu_dev_major (unsigned long long int __dev) throw ()
+{
+  return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
+}
+
+__extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned int
+__attribute__ ((__leaf__)) gnu_dev_minor (unsigned long long int __dev) throw ()
+{
+  return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
+}
+
+__extension__ extern __inline __attribute__ ((__gnu_inline__)) __attribute__ ((__const__)) unsigned long long int
+__attribute__ ((__leaf__)) gnu_dev_makedev (unsigned int __major, unsigned int __minor) throw ()
+{
+  return ((__minor & 0xff) | ((__major & 0xfff) << 8)
+   | (((unsigned long long int) (__minor & ~0xff)) << 12)
+   | (((unsigned long long int) (__major & ~0xfff)) << 32));
+}
+
+}
+# 223 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 2 3 4
+
+
+
+
+
+typedef __blksize_t blksize_t;
+
+
+
+
+
+
+typedef __blkcnt_t blkcnt_t;
+
+
+
+typedef __fsblkcnt_t fsblkcnt_t;
+
+
+
+typedef __fsfilcnt_t fsfilcnt_t;
+# 262 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 3 4
+typedef __blkcnt64_t blkcnt64_t;
+typedef __fsblkcnt64_t fsblkcnt64_t;
+typedef __fsfilcnt64_t fsfilcnt64_t;
+
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/pthreadtypes.h" 1 3 4
+# 22 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/pthreadtypes.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/wordsize.h" 1 3 4
+# 23 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/pthreadtypes.h" 2 3 4
+# 49 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/pthreadtypes.h" 3 4
+typedef unsigned long int pthread_t;
+
+
+union pthread_attr_t
+{
+  char __size[56];
+  long int __align;
+};
+
+typedef union pthread_attr_t pthread_attr_t;
+
+
+
+
+
+typedef struct __pthread_internal_list
+{
+  struct __pthread_internal_list *__prev;
+  struct __pthread_internal_list *__next;
+} __pthread_list_t;
+# 79 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/pthreadtypes.h" 3 4
+typedef union
+{
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+
+    unsigned int __nusers;
+
+
+
+    int __kind;
+
+    short __spins;
+    short __elision;
+    __pthread_list_t __list;
+# 113 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/pthreadtypes.h" 3 4
+  } __data;
+  char __size[40];
+  long int __align;
+} pthread_mutex_t;
+
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_mutexattr_t;
+
+
+
+
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __futex;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
+    void *__mutex;
+    unsigned int __nwaiters;
+    unsigned int __broadcast_seq;
+  } __data;
+  char __size[48];
+  __extension__ long long int __align;
+} pthread_cond_t;
+
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_condattr_t;
+
+
+
+typedef unsigned int pthread_key_t;
+
+
+
+typedef int pthread_once_t;
+
+
+
+
+
+typedef union
+{
+
+  struct
+  {
+    int __lock;
+    unsigned int __nr_readers;
+    unsigned int __readers_wakeup;
+    unsigned int __writer_wakeup;
+    unsigned int __nr_readers_queued;
+    unsigned int __nr_writers_queued;
+    int __writer;
+    int __shared;
+    unsigned char __rwelision;
+    unsigned char __pad1[7];
+    unsigned long int __pad2;
+
+
+    unsigned int __flags;
+
+  } __data;
+# 202 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/pthreadtypes.h" 3 4
+  char __size[56];
+  long int __align;
+} pthread_rwlock_t;
+
+
+typedef union
+{
+  char __size[8];
+  long int __align;
+} pthread_rwlockattr_t;
+
+
+
+
+
+typedef volatile int pthread_spinlock_t;
+
+
+
+
+typedef union
+{
+  char __size[32];
+  long int __align;
+} pthread_barrier_t;
+
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_barrierattr_t;
+# 271 "/usr/powerpc64-unknown-linux-gnu/usr/include/sys/types.h" 2 3 4
+
+
+}
+# 315 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 2 3 4
+
+
+
+
+
+
+extern long int random (void) throw ();
+
+
+extern void srandom (unsigned int __seed) throw ();
+
+
+
+
+
+extern char *initstate (unsigned int __seed, char *__statebuf,
+   size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
+
+
+
+extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+
+struct random_data
+  {
+    int32_t *fptr;
+    int32_t *rptr;
+    int32_t *state;
+    int rand_type;
+    int rand_deg;
+    int rand_sep;
+    int32_t *end_ptr;
+  };
+
+extern int random_r (struct random_data *__restrict __buf,
+       int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
+
+extern int srandom_r (unsigned int __seed, struct random_data *__buf)
+     throw () __attribute__ ((__nonnull__ (2)));
+
+extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
+   size_t __statelen,
+   struct random_data *__restrict __buf)
+     throw () __attribute__ ((__nonnull__ (2, 4)));
+
+extern int setstate_r (char *__restrict __statebuf,
+         struct random_data *__restrict __buf)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+
+
+
+extern int rand (void) throw ();
+
+extern void srand (unsigned int __seed) throw ();
+
+
+
+
+extern int rand_r (unsigned int *__seed) throw ();
+
+
+
+
+
+
+
+extern double drand48 (void) throw ();
+extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
+
+
+extern long int lrand48 (void) throw ();
+extern long int nrand48 (unsigned short int __xsubi[3])
+     throw () __attribute__ ((__nonnull__ (1)));
+
+
+extern long int mrand48 (void) throw ();
+extern long int jrand48 (unsigned short int __xsubi[3])
+     throw () __attribute__ ((__nonnull__ (1)));
+
+
+extern void srand48 (long int __seedval) throw ();
+extern unsigned short int *seed48 (unsigned short int __seed16v[3])
+     throw () __attribute__ ((__nonnull__ (1)));
+extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+struct drand48_data
+  {
+    unsigned short int __x[3];
+    unsigned short int __old_x[3];
+    unsigned short int __c;
+    unsigned short int __init;
+    __extension__ unsigned long long int __a;
+
+  };
+
+
+extern int drand48_r (struct drand48_data *__restrict __buffer,
+        double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int erand48_r (unsigned short int __xsubi[3],
+        struct drand48_data *__restrict __buffer,
+        double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern int lrand48_r (struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int nrand48_r (unsigned short int __xsubi[3],
+        struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern int mrand48_r (struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern int jrand48_r (unsigned short int __xsubi[3],
+        struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
+     throw () __attribute__ ((__nonnull__ (2)));
+
+extern int seed48_r (unsigned short int __seed16v[3],
+       struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
+
+extern int lcong48_r (unsigned short int __param[7],
+        struct drand48_data *__buffer)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+
+
+
+
+
+
+extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
+
+extern void *calloc (size_t __nmemb, size_t __size)
+     throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+
+
+
+
+extern void *realloc (void *__ptr, size_t __size)
+     throw () __attribute__ ((__warn_unused_result__));
+
+extern void free (void *__ptr) throw ();
+
+
+
+
+extern void cfree (void *__ptr) throw ();
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/alloca.h" 1 3 4
+# 24 "/usr/powerpc64-unknown-linux-gnu/usr/include/alloca.h" 3 4
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 25 "/usr/powerpc64-unknown-linux-gnu/usr/include/alloca.h" 2 3 4
+
+extern "C" {
+
+
+
+
+
+extern void *alloca (size_t __size) throw ();
+
+
+
+
+
+}
+# 493 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 2 3 4
+
+
+
+
+
+extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
+     throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern void *aligned_alloc (size_t __alignment, size_t __size)
+     throw () __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern void abort (void) throw () __attribute__ ((__noreturn__));
+
+
+
+extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+extern "C++" int at_quick_exit (void (*__func) (void))
+     throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+
+
+
+extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+extern void exit (int __status) throw () __attribute__ ((__noreturn__));
+
+
+
+
+
+extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__));
+
+
+
+
+
+
+
+extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
+
+
+
+
+
+
+extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+extern char *secure_getenv (const char *__name)
+     throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+extern int setenv (const char *__name, const char *__value, int __replace)
+     throw () __attribute__ ((__nonnull__ (2)));
+
+
+extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+extern int clearenv (void) throw ();
+# 606 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1)));
+# 619 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 629 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 641 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 651 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern int mkstemps64 (char *__template, int __suffixlen)
+     __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 662 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 673 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 683 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 693 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern int mkostemps (char *__template, int __suffixlen, int __flags)
+     __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 705 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
+     __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+
+
+
+extern int system (const char *__command) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+extern char *canonicalize_file_name (const char *__name)
+     throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 733 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern char *realpath (const char *__restrict __name,
+         char *__restrict __resolved) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+typedef int (*__compar_fn_t) (const void *, const void *);
+
+
+typedef __compar_fn_t comparison_fn_t;
+
+
+
+typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
+
+
+
+
+
+extern void *bsearch (const void *__key, const void *__base,
+        size_t __nmemb, size_t __size, __compar_fn_t __compar)
+     __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__));
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdlib-bsearch.h" 1 3 4
+# 19 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdlib-bsearch.h" 3 4
+extern __inline __attribute__ ((__gnu_inline__)) void *
+bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
+  __compar_fn_t __compar)
+{
+  size_t __l, __u, __idx;
+  const void *__p;
+  int __comparison;
+
+  __l = 0;
+  __u = __nmemb;
+  while (__l < __u)
+    {
+      __idx = (__l + __u) / 2;
+      __p = (void *) (((const char *) __base) + (__idx * __size));
+      __comparison = (*__compar) (__key, __p);
+      if (__comparison < 0)
+ __u = __idx;
+      else if (__comparison > 0)
+ __l = __idx + 1;
+      else
+ return (void *) __p;
+    }
+
+  return __null;
+}
+# 760 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 2 3 4
+
+
+
+
+extern void qsort (void *__base, size_t __nmemb, size_t __size,
+     __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
+
+extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
+       __compar_d_fn_t __compar, void *__arg)
+  __attribute__ ((__nonnull__ (1, 4)));
+
+
+
+
+extern int abs (int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+extern long int labs (long int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+
+
+
+__extension__ extern long long int llabs (long long int __x)
+     throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+
+extern div_t div (int __numer, int __denom)
+     throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+extern ldiv_t ldiv (long int __numer, long int __denom)
+     throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+
+
+
+
+__extension__ extern lldiv_t lldiv (long long int __numer,
+        long long int __denom)
+     throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+
+# 811 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern char *gcvt (double __value, int __ndigit, char *__buf)
+     throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern char *qecvt (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign)
+     throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
+extern char *qfcvt (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign)
+     throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
+extern char *qgcvt (long double __value, int __ndigit, char *__buf)
+     throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign, char *__restrict __buf,
+     size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign, char *__restrict __buf,
+     size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+
+extern int qecvt_r (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign,
+      char *__restrict __buf, size_t __len)
+     throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int qfcvt_r (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign,
+      char *__restrict __buf, size_t __len)
+     throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+
+
+
+
+
+
+extern int mblen (const char *__s, size_t __n) throw ();
+
+
+extern int mbtowc (wchar_t *__restrict __pwc,
+     const char *__restrict __s, size_t __n) throw ();
+
+
+extern int wctomb (char *__s, wchar_t __wchar) throw ();
+
+
+
+extern size_t mbstowcs (wchar_t *__restrict __pwcs,
+   const char *__restrict __s, size_t __n) throw ();
+
+extern size_t wcstombs (char *__restrict __s,
+   const wchar_t *__restrict __pwcs, size_t __n)
+     throw ();
+
+
+
+
+
+
+
+
+extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+# 898 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+extern int getsubopt (char **__restrict __optionp,
+        char *const *__restrict __tokens,
+        char **__restrict __valuep)
+     throw () __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+extern void setkey (const char *__key) throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+
+extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+
+extern int grantpt (int __fd) throw ();
+
+
+
+extern int unlockpt (int __fd) throw ();
+
+
+
+
+extern char *ptsname (int __fd) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
+     throw () __attribute__ ((__nonnull__ (2)));
+
+
+extern int getpt (void);
+
+
+
+
+
+
+extern int getloadavg (double __loadavg[], int __nelem)
+     throw () __attribute__ ((__nonnull__ (1)));
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdlib-float.h" 1 3 4
+# 24 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdlib-float.h" 3 4
+
+extern __inline __attribute__ ((__gnu_inline__)) double
+__attribute__ ((__leaf__)) atof (const char *__nptr) throw ()
+{
+  return strtod (__nptr, (char **) __null);
+}
+
+# 955 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 2 3 4
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdlib.h" 1 3 4
+# 23 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdlib.h" 3 4
+extern char *__realpath_chk (const char *__restrict __name,
+        char *__restrict __resolved,
+        size_t __resolvedlen) throw () __attribute__ ((__warn_unused_result__));
+extern char *__realpath_alias (const char *__restrict __name, char *__restrict __resolved) throw () __asm__ ("" "realpath")
+
+                                                 __attribute__ ((__warn_unused_result__));
+extern char *__realpath_chk_warn (const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) throw () __asm__ ("" "__realpath_chk")
+
+
+                                                __attribute__ ((__warn_unused_result__))
+     __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer")))
+                                      ;
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
+__attribute__ ((__leaf__)) realpath (const char *__restrict __name, char *__restrict __resolved) throw ()
+{
+  if (__builtin_object_size (__resolved, 2 > 1) != (size_t) -1)
+    {
+
+
+
+
+      return __realpath_chk (__name, __resolved, __builtin_object_size (__resolved, 2 > 1));
+    }
+
+  return __realpath_alias (__name, __resolved);
+}
+
+
+extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
+       size_t __nreal) throw () __attribute__ ((__nonnull__ (2)));
+extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) throw () __asm__ ("" "ptsname_r")
+
+     __attribute__ ((__nonnull__ (2)));
+extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) throw () __asm__ ("" "__ptsname_r_chk")
+
+
+     __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf")))
+                   ;
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) ptsname_r (int __fd, char *__buf, size_t __buflen) throw ()
+{
+  if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__buflen))
+ return __ptsname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
+      if (__buflen > __builtin_object_size (__buf, 2 > 1))
+ return __ptsname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
+    }
+  return __ptsname_r_alias (__fd, __buf, __buflen);
+}
+
+
+extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
+  throw () __attribute__ ((__warn_unused_result__));
+extern int __wctomb_alias (char *__s, wchar_t __wchar) throw () __asm__ ("" "wctomb")
+              __attribute__ ((__warn_unused_result__));
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) int
+__attribute__ ((__leaf__)) wctomb (char *__s, wchar_t __wchar) throw ()
+{
+
+
+
+
+
+
+
+  if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 && 16 > __builtin_object_size (__s, 2 > 1))
+    return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1));
+  return __wctomb_alias (__s, __wchar);
+}
+
+
+extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
+         const char *__restrict __src,
+         size_t __len, size_t __dstlen) throw ();
+extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) throw () __asm__ ("" "mbstowcs")
+
+
+                                  ;
+extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__mbstowcs_chk")
+
+
+
+     __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
+                        ;
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
+__attribute__ ((__leaf__)) mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) throw ()
+
+{
+  if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+ return __mbstowcs_chk (__dst, __src, __len,
+          __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
+
+      if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
+ return __mbstowcs_chk_warn (__dst, __src, __len,
+         __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
+    }
+  return __mbstowcs_alias (__dst, __src, __len);
+}
+
+
+extern size_t __wcstombs_chk (char *__restrict __dst,
+         const wchar_t *__restrict __src,
+         size_t __len, size_t __dstlen) throw ();
+extern size_t __wcstombs_alias (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) throw () __asm__ ("" "wcstombs")
+
+
+                                  ;
+extern size_t __wcstombs_chk_warn (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__wcstombs_chk")
+
+
+
+     __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len")));
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
+__attribute__ ((__leaf__)) wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) throw ()
+
+{
+  if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__len))
+ return __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
+      if (__len > __builtin_object_size (__dst, 2 > 1))
+ return __wcstombs_chk_warn (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
+    }
+  return __wcstombs_alias (__dst, __src, __len);
+}
+# 959 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 2 3 4
+# 967 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdlib.h" 3 4
+}
+# 46 "jsxml.cpp" 2
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/string.h" 1 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/string.h" 3 4
+extern "C" {
+
+
+
+
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 33 "/usr/powerpc64-unknown-linux-gnu/usr/include/string.h" 2 3 4
+
+
+
+
+
+
+
+
+
+extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
+       size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern void *memmove (void *__dest, const void *__src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+
+
+
+extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
+        int __c, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+
+
+extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+
+
+extern int memcmp (const void *__s1, const void *__s2, size_t __n)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+extern "C++"
+{
+extern void *memchr (void *__s, int __c, size_t __n)
+      throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern const void *memchr (const void *__s, int __c, size_t __n)
+      throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void *
+memchr (void *__s, int __c, size_t __n) throw ()
+{
+  return __builtin_memchr (__s, __c, __n);
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const void *
+memchr (const void *__s, int __c, size_t __n) throw ()
+{
+  return __builtin_memchr (__s, __c, __n);
+}
+
+}
+
+
+
+
+
+
+
+
+
+
+extern "C++" void *rawmemchr (void *__s, int __c)
+     throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern "C++" const void *rawmemchr (const void *__s, int __c)
+     throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+
+extern "C++" void *memrchr (void *__s, int __c, size_t __n)
+      throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern "C++" const void *memrchr (const void *__s, int __c, size_t __n)
+      throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+
+
+
+extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+extern char *strncpy (char *__restrict __dest,
+        const char *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern char *strcat (char *__restrict __dest, const char *__restrict __src)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+extern char *strncat (char *__restrict __dest, const char *__restrict __src,
+        size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern int strcmp (const char *__s1, const char *__s2)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+extern int strncmp (const char *__s1, const char *__s2, size_t __n)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern int strcoll (const char *__s1, const char *__s2)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+extern size_t strxfrm (char *__restrict __dest,
+         const char *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (2)));
+
+# 162 "/usr/powerpc64-unknown-linux-gnu/usr/include/string.h" 3 4
+extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
+
+extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
+    __locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4)));
+
+
+
+
+extern char *strdup (const char *__s)
+     throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+extern char *strndup (const char *__string, size_t __n)
+     throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
+# 206 "/usr/powerpc64-unknown-linux-gnu/usr/include/string.h" 3 4
+
+
+
+extern "C++"
+{
+extern char *strchr (char *__s, int __c)
+     throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern const char *strchr (const char *__s, int __c)
+     throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+strchr (char *__s, int __c) throw ()
+{
+  return __builtin_strchr (__s, __c);
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+strchr (const char *__s, int __c) throw ()
+{
+  return __builtin_strchr (__s, __c);
+}
+
+}
+
+
+
+
+
+
+extern "C++"
+{
+extern char *strrchr (char *__s, int __c)
+     throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern const char *strrchr (const char *__s, int __c)
+     throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+strrchr (char *__s, int __c) throw ()
+{
+  return __builtin_strrchr (__s, __c);
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+strrchr (const char *__s, int __c) throw ()
+{
+  return __builtin_strrchr (__s, __c);
+}
+
+}
+
+
+
+
+
+
+
+
+
+
+extern "C++" char *strchrnul (char *__s, int __c)
+     throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern "C++" const char *strchrnul (const char *__s, int __c)
+     throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+
+
+
+extern size_t strcspn (const char *__s, const char *__reject)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern size_t strspn (const char *__s, const char *__accept)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern "C++"
+{
+extern char *strpbrk (char *__s, const char *__accept)
+     throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern const char *strpbrk (const char *__s, const char *__accept)
+     throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+strpbrk (char *__s, const char *__accept) throw ()
+{
+  return __builtin_strpbrk (__s, __accept);
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+strpbrk (const char *__s, const char *__accept) throw ()
+{
+  return __builtin_strpbrk (__s, __accept);
+}
+
+}
+
+
+
+
+
+
+extern "C++"
+{
+extern char *strstr (char *__haystack, const char *__needle)
+     throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern const char *strstr (const char *__haystack, const char *__needle)
+     throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+strstr (char *__haystack, const char *__needle) throw ()
+{
+  return __builtin_strstr (__haystack, __needle);
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+strstr (const char *__haystack, const char *__needle) throw ()
+{
+  return __builtin_strstr (__haystack, __needle);
+}
+
+}
+
+
+
+
+
+
+
+extern char *strtok (char *__restrict __s, const char *__restrict __delim)
+     throw () __attribute__ ((__nonnull__ (2)));
+
+
+
+
+extern char *__strtok_r (char *__restrict __s,
+    const char *__restrict __delim,
+    char **__restrict __save_ptr)
+     throw () __attribute__ ((__nonnull__ (2, 3)));
+
+extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
+         char **__restrict __save_ptr)
+     throw () __attribute__ ((__nonnull__ (2, 3)));
+
+
+
+
+
+extern "C++" char *strcasestr (char *__haystack, const char *__needle)
+     throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern "C++" const char *strcasestr (const char *__haystack,
+         const char *__needle)
+     throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+# 377 "/usr/powerpc64-unknown-linux-gnu/usr/include/string.h" 3 4
+extern void *memmem (const void *__haystack, size_t __haystacklen,
+       const void *__needle, size_t __needlelen)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
+
+
+
+extern void *__mempcpy (void *__restrict __dest,
+   const void *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern void *mempcpy (void *__restrict __dest,
+        const void *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+
+
+extern size_t strlen (const char *__s)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+extern size_t strnlen (const char *__string, size_t __maxlen)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+extern char *strerror (int __errnum) throw ();
+
+# 433 "/usr/powerpc64-unknown-linux-gnu/usr/include/string.h" 3 4
+extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
+     throw () __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+extern char *strerror_l (int __errnum, __locale_t __l) throw ();
+
+
+
+
+
+extern void __bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+extern void bcopy (const void *__src, void *__dest, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+
+
+extern int bcmp (const void *__s1, const void *__s2, size_t __n)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+extern "C++"
+{
+extern char *index (char *__s, int __c)
+     throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern const char *index (const char *__s, int __c)
+     throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+index (char *__s, int __c) throw ()
+{
+  return __builtin_index (__s, __c);
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+index (const char *__s, int __c) throw ()
+{
+  return __builtin_index (__s, __c);
+}
+
+}
+
+
+
+
+
+
+
+extern "C++"
+{
+extern char *rindex (char *__s, int __c)
+     throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern const char *rindex (const char *__s, int __c)
+     throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+rindex (char *__s, int __c) throw ()
+{
+  return __builtin_rindex (__s, __c);
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+rindex (const char *__s, int __c) throw ()
+{
+  return __builtin_rindex (__s, __c);
+}
+
+}
+
+
+
+
+
+
+
+extern int ffs (int __i) throw () __attribute__ ((__const__));
+
+
+
+
+extern int ffsl (long int __l) throw () __attribute__ ((__const__));
+__extension__ extern int ffsll (long long int __ll)
+     throw () __attribute__ ((__const__));
+
+
+
+extern int strcasecmp (const char *__s1, const char *__s2)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+
+
+extern int strcasecmp_l (const char *__s1, const char *__s2,
+    __locale_t __loc)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
+
+extern int strncasecmp_l (const char *__s1, const char *__s2,
+     size_t __n, __locale_t __loc)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
+
+
+
+
+
+extern char *strsep (char **__restrict __stringp,
+       const char *__restrict __delim)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+
+extern char *strsignal (int __sig) throw ();
+
+
+extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+extern char *__stpncpy (char *__restrict __dest,
+   const char *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+extern char *stpncpy (char *__restrict __dest,
+        const char *__restrict __src, size_t __n)
+     throw () __attribute__ ((__nonnull__ (1, 2)));
+
+
+
+
+extern int strverscmp (const char *__s1, const char *__s2)
+     throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+
+
+extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1)));
+
+
+extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+
+
+
+
+
+
+
+extern "C++" char *basename (char *__filename)
+     throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
+extern "C++" const char *basename (const char *__filename)
+     throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
+# 635 "/usr/powerpc64-unknown-linux-gnu/usr/include/string.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/string3.h" 1 3 4
+# 23 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/string3.h" 3 4
+extern void __warn_memset_zero_len (void) __attribute__((__warning__ ("memset used with constant zero length parameter; this could be due to transposed parameters")))
+                                                                                                   ;
+# 49 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/string3.h" 3 4
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
+__attribute__ ((__leaf__)) memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) throw ()
+
+{
+  return __builtin___memcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
+__attribute__ ((__leaf__)) memmove (void *__dest, const void *__src, size_t __len) throw ()
+{
+  return __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
+}
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
+__attribute__ ((__leaf__)) mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) throw ()
+
+{
+  return __builtin___mempcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
+}
+# 77 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/string3.h" 3 4
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
+__attribute__ ((__leaf__)) memset (void *__dest, int __ch, size_t __len) throw ()
+{
+
+
+
+  if (__builtin_constant_p (__len) && __len == 0
+      && (!__builtin_constant_p (__ch) || __ch != 0))
+    {
+      __warn_memset_zero_len ();
+      return __dest;
+    }
+
+  return __builtin___memset_chk (__dest, __ch, __len, __builtin_object_size (__dest, 0));
+}
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
+__attribute__ ((__leaf__)) bcopy (const void *__src, void *__dest, size_t __len) throw ()
+{
+  (void) __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
+__attribute__ ((__leaf__)) bzero (void *__dest, size_t __len) throw ()
+{
+  (void) __builtin___memset_chk (__dest, '\0', __len, __builtin_object_size (__dest, 0));
+}
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+__attribute__ ((__leaf__)) strcpy (char *__restrict __dest, const char *__restrict __src) throw ()
+{
+  return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
+}
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+__attribute__ ((__leaf__)) stpcpy (char *__restrict __dest, const char *__restrict __src) throw ()
+{
+  return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
+}
+
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+__attribute__ ((__leaf__)) strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len) throw ()
+
+{
+  return __builtin___strncpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
+}
+
+
+extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
+       size_t __destlen) throw ();
+extern char *__stpncpy_alias (char *__dest, const char *__src, size_t __n) throw () __asm__ ("" "stpncpy")
+                                 ;
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+__attribute__ ((__leaf__)) stpncpy (char *__dest, const char *__src, size_t __n) throw ()
+{
+  if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1
+      && (!__builtin_constant_p (__n) || __n <= __builtin_object_size (__dest, 2 > 1)))
+    return __stpncpy_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1));
+  return __stpncpy_alias (__dest, __src, __n);
+}
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+__attribute__ ((__leaf__)) strcat (char *__restrict __dest, const char *__restrict __src) throw ()
+{
+  return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
+}
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+__attribute__ ((__leaf__)) strncat (char *__restrict __dest, const char *__restrict __src, size_t __len) throw ()
+
+{
+  return __builtin___strncat_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
+}
+# 636 "/usr/powerpc64-unknown-linux-gnu/usr/include/string.h" 2 3 4
+
+
+
+}
+# 47 "jsxml.cpp" 2
+# 1 "jstypes.h" 1
+# 57 "jstypes.h"
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 147 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 3 4
+typedef long int ptrdiff_t;
+# 58 "jstypes.h" 2
+# 1 "js-config.h" 1
+# 59 "jstypes.h" 2
+# 314 "jstypes.h"
+# 1 "jsautocfg.h" 1
+# 315 "jstypes.h" 2
+# 338 "jstypes.h"
+# 1 "jsinttypes.h" 1
+# 74 "jsinttypes.h"
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stdint.h" 1 3 4
+# 9 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stdint.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 1 3 4
+# 26 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/wchar.h" 1 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 2 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/wordsize.h" 1 3 4
+# 28 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 2 3 4
+# 48 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 3 4
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+
+typedef unsigned int uint32_t;
+
+
+
+typedef unsigned long int uint64_t;
+# 65 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 3 4
+typedef signed char int_least8_t;
+typedef short int int_least16_t;
+typedef int int_least32_t;
+
+typedef long int int_least64_t;
+
+
+
+
+
+
+typedef unsigned char uint_least8_t;
+typedef unsigned short int uint_least16_t;
+typedef unsigned int uint_least32_t;
+
+typedef unsigned long int uint_least64_t;
+# 90 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 3 4
+typedef signed char int_fast8_t;
+
+typedef long int int_fast16_t;
+typedef long int int_fast32_t;
+typedef long int int_fast64_t;
+# 103 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 3 4
+typedef unsigned char uint_fast8_t;
+
+typedef unsigned long int uint_fast16_t;
+typedef unsigned long int uint_fast32_t;
+typedef unsigned long int uint_fast64_t;
+# 119 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 3 4
+typedef long int intptr_t;
+
+
+typedef unsigned long int uintptr_t;
+# 134 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdint.h" 3 4
+typedef long int intmax_t;
+typedef unsigned long int uintmax_t;
+# 10 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stdint.h" 2 3 4
+# 75 "jsinttypes.h" 2
+
+
+
+
+typedef int8_t JSInt8;
+typedef int16_t JSInt16;
+typedef int32_t JSInt32;
+typedef int64_t JSInt64;
+typedef intptr_t JSIntPtr;
+
+typedef uint8_t JSUint8;
+typedef uint16_t JSUint16;
+typedef uint32_t JSUint32;
+typedef uint64_t JSUint64;
+typedef uintptr_t JSUintPtr;
+# 339 "jstypes.h" 2
+
+extern "C" {
+# 352 "jstypes.h"
+typedef int JSIntn;
+typedef unsigned int JSUintn;
+
+
+
+
+
+
+typedef double JSFloat64;
+
+
+
+
+
+
+typedef size_t JSSize;
+
+
+
+
+
+
+
+typedef ptrdiff_t JSPtrdiff;
+
+
+
+
+
+
+
+typedef JSUintPtr JSUptrdiff;
+# 393 "jstypes.h"
+typedef JSIntn JSBool;
+# 408 "jstypes.h"
+typedef JSUint8 JSPackedBool;
+
+
+
+
+typedef JSIntPtr JSWord;
+typedef JSUintPtr JSUword;
+
+# 1 "jsotypes.h" 1
+# 76 "jsotypes.h"
+typedef JSUintn uintn;
+typedef JSUint64 uint64;
+typedef JSUint32 uint32;
+typedef JSUint16 uint16;
+typedef JSUint8 uint8;
+
+
+typedef JSIntn intn;
+# 103 "jsotypes.h"
+typedef JSInt64 int64;
+
+
+typedef JSInt32 int32;
+typedef JSInt16 int16;
+typedef JSInt8 int8;
+
+
+
+
+typedef JSFloat64 float64;
+# 417 "jstypes.h" 2
+# 505 "jstypes.h"
+}
+# 48 "jsxml.cpp" 2
+# 1 "jsstdint.h" 1
+# 49 "jsxml.cpp" 2
+# 1 "jsbit.h" 1
+# 43 "jsbit.h"
+# 1 "jscompat.h" 1
+# 48 "jscompat.h"
+# 1 "jslong.h" 1
+# 52 "jslong.h"
+extern "C" {
+# 165 "jslong.h"
+}
+# 49 "jscompat.h" 2
+
+typedef JSIntn intN;
+typedef JSUintn uintN;
+typedef JSUword jsuword;
+typedef JSWord jsword;
+typedef float float32;
+# 44 "jsbit.h" 2
+# 1 "jsutil.h" 1
+# 51 "jsutil.h"
+extern "C" {
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_Assert(const char *s, const char *file, JSIntn ln);
+# 133 "jsutil.h"
+extern __attribute__((visibility ("default"))) void JS_Abort(void);
+# 212 "jsutil.h"
+static inline void* js_malloc(size_t bytes) {
+    return malloc(bytes);
+}
+
+static inline void* js_calloc(size_t bytes) {
+    return calloc(bytes, 1);
+}
+
+static inline void* js_realloc(void* p, size_t bytes) {
+    return realloc(p, bytes);
+}
+
+static inline void js_free(void* p) {
+    free(p);
+}
+
+
+}
+# 253 "jsutil.h"
+template <class T>
+__attribute__((always_inline)) inline T *js_new() {
+    void *memory = js_malloc(sizeof(T)); return memory ? new(memory) T () : __null;
+}
+
+template <class T, class P1>
+__attribute__((always_inline)) inline T *js_new(const 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 T *js_new(const P1 &p1, const 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 T *js_new(const P1 &p1, const P2 &p2, const 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 T *js_new(const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4) {
+    void *memory = js_malloc(sizeof(T)); return memory ? new(memory) T (p1, p2, p3, p4) : __null;
+}
+
+
+
+
+
+template <class T>
+__attribute__((always_inline)) inline void js_delete(T *p) {
+    if (p) {
+        p->~T();
+        js_free(p);
+    }
+}
+
+static const int JSMinAlignment = 8;
+
+template <class T>
+__attribute__((always_inline)) inline T *js_array_new(size_t n) {
+
+    uint64 numBytes64 = uint64(JSMinAlignment) + uint64(sizeof(T)) * uint64(n);
+    size_t numBytes = size_t(numBytes64);
+    if (numBytes64 != numBytes) {
+        ((void) 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];
+}
+
+template <class T>
+__attribute__((always_inline)) inline void js_array_delete(T *p) {
+    if (p) {
+  void* p0 = (void *)(uintptr_t(p) - JSMinAlignment);
+  size_t n = *(size_t *)p0;
+  for (size_t i = 0; i < n; i++)
+   (p + i)->~T();
+  js_free(p0);
+    }
+}
+# 416 "jsutil.h"
+namespace js {
+
+template <class T>
+__attribute__((always_inline)) inline static void
+PodZero(T *t)
+{
+    memset(t, 0, sizeof(T));
+}
+
+template <class T>
+__attribute__((always_inline)) inline static void
+PodZero(T *t, size_t nelem)
+{
+    memset(t, 0, nelem * sizeof(T));
+}
+# 439 "jsutil.h"
+template <class T, size_t N> static void PodZero(T (&)[N]);
+template <class T, size_t N> static void PodZero(T (&)[N], size_t);
+
+template <class T, size_t N>
+__attribute__((always_inline)) inline static void
+PodArrayZero(T (&t)[N])
+{
+    memset(t, 0, N * sizeof(T));
+}
+
+template <class T>
+__attribute__((always_inline)) inline static void
+PodCopy(T *dst, const T *src, size_t nelem)
+{
+
+    ((void) 0);
+    ((void) 0);
+
+    if (nelem < 128) {
+        for (const T *srcend = src + nelem; src != srcend; ++src, ++dst)
+            *dst = *src;
+    } else {
+        memcpy(dst, src, nelem * sizeof(T));
+    }
+}
+
+}
+# 45 "jsbit.h" 2
+
+extern "C" {
+
+
+
+
+typedef jsuword jsbitmap_t;
+typedef jsbitmap_t jsbitmap;
+# 67 "jsbit.h"
+extern __attribute__((visibility ("default"))) JSIntn JS_CeilingLog2(JSUint32 i);
+
+
+
+
+extern __attribute__((visibility ("default"))) JSIntn JS_FloorLog2(JSUint32 i);
+# 255 "jsbit.h"
+namespace js {
+
+inline size_t
+CountTrailingZeros(size_t n)
+{
+    ((void) 0);
+
+
+
+
+
+
+
+    return __builtin_ctzll(n);
+# 281 "jsbit.h"
+}
+
+}
+# 304 "jsbit.h"
+}
+# 50 "jsxml.cpp" 2
+# 1 "jsprf.h" 1
+# 61 "jsprf.h"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 1 3 4
+# 29 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern "C" {
+
+
+
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 34 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 2 3 4
+# 44 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+struct _IO_FILE;
+
+
+
+typedef struct _IO_FILE FILE;
+
+
+
+
+
+# 64 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+typedef struct _IO_FILE __FILE;
+# 74 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 1 3 4
+# 31 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/_G_config.h" 1 3 4
+# 15 "/usr/powerpc64-unknown-linux-gnu/usr/include/_G_config.h" 3 4
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 16 "/usr/powerpc64-unknown-linux-gnu/usr/include/_G_config.h" 2 3 4
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/wchar.h" 1 3 4
+# 82 "/usr/powerpc64-unknown-linux-gnu/usr/include/wchar.h" 3 4
+typedef struct
+{
+  int __count;
+  union
+  {
+
+    unsigned int __wch;
+
+
+
+    char __wchb[4];
+  } __value;
+} __mbstate_t;
+# 21 "/usr/powerpc64-unknown-linux-gnu/usr/include/_G_config.h" 2 3 4
+typedef struct
+{
+  __off_t __pos;
+  __mbstate_t __state;
+} _G_fpos_t;
+typedef struct
+{
+  __off64_t __pos;
+  __mbstate_t __state;
+} _G_fpos64_t;
+# 32 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 2 3 4
+# 49 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stdarg.h" 1 3 4
+# 40 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stdarg.h" 3 4
+typedef __builtin_va_list __gnuc_va_list;
+# 50 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 2 3 4
+# 144 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+struct _IO_jump_t; struct _IO_FILE;
+# 154 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+typedef void _IO_lock_t;
+
+
+
+
+
+struct _IO_marker {
+  struct _IO_marker *_next;
+  struct _IO_FILE *_sbuf;
+
+
+
+  int _pos;
+# 177 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+};
+
+
+enum __codecvt_result
+{
+  __codecvt_ok,
+  __codecvt_partial,
+  __codecvt_error,
+  __codecvt_noconv
+};
+# 245 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+struct _IO_FILE {
+  int _flags;
+
+
+
+
+  char* _IO_read_ptr;
+  char* _IO_read_end;
+  char* _IO_read_base;
+  char* _IO_write_base;
+  char* _IO_write_ptr;
+  char* _IO_write_end;
+  char* _IO_buf_base;
+  char* _IO_buf_end;
+
+  char *_IO_save_base;
+  char *_IO_backup_base;
+  char *_IO_save_end;
+
+  struct _IO_marker *_markers;
+
+  struct _IO_FILE *_chain;
+
+  int _fileno;
+
+
+
+  int _flags2;
+
+  __off_t _old_offset;
+
+
+
+  unsigned short _cur_column;
+  signed char _vtable_offset;
+  char _shortbuf[1];
+
+
+
+  _IO_lock_t *_lock;
+# 293 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+  __off64_t _offset;
+# 302 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+  void *__pad1;
+  void *__pad2;
+  void *__pad3;
+  void *__pad4;
+  size_t __pad5;
+
+  int _mode;
+
+  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+
+};
+
+
+
+
+
+struct _IO_FILE_plus;
+
+extern struct _IO_FILE_plus _IO_2_1_stdin_;
+extern struct _IO_FILE_plus _IO_2_1_stdout_;
+extern struct _IO_FILE_plus _IO_2_1_stderr_;
+# 338 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
+
+
+
+
+
+
+
+typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
+     size_t __n);
+
+
+
+
+
+
+
+typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
+
+
+typedef int __io_close_fn (void *__cookie);
+
+
+
+
+typedef __io_read_fn cookie_read_function_t;
+typedef __io_write_fn cookie_write_function_t;
+typedef __io_seek_fn cookie_seek_function_t;
+typedef __io_close_fn cookie_close_function_t;
+
+
+typedef struct
+{
+  __io_read_fn *read;
+  __io_write_fn *write;
+  __io_seek_fn *seek;
+  __io_close_fn *close;
+} _IO_cookie_io_functions_t;
+typedef _IO_cookie_io_functions_t cookie_io_functions_t;
+
+struct _IO_cookie_file;
+
+
+extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
+        void *__cookie, _IO_cookie_io_functions_t __fns);
+
+
+
+
+extern "C" {
+
+
+extern int __underflow (_IO_FILE *);
+extern int __uflow (_IO_FILE *);
+extern int __overflow (_IO_FILE *, int);
+# 434 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+extern int _IO_getc (_IO_FILE *__fp);
+extern int _IO_putc (int __c, _IO_FILE *__fp);
+extern int _IO_feof (_IO_FILE *__fp) throw ();
+extern int _IO_ferror (_IO_FILE *__fp) throw ();
+
+extern int _IO_peekc_locked (_IO_FILE *__fp);
+
+
+
+
+
+extern void _IO_flockfile (_IO_FILE *) throw ();
+extern void _IO_funlockfile (_IO_FILE *) throw ();
+extern int _IO_ftrylockfile (_IO_FILE *) throw ();
+# 464 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
+   __gnuc_va_list, int *__restrict);
+extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
+    __gnuc_va_list);
+extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
+extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
+
+extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
+extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
+
+extern void _IO_free_backup_area (_IO_FILE *) throw ();
+# 526 "/usr/powerpc64-unknown-linux-gnu/usr/include/libio.h" 3 4
+}
+# 75 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 2 3 4
+
+
+
+
+typedef __gnuc_va_list va_list;
+# 108 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+
+
+typedef _G_fpos_t fpos_t;
+
+
+
+
+
+typedef _G_fpos64_t fpos64_t;
+# 164 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdio_lim.h" 1 3 4
+# 165 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 2 3 4
+
+
+
+extern struct _IO_FILE *stdin;
+extern struct _IO_FILE *stdout;
+extern struct _IO_FILE *stderr;
+
+
+
+
+
+
+
+extern int remove (const char *__filename) throw ();
+
+extern int rename (const char *__old, const char *__new) throw ();
+
+
+
+
+extern int renameat (int __oldfd, const char *__old, int __newfd,
+       const char *__new) throw ();
+
+
+
+
+
+
+
+
+extern FILE *tmpfile (void) __attribute__ ((__warn_unused_result__));
+# 205 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern FILE *tmpfile64 (void) __attribute__ ((__warn_unused_result__));
+
+
+
+extern char *tmpnam (char *__s) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+extern char *tmpnam_r (char *__s) throw () __attribute__ ((__warn_unused_result__));
+# 227 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern char *tempnam (const char *__dir, const char *__pfx)
+     throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+
+
+extern int fclose (FILE *__stream);
+
+
+
+
+extern int fflush (FILE *__stream);
+
+# 252 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern int fflush_unlocked (FILE *__stream);
+# 262 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern int fcloseall (void);
+
+
+
+
+
+
+
+
+
+extern FILE *fopen (const char *__restrict __filename,
+      const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern FILE *freopen (const char *__restrict __filename,
+        const char *__restrict __modes,
+        FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+# 295 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+
+
+extern FILE *fopen64 (const char *__restrict __filename,
+        const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
+extern FILE *freopen64 (const char *__restrict __filename,
+   const char *__restrict __modes,
+   FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern FILE *fdopen (int __fd, const char *__modes) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+extern FILE *fopencookie (void *__restrict __magic_cookie,
+     const char *__restrict __modes,
+     _IO_cookie_io_functions_t __io_funcs) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
+  throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
+
+
+
+extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
+      int __modes, size_t __n) throw ();
+
+
+
+
+
+extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
+         size_t __size) throw ();
+
+
+extern void setlinebuf (FILE *__stream) throw ();
+
+
+
+
+
+
+
+
+extern int fprintf (FILE *__restrict __stream,
+      const char *__restrict __format, ...);
+
+
+
+
+extern int printf (const char *__restrict __format, ...);
+
+extern int sprintf (char *__restrict __s,
+      const char *__restrict __format, ...) throw ();
+
+
+
+
+
+extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
+       __gnuc_va_list __arg);
+
+
+
+
+extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
+
+extern int vsprintf (char *__restrict __s, const char *__restrict __format,
+       __gnuc_va_list __arg) throw ();
+
+
+
+
+
+extern int snprintf (char *__restrict __s, size_t __maxlen,
+       const char *__restrict __format, ...)
+     throw () __attribute__ ((__format__ (__printf__, 3, 4)));
+
+extern int vsnprintf (char *__restrict __s, size_t __maxlen,
+        const char *__restrict __format, __gnuc_va_list __arg)
+     throw () __attribute__ ((__format__ (__printf__, 3, 0)));
+
+
+
+
+
+
+extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
+        __gnuc_va_list __arg)
+     throw () __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__));
+extern int __asprintf (char **__restrict __ptr,
+         const char *__restrict __fmt, ...)
+     throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
+extern int asprintf (char **__restrict __ptr,
+       const char *__restrict __fmt, ...)
+     throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern int vdprintf (int __fd, const char *__restrict __fmt,
+       __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__printf__, 2, 0)));
+extern int dprintf (int __fd, const char *__restrict __fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+
+
+
+
+
+
+
+
+extern int fscanf (FILE *__restrict __stream,
+     const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern int scanf (const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
+
+extern int sscanf (const char *__restrict __s,
+     const char *__restrict __format, ...) throw ();
+# 463 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+
+
+
+
+
+
+
+
+extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
+      __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__));
+
+
+extern int vsscanf (const char *__restrict __s,
+      const char *__restrict __format, __gnuc_va_list __arg)
+     throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
+# 522 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+
+
+
+
+
+
+
+
+
+extern int fgetc (FILE *__stream);
+extern int getc (FILE *__stream);
+
+
+
+
+
+extern int getchar (void);
+
+# 550 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern int getc_unlocked (FILE *__stream);
+extern int getchar_unlocked (void);
+# 561 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern int fgetc_unlocked (FILE *__stream);
+
+
+
+
+
+
+
+
+
+
+
+extern int fputc (int __c, FILE *__stream);
+extern int putc (int __c, FILE *__stream);
+
+
+
+
+
+extern int putchar (int __c);
+
+# 594 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern int fputc_unlocked (int __c, FILE *__stream);
+
+
+
+
+
+
+
+extern int putc_unlocked (int __c, FILE *__stream);
+extern int putchar_unlocked (int __c);
+
+
+
+
+
+
+extern int getw (FILE *__stream);
+
+
+extern int putw (int __w, FILE *__stream);
+
+
+
+
+
+
+
+
+extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+     __attribute__ ((__warn_unused_result__));
+# 638 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern char *gets (char *__s) __attribute__ ((__warn_unused_result__)) __attribute__ ((__deprecated__));
+
+
+# 649 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern char *fgets_unlocked (char *__restrict __s, int __n,
+        FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+# 665 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern __ssize_t __getdelim (char **__restrict __lineptr,
+          size_t *__restrict __n, int __delimiter,
+          FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+extern __ssize_t getdelim (char **__restrict __lineptr,
+        size_t *__restrict __n, int __delimiter,
+        FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+
+extern __ssize_t getline (char **__restrict __lineptr,
+       size_t *__restrict __n,
+       FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+
+
+extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
+
+
+
+
+
+extern int puts (const char *__s);
+
+
+
+
+
+
+extern int ungetc (int __c, FILE *__stream);
+
+
+
+
+
+
+extern size_t fread (void *__restrict __ptr, size_t __size,
+       size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern size_t fwrite (const void *__restrict __ptr, size_t __size,
+        size_t __n, FILE *__restrict __s);
+
+# 726 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern int fputs_unlocked (const char *__restrict __s,
+      FILE *__restrict __stream);
+# 737 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
+         size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
+          size_t __n, FILE *__restrict __stream);
+
+
+
+
+
+
+
+
+extern int fseek (FILE *__stream, long int __off, int __whence);
+
+
+
+
+extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern void rewind (FILE *__stream);
+
+# 773 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern int fseeko (FILE *__stream, __off_t __off, int __whence);
+
+
+
+
+extern __off_t ftello (FILE *__stream) __attribute__ ((__warn_unused_result__));
+# 792 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+
+
+
+
+
+
+extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
+
+
+
+
+extern int fsetpos (FILE *__stream, const fpos_t *__pos);
+# 815 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+
+
+
+extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
+extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__));
+extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
+extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
+
+
+
+
+extern void clearerr (FILE *__stream) throw ();
+
+extern int feof (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+
+extern int ferror (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern void clearerr_unlocked (FILE *__stream) throw ();
+extern int feof_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+extern int ferror_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+
+
+
+extern void perror (const char *__s);
+
+
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/sys_errlist.h" 1 3 4
+# 26 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/sys_errlist.h" 3 4
+extern int sys_nerr;
+extern const char *const sys_errlist[];
+
+
+extern int _sys_nerr;
+extern const char *const _sys_errlist[];
+# 854 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 2 3 4
+
+
+
+
+extern int fileno (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+
+
+
+
+extern int fileno_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+# 872 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+extern FILE *popen (const char *__command, const char *__modes) __attribute__ ((__warn_unused_result__));
+
+
+
+
+
+extern int pclose (FILE *__stream);
+
+
+
+
+
+extern char *ctermid (char *__s) throw ();
+
+
+
+
+
+extern char *cuserid (char *__s);
+
+
+
+
+struct obstack;
+
+
+extern int obstack_printf (struct obstack *__restrict __obstack,
+      const char *__restrict __format, ...)
+     throw () __attribute__ ((__format__ (__printf__, 2, 3)));
+extern int obstack_vprintf (struct obstack *__restrict __obstack,
+       const char *__restrict __format,
+       __gnuc_va_list __args)
+     throw () __attribute__ ((__format__ (__printf__, 2, 0)));
+
+
+
+
+
+
+
+extern void flockfile (FILE *__stream) throw ();
+
+
+
+extern int ftrylockfile (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+
+
+extern void funlockfile (FILE *__stream) throw ();
+# 933 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdio.h" 1 3 4
+# 43 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdio.h" 3 4
+extern __inline __attribute__ ((__gnu_inline__)) int
+getchar (void)
+{
+  return _IO_getc (stdin);
+}
+
+
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+fgetc_unlocked (FILE *__fp)
+{
+  return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
+}
+
+
+
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+getc_unlocked (FILE *__fp)
+{
+  return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
+}
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+getchar_unlocked (void)
+{
+  return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
+}
+
+
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+putchar (int __c)
+{
+  return _IO_putc (__c, stdout);
+}
+
+
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+fputc_unlocked (int __c, FILE *__stream)
+{
+  return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
+}
+
+
+
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+putc_unlocked (int __c, FILE *__stream)
+{
+  return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
+}
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+putchar_unlocked (int __c)
+{
+  return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
+}
+
+
+
+
+
+extern __inline __attribute__ ((__gnu_inline__)) __ssize_t
+getline (char **__lineptr, size_t *__n, FILE *__stream)
+{
+  return __getdelim (__lineptr, __n, '\n', __stream);
+}
+
+
+
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+__attribute__ ((__leaf__)) feof_unlocked (FILE *__stream) throw ()
+{
+  return (((__stream)->_flags & 0x10) != 0);
+}
+
+
+extern __inline __attribute__ ((__gnu_inline__)) int
+__attribute__ ((__leaf__)) ferror_unlocked (FILE *__stream) throw ()
+{
+  return (((__stream)->_flags & 0x20) != 0);
+}
+# 934 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 2 3 4
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdio2.h" 1 3 4
+# 23 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdio2.h" 3 4
+extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
+     const char *__restrict __format, ...) throw ();
+extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
+      const char *__restrict __format,
+      __gnuc_va_list __ap) throw ();
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) sprintf (char *__restrict __s, const char *__restrict __fmt, ...) throw ()
+{
+  return __builtin___sprintf_chk (__s, 2 - 1,
+      __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
+}
+
+
+
+
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) vsprintf (char *__restrict __s, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
+
+{
+  return __builtin___vsprintf_chk (__s, 2 - 1,
+       __builtin_object_size (__s, 2 > 1), __fmt, __ap);
+}
+
+
+
+extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
+      size_t __slen, const char *__restrict __format,
+      ...) throw ();
+extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
+       size_t __slen, const char *__restrict __format,
+       __gnuc_va_list __ap) throw ();
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...) throw ()
+
+{
+  return __builtin___snprintf_chk (__s, __n, 2 - 1,
+       __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
+}
+
+
+
+
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
+
+{
+  return __builtin___vsnprintf_chk (__s, __n, 2 - 1,
+        __builtin_object_size (__s, 2 > 1), __fmt, __ap);
+}
+
+
+
+
+
+extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
+     const char *__restrict __format, ...);
+extern int __printf_chk (int __flag, const char *__restrict __format, ...);
+extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
+      const char *__restrict __format, __gnuc_va_list __ap);
+extern int __vprintf_chk (int __flag, const char *__restrict __format,
+     __gnuc_va_list __ap);
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
+{
+  return __fprintf_chk (__stream, 2 - 1, __fmt,
+   __builtin_va_arg_pack ());
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+printf (const char *__restrict __fmt, ...)
+{
+  return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
+}
+
+
+
+
+
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+vprintf (const char *__restrict __fmt, __gnuc_va_list __ap)
+{
+
+  return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap);
+
+
+
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+vfprintf (FILE *__restrict __stream,
+   const char *__restrict __fmt, __gnuc_va_list __ap)
+{
+  return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap);
+}
+
+
+extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
+     ...) __attribute__ ((__format__ (__printf__, 3, 4)));
+extern int __vdprintf_chk (int __fd, int __flag,
+      const char *__restrict __fmt, __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__printf__, 3, 0)));
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+dprintf (int __fd, const char *__restrict __fmt, ...)
+{
+  return __dprintf_chk (__fd, 2 - 1, __fmt,
+   __builtin_va_arg_pack ());
+}
+
+
+
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap)
+{
+  return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap);
+}
+
+
+
+
+extern int __asprintf_chk (char **__restrict __ptr, int __flag,
+      const char *__restrict __fmt, ...)
+     throw () __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__));
+extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
+       const char *__restrict __fmt, __gnuc_va_list __arg)
+     throw () __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__));
+extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
+     int __flag, const char *__restrict __format,
+     ...)
+     throw () __attribute__ ((__format__ (__printf__, 3, 4)));
+extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
+      int __flag,
+      const char *__restrict __format,
+      __gnuc_va_list __args)
+     throw () __attribute__ ((__format__ (__printf__, 3, 0)));
+
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) throw ()
+{
+  return __asprintf_chk (__ptr, 2 - 1, __fmt,
+    __builtin_va_arg_pack ());
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) __asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) throw ()
+
+{
+  return __asprintf_chk (__ptr, 2 - 1, __fmt,
+    __builtin_va_arg_pack ());
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...) throw ()
+
+{
+  return __obstack_printf_chk (__obstack, 2 - 1, __fmt,
+          __builtin_va_arg_pack ());
+}
+# 206 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdio2.h" 3 4
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) vasprintf (char **__restrict __ptr, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
+
+{
+  return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap);
+}
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+__attribute__ ((__leaf__)) obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
+
+{
+  return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt,
+    __ap);
+}
+# 241 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/stdio2.h" 3 4
+extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
+     FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets")
+
+                                        __attribute__ ((__warn_unused_result__));
+extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk")
+
+
+     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer")))
+                                 ;
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
+fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+{
+  if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+ return __fgets_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
+
+      if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
+ return __fgets_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
+    }
+  return __fgets_alias (__s, __n, __stream);
+}
+
+extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
+      size_t __size, size_t __n,
+      FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread")
+
+
+            __attribute__ ((__warn_unused_result__));
+extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk")
+
+
+
+
+     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer")))
+                                 ;
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
+fread (void *__restrict __ptr, size_t __size, size_t __n,
+       FILE *__restrict __stream)
+{
+  if (__builtin_object_size (__ptr, 0) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size)
+   || !__builtin_constant_p (__n)
+   || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
+ return __fread_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
+
+      if (__size * __n > __builtin_object_size (__ptr, 0))
+ return __fread_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
+    }
+  return __fread_alias (__ptr, __size, __n, __stream);
+}
+
+
+extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
+       int __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked")
+
+                                                 __attribute__ ((__warn_unused_result__));
+extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk")
+
+
+     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer")))
+                                 ;
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
+fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
+{
+  if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__n) || __n <= 0)
+ return __fgets_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
+
+      if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
+ return __fgets_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
+    }
+  return __fgets_unlocked_alias (__s, __n, __stream);
+}
+
+
+
+
+extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
+        size_t __size, size_t __n,
+        FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked")
+
+
+                     __attribute__ ((__warn_unused_result__));
+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")
+
+
+
+
+     __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer")))
+                                        ;
+
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
+fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
+  FILE *__restrict __stream)
+{
+  if (__builtin_object_size (__ptr, 0) != (size_t) -1)
+    {
+      if (!__builtin_constant_p (__size)
+   || !__builtin_constant_p (__n)
+   || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
+ return __fread_unlocked_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
+         __stream);
+
+      if (__size * __n > __builtin_object_size (__ptr, 0))
+ return __fread_unlocked_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
+       __stream);
+    }
+
+
+  if (__builtin_constant_p (__size)
+      && __builtin_constant_p (__n)
+      && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
+      && __size * __n <= 8)
+    {
+      size_t __cnt = __size * __n;
+      char *__cptr = (char *) __ptr;
+      if (__cnt == 0)
+ return 0;
+
+      for (; __cnt > 0; --__cnt)
+ {
+   int __c = (__builtin_expect (((__stream)->_IO_read_ptr >= (__stream)->_IO_read_end), 0) ? __uflow (__stream) : *(unsigned char *) (__stream)->_IO_read_ptr++);
+   if (__c == (-1))
+     break;
+   *__cptr++ = __c;
+ }
+      return (__cptr - (char *) __ptr) / __size;
+    }
+
+  return __fread_unlocked_alias (__ptr, __size, __n, __stream);
+}
+# 937 "/usr/powerpc64-unknown-linux-gnu/usr/include/stdio.h" 2 3 4
+
+
+
+
+
+}
+# 62 "jsprf.h" 2
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stdarg.h" 1 3 4
+# 63 "jsprf.h" 2
+
+extern "C" {
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSUint32 JS_snprintf(char *out, JSUint32 outlen, const char *fmt, ...);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) char* JS_smprintf(const char *fmt, ...);
+
+
+
+
+extern __attribute__((visibility ("default"))) void JS_smprintf_free(char *mem);
+# 92 "jsprf.h"
+extern __attribute__((visibility ("default"))) char* JS_sprintf_append(char *last, const char *fmt, ...);
+# 101 "jsprf.h"
+typedef JSIntn (*JSStuffFunc)(void *arg, const char *s, JSUint32 slen);
+
+extern __attribute__((visibility ("default"))) JSUint32 JS_sxprintf(JSStuffFunc f, void *arg, const char *fmt, ...);
+
+
+
+
+extern __attribute__((visibility ("default"))) JSUint32 JS_vsnprintf(char *out, JSUint32 outlen, const char *fmt, va_list ap);
+extern __attribute__((visibility ("default"))) char* JS_vsmprintf(const char *fmt, va_list ap);
+extern __attribute__((visibility ("default"))) char* JS_vsprintf_append(char *last, const char *fmt, va_list ap);
+extern __attribute__((visibility ("default"))) JSUint32 JS_vsxprintf(JSStuffFunc f, void *arg, const char *fmt, va_list ap);
+# 146 "jsprf.h"
+extern __attribute__((visibility ("default"))) JSInt32 JS_sscanf(const char *buf, const char *fmt, ...);
+
+}
+# 51 "jsxml.cpp" 2
+
+# 1 "jsapi.h" 1
+# 46 "jsapi.h"
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 47 "jsapi.h" 2
+
+
+# 1 "jspubtd.h" 1
+# 47 "jspubtd.h"
+# 1 "jsval.h" 1
+# 50 "jsval.h"
+extern "C" {
+# 92 "jsval.h"
+enum JSValueType
+{
+    JSVAL_TYPE_DOUBLE = 0x00,
+    JSVAL_TYPE_INT32 = 0x01,
+    JSVAL_TYPE_UNDEFINED = 0x02,
+    JSVAL_TYPE_BOOLEAN = 0x03,
+    JSVAL_TYPE_MAGIC = 0x04,
+    JSVAL_TYPE_STRING = 0x05,
+    JSVAL_TYPE_NULL = 0x06,
+    JSVAL_TYPE_OBJECT = 0x07,
+
+
+
+    JSVAL_TYPE_NONFUNOBJ = 0x57,
+    JSVAL_TYPE_FUNOBJ = 0x67,
+
+    JSVAL_TYPE_STRORNULL = 0x97,
+    JSVAL_TYPE_OBJORNULL = 0x98,
+
+    JSVAL_TYPE_BOXED = 0x99
+} __attribute__((packed));
+
+typedef int js_static_assert0[(sizeof(JSValueType) == 1) ? 1 : -1];
+# 136 "jsval.h"
+enum JSValueTag
+{
+    JSVAL_TAG_MAX_DOUBLE = 0x1FFF0,
+    JSVAL_TAG_INT32 = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_INT32,
+    JSVAL_TAG_UNDEFINED = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_UNDEFINED,
+    JSVAL_TAG_STRING = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_STRING,
+    JSVAL_TAG_BOOLEAN = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_BOOLEAN,
+    JSVAL_TAG_MAGIC = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_MAGIC,
+    JSVAL_TAG_NULL = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_NULL,
+    JSVAL_TAG_OBJECT = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_OBJECT
+} __attribute__((packed));
+
+typedef int js_static_assert1[(sizeof(JSValueTag) == sizeof(uint32)) ? 1 : -1];
+
+enum JSValueShiftedTag
+{
+    JSVAL_SHIFTED_TAG_MAX_DOUBLE = ((((uint64)JSVAL_TAG_MAX_DOUBLE) << 47) | 0xFFFFFFFF),
+    JSVAL_SHIFTED_TAG_INT32 = (((uint64)JSVAL_TAG_INT32) << 47),
+    JSVAL_SHIFTED_TAG_UNDEFINED = (((uint64)JSVAL_TAG_UNDEFINED) << 47),
+    JSVAL_SHIFTED_TAG_STRING = (((uint64)JSVAL_TAG_STRING) << 47),
+    JSVAL_SHIFTED_TAG_BOOLEAN = (((uint64)JSVAL_TAG_BOOLEAN) << 47),
+    JSVAL_SHIFTED_TAG_MAGIC = (((uint64)JSVAL_TAG_MAGIC) << 47),
+    JSVAL_SHIFTED_TAG_NULL = (((uint64)JSVAL_TAG_NULL) << 47),
+    JSVAL_SHIFTED_TAG_OBJECT = (((uint64)JSVAL_TAG_OBJECT) << 47)
+} __attribute__((packed));
+
+typedef int js_static_assert2[(sizeof(JSValueShiftedTag) == sizeof(uint64)) ? 1 : -1];
+# 252 "jsval.h"
+typedef enum JSWhyMagic
+{
+    JS_ARRAY_HOLE,
+    JS_ARGS_HOLE,
+    JS_NATIVE_ENUMERATE,
+
+
+    JS_NO_ITER_VALUE,
+    JS_GENERATOR_CLOSING,
+    JS_NO_CONSTANT,
+    JS_THIS_POISON,
+    JS_ARG_POISON,
+    JS_SERIALIZE_NO_NODE,
+    JS_GENERIC_MAGIC
+} JSWhyMagic;
+
+typedef struct JSString JSString;
+typedef struct JSFlatString JSFlatString;
+typedef struct JSObject JSObject;
+# 294 "jsval.h"
+typedef union jsval_layout
+{
+    uint64 asBits;
+
+
+    struct {
+        uint64 payload47 : 47;
+        JSValueTag tag : 17;
+    } debugView;
+
+    struct {
+        union {
+            int32 i32;
+            uint32 u32;
+            JSWhyMagic why;
+            jsuword word;
+        } payload;
+    } s;
+    double asDouble;
+    void *asPtr;
+} jsval_layout;
+# 564 "jsval.h"
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_DOUBLE_IMPL(jsval_layout l)
+{
+    return l.asBits <= JSVAL_SHIFTED_TAG_MAX_DOUBLE;
+}
+
+static __attribute__((always_inline)) inline jsval_layout
+DOUBLE_TO_JSVAL_IMPL(double d)
+{
+    jsval_layout l;
+    l.asDouble = d;
+    ((void) 0);
+    return l;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_INT32_IMPL(jsval_layout l)
+{
+    return (uint32)(l.asBits >> 47) == JSVAL_TAG_INT32;
+}
+
+static __attribute__((always_inline)) inline int32
+JSVAL_TO_INT32_IMPL(jsval_layout l)
+{
+    return (int32)l.asBits;
+}
+
+static __attribute__((always_inline)) inline jsval_layout
+INT32_TO_JSVAL_IMPL(int32 i32)
+{
+    jsval_layout l;
+    l.asBits = ((uint64)(uint32)i32) | JSVAL_SHIFTED_TAG_INT32;
+    return l;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_NUMBER_IMPL(jsval_layout l)
+{
+    return l.asBits < JSVAL_SHIFTED_TAG_UNDEFINED;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_UNDEFINED_IMPL(jsval_layout l)
+{
+    return l.asBits == JSVAL_SHIFTED_TAG_UNDEFINED;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_STRING_IMPL(jsval_layout l)
+{
+    return (uint32)(l.asBits >> 47) == JSVAL_TAG_STRING;
+}
+
+static __attribute__((always_inline)) inline jsval_layout
+STRING_TO_JSVAL_IMPL(JSString *str)
+{
+    jsval_layout l;
+    uint64 strBits = (uint64)str;
+    ((void) 0);
+    ((void) 0);
+    l.asBits = strBits | JSVAL_SHIFTED_TAG_STRING;
+    return l;
+}
+
+static __attribute__((always_inline)) inline JSString *
+JSVAL_TO_STRING_IMPL(jsval_layout l)
+{
+    return (JSString *)(l.asBits & 0x00007FFFFFFFFFFFLL);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_BOOLEAN_IMPL(jsval_layout l)
+{
+    return (uint32)(l.asBits >> 47) == JSVAL_TAG_BOOLEAN;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_TO_BOOLEAN_IMPL(jsval_layout l)
+{
+    return (JSBool)l.asBits;
+}
+
+static __attribute__((always_inline)) inline jsval_layout
+BOOLEAN_TO_JSVAL_IMPL(JSBool b)
+{
+    jsval_layout l;
+    l.asBits = ((uint64)(uint32)b) | JSVAL_SHIFTED_TAG_BOOLEAN;
+    return l;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_MAGIC_IMPL(jsval_layout l)
+{
+    return (l.asBits >> 47) == JSVAL_TAG_MAGIC;
+}
+
+static __attribute__((always_inline)) inline JSObject *
+MAGIC_JSVAL_TO_OBJECT_OR_NULL_IMPL(jsval_layout l)
+{
+    uint64 ptrBits = l.asBits & 0x00007FFFFFFFFFFFLL;
+    ((void) 0);
+    ((void) 0);
+    return (JSObject *)ptrBits;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_PRIMITIVE_IMPL(jsval_layout l)
+{
+    return l.asBits < JSVAL_SHIFTED_TAG_OBJECT;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_OBJECT_IMPL(jsval_layout l)
+{
+    ((void) 0);
+    return l.asBits >= JSVAL_SHIFTED_TAG_OBJECT;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_OBJECT_OR_NULL_IMPL(jsval_layout l)
+{
+    ((void) 0);
+    return l.asBits >= JSVAL_SHIFTED_TAG_NULL;
+}
+
+static __attribute__((always_inline)) inline JSObject *
+JSVAL_TO_OBJECT_IMPL(jsval_layout l)
+{
+    uint64 ptrBits = l.asBits & 0x00007FFFFFFFFFFFLL;
+    ((void) 0);
+    return (JSObject *)ptrBits;
+}
+
+static __attribute__((always_inline)) inline jsval_layout
+OBJECT_TO_JSVAL_IMPL(JSObject *obj)
+{
+    jsval_layout l;
+    uint64 objBits = (uint64)obj;
+    ((void) 0);
+    ((void) 0);
+    l.asBits = objBits | JSVAL_SHIFTED_TAG_OBJECT;
+    return l;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_NULL_IMPL(jsval_layout l)
+{
+    return l.asBits == JSVAL_SHIFTED_TAG_NULL;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_GCTHING_IMPL(jsval_layout l)
+{
+    return l.asBits >= JSVAL_SHIFTED_TAG_STRING;
+}
+
+static __attribute__((always_inline)) inline void *
+JSVAL_TO_GCTHING_IMPL(jsval_layout l)
+{
+    uint64 ptrBits = l.asBits & 0x00007FFFFFFFFFFFLL;
+    ((void) 0);
+    return (void *)ptrBits;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_TRACEABLE_IMPL(jsval_layout l)
+{
+    return JSVAL_IS_GCTHING_IMPL(l) && !JSVAL_IS_NULL_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline uint32
+JSVAL_TRACE_KIND_IMPL(jsval_layout l)
+{
+    return (uint32)(JSBool)!(JSVAL_IS_OBJECT_IMPL(l));
+}
+
+static __attribute__((always_inline)) inline jsval_layout
+PRIVATE_PTR_TO_JSVAL_IMPL(void *ptr)
+{
+    jsval_layout l;
+    uint64 ptrBits = (uint64)ptr;
+    ((void) 0);
+    l.asBits = ptrBits >> 1;
+    ((void) 0);
+    return l;
+}
+
+static __attribute__((always_inline)) inline void *
+JSVAL_TO_PRIVATE_PTR_IMPL(jsval_layout l)
+{
+    ((void) 0);
+    return (void *)(l.asBits << 1);
+}
+
+
+
+static __attribute__((always_inline)) inline double
+JS_CANONICALIZE_NAN(double d)
+{
+    if ((__builtin_expect((d != d), 0))) {
+        jsval_layout l;
+        l.asBits = 0x7FF8000000000000LL;
+        return l.asDouble;
+    }
+    return d;
+}
+# 819 "jsval.h"
+typedef __attribute__((aligned (8))) uint64 jsval;
+typedef ptrdiff_t jsid;
+# 830 "jsval.h"
+}
+# 48 "jspubtd.h" 2
+
+extern "C" {
+
+
+typedef JSInt32 jsint;
+typedef JSUint32 jsuint;
+typedef float64 jsdouble;
+typedef JSInt32 jsrefcount;
+
+
+
+
+typedef JSUint16 jschar;
+# 69 "jspubtd.h"
+typedef enum JSVersion {
+    JSVERSION_1_0 = 100,
+    JSVERSION_1_1 = 110,
+    JSVERSION_1_2 = 120,
+    JSVERSION_1_3 = 130,
+    JSVERSION_1_4 = 140,
+    JSVERSION_ECMA_3 = 148,
+    JSVERSION_1_5 = 150,
+    JSVERSION_1_6 = 160,
+    JSVERSION_1_7 = 170,
+    JSVERSION_1_8 = 180,
+    JSVERSION_ECMA_5 = 185,
+    JSVERSION_DEFAULT = 0,
+    JSVERSION_UNKNOWN = -1,
+    JSVERSION_LATEST = JSVERSION_ECMA_5
+} JSVersion;
+
+
+
+
+
+typedef enum JSType {
+    JSTYPE_VOID,
+    JSTYPE_OBJECT,
+    JSTYPE_FUNCTION,
+    JSTYPE_STRING,
+    JSTYPE_NUMBER,
+    JSTYPE_BOOLEAN,
+    JSTYPE_NULL,
+    JSTYPE_XML,
+    JSTYPE_LIMIT
+} JSType;
+
+
+typedef enum JSProtoKey {
+
+# 1 "jsproto.tbl" 1
+# 39 "jsproto.tbl"
+# 1 "jsversion.h" 1
+# 40 "jsproto.tbl" 2
+# 64 "jsproto.tbl"
+JSProto_Null = 0,
+JSProto_Object = 1,
+JSProto_Function = 2,
+JSProto_Array = 3,
+JSProto_Boolean = 4,
+JSProto_JSON = 5,
+JSProto_Date = 6,
+JSProto_Math = 7,
+JSProto_Number = 8,
+JSProto_String = 9,
+JSProto_RegExp = 10,
+JSProto_XML = 11,
+JSProto_Namespace = 12,
+JSProto_QName = 13,
+JSProto_Reflect = 14,
+JSProto_ASTNode = 15,
+JSProto_Error = 16,
+JSProto_InternalError = 17,
+JSProto_EvalError = 18,
+JSProto_RangeError = 19,
+JSProto_ReferenceError = 20,
+JSProto_SyntaxError = 21,
+JSProto_TypeError = 22,
+JSProto_URIError = 23,
+JSProto_Generator = 24,
+JSProto_Iterator = 25,
+JSProto_StopIteration = 26,
+JSProto_ArrayBuffer = 27,
+JSProto_Int8Array = 28,
+JSProto_Uint8Array = 29,
+JSProto_Int16Array = 30,
+JSProto_Uint16Array = 31,
+JSProto_Int32Array = 32,
+JSProto_Uint32Array = 33,
+JSProto_Float32Array = 34,
+JSProto_Float64Array = 35,
+JSProto_Uint8ClampedArray = 36,
+JSProto_Proxy = 37,
+JSProto_AnyName = 38,
+# 106 "jspubtd.h" 2
+
+    JSProto_LIMIT
+} JSProtoKey;
+
+
+typedef enum JSAccessMode {
+    JSACC_PROTO = 0,
+    JSACC_PARENT = 1,
+
+
+
+
+
+
+    JSACC_WATCH = 3,
+    JSACC_READ = 4,
+    JSACC_WRITE = 8,
+    JSACC_LIMIT
+} JSAccessMode;
+
+
+
+
+
+
+
+typedef enum JSIterateOp {
+
+    JSENUMERATE_INIT,
+
+
+    JSENUMERATE_INIT_ALL,
+
+
+    JSENUMERATE_NEXT,
+
+
+    JSENUMERATE_DESTROY
+} JSIterateOp;
+
+
+typedef struct JSClass JSClass;
+typedef struct JSConstDoubleSpec JSConstDoubleSpec;
+typedef struct JSContext JSContext;
+typedef struct JSErrorReport JSErrorReport;
+typedef struct JSFunction JSFunction;
+typedef struct JSFunctionSpec JSFunctionSpec;
+typedef struct JSTracer JSTracer;
+typedef struct JSIdArray JSIdArray;
+typedef struct JSPropertyDescriptor JSPropertyDescriptor;
+typedef struct JSPropertySpec JSPropertySpec;
+typedef struct JSObjectMap JSObjectMap;
+typedef struct JSRuntime JSRuntime;
+typedef struct JSStackFrame JSStackFrame;
+typedef struct JSXDRState JSXDRState;
+typedef struct JSExceptionState JSExceptionState;
+typedef struct JSLocaleCallbacks JSLocaleCallbacks;
+typedef struct JSSecurityCallbacks JSSecurityCallbacks;
+typedef struct JSONParser JSONParser;
+typedef struct JSCompartment JSCompartment;
+typedef struct JSCrossCompartmentCall JSCrossCompartmentCall;
+typedef struct JSStructuredCloneWriter JSStructuredCloneWriter;
+typedef struct JSStructuredCloneReader JSStructuredCloneReader;
+typedef struct JSStructuredCloneCallbacks JSStructuredCloneCallbacks;
+
+
+typedef class JSWrapper JSWrapper;
+typedef class JSCrossCompartmentWrapper JSCrossCompartmentWrapper;
+# 185 "jspubtd.h"
+typedef JSBool
+(* JSPropertyOp)(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
+# 195 "jspubtd.h"
+typedef JSBool
+(* JSStrictPropertyOp)(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp);
+# 230 "jspubtd.h"
+typedef JSBool
+(* JSNewEnumerateOp)(JSContext *cx, JSObject *obj, JSIterateOp enum_op,
+                     jsval *statep, jsid *idp);
+
+
+
+
+
+typedef JSBool
+(* JSEnumerateOp)(JSContext *cx, JSObject *obj);
+# 253 "jspubtd.h"
+typedef JSBool
+(* JSResolveOp)(JSContext *cx, JSObject *obj, jsid id);
+# 285 "jspubtd.h"
+typedef JSBool
+(* JSNewResolveOp)(JSContext *cx, JSObject *obj, jsid id, uintN flags,
+                   JSObject **objp);
+
+
+
+
+
+typedef JSBool
+(* JSConvertOp)(JSContext *cx, JSObject *obj, JSType type, jsval *vp);
+
+
+
+
+typedef JSType
+(* JSTypeOfOp)(JSContext *cx, JSObject *obj);
+
+
+
+
+
+
+typedef void
+(* JSFinalizeOp)(JSContext *cx, JSObject *obj);
+
+
+
+
+
+typedef void
+(* JSStringFinalizeOp)(JSContext *cx, JSString *str);
+
+
+
+
+
+
+
+typedef JSBool
+(* JSCheckAccessOp)(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
+                    jsval *vp);
+
+
+
+
+
+typedef JSBool
+(* JSXDRObjectOp)(JSXDRState *xdr, JSObject **objp);
+
+
+
+
+
+
+typedef JSBool
+(* JSHasInstanceOp)(JSContext *cx, JSObject *obj, const jsval *v, JSBool *bp);
+
+
+
+
+
+
+typedef uint32
+(* JSMarkOp)(JSContext *cx, JSObject *obj, void *arg);
+# 372 "jspubtd.h"
+typedef void
+(* JSTraceOp)(JSTracer *trc, JSObject *obj);
+# 399 "jspubtd.h"
+typedef void
+(* JSTraceCallback)(JSTracer *trc, void *thing, uint32 kind);
+
+
+
+
+
+typedef void
+(* JSTraceNamePrinter)(JSTracer *trc, char *buf, size_t bufsize);
+
+typedef JSBool
+(* JSEqualityOp)(JSContext *cx, JSObject *obj, const jsval *v, JSBool *bp);
+
+
+
+
+
+
+
+typedef JSBool
+(* JSNative)(JSContext *cx, uintN argc, jsval *vp);
+
+
+
+typedef enum JSContextOp {
+    JSCONTEXT_NEW,
+    JSCONTEXT_DESTROY
+} JSContextOp;
+# 441 "jspubtd.h"
+typedef JSBool
+(* JSContextCallback)(JSContext *cx, uintN contextOp);
+
+
+
+
+
+
+typedef enum JSGCStatus {
+    JSGC_BEGIN,
+    JSGC_END,
+    JSGC_MARK_END,
+    JSGC_FINALIZE_END
+} JSGCStatus;
+
+typedef JSBool
+(* JSGCCallback)(JSContext *cx, JSGCStatus status);
+
+
+
+
+
+typedef void
+(* JSTraceDataOp)(JSTracer *trc, void *data);
+
+typedef JSBool
+(* JSOperationCallback)(JSContext *cx);
+
+typedef void
+(* JSErrorReporter)(JSContext *cx, const char *message, JSErrorReport *report);
+
+
+
+
+
+
+typedef enum JSExnType {
+    JSEXN_NONE = -1,
+      JSEXN_ERR,
+        JSEXN_INTERNALERR,
+        JSEXN_EVALERR,
+        JSEXN_RANGEERR,
+        JSEXN_REFERENCEERR,
+        JSEXN_SYNTAXERR,
+        JSEXN_TYPEERR,
+        JSEXN_URIERR,
+        JSEXN_LIMIT
+} JSExnType;
+
+typedef struct JSErrorFormatString {
+
+    const char *format;
+
+
+    uint16 argCount;
+
+
+    int16 exnType;
+} JSErrorFormatString;
+
+typedef const JSErrorFormatString *
+(* JSErrorCallback)(void *userRef, const char *locale,
+                    const uintN errorNumber);
+
+
+
+
+typedef JSBool
+(* JSArgumentFormatter)(JSContext *cx, const char *format, JSBool fromJS,
+                        jsval **vpp, va_list *app);
+
+
+typedef JSBool
+(* JSLocaleToUpperCase)(JSContext *cx, JSString *src, jsval *rval);
+
+typedef JSBool
+(* JSLocaleToLowerCase)(JSContext *cx, JSString *src, jsval *rval);
+
+typedef JSBool
+(* JSLocaleCompare)(JSContext *cx, JSString *src1, JSString *src2,
+                    jsval *rval);
+
+typedef JSBool
+(* JSLocaleToUnicode)(JSContext *cx, const char *src, jsval *rval);
+
+
+
+
+typedef struct JSPrincipals JSPrincipals;
+# 538 "jspubtd.h"
+typedef JSBool
+(* JSPrincipalsTranscoder)(JSXDRState *xdr, JSPrincipals **principalsp);
+# 549 "jspubtd.h"
+typedef JSPrincipals *
+(* JSObjectPrincipalsFinder)(JSContext *cx, JSObject *obj);
+
+
+
+
+
+typedef JSBool
+(* JSCSPEvalChecker)(JSContext *cx);
+
+
+
+
+
+
+typedef JSObject *
+(* JSWrapObjectCallback)(JSContext *cx, JSObject *obj, JSObject *proto, JSObject *parent,
+                         uintN flags);
+
+
+
+
+
+
+typedef JSObject *
+(* JSPreWrapCallback)(JSContext *cx, JSObject *scope, JSObject *obj, uintN flags);
+
+typedef enum {
+    JSCOMPARTMENT_NEW,
+    JSCOMPARTMENT_DESTROY
+} JSCompartmentOp;
+
+typedef JSBool
+(* JSCompartmentCallback)(JSContext *cx, JSCompartment *compartment, uintN compartmentOp);
+# 593 "jspubtd.h"
+typedef JSObject *(*ReadStructuredCloneOp)(JSContext *cx, JSStructuredCloneReader *r,
+                                           uint32 tag, uint32 data, void *closure);
+# 607 "jspubtd.h"
+typedef JSBool (*WriteStructuredCloneOp)(JSContext *cx, JSStructuredCloneWriter *w,
+                                         JSObject *obj, void *closure);
+
+
+
+
+
+
+typedef void (*StructuredCloneErrorOp)(JSContext *cx, uint32 errorid);
+
+}
+# 50 "jsapi.h" 2
+
+
+extern "C" {
+# 93 "jsapi.h"
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_NULL(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_NULL_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_VOID(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_UNDEFINED_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_INT(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_INT32_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline jsint
+JSVAL_TO_INT(jsval v)
+{
+    jsval_layout l;
+    ((void) 0);
+    l.asBits = (v);
+    return JSVAL_TO_INT32_IMPL(l);
+}
+
+
+
+
+
+static __attribute__((always_inline)) inline jsval
+INT_TO_JSVAL(int32 i)
+{
+    return ((INT32_TO_JSVAL_IMPL(i)).asBits);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_DOUBLE(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_DOUBLE_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline jsdouble
+JSVAL_TO_DOUBLE(jsval v)
+{
+    jsval_layout l;
+    ((void) 0);
+    l.asBits = (v);
+    return l.asDouble;
+}
+
+static __attribute__((always_inline)) inline jsval
+DOUBLE_TO_JSVAL(jsdouble d)
+{
+    d = JS_CANONICALIZE_NAN(d);
+    return ((DOUBLE_TO_JSVAL_IMPL(d)).asBits);
+}
+
+static __attribute__((always_inline)) inline jsval
+UINT_TO_JSVAL(uint32 i)
+{
+    if (i <= ((jsint)0x7fffffff))
+        return INT_TO_JSVAL((int32)i);
+    return DOUBLE_TO_JSVAL((jsdouble)i);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_NUMBER(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_NUMBER_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_STRING(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_STRING_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline JSString *
+JSVAL_TO_STRING(jsval v)
+{
+    jsval_layout l;
+    ((void) 0);
+    l.asBits = (v);
+    return JSVAL_TO_STRING_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline jsval
+STRING_TO_JSVAL(JSString *str)
+{
+    return ((STRING_TO_JSVAL_IMPL(str)).asBits);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_OBJECT(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_OBJECT_OR_NULL_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline JSObject *
+JSVAL_TO_OBJECT(jsval v)
+{
+    jsval_layout l;
+    ((void) 0);
+    l.asBits = (v);
+    return JSVAL_TO_OBJECT_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline jsval
+OBJECT_TO_JSVAL(JSObject *obj)
+{
+    if (obj)
+        return ((OBJECT_TO_JSVAL_IMPL(obj)).asBits);
+    return ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_BOOLEAN(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_BOOLEAN_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_TO_BOOLEAN(jsval v)
+{
+    jsval_layout l;
+    ((void) 0);
+    l.asBits = (v);
+    return JSVAL_TO_BOOLEAN_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline jsval
+BOOLEAN_TO_JSVAL(JSBool b)
+{
+    return ((BOOLEAN_TO_JSVAL_IMPL(b)).asBits);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_PRIMITIVE(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_PRIMITIVE_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_GCTHING(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_GCTHING_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline void *
+JSVAL_TO_GCTHING(jsval v)
+{
+    jsval_layout l;
+    ((void) 0);
+    l.asBits = (v);
+    return JSVAL_TO_GCTHING_IMPL(l);
+}
+
+
+
+static __attribute__((always_inline)) inline jsval
+PRIVATE_TO_JSVAL(void *ptr)
+{
+    return ((PRIVATE_PTR_TO_JSVAL_IMPL(ptr)).asBits);
+}
+
+static __attribute__((always_inline)) inline void *
+JSVAL_TO_PRIVATE(jsval v)
+{
+    jsval_layout l;
+    ((void) 0);
+    l.asBits = (v);
+    return JSVAL_TO_PRIVATE_PTR_IMPL(l);
+}
+# 316 "jsapi.h"
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_STRING(jsid iden)
+{
+    return ((iden) & 0x7) == 0;
+}
+
+static __attribute__((always_inline)) inline JSString *
+JSID_TO_STRING(jsid iden)
+{
+    ((void) 0);
+    return (JSString *)((iden));
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_ZERO(jsid iden)
+{
+    return (iden) == 0;
+}
+
+__attribute__((visibility ("default"))) JSBool
+JS_StringHasBeenInterned(JSString *str);
+
+
+static __attribute__((always_inline)) inline jsid
+INTERNED_STRING_TO_JSID(JSString *str)
+{
+    jsid iden;
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    (iden) = (size_t)str;
+    return iden;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_INT(jsid iden)
+{
+    return !!((iden) & 0x1);
+}
+
+static __attribute__((always_inline)) inline int32
+JSID_TO_INT(jsid iden)
+{
+    ((void) 0);
+    return ((int32)(iden)) >> 1;
+}
+# 370 "jsapi.h"
+static __attribute__((always_inline)) inline JSBool
+INT_FITS_IN_JSID(int32 i)
+{
+    return ((jsuint)(i) - (jsuint)(-(1 << 30)) <=
+            (jsuint)(((1 << 30) - 1) - (-(1 << 30))));
+}
+
+static __attribute__((always_inline)) inline jsid
+INT_TO_JSID(int32 i)
+{
+    jsid iden;
+    ((void) 0);
+    (iden) = ((i << 1) | 0x1);
+    return iden;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_OBJECT(jsid iden)
+{
+    return ((iden) & 0x7) == 0x4 &&
+           (size_t)(iden) != 0x4;
+}
+
+static __attribute__((always_inline)) inline JSObject *
+JSID_TO_OBJECT(jsid iden)
+{
+    ((void) 0);
+    return (JSObject *)((iden) & ~(size_t)0x7);
+}
+
+static __attribute__((always_inline)) inline jsid
+OBJECT_TO_JSID(JSObject *obj)
+{
+    jsid iden;
+    ((void) 0);
+    ((void) 0);
+    (iden) = ((size_t)obj | 0x4);
+    return iden;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_GCTHING(jsid iden)
+{
+    return JSID_IS_STRING(iden) || JSID_IS_OBJECT(iden);
+}
+
+static __attribute__((always_inline)) inline void *
+JSID_TO_GCTHING(jsid iden)
+{
+    return (void *)((iden) & ~(size_t)0x7);
+}
+
+
+
+
+
+
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_DEFAULT_XML_NAMESPACE(jsid iden)
+{
+    ((void) 0)
+                                                                  ;
+    return ((size_t)(iden) == 0x6);
+}
+# 448 "jsapi.h"
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_VOID(jsid iden)
+{
+    ((void) 0)
+                                                 ;
+    return ((size_t)(iden) == 0x2);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_EMPTY(jsid iden)
+{
+    return ((size_t)(iden) == 0x4);
+}
+# 532 "jsapi.h"
+extern __attribute__((visibility ("default"))) int64
+JS_Now(void);
+
+
+extern __attribute__((visibility ("default"))) jsval
+JS_GetNaNValue(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) jsval
+JS_GetNegativeInfinityValue(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) jsval
+JS_GetPositiveInfinityValue(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) jsval
+JS_GetEmptyStringValue(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_GetEmptyString(JSRuntime *rt);
+# 583 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_ConvertArguments(JSContext *cx, uintN argc, jsval *argv, const char *format,
+                    ...);
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ConvertArgumentsVA(JSContext *cx, uintN argc, jsval *argv,
+                      const char *format, va_list ap);
+# 634 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_AddArgumentFormatter(JSContext *cx, const char *format,
+                        JSArgumentFormatter formatter);
+
+extern __attribute__((visibility ("default"))) void
+JS_RemoveArgumentFormatter(JSContext *cx, const char *format);
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ConvertValue(JSContext *cx, jsval v, JSType type, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ValueToObject(JSContext *cx, jsval v, JSObject **objp);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_ValueToFunction(JSContext *cx, jsval v);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_ValueToConstructor(JSContext *cx, jsval v);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_ValueToString(JSContext *cx, jsval v);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_ValueToSource(JSContext *cx, jsval v);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ValueToNumber(JSContext *cx, jsval v, jsdouble *dp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DoubleIsInt32(jsdouble d, jsint *ip);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ValueToECMAInt32(JSContext *cx, jsval v, int32 *ip);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ValueToECMAUint32(JSContext *cx, jsval v, uint32 *ip);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ValueToInt32(JSContext *cx, jsval v, int32 *ip);
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ValueToUint16(JSContext *cx, jsval v, uint16 *ip);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ValueToBoolean(JSContext *cx, jsval v, JSBool *bp);
+
+extern __attribute__((visibility ("default"))) JSType
+JS_TypeOfValue(JSContext *cx, jsval v);
+
+extern __attribute__((visibility ("default"))) const char *
+JS_GetTypeName(JSContext *cx, JSType type);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_StrictlyEqual(JSContext *cx, jsval v1, jsval v2, JSBool *equal);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SameValue(JSContext *cx, jsval v1, jsval v2, JSBool *same);
+# 724 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSRuntime *
+JS_Init(uint32 maxbytes);
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_Finish(JSRuntime *rt);
+
+extern __attribute__((visibility ("default"))) void
+JS_ShutDown(void);
+
+__attribute__((visibility ("default"))) void *
+JS_GetRuntimePrivate(JSRuntime *rt);
+
+__attribute__((visibility ("default"))) void
+JS_SetRuntimePrivate(JSRuntime *rt, void *data);
+
+extern __attribute__((visibility ("default"))) void
+JS_BeginRequest(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_EndRequest(JSContext *cx);
+
+
+extern __attribute__((visibility ("default"))) void
+JS_YieldRequest(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) jsrefcount
+JS_SuspendRequest(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_ResumeRequest(JSContext *cx, jsrefcount saveDepth);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsInRequest(JSContext *cx);
+
+
+}
+
+class JSAutoRequest {
+  public:
+    JSAutoRequest(JSContext *cx )
+        : mContext(cx), mSaveDepth(0) {
+        do { } while (0);
+        JS_BeginRequest(mContext);
+    }
+    ~JSAutoRequest() {
+        JS_EndRequest(mContext);
+    }
+
+    void suspend() {
+        mSaveDepth = JS_SuspendRequest(mContext);
+    }
+    void resume() {
+        JS_ResumeRequest(mContext, mSaveDepth);
+    }
+
+  protected:
+    JSContext *mContext;
+    jsrefcount mSaveDepth;
+   
+
+
+
+
+
+
+};
+
+class JSAutoSuspendRequest {
+  public:
+    JSAutoSuspendRequest(JSContext *cx )
+        : mContext(cx), mSaveDepth(0) {
+        do { } while (0);
+        if (mContext) {
+            mSaveDepth = JS_SuspendRequest(mContext);
+        }
+    }
+    ~JSAutoSuspendRequest() {
+        resume();
+    }
+
+    void resume() {
+        if (mContext) {
+            JS_ResumeRequest(mContext, mSaveDepth);
+            mContext = 0;
+        }
+    }
+
+  protected:
+    JSContext *mContext;
+    jsrefcount mSaveDepth;
+   
+
+
+
+
+
+
+};
+
+class JSAutoCheckRequest {
+  public:
+    JSAutoCheckRequest(JSContext *cx ) {
+
+
+
+
+        do { } while (0);
+    }
+
+    ~JSAutoCheckRequest() {
+
+
+
+    }
+
+
+  private:
+
+
+
+   
+};
+
+extern "C" {
+
+
+extern __attribute__((visibility ("default"))) void
+JS_Lock(JSRuntime *rt);
+
+extern __attribute__((visibility ("default"))) void
+JS_Unlock(JSRuntime *rt);
+
+extern __attribute__((visibility ("default"))) JSContextCallback
+JS_SetContextCallback(JSRuntime *rt, JSContextCallback cxCallback);
+
+extern __attribute__((visibility ("default"))) JSContext *
+JS_NewContext(JSRuntime *rt, size_t stackChunkSize);
+
+extern __attribute__((visibility ("default"))) void
+JS_DestroyContext(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_DestroyContextNoGC(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_DestroyContextMaybeGC(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void *
+JS_GetContextPrivate(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_SetContextPrivate(JSContext *cx, void *data);
+
+extern __attribute__((visibility ("default"))) JSRuntime *
+JS_GetRuntime(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSContext *
+JS_ContextIterator(JSRuntime *rt, JSContext **iterp);
+
+extern __attribute__((visibility ("default"))) JSVersion
+JS_GetVersion(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSVersion
+JS_SetVersion(JSContext *cx, JSVersion version);
+
+extern __attribute__((visibility ("default"))) const char *
+JS_VersionToString(JSVersion version);
+
+extern __attribute__((visibility ("default"))) JSVersion
+JS_StringToVersion(const char *string);
+# 968 "jsapi.h"
+extern __attribute__((visibility ("default"))) uint32
+JS_GetOptions(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) uint32
+JS_SetOptions(JSContext *cx, uint32 options);
+
+extern __attribute__((visibility ("default"))) uint32
+JS_ToggleOptions(JSContext *cx, uint32 options);
+
+extern __attribute__((visibility ("default"))) const char *
+JS_GetImplementationVersion(void);
+
+extern __attribute__((visibility ("default"))) JSCompartmentCallback
+JS_SetCompartmentCallback(JSRuntime *rt, JSCompartmentCallback callback);
+
+extern __attribute__((visibility ("default"))) JSWrapObjectCallback
+JS_SetWrapObjectCallbacks(JSRuntime *rt,
+                          JSWrapObjectCallback callback,
+                          JSPreWrapCallback precallback);
+
+extern __attribute__((visibility ("default"))) JSCrossCompartmentCall *
+JS_EnterCrossCompartmentCall(JSContext *cx, JSObject *target);
+
+extern __attribute__((visibility ("default"))) void
+JS_LeaveCrossCompartmentCall(JSCrossCompartmentCall *call);
+
+extern __attribute__((visibility ("default"))) void *
+JS_SetCompartmentPrivate(JSContext *cx, JSCompartment *compartment, void *data);
+
+extern __attribute__((visibility ("default"))) void *
+JS_GetCompartmentPrivate(JSContext *cx, JSCompartment *compartment);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_WrapObject(JSContext *cx, JSObject **objp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_WrapValue(JSContext *cx, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_TransplantObject(JSContext *cx, JSObject *origobj, JSObject *target);
+
+extern __attribute__((visibility ("default"))) JSObject *
+js_TransplantObjectWithWrapper(JSContext *cx,
+                               JSObject *origobj,
+                               JSObject *origwrapper,
+                               JSObject *targetobj,
+                               JSObject *targetwrapper);
+
+extern __attribute__((visibility ("default"))) JSObject *
+js_TransplantObjectWithWrapper(JSContext *cx,
+                               JSObject *origobj,
+                               JSObject *origwrapper,
+                               JSObject *targetobj,
+                               JSObject *targetwrapper);
+
+
+}
+
+class __attribute__((visibility ("default"))) JSAutoEnterCompartment
+{
+    JSCrossCompartmentCall *call;
+
+  public:
+    JSAutoEnterCompartment() : call(__null) {}
+
+    bool enter(JSContext *cx, JSObject *target);
+
+    void enterAndIgnoreErrors(JSContext *cx, JSObject *target);
+
+    bool entered() const { return call != __null; }
+
+    ~JSAutoEnterCompartment() {
+        if (call && call != reinterpret_cast<JSCrossCompartmentCall*>(1))
+            JS_LeaveCrossCompartmentCall(call);
+    }
+
+    void swap(JSAutoEnterCompartment &other) {
+        JSCrossCompartmentCall *tmp = call;
+        call = other.call;
+        other.call = tmp;
+    }
+};
+
+extern "C" {
+
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetGlobalObject(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_SetGlobalObject(JSContext *cx, JSObject *obj);
+# 1067 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_InitStandardClasses(JSContext *cx, JSObject *obj);
+# 1083 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_ResolveStandardClass(JSContext *cx, JSObject *obj, jsid id,
+                        JSBool *resolved);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EnumerateStandardClasses(JSContext *cx, JSObject *obj);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSIdArray *
+JS_EnumerateResolvedStandardClasses(JSContext *cx, JSObject *obj,
+                                    JSIdArray *ida);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key,
+                  JSObject **objp);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetScopeChain(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetGlobalForObject(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetGlobalForScopeChain(JSContext *cx);
+# 1184 "jsapi.h"
+extern __attribute__((visibility ("default"))) jsval
+JS_ComputeThis(JSContext *cx, jsval *vp);
+
+
+
+static inline jsval
+JS_THIS(JSContext *cx, jsval *vp)
+{
+    return JSVAL_IS_PRIMITIVE(vp[1]) ? JS_ComputeThis(cx, vp) : vp[1];
+}
+# 1210 "jsapi.h"
+extern __attribute__((visibility ("default"))) void *
+JS_malloc(JSContext *cx, size_t nbytes);
+
+extern __attribute__((visibility ("default"))) void *
+JS_realloc(JSContext *cx, void *p, size_t nbytes);
+
+extern __attribute__((visibility ("default"))) void
+JS_free(JSContext *cx, void *p);
+
+extern __attribute__((visibility ("default"))) void
+JS_updateMallocCounter(JSContext *cx, size_t nbytes);
+
+extern __attribute__((visibility ("default"))) char *
+JS_strdup(JSContext *cx, const char *s);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval);
+# 1253 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_AddValueRoot(JSContext *cx, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AddStringRoot(JSContext *cx, JSString **rp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AddObjectRoot(JSContext *cx, JSObject **rp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AddGCThingRoot(JSContext *cx, void **rp);
+# 1274 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_AddNamedValueRoot(JSContext *cx, jsval *vp, const char *name);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AddNamedStringRoot(JSContext *cx, JSString **rp, const char *name);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AddNamedObjectRoot(JSContext *cx, JSObject **rp, const char *name);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AddNamedGCThingRoot(JSContext *cx, void **rp, const char *name);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_RemoveValueRoot(JSContext *cx, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_RemoveStringRoot(JSContext *cx, JSString **rp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_RemoveObjectRoot(JSContext *cx, JSObject **rp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_RemoveGCThingRoot(JSContext *cx, void **rp);
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+js_AddRootRT(JSRuntime *rt, jsval *vp, const char *name);
+
+extern __attribute__((visibility ("default"))) JSBool
+js_AddGCThingRootRT(JSRuntime *rt, void **rp, const char *name);
+
+extern __attribute__((visibility ("default"))) JSBool
+js_RemoveRoot(JSRuntime *rt, void *rp);
+
+
+}
+
+namespace JS {
+# 1374 "jsapi.h"
+template<typename T> class AnchorPermitted;
+template<> class AnchorPermitted<JSObject *> { };
+template<> class AnchorPermitted<const JSObject *> { };
+template<> class AnchorPermitted<JSFunction *> { };
+template<> class AnchorPermitted<const JSFunction *> { };
+template<> class AnchorPermitted<JSString *> { };
+template<> class AnchorPermitted<const JSString *> { };
+template<> class AnchorPermitted<jsval> { };
+
+template<typename T>
+class Anchor: AnchorPermitted<T> {
+  public:
+    Anchor() { }
+    explicit Anchor(T t) { hold = t; }
+    inline ~Anchor();
+    T &get() { return hold; }
+    void set(const T &t) { hold = t; }
+    void clear() { hold = 0; }
+  private:
+    T hold;
+
+    Anchor(const Anchor &);
+    const Anchor &operator=(const Anchor &);
+};
+
+
+template<typename T>
+inline Anchor<T>::~Anchor() {
+# 1413 "jsapi.h"
+    asm volatile("":: "g" (hold) : "memory");
+}
+# 1465 "jsapi.h"
+}
+
+extern "C" {
+
+
+
+
+
+
+extern __attribute__((noinline)) __attribute__((visibility ("default"))) void
+JS_AnchorPtr(void *p);
+# 1490 "jsapi.h"
+typedef enum JSGCRootType {
+    JS_GC_ROOT_VALUE_PTR,
+    JS_GC_ROOT_GCTHING_PTR
+} JSGCRootType;
+# 1528 "jsapi.h"
+typedef intN
+(* JSGCRootMapFun)(void *rp, JSGCRootType type, const char *name, void *data);
+
+extern __attribute__((visibility ("default"))) uint32
+JS_MapGCRoots(JSRuntime *rt, JSGCRootMapFun map, void *data);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_LockGCThing(JSContext *cx, void *thing);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_LockGCThingRT(JSRuntime *rt, void *thing);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_UnlockGCThing(JSContext *cx, void *thing);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_UnlockGCThingRT(JSRuntime *rt, void *thing);
+# 1553 "jsapi.h"
+extern __attribute__((visibility ("default"))) void
+JS_SetExtraGCRoots(JSRuntime *rt, JSTraceDataOp traceOp, void *data);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_MarkGCThing(JSContext *cx, jsval v, const char *name, void *arg);
+# 1583 "jsapi.h"
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_TRACEABLE(jsval v)
+{
+    jsval_layout l;
+    l.asBits = (v);
+    return JSVAL_IS_TRACEABLE_IMPL(l);
+}
+
+static __attribute__((always_inline)) inline void *
+JSVAL_TO_TRACEABLE(jsval v)
+{
+    return JSVAL_TO_GCTHING(v);
+}
+
+static __attribute__((always_inline)) inline uint32
+JSVAL_TRACE_KIND(jsval v)
+{
+    jsval_layout l;
+    ((void) 0);
+    l.asBits = (v);
+    return JSVAL_TRACE_KIND_IMPL(l);
+}
+
+struct JSTracer {
+    JSContext *context;
+    JSTraceCallback callback;
+    JSTraceNamePrinter debugPrinter;
+    const void *debugPrintArg;
+    size_t debugPrintIndex;
+};
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_CallTracer(JSTracer *trc, void *thing, uint32 kind);
+# 1713 "jsapi.h"
+extern __attribute__((visibility ("default"))) void
+JS_TraceChildren(JSTracer *trc, void *thing, uint32 kind);
+
+extern __attribute__((visibility ("default"))) void
+JS_TraceRuntime(JSTracer *trc);
+# 1749 "jsapi.h"
+extern __attribute__((visibility ("default"))) void
+JS_GC(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_MaybeGC(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSGCCallback
+JS_SetGCCallback(JSContext *cx, JSGCCallback cb);
+
+extern __attribute__((visibility ("default"))) JSGCCallback
+JS_SetGCCallbackRT(JSRuntime *rt, JSGCCallback cb);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsGCMarkingTracer(JSTracer *trc);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsAboutToBeFinalized(JSContext *cx, void *thing);
+
+typedef enum JSGCParamKey {
+
+    JSGC_MAX_BYTES = 0,
+
+
+    JSGC_MAX_MALLOC_BYTES = 1,
+
+
+    JSGC_STACKPOOL_LIFESPAN = 2,
+# 1785 "jsapi.h"
+    JSGC_TRIGGER_FACTOR = 3,
+
+
+    JSGC_BYTES = 4,
+
+
+    JSGC_NUMBER = 5,
+
+
+    JSGC_MAX_CODE_CACHE_BYTES = 6,
+
+
+    JSGC_MODE = 7,
+
+
+    JSGC_UNUSED_CHUNKS = 8
+} JSGCParamKey;
+
+typedef enum JSGCMode {
+
+    JSGC_MODE_GLOBAL = 0,
+
+
+    JSGC_MODE_COMPARTMENT = 1
+} JSGCMode;
+
+extern __attribute__((visibility ("default"))) void
+JS_SetGCParameter(JSRuntime *rt, JSGCParamKey key, uint32 value);
+
+extern __attribute__((visibility ("default"))) uint32
+JS_GetGCParameter(JSRuntime *rt, JSGCParamKey key);
+
+extern __attribute__((visibility ("default"))) void
+JS_SetGCParameterForThread(JSContext *cx, JSGCParamKey key, uint32 value);
+
+extern __attribute__((visibility ("default"))) uint32
+JS_GetGCParameterForThread(JSContext *cx, JSGCParamKey key);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_FlushCaches(JSContext *cx);
+# 1844 "jsapi.h"
+extern __attribute__((visibility ("default"))) intN
+JS_AddExternalStringFinalizer(JSStringFinalizeOp finalizer);
+# 1860 "jsapi.h"
+extern __attribute__((visibility ("default"))) intN
+JS_RemoveExternalStringFinalizer(JSStringFinalizeOp finalizer);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_NewExternalString(JSContext *cx, jschar *chars, size_t length, intN type);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) intN
+JS_GetExternalStringGCType(JSRuntime *rt, JSString *str);
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_SetThreadStackLimit(JSContext *cx, jsuword limitAddr);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_SetNativeStackQuota(JSContext *cx, size_t stackSize);
+# 1902 "jsapi.h"
+extern __attribute__((visibility ("default"))) void
+JS_SetScriptStackQuota(JSContext *cx, size_t quota);
+# 1912 "jsapi.h"
+typedef void (*JSClassInternal)();
+
+
+struct JSClass {
+    const char *name;
+    uint32 flags;
+
+
+    JSPropertyOp addProperty;
+    JSPropertyOp delProperty;
+    JSPropertyOp getProperty;
+    JSStrictPropertyOp setProperty;
+    JSEnumerateOp enumerate;
+    JSResolveOp resolve;
+    JSConvertOp convert;
+    JSFinalizeOp finalize;
+
+
+    JSClassInternal reserved0;
+    JSCheckAccessOp checkAccess;
+    JSNative call;
+    JSNative construct;
+    JSXDRObjectOp xdrObject;
+    JSHasInstanceOp hasInstance;
+    JSMarkOp mark;
+
+    JSClassInternal reserved1;
+    void *reserved[19];
+};
+# 2024 "jsapi.h"
+struct JSIdArray {
+    jsint length;
+    jsid vector[1];
+};
+
+extern __attribute__((visibility ("default"))) void
+JS_DestroyIdArray(JSContext *cx, JSIdArray *ida);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ValueToId(JSContext *cx, jsval v, jsid *idp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IdToValue(JSContext *cx, jsid id, jsval *vp);
+# 2048 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_PropertyStub(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_StrictPropertyStub(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EnumerateStub(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ResolveStub(JSContext *cx, JSObject *obj, jsid id);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ConvertStub(JSContext *cx, JSObject *obj, JSType type, jsval *vp);
+
+extern __attribute__((visibility ("default"))) void
+JS_FinalizeStub(JSContext *cx, JSObject *obj);
+
+struct JSConstDoubleSpec {
+    jsdouble dval;
+    const char *name;
+    uint8 flags;
+    uint8 spare[3];
+};
+
+
+
+
+
+
+struct JSPropertySpec {
+    const char *name;
+    int8 tinyid;
+    uint8 flags;
+    JSPropertyOp getter;
+    JSStrictPropertyOp setter;
+};
+
+struct JSFunctionSpec {
+    const char *name;
+    JSNative call;
+    uint16 nargs;
+    uint16 flags;
+};
+# 2109 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSObject *
+JS_InitClass(JSContext *cx, JSObject *obj, JSObject *parent_proto,
+             JSClass *clasp, JSNative constructor, uintN nargs,
+             JSPropertySpec *ps, JSFunctionSpec *fs,
+             JSPropertySpec *static_ps, JSFunctionSpec *static_fs);
+
+
+extern __attribute__((visibility ("default"))) JSClass *
+JS_GetClass(JSContext *cx, JSObject *obj);
+# 2127 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_InstanceOf(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_HasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp);
+
+extern __attribute__((visibility ("default"))) void *
+JS_GetPrivate(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetPrivate(JSContext *cx, JSObject *obj, void *data);
+
+extern __attribute__((visibility ("default"))) void *
+JS_GetInstancePrivate(JSContext *cx, JSObject *obj, JSClass *clasp,
+                      jsval *argv);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetPrototype(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetPrototype(JSContext *cx, JSObject *obj, JSObject *proto);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetParent(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetParent(JSContext *cx, JSObject *obj, JSObject *parent);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetConstructor(JSContext *cx, JSObject *proto);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetObjectId(JSContext *cx, JSObject *obj, jsid *idp);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewGlobalObject(JSContext *cx, JSClass *clasp);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewCompartmentAndGlobalObject(JSContext *cx, JSClass *clasp, JSPrincipals *principals);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent);
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsExtensible(JSObject *obj);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewObjectWithGivenProto(JSContext *cx, JSClass *clasp, JSObject *proto,
+                           JSObject *parent);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DeepFreezeObject(JSContext *cx, JSObject *obj);
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_FreezeObject(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto,
+                   JSObject *parent);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_ConstructObjectWithArguments(JSContext *cx, JSClass *clasp, JSObject *proto,
+                                JSObject *parent, uintN argc, jsval *argv);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_New(JSContext *cx, JSObject *ctor, uintN argc, jsval *argv);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_DefineObject(JSContext *cx, JSObject *obj, const char *name, JSClass *clasp,
+                JSObject *proto, uintN attrs);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefineConstDoubles(JSContext *cx, JSObject *obj, JSConstDoubleSpec *cds);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefineProperties(JSContext *cx, JSObject *obj, JSPropertySpec *ps);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefineProperty(JSContext *cx, JSObject *obj, const char *name, jsval value,
+                  JSPropertyOp getter, JSStrictPropertyOp setter, uintN attrs);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefinePropertyById(JSContext *cx, JSObject *obj, jsid id, jsval value,
+                      JSPropertyOp getter, JSStrictPropertyOp setter, uintN attrs);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefineOwnProperty(JSContext *cx, JSObject *obj, jsid id, jsval descriptor, JSBool *bp);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPropertyAttributes(JSContext *cx, JSObject *obj, const char *name,
+                         uintN *attrsp, JSBool *foundp);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPropertyAttrsGetterAndSetter(JSContext *cx, JSObject *obj,
+                                   const char *name,
+                                   uintN *attrsp, JSBool *foundp,
+                                   JSPropertyOp *getterp,
+                                   JSStrictPropertyOp *setterp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPropertyAttrsGetterAndSetterById(JSContext *cx, JSObject *obj,
+                                       jsid id,
+                                       uintN *attrsp, JSBool *foundp,
+                                       JSPropertyOp *getterp,
+                                       JSStrictPropertyOp *setterp);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetPropertyAttributes(JSContext *cx, JSObject *obj, const char *name,
+                         uintN attrs, JSBool *foundp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefinePropertyWithTinyId(JSContext *cx, JSObject *obj, const char *name,
+                            int8 tinyid, jsval value,
+                            JSPropertyOp getter, JSStrictPropertyOp setter,
+                            uintN attrs);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AliasProperty(JSContext *cx, JSObject *obj, const char *name,
+                 const char *alias);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AlreadyHasOwnProperty(JSContext *cx, JSObject *obj, const char *name,
+                         JSBool *foundp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AlreadyHasOwnPropertyById(JSContext *cx, JSObject *obj, jsid id,
+                             JSBool *foundp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_HasProperty(JSContext *cx, JSObject *obj, const char *name, JSBool *foundp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_HasPropertyById(JSContext *cx, JSObject *obj, jsid id, JSBool *foundp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_LookupProperty(JSContext *cx, JSObject *obj, const char *name, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_LookupPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_LookupPropertyWithFlags(JSContext *cx, JSObject *obj, const char *name,
+                           uintN flags, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_LookupPropertyWithFlagsById(JSContext *cx, JSObject *obj, jsid id,
+                               uintN flags, JSObject **objp, jsval *vp);
+
+struct JSPropertyDescriptor {
+    JSObject *obj;
+    uintN attrs;
+    JSPropertyOp getter;
+    JSStrictPropertyOp setter;
+    jsval value;
+    uintN shortid;
+};
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPropertyDescriptorById(JSContext *cx, JSObject *obj, jsid id, uintN flags,
+                             JSPropertyDescriptor *desc);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetOwnPropertyDescriptor(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetProperty(JSContext *cx, JSObject *obj, const char *name, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPropertyDefault(JSContext *cx, JSObject *obj, const char *name, jsval def, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPropertyByIdDefault(JSContext *cx, JSObject *obj, jsid id, jsval def, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetMethodById(JSContext *cx, JSObject *obj, jsid id, JSObject **objp,
+                 jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetMethod(JSContext *cx, JSObject *obj, const char *name, JSObject **objp,
+             jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetProperty(JSContext *cx, JSObject *obj, const char *name, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DeleteProperty(JSContext *cx, JSObject *obj, const char *name);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DeleteProperty2(JSContext *cx, JSObject *obj, const char *name,
+                   jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DeletePropertyById(JSContext *cx, JSObject *obj, jsid id);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DeletePropertyById2(JSContext *cx, JSObject *obj, jsid id, jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefineUCProperty(JSContext *cx, JSObject *obj,
+                    const jschar *name, size_t namelen, jsval value,
+                    JSPropertyOp getter, JSStrictPropertyOp setter,
+                    uintN attrs);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetUCPropertyAttributes(JSContext *cx, JSObject *obj,
+                           const jschar *name, size_t namelen,
+                           uintN *attrsp, JSBool *foundp);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetUCPropertyAttrsGetterAndSetter(JSContext *cx, JSObject *obj,
+                                     const jschar *name, size_t namelen,
+                                     uintN *attrsp, JSBool *foundp,
+                                     JSPropertyOp *getterp,
+                                     JSStrictPropertyOp *setterp);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetUCPropertyAttributes(JSContext *cx, JSObject *obj,
+                           const jschar *name, size_t namelen,
+                           uintN attrs, JSBool *foundp);
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefineUCPropertyWithTinyId(JSContext *cx, JSObject *obj,
+                              const jschar *name, size_t namelen,
+                              int8 tinyid, jsval value,
+                              JSPropertyOp getter, JSStrictPropertyOp setter,
+                              uintN attrs);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AlreadyHasOwnUCProperty(JSContext *cx, JSObject *obj, const jschar *name,
+                           size_t namelen, JSBool *foundp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_HasUCProperty(JSContext *cx, JSObject *obj,
+                 const jschar *name, size_t namelen,
+                 JSBool *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_LookupUCProperty(JSContext *cx, JSObject *obj,
+                    const jschar *name, size_t namelen,
+                    jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetUCProperty(JSContext *cx, JSObject *obj,
+                 const jschar *name, size_t namelen,
+                 jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetUCProperty(JSContext *cx, JSObject *obj,
+                 const jschar *name, size_t namelen,
+                 jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DeleteUCProperty2(JSContext *cx, JSObject *obj,
+                     const jschar *name, size_t namelen,
+                     jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewArrayObject(JSContext *cx, jsint length, jsval *vector);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsArrayObject(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetArrayLength(JSContext *cx, JSObject *obj, jsuint length);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_HasArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefineElement(JSContext *cx, JSObject *obj, jsint index, jsval value,
+                 JSPropertyOp getter, JSStrictPropertyOp setter, uintN attrs);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AliasElement(JSContext *cx, JSObject *obj, const char *name, jsint alias);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_AlreadyHasOwnElement(JSContext *cx, JSObject *obj, jsint index,
+                        JSBool *foundp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_HasElement(JSContext *cx, JSObject *obj, jsint index, JSBool *foundp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_LookupElement(JSContext *cx, JSObject *obj, jsint index, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetElement(JSContext *cx, JSObject *obj, jsint index, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetElement(JSContext *cx, JSObject *obj, jsint index, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DeleteElement(JSContext *cx, JSObject *obj, jsint index);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DeleteElement2(JSContext *cx, JSObject *obj, jsint index, jsval *rval);
+
+extern __attribute__((visibility ("default"))) void
+JS_ClearScope(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSIdArray *
+JS_Enumerate(JSContext *cx, JSObject *obj);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewPropertyIterator(JSContext *cx, JSObject *obj);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_NextProperty(JSContext *cx, JSObject *iterobj, jsid *idp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
+               jsval *vp, uintN *attrsp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval v);
+
+
+
+
+
+
+struct JSPrincipals {
+    char *codebase;
+
+
+    void * (* getPrincipalArray)(JSContext *cx, JSPrincipals *);
+    JSBool (* globalPrivilegesEnabled)(JSContext *cx, JSPrincipals *);
+
+
+    jsrefcount refcount;
+
+    void (* destroy)(JSContext *cx, JSPrincipals *);
+    JSBool (* subsume)(JSPrincipals *, JSPrincipals *);
+};
+
+
+
+
+
+extern __attribute__((visibility ("default"))) jsrefcount
+JS_HoldPrincipals(JSContext *cx, JSPrincipals *principals);
+
+extern __attribute__((visibility ("default"))) jsrefcount
+JS_DropPrincipals(JSContext *cx, JSPrincipals *principals);
+# 2561 "jsapi.h"
+struct JSSecurityCallbacks {
+    JSCheckAccessOp checkObjectAccess;
+    JSPrincipalsTranscoder principalsTranscoder;
+    JSObjectPrincipalsFinder findObjectPrincipals;
+    JSCSPEvalChecker contentSecurityPolicyAllows;
+};
+
+extern __attribute__((visibility ("default"))) JSSecurityCallbacks *
+JS_SetRuntimeSecurityCallbacks(JSRuntime *rt, JSSecurityCallbacks *callbacks);
+
+extern __attribute__((visibility ("default"))) JSSecurityCallbacks *
+JS_GetRuntimeSecurityCallbacks(JSRuntime *rt);
+
+extern __attribute__((visibility ("default"))) JSSecurityCallbacks *
+JS_SetContextSecurityCallbacks(JSContext *cx, JSSecurityCallbacks *callbacks);
+
+extern __attribute__((visibility ("default"))) JSSecurityCallbacks *
+JS_GetSecurityCallbacks(JSContext *cx);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_NewFunction(JSContext *cx, JSNative call, uintN nargs, uintN flags,
+               JSObject *parent, const char *name);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_NewFunctionById(JSContext *cx, JSNative call, uintN nargs, uintN flags,
+                   JSObject *parent, jsid id);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetFunctionObject(JSFunction *fun);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_GetFunctionId(JSFunction *fun);
+
+
+
+
+extern __attribute__((visibility ("default"))) uintN
+JS_GetFunctionFlags(JSFunction *fun);
+
+
+
+
+extern __attribute__((visibility ("default"))) uint16
+JS_GetFunctionArity(JSFunction *fun);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ObjectIsFunction(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ObjectIsCallable(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefineFunctions(JSContext *cx, JSObject *obj, JSFunctionSpec *fs);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_DefineFunction(JSContext *cx, JSObject *obj, const char *name, JSNative call,
+                  uintN nargs, uintN attrs);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_DefineUCFunction(JSContext *cx, JSObject *obj,
+                    const jschar *name, size_t namelen, JSNative call,
+                    uintN nargs, uintN attrs);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_DefineFunctionById(JSContext *cx, JSObject *obj, jsid id, JSNative call,
+                      uintN nargs, uintN attrs);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CloneFunctionObject(JSContext *cx, JSObject *funobj, JSObject *parent);
+# 2659 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_BufferIsCompilableUnit(JSContext *cx, JSObject *obj,
+                          const char *bytes, size_t length);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileScript(JSContext *cx, JSObject *obj,
+                 const char *bytes, size_t length,
+                 const char *filename, uintN lineno);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileScriptForPrincipals(JSContext *cx, JSObject *obj,
+                              JSPrincipals *principals,
+                              const char *bytes, size_t length,
+                              const char *filename, uintN lineno);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileScriptForPrincipalsVersion(JSContext *cx, JSObject *obj,
+                                     JSPrincipals *principals,
+                                     const char *bytes, size_t length,
+                                     const char *filename, uintN lineno,
+                                     JSVersion version);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileUCScript(JSContext *cx, JSObject *obj,
+                   const jschar *chars, size_t length,
+                   const char *filename, uintN lineno);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileUCScriptForPrincipals(JSContext *cx, JSObject *obj,
+                                JSPrincipals *principals,
+                                const jschar *chars, size_t length,
+                                const char *filename, uintN lineno);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileUCScriptForPrincipalsVersion(JSContext *cx, JSObject *obj,
+                                       JSPrincipals *principals,
+                                       const jschar *chars, size_t length,
+                                       const char *filename, uintN lineno,
+                                       JSVersion version);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileFile(JSContext *cx, JSObject *obj, const char *filename);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileFileHandle(JSContext *cx, JSObject *obj, const char *filename,
+                     FILE *fh);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileFileHandleForPrincipals(JSContext *cx, JSObject *obj,
+                                  const char *filename, FILE *fh,
+                                  JSPrincipals *principals);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_CompileFileHandleForPrincipalsVersion(JSContext *cx, JSObject *obj,
+                                         const char *filename, FILE *fh,
+                                         JSPrincipals *principals,
+                                         JSVersion version);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_CompileFunction(JSContext *cx, JSObject *obj, const char *name,
+                   uintN nargs, const char **argnames,
+                   const char *bytes, size_t length,
+                   const char *filename, uintN lineno);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_CompileFunctionForPrincipals(JSContext *cx, JSObject *obj,
+                                JSPrincipals *principals, const char *name,
+                                uintN nargs, const char **argnames,
+                                const char *bytes, size_t length,
+                                const char *filename, uintN lineno);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_CompileUCFunction(JSContext *cx, JSObject *obj, const char *name,
+                     uintN nargs, const char **argnames,
+                     const jschar *chars, size_t length,
+                     const char *filename, uintN lineno);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_CompileUCFunctionForPrincipals(JSContext *cx, JSObject *obj,
+                                  JSPrincipals *principals, const char *name,
+                                  uintN nargs, const char **argnames,
+                                  const jschar *chars, size_t length,
+                                  const char *filename, uintN lineno);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_CompileUCFunctionForPrincipalsVersion(JSContext *cx, JSObject *obj,
+                                         JSPrincipals *principals, const char *name,
+                                         uintN nargs, const char **argnames,
+                                         const jschar *chars, size_t length,
+                                         const char *filename, uintN lineno,
+                                         JSVersion version);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_DecompileScriptObject(JSContext *cx, JSObject *scriptObj, const char *name, uintN indent);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_DecompileFunction(JSContext *cx, JSFunction *fun, uintN indent);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, uintN indent);
+# 2801 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_ExecuteScript(JSContext *cx, JSObject *obj, JSObject *scriptObj, jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ExecuteScriptVersion(JSContext *cx, JSObject *obj, JSObject *scriptObj, jsval *rval,
+                        JSVersion version);
+
+
+
+
+
+typedef enum JSExecPart { JSEXEC_PROLOG, JSEXEC_MAIN } JSExecPart;
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EvaluateScript(JSContext *cx, JSObject *obj,
+                  const char *bytes, uintN length,
+                  const char *filename, uintN lineno,
+                  jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EvaluateScriptForPrincipals(JSContext *cx, JSObject *obj,
+                               JSPrincipals *principals,
+                               const char *bytes, uintN length,
+                               const char *filename, uintN lineno,
+                               jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EvaluateScriptForPrincipalsVersion(JSContext *cx, JSObject *obj,
+                                      JSPrincipals *principals,
+                                      const char *bytes, uintN length,
+                                      const char *filename, uintN lineno,
+                                      jsval *rval, JSVersion version);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EvaluateUCScript(JSContext *cx, JSObject *obj,
+                    const jschar *chars, uintN length,
+                    const char *filename, uintN lineno,
+                    jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EvaluateUCScriptForPrincipalsVersion(JSContext *cx, JSObject *obj,
+                                        JSPrincipals *principals,
+                                        const jschar *chars, uintN length,
+                                        const char *filename, uintN lineno,
+                                        jsval *rval, JSVersion version);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EvaluateUCScriptForPrincipals(JSContext *cx, JSObject *obj,
+                                 JSPrincipals *principals,
+                                 const jschar *chars, uintN length,
+                                 const char *filename, uintN lineno,
+                                 jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_CallFunction(JSContext *cx, JSObject *obj, JSFunction *fun, uintN argc,
+                jsval *argv, jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_CallFunctionName(JSContext *cx, JSObject *obj, const char *name, uintN argc,
+                    jsval *argv, jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_CallFunctionValue(JSContext *cx, JSObject *obj, jsval fval, uintN argc,
+                     jsval *argv, jsval *rval);
+
+
+}
+
+namespace JS {
+
+static inline
+
+# 2871 "jsapi.h"
+              bool
+Call(JSContext *cx, JSObject *thisObj, JSFunction *fun, uintN argc, jsval *argv, jsval *rval) {
+    return !!JS_CallFunction(cx, thisObj, fun, argc, argv, rval);
+}
+
+static inline
+
+# 2876 "jsapi.h"
+              bool
+Call(JSContext *cx, JSObject *thisObj, const char *name, uintN argc, jsval *argv, jsval *rval) {
+    return !!JS_CallFunctionName(cx, thisObj, name, argc, argv, rval);
+}
+
+static inline
+
+# 2881 "jsapi.h"
+              bool
+Call(JSContext *cx, JSObject *thisObj, jsval fun, uintN argc, jsval *argv, jsval *rval) {
+    return !!JS_CallFunctionValue(cx, thisObj, fun, argc, argv, rval);
+}
+
+extern __attribute__((visibility ("default"))) bool
+Call(JSContext *cx, jsval thisv, jsval fun, uintN argc, jsval *argv, jsval *rval);
+
+static inline
+
+# 2889 "jsapi.h"
+              bool
+Call(JSContext *cx, jsval thisv, JSObject *funObj, uintN argc, jsval *argv, jsval *rval) {
+    return Call(cx, thisv, OBJECT_TO_JSVAL(funObj), argc, argv, rval);
+}
+
+}
+
+extern "C" {
+# 2916 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSOperationCallback
+JS_SetOperationCallback(JSContext *cx, JSOperationCallback callback);
+
+extern __attribute__((visibility ("default"))) JSOperationCallback
+JS_GetOperationCallback(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_TriggerOperationCallback(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_TriggerAllOperationCallbacks(JSRuntime *rt);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsRunning(JSContext *cx);
+# 2944 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSStackFrame *
+JS_SaveFrameChain(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_RestoreFrameChain(JSContext *cx, JSStackFrame *fp);
+# 2961 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSString *
+JS_NewStringCopyN(JSContext *cx, const char *s, size_t n);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_NewStringCopyZ(JSContext *cx, const char *s);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_InternJSString(JSContext *cx, JSString *str);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_InternString(JSContext *cx, const char *s);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_NewUCString(JSContext *cx, jschar *chars, size_t length);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_NewUCStringCopyN(JSContext *cx, const jschar *s, size_t n);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_NewUCStringCopyZ(JSContext *cx, const jschar *s);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_InternUCStringN(JSContext *cx, const jschar *s, size_t length);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_InternUCString(JSContext *cx, const jschar *s);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_CompareStrings(JSContext *cx, JSString *str1, JSString *str2, int32 *result);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_StringEqualsAscii(JSContext *cx, JSString *str, const char *asciiBytes, JSBool *match);
+
+extern __attribute__((visibility ("default"))) size_t
+JS_PutEscapedString(JSContext *cx, char *buffer, size_t size, JSString *str, char quote);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_FileEscapedString(FILE *fp, JSString *str, char quote);
+# 3035 "jsapi.h"
+extern __attribute__((visibility ("default"))) size_t
+JS_GetStringLength(JSString *str);
+
+extern __attribute__((visibility ("default"))) const jschar *
+JS_GetStringCharsAndLength(JSContext *cx, JSString *str, size_t *length);
+
+extern __attribute__((visibility ("default"))) const jschar *
+JS_GetInternedStringChars(JSString *str);
+
+extern __attribute__((visibility ("default"))) const jschar *
+JS_GetInternedStringCharsAndLength(JSString *str, size_t *length);
+
+extern __attribute__((visibility ("default"))) const jschar *
+JS_GetStringCharsZ(JSContext *cx, JSString *str);
+
+extern __attribute__((visibility ("default"))) const jschar *
+JS_GetStringCharsZAndLength(JSContext *cx, JSString *str, size_t *length);
+
+extern __attribute__((visibility ("default"))) JSFlatString *
+JS_FlattenString(JSContext *cx, JSString *str);
+
+extern __attribute__((visibility ("default"))) const jschar *
+JS_GetFlatStringChars(JSFlatString *str);
+
+static __attribute__((always_inline)) inline JSFlatString *
+JSID_TO_FLAT_STRING(jsid id)
+{
+    ((void) 0);
+    return (JSFlatString *)((id));
+}
+
+static __attribute__((always_inline)) inline JSFlatString *
+JS_ASSERT_STRING_IS_FLAT(JSString *str)
+{
+    ((void) 0);
+    return (JSFlatString *)str;
+}
+
+static __attribute__((always_inline)) inline JSString *
+JS_FORGET_STRING_FLATNESS(JSFlatString *fstr)
+{
+    return (JSString *)fstr;
+}
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_FlatStringEqualsAscii(JSFlatString *str, const char *asciiBytes);
+
+extern __attribute__((visibility ("default"))) size_t
+JS_PutEscapedFlatString(char *buffer, size_t size, JSFlatString *str, char quote);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_NewGrowableString(JSContext *cx, jschar *chars, size_t length);
+# 3122 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSString *
+JS_NewDependentString(JSContext *cx, JSString *str, size_t start,
+                      size_t length);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_ConcatStrings(JSContext *cx, JSString *left, JSString *right);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) const jschar *
+JS_UndependString(JSContext *cx, JSString *str);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_MakeStringImmutable(JSContext *cx, JSString *str);
+
+
+
+
+
+__attribute__((visibility ("default"))) JSBool
+JS_CStringsAreUTF8(void);
+
+
+
+
+
+
+__attribute__((visibility ("default"))) void
+JS_SetCStringsAreUTF8(void);
+# 3183 "jsapi.h"
+__attribute__((visibility ("default"))) JSBool
+JS_EncodeCharacters(JSContext *cx, const jschar *src, size_t srclen, char *dst,
+                    size_t *dstlenp);
+
+__attribute__((visibility ("default"))) JSBool
+JS_DecodeBytes(JSContext *cx, const char *src, size_t srclen, jschar *dst,
+               size_t *dstlenp);
+
+
+
+
+
+__attribute__((visibility ("default"))) char *
+JS_EncodeString(JSContext *cx, JSString *str);
+
+
+
+
+
+
+__attribute__((visibility ("default"))) size_t
+JS_GetStringEncodingLength(JSContext *cx, JSString *str);
+# 3219 "jsapi.h"
+__attribute__((visibility ("default"))) size_t
+JS_EncodeStringToBuffer(JSString *str, char *buffer, size_t length);
+
+
+
+class JSAutoByteString {
+  public:
+    JSAutoByteString(JSContext *cx, JSString *str )
+      : mBytes(JS_EncodeString(cx, str)) {
+        ((void) 0);
+        do { } while (0);
+    }
+
+    JSAutoByteString()
+      : mBytes(__null) {
+        do { } while (0);
+    }
+
+    ~JSAutoByteString() {
+        js_free(mBytes);
+    }
+
+
+    void initBytes(char *bytes) {
+        ((void) 0);
+        mBytes = bytes;
+    }
+
+    char *encode(JSContext *cx, JSString *str) {
+        ((void) 0);
+        ((void) 0);
+        mBytes = JS_EncodeString(cx, str);
+        return mBytes;
+    }
+
+    void clear() {
+        js_free(mBytes);
+        mBytes = __null;
+    }
+
+    char *ptr() const {
+        return mBytes;
+    }
+
+    bool operator!() const {
+        return !mBytes;
+    }
+
+  private:
+    char *mBytes;
+   
+
+
+    JSAutoByteString(const JSAutoByteString &another);
+    JSAutoByteString &operator=(const JSAutoByteString &another);
+};
+
+
+
+
+
+
+
+typedef JSBool (* JSONWriteCallback)(const jschar *buf, uint32 len, void *data);
+
+
+
+
+__attribute__((visibility ("default"))) JSBool
+JS_Stringify(JSContext *cx, jsval *vp, JSObject *replacer, jsval space,
+             JSONWriteCallback callback, void *data);
+
+
+
+
+__attribute__((visibility ("default"))) JSBool
+JS_TryJSON(JSContext *cx, jsval *vp);
+
+
+
+
+__attribute__((visibility ("default"))) JSONParser *
+JS_BeginJSONParse(JSContext *cx, jsval *vp);
+
+__attribute__((visibility ("default"))) JSBool
+JS_ConsumeJSONText(JSContext *cx, JSONParser *jp, const jschar *data, uint32 len);
+
+__attribute__((visibility ("default"))) JSBool
+JS_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver);
+# 3316 "jsapi.h"
+struct JSStructuredCloneCallbacks {
+    ReadStructuredCloneOp read;
+    WriteStructuredCloneOp write;
+    StructuredCloneErrorOp reportError;
+};
+
+__attribute__((visibility ("default"))) JSBool
+JS_ReadStructuredClone(JSContext *cx, const uint64 *data, size_t nbytes,
+                       uint32 version, jsval *vp,
+                       const JSStructuredCloneCallbacks *optionalCallbacks,
+                       void *closure);
+
+
+__attribute__((visibility ("default"))) JSBool
+JS_WriteStructuredClone(JSContext *cx, jsval v, uint64 **datap, size_t *nbytesp,
+                        const JSStructuredCloneCallbacks *optionalCallbacks,
+                        void *closure);
+
+__attribute__((visibility ("default"))) JSBool
+JS_StructuredClone(JSContext *cx, jsval v, jsval *vp,
+                   const JSStructuredCloneCallbacks *optionalCallbacks,
+                   void *closure);
+
+
+
+class JSAutoStructuredCloneBuffer {
+    JSContext *cx_;
+    uint64 *data_;
+    size_t nbytes_;
+    uint32 version_;
+
+  public:
+    JSAutoStructuredCloneBuffer()
+        : cx_(__null), data_(__null), nbytes_(0), version_(1) {}
+
+    ~JSAutoStructuredCloneBuffer() { clear(); }
+
+    JSContext *cx() const { return cx_; }
+    uint64 *data() const { return data_; }
+    size_t nbytes() const { return nbytes_; }
+
+    void clear(JSContext *cx=__null) {
+        if (data_) {
+            if (!cx)
+                cx = cx_;
+            ((void) 0);
+            JS_free(cx, data_);
+            cx_ = __null;
+            data_ = __null;
+            nbytes_ = 0;
+            version_ = 0;
+        }
+    }
+
+
+
+
+
+    void adopt(JSContext *cx, uint64 *data, size_t nbytes,
+               uint32 version=1) {
+        clear(cx);
+        cx_ = cx;
+        data_ = data;
+        nbytes_ = nbytes;
+        version_ = version;
+    }
+
+
+
+
+
+    void steal(uint64 **datap, size_t *nbytesp, JSContext **cxp=__null,
+               uint32 *versionp=__null) {
+        *datap = data_;
+        *nbytesp = nbytes_;
+        if (cxp)
+            *cxp = cx_;
+        if (versionp)
+            *versionp = version_;
+
+        cx_ = __null;
+        data_ = __null;
+        nbytes_ = 0;
+        version_ = 0;
+    }
+
+    bool read(jsval *vp, JSContext *cx=__null,
+              const JSStructuredCloneCallbacks *optionalCallbacks=__null,
+              void *closure=__null) const {
+        if (!cx)
+            cx = cx_;
+        ((void) 0);
+        ((void) 0);
+        return !!JS_ReadStructuredClone(cx, data_, nbytes_, version_, vp,
+                                        optionalCallbacks, closure);
+    }
+
+    bool write(JSContext *cx, jsval v,
+               const JSStructuredCloneCallbacks *optionalCallbacks=__null,
+               void *closure=__null) {
+        clear(cx);
+        cx_ = cx;
+        bool ok = !!JS_WriteStructuredClone(cx, v, &data_, &nbytes_,
+                                            optionalCallbacks, closure);
+        if (!ok) {
+            data_ = __null;
+            nbytes_ = 0;
+            version_ = 1;
+        }
+        return ok;
+    }
+
+
+
+
+    void swap(JSAutoStructuredCloneBuffer &other) {
+        JSContext *cx = other.cx_;
+        uint64 *data = other.data_;
+        size_t nbytes = other.nbytes_;
+        uint32 version = other.version_;
+
+        other.cx_ = this->cx_;
+        other.data_ = this->data_;
+        other.nbytes_ = this->nbytes_;
+        other.version_ = this->version_;
+
+        this->cx_ = cx;
+        this->data_ = data;
+        this->nbytes_ = nbytes;
+        this->version_ = version;
+    }
+
+  private:
+
+    JSAutoStructuredCloneBuffer(const JSAutoStructuredCloneBuffer &other);
+    JSAutoStructuredCloneBuffer &operator=(const JSAutoStructuredCloneBuffer &other);
+};
+# 3463 "jsapi.h"
+__attribute__((visibility ("default"))) void
+JS_SetStructuredCloneCallbacks(JSRuntime *rt, const JSStructuredCloneCallbacks *callbacks);
+
+__attribute__((visibility ("default"))) JSBool
+JS_ReadUint32Pair(JSStructuredCloneReader *r, uint32 *p1, uint32 *p2);
+
+__attribute__((visibility ("default"))) JSBool
+JS_ReadBytes(JSStructuredCloneReader *r, void *p, size_t len);
+
+__attribute__((visibility ("default"))) JSBool
+JS_WriteUint32Pair(JSStructuredCloneWriter *w, uint32 tag, uint32 data);
+
+__attribute__((visibility ("default"))) JSBool
+JS_WriteBytes(JSStructuredCloneWriter *w, const void *p, size_t len);
+
+
+
+
+
+
+struct JSLocaleCallbacks {
+    JSLocaleToUpperCase localeToUpperCase;
+    JSLocaleToLowerCase localeToLowerCase;
+    JSLocaleCompare localeCompare;
+    JSLocaleToUnicode localeToUnicode;
+    JSErrorCallback localeGetErrorMessage;
+};
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_SetLocaleCallbacks(JSContext *cx, JSLocaleCallbacks *callbacks);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSLocaleCallbacks *
+JS_GetLocaleCallbacks(JSContext *cx);
+# 3517 "jsapi.h"
+extern __attribute__((visibility ("default"))) void
+JS_ReportError(JSContext *cx, const char *format, ...);
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_ReportErrorNumber(JSContext *cx, JSErrorCallback errorCallback,
+                     void *userRef, const uintN errorNumber, ...);
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_ReportErrorNumberUC(JSContext *cx, JSErrorCallback errorCallback,
+                     void *userRef, const uintN errorNumber, ...);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ReportWarning(JSContext *cx, const char *format, ...);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ReportErrorFlagsAndNumber(JSContext *cx, uintN flags,
+                             JSErrorCallback errorCallback, void *userRef,
+                             const uintN errorNumber, ...);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ReportErrorFlagsAndNumberUC(JSContext *cx, uintN flags,
+                               JSErrorCallback errorCallback, void *userRef,
+                               const uintN errorNumber, ...);
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_ReportOutOfMemory(JSContext *cx);
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_ReportAllocationOverflow(JSContext *cx);
+
+struct JSErrorReport {
+    const char *filename;
+    uintN lineno;
+    const char *linebuf;
+    const char *tokenptr;
+    const jschar *uclinebuf;
+    const jschar *uctokenptr;
+    uintN flags;
+    uintN errorNumber;
+    const jschar *ucmessage;
+    const jschar **messageArgs;
+};
+# 3608 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSErrorReporter
+JS_SetErrorReporter(JSContext *cx, JSErrorReporter er);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewDateObject(JSContext *cx, int year, int mon, int mday, int hour, int min, int sec);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewDateObjectMsec(JSContext *cx, jsdouble msec);
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ObjectIsDate(JSContext *cx, JSObject *obj);
+# 3641 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewRegExpObject(JSContext *cx, JSObject *obj, char *bytes, size_t length, uintN flags);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewUCRegExpObject(JSContext *cx, JSObject *obj, jschar *chars, size_t length, uintN flags);
+
+extern __attribute__((visibility ("default"))) void
+JS_SetRegExpInput(JSContext *cx, JSObject *obj, JSString *input, JSBool multiline);
+
+extern __attribute__((visibility ("default"))) void
+JS_ClearRegExpStatics(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ExecuteRegExp(JSContext *cx, JSObject *obj, JSObject *reobj, jschar *chars, size_t length,
+                 size_t *indexp, JSBool test, jsval *rval);
+
+
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewRegExpObjectNoStatics(JSContext *cx, char *bytes, size_t length, uintN flags);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewUCRegExpObjectNoStatics(JSContext *cx, jschar *chars, size_t length, uintN flags);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ExecuteRegExpNoStatics(JSContext *cx, JSObject *reobj, jschar *chars, size_t length,
+                          size_t *indexp, JSBool test, jsval *rval);
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsExceptionPending(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPendingException(JSContext *cx, jsval *vp);
+
+extern __attribute__((visibility ("default"))) void
+JS_SetPendingException(JSContext *cx, jsval v);
+
+extern __attribute__((visibility ("default"))) void
+JS_ClearPendingException(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ReportPendingException(JSContext *cx);
+# 3697 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSExceptionState *
+JS_SaveExceptionState(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+JS_RestoreExceptionState(JSContext *cx, JSExceptionState *state);
+
+extern __attribute__((visibility ("default"))) void
+JS_DropExceptionState(JSContext *cx, JSExceptionState *state);
+# 3713 "jsapi.h"
+extern __attribute__((visibility ("default"))) JSErrorReport *
+JS_ErrorFromException(JSContext *cx, jsval v);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ThrowReportedError(JSContext *cx, const char *message,
+                      JSErrorReport *reportp);
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ThrowStopIteration(JSContext *cx);
+# 3739 "jsapi.h"
+extern __attribute__((visibility ("default"))) jsword
+JS_GetContextThread(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) jsword
+JS_SetContextThread(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) jsword
+JS_ClearContextThread(JSContext *cx);
+# 3757 "jsapi.h"
+static __attribute__((always_inline)) inline JSBool
+JS_IsConstructing(JSContext *cx, const jsval *vp)
+{
+    jsval_layout l;
+# 3772 "jsapi.h"
+    l.asBits = (vp[1]);
+    return JSVAL_IS_MAGIC_IMPL(l);
+}
+# 3797 "jsapi.h"
+static __attribute__((always_inline)) inline JSBool
+JS_IsConstructing_PossiblyWithGivenThisObject(JSContext *cx, const jsval *vp,
+                                              JSObject **maybeThis)
+{
+    jsval_layout l;
+    JSBool isCtor;
+# 3814 "jsapi.h"
+    l.asBits = (vp[1]);
+    isCtor = JSVAL_IS_MAGIC_IMPL(l);
+    if (isCtor)
+        *maybeThis = MAGIC_JSVAL_TO_OBJECT_OR_NULL_IMPL(l);
+    return isCtor;
+}
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_NewObjectForConstructor(JSContext *cx, const jsval *vp);
+# 3840 "jsapi.h"
+}
+# 53 "jsxml.cpp" 2
+# 1 "jsarray.h" 1
+# 45 "jsarray.h"
+# 1 "jsprvtd.h" 1
+# 58 "jsprvtd.h"
+# 1 "jsstaticcheck.h" 1
+# 59 "jsprvtd.h" 2
+
+
+extern "C" {
+# 70 "jsprvtd.h"
+static const uintN JS_GCTHING_ALIGN = 8;
+static const uintN JS_GCTHING_ZEROBITS = 3;
+
+
+typedef uint8 jsbytecode;
+typedef uint8 jssrcnote;
+typedef uint32 jsatomid;
+
+
+typedef struct JSArgumentFormatMap JSArgumentFormatMap;
+typedef struct JSCodeGenerator JSCodeGenerator;
+typedef struct JSGCThing JSGCThing;
+typedef struct JSGenerator JSGenerator;
+typedef struct JSNativeEnumerator JSNativeEnumerator;
+typedef struct JSFunctionBox JSFunctionBox;
+typedef struct JSObjectBox JSObjectBox;
+typedef struct JSParseNode JSParseNode;
+typedef struct JSProperty JSProperty;
+typedef struct JSScript JSScript;
+typedef struct JSSharpObjectMap JSSharpObjectMap;
+typedef struct JSThread JSThread;
+typedef struct JSThreadData JSThreadData;
+typedef struct JSTreeContext JSTreeContext;
+typedef struct JSTryNote JSTryNote;
+
+
+typedef struct JSLinearString JSLinearString;
+typedef struct JSAtom JSAtom;
+typedef struct JSAtomList JSAtomList;
+typedef struct JSAtomListElement JSAtomListElement;
+typedef struct JSAtomMap JSAtomMap;
+typedef struct JSAtomState JSAtomState;
+typedef struct JSCodeSpec JSCodeSpec;
+typedef struct JSPrinter JSPrinter;
+typedef struct JSRegExpStatics JSRegExpStatics;
+typedef struct JSStackHeader JSStackHeader;
+typedef struct JSSubString JSSubString;
+typedef struct JSNativeTraceInfo JSNativeTraceInfo;
+typedef struct JSSpecializedNative JSSpecializedNative;
+typedef struct JSXML JSXML;
+typedef struct JSXMLArray JSXMLArray;
+typedef struct JSXMLArrayCursor JSXMLArrayCursor;
+# 121 "jsprvtd.h"
+extern "C++" {
+
+namespace js {
+
+struct ArgumentsData;
+
+class RegExp;
+class RegExpStatics;
+class AutoStringRooter;
+class ExecuteArgsGuard;
+class InvokeFrameGuard;
+class InvokeArgsGuard;
+class InvokeSessionGuard;
+class TraceRecorder;
+struct TraceMonitor;
+class StackSpace;
+class StackSegment;
+class FrameRegsIter;
+class StringBuffer;
+
+struct Compiler;
+struct Parser;
+class TokenStream;
+struct Token;
+struct TokenPos;
+struct TokenPtr;
+
+class ContextAllocPolicy;
+class SystemAllocPolicy;
+
+template <class T,
+          size_t MinInlineCapacity = 0,
+          class AllocPolicy = ContextAllocPolicy>
+class Vector;
+
+template <class>
+struct DefaultHasher;
+
+template <class Key,
+          class Value,
+          class HashPolicy = DefaultHasher<Key>,
+          class AllocPolicy = ContextAllocPolicy>
+class HashMap;
+
+template <class T,
+          class HashPolicy = DefaultHasher<T>,
+          class AllocPolicy = ContextAllocPolicy>
+class HashSet;
+
+class PropertyCache;
+struct PropertyCacheEntry;
+
+struct Shape;
+struct EmptyShape;
+
+}
+
+}
+
+
+
+typedef enum JSTrapStatus {
+    JSTRAP_ERROR,
+    JSTRAP_CONTINUE,
+    JSTRAP_RETURN,
+    JSTRAP_THROW,
+    JSTRAP_LIMIT
+} JSTrapStatus;
+
+typedef JSTrapStatus
+(* JSTrapHandler)(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval,
+                  jsval closure);
+
+typedef JSTrapStatus
+(* JSInterruptHook)(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval,
+                    void *closure);
+
+typedef JSTrapStatus
+(* JSDebuggerHandler)(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval,
+                      void *closure);
+
+typedef JSTrapStatus
+(* JSThrowHook)(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval,
+                void *closure);
+
+typedef JSBool
+(* JSWatchPointHandler)(JSContext *cx, JSObject *obj, jsid id, jsval old,
+                        jsval *newp, void *closure);
+
+
+typedef void
+(* JSNewScriptHook)(JSContext *cx,
+                    const char *filename,
+                    uintN lineno,
+                    JSScript *script,
+                    JSFunction *fun,
+                    void *callerdata);
+
+
+typedef void
+(* JSDestroyScriptHook)(JSContext *cx,
+                        JSScript *script,
+                        void *callerdata);
+
+typedef void
+(* JSSourceHandler)(const char *filename, uintN lineno, jschar *str,
+                    size_t length, void **listenerTSData, void *closure);
+# 254 "jsprvtd.h"
+typedef void *
+(* JSInterpreterHook)(JSContext *cx, JSStackFrame *fp, JSBool before,
+                      JSBool *ok, void *closure);
+
+typedef JSBool
+(* JSDebugErrorHook)(JSContext *cx, const char *message, JSErrorReport *report,
+                     void *closure);
+
+typedef struct JSDebugHooks {
+    JSInterruptHook interruptHook;
+    void *interruptHookData;
+    JSNewScriptHook newScriptHook;
+    void *newScriptHookData;
+    JSDestroyScriptHook destroyScriptHook;
+    void *destroyScriptHookData;
+    JSDebuggerHandler debuggerHandler;
+    void *debuggerHandlerData;
+    JSSourceHandler sourceHandler;
+    void *sourceHandlerData;
+    JSInterpreterHook executeHook;
+    void *executeHookData;
+    JSInterpreterHook callHook;
+    void *callHookData;
+    JSThrowHook throwHook;
+    void *throwHookData;
+    JSDebugErrorHook debugErrorHook;
+    void *debugErrorHookData;
+} JSDebugHooks;
+# 301 "jsprvtd.h"
+typedef JSBool
+(* JSLookupPropOp)(JSContext *cx, JSObject *obj, jsid id, JSObject **objp,
+                   JSProperty **propp);
+
+
+
+
+
+typedef JSBool
+(* JSAttributesOp)(JSContext *cx, JSObject *obj, jsid id, uintN *attrsp);
+
+
+
+
+
+typedef JSObject *
+(* JSObjectOp)(JSContext *cx, JSObject *obj);
+
+
+
+
+
+typedef JSObject *
+(* JSIteratorOp)(JSContext *cx, JSObject *obj, JSBool keysonly);
+# 333 "jsprvtd.h"
+extern JSBool js_CStringsAreUTF8;
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSObject *
+js_ObjectToOuterObject(JSContext *cx, JSObject *obj);
+
+}
+# 46 "jsarray.h" 2
+
+# 1 "jsatom.h" 1
+# 45 "jsatom.h"
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 46 "jsatom.h" 2
+# 1 "jsversion.h" 1
+# 47 "jsatom.h" 2
+
+
+# 1 "jshash.h" 1
+# 45 "jshash.h"
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 46 "jshash.h" 2
+
+
+
+
+extern "C" {
+
+typedef uint32 JSHashNumber;
+typedef struct JSHashEntry JSHashEntry;
+typedef struct JSHashTable JSHashTable;
+
+
+
+
+typedef JSHashNumber (* JSHashFunction)(const void *key);
+typedef intN (* JSHashComparator)(const void *v1, const void *v2);
+typedef intN (* JSHashEnumerator)(JSHashEntry *he, intN i, void *arg);
+
+
+
+
+
+
+typedef struct JSHashAllocOps {
+    void * (*allocTable)(void *pool, size_t size);
+    void (*freeTable)(void *pool, void *item, size_t size);
+    JSHashEntry * (*allocEntry)(void *pool, const void *key);
+    void (*freeEntry)(void *pool, JSHashEntry *he, uintN flag);
+} JSHashAllocOps;
+
+
+
+
+struct JSHashEntry {
+    JSHashEntry *next;
+    JSHashNumber keyHash;
+    const void *key;
+    void *value;
+};
+
+struct JSHashTable {
+    JSHashEntry **buckets;
+    uint32 nentries;
+    uint32 shift;
+    JSHashFunction keyHash;
+    JSHashComparator keyCompare;
+    JSHashComparator valueCompare;
+    JSHashAllocOps *allocOps;
+    void *allocPriv;
+
+
+
+
+
+
+};
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSHashTable *
+JS_NewHashTable(uint32 n, JSHashFunction keyHash,
+                JSHashComparator keyCompare, JSHashComparator valueCompare,
+                JSHashAllocOps *allocOps, void *allocPriv);
+
+extern __attribute__((visibility ("default"))) void
+JS_HashTableDestroy(JSHashTable *ht);
+
+
+extern __attribute__((visibility ("default"))) JSHashEntry **
+JS_HashTableRawLookup(JSHashTable *ht, JSHashNumber keyHash, const void *key);
+
+
+extern __attribute__((visibility ("default"))) JSHashEntry *
+JS_HashTableRawAdd(JSHashTable *ht, JSHashEntry **&hep, JSHashNumber keyHash,
+                   const void *key, void *value);
+
+
+extern __attribute__((visibility ("default"))) void
+JS_HashTableRawRemove(JSHashTable *ht, JSHashEntry **hep, JSHashEntry *he);
+
+
+extern __attribute__((visibility ("default"))) JSHashEntry *
+JS_HashTableAdd(JSHashTable *ht, const void *key, void *value);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_HashTableRemove(JSHashTable *ht, const void *key);
+
+extern __attribute__((visibility ("default"))) intN
+JS_HashTableEnumerateEntries(JSHashTable *ht, JSHashEnumerator f, void *arg);
+
+extern __attribute__((visibility ("default"))) void *
+JS_HashTableLookup(JSHashTable *ht, const void *key);
+
+extern __attribute__((visibility ("default"))) intN
+JS_HashTableDump(JSHashTable *ht, JSHashEnumerator dump, FILE *fp);
+
+
+extern __attribute__((visibility ("default"))) JSHashNumber
+JS_HashString(const void *key);
+
+
+extern __attribute__((visibility ("default"))) intN
+JS_CompareValues(const void *v1, const void *v2);
+
+}
+# 50 "jsatom.h" 2
+# 1 "jshashtable.h" 1
+# 46 "jshashtable.h"
+# 1 "jstl.h" 1
+# 46 "jstl.h"
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/new" 1 3
+# 37 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/new" 3
+       
+# 38 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/new" 3
+
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/powerpc64-unknown-linux-gnu/bits/c++config.h" 1 3
+# 186 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/powerpc64-unknown-linux-gnu/bits/c++config.h" 3
+namespace std
+{
+  typedef long unsigned int size_t;
+  typedef long int ptrdiff_t;
+
+
+
+
+}
+# 350 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/powerpc64-unknown-linux-gnu/bits/c++config.h" 3
+namespace std
+{
+  inline namespace __gnu_cxx_ldbl128 { }
+}
+# 430 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/powerpc64-unknown-linux-gnu/bits/c++config.h" 3
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/powerpc64-unknown-linux-gnu/bits/os_defines.h" 1 3
+# 431 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/powerpc64-unknown-linux-gnu/bits/c++config.h" 2 3
+
+
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/powerpc64-unknown-linux-gnu/bits/cpu_defines.h" 1 3
+# 434 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/powerpc64-unknown-linux-gnu/bits/c++config.h" 2 3
+# 40 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/new" 2 3
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/exception" 1 3
+# 33 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/exception" 3
+       
+# 34 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/exception" 3
+
+#pragma GCC visibility push(default)
+
+
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/bits/atomic_lockfree_defines.h" 1 3
+# 33 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/bits/atomic_lockfree_defines.h" 3
+       
+# 34 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/bits/atomic_lockfree_defines.h" 3
+# 39 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/exception" 2 3
+
+extern "C++" {
+
+namespace std
+{
+# 60 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/exception" 3
+  class exception
+  {
+  public:
+    exception() throw() { }
+    virtual ~exception() throw();
+
+
+
+    virtual const char* what() const throw();
+  };
+
+
+
+  class bad_exception : public exception
+  {
+  public:
+    bad_exception() throw() { }
+
+
+
+    virtual ~bad_exception() throw();
+
+
+    virtual const char* what() const throw();
+  };
+
+
+  typedef void (*terminate_handler) ();
+
+
+  typedef void (*unexpected_handler) ();
+
+
+  terminate_handler set_terminate(terminate_handler) throw();
+# 102 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/exception" 3
+  void terminate() throw() __attribute__ ((__noreturn__));
+
+
+  unexpected_handler set_unexpected(unexpected_handler) throw();
+# 114 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/exception" 3
+  void unexpected() __attribute__ ((__noreturn__));
+# 127 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/exception" 3
+  bool uncaught_exception() throw() __attribute__ ((__pure__));
+
+
+}
+
+namespace __gnu_cxx
+{
+
+# 152 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/exception" 3
+  void __verbose_terminate_handler();
+
+
+}
+
+}
+
+#pragma GCC visibility pop
+# 41 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/new" 2 3
+
+#pragma GCC visibility push(default)
+
+extern "C++" {
+
+namespace std
+{
+
+
+
+
+
+
+  class bad_alloc : public exception
+  {
+  public:
+    bad_alloc() throw() { }
+
+
+
+    virtual ~bad_alloc() throw();
+
+
+    virtual const char* what() const throw();
+  };
+# 85 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/new" 3
+  class bad_array_length : public bad_alloc
+  {
+  public:
+    bad_array_length() throw() { };
+
+
+
+    virtual ~bad_array_length() throw();
+
+
+    virtual const char* what() const throw();
+  };
+
+
+  struct nothrow_t { };
+
+  extern const nothrow_t nothrow;
+
+
+
+  typedef void (*new_handler)();
+
+
+
+  new_handler set_new_handler(new_handler) throw();
+
+
+
+
+
+}
+# 128 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/g++-v4/new" 3
+void* operator new(std::size_t) throw(std::bad_alloc)
+  __attribute__((__externally_visible__));
+void* operator new[](std::size_t) throw(std::bad_alloc)
+  __attribute__((__externally_visible__));
+void operator delete(void*) throw()
+  __attribute__((__externally_visible__));
+void operator delete[](void*) throw()
+  __attribute__((__externally_visible__));
+void* operator new(std::size_t, const std::nothrow_t&) throw()
+  __attribute__((__externally_visible__));
+void* operator new[](std::size_t, const std::nothrow_t&) throw()
+  __attribute__((__externally_visible__));
+void operator delete(void*, const std::nothrow_t&) throw()
+  __attribute__((__externally_visible__));
+void operator delete[](void*, const std::nothrow_t&) throw()
+  __attribute__((__externally_visible__));
+
+
+inline void* operator new(std::size_t, void* __p) throw()
+{ return __p; }
+inline void* operator new[](std::size_t, void* __p) throw()
+{ return __p; }
+
+
+inline void operator delete (void*, void*) throw() { }
+inline void operator delete[](void*, void*) throw() { }
+
+}
+
+#pragma GCC visibility pop
+# 47 "jstl.h" 2
+# 56 "jstl.h"
+namespace js {
+
+
+namespace tl {
+
+
+template <size_t i, size_t j> struct Min {
+    static const size_t result = i < j ? i : j;
+};
+template <size_t i, size_t j> struct Max {
+    static const size_t result = i > j ? i : j;
+};
+template <size_t i, size_t min, size_t max> struct Clamp {
+    static const size_t result = i < min ? min : (i > max ? max : i);
+};
+
+
+template <size_t x, size_t y> struct Pow {
+    static const size_t result = x * Pow<x, y - 1>::result;
+};
+template <size_t x> struct Pow<x,0> {
+    static const size_t result = 1;
+};
+
+
+template <size_t i> struct FloorLog2 {
+    static const size_t result = 1 + FloorLog2<i / 2>::result;
+};
+template <> struct FloorLog2<0> { };
+template <> struct FloorLog2<1> { static const size_t result = 0; };
+
+
+template <size_t i> struct CeilingLog2 {
+    static const size_t result = FloorLog2<2 * i - 1>::result;
+};
+
+
+template <size_t i> struct RoundUpPow2 {
+    static const size_t result = 1u << CeilingLog2<i>::result;
+};
+template <> struct RoundUpPow2<0> {
+    static const size_t result = 1;
+};
+
+
+template <class T> struct BitSize {
+    static const size_t result = sizeof(T) * 8;
+};
+
+
+template <bool> struct StaticAssert {};
+template <> struct StaticAssert<true> { typedef int result; };
+
+
+template <class T, class U> struct IsSameType {
+    static const bool result = false;
+};
+template <class T> struct IsSameType<T,T> {
+    static const bool result = true;
+};
+
+
+
+
+
+template <size_t N> struct NBitMask {
+    typedef typename StaticAssert<N < BitSize<size_t>::result>::result _;
+    static const size_t result = (size_t(1) << N) - 1;
+};
+template <> struct NBitMask<BitSize<size_t>::result> {
+    static const size_t result = size_t(-1);
+};
+
+
+
+
+
+template <size_t N> struct MulOverflowMask {
+    static const size_t result =
+        ~NBitMask<BitSize<size_t>::result - CeilingLog2<N>::result>::result;
+};
+template <> struct MulOverflowMask<0> { };
+template <> struct MulOverflowMask<1> { static const size_t result = 0; };
+
+
+
+
+
+
+template <class T> struct UnsafeRangeSizeMask {
+
+
+
+
+    static const size_t result = MulOverflowMask<2 * sizeof(T)>::result;
+};
+
+
+template <class T> struct StripConst { typedef T result; };
+template <class T> struct StripConst<const T> { typedef T result; };
+
+
+
+
+
+template <class T> struct IsPodType { static const bool result = false; };
+template <> struct IsPodType<char> { static const bool result = true; };
+template <> struct IsPodType<signed char> { static const bool result = true; };
+template <> struct IsPodType<unsigned char> { static const bool result = true; };
+template <> struct IsPodType<short> { static const bool result = true; };
+template <> struct IsPodType<unsigned short> { static const bool result = true; };
+template <> struct IsPodType<int> { static const bool result = true; };
+template <> struct IsPodType<unsigned int> { static const bool result = true; };
+template <> struct IsPodType<long> { static const bool result = true; };
+template <> struct IsPodType<unsigned long> { static const bool result = true; };
+template <> struct IsPodType<float> { static const bool result = true; };
+template <> struct IsPodType<double> { static const bool result = true; };
+
+
+template <class T, size_t N> inline T *ArraySize(T (&)[N]) { return N; }
+template <class T, size_t N> inline T *ArrayEnd(T (&arr)[N]) { return arr + N; }
+
+}
+
+
+class ReentrancyGuard
+{
+
+    ReentrancyGuard(const ReentrancyGuard &);
+    void operator=(const ReentrancyGuard &);
+
+
+
+
+  public:
+    template <class T>
+
+
+
+
+    ReentrancyGuard(T & )
+
+    {
+
+
+
+
+    }
+    ~ReentrancyGuard()
+    {
+
+
+
+    }
+};
+
+
+
+
+
+
+__attribute__((always_inline)) inline size_t
+RoundUpPow2(size_t x)
+{
+    size_t log2 = ((x) <= 1 ? 0 : 1 + (((void) 0), ((size_t)((8 * 8) - 1 - __builtin_clzll((x) - 1)))));
+    ((void) 0);
+    size_t result = size_t(1) << log2;
+    return result;
+}
+
+
+
+
+
+
+
+template <class T>
+__attribute__((always_inline)) inline size_t
+PointerRangeSize(T *begin, T *end)
+{
+    return (size_t(end) - size_t(begin)) / sizeof(T);
+}
+# 252 "jstl.h"
+class SystemAllocPolicy
+{
+  public:
+    void *malloc(size_t bytes) { return js_malloc(bytes); }
+    void *realloc(void *p, size_t bytes) { return js_realloc(p, bytes); }
+    void free(void *p) { js_free(p); }
+    void reportAllocOverflow() const {}
+};
+# 271 "jstl.h"
+template <size_t nbytes>
+struct AlignedStorage
+{
+    union U {
+        char bytes[nbytes];
+        uint64 _;
+    } u;
+
+    const void *addr() const { return u.bytes; }
+    void *addr() { return u.bytes; }
+};
+
+template <class T>
+struct AlignedStorage2
+{
+    union U {
+        char bytes[sizeof(T)];
+        uint64 _;
+    } u;
+
+    const T *addr() const { return (const T *)u.bytes; }
+    T *addr() { return (T *)u.bytes; }
+};
+# 306 "jstl.h"
+template <class T>
+class LazilyConstructed
+{
+    AlignedStorage2<T> storage;
+    bool constructed;
+
+    T &asT() { return *storage.addr(); }
+
+  public:
+    LazilyConstructed() { constructed = false; }
+    ~LazilyConstructed() { if (constructed) asT().~T(); }
+
+    bool empty() const { return !constructed; }
+
+    void construct() {
+        ((void) 0);
+        new(storage.addr()) T();
+        constructed = true;
+    }
+
+    template <class T1>
+    void construct(const T1 &t1) {
+        ((void) 0);
+        new(storage.addr()) T(t1);
+        constructed = true;
+    }
+
+    template <class T1, class T2>
+    void construct(const T1 &t1, const T2 &t2) {
+        ((void) 0);
+        new(storage.addr()) T(t1, t2);
+        constructed = true;
+    }
+
+    template <class T1, class T2, class T3>
+    void construct(const T1 &t1, const T2 &t2, const T3 &t3) {
+        ((void) 0);
+        new(storage.addr()) T(t1, t2, t3);
+        constructed = true;
+    }
+
+    template <class T1, class T2, class T3, class T4>
+    void construct(const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4) {
+        ((void) 0);
+        new(storage.addr()) T(t1, t2, t3, t4);
+        constructed = true;
+    }
+
+    T *addr() {
+        ((void) 0);
+        return &asT();
+    }
+
+    T &ref() {
+        ((void) 0);
+        return asT();
+    }
+
+    void destroy() {
+        ref().~T();
+        constructed = false;
+    }
+};
+
+
+
+
+
+
+template <class T>
+class Conditionally {
+    LazilyConstructed<T> t;
+
+  public:
+    Conditionally(bool b) { if (b) t.construct(); }
+
+    template <class T1>
+    Conditionally(bool b, const T1 &t1) { if (b) t.construct(t1); }
+
+    template <class T1, class T2>
+    Conditionally(bool b, const T1 &t1, const T2 &t2) { if (b) t.construct(t1, t2); }
+};
+
+template <class T>
+class AlignedPtrAndFlag
+{
+    uintptr_t bits;
+
+  public:
+    AlignedPtrAndFlag(T *t, bool flag) {
+        ((void) 0);
+        bits = uintptr_t(t) | uintptr_t(flag);
+    }
+
+    T *ptr() const {
+        return (T *)(bits & ~uintptr_t(1));
+    }
+
+    bool flag() const {
+        return (bits & 1) != 0;
+    }
+
+    void setPtr(T *t) {
+        ((void) 0);
+        bits = uintptr_t(t) | uintptr_t(flag());
+    }
+
+    void setFlag() {
+        bits |= 1;
+    }
+
+    void unsetFlag() {
+        bits &= ~uintptr_t(1);
+    }
+
+    void set(T *t, bool flag) {
+        ((void) 0);
+        bits = uintptr_t(t) | flag;
+    }
+};
+
+template <class T>
+static inline void
+Reverse(T *beg, T *end)
+{
+    while (beg != end) {
+        if (--end == beg)
+            return;
+        T tmp = *beg;
+        *beg = *end;
+        *end = tmp;
+        ++beg;
+    }
+}
+
+template <class T>
+static inline T *
+Find(T *beg, T *end, const T &v)
+{
+    for (T *p = beg; p != end; ++p) {
+        if (*p == v)
+            return p;
+    }
+    return end;
+}
+
+template <class Container>
+static inline typename Container::ElementType *
+Find(Container &c, const typename Container::ElementType &v)
+{
+    return Find(c.begin(), c.end(), v);
+}
+
+template <typename InputIterT, typename CallableT>
+void
+ForEach(InputIterT begin, InputIterT end, CallableT f)
+{
+    for (; begin != end; ++begin)
+        f(*begin);
+}
+
+template <class T>
+static inline T
+Min(T t1, T t2)
+{
+    return t1 < t2 ? t1 : t2;
+}
+
+template <class T>
+static inline T
+Max(T t1, T t2)
+{
+    return t1 > t2 ? t1 : t2;
+}
+
+
+template <class T>
+static T&
+InitConst(const T &t)
+{
+    return const_cast<T &>(t);
+}
+
+}
+# 47 "jshashtable.h" 2
+
+namespace js {
+
+
+typedef uint32 HashNumber;
+
+namespace detail {
+
+
+template <class T, class HashPolicy, class AllocPolicy>
+class HashTable : AllocPolicy
+{
+    typedef typename tl::StripConst<T>::result NonConstT;
+    typedef typename HashPolicy::KeyType Key;
+    typedef typename HashPolicy::Lookup Lookup;
+
+
+
+
+
+
+    static void assignT(NonConstT &dst, const T &src) { dst = src; }
+
+  public:
+    class Entry {
+        HashNumber keyHash;
+
+      public:
+        Entry() : keyHash(0), t() {}
+        void operator=(const Entry &rhs) { keyHash = rhs.keyHash; assignT(t, rhs.t); }
+
+        NonConstT t;
+
+        bool isFree() const { return keyHash == sFreeKey; }
+        void setFree() { keyHash = sFreeKey; assignT(t, T()); }
+        bool isRemoved() const { return keyHash == sRemovedKey; }
+        void setRemoved() { keyHash = sRemovedKey; assignT(t, T()); }
+        bool isLive() const { return isLiveHash(keyHash); }
+        void setLive(HashNumber hn) { ((void) 0); keyHash = hn; }
+
+        void setCollision() { ((void) 0); keyHash |= sCollisionBit; }
+        void setCollision(HashNumber collisionBit) {
+            ((void) 0); keyHash |= collisionBit;
+        }
+        void unsetCollision() { ((void) 0); keyHash &= ~sCollisionBit; }
+        bool hasCollision() const { ((void) 0); return keyHash & sCollisionBit; }
+        bool matchHash(HashNumber hn) { return (keyHash & ~sCollisionBit) == hn; }
+        HashNumber getKeyHash() const { ((void) 0); return keyHash; }
+    };
+
+
+
+
+
+
+
+    class Ptr
+    {
+        friend class HashTable;
+        typedef void (Ptr::* ConvertibleToBool)();
+        void nonNull() {}
+
+        Entry *entry;
+
+      protected:
+        Ptr(Entry &entry) : entry(&entry) {}
+
+      public:
+        bool found() const { return entry->isLive(); }
+        operator ConvertibleToBool() const { return found() ? &Ptr::nonNull : 0; }
+        bool operator==(const Ptr &rhs) const { ((void) 0); return entry == rhs.entry; }
+        bool operator!=(const Ptr &rhs) const { return !(*this == rhs); }
+
+        T &operator*() const { return entry->t; }
+        T *operator->() const { return &entry->t; }
+    };
+
+
+    class AddPtr : public Ptr
+    {
+        friend class HashTable;
+        HashNumber keyHash;
+
+
+
+
+
+
+        AddPtr(Entry &entry, HashNumber hn) : Ptr(entry), keyHash(hn) {}
+
+    };
+
+
+
+
+
+
+
+    class Range
+    {
+      protected:
+        friend class HashTable;
+
+        Range(Entry *c, Entry *e) : cur(c), end(e) {
+            while (cur != end && !cur->isLive())
+                ++cur;
+        }
+
+        Entry *cur, *end;
+
+      public:
+        bool empty() const {
+            return cur == end;
+        }
+
+        T &front() const {
+            ((void) 0);
+            return cur->t;
+        }
+
+        void popFront() {
+            ((void) 0);
+            while (++cur != end && !cur->isLive());
+        }
+    };
+# 182 "jshashtable.h"
+    class Enum : public Range
+    {
+        friend class HashTable;
+
+        HashTable &table;
+        bool removed;
+
+
+        Enum(const Enum &);
+        void operator=(const Enum &);
+
+      public:
+        template<class Map> explicit
+        Enum(Map &map) : Range(map.all()), table(map.impl), removed(false) {}
+# 206 "jshashtable.h"
+        void removeFront() {
+            table.remove(*this->cur);
+            removed = true;
+        }
+
+
+        ~Enum() {
+            if (removed)
+                table.checkUnderloaded();
+        }
+
+
+        void endEnumeration() {
+            if (removed) {
+                table.checkUnderloaded();
+                removed = false;
+            }
+        }
+    };
+
+  private:
+    uint32 hashShift;
+    uint32 tableCapacity;
+    uint32 entryCount;
+    uint32 gen;
+    uint32 removedCount;
+    Entry *table;
+
+    void setTableSizeLog2(unsigned sizeLog2) {
+        hashShift = sHashBits - sizeLog2;
+        tableCapacity = ((JSUint32)1 << (sizeLog2));
+    }
+# 263 "jshashtable.h"
+    static const unsigned sMinSizeLog2 = 4;
+    static const unsigned sMinSize = 1 << sMinSizeLog2;
+    static const unsigned sSizeLimit = ((JSUint32)1 << (24));
+    static const unsigned sHashBits = tl::BitSize<HashNumber>::result;
+    static const uint8 sMinAlphaFrac = 64;
+    static const uint8 sMaxAlphaFrac = 192;
+    static const uint8 sInvMaxAlpha = 171;
+    static const HashNumber sGoldenRatio = 0x9E3779B9U;
+    static const HashNumber sCollisionBit = 1;
+    static const HashNumber sFreeKey = 0;
+    static const HashNumber sRemovedKey = 1;
+
+    static bool isLiveHash(HashNumber hash)
+    {
+        return hash > sRemovedKey;
+    }
+
+    static HashNumber prepareHash(const Lookup& l)
+    {
+        HashNumber keyHash = HashPolicy::hash(l);
+
+
+        keyHash *= sGoldenRatio;
+
+
+        if (!isLiveHash(keyHash))
+            keyHash -= (sRemovedKey + 1);
+        return keyHash & ~sCollisionBit;
+    }
+
+    static Entry *createTable(AllocPolicy &alloc, uint32 capacity)
+    {
+        Entry *newTable = (Entry *)alloc.malloc(capacity * sizeof(Entry));
+        if (!newTable)
+            return __null;
+        for (Entry *e = newTable, *end = e + capacity; e != end; ++e)
+            new(e) Entry();
+        return newTable;
+    }
+
+    static void destroyTable(AllocPolicy &alloc, Entry *oldTable, uint32 capacity)
+    {
+        for (Entry *e = oldTable, *end = e + capacity; e != end; ++e)
+            e->~Entry();
+        alloc.free(oldTable);
+    }
+
+  public:
+    HashTable(AllocPolicy ap)
+      : AllocPolicy(ap),
+        entryCount(0),
+        gen(0),
+        removedCount(0),
+        table(__null)
+
+
+
+
+    {}
+
+    bool init(uint32 length)
+    {
+
+        ((void) 0);
+
+
+
+
+
+        ((void) 0);
+        uint32 capacity = (length * sInvMaxAlpha) >> 7;
+
+        if (capacity < sMinSize)
+            capacity = sMinSize;
+
+
+        uint32 roundUp = sMinSize, roundUpLog2 = sMinSizeLog2;
+        while (roundUp < capacity) {
+            roundUp <<= 1;
+            ++roundUpLog2;
+        }
+
+        capacity = roundUp;
+        if (capacity >= sSizeLimit) {
+            this->reportAllocOverflow();
+            return false;
+        }
+
+        table = createTable(*this, capacity);
+        if (!table)
+            return false;
+
+        setTableSizeLog2(roundUpLog2);
+        ;
+        return true;
+    }
+
+    bool initialized() const
+    {
+        return !!table;
+    }
+
+    ~HashTable()
+    {
+        if (table)
+            destroyTable(*this, table, tableCapacity);
+    }
+
+  private:
+    static HashNumber hash1(HashNumber hash0, uint32 shift) {
+        return hash0 >> shift;
+    }
+
+    static HashNumber hash2(HashNumber hash0, uint32 log2, uint32 shift) {
+        return ((hash0 << log2) >> shift) | 1;
+    }
+
+    bool overloaded() {
+        return entryCount + removedCount >= ((sMaxAlphaFrac * tableCapacity) >> 8);
+    }
+
+    bool underloaded() {
+        return tableCapacity > sMinSize &&
+               entryCount <= ((sMinAlphaFrac * tableCapacity) >> 8);
+    }
+
+    static bool match(Entry &e, const Lookup &l) {
+        return HashPolicy::match(HashPolicy::getKey(e.t), l);
+    }
+
+    Entry &lookup(const Lookup &l, HashNumber keyHash, unsigned collisionBit) const
+    {
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+        ;
+
+
+        HashNumber h1 = hash1(keyHash, hashShift);
+        Entry *entry = &table[h1];
+
+
+        if (entry->isFree()) {
+            ;
+            return *entry;
+        }
+
+
+        if (entry->matchHash(keyHash) && match(*entry, l)) {
+            ;
+            return *entry;
+        }
+
+
+        unsigned sizeLog2 = sHashBits - hashShift;
+        HashNumber h2 = hash2(keyHash, sizeLog2, hashShift);
+        HashNumber sizeMask = (HashNumber(1) << sizeLog2) - 1;
+
+
+        Entry *firstRemoved = __null;
+
+        while(true) {
+            if ((__builtin_expect((entry->isRemoved()), 0))) {
+                if (!firstRemoved)
+                    firstRemoved = entry;
+            } else {
+                entry->setCollision(collisionBit);
+            }
+
+            ;
+            h1 -= h2;
+            h1 &= sizeMask;
+
+            entry = &table[h1];
+            if (entry->isFree()) {
+                ;
+                return firstRemoved ? *firstRemoved : *entry;
+            }
+
+            if (entry->matchHash(keyHash) && match(*entry, l)) {
+                ;
+                return *entry;
+            }
+        }
+    }
+# 458 "jshashtable.h"
+    Entry &findFreeEntry(HashNumber keyHash)
+    {
+        ;
+        ((void) 0);
+
+
+
+
+        HashNumber h1 = hash1(keyHash, hashShift);
+        Entry *entry = &table[h1];
+
+
+        if (entry->isFree()) {
+            ;
+            return *entry;
+        }
+
+
+        unsigned sizeLog2 = sHashBits - hashShift;
+        HashNumber h2 = hash2(keyHash, sizeLog2, hashShift);
+        HashNumber sizeMask = (HashNumber(1) << sizeLog2) - 1;
+
+        while(true) {
+            ((void) 0);
+            entry->setCollision();
+
+            ;
+            h1 -= h2;
+            h1 &= sizeMask;
+
+            entry = &table[h1];
+            if (entry->isFree()) {
+                ;
+                return *entry;
+            }
+        }
+    }
+
+    bool changeTableSize(int deltaLog2)
+    {
+
+        Entry *oldTable = table;
+        uint32 oldCap = tableCapacity;
+        uint32 newLog2 = sHashBits - hashShift + deltaLog2;
+        uint32 newCapacity = ((JSUint32)1 << (newLog2));
+        if (newCapacity >= sSizeLimit) {
+            this->reportAllocOverflow();
+            return false;
+        }
+
+        Entry *newTable = createTable(*this, newCapacity);
+        if (!newTable)
+            return false;
+
+
+        setTableSizeLog2(newLog2);
+        removedCount = 0;
+        gen++;
+        table = newTable;
+
+
+        for (Entry *src = oldTable, *end = src + oldCap; src != end; ++src) {
+            if (src->isLive()) {
+                src->unsetCollision();
+                findFreeEntry(src->getKeyHash()) = *src;
+            }
+        }
+
+        destroyTable(*this, oldTable, oldCap);
+        return true;
+    }
+
+    void remove(Entry &e)
+    {
+        ;
+        if (e.hasCollision()) {
+            e.setRemoved();
+            removedCount++;
+        } else {
+            ;
+            e.setFree();
+        }
+        entryCount--;
+
+
+
+    }
+
+    void checkUnderloaded()
+    {
+        if (underloaded()) {
+            ;
+            (void) changeTableSize(-1);
+        }
+    }
+
+  public:
+    void clear()
+    {
+        for (Entry *e = table, *end = table + tableCapacity; e != end; ++e)
+            *e = Entry();
+        removedCount = 0;
+        entryCount = 0;
+
+
+
+    }
+
+    Range all() const {
+        return Range(table, table + tableCapacity);
+    }
+
+    bool empty() const {
+        return !entryCount;
+    }
+
+    uint32 count() const{
+        return entryCount;
+    }
+
+    uint32 generation() const {
+        return gen;
+    }
+
+    Ptr lookup(const Lookup &l) const {
+        ReentrancyGuard g(*this);
+        HashNumber keyHash = prepareHash(l);
+        return Ptr(lookup(l, keyHash, 0));
+    }
+
+    AddPtr lookupForAdd(const Lookup &l) const {
+        ReentrancyGuard g(*this);
+        HashNumber keyHash = prepareHash(l);
+        Entry &entry = lookup(l, keyHash, sCollisionBit);
+
+
+
+        return AddPtr(entry, keyHash);
+
+    }
+
+    bool add(AddPtr &p)
+    {
+        ReentrancyGuard g(*this);
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+
+
+
+
+
+        if (p.entry->isRemoved()) {
+            ;
+            removedCount--;
+            p.keyHash |= sCollisionBit;
+        } else {
+
+            if (overloaded()) {
+
+                int deltaLog2;
+                if (removedCount >= (tableCapacity >> 2)) {
+                    ;
+                    deltaLog2 = 0;
+                } else {
+                    ;
+                    deltaLog2 = 1;
+                }
+
+                if (!changeTableSize(deltaLog2))
+                    return false;
+
+
+                p.entry = &findFreeEntry(p.keyHash);
+            }
+        }
+
+        p.entry->setLive(p.keyHash);
+        entryCount++;
+
+
+
+        return true;
+    }
+
+
+
+
+
+
+    bool add(AddPtr &p, T** pentry)
+    {
+        if (!add(p))
+            return false;
+        *pentry = &p.entry->t;
+        return true;
+    }
+
+    bool add(AddPtr &p, const T &t)
+    {
+        if (!add(p))
+            return false;
+        p.entry->t = t;
+        return true;
+    }
+
+    bool relookupOrAdd(AddPtr& p, const Lookup &l, const T& t)
+    {
+
+
+
+        {
+            ReentrancyGuard g(*this);
+            p.entry = &lookup(l, p.keyHash, sCollisionBit);
+        }
+        return p.found() || add(p, t);
+    }
+
+    void remove(Ptr p)
+    {
+        ReentrancyGuard g(*this);
+        ((void) 0);
+        remove(*p.entry);
+        checkUnderloaded();
+    }
+
+};
+
+}
+# 717 "jshashtable.h"
+template <class Key>
+struct DefaultHasher
+{
+    typedef Key Lookup;
+    static HashNumber hash(const Lookup &l) {
+
+        return l;
+    }
+    static bool match(const Key &k, const Lookup &l) {
+
+        return k == l;
+    }
+};
+
+
+template <class T>
+struct DefaultHasher<T *>
+{
+    typedef T *Lookup;
+    static HashNumber hash(T *l) {
+
+
+
+
+        return HashNumber(reinterpret_cast<size_t>(l) >>
+                          tl::FloorLog2<sizeof(void *)>::result);
+    }
+    static bool match(T *k, T *l) {
+        return k == l;
+    }
+};
+# 765 "jshashtable.h"
+template <class Key, class Value, class HashPolicy, class AllocPolicy>
+class HashMap
+{
+  public:
+    typedef typename HashPolicy::Lookup Lookup;
+
+    class Entry
+    {
+        template <class, class, class> friend class detail::HashTable;
+        void operator=(const Entry &rhs) {
+            const_cast<Key &>(key) = rhs.key;
+            value = rhs.value;
+        }
+
+      public:
+        Entry() : key(), value() {}
+        Entry(const Key &k, const Value &v) : key(k), value(v) {}
+
+        const Key key;
+        Value value;
+    };
+
+  private:
+
+    struct MapHashPolicy : HashPolicy
+    {
+        typedef Key KeyType;
+        static const Key &getKey(Entry &e) { return e.key; }
+    };
+    typedef detail::HashTable<Entry, MapHashPolicy, AllocPolicy> Impl;
+
+    friend class Impl::Enum;
+
+
+    HashMap(const HashMap &);
+    HashMap &operator=(const HashMap &);
+
+    Impl impl;
+
+  public:
+
+
+
+
+    HashMap(AllocPolicy a = AllocPolicy()) : impl(a) {}
+    bool init(uint32 len = 0) { return impl.init(len); }
+    bool initialized() const { return impl.initialized(); }
+# 826 "jshashtable.h"
+    typedef typename Impl::Ptr Ptr;
+    Ptr lookup(const Lookup &l) const { return impl.lookup(l); }
+
+
+    void remove(Ptr p) { impl.remove(p); }
+# 867 "jshashtable.h"
+    typedef typename Impl::AddPtr AddPtr;
+    AddPtr lookupForAdd(const Lookup &l) const {
+        return impl.lookupForAdd(l);
+    }
+
+    bool add(AddPtr &p, const Key &k, const Value &v) {
+        Entry *pentry;
+        if (!impl.add(p, &pentry))
+            return false;
+        const_cast<Key &>(pentry->key) = k;
+        pentry->value = v;
+        return true;
+    }
+
+    bool add(AddPtr &p, const Key &k) {
+        Entry *pentry;
+        if (!impl.add(p, &pentry))
+            return false;
+        const_cast<Key &>(pentry->key) = k;
+        return true;
+    }
+
+    bool relookupOrAdd(AddPtr &p, const Key &k, const Value &v) {
+        return impl.relookupOrAdd(p, k, Entry(k, v));
+    }
+# 903 "jshashtable.h"
+    typedef typename Impl::Range Range;
+    Range all() const { return impl.all(); }
+    size_t count() const { return impl.count(); }
+# 920 "jshashtable.h"
+    typedef typename Impl::Enum Enum;
+
+
+    void clear() { impl.clear(); }
+
+
+    bool empty() const { return impl.empty(); }
+
+
+
+
+
+    unsigned generation() const { return impl.generation(); }
+
+
+
+    bool has(const Lookup &l) const {
+        return impl.lookup(l) != __null;
+    }
+
+    Entry *put(const Key &k, const Value &v) {
+        AddPtr p = lookupForAdd(k);
+        if (p) {
+            p->value = v;
+            return &*p;
+        }
+        return add(p, k, v) ? &*p : __null;
+    }
+
+    void remove(const Lookup &l) {
+        if (Ptr p = lookup(l))
+            remove(p);
+    }
+};
+# 971 "jshashtable.h"
+template <class T, class HashPolicy, class AllocPolicy>
+class HashSet
+{
+    typedef typename HashPolicy::Lookup Lookup;
+
+
+    struct SetOps : HashPolicy {
+        typedef T KeyType;
+        static const KeyType &getKey(const T &t) { return t; }
+    };
+    typedef detail::HashTable<const T, SetOps, AllocPolicy> Impl;
+
+    friend class Impl::Enum;
+
+
+    HashSet(const HashSet &);
+    HashSet &operator=(const HashSet &);
+
+    Impl impl;
+
+  public:
+
+
+
+
+    HashSet(AllocPolicy a = AllocPolicy()) : impl(a) {}
+    bool init(uint32 len = 0) { return impl.init(len); }
+    bool initialized() const { return impl.initialized(); }
+# 1011 "jshashtable.h"
+    typedef typename Impl::Ptr Ptr;
+    Ptr lookup(const Lookup &l) const { return impl.lookup(l); }
+
+
+    void remove(Ptr p) { impl.remove(p); }
+# 1051 "jshashtable.h"
+    typedef typename Impl::AddPtr AddPtr;
+    AddPtr lookupForAdd(const Lookup &l) const {
+        return impl.lookupForAdd(l);
+    }
+
+    bool add(AddPtr &p, const T &t) {
+        return impl.add(p, t);
+    }
+
+    bool relookupOrAdd(AddPtr &p, const Lookup &l, const T &t) {
+        return impl.relookupOrAdd(p, l, t);
+    }
+# 1074 "jshashtable.h"
+    typedef typename Impl::Range Range;
+    Range all() const { return impl.all(); }
+    size_t count() const { return impl.count(); }
+# 1091 "jshashtable.h"
+    typedef typename Impl::Enum Enum;
+
+
+    void clear() { impl.clear(); }
+
+
+    bool empty() const { return impl.empty(); }
+
+
+
+
+
+    unsigned generation() const { return impl.generation(); }
+
+
+
+    bool has(const Lookup &l) const {
+        return impl.lookup(l) != __null;
+    }
+
+    const T *put(const T &t) {
+        AddPtr p = lookupForAdd(t);
+        return p ? &*p : (add(p, t) ? &*p : __null);
+    }
+
+    void remove(const Lookup &l) {
+        if (Ptr p = lookup(l))
+            remove(p);
+    }
+};
+
+}
+# 51 "jsatom.h" 2
+
+# 1 "jsstr.h" 1
+# 51 "jsstr.h"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/ctype.h" 1 3 4
+# 28 "/usr/powerpc64-unknown-linux-gnu/usr/include/ctype.h" 3 4
+extern "C" {
+# 46 "/usr/powerpc64-unknown-linux-gnu/usr/include/ctype.h" 3 4
+enum
+{
+  _ISupper = (1 << (0)),
+  _ISlower = (1 << (1)),
+  _ISalpha = (1 << (2)),
+  _ISdigit = (1 << (3)),
+  _ISxdigit = (1 << (4)),
+  _ISspace = (1 << (5)),
+  _ISprint = (1 << (6)),
+  _ISgraph = (1 << (7)),
+  _ISblank = (1 << (8)),
+  _IScntrl = (1 << (9)),
+  _ISpunct = (1 << (10)),
+  _ISalnum = (1 << (11))
+};
+# 79 "/usr/powerpc64-unknown-linux-gnu/usr/include/ctype.h" 3 4
+extern const unsigned short int **__ctype_b_loc (void)
+     throw () __attribute__ ((__const__));
+extern const __int32_t **__ctype_tolower_loc (void)
+     throw () __attribute__ ((__const__));
+extern const __int32_t **__ctype_toupper_loc (void)
+     throw () __attribute__ ((__const__));
+# 104 "/usr/powerpc64-unknown-linux-gnu/usr/include/ctype.h" 3 4
+
+
+
+
+
+
+extern int isalnum (int) throw ();
+extern int isalpha (int) throw ();
+extern int iscntrl (int) throw ();
+extern int isdigit (int) throw ();
+extern int islower (int) throw ();
+extern int isgraph (int) throw ();
+extern int isprint (int) throw ();
+extern int ispunct (int) throw ();
+extern int isspace (int) throw ();
+extern int isupper (int) throw ();
+extern int isxdigit (int) throw ();
+
+
+
+extern int tolower (int __c) throw ();
+
+
+extern int toupper (int __c) throw ();
+
+
+
+
+
+
+
+
+extern int isblank (int) throw ();
+
+
+
+
+
+
+extern int isctype (int __c, int __mask) throw ();
+
+
+
+
+
+
+extern int isascii (int __c) throw ();
+
+
+
+extern int toascii (int __c) throw ();
+
+
+
+extern int _toupper (int) throw ();
+extern int _tolower (int) throw ();
+# 271 "/usr/powerpc64-unknown-linux-gnu/usr/include/ctype.h" 3 4
+extern int isalnum_l (int, __locale_t) throw ();
+extern int isalpha_l (int, __locale_t) throw ();
+extern int iscntrl_l (int, __locale_t) throw ();
+extern int isdigit_l (int, __locale_t) throw ();
+extern int islower_l (int, __locale_t) throw ();
+extern int isgraph_l (int, __locale_t) throw ();
+extern int isprint_l (int, __locale_t) throw ();
+extern int ispunct_l (int, __locale_t) throw ();
+extern int isspace_l (int, __locale_t) throw ();
+extern int isupper_l (int, __locale_t) throw ();
+extern int isxdigit_l (int, __locale_t) throw ();
+
+extern int isblank_l (int, __locale_t) throw ();
+
+
+
+extern int __tolower_l (int __c, __locale_t __l) throw ();
+extern int tolower_l (int __c, __locale_t __l) throw ();
+
+
+extern int __toupper_l (int __c, __locale_t __l) throw ();
+extern int toupper_l (int __c, __locale_t __l) throw ();
+# 347 "/usr/powerpc64-unknown-linux-gnu/usr/include/ctype.h" 3 4
+}
+# 52 "jsstr.h" 2
+
+
+
+# 1 "jslock.h" 1
+# 47 "jslock.h"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h" 1
+# 14 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h" 1
+# 26 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prcpucfg.h" 1
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h" 2
+
+
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 30 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h" 2
+# 206 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+extern "C" {
+# 246 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef unsigned char PRUint8;
+# 260 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef signed char PRInt8;
+# 285 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef unsigned short PRUint16;
+typedef short PRInt16;
+# 310 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef unsigned int PRUint32;
+typedef int PRInt32;
+# 365 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef long PRInt64;
+typedef unsigned long PRUint64;
+# 410 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef int PRIntn;
+typedef unsigned int PRUintn;
+# 421 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef double PRFloat64;
+
+
+
+
+
+
+typedef size_t PRSize;
+
+
+
+
+
+
+
+typedef PRInt32 PROffset32;
+typedef PRInt64 PROffset64;
+
+
+
+
+
+
+
+typedef ptrdiff_t PRPtrdiff;
+# 456 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef unsigned long PRUptrdiff;
+# 467 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef PRIntn PRBool;
+# 477 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef PRUint8 PRPackedBool;
+
+
+
+
+
+typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
+
+
+
+
+
+
+typedef PRUint16 PRUnichar;
+# 509 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+typedef long PRWord;
+typedef unsigned long PRUword;
+# 574 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/obsolete/protypes.h" 1
+# 575 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h" 2
+# 587 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prtypes.h"
+}
+# 15 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h" 2
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prlock.h" 1
+# 21 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prlock.h"
+extern "C" {
+# 34 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prlock.h"
+typedef struct PRLock PRLock;
+# 51 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prlock.h"
+extern __attribute__((visibility("default"))) PRLock* PR_NewLock(void);
+# 62 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prlock.h"
+extern __attribute__((visibility("default"))) void PR_DestroyLock(PRLock *lock);
+# 73 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prlock.h"
+extern __attribute__((visibility("default"))) void PR_Lock(PRLock *lock);
+# 85 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prlock.h"
+extern __attribute__((visibility("default"))) PRStatus PR_Unlock(PRLock *lock);
+# 105 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prlock.h"
+extern __attribute__((visibility("default"))) void PR_AssertCurrentThreadOwnsLock(PRLock *lock);
+
+}
+# 16 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h" 2
+
+extern "C" {
+# 28 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+extern __attribute__((visibility("default"))) PRInt32 PR_AtomicIncrement(PRInt32 *val);
+# 39 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+extern __attribute__((visibility("default"))) PRInt32 PR_AtomicDecrement(PRInt32 *val);
+# 51 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+extern __attribute__((visibility("default"))) PRInt32 PR_AtomicSet(PRInt32 *val, PRInt32 newval);
+# 63 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+extern __attribute__((visibility("default"))) PRInt32 PR_AtomicAdd(PRInt32 *ptr, PRInt32 val);
+# 137 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+typedef struct PRStackElemStr PRStackElem;
+
+struct PRStackElemStr {
+    PRStackElem *prstk_elem_next;
+
+};
+
+typedef struct PRStackStr PRStack;
+# 155 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+extern __attribute__((visibility("default"))) PRStack * PR_CreateStack(const char *stack_name);
+# 167 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+extern __attribute__((visibility("default"))) void PR_StackPush(PRStack *stack, PRStackElem *stack_elem);
+# 180 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+extern __attribute__((visibility("default"))) PRStackElem * PR_StackPop(PRStack *stack);
+# 194 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/pratom.h"
+extern __attribute__((visibility("default"))) PRStatus PR_DestroyStack(PRStack *stack);
+
+}
+# 48 "jslock.h" 2
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prlock.h" 1
+# 49 "jslock.h" 2
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prcvar.h" 1
+# 10 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prcvar.h"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prinrval.h" 1
+# 23 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prinrval.h"
+extern "C" {
+
+
+
+
+
+typedef PRUint32 PRIntervalTime;
+# 79 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prinrval.h"
+extern __attribute__((visibility("default"))) PRIntervalTime PR_IntervalNow(void);
+# 97 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prinrval.h"
+extern __attribute__((visibility("default"))) PRUint32 PR_TicksPerSecond(void);
+# 116 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prinrval.h"
+extern __attribute__((visibility("default"))) PRIntervalTime PR_SecondsToInterval(PRUint32 seconds);
+extern __attribute__((visibility("default"))) PRIntervalTime PR_MillisecondsToInterval(PRUint32 milli);
+extern __attribute__((visibility("default"))) PRIntervalTime PR_MicrosecondsToInterval(PRUint32 micro);
+# 137 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prinrval.h"
+extern __attribute__((visibility("default"))) PRUint32 PR_IntervalToSeconds(PRIntervalTime ticks);
+extern __attribute__((visibility("default"))) PRUint32 PR_IntervalToMilliseconds(PRIntervalTime ticks);
+extern __attribute__((visibility("default"))) PRUint32 PR_IntervalToMicroseconds(PRIntervalTime ticks);
+
+}
+# 11 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prcvar.h" 2
+
+extern "C" {
+
+typedef struct PRCondVar PRCondVar;
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prcvar.h"
+extern __attribute__((visibility("default"))) PRCondVar* PR_NewCondVar(PRLock *lock);
+
+
+
+
+
+
+
+extern __attribute__((visibility("default"))) void PR_DestroyCondVar(PRCondVar *cvar);
+# 65 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prcvar.h"
+extern __attribute__((visibility("default"))) PRStatus PR_WaitCondVar(PRCondVar *cvar, PRIntervalTime timeout);
+# 80 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prcvar.h"
+extern __attribute__((visibility("default"))) PRStatus PR_NotifyCondVar(PRCondVar *cvar);
+# 90 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prcvar.h"
+extern __attribute__((visibility("default"))) PRStatus PR_NotifyAllCondVar(PRCondVar *cvar);
+
+}
+# 50 "jslock.h" 2
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h" 1
+# 49 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h"
+extern "C" {
+
+typedef struct PRThread PRThread;
+typedef struct PRThreadStack PRThreadStack;
+
+typedef enum PRThreadType {
+    PR_USER_THREAD,
+    PR_SYSTEM_THREAD
+} PRThreadType;
+
+typedef enum PRThreadScope {
+    PR_LOCAL_THREAD,
+    PR_GLOBAL_THREAD,
+    PR_GLOBAL_BOUND_THREAD
+} PRThreadScope;
+
+typedef enum PRThreadState {
+    PR_JOINABLE_THREAD,
+    PR_UNJOINABLE_THREAD
+} PRThreadState;
+
+typedef enum PRThreadPriority
+{
+    PR_PRIORITY_FIRST = 0,
+    PR_PRIORITY_LOW = 0,
+    PR_PRIORITY_NORMAL = 1,
+    PR_PRIORITY_HIGH = 2,
+    PR_PRIORITY_URGENT = 3,
+    PR_PRIORITY_LAST = 3
+} PRThreadPriority;
+# 105 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h"
+extern __attribute__((visibility("default"))) PRThread* PR_CreateThread(PRThreadType type,
+                     void ( *start)(void *arg),
+                     void *arg,
+                     PRThreadPriority priority,
+                     PRThreadScope scope,
+                     PRThreadState state,
+                     PRUint32 stackSize);
+# 126 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h"
+extern __attribute__((visibility("default"))) PRStatus PR_JoinThread(PRThread *thread);
+
+
+
+
+
+extern __attribute__((visibility("default"))) PRThread* PR_GetCurrentThread(void);
+
+
+
+
+
+
+
+extern __attribute__((visibility("default"))) PRThreadPriority PR_GetThreadPriority(const PRThread *thread);
+# 152 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h"
+extern __attribute__((visibility("default"))) void PR_SetThreadPriority(PRThread *thread, PRThreadPriority priority);
+
+
+
+
+
+extern __attribute__((visibility("default"))) PRStatus PR_SetCurrentThreadName(const char *name);
+
+
+
+
+extern __attribute__((visibility("default"))) const char * PR_GetThreadName(const PRThread *thread);
+# 189 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h"
+typedef void ( *PRThreadPrivateDTOR)(void *priv);
+
+extern __attribute__((visibility("default"))) PRStatus PR_NewThreadPrivateIndex(
+    PRUintn *newIndex, PRThreadPrivateDTOR destructor);
+# 205 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h"
+extern __attribute__((visibility("default"))) PRStatus PR_SetThreadPrivate(PRUintn tpdIndex, void *priv);
+# 216 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h"
+extern __attribute__((visibility("default"))) void* PR_GetThreadPrivate(PRUintn tpdIndex);
+# 228 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h"
+extern __attribute__((visibility("default"))) PRStatus PR_Interrupt(PRThread *thread);
+
+
+
+
+
+extern __attribute__((visibility("default"))) void PR_ClearInterrupt(void);
+
+
+
+
+extern __attribute__((visibility("default"))) void PR_BlockInterrupt(void);
+
+
+
+
+extern __attribute__((visibility("default"))) void PR_UnblockInterrupt(void);
+# 253 "/usr/powerpc64-unknown-linux-gnu/usr/include/nspr/prthread.h"
+extern __attribute__((visibility("default"))) PRStatus PR_Sleep(PRIntervalTime ticks);
+
+
+
+
+extern __attribute__((visibility("default"))) PRThreadScope PR_GetThreadScope(const PRThread *thread);
+
+
+
+
+extern __attribute__((visibility("default"))) PRThreadType PR_GetThreadType(const PRThread *thread);
+
+
+
+
+extern __attribute__((visibility("default"))) PRThreadState PR_GetThreadState(const PRThread *thread);
+
+}
+# 51 "jslock.h" 2
+
+
+extern "C" {
+# 79 "jslock.h"
+typedef struct JSFatLock JSFatLock;
+
+typedef struct JSThinLock {
+    jsword owner;
+    JSFatLock *fat;
+} JSThinLock;
+
+
+
+
+typedef PRLock JSLock;
+# 119 "jslock.h"
+extern void js_Lock(JSContext *cx, JSThinLock *tl);
+extern void js_Unlock(JSContext *cx, JSThinLock *tl);
+extern void js_LockRuntime(JSRuntime *rt);
+extern void js_UnlockRuntime(JSRuntime *rt);
+extern int js_SetupLocks(int,int);
+extern void js_CleanupLocks();
+extern void js_InitLock(JSThinLock *);
+extern void js_FinishLock(JSThinLock *);
+# 192 "jslock.h"
+extern JSBool
+js_CompareAndSwap(volatile jsword *w, jsword ov, jsword nv);
+
+
+extern void
+js_AtomicSetMask(volatile jsword *w, jsword mask);
+
+
+
+
+
+extern void
+js_AtomicClearMask(volatile jsword *w, jsword mask);
+# 222 "jslock.h"
+}
+
+
+namespace js {
+
+class AutoLock {
+  private:
+    JSLock *lock;
+
+  public:
+    AutoLock(JSLock *lock) : lock(lock) { PR_Lock(lock); }
+    ~AutoLock() { PR_Unlock(lock); }
+};
+
+}
+# 56 "jsstr.h" 2
+# 1 "jsobj.h" 1
+# 64 "jsobj.h"
+# 1 "jsvalue.h" 1
+# 100 "jsvalue.h"
+static inline int
+JSDOUBLE_IS_NEGZERO(jsdouble d)
+{
+
+
+
+
+
+    return (d == 0 && (sizeof (d) == sizeof (float) ? __signbitf (d) : sizeof (d) == sizeof (double) ? __signbit (d) : __signbitl (d)));
+
+}
+
+static inline
+
+# 112 "jsvalue.h"
+              bool
+JSDOUBLE_IS_INT32(jsdouble d, int32_t* pi)
+{
+    if (JSDOUBLE_IS_NEGZERO(d))
+        return false;
+    return d == (*pi = int32_t(d));
+}
+# 225 "jsvalue.h"
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_SPECIFIC_INT32_IMPL(jsval_layout l, int32 i32)
+{
+    return l.asBits == (((uint64)(uint32)i32) | JSVAL_SHIFTED_TAG_INT32);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_IS_SPECIFIC_BOOLEAN(jsval_layout l, JSBool b)
+{
+    return l.asBits == (((uint64)(uint32)b) | JSVAL_SHIFTED_TAG_BOOLEAN);
+}
+
+static __attribute__((always_inline)) inline jsval_layout
+MAGIC_TO_JSVAL_IMPL(JSWhyMagic why)
+{
+    jsval_layout l;
+    l.asBits = ((uint64)(uint32)why) | JSVAL_SHIFTED_TAG_MAGIC;
+    return l;
+}
+
+static __attribute__((always_inline)) inline jsval_layout
+MAGIC_TO_JSVAL_IMPL(JSObject *obj)
+{
+    jsval_layout l;
+    l.asBits = ((uint64)obj) | JSVAL_SHIFTED_TAG_MAGIC;
+    return l;
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSVAL_SAME_TYPE_IMPL(jsval_layout lhs, jsval_layout rhs)
+{
+    uint64 lbits = lhs.asBits, rbits = rhs.asBits;
+    return (lbits <= JSVAL_TAG_MAX_DOUBLE && rbits <= JSVAL_TAG_MAX_DOUBLE) ||
+           (((lbits ^ rbits) & 0xFFFF800000000000LL) == 0);
+}
+
+static __attribute__((always_inline)) inline jsval_layout
+PRIVATE_UINT32_TO_JSVAL_IMPL(uint32 ui)
+{
+    jsval_layout l;
+    l.asBits = (uint64)ui;
+    ((void) 0);
+    return l;
+}
+
+static __attribute__((always_inline)) inline uint32
+JSVAL_TO_PRIVATE_UINT32_IMPL(jsval_layout l)
+{
+    ((void) 0);
+    return (uint32)l.asBits;
+}
+
+static __attribute__((always_inline)) inline JSValueType
+JSVAL_EXTRACT_NON_DOUBLE_TYPE_IMPL(jsval_layout l)
+{
+   uint64 type = (l.asBits >> 47) & 0xF;
+   ((void) 0);
+   return (JSValueType)type;
+}
+
+static __attribute__((always_inline)) inline JSValueTag
+JSVAL_EXTRACT_NON_DOUBLE_TAG_IMPL(jsval_layout l)
+{
+    uint64 tag = l.asBits >> 47;
+    ((void) 0);
+    return (JSValueTag)tag;
+}
+
+
+typedef int js_static_assert3[(__builtin_offsetof (jsval_layout, s.payload) == 0) ? 1 : -1];
+typedef int js_static_assert4[((JSVAL_TYPE_NONFUNOBJ & 0xF) == JSVAL_TYPE_OBJECT) ? 1 : -1];
+typedef int js_static_assert5[((JSVAL_TYPE_FUNOBJ & 0xF) == JSVAL_TYPE_OBJECT) ? 1 : -1];
+
+
+static __attribute__((always_inline)) inline jsval_layout
+BOX_NON_DOUBLE_JSVAL(JSValueType type, uint64 *slot)
+{
+
+    jsval_layout l;
+    ((void) 0);
+    uint32 isI32 = (uint32)(type < JSVAL_TYPE_MAGIC);
+    uint32 shift = isI32 * 32;
+    uint64 mask = ((uint64)-1) >> shift;
+    uint64 payload = *slot & mask;
+    ((void) 0)
+
+
+
+                              ;
+    l.asBits = payload | (((uint64)((JSValueTag)(JSVAL_TAG_MAX_DOUBLE | (type & 0xF)))) << 47);
+    return l;
+}
+
+static __attribute__((always_inline)) inline void
+UNBOX_NON_DOUBLE_JSVAL(jsval_layout l, uint64 *out)
+{
+    ((void) 0);
+    *out = (l.asBits & 0x00007FFFFFFFFFFFLL);
+}
+
+
+
+
+
+namespace js {
+
+class Value
+{
+  public:
+
+
+
+
+
+
+
+    __attribute__((always_inline)) inline
+    void setNull() {
+        data.asBits = (((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0)));
+    }
+
+    __attribute__((always_inline)) inline
+    void setUndefined() {
+        data.asBits = (((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0)));
+    }
+
+    __attribute__((always_inline)) inline
+    void setInt32(int32 i) {
+        data = INT32_TO_JSVAL_IMPL(i);
+    }
+
+    __attribute__((always_inline)) inline
+    int32 &getInt32Ref() {
+        ((void) 0);
+        return data.s.payload.i32;
+    }
+
+    __attribute__((always_inline)) inline
+    void setDouble(double d) {
+        data = DOUBLE_TO_JSVAL_IMPL(d);
+    }
+
+    __attribute__((always_inline)) inline
+    double &getDoubleRef() {
+        ((void) 0);
+        return data.asDouble;
+    }
+
+    __attribute__((always_inline)) inline
+    void setString(JSString *str) {
+        data = STRING_TO_JSVAL_IMPL(str);
+    }
+
+    __attribute__((always_inline)) inline
+    void setObject(JSObject &obj) {
+        data = OBJECT_TO_JSVAL_IMPL(&obj);
+    }
+
+    __attribute__((always_inline)) inline
+    void setBoolean(bool b) {
+        data = BOOLEAN_TO_JSVAL_IMPL(b);
+    }
+
+    __attribute__((always_inline)) inline
+    void setMagic(JSWhyMagic why) {
+        data = MAGIC_TO_JSVAL_IMPL(why);
+    }
+
+    __attribute__((always_inline)) inline
+    void setMagicWithObjectOrNullPayload(JSObject *obj) {
+        data = MAGIC_TO_JSVAL_IMPL(obj);
+    }
+
+    __attribute__((always_inline)) inline
+    JSObject *getMagicObjectOrNullPayload() const {
+        return MAGIC_JSVAL_TO_OBJECT_OR_NULL_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    void setNumber(uint32 ui) {
+        if (ui > ((jsint)0x7fffffff))
+            setDouble((double)ui);
+        else
+            setInt32((int32)ui);
+    }
+
+    __attribute__((always_inline)) inline
+    void setNumber(double d) {
+        int32_t i;
+        if (JSDOUBLE_IS_INT32(d, &i))
+            setInt32(i);
+        else
+            setDouble(d);
+    }
+
+    __attribute__((always_inline)) inline
+    void setObjectOrNull(JSObject *arg) {
+        if (arg)
+            setObject(*arg);
+        else
+            setNull();
+    }
+
+    __attribute__((always_inline)) inline
+    void setObjectOrUndefined(JSObject *arg) {
+        if (arg)
+            setObject(*arg);
+        else
+            setUndefined();
+    }
+
+    __attribute__((always_inline)) inline
+    void swap(Value &rhs) {
+        uint64 tmp = rhs.data.asBits;
+        rhs.data.asBits = data.asBits;
+        data.asBits = tmp;
+    }
+
+
+
+    __attribute__((always_inline)) inline
+    bool isUndefined() const {
+        return JSVAL_IS_UNDEFINED_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isNull() const {
+        return JSVAL_IS_NULL_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isNullOrUndefined() const {
+        return isNull() || isUndefined();
+    }
+
+    __attribute__((always_inline)) inline
+    bool isInt32() const {
+        return JSVAL_IS_INT32_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isInt32(int32 i32) const {
+        return JSVAL_IS_SPECIFIC_INT32_IMPL(data, i32);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isDouble() const {
+        return JSVAL_IS_DOUBLE_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isNumber() const {
+        return JSVAL_IS_NUMBER_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isString() const {
+        return JSVAL_IS_STRING_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isObject() const {
+        return JSVAL_IS_OBJECT_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isPrimitive() const {
+        return JSVAL_IS_PRIMITIVE_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isObjectOrNull() const {
+        return JSVAL_IS_OBJECT_OR_NULL_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isGCThing() const {
+        return JSVAL_IS_GCTHING_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isBoolean() const {
+        return JSVAL_IS_BOOLEAN_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isTrue() const {
+        return JSVAL_IS_SPECIFIC_BOOLEAN(data, true);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isFalse() const {
+        return JSVAL_IS_SPECIFIC_BOOLEAN(data, false);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isMagic() const {
+        return JSVAL_IS_MAGIC_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool isMagic(JSWhyMagic why) const {
+        ((void) 0);
+        return JSVAL_IS_MAGIC_IMPL(data);
+    }
+
+
+    __attribute__((always_inline)) inline
+    bool hasPtrPayload() const {
+        return data.asBits >= JSVAL_SHIFTED_TAG_MAGIC;
+    }
+
+
+    __attribute__((always_inline)) inline
+    bool isMarkable() const {
+        return JSVAL_IS_TRACEABLE_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    int32 gcKind() const {
+        ((void) 0);
+        return JSVAL_TRACE_KIND_IMPL(data);
+    }
+# 559 "jsvalue.h"
+    __attribute__((always_inline)) inline
+    bool operator==(const Value &rhs) const {
+        return data.asBits == rhs.data.asBits;
+    }
+
+    __attribute__((always_inline)) inline
+    bool operator!=(const Value &rhs) const {
+        return data.asBits != rhs.data.asBits;
+    }
+
+
+
+
+    friend bool SameType(const Value &lhs, const Value &rhs);
+
+
+
+    __attribute__((always_inline)) inline
+    int32 toInt32() const {
+        ((void) 0);
+        return JSVAL_TO_INT32_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    double toDouble() const {
+        ((void) 0);
+        return data.asDouble;
+    }
+
+    __attribute__((always_inline)) inline
+    double toNumber() const {
+        ((void) 0);
+        return isDouble() ? toDouble() : double(toInt32());
+    }
+
+    __attribute__((always_inline)) inline
+    JSString *toString() const {
+        ((void) 0);
+        return JSVAL_TO_STRING_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    JSObject &toObject() const {
+        ((void) 0);
+        return *JSVAL_TO_OBJECT_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    JSObject *toObjectOrNull() const {
+        ((void) 0);
+        return JSVAL_TO_OBJECT_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    void *toGCThing() const {
+        ((void) 0);
+        return JSVAL_TO_GCTHING_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    bool toBoolean() const {
+        ((void) 0);
+        return JSVAL_TO_BOOLEAN_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    uint32 payloadAsRawUint32() const {
+        ((void) 0);
+        return data.s.payload.u32;
+    }
+
+    __attribute__((always_inline)) inline
+    uint64 asRawBits() const {
+        return data.asBits;
+    }
+
+
+
+
+
+
+
+    __attribute__((always_inline)) inline
+    JSValueType extractNonDoubleType() const {
+        return JSVAL_EXTRACT_NON_DOUBLE_TYPE_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    JSValueTag extractNonDoubleTag() const {
+        return JSVAL_EXTRACT_NON_DOUBLE_TAG_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    void unboxNonDoubleTo(uint64 *out) const {
+        UNBOX_NON_DOUBLE_JSVAL(data, out);
+    }
+
+    __attribute__((always_inline)) inline
+    void boxNonDoubleFrom(JSValueType type, uint64 *out) {
+        data = BOX_NON_DOUBLE_JSVAL(type, out);
+    }
+
+
+
+
+
+
+    __attribute__((always_inline)) inline
+    JSValueType extractNonDoubleObjectTraceType() const {
+        ((void) 0);
+        return JSVAL_EXTRACT_NON_DOUBLE_TYPE_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    JSValueTag extractNonDoubleObjectTraceTag() const {
+        ((void) 0);
+        return JSVAL_EXTRACT_NON_DOUBLE_TAG_IMPL(data);
+    }
+# 687 "jsvalue.h"
+    __attribute__((always_inline)) inline
+    void setPrivate(void *ptr) {
+        data = PRIVATE_PTR_TO_JSVAL_IMPL(ptr);
+    }
+
+    __attribute__((always_inline)) inline
+    void *toPrivate() const {
+        ((void) 0);
+        return JSVAL_TO_PRIVATE_PTR_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    void setPrivateUint32(uint32 ui) {
+        data = PRIVATE_UINT32_TO_JSVAL_IMPL(ui);
+    }
+
+    __attribute__((always_inline)) inline
+    uint32 toPrivateUint32() const {
+        ((void) 0);
+        return JSVAL_TO_PRIVATE_UINT32_IMPL(data);
+    }
+
+    __attribute__((always_inline)) inline
+    uint32 &getPrivateUint32Ref() {
+        ((void) 0);
+        return data.s.payload.u32;
+    }
+
+
+
+
+
+
+
+    __attribute__((always_inline)) inline
+    void setUnmarkedPtr(void *ptr) {
+        data.asPtr = ptr;
+    }
+
+    __attribute__((always_inline)) inline
+    void *toUnmarkedPtr() const {
+        return data.asPtr;
+    }
+
+    const jsuword *payloadWord() const {
+        return &data.s.payload.word;
+    }
+
+  private:
+    void staticAssertions() {
+        typedef int js_static_assert6[(sizeof(JSValueType) == 1) ? 1 : -1];
+        typedef int js_static_assert7[(sizeof(JSValueTag) == 4) ? 1 : -1];
+        typedef int js_static_assert8[(sizeof(JSBool) == 4) ? 1 : -1];
+        typedef int js_static_assert9[(sizeof(JSWhyMagic) <= 4) ? 1 : -1];
+        typedef int js_static_assert10[(sizeof(jsval) == 8) ? 1 : -1];
+    }
+
+    jsval_layout data;
+} __attribute__((aligned (8)));
+
+__attribute__((always_inline)) inline
+
+# 747 "jsvalue.h"
+                 bool
+SameType(const Value &lhs, const Value &rhs)
+{
+    return JSVAL_SAME_TYPE_IMPL(lhs.data, rhs.data);
+}
+
+static __attribute__((always_inline)) inline Value
+NullValue()
+{
+    Value v;
+    v.setNull();
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+UndefinedValue()
+{
+    Value v;
+    v.setUndefined();
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+Int32Value(int32 i32)
+{
+    Value v;
+    v.setInt32(i32);
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+DoubleValue(double dbl)
+{
+    Value v;
+    v.setDouble(dbl);
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+StringValue(JSString *str)
+{
+    Value v;
+    v.setString(str);
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+BooleanValue(bool boo)
+{
+    Value v;
+    v.setBoolean(boo);
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+ObjectValue(JSObject &obj)
+{
+    Value v;
+    v.setObject(obj);
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+MagicValue(JSWhyMagic why)
+{
+    Value v;
+    v.setMagic(why);
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+NumberValue(double dbl)
+{
+    Value v;
+    v.setNumber(dbl);
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+ObjectOrNullValue(JSObject *obj)
+{
+    Value v;
+    v.setObjectOrNull(obj);
+    return v;
+}
+
+static __attribute__((always_inline)) inline Value
+PrivateValue(void *ptr)
+{
+    Value v;
+    v.setPrivate(ptr);
+    return v;
+}
+
+static __attribute__((always_inline)) inline void
+ClearValueRange(Value *vec, uintN len, bool useHoles)
+{
+    if (useHoles) {
+        for (uintN i = 0; i < len; i++)
+            vec[i].setMagic(JS_ARRAY_HOLE);
+    } else {
+        for (uintN i = 0; i < len; i++)
+            vec[i].setUndefined();
+    }
+}
+# 879 "jsvalue.h"
+static inline jsval * Jsvalify(Value *v) { return (jsval *)v; }
+static inline const jsval * Jsvalify(const Value *v) { return (const jsval *)v; }
+static inline jsval & Jsvalify(Value &v) { return (jsval &)v; }
+static inline const jsval & Jsvalify(const Value &v) { return (const jsval &)v; }
+static inline Value * Valueify(jsval *v) { return (Value *)v; }
+static inline const Value * Valueify(const jsval *v) { return (const Value *)v; }
+static inline Value ** Valueify(jsval **v) { return (Value **)v; }
+static inline Value & Valueify(jsval &v) { return (Value &)v; }
+static inline const Value & Valueify(const jsval &v) { return (const Value &)v; }
+
+struct Class;
+
+typedef JSBool
+(* Native)(JSContext *cx, uintN argc, Value *vp);
+typedef JSBool
+(* PropertyOp)(JSContext *cx, JSObject *obj, jsid id, Value *vp);
+typedef JSBool
+(* StrictPropertyOp)(JSContext *cx, JSObject *obj, jsid id, JSBool strict, Value *vp);
+typedef JSBool
+(* ConvertOp)(JSContext *cx, JSObject *obj, JSType type, Value *vp);
+typedef JSBool
+(* NewEnumerateOp)(JSContext *cx, JSObject *obj, JSIterateOp enum_op,
+                   Value *statep, jsid *idp);
+typedef JSBool
+(* HasInstanceOp)(JSContext *cx, JSObject *obj, const Value *v, JSBool *bp);
+typedef JSBool
+(* CheckAccessOp)(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
+                  Value *vp);
+typedef JSBool
+(* EqualityOp)(JSContext *cx, JSObject *obj, const Value *v, JSBool *bp);
+typedef JSBool
+(* DefinePropOp)(JSContext *cx, JSObject *obj, jsid id, const Value *value,
+                 PropertyOp getter, StrictPropertyOp setter, uintN attrs);
+typedef JSBool
+(* PropertyIdOp)(JSContext *cx, JSObject *obj, JSObject *receiver, jsid id, Value *vp);
+typedef JSBool
+(* StrictPropertyIdOp)(JSContext *cx, JSObject *obj, jsid id, Value *vp, JSBool strict);
+typedef JSBool
+(* DeleteIdOp)(JSContext *cx, JSObject *obj, jsid id, Value *vp, JSBool strict);
+typedef JSBool
+(* CallOp)(JSContext *cx, uintN argc, Value *vp);
+typedef JSBool
+(* LookupPropOp)(JSContext *cx, JSObject *obj, jsid id, JSObject **objp,
+                 JSProperty **propp);
+typedef JSBool
+(* AttributesOp)(JSContext *cx, JSObject *obj, jsid id, uintN *attrsp);
+typedef JSType
+(* TypeOfOp)(JSContext *cx, JSObject *obj);
+typedef void
+(* TraceOp)(JSTracer *trc, JSObject *obj);
+typedef JSObject *
+(* ObjectOp)(JSContext *cx, JSObject *obj);
+typedef void
+(* FinalizeOp)(JSContext *cx, JSObject *obj);
+
+class AutoIdVector;
+# 943 "jsvalue.h"
+typedef JSBool
+(* FixOp)(JSContext *cx, JSObject *obj, bool *fixed, AutoIdVector *props);
+
+static inline Native Valueify(JSNative f) { return (Native)f; }
+static inline JSNative Jsvalify(Native f) { return (JSNative)f; }
+static inline PropertyOp Valueify(JSPropertyOp f) { return (PropertyOp)f; }
+static inline JSPropertyOp Jsvalify(PropertyOp f) { return (JSPropertyOp)f; }
+static inline StrictPropertyOp Valueify(JSStrictPropertyOp f) { return (StrictPropertyOp)f; }
+static inline JSStrictPropertyOp Jsvalify(StrictPropertyOp f) { return (JSStrictPropertyOp)f; }
+static inline ConvertOp Valueify(JSConvertOp f) { return (ConvertOp)f; }
+static inline JSConvertOp Jsvalify(ConvertOp f) { return (JSConvertOp)f; }
+static inline NewEnumerateOp Valueify(JSNewEnumerateOp f) { return (NewEnumerateOp)f; }
+static inline JSNewEnumerateOp Jsvalify(NewEnumerateOp f) { return (JSNewEnumerateOp)f; }
+static inline HasInstanceOp Valueify(JSHasInstanceOp f) { return (HasInstanceOp)f; }
+static inline JSHasInstanceOp Jsvalify(HasInstanceOp f) { return (JSHasInstanceOp)f; }
+static inline CheckAccessOp Valueify(JSCheckAccessOp f) { return (CheckAccessOp)f; }
+static inline JSCheckAccessOp Jsvalify(CheckAccessOp f) { return (JSCheckAccessOp)f; }
+static inline EqualityOp Valueify(JSEqualityOp f);
+static inline JSEqualityOp Jsvalify(EqualityOp f);
+
+static const PropertyOp PropertyStub = (PropertyOp)JS_PropertyStub;
+static const StrictPropertyOp StrictPropertyStub = (StrictPropertyOp)JS_StrictPropertyStub;
+static const JSEnumerateOp EnumerateStub = JS_EnumerateStub;
+static const JSResolveOp ResolveStub = JS_ResolveStub;
+static const ConvertOp ConvertStub = (ConvertOp)JS_ConvertStub;
+static const JSFinalizeOp FinalizeStub = JS_FinalizeStub;
+# 998 "jsvalue.h"
+struct ClassSizeMeasurement {
+    const char *name; uint32 flags; PropertyOp addProperty; PropertyOp delProperty; PropertyOp getProperty; StrictPropertyOp setProperty; JSEnumerateOp enumerate; JSResolveOp resolve; ConvertOp convert; JSFinalizeOp finalize; JSClassInternal reserved0; CheckAccessOp checkAccess; Native call; Native construct; JSXDRObjectOp xdrObject; HasInstanceOp hasInstance; JSMarkOp mark;
+};
+
+struct ClassExtension {
+    EqualityOp equality;
+    JSObjectOp outerObject;
+    JSObjectOp innerObject;
+    JSIteratorOp iteratorObject;
+    void *unused;
+};
+
+
+
+struct ObjectOps {
+    js::LookupPropOp lookupProperty;
+    js::DefinePropOp defineProperty;
+    js::PropertyIdOp getProperty;
+    js::StrictPropertyIdOp setProperty;
+    js::AttributesOp getAttributes;
+    js::AttributesOp setAttributes;
+    js::DeleteIdOp deleteProperty;
+    js::NewEnumerateOp enumerate;
+    js::TypeOfOp typeOf;
+    js::TraceOp trace;
+    js::FixOp fix;
+    js::ObjectOp thisObject;
+    js::FinalizeOp clear;
+};
+
+
+
+struct Class {
+    const char *name; uint32 flags; PropertyOp addProperty; PropertyOp delProperty; PropertyOp getProperty; StrictPropertyOp setProperty; JSEnumerateOp enumerate; JSResolveOp resolve; ConvertOp convert; JSFinalizeOp finalize; JSClassInternal reserved0; CheckAccessOp checkAccess; Native call; Native construct; JSXDRObjectOp xdrObject; HasInstanceOp hasInstance; JSMarkOp mark;
+    ClassExtension ext;
+    ObjectOps ops;
+    uint8 pad[sizeof(JSClass) - sizeof(ClassSizeMeasurement) -
+                            sizeof(ClassExtension) - sizeof(ObjectOps)];
+
+
+    static const uint32 NON_NATIVE = (1<<((8 + 8)+4));
+
+    bool isNative() const {
+        return !(flags & NON_NATIVE);
+    }
+};
+
+typedef int js_static_assert11[(__builtin_offsetof (JSClass, name) == __builtin_offsetof (Class, name)) ? 1 : -1];
+typedef int js_static_assert12[(__builtin_offsetof (JSClass, flags) == __builtin_offsetof (Class, flags)) ? 1 : -1];
+typedef int js_static_assert13[(__builtin_offsetof (JSClass, addProperty) == __builtin_offsetof (Class, addProperty)) ? 1 : -1];
+typedef int js_static_assert14[(__builtin_offsetof (JSClass, delProperty) == __builtin_offsetof (Class, delProperty)) ? 1 : -1];
+typedef int js_static_assert15[(__builtin_offsetof (JSClass, getProperty) == __builtin_offsetof (Class, getProperty)) ? 1 : -1];
+typedef int js_static_assert16[(__builtin_offsetof (JSClass, setProperty) == __builtin_offsetof (Class, setProperty)) ? 1 : -1];
+typedef int js_static_assert17[(__builtin_offsetof (JSClass, enumerate) == __builtin_offsetof (Class, enumerate)) ? 1 : -1];
+typedef int js_static_assert18[(__builtin_offsetof (JSClass, resolve) == __builtin_offsetof (Class, resolve)) ? 1 : -1];
+typedef int js_static_assert19[(__builtin_offsetof (JSClass, convert) == __builtin_offsetof (Class, convert)) ? 1 : -1];
+typedef int js_static_assert20[(__builtin_offsetof (JSClass, finalize) == __builtin_offsetof (Class, finalize)) ? 1 : -1];
+typedef int js_static_assert21[(__builtin_offsetof (JSClass, reserved0) == __builtin_offsetof (Class, reserved0)) ? 1 : -1];
+typedef int js_static_assert22[(__builtin_offsetof (JSClass, checkAccess) == __builtin_offsetof (Class, checkAccess)) ? 1 : -1];
+typedef int js_static_assert23[(__builtin_offsetof (JSClass, call) == __builtin_offsetof (Class, call)) ? 1 : -1];
+typedef int js_static_assert24[(__builtin_offsetof (JSClass, construct) == __builtin_offsetof (Class, construct)) ? 1 : -1];
+typedef int js_static_assert25[(__builtin_offsetof (JSClass, xdrObject) == __builtin_offsetof (Class, xdrObject)) ? 1 : -1];
+typedef int js_static_assert26[(__builtin_offsetof (JSClass, hasInstance) == __builtin_offsetof (Class, hasInstance)) ? 1 : -1];
+typedef int js_static_assert27[(__builtin_offsetof (JSClass, mark) == __builtin_offsetof (Class, mark)) ? 1 : -1];
+typedef int js_static_assert28[(sizeof(JSClass) == sizeof(Class)) ? 1 : -1];
+
+struct PropertyDescriptor {
+    JSObject *obj;
+    uintN attrs;
+    PropertyOp getter;
+    StrictPropertyOp setter;
+    Value value;
+    uintN shortid;
+};
+typedef int js_static_assert29[(__builtin_offsetof (JSPropertyDescriptor, obj) == __builtin_offsetof (PropertyDescriptor, obj)) ? 1 : -1];
+typedef int js_static_assert30[(__builtin_offsetof (JSPropertyDescriptor, attrs) == __builtin_offsetof (PropertyDescriptor, attrs)) ? 1 : -1];
+typedef int js_static_assert31[(__builtin_offsetof (JSPropertyDescriptor, getter) == __builtin_offsetof (PropertyDescriptor, getter)) ? 1 : -1];
+typedef int js_static_assert32[(__builtin_offsetof (JSPropertyDescriptor, setter) == __builtin_offsetof (PropertyDescriptor, setter)) ? 1 : -1];
+typedef int js_static_assert33[(__builtin_offsetof (JSPropertyDescriptor, value) == __builtin_offsetof (PropertyDescriptor, value)) ? 1 : -1];
+typedef int js_static_assert34[(__builtin_offsetof (JSPropertyDescriptor, shortid) == __builtin_offsetof (PropertyDescriptor, shortid)) ? 1 : -1];
+typedef int js_static_assert35[(sizeof(JSPropertyDescriptor) == sizeof(PropertyDescriptor)) ? 1 : -1];
+
+static __attribute__((always_inline)) inline JSClass * Jsvalify(Class *c) { return (JSClass *)c; }
+static __attribute__((always_inline)) inline Class * Valueify(JSClass *c) { return (Class *)c; }
+static __attribute__((always_inline)) inline JSPropertyDescriptor * Jsvalify(PropertyDescriptor *p) { return (JSPropertyDescriptor *) p; }
+static __attribute__((always_inline)) inline PropertyDescriptor * Valueify(JSPropertyDescriptor *p) { return (PropertyDescriptor *) p; }
+# 1141 "jsvalue.h"
+typedef js::Value ValueArgType;
+
+static __attribute__((always_inline)) inline const Value &
+ValueArgToConstRef(const Value &v)
+{
+    return v;
+}
+
+
+
+
+static __attribute__((always_inline)) inline void
+MakeRangeGCSafe(Value *vec, size_t len)
+{
+    PodZero(vec, len);
+}
+
+static __attribute__((always_inline)) inline void
+MakeRangeGCSafe(Value *beg, Value *end)
+{
+    PodZero(beg, end - beg);
+}
+
+static __attribute__((always_inline)) inline void
+MakeRangeGCSafe(jsid *beg, jsid *end)
+{
+    for (jsid *id = beg; id != end; ++id)
+        *id = INT_TO_JSID(0);
+}
+
+static __attribute__((always_inline)) inline void
+MakeRangeGCSafe(jsid *vec, size_t len)
+{
+    MakeRangeGCSafe(vec, vec + len);
+}
+
+static __attribute__((always_inline)) inline void
+MakeRangeGCSafe(const Shape **beg, const Shape **end)
+{
+    PodZero(beg, end - beg);
+}
+
+static __attribute__((always_inline)) inline void
+MakeRangeGCSafe(const Shape **vec, size_t len)
+{
+    PodZero(vec, len);
+}
+
+static __attribute__((always_inline)) inline void
+SetValueRangeToUndefined(Value *beg, Value *end)
+{
+    for (Value *v = beg; v != end; ++v)
+        v->setUndefined();
+}
+
+static __attribute__((always_inline)) inline void
+SetValueRangeToUndefined(Value *vec, size_t len)
+{
+    SetValueRangeToUndefined(vec, vec + len);
+}
+
+static __attribute__((always_inline)) inline void
+SetValueRangeToNull(Value *beg, Value *end)
+{
+    for (Value *v = beg; v != end; ++v)
+        v->setNull();
+}
+
+static __attribute__((always_inline)) inline void
+SetValueRangeToNull(Value *vec, size_t len)
+{
+    SetValueRangeToNull(vec, vec + len);
+}
+
+
+
+
+
+
+
+static __attribute__((always_inline)) inline void
+Debug_SetValueRangeToCrashOnTouch(Value *beg, Value *end)
+{
+
+
+
+
+}
+
+static __attribute__((always_inline)) inline void
+Debug_SetValueRangeToCrashOnTouch(Value *vec, size_t len)
+{
+
+
+
+}
+
+}
+# 65 "jsobj.h" 2
+# 1 "jsvector.h" 1
+# 59 "jsvector.h"
+namespace js {
+
+
+
+
+
+template <class T, size_t N, class AP, bool IsPod>
+struct VectorImpl
+{
+
+    static inline void destroy(T *begin, T *end) {
+        for (T *p = begin; p != end; ++p)
+            p->~T();
+    }
+
+
+    static inline void initialize(T *begin, T *end) {
+        for (T *p = begin; p != end; ++p)
+            new(p) T();
+    }
+
+
+
+
+
+    template <class U>
+    static inline void copyConstruct(T *dst, const U *srcbeg, const U *srcend) {
+        for (const U *p = srcbeg; p != srcend; ++p, ++dst)
+            new(dst) T(*p);
+    }
+
+
+
+
+
+    template <class U>
+    static inline void copyConstructN(T *dst, size_t n, const U &u) {
+        for (T *end = dst + n; dst != end; ++dst)
+            new(dst) T(u);
+    }
+
+
+
+
+
+
+
+    static inline bool growTo(Vector<T,N,AP> &v, size_t newcap) {
+        ((void) 0);
+        T *newbuf = reinterpret_cast<T *>(v.malloc(newcap * sizeof(T)));
+        if (!newbuf)
+            return false;
+        for (T *dst = newbuf, *src = v.beginNoCheck(); src != v.endNoCheck(); ++dst, ++src)
+            new(dst) T(*src);
+        VectorImpl::destroy(v.beginNoCheck(), v.endNoCheck());
+        v.free(v.mBegin);
+        v.mBegin = newbuf;
+
+        v.mCapacity = newcap;
+        return true;
+    }
+};
+
+
+
+
+
+
+template <class T, size_t N, class AP>
+struct VectorImpl<T, N, AP, true>
+{
+    static inline void destroy(T *, T *) {}
+
+    static inline void initialize(T *begin, T *end) {
+# 141 "jsvector.h"
+        for (T *p = begin; p != end; ++p)
+            new(p) T();
+    }
+
+    template <class U>
+    static inline void copyConstruct(T *dst, const U *srcbeg, const U *srcend) {
+
+
+
+
+
+
+
+        for (const U *p = srcbeg; p != srcend; ++p, ++dst)
+            *dst = *p;
+    }
+
+    static inline void copyConstructN(T *dst, size_t n, const T &t) {
+        for (T *p = dst, *end = dst + n; p != end; ++p)
+            *p = t;
+    }
+
+    static inline bool growTo(Vector<T,N,AP> &v, size_t newcap) {
+        ((void) 0);
+        size_t bytes = sizeof(T) * newcap;
+        T *newbuf = reinterpret_cast<T *>(v.realloc(v.mBegin, bytes));
+        if (!newbuf)
+            return false;
+        v.mBegin = newbuf;
+
+        v.mCapacity = newcap;
+        return true;
+    }
+};
+# 194 "jsvector.h"
+template <class T, size_t N, class AllocPolicy>
+class Vector : AllocPolicy
+{
+
+
+    static const bool sElemIsPod = tl::IsPodType<T>::result;
+    typedef VectorImpl<T, N, AllocPolicy, sElemIsPod> Impl;
+    friend struct VectorImpl<T, N, AllocPolicy, sElemIsPod>;
+
+    bool calculateNewCapacity(size_t curLength, size_t lengthInc, size_t &newCap);
+    bool growStorageBy(size_t lengthInc);
+    bool growHeapStorageBy(size_t lengthInc);
+    bool convertToHeapStorage(size_t lengthInc);
+
+    template <bool InitNewElems> inline bool growByImpl(size_t inc);
+
+
+
+    static const int sMaxInlineBytes = 1024;
+
+
+
+    static const size_t sInlineCapacity =
+        tl::Min<N, sMaxInlineBytes / sizeof(T)>::result;
+
+
+    static const size_t sInlineBytes =
+        tl::Max<1, sInlineCapacity * sizeof(T)>::result;
+# 230 "jsvector.h"
+    T *mBegin;
+    size_t mLength;
+    size_t mCapacity;
+
+    AlignedStorage<sInlineBytes> storage;
+
+
+
+
+
+
+    Vector(const Vector &);
+    Vector &operator=(const Vector &);
+
+
+
+    bool usingInlineStorage() const {
+        return mBegin == (T *)storage.addr();
+    }
+
+    T *beginNoCheck() const {
+        return mBegin;
+    }
+
+    T *endNoCheck() {
+        return mBegin + mLength;
+    }
+
+    const T *endNoCheck() const {
+        return mBegin + mLength;
+    }
+
+  public:
+    typedef T ElementType;
+
+    Vector(AllocPolicy = AllocPolicy());
+    ~Vector();
+
+
+
+    const AllocPolicy &allocPolicy() const {
+        return *this;
+    }
+
+    enum { InlineLength = N };
+
+    size_t length() const {
+        return mLength;
+    }
+
+    bool empty() const {
+        return mLength == 0;
+    }
+
+    size_t capacity() const {
+        return mCapacity;
+    }
+
+    T *begin() const {
+        ((void) 0);
+        return mBegin;
+    }
+
+    T *end() {
+        ((void) 0);
+        return mBegin + mLength;
+    }
+
+    const T *end() const {
+        ((void) 0);
+        return mBegin + mLength;
+    }
+
+    T &operator[](size_t i) {
+        ((void) 0);
+        return begin()[i];
+    }
+
+    const T &operator[](size_t i) const {
+        ((void) 0);
+        return begin()[i];
+    }
+
+    T &back() {
+        ((void) 0);
+        return *(end() - 1);
+    }
+
+    const T &back() const {
+        ((void) 0);
+        return *(end() - 1);
+    }
+
+
+
+
+    bool reserve(size_t capacity);
+
+
+    void shrinkBy(size_t incr);
+
+
+    bool growBy(size_t incr);
+
+
+    bool resize(size_t newLength);
+
+
+    bool growByUninitialized(size_t incr);
+    bool resizeUninitialized(size_t newLength);
+
+    void clear();
+
+    bool append(const T &t);
+    bool appendN(const T &t, size_t n);
+    template <class U> bool append(const U *begin, const U *end);
+    template <class U> bool append(const U *begin, size_t length);
+    template <class U, size_t O, class BP> bool append(const Vector<U,O,BP> &other);
+
+    void popBack();
+
+    T popCopy();
+# 361 "jsvector.h"
+    T *extractRawBuffer();
+
+
+
+
+
+
+    void replaceRawBuffer(T *p, size_t length);
+
+
+
+
+
+    bool insert(T *p, const T &val);
+
+
+
+
+
+    void erase(T *t);
+};
+# 391 "jsvector.h"
+template <class T, size_t N, class AllocPolicy>
+__attribute__((always_inline)) inline
+Vector<T,N,AllocPolicy>::Vector(AllocPolicy ap)
+  : AllocPolicy(ap), mBegin((T *)storage.addr()), mLength(0),
+    mCapacity(sInlineCapacity)
+
+
+
+{}
+
+template <class T, size_t N, class AP>
+__attribute__((always_inline)) inline
+Vector<T,N,AP>::~Vector()
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+    Impl::destroy(beginNoCheck(), endNoCheck());
+    if (!usingInlineStorage())
+        this->free(beginNoCheck());
+}
+
+
+
+
+
+template <class T, size_t N, class AP>
+
+inline
+
+# 417 "jsvector.h"
+       bool
+Vector<T,N,AP>::calculateNewCapacity(size_t curLength, size_t lengthInc,
+                                     size_t &newCap)
+{
+    size_t newMinCap = curLength + lengthInc;
+
+
+
+
+
+    if (newMinCap < curLength ||
+        newMinCap & tl::MulOverflowMask<2 * sizeof(T)>::result) {
+        this->reportAllocOverflow();
+        return false;
+    }
+
+
+    newCap = RoundUpPow2(newMinCap);
+
+
+
+
+
+    if (newCap & tl::UnsafeRangeSizeMask<T>::result) {
+        this->reportAllocOverflow();
+        return false;
+    }
+    return true;
+}
+
+
+
+
+
+template <class T, size_t N, class AP>
+__attribute__((always_inline)) inline
+
+# 452 "jsvector.h"
+                 bool
+Vector<T,N,AP>::growHeapStorageBy(size_t lengthInc)
+{
+    ((void) 0);
+    size_t newCap;
+    return calculateNewCapacity(mLength, lengthInc, newCap) &&
+           Impl::growTo(*this, newCap);
+}
+
+
+
+
+
+
+template <class T, size_t N, class AP>
+inline
+
+# 467 "jsvector.h"
+       bool
+Vector<T,N,AP>::convertToHeapStorage(size_t lengthInc)
+{
+    ((void) 0);
+    size_t newCap;
+    if (!calculateNewCapacity(mLength, lengthInc, newCap))
+        return false;
+
+
+    T *newBuf = reinterpret_cast<T *>(this->malloc(newCap * sizeof(T)));
+    if (!newBuf)
+        return false;
+
+
+    Impl::copyConstruct(newBuf, beginNoCheck(), endNoCheck());
+    Impl::destroy(beginNoCheck(), endNoCheck());
+
+
+    mBegin = newBuf;
+
+    mCapacity = newCap;
+    return true;
+}
+
+template <class T, size_t N, class AP>
+__attribute__((noinline))
+
+# 492 "jsvector.h"
+                bool
+Vector<T,N,AP>::growStorageBy(size_t incr)
+{
+    ((void) 0);
+    return usingInlineStorage()
+         ? convertToHeapStorage(incr)
+         : growHeapStorageBy(incr);
+}
+
+template <class T, size_t N, class AP>
+inline
+
+# 502 "jsvector.h"
+       bool
+Vector<T,N,AP>::reserve(size_t request)
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+    if (request > mCapacity)
+        return growStorageBy(request - mLength);
+    return true;
+}
+
+template <class T, size_t N, class AP>
+inline void
+Vector<T,N,AP>::shrinkBy(size_t incr)
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+    ((void) 0);
+    Impl::destroy(endNoCheck() - incr, endNoCheck());
+    mLength -= incr;
+}
+
+template <class T, size_t N, class AP>
+template <bool InitNewElems>
+__attribute__((always_inline)) inline
+
+# 523 "jsvector.h"
+                 bool
+Vector<T,N,AP>::growByImpl(size_t incr)
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+    if (incr > mCapacity - mLength && !growStorageBy(incr))
+        return false;
+
+    ((void) 0);
+    T *newend = endNoCheck() + incr;
+    if (InitNewElems)
+        Impl::initialize(endNoCheck(), newend);
+    mLength += incr;
+    return true;
+}
+
+template <class T, size_t N, class AP>
+__attribute__((always_inline)) inline
+
+# 539 "jsvector.h"
+                 bool
+Vector<T,N,AP>::growBy(size_t incr)
+{
+    return growByImpl<true>(incr);
+}
+
+template <class T, size_t N, class AP>
+__attribute__((always_inline)) inline
+
+# 546 "jsvector.h"
+                 bool
+Vector<T,N,AP>::growByUninitialized(size_t incr)
+{
+    return growByImpl<false>(incr);
+}
+
+template <class T, size_t N, class AP>
+
+inline
+
+# 554 "jsvector.h"
+       bool
+Vector<T,N,AP>::resize(size_t newLength)
+{
+    size_t curLength = mLength;
+    if (newLength > curLength)
+        return growBy(newLength - curLength);
+    shrinkBy(curLength - newLength);
+    return true;
+}
+
+template <class T, size_t N, class AP>
+__attribute__((always_inline)) inline
+
+# 565 "jsvector.h"
+                 bool
+Vector<T,N,AP>::resizeUninitialized(size_t newLength)
+{
+    size_t curLength = mLength;
+    if (newLength > curLength)
+        return growByUninitialized(newLength - curLength);
+    shrinkBy(curLength - newLength);
+    return true;
+}
+
+template <class T, size_t N, class AP>
+inline void
+Vector<T,N,AP>::clear()
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+    Impl::destroy(beginNoCheck(), endNoCheck());
+    mLength = 0;
+}
+
+template <class T, size_t N, class AP>
+__attribute__((always_inline)) inline
+
+# 585 "jsvector.h"
+                 bool
+Vector<T,N,AP>::append(const T &t)
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+    if (mLength == mCapacity && !growStorageBy(1))
+        return false;
+
+    ((void) 0);
+    new(endNoCheck()) T(t);
+    ++mLength;
+    return true;
+}
+
+template <class T, size_t N, class AP>
+__attribute__((always_inline)) inline
+
+# 599 "jsvector.h"
+                 bool
+Vector<T,N,AP>::appendN(const T &t, size_t needed)
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+    if (mLength + needed > mCapacity && !growStorageBy(needed))
+        return false;
+
+    ((void) 0);
+    Impl::copyConstructN(endNoCheck(), needed, t);
+    mLength += needed;
+    return true;
+}
+
+template <class T, size_t N, class AP>
+inline
+
+# 613 "jsvector.h"
+       bool
+Vector<T,N,AP>::insert(T *p, const T &val)
+{
+    ((void) 0);
+    size_t pos = p - begin();
+    ((void) 0);
+    size_t oldLength = mLength;
+    if (pos == oldLength)
+        return append(val);
+    {
+        T oldBack = back();
+        if (!append(oldBack))
+            return false;
+    }
+    for (size_t i = oldLength; i > pos; --i)
+        (*this)[i] = (*this)[i - 1];
+    (*this)[pos] = val;
+    return true;
+}
+
+template<typename T, size_t N, class AP>
+inline void
+Vector<T,N,AP>::erase(T *it)
+{
+    ((void) 0);
+    while (it + 1 != end()) {
+        *it = *(it + 1);
+        ++it;
+    }
+    popBack();
+}
+
+template <class T, size_t N, class AP>
+template <class U>
+__attribute__((always_inline)) inline
+
+# 647 "jsvector.h"
+                 bool
+Vector<T,N,AP>::append(const U *insBegin, const U *insEnd)
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+    size_t needed = PointerRangeSize(insBegin, insEnd);
+    if (mLength + needed > mCapacity && !growStorageBy(needed))
+        return false;
+
+    ((void) 0);
+    Impl::copyConstruct(endNoCheck(), insBegin, insEnd);
+    mLength += needed;
+    return true;
+}
+
+template <class T, size_t N, class AP>
+template <class U, size_t O, class BP>
+inline
+
+# 663 "jsvector.h"
+       bool
+Vector<T,N,AP>::append(const Vector<U,O,BP> &other)
+{
+    return append(other.begin(), other.end());
+}
+
+template <class T, size_t N, class AP>
+template <class U>
+__attribute__((always_inline)) inline
+
+# 671 "jsvector.h"
+                 bool
+Vector<T,N,AP>::append(const U *insBegin, size_t length)
+{
+    return this->append(insBegin, insBegin + length);
+}
+
+template <class T, size_t N, class AP>
+__attribute__((always_inline)) inline void
+Vector<T,N,AP>::popBack()
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+    ((void) 0);
+    --mLength;
+    endNoCheck()->~T();
+}
+
+template <class T, size_t N, class AP>
+__attribute__((always_inline)) inline T
+Vector<T,N,AP>::popCopy()
+{
+    T ret = back();
+    popBack();
+    return ret;
+}
+
+template <class T, size_t N, class AP>
+inline T *
+Vector<T,N,AP>::extractRawBuffer()
+{
+    T *ret;
+    if (usingInlineStorage()) {
+        ret = reinterpret_cast<T *>(this->malloc(mLength * sizeof(T)));
+        if (!ret)
+            return __null;
+        Impl::copyConstruct(ret, beginNoCheck(), endNoCheck());
+        Impl::destroy(beginNoCheck(), endNoCheck());
+
+        mLength = 0;
+    } else {
+        ret = mBegin;
+        mBegin = (T *)storage.addr();
+        mLength = 0;
+        mCapacity = sInlineCapacity;
+    }
+    return ret;
+}
+
+template <class T, size_t N, class AP>
+inline void
+Vector<T,N,AP>::replaceRawBuffer(T *p, size_t length)
+{
+    ReentrancyGuard g(*this); ((void) 0); ((void) 0);
+
+
+    Impl::destroy(beginNoCheck(), endNoCheck());
+    if (!usingInlineStorage())
+        this->free(beginNoCheck());
+
+
+    if (length <= sInlineCapacity) {
+
+
+
+
+
+        mBegin = (T *)storage.addr();
+        mLength = length;
+        mCapacity = sInlineCapacity;
+        Impl::copyConstruct(mBegin, p, p + length);
+        Impl::destroy(p, p + length);
+        this->free(p);
+    } else {
+        mBegin = p;
+        mLength = length;
+        mCapacity = length;
+    }
+}
+
+}
+# 66 "jsobj.h" 2
+# 1 "jscell.h" 1
+# 43 "jscell.h"
+struct JSCompartment;
+
+namespace js {
+namespace gc {
+
+template <typename T> struct Arena;
+struct ArenaBitmap;
+struct MarkingDelay;
+struct Chunk;
+struct FreeCell;
+# 62 "jscell.h"
+struct Cell {
+    static const size_t CellShift = 3;
+    static const size_t CellSize = size_t(1) << CellShift;
+    static const size_t CellMask = CellSize - 1;
+
+    inline Arena<Cell> *arena() const;
+    inline Chunk *chunk() const;
+    inline ArenaBitmap *bitmap() const;
+    __attribute__((always_inline)) inline size_t cellIndex() const;
+
+    __attribute__((always_inline)) inline bool isMarked(uint32 color) const;
+    __attribute__((always_inline)) inline bool markIfUnmarked(uint32 color) const;
+    __attribute__((always_inline)) inline void unmark(uint32 color) const;
+
+    inline JSCompartment *compartment() const;
+
+
+    __attribute__((always_inline)) inline js::gc::Cell *asCell() { return this; }
+
+    __attribute__((always_inline)) inline js::gc::FreeCell *asFreeCell() {
+        return reinterpret_cast<FreeCell *>(this);
+    }
+};
+
+
+struct FreeCell : Cell {
+    union {
+        FreeCell *link;
+        double data;
+    };
+};
+
+typedef int js_static_assert36[(sizeof(FreeCell) == 8) ? 1 : -1];
+
+}
+}
+# 67 "jsobj.h" 2
+
+namespace js {
+
+class JSProxyHandler;
+class AutoPropDescArrayRooter;
+
+namespace mjit {
+class Compiler;
+}
+
+static inline PropertyOp
+CastAsPropertyOp(JSObject *object)
+{
+    return (__extension__ (PropertyOp) (size_t) (object));
+}
+
+static inline StrictPropertyOp
+CastAsStrictPropertyOp(JSObject *object)
+{
+    return (__extension__ (StrictPropertyOp) (size_t) (object));
+}
+
+static inline JSPropertyOp
+CastAsJSPropertyOp(JSObject *object)
+{
+    return (__extension__ (JSPropertyOp) (size_t) (object));
+}
+
+static inline JSStrictPropertyOp
+CastAsJSStrictPropertyOp(JSObject *object)
+{
+    return (__extension__ (JSStrictPropertyOp) (size_t) (object));
+}
+
+inline JSObject *
+CastAsObject(PropertyOp op)
+{
+    return (__extension__ (JSObject *) (size_t) (op));
+}
+
+inline JSObject *
+CastAsObject(StrictPropertyOp op)
+{
+    return (__extension__ (JSObject *) (size_t) (op));
+}
+
+inline Value
+CastAsObjectJsval(PropertyOp op)
+{
+    return ObjectOrNullValue(CastAsObject(op));
+}
+
+inline Value
+CastAsObjectJsval(StrictPropertyOp op)
+{
+    return ObjectOrNullValue(CastAsObject(op));
+}
+
+}
+
+
+
+
+
+struct PropDesc {
+    friend class js::AutoPropDescArrayRooter;
+
+    PropDesc();
+
+  public:
+
+    bool initialize(JSContext* cx, jsid id, const js::Value &v);
+
+
+    bool isAccessorDescriptor() const {
+        return hasGet || hasSet;
+    }
+
+
+    bool isDataDescriptor() const {
+        return hasValue || hasWritable;
+    }
+
+
+    bool isGenericDescriptor() const {
+        return !isAccessorDescriptor() && !isDataDescriptor();
+    }
+
+    bool configurable() const {
+        return (attrs & 0x04) == 0;
+    }
+
+    bool enumerable() const {
+        return (attrs & 0x01) != 0;
+    }
+
+    bool writable() const {
+        return (attrs & 0x02) == 0;
+    }
+
+    JSObject* getterObject() const {
+        return get.isUndefined() ? __null : &get.toObject();
+    }
+    JSObject* setterObject() const {
+        return set.isUndefined() ? __null : &set.toObject();
+    }
+
+    const js::Value &getterValue() const {
+        return get;
+    }
+    const js::Value &setterValue() const {
+        return set;
+    }
+
+    js::PropertyOp getter() const {
+        return js::CastAsPropertyOp(getterObject());
+    }
+    js::StrictPropertyOp setter() const {
+        return js::CastAsStrictPropertyOp(setterObject());
+    }
+
+    js::Value pd;
+    jsid id;
+    js::Value value, get, set;
+
+
+    uint8 attrs;
+
+
+    bool hasGet : 1;
+    bool hasSet : 1;
+    bool hasValue : 1;
+    bool hasWritable : 1;
+    bool hasEnumerable : 1;
+    bool hasConfigurable : 1;
+};
+
+namespace js {
+
+typedef Vector<PropDesc, 1> PropDescArray;
+
+}
+
+struct JSObjectMap {
+    uint32 shape;
+    uint32 slotSpan;
+
+    static __attribute__((visibility ("default"))) const JSObjectMap sharedNonNative;
+
+    explicit JSObjectMap(uint32 shape) : shape(shape), slotSpan(0) {}
+    JSObjectMap(uint32 shape, uint32 slotSpan) : shape(shape), slotSpan(slotSpan) {}
+
+    enum { INVALID_SHAPE = 0x8fffffff, SHAPELESS = 0xffffffff };
+
+    bool isNative() const { return this != &sharedNonNative; }
+
+  private:
+
+    JSObjectMap(JSObjectMap &);
+    void operator=(JSObjectMap &);
+};
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+js_LookupProperty(JSContext *cx, JSObject *obj, jsid id, JSObject **objp,
+                  JSProperty **propp);
+
+extern JSBool
+js_DefineProperty(JSContext *cx, JSObject *obj, jsid id, const js::Value *value,
+                  js::PropertyOp getter, js::StrictPropertyOp setter, uintN attrs);
+
+extern JSBool
+js_GetProperty(JSContext *cx, JSObject *obj, JSObject *receiver, jsid id, js::Value *vp);
+
+inline JSBool
+js_GetProperty(JSContext *cx, JSObject *obj, jsid id, js::Value *vp)
+{
+    return js_GetProperty(cx, obj, obj, id, vp);
+}
+
+namespace js {
+
+extern JSBool
+GetPropertyDefault(JSContext *cx, JSObject *obj, jsid id, const Value &def, Value *vp);
+
+}
+
+extern JSBool
+js_SetProperty(JSContext *cx, JSObject *obj, jsid id, js::Value *vp, JSBool strict);
+
+extern JSBool
+js_GetAttributes(JSContext *cx, JSObject *obj, jsid id, uintN *attrsp);
+
+extern JSBool
+js_SetAttributes(JSContext *cx, JSObject *obj, jsid id, uintN *attrsp);
+
+extern JSBool
+js_DeleteProperty(JSContext *cx, JSObject *obj, jsid id, js::Value *rval, JSBool strict);
+
+extern __attribute__((visibility ("default"))) JSBool
+js_Enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op,
+             js::Value *statep, jsid *idp);
+
+extern JSType
+js_TypeOf(JSContext *cx, JSObject *obj);
+
+namespace js {
+
+struct NativeIterator;
+
+}
+
+struct JSFunction;
+
+namespace nanojit {
+class ValidateWriter;
+}
+# 326 "jsobj.h"
+struct JSObject : js::gc::Cell {
+
+
+
+
+
+
+    friend class js::TraceRecorder;
+    friend class nanojit::ValidateWriter;
+    friend class GetPropCompiler;
+# 352 "jsobj.h"
+    union {
+        js::Shape *lastProp;
+        JSObjectMap *map;
+    };
+
+    js::Class *clasp;
+
+  private:
+    inline void setLastProperty(const js::Shape *shape);
+    inline void removeLastProperty();
+
+
+
+
+
+  public:
+    inline const js::Shape *lastProperty() const;
+
+    inline js::Shape **nativeSearch(jsid id, bool adding = false);
+    inline const js::Shape *nativeLookup(jsid id);
+
+    inline bool nativeContains(jsid id);
+    inline bool nativeContains(const js::Shape &shape);
+
+    enum {
+        DELEGATE = 0x01,
+        SYSTEM = 0x02,
+        NOT_EXTENSIBLE = 0x04,
+        BRANDED = 0x08,
+        GENERIC = 0x10,
+        METHOD_BARRIER = 0x20,
+        INDEXED = 0x40,
+        OWN_SHAPE = 0x80,
+        BOUND_FUNCTION = 0x100,
+        HAS_EQUALITY = 0x200,
+        METHOD_THRASH_COUNT_MASK = 0xc00,
+        METHOD_THRASH_COUNT_SHIFT = 10,
+        METHOD_THRASH_COUNT_MAX = METHOD_THRASH_COUNT_MASK >> METHOD_THRASH_COUNT_SHIFT
+    };
+
+
+
+
+
+    enum {
+        NSLOTS_BITS = 29,
+        NSLOTS_LIMIT = ((JSUint32)1 << (NSLOTS_BITS))
+    };
+
+    uint32 flags;
+    uint32 objShape;
+
+
+    js::EmptyShape **emptyShapes;
+
+    JSObject *proto;
+    JSObject *parent;
+    void *privateData;
+    jsuword capacity;
+    js::Value *slots;
+# 421 "jsobj.h"
+    inline bool canProvideEmptyShape(js::Class *clasp);
+    inline js::EmptyShape *getEmptyShape(JSContext *cx, js::Class *aclasp,
+                                                                unsigned kind);
+
+    bool isNative() const { return map->isNative(); }
+
+    js::Class *getClass() const { return clasp; }
+    JSClass *getJSClass() const { return Jsvalify(clasp); }
+
+    bool hasClass(const js::Class *c) const {
+        return c == clasp;
+    }
+
+    const js::ObjectOps *getOps() const {
+        return &getClass()->ops;
+    }
+
+    inline void trace(JSTracer *trc);
+
+    uint32 shape() const {
+        ((void) 0);
+        return objShape;
+    }
+
+    bool isDelegate() const { return !!(flags & DELEGATE); }
+    void setDelegate() { flags |= DELEGATE; }
+    void clearDelegate() { flags &= ~DELEGATE; }
+
+    bool isBoundFunction() const { return !!(flags & BOUND_FUNCTION); }
+
+    static void setDelegateNullSafe(JSObject *obj) {
+        if (obj)
+            obj->setDelegate();
+    }
+
+    bool isSystem() const { return !!(flags & SYSTEM); }
+    void setSystem() { flags |= SYSTEM; }
+
+
+
+
+
+
+    bool branded() { return !!(flags & BRANDED); }
+
+
+
+
+
+
+    bool brand(JSContext *cx);
+    bool unbrand(JSContext *cx);
+
+    bool generic() { return !!(flags & GENERIC); }
+    void setGeneric() { flags |= GENERIC; }
+
+    uintN getMethodThrashCount() const {
+        return (flags & METHOD_THRASH_COUNT_MASK) >> METHOD_THRASH_COUNT_SHIFT;
+    }
+
+    void setMethodThrashCount(uintN count) {
+        ((void) 0);
+        flags = (flags & ~METHOD_THRASH_COUNT_MASK) | (count << METHOD_THRASH_COUNT_SHIFT);
+    }
+
+    bool hasSpecialEquality() const { return !!(flags & HAS_EQUALITY); }
+    void assertSpecialEqualitySynced() const {
+        ((void) 0);
+    }
+
+
+    inline void syncSpecialEquality();
+
+  private:
+    void generateOwnShape(JSContext *cx);
+
+    void setOwnShape(uint32 s) { flags |= OWN_SHAPE; objShape = s; }
+    void clearOwnShape() { flags &= ~OWN_SHAPE; objShape = map->shape; }
+
+  public:
+    inline bool nativeEmpty() const;
+
+    bool hasOwnShape() const { return !!(flags & OWN_SHAPE); }
+
+    void setMap(const JSObjectMap *amap) {
+        ((void) 0);
+        map = const_cast<JSObjectMap *>(amap);
+        objShape = map->shape;
+    }
+
+    void setSharedNonNativeMap() {
+        setMap(&JSObjectMap::sharedNonNative);
+    }
+
+    void deletingShapeChange(JSContext *cx, const js::Shape &shape);
+    const js::Shape *methodShapeChange(JSContext *cx, const js::Shape &shape);
+    bool methodShapeChange(JSContext *cx, uint32 slot);
+    void protoShapeChange(JSContext *cx);
+    void shadowingShapeChange(JSContext *cx, const js::Shape &shape);
+    bool globalObjectOwnShapeChange(JSContext *cx);
+    void watchpointOwnShapeChange(JSContext *cx) { generateOwnShape(cx); }
+
+    void extensibleShapeChange(JSContext *cx) {
+
+        generateOwnShape(cx);
+    }
+# 568 "jsobj.h"
+    bool hasMethodBarrier() { return !!(flags & METHOD_BARRIER); }
+    void setMethodBarrier() { flags |= METHOD_BARRIER; }
+
+
+
+
+
+
+
+    bool brandedOrHasMethodBarrier() { return !!(flags & (BRANDED | METHOD_BARRIER)); }
+
+
+
+
+
+
+    const js::Shape *methodReadBarrier(JSContext *cx, const js::Shape &shape, js::Value *vp);
+# 593 "jsobj.h"
+    const js::Shape *methodWriteBarrier(JSContext *cx, const js::Shape &shape, const js::Value &v);
+    bool methodWriteBarrier(JSContext *cx, uint32 slot, const js::Value &v);
+
+    bool isIndexed() const { return !!(flags & INDEXED); }
+    void setIndexed() { flags |= INDEXED; }
+
+
+
+
+
+
+    inline bool inDictionaryMode() const;
+
+    inline uint32 propertyCount() const;
+
+    inline bool hasPropertyTable() const;
+
+                           unsigned finalizeKind() const;
+
+    uint32 numSlots() const { return capacity; }
+
+    size_t slotsAndStructSize(uint32 nslots) const;
+    size_t slotsAndStructSize() const { return slotsAndStructSize(numSlots()); }
+
+    inline js::Value* fixedSlots() const;
+    inline size_t numFixedSlots() const;
+
+    static inline size_t getFixedSlotOffset(size_t slot);
+
+  public:
+
+    static const uint32 SLOT_CAPACITY_MIN = 8;
+
+    bool allocSlots(JSContext *cx, size_t nslots);
+    bool growSlots(JSContext *cx, size_t nslots);
+    void shrinkSlots(JSContext *cx, size_t nslots);
+
+    bool ensureSlots(JSContext *cx, size_t nslots) {
+        if (numSlots() < nslots)
+            return growSlots(cx, nslots);
+        return true;
+    }
+# 652 "jsobj.h"
+    bool ensureInstanceReservedSlots(JSContext *cx, size_t nreserved);
+
+
+
+
+
+    js::Value *getSlots() const {
+        return slots;
+    }
+
+
+
+
+
+
+    bool ensureClassReservedSlotsForEmptyObject(JSContext *cx);
+
+    inline bool ensureClassReservedSlots(JSContext *cx);
+
+    uint32 slotSpan() const { return map->slotSpan; }
+
+    bool containsSlot(uint32 slot) const { return slot < slotSpan(); }
+
+    js::Value& getSlotRef(uintN slot) {
+        ((void) 0);
+        return slots[slot];
+    }
+
+    js::Value &nativeGetSlotRef(uintN slot) {
+        ((void) 0);
+        ((void) 0);
+        return getSlotRef(slot);
+    }
+
+    const js::Value &getSlot(uintN slot) const {
+        ((void) 0);
+        return slots[slot];
+    }
+
+    const js::Value &nativeGetSlot(uintN slot) const {
+        ((void) 0);
+        ((void) 0);
+        return getSlot(slot);
+    }
+
+    void setSlot(uintN slot, const js::Value &value) {
+        ((void) 0);
+        slots[slot] = value;
+    }
+
+    void nativeSetSlot(uintN slot, const js::Value &value) {
+        ((void) 0);
+        ((void) 0);
+        return setSlot(slot, value);
+    }
+
+    inline js::Value getReservedSlot(uintN index) const;
+
+
+    inline void updateShape(JSContext *cx);
+    inline void updateFlags(const js::Shape *shape, bool isDefinitelyAtom = false);
+
+
+    inline void extend(JSContext *cx, const js::Shape *shape, bool isDefinitelyAtom = false);
+
+    JSObject *getProto() const { return proto; }
+    void clearProto() { proto = __null; }
+
+    void setProto(JSObject *newProto) {
+
+
+
+
+        setDelegateNullSafe(newProto);
+        proto = newProto;
+    }
+
+    JSObject *getParent() const {
+        return parent;
+    }
+
+    void clearParent() {
+        parent = __null;
+    }
+
+    void setParent(JSObject *newParent) {
+
+
+
+
+        setDelegateNullSafe(newParent);
+        parent = newParent;
+    }
+
+    __attribute__((visibility ("default"))) JSObject * getGlobal() const;
+
+    bool isGlobal() const {
+        return !!(getClass()->flags & (1<<((8 + 8)+2)));
+    }
+
+    void *getPrivate() const {
+        ((void) 0);
+        return privateData;
+    }
+
+    void setPrivate(void *data) {
+        ((void) 0);
+        privateData = data;
+    }
+
+
+
+
+
+
+  private:
+    enum ImmutabilityType { SEAL, FREEZE };
+
+
+
+
+
+
+
+    bool sealOrFreeze(JSContext *cx, ImmutabilityType it);
+
+  public:
+    bool isExtensible() const { return !(flags & NOT_EXTENSIBLE); }
+    bool preventExtensions(JSContext *cx, js::AutoIdVector *props);
+
+
+    inline bool seal(JSContext *cx) { return sealOrFreeze(cx, SEAL); }
+
+    bool freeze(JSContext *cx) { return sealOrFreeze(cx, FREEZE); }
+
+
+
+
+
+  private:
+    static const uint32 JSSLOT_PRIMITIVE_THIS = 0;
+
+  public:
+    inline const js::Value &getPrimitiveThis() const;
+    inline void setPrimitiveThis(const js::Value &pthis);
+
+
+
+
+
+    inline uint32 getArrayLength() const;
+    inline void setArrayLength(uint32 length);
+
+    inline uint32 getDenseArrayCapacity();
+    inline js::Value* getDenseArrayElements();
+    inline const js::Value &getDenseArrayElement(uintN idx);
+    inline js::Value* addressOfDenseArrayElement(uintN idx);
+    inline void setDenseArrayElement(uintN idx, const js::Value &val);
+    inline void shrinkDenseArrayElements(JSContext *cx, uintN cap);
+# 819 "jsobj.h"
+    enum EnsureDenseResult { ED_OK, ED_FAILED, ED_SPARSE };
+    inline EnsureDenseResult ensureDenseArrayElements(JSContext *cx, uintN index, uintN extra);
+
+
+
+
+
+    bool willBeSparseDenseArray(uintN requiredCapacity, uintN newElementsHint);
+
+    JSBool makeDenseArraySlow(JSContext *cx);
+
+
+
+
+
+  private:
+# 881 "jsobj.h"
+    static const uint32 JSSLOT_ARGS_DATA = 1;
+
+  public:
+
+    static const uint32 JSSLOT_ARGS_LENGTH = 0;
+    static const uint32 ARGS_CLASS_RESERVED_SLOTS = 2;
+    static const uint32 ARGS_FIRST_FREE_SLOT = ARGS_CLASS_RESERVED_SLOTS + 1;
+
+
+    static const uint32 ARGS_LENGTH_OVERRIDDEN_BIT = 0x1;
+    static const uint32 ARGS_PACKED_BITS_COUNT = 1;
+
+
+
+
+    inline void setArgsLength(uint32 argc);
+
+
+
+
+
+    inline uint32 getArgsInitialLength() const;
+
+    inline void setArgsLengthOverridden();
+    inline bool isArgsLengthOverridden() const;
+
+    inline js::ArgumentsData *getArgsData() const;
+    inline void setArgsData(js::ArgumentsData *data);
+
+    inline const js::Value &getArgsCallee() const;
+    inline void setArgsCallee(const js::Value &callee);
+
+    inline const js::Value &getArgsElement(uint32 i) const;
+    inline js::Value *getArgsElements() const;
+    inline js::Value *addressOfArgsElement(uint32 i);
+    inline void setArgsElement(uint32 i, const js::Value &v);
+
+  private:
+# 930 "jsobj.h"
+    static const uint32 JSSLOT_CALL_CALLEE = 0;
+    static const uint32 JSSLOT_CALL_ARGUMENTS = 1;
+
+  public:
+
+    static const uint32 CALL_RESERVED_SLOTS = 2;
+
+
+    inline bool callIsForEval() const;
+
+
+    inline JSStackFrame *maybeCallObjStackFrame() const;
+
+
+
+
+
+    inline JSObject *getCallObjCallee() const;
+    inline JSFunction *getCallObjCalleeFunction() const;
+    inline void setCallObjCallee(JSObject *callee);
+
+    inline const js::Value &getCallObjArguments() const;
+    inline void setCallObjArguments(const js::Value &v);
+
+
+    inline const js::Value &callObjArg(uintN i) const;
+    inline js::Value &callObjArg(uintN i);
+
+
+    inline const js::Value &callObjVar(uintN i) const;
+    inline js::Value &callObjVar(uintN i);
+
+
+
+
+
+    static const uint32 JSSLOT_DATE_UTC_TIME = 0;
+
+
+
+
+
+
+    static const uint32 JSSLOT_DATE_COMPONENTS_START = 1;
+
+    static const uint32 JSSLOT_DATE_LOCAL_TIME = 1;
+    static const uint32 JSSLOT_DATE_LOCAL_YEAR = 2;
+    static const uint32 JSSLOT_DATE_LOCAL_MONTH = 3;
+    static const uint32 JSSLOT_DATE_LOCAL_DATE = 4;
+    static const uint32 JSSLOT_DATE_LOCAL_DAY = 5;
+    static const uint32 JSSLOT_DATE_LOCAL_HOURS = 6;
+    static const uint32 JSSLOT_DATE_LOCAL_MINUTES = 7;
+    static const uint32 JSSLOT_DATE_LOCAL_SECONDS = 8;
+
+    static const uint32 DATE_CLASS_RESERVED_SLOTS = 9;
+
+    inline const js::Value &getDateUTCTime() const;
+    inline void setDateUTCTime(const js::Value &pthis);
+
+
+
+
+
+  private:
+    friend struct JSFunction;
+    friend class js::mjit::Compiler;
+
+
+
+
+
+    static const uint32 JSSLOT_FLAT_CLOSURE_UPVARS = 0;
+
+
+
+
+
+
+    static const uint32 JSSLOT_FUN_METHOD_ATOM = 0;
+    static const uint32 JSSLOT_FUN_METHOD_OBJ = 1;
+
+    static const uint32 JSSLOT_BOUND_FUNCTION_THIS = 0;
+    static const uint32 JSSLOT_BOUND_FUNCTION_ARGS_COUNT = 1;
+
+  public:
+    static const uint32 FUN_CLASS_RESERVED_SLOTS = 2;
+
+    inline JSFunction *getFunctionPrivate() const;
+
+    inline js::Value *getFlatClosureUpvars() const;
+    inline js::Value getFlatClosureUpvar(uint32 i) const;
+    inline js::Value &getFlatClosureUpvar(uint32 i);
+    inline void setFlatClosureUpvars(js::Value *upvars);
+
+    inline bool hasMethodObj(const JSObject& obj) const;
+    inline void setMethodObj(JSObject& obj);
+
+    inline bool initBoundFunction(JSContext *cx, const js::Value &thisArg,
+                                  const js::Value *args, uintN argslen);
+
+    inline JSObject *getBoundFunctionTarget() const;
+    inline const js::Value &getBoundFunctionThis() const;
+    inline const js::Value *getBoundFunctionArguments(uintN &argslen) const;
+
+
+
+
+
+  private:
+    static const uint32 JSSLOT_REGEXP_LAST_INDEX = 0;
+
+  public:
+    static const uint32 REGEXP_CLASS_RESERVED_SLOTS = 1;
+
+    inline const js::Value &getRegExpLastIndex() const;
+    inline void setRegExpLastIndex(const js::Value &v);
+    inline void setRegExpLastIndex(jsdouble d);
+    inline void zeroRegExpLastIndex();
+
+
+
+
+
+    inline js::NativeIterator *getNativeIterator() const;
+    inline void setNativeIterator(js::NativeIterator *);
+
+
+
+
+
+    inline JSScript *getScript() const;
+# 1073 "jsobj.h"
+  private:
+    static const uint32 JSSLOT_NAME_PREFIX = 0;
+    static const uint32 JSSLOT_NAME_URI = 1;
+
+    static const uint32 JSSLOT_NAMESPACE_DECLARED = 2;
+
+    static const uint32 JSSLOT_QNAME_LOCAL_NAME = 2;
+
+  public:
+    static const uint32 NAMESPACE_CLASS_RESERVED_SLOTS = 3;
+    static const uint32 QNAME_CLASS_RESERVED_SLOTS = 3;
+
+    inline JSLinearString *getNamePrefix() const;
+    inline jsval getNamePrefixVal() const;
+    inline void setNamePrefix(JSLinearString *prefix);
+    inline void clearNamePrefix();
+
+    inline JSLinearString *getNameURI() const;
+    inline jsval getNameURIVal() const;
+    inline void setNameURI(JSLinearString *uri);
+
+    inline jsval getNamespaceDeclared() const;
+    inline void setNamespaceDeclared(jsval decl);
+
+    inline JSLinearString *getQNameLocalName() const;
+    inline jsval getQNameLocalNameVal() const;
+    inline void setQNameLocalName(JSLinearString *name);
+
+
+
+
+
+    inline js::JSProxyHandler *getProxyHandler() const;
+    inline const js::Value &getProxyPrivate() const;
+    inline void setProxyPrivate(const js::Value &priv);
+    inline const js::Value &getProxyExtra() const;
+    inline void setProxyExtra(const js::Value &extra);
+
+
+
+
+    inline JSObject *getWithThis() const;
+    inline void setWithThis(JSObject *thisp);
+
+
+
+
+    inline bool isCallable();
+
+
+    void init(JSContext *cx, js::Class *aclasp, JSObject *proto, JSObject *parent,
+              void *priv, bool useHoles);
+
+    inline void finish(JSContext *cx);
+    __attribute__((always_inline)) inline void finalize(JSContext *cx);
+
+
+
+
+
+    inline bool initSharingEmptyShape(JSContext *cx,
+                                      js::Class *clasp,
+                                      JSObject *proto,
+                                      JSObject *parent,
+                                      void *priv,
+                                                             unsigned kind);
+
+    inline bool hasSlotsArray() const;
+
+
+    inline void freeSlotsArray(JSContext *cx);
+
+
+    inline void revertToFixedSlots(JSContext *cx);
+
+    inline bool hasProperty(JSContext *cx, jsid id, bool *foundp, uintN flags = 0);
+# 1159 "jsobj.h"
+    bool allocSlot(JSContext *cx, uint32 *slotp);
+    bool freeSlot(JSContext *cx, uint32 slot);
+
+  public:
+    bool reportReadOnly(JSContext* cx, jsid id, uintN report = 0x0);
+    bool reportNotConfigurable(JSContext* cx, jsid id, uintN report = 0x0);
+    bool reportNotExtensible(JSContext *cx, uintN report = 0x0);
+
+  private:
+    js::Shape *getChildProperty(JSContext *cx, js::Shape *parent, js::Shape &child);
+# 1177 "jsobj.h"
+    const js::Shape *addPropertyInternal(JSContext *cx, jsid id,
+                                         js::PropertyOp getter, js::StrictPropertyOp setter,
+                                         uint32 slot, uintN attrs,
+                                         uintN flags, intN shortid,
+                                         js::Shape **spp);
+
+    bool toDictionaryMode(JSContext *cx);
+
+  public:
+
+    const js::Shape *addProperty(JSContext *cx, jsid id,
+                                 js::PropertyOp getter, js::StrictPropertyOp setter,
+                                 uint32 slot, uintN attrs,
+                                 uintN flags, intN shortid);
+
+
+    const js::Shape *addDataProperty(JSContext *cx, jsid id, uint32 slot, uintN attrs) {
+        ((void) 0);
+        return addProperty(cx, id, __null, __null, slot, attrs, 0, 0);
+    }
+
+
+    const js::Shape *putProperty(JSContext *cx, jsid id,
+                                 js::PropertyOp getter, js::StrictPropertyOp setter,
+                                 uint32 slot, uintN attrs,
+                                 uintN flags, intN shortid);
+
+
+    const js::Shape *changeProperty(JSContext *cx, const js::Shape *shape, uintN attrs, uintN mask,
+                                    js::PropertyOp getter, js::StrictPropertyOp setter);
+
+
+    bool removeProperty(JSContext *cx, jsid id);
+
+
+    void clear(JSContext *cx);
+
+    JSBool lookupProperty(JSContext *cx, jsid id, JSObject **objp, JSProperty **propp) {
+        js::LookupPropOp op = getOps()->lookupProperty;
+        return (op ? op : js_LookupProperty)(cx, this, id, objp, propp);
+    }
+
+    JSBool defineProperty(JSContext *cx, jsid id, const js::Value &value,
+                          js::PropertyOp getter = js::PropertyStub,
+                          js::StrictPropertyOp setter = js::StrictPropertyStub,
+                          uintN attrs = 0x01) {
+        js::DefinePropOp op = getOps()->defineProperty;
+        return (op ? op : js_DefineProperty)(cx, this, id, &value, getter, setter, attrs);
+    }
+
+    JSBool getProperty(JSContext *cx, JSObject *receiver, jsid id, js::Value *vp) {
+        js::PropertyIdOp op = getOps()->getProperty;
+        return (op ? op : (js::PropertyIdOp)js_GetProperty)(cx, this, receiver, id, vp);
+    }
+
+    JSBool getProperty(JSContext *cx, jsid id, js::Value *vp) {
+        return getProperty(cx, this, id, vp);
+    }
+
+    JSBool setProperty(JSContext *cx, jsid id, js::Value *vp, JSBool strict) {
+        js::StrictPropertyIdOp op = getOps()->setProperty;
+        return (op ? op : js_SetProperty)(cx, this, id, vp, strict);
+    }
+
+    JSBool getAttributes(JSContext *cx, jsid id, uintN *attrsp) {
+        js::AttributesOp op = getOps()->getAttributes;
+        return (op ? op : js_GetAttributes)(cx, this, id, attrsp);
+    }
+
+    JSBool setAttributes(JSContext *cx, jsid id, uintN *attrsp) {
+        js::AttributesOp op = getOps()->setAttributes;
+        return (op ? op : js_SetAttributes)(cx, this, id, attrsp);
+    }
+
+    JSBool deleteProperty(JSContext *cx, jsid id, js::Value *rval, JSBool strict) {
+        js::DeleteIdOp op = getOps()->deleteProperty;
+        return (op ? op : js_DeleteProperty)(cx, this, id, rval, strict);
+    }
+
+    JSBool enumerate(JSContext *cx, JSIterateOp iterop, js::Value *statep, jsid *idp) {
+        js::NewEnumerateOp op = getOps()->enumerate;
+        return (op ? op : js_Enumerate)(cx, this, iterop, statep, idp);
+    }
+
+    JSType typeOf(JSContext *cx) {
+        js::TypeOfOp op = getOps()->typeOf;
+        return (op ? op : js_TypeOf)(cx, this);
+    }
+
+
+    JSObject *thisObject(JSContext *cx) {
+        JSObjectOp op = getOps()->thisObject;
+        return op ? op(cx, this) : this;
+    }
+
+    static bool thisObject(JSContext *cx, const js::Value &v, js::Value *vp);
+
+    inline JSCompartment *getCompartment() const;
+
+    inline JSObject *getThrowTypeError() const;
+
+    __attribute__((visibility ("default"))) JSObject * clone(JSContext *cx, JSObject *proto, JSObject *parent);
+    __attribute__((visibility ("default"))) bool copyPropertiesFrom(JSContext *cx, JSObject *obj);
+    bool swap(JSContext *cx, JSObject *other);
+
+    const js::Shape *defineBlockVariable(JSContext *cx, jsid id, intN index);
+
+    inline bool canHaveMethodBarrier() const;
+
+    inline bool isArguments() const;
+    inline bool isNormalArguments() const;
+    inline bool isStrictArguments() const;
+    inline bool isArray() const;
+    inline bool isDenseArray() const;
+    inline bool isSlowArray() const;
+    inline bool isNumber() const;
+    inline bool isBoolean() const;
+    inline bool isString() const;
+    inline bool isPrimitive() const;
+    inline bool isDate() const;
+    inline bool isFunction() const;
+    inline bool isObject() const;
+    inline bool isWith() const;
+    inline bool isBlock() const;
+    inline bool isStaticBlock() const;
+    inline bool isClonedBlock() const;
+    inline bool isCall() const;
+    inline bool isRegExp() const;
+    inline bool isScript() const;
+    inline bool isXML() const;
+    inline bool isXMLId() const;
+    inline bool isNamespace() const;
+    inline bool isQName() const;
+
+    inline bool isProxy() const;
+    inline bool isObjectProxy() const;
+    inline bool isFunctionProxy() const;
+
+    __attribute__((visibility ("default"))) bool isWrapper() const;
+    __attribute__((visibility ("default"))) JSObject * unwrap(uintN *flagsp = __null);
+
+    inline void initArrayClass();
+};
+
+
+typedef int js_static_assert37[(sizeof(JSObject) % sizeof(js::Value) == 0) ? 1 : -1];
+
+inline js::Value*
+JSObject::fixedSlots() const {
+    return (js::Value*) (jsuword(this) + sizeof(JSObject));
+}
+
+inline
+
+# 1329 "jsobj.h"
+       bool
+JSObject::hasSlotsArray() const { return this->slots != fixedSlots(); }
+
+             inline size_t
+JSObject::getFixedSlotOffset(size_t slot) {
+    return sizeof(JSObject) + (slot * sizeof(js::Value));
+}
+
+struct JSObject_Slots2 : JSObject { js::Value fslots[2]; };
+struct JSObject_Slots4 : JSObject { js::Value fslots[4]; };
+struct JSObject_Slots8 : JSObject { js::Value fslots[8]; };
+struct JSObject_Slots12 : JSObject { js::Value fslots[12]; };
+struct JSObject_Slots16 : JSObject { js::Value fslots[16]; };
+# 1360 "jsobj.h"
+inline void
+OBJ_TO_INNER_OBJECT(JSContext *cx, JSObject *&obj)
+{
+    if (JSObjectOp op = obj->getClass()->ext.innerObject)
+        obj = op(cx, obj);
+}
+
+inline void
+OBJ_TO_OUTER_OBJECT(JSContext *cx, JSObject *&obj)
+{
+    if (JSObjectOp op = obj->getClass()->ext.outerObject)
+        obj = op(cx, obj);
+}
+
+class JSValueArray {
+  public:
+    jsval *array;
+    size_t length;
+
+    JSValueArray(jsval *v, size_t c) : array(v), length(c) {}
+};
+
+class ValueArray {
+  public:
+    js::Value *array;
+    size_t length;
+
+    ValueArray(js::Value *v, size_t c) : array(v), length(c) {}
+};
+
+extern js::Class js_ObjectClass;
+extern js::Class js_WithClass;
+extern js::Class js_BlockClass;
+
+inline bool JSObject::isObject() const { return getClass() == &js_ObjectClass; }
+inline bool JSObject::isWith() const { return getClass() == &js_WithClass; }
+inline bool JSObject::isBlock() const { return getClass() == &js_BlockClass; }
+# 1413 "jsobj.h"
+static const uint32 JSSLOT_BLOCK_DEPTH = 0;
+static const uint32 JSSLOT_BLOCK_FIRST_FREE_SLOT = JSSLOT_BLOCK_DEPTH + 1;
+
+inline
+
+# 1416 "jsobj.h"
+       bool
+JSObject::isStaticBlock() const
+{
+    return isBlock() && !getProto();
+}
+
+inline
+
+# 1422 "jsobj.h"
+       bool
+JSObject::isClonedBlock() const
+{
+    return isBlock() && !!getProto();
+}
+
+static const uint32 JSSLOT_WITH_THIS = 1;
+# 1445 "jsobj.h"
+extern JSObject *
+js_NewWithObject(JSContext *cx, JSObject *proto, JSObject *parent, jsint depth);
+
+inline JSObject *
+js_UnwrapWithObject(JSContext *cx, JSObject *withobj)
+{
+    ((void) 0);
+    return withobj->getProto();
+}
+
+
+
+
+
+
+
+extern JSObject *
+js_NewBlockObject(JSContext *cx);
+
+extern JSObject *
+js_CloneBlockObject(JSContext *cx, JSObject *proto, JSStackFrame *fp);
+
+extern JSBool
+js_PutBlockObject(JSContext *cx, JSBool normalUnwind);
+
+JSBool
+js_XDRBlockObject(JSXDRState *xdr, JSObject **objp);
+
+struct JSSharpObjectMap {
+    jsrefcount depth;
+    jsatomid sharpgen;
+    JSHashTable *table;
+};
+# 1488 "jsobj.h"
+extern JSHashEntry *
+js_EnterSharpObject(JSContext *cx, JSObject *obj, JSIdArray **idap,
+                    jschar **sp);
+
+extern void
+js_LeaveSharpObject(JSContext *cx, JSIdArray **idap);
+
+
+
+
+
+extern void
+js_TraceSharpMap(JSTracer *trc, JSSharpObjectMap *map);
+
+extern JSBool
+js_HasOwnPropertyHelper(JSContext *cx, js::LookupPropOp lookup, uintN argc,
+                        js::Value *vp);
+
+extern JSBool
+js_HasOwnProperty(JSContext *cx, js::LookupPropOp lookup, JSObject *obj, jsid id,
+                  JSObject **objp, JSProperty **propp);
+
+extern JSBool
+js_NewPropertyDescriptorObject(JSContext *cx, jsid id, uintN attrs,
+                               const js::Value &getter, const js::Value &setter,
+                               const js::Value &value, js::Value *vp);
+
+extern JSBool
+js_PropertyIsEnumerable(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
+
+
+__attribute__((visibility ("default"))) JSBool js_obj_defineGetter(JSContext *cx, uintN argc, js::Value *vp);
+__attribute__((visibility ("default"))) JSBool js_obj_defineSetter(JSContext *cx, uintN argc, js::Value *vp);
+
+
+extern JSObject *
+js_InitObjectClass(JSContext *cx, JSObject *obj);
+
+namespace js {
+JSObject *
+DefineConstructorAndPrototype(JSContext *cx, JSObject *obj, JSProtoKey key, JSAtom *atom,
+                              JSObject *protoProto, Class *clasp,
+                              Native constructor, uintN nargs,
+                              JSPropertySpec *ps, JSFunctionSpec *fs,
+                              JSPropertySpec *static_ps, JSFunctionSpec *static_fs);
+}
+
+extern JSObject *
+js_InitClass(JSContext *cx, JSObject *obj, JSObject *parent_proto,
+             js::Class *clasp, js::Native constructor, uintN nargs,
+             JSPropertySpec *ps, JSFunctionSpec *fs,
+             JSPropertySpec *static_ps, JSFunctionSpec *static_fs);
+
+
+
+
+extern const char js_watch_str[];
+extern const char js_unwatch_str[];
+extern const char js_hasOwnProperty_str[];
+extern const char js_isPrototypeOf_str[];
+extern const char js_propertyIsEnumerable_str[];
+
+
+extern const char js_defineGetter_str[];
+extern const char js_defineSetter_str[];
+extern const char js_lookupGetter_str[];
+extern const char js_lookupSetter_str[];
+
+
+extern JSBool
+js_PopulateObject(JSContext *cx, JSObject *newborn, JSObject *props);
+
+
+
+
+extern JSBool
+js_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key,
+                  JSObject **objp);
+
+extern JSBool
+js_SetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key,
+                  JSObject *cobj, JSObject *prototype);
+
+
+
+
+
+extern JSBool
+js_FindClassObject(JSContext *cx, JSObject *start, JSProtoKey key,
+                   js::Value *vp, js::Class *clasp = __null);
+
+extern JSObject *
+js_ConstructObject(JSContext *cx, js::Class *clasp, JSObject *proto,
+                   JSObject *parent, uintN argc, js::Value *argv);
+
+
+
+extern JSObject *
+js_CreateThisForFunctionWithProto(JSContext *cx, JSObject *callee, JSObject *proto);
+
+
+extern JSObject *
+js_CreateThisForFunction(JSContext *cx, JSObject *callee);
+
+
+extern JSObject *
+js_CreateThis(JSContext *cx, JSObject *callee);
+
+extern jsid
+js_CheckForStringIndex(jsid id);
+
+
+
+
+
+
+
+extern void
+js_PurgeScopeChainHelper(JSContext *cx, JSObject *obj, jsid id);
+
+inline void
+js_PurgeScopeChain(JSContext *cx, JSObject *obj, jsid id)
+{
+    if (obj->isDelegate())
+        js_PurgeScopeChainHelper(cx, obj, id);
+}
+
+
+
+
+
+extern const js::Shape *
+js_AddNativeProperty(JSContext *cx, JSObject *obj, jsid id,
+                     js::PropertyOp getter, js::StrictPropertyOp setter, uint32 slot,
+                     uintN attrs, uintN flags, intN shortid);
+
+
+
+
+
+
+extern const js::Shape *
+js_ChangeNativePropertyAttrs(JSContext *cx, JSObject *obj,
+                             const js::Shape *shape, uintN attrs, uintN mask,
+                             js::PropertyOp getter, js::StrictPropertyOp setter);
+
+extern JSBool
+js_DefineOwnProperty(JSContext *cx, JSObject *obj, jsid id,
+                     const js::Value &descriptor, JSBool *bp);
+
+
+
+
+const uintN JSDNP_CACHE_RESULT = 1;
+const uintN JSDNP_DONT_PURGE = 2;
+const uintN JSDNP_SET_METHOD = 4;
+
+
+const uintN JSDNP_UNQUALIFIED = 8;
+# 1655 "jsobj.h"
+extern JSBool
+js_DefineNativeProperty(JSContext *cx, JSObject *obj, jsid id, const js::Value &value,
+                        js::PropertyOp getter, js::StrictPropertyOp setter, uintN attrs,
+                        uintN flags, intN shortid, JSProperty **propp,
+                        uintN defineHow = 0);
+
+
+
+
+
+
+extern int
+js_LookupPropertyWithFlags(JSContext *cx, JSObject *obj, jsid id, uintN flags,
+                           JSObject **objp, JSProperty **propp);
+
+
+extern __attribute__((visibility ("default"))) js::Class js_CallClass;
+extern __attribute__((visibility ("default"))) js::Class js_DeclEnvClass;
+
+namespace js {
+
+
+
+
+
+
+static inline
+
+# 1681 "jsobj.h"
+              bool
+IsCacheableNonGlobalScope(JSObject *obj)
+{
+    ((void) 0);
+
+    js::Class *clasp = obj->getClass();
+    bool cacheable = (clasp == &js_CallClass ||
+                      clasp == &js_BlockClass ||
+                      clasp == &js_DeclEnvClass);
+
+    ((void) 0);
+    return cacheable;
+}
+
+}
+
+
+
+
+extern js::PropertyCacheEntry *
+js_FindPropertyHelper(JSContext *cx, jsid id, JSBool cacheResult,
+                      JSObject **objp, JSObject **pobjp, JSProperty **propp);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+js_FindProperty(JSContext *cx, jsid id, JSObject **objp, JSObject **pobjp,
+                JSProperty **propp);
+
+extern JSObject *
+js_FindIdentifierBase(JSContext *cx, JSObject *scopeChain, jsid id);
+
+extern JSObject *
+js_FindVariableScope(JSContext *cx, JSFunction **funp);
+# 1731 "jsobj.h"
+const uintN JSGET_CACHE_RESULT = 1;
+const uintN JSGET_METHOD_BARRIER = 0;
+const uintN JSGET_NO_METHOD_BARRIER = 2;
+
+
+
+
+
+
+
+extern JSBool
+js_NativeGet(JSContext *cx, JSObject *obj, JSObject *pobj, const js::Shape *shape, uintN getHow,
+             js::Value *vp);
+
+extern JSBool
+js_NativeSet(JSContext *cx, JSObject *obj, const js::Shape *shape, bool added,
+             bool strict, js::Value *vp);
+
+extern JSBool
+js_GetPropertyHelper(JSContext *cx, JSObject *obj, jsid id, uint32 getHow, js::Value *vp);
+
+extern
+
+# 1752 "jsobj.h"
+       bool
+js_GetPropertyHelperWithShape(JSContext *cx, JSObject *obj, JSObject *receiver, jsid id,
+                              uint32 getHow, js::Value *vp,
+                              const js::Shape **shapeOut, JSObject **holderOut);
+
+extern JSBool
+js_GetOwnPropertyDescriptor(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
+
+extern JSBool
+js_GetMethod(JSContext *cx, JSObject *obj, jsid id, uintN getHow, js::Value *vp);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) bool
+js_CheckUndeclaredVarAssignment(JSContext *cx, JSString *propname);
+
+extern JSBool
+js_SetPropertyHelper(JSContext *cx, JSObject *obj, jsid id, uintN defineHow,
+                     js::Value *vp, JSBool strict);
+
+
+
+
+
+extern JSBool
+js_SetNativeAttributes(JSContext *cx, JSObject *obj, js::Shape *shape,
+                       uintN attrs);
+
+namespace js {
+
+
+
+
+
+extern JSObject *
+HasNativeMethod(JSObject *obj, jsid methodid, Native native);
+
+extern
+
+# 1793 "jsobj.h"
+       bool
+DefaultValue(JSContext *cx, JSObject *obj, JSType hint, Value *vp);
+
+extern JSBool
+CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
+            js::Value *vp, uintN *attrsp);
+
+}
+
+extern
+
+# 1802 "jsobj.h"
+       bool
+js_IsDelegate(JSContext *cx, JSObject *obj, const js::Value &v);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+js_GetClassPrototype(JSContext *cx, JSObject *scope, JSProtoKey protoKey,
+                     JSObject **protop, js::Class *clasp = __null);
+
+extern JSBool
+js_SetClassPrototype(JSContext *cx, JSObject *ctor, JSObject *proto,
+                     uintN attrs);
+
+
+
+
+
+extern JSBool
+js_PrimitiveToObject(JSContext *cx, js::Value *vp);
+
+
+
+
+
+extern JSBool
+js_ValueToObjectOrNull(JSContext *cx, const js::Value &v, JSObject **objp);
+
+namespace js {
+
+
+
+
+
+extern JSObject *
+ToObjectSlow(JSContext *cx, js::Value *vp);
+
+__attribute__((always_inline)) inline JSObject *
+ToObject(JSContext *cx, js::Value *vp)
+{
+    if (vp->isObject())
+        return &vp->toObject();
+    return ToObjectSlow(cx, vp);
+}
+
+}
+
+
+
+
+
+extern JSObject *
+js_ValueToNonNullObject(JSContext *cx, const js::Value &v);
+
+extern JSBool
+js_TryValueOf(JSContext *cx, JSObject *obj, JSType type, js::Value *rval);
+
+extern JSBool
+js_TryMethod(JSContext *cx, JSObject *obj, JSAtom *atom,
+             uintN argc, js::Value *argv, js::Value *rval);
+
+extern JSBool
+js_XDRObject(JSXDRState *xdr, JSObject **objp);
+
+extern void
+js_TraceObject(JSTracer *trc, JSObject *obj);
+
+extern void
+js_PrintObjectSlotName(JSTracer *trc, char *buf, size_t bufsize);
+
+extern void
+js_ClearNative(JSContext *cx, JSObject *obj);
+
+extern
+
+# 1876 "jsobj.h"
+       bool
+js_GetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, js::Value *vp);
+
+extern
+
+# 1879 "jsobj.h"
+       bool
+js_SetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, const js::Value &v);
+
+extern JSBool
+js_CheckPrincipalsAccess(JSContext *cx, JSObject *scopeobj,
+                         JSPrincipals *principals, JSAtom *caller);
+
+
+extern JSBool
+js_CheckContentSecurityPolicy(JSContext *cx, JSObject *scopeObj);
+
+
+extern const char *
+js_ComputeFilename(JSContext *cx, JSStackFrame *caller,
+                   JSPrincipals *principals, uintN *linenop);
+
+extern JSBool
+js_ReportGetterOnlyAssignment(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSBool
+js_GetterOnlyPropertyStub(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp);
+# 1911 "jsobj.h"
+extern uintN
+js_InferFlags(JSContext *cx, uintN defaultFlags);
+
+
+JSBool
+js_Object(JSContext *cx, uintN argc, js::Value *vp);
+
+
+namespace js {
+
+extern
+
+# 1921 "jsobj.h"
+       bool
+SetProto(JSContext *cx, JSObject *obj, JSObject *proto, bool checkForCycles);
+
+extern JSString *
+obj_toStringHelper(JSContext *cx, JSObject *obj);
+
+enum EvalType { INDIRECT_EVAL, DIRECT_EVAL };
+# 1939 "jsobj.h"
+extern
+
+# 1939 "jsobj.h"
+       bool
+EvalKernel(JSContext *cx, uintN argc, js::Value *vp, EvalType evalType, JSStackFrame *caller,
+           JSObject *scopeobj);
+
+extern __attribute__((visibility ("default"))) bool
+IsBuiltinEvalFunction(JSFunction *fun);
+
+}
+# 57 "jsstr.h" 2
+# 69 "jsstr.h"
+enum {
+    UNIT_STRING_LIMIT = 256U,
+    SMALL_CHAR_LIMIT = 128U,
+    NUM_SMALL_CHARS = 64U,
+    INT_STRING_LIMIT = 256U,
+    NUM_HUNDRED_STRINGS = 156U
+};
+
+
+extern jschar *
+js_GetDependentStringChars(JSString *str);
+
+extern JSString *
+js_ConcatStrings(JSContext *cx, JSString *left, JSString *right);
+
+typedef int js_static_assert38[((8 * 8) >= 32) ? 1 : -1];
+
+struct JSRopeBufferInfo {
+
+    size_t capacity;
+};
+
+
+namespace js { namespace mjit {
+    class Compiler;
+}}
+
+struct JSLinearString;
+# 130 "jsstr.h"
+struct JSString
+{
+    friend class js::TraceRecorder;
+    friend class js::mjit::Compiler;
+
+    friend JSAtom *js_AtomizeString(JSContext *cx, JSString *str, uintN flags);
+
+
+
+
+
+    size_t lengthAndFlags;
+    union {
+        const jschar *chars;
+        JSString *left;
+    } u;
+    union {
+        jschar inlineStorage[4];
+        struct {
+            union {
+                JSString *right;
+                JSString *base;
+                size_t capacity;
+            };
+            union {
+                JSString *parent;
+                size_t reserved;
+            };
+        } s;
+        size_t externalStringType;
+    };
+# 174 "jsstr.h"
+    static const size_t TYPE_FLAGS_MASK = (((JSUint32)1 << (4)) - 1);
+    static const size_t LENGTH_SHIFT = 4;
+
+    static const size_t TYPE_MASK = (((JSUint32)1 << (2)) - 1);
+    static const size_t FLAT = 0x0;
+    static const size_t DEPENDENT = 0x1;
+    static const size_t ROPE = 0x2;
+
+
+    static const size_t DEPENDENT_BIT = ((JSUint32)1 << (0));
+    static const size_t ROPE_BIT = ((JSUint32)1 << (1));
+
+    static const size_t ATOMIZED = ((JSUint32)1 << (2));
+    static const size_t EXTENSIBLE = ((JSUint32)1 << (3));
+
+
+    size_t buildLengthAndFlags(size_t length, size_t flags) {
+        return (length << LENGTH_SHIFT) | flags;
+    }
+
+    inline js::gc::Cell *asCell() {
+        return reinterpret_cast<js::gc::Cell *>(this);
+    }
+
+    inline js::gc::FreeCell *asFreeCell() {
+        return reinterpret_cast<js::gc::FreeCell *>(this);
+    }
+
+
+
+
+
+    static const size_t MAX_LENGTH = (1 << 28) - 1;
+
+    __attribute__((always_inline)) inline bool isDependent() const {
+        return lengthAndFlags & DEPENDENT_BIT;
+    }
+
+    __attribute__((always_inline)) inline bool isFlat() const {
+        return (lengthAndFlags & TYPE_MASK) == FLAT;
+    }
+
+    __attribute__((always_inline)) inline bool isExtensible() const {
+        ((void) 0);
+        return lengthAndFlags & EXTENSIBLE;
+    }
+
+    __attribute__((always_inline)) inline bool isAtomized() const {
+        ((void) 0);
+        return lengthAndFlags & ATOMIZED;
+    }
+
+    __attribute__((always_inline)) inline bool isRope() const {
+        return lengthAndFlags & ROPE_BIT;
+    }
+
+    __attribute__((always_inline)) inline size_t length() const {
+        return lengthAndFlags >> LENGTH_SHIFT;
+    }
+
+    __attribute__((always_inline)) inline bool empty() const {
+        return lengthAndFlags <= TYPE_FLAGS_MASK;
+    }
+
+
+    __attribute__((always_inline)) inline const jschar *getChars(JSContext *cx) {
+        if (isRope())
+            return flatten(cx);
+        return nonRopeChars();
+    }
+
+
+    __attribute__((always_inline)) inline const jschar *getCharsZ(JSContext *cx) {
+        if (!isFlat())
+            return undepend(cx);
+        return flatChars();
+    }
+
+    __attribute__((always_inline)) inline void initFlatNotTerminated(jschar *chars, size_t length) {
+        ((void) 0);
+        ((void) 0);
+        lengthAndFlags = buildLengthAndFlags(length, FLAT);
+        u.chars = chars;
+    }
+
+
+    __attribute__((always_inline)) inline void initFlat(jschar *chars, size_t length) {
+        initFlatNotTerminated(chars, length);
+        ((void) 0);
+    }
+
+    __attribute__((always_inline)) inline void initShortString(const jschar *chars, size_t length) {
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+        lengthAndFlags = buildLengthAndFlags(length, FLAT);
+        u.chars = chars;
+    }
+
+    __attribute__((always_inline)) inline void initFlatExtensible(jschar *chars, size_t length, size_t cap) {
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+        lengthAndFlags = buildLengthAndFlags(length, FLAT | EXTENSIBLE);
+        u.chars = chars;
+        s.capacity = cap;
+    }
+
+    __attribute__((always_inline)) inline JSFlatString *assertIsFlat() {
+        ((void) 0);
+        return reinterpret_cast<JSFlatString *>(this);
+    }
+
+    __attribute__((always_inline)) inline const jschar *flatChars() const {
+        ((void) 0);
+        return u.chars;
+    }
+
+    __attribute__((always_inline)) inline size_t flatLength() const {
+        ((void) 0);
+        return length();
+    }
+
+    inline void flatSetAtomized() {
+        ((void) 0);
+        ((void) 0);
+        lengthAndFlags |= ATOMIZED;
+    }
+
+    inline void flatClearExtensible() {
+
+
+
+
+        ((void) 0);
+        if (lengthAndFlags & EXTENSIBLE)
+            lengthAndFlags &= ~EXTENSIBLE;
+    }
+
+
+
+
+
+    inline void initDependent(JSString *base, const jschar *chars, size_t length) {
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+        lengthAndFlags = buildLengthAndFlags(length, DEPENDENT);
+        u.chars = chars;
+        s.base = base;
+    }
+
+    inline JSLinearString *dependentBase() const {
+        ((void) 0);
+        return s.base->assertIsLinear();
+    }
+
+    __attribute__((always_inline)) inline const jschar *dependentChars() {
+        ((void) 0);
+        return u.chars;
+    }
+
+    inline size_t dependentLength() const {
+        ((void) 0);
+        return length();
+    }
+
+    const jschar *undepend(JSContext *cx);
+
+    const jschar *nonRopeChars() const {
+        ((void) 0);
+        return u.chars;
+    }
+
+
+    inline void initRopeNode(JSString *left, JSString *right, size_t length) {
+        ((void) 0);
+        lengthAndFlags = buildLengthAndFlags(length, ROPE);
+        u.left = left;
+        s.right = right;
+    }
+
+    inline JSString *ropeLeft() const {
+        ((void) 0);
+        return u.left;
+    }
+
+    inline JSString *ropeRight() const {
+        ((void) 0);
+        return s.right;
+    }
+
+    inline void finishTraversalConversion(JSString *base, const jschar *baseBegin, const jschar *end) {
+        ((void) 0);
+        lengthAndFlags = buildLengthAndFlags(end - u.chars, DEPENDENT);
+        s.base = base;
+    }
+
+    const jschar *flatten(JSContext *maybecx);
+
+    JSLinearString *ensureLinear(JSContext *cx) {
+        if (isRope() && !flatten(cx))
+            return __null;
+        return reinterpret_cast<JSLinearString *>(this);
+    }
+
+    bool isLinear() const {
+        return !isRope();
+    }
+
+    JSLinearString *assertIsLinear() {
+        ((void) 0);
+        return reinterpret_cast<JSLinearString *>(this);
+    }
+
+    typedef uint8 SmallChar;
+
+    static inline bool fitsInSmallChar(jschar c) {
+
+        return c < SMALL_CHAR_LIMIT && toSmallChar[c] != INVALID_SMALL_CHAR;
+
+
+
+    }
+
+    static inline bool isUnitString(void *ptr) {
+
+        jsuword delta = reinterpret_cast<jsuword>(ptr) -
+                        reinterpret_cast<jsuword>(unitStringTable);
+        if (delta >= UNIT_STRING_LIMIT * sizeof(JSString))
+            return false;
+
+
+        ((void) 0);
+        return true;
+
+
+
+    }
+
+    static inline bool isLength2String(void *ptr) {
+
+        jsuword delta = reinterpret_cast<jsuword>(ptr) -
+                        reinterpret_cast<jsuword>(length2StringTable);
+        if (delta >= NUM_SMALL_CHARS * NUM_SMALL_CHARS * sizeof(JSString))
+            return false;
+
+
+        ((void) 0);
+        return true;
+
+
+
+    }
+
+    static inline bool isHundredString(void *ptr) {
+
+        jsuword delta = reinterpret_cast<jsuword>(ptr) -
+                        reinterpret_cast<jsuword>(hundredStringTable);
+        if (delta >= NUM_HUNDRED_STRINGS * sizeof(JSString))
+            return false;
+
+
+        ((void) 0);
+        return true;
+
+
+
+    }
+
+    static inline bool isStatic(void *ptr) {
+        return isUnitString(ptr) || isLength2String(ptr) || isHundredString(ptr);
+    }
+
+
+
+
+
+
+    static const SmallChar INVALID_SMALL_CHAR = -1;
+
+    static const jschar fromSmallChar[];
+    static const SmallChar toSmallChar[];
+    static const JSString unitStringTable[];
+    static const JSString length2StringTable[];
+    static const JSString hundredStringTable[];
+
+
+
+
+    static const JSString *const intStringTable[];
+
+
+    static JSFlatString *unitString(jschar c);
+    static JSLinearString *getUnitString(JSContext *cx, JSString *str, size_t index);
+    static JSFlatString *length2String(jschar c1, jschar c2);
+    static JSFlatString *length2String(uint32 i);
+    static JSFlatString *intString(jsint i);
+
+    static JSFlatString *lookupStaticString(const jschar *chars, size_t length);
+
+    __attribute__((always_inline)) inline void finalize(JSContext *cx);
+
+    static size_t offsetOfLengthAndFlags() {
+        return __builtin_offsetof (JSString, lengthAndFlags);
+    }
+
+    static size_t offsetOfChars() {
+        return __builtin_offsetof (JSString, u.chars);
+    }
+
+    static void staticAsserts() {
+        typedef int js_static_assert39[(((JSString::MAX_LENGTH << JSString::LENGTH_SHIFT) >> JSString::LENGTH_SHIFT) == JSString::MAX_LENGTH) ? 1 : -1]
+                                                                           ;
+    }
+};
+
+
+
+
+
+
+struct JSLinearString : JSString
+{
+    const jschar *chars() const { return JSString::nonRopeChars(); }
+};
+
+typedef int js_static_assert40[(sizeof(JSLinearString) == sizeof(JSString)) ? 1 : -1];
+
+
+
+
+
+struct JSFlatString : JSLinearString
+{
+    const jschar *charsZ() const { return chars(); }
+};
+
+typedef int js_static_assert41[(sizeof(JSFlatString) == sizeof(JSString)) ? 1 : -1];
+
+
+
+
+
+struct JSAtom : JSFlatString
+{
+};
+
+struct JSExternalString : JSString
+{
+    static const uintN TYPE_LIMIT = 8;
+    static JSStringFinalizeOp str_finalizers[TYPE_LIMIT];
+
+    static intN changeFinalizer(JSStringFinalizeOp oldop,
+                                JSStringFinalizeOp newop) {
+        for (uintN i = 0; i != (sizeof (str_finalizers) / sizeof (str_finalizers)[0]); i++) {
+            if (str_finalizers[i] == oldop) {
+                str_finalizers[i] = newop;
+                return intN(i);
+            }
+        }
+        return -1;
+    }
+
+    void finalize(JSContext *cx);
+    void finalize();
+};
+
+typedef int js_static_assert42[(sizeof(JSString) == sizeof(JSExternalString)) ? 1 : -1];
+
+
+
+
+
+
+class JSShortString : public js::gc::Cell
+{
+    JSString mHeader;
+    JSString mDummy;
+
+  public:
+
+
+
+
+
+    inline jschar *init(size_t length) {
+        ((void) 0);
+        mHeader.initShortString(mHeader.inlineStorage, length);
+        return mHeader.inlineStorage;
+    }
+
+    inline jschar *getInlineStorageBeforeInit() {
+        return mHeader.inlineStorage;
+    }
+
+    inline void initAtOffsetInBuffer(jschar *p, size_t length) {
+        ((void) 0);
+        mHeader.initShortString(p, length);
+    }
+
+    inline void resetLength(size_t length) {
+        mHeader.initShortString(mHeader.flatChars(), length);
+    }
+
+    inline JSString *header() {
+        return &mHeader;
+    }
+
+    static const size_t FREE_STRING_WORDS = 2;
+
+    static const size_t MAX_SHORT_STRING_LENGTH =
+            ((sizeof(JSString) + FREE_STRING_WORDS * sizeof(size_t)) / sizeof(jschar)) - 1;
+
+    static inline bool fitsIntoShortString(size_t length) {
+        return length <= MAX_SHORT_STRING_LENGTH;
+    }
+
+    __attribute__((always_inline)) inline void finalize(JSContext *cx);
+
+    static void staticAsserts() {
+        typedef int js_static_assert43[(__builtin_offsetof (JSString, inlineStorage) == sizeof(JSString) - JSShortString::FREE_STRING_WORDS * sizeof(void *)) ? 1 : -1]
+                                                                                              ;
+        typedef int js_static_assert44[(__builtin_offsetof (JSShortString, mDummy) == sizeof(JSString)) ? 1 : -1];
+        typedef int js_static_assert45[(__builtin_offsetof (JSString, inlineStorage) + sizeof(jschar) * (JSShortString::MAX_SHORT_STRING_LENGTH + 1) == sizeof(JSShortString)) ? 1 : -1]
+
+                                               ;
+    }
+};
+
+namespace js {
+
+class StringBuffer;
+# 616 "jsstr.h"
+class StringSegmentRange;
+class MutatingRopeSegmentRange;
+
+
+
+
+class RopeBuilder;
+
+}
+
+extern const jschar *
+js_GetStringChars(JSContext *cx, JSString *str);
+
+extern const jschar *
+js_UndependString(JSContext *cx, JSString *str);
+
+extern JSBool
+js_MakeStringImmutable(JSContext *cx, JSString *str);
+
+extern JSString *
+js_toLowerCase(JSContext *cx, JSString *str);
+
+extern JSString *
+js_toUpperCase(JSContext *cx, JSString *str);
+
+struct JSSubString {
+    size_t length;
+    const jschar *chars;
+};
+
+extern jschar js_empty_ucstr[];
+extern JSSubString js_EmptySubString;
+
+
+extern const uint8 js_X[];
+extern const uint8 js_Y[];
+extern const uint32 js_A[];
+
+
+typedef enum JSCharType {
+    JSCT_UNASSIGNED = 0,
+    JSCT_UPPERCASE_LETTER = 1,
+    JSCT_LOWERCASE_LETTER = 2,
+    JSCT_TITLECASE_LETTER = 3,
+    JSCT_MODIFIER_LETTER = 4,
+    JSCT_OTHER_LETTER = 5,
+    JSCT_NON_SPACING_MARK = 6,
+    JSCT_ENCLOSING_MARK = 7,
+    JSCT_COMBINING_SPACING_MARK = 8,
+    JSCT_DECIMAL_DIGIT_NUMBER = 9,
+    JSCT_LETTER_NUMBER = 10,
+    JSCT_OTHER_NUMBER = 11,
+    JSCT_SPACE_SEPARATOR = 12,
+    JSCT_LINE_SEPARATOR = 13,
+    JSCT_PARAGRAPH_SEPARATOR = 14,
+    JSCT_CONTROL = 15,
+    JSCT_FORMAT = 16,
+    JSCT_PRIVATE_USE = 18,
+    JSCT_SURROGATE = 19,
+    JSCT_DASH_PUNCTUATION = 20,
+    JSCT_START_PUNCTUATION = 21,
+    JSCT_END_PUNCTUATION = 22,
+    JSCT_CONNECTOR_PUNCTUATION = 23,
+    JSCT_OTHER_PUNCTUATION = 24,
+    JSCT_MATH_SYMBOL = 25,
+    JSCT_CURRENCY_SYMBOL = 26,
+    JSCT_MODIFIER_SYMBOL = 27,
+    JSCT_OTHER_SYMBOL = 28
+} JSCharType;
+# 737 "jsstr.h"
+extern const bool js_alnum[];
+# 760 "jsstr.h"
+const jschar BYTE_ORDER_MARK = 0xFEFF;
+const jschar NO_BREAK_SPACE = 0x00A0;
+
+static inline
+
+# 763 "jsstr.h"
+              bool
+JS_ISSPACE(jschar c)
+{
+    unsigned w = c;
+
+    if (w < 256)
+        return (w <= ' ' && (w == ' ' || (9 <= w && w <= 0xD))) || w == NO_BREAK_SPACE;
+
+    return w == BYTE_ORDER_MARK || ((js_A[js_Y[(js_X[(uint16)(w)>>6]<<6)|((w)&0x3F)]]) & 0x00070000) == 0x00040000;
+}
+# 797 "jsstr.h"
+extern js::Class js_StringClass;
+
+inline
+
+# 799 "jsstr.h"
+       bool
+JSObject::isString() const
+{
+    return getClass() == &js_StringClass;
+}
+
+extern JSObject *
+js_InitStringClass(JSContext *cx, JSObject *obj);
+
+extern const char js_escape_str[];
+extern const char js_unescape_str[];
+extern const char js_uneval_str[];
+extern const char js_decodeURI_str[];
+extern const char js_encodeURI_str[];
+extern const char js_decodeURIComponent_str[];
+extern const char js_encodeURIComponent_str[];
+
+
+extern JSFlatString *
+js_NewString(JSContext *cx, jschar *chars, size_t length);
+
+extern JSLinearString *
+js_NewDependentString(JSContext *cx, JSString *base, size_t start,
+                      size_t length);
+
+
+extern JSFlatString *
+js_NewStringCopyN(JSContext *cx, const jschar *s, size_t n);
+
+extern JSFlatString *
+js_NewStringCopyN(JSContext *cx, const char *s, size_t n);
+
+
+extern JSFlatString *
+js_NewStringCopyZ(JSContext *cx, const jschar *s);
+
+extern JSFlatString *
+js_NewStringCopyZ(JSContext *cx, const char *s);
+
+
+
+
+extern const char *
+js_ValueToPrintable(JSContext *cx, const js::Value &,
+                    JSAutoByteString *bytes, bool asSource = false);
+
+
+
+
+
+extern JSString *
+js_ValueToString(JSContext *cx, const js::Value &v);
+
+namespace js {
+
+
+
+
+
+
+static __attribute__((always_inline)) inline JSString *
+ValueToString_TestForStringInline(JSContext *cx, const Value &v)
+{
+    if (v.isString())
+        return v.toString();
+    return js_ValueToString(cx, v);
+}
+
+
+
+
+
+
+extern
+
+# 872 "jsstr.h"
+       bool
+ValueToStringBuffer(JSContext *cx, const Value &v, StringBuffer &sb);
+
+}
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSString *
+js_ValueToSource(JSContext *cx, const js::Value &v);
+
+
+
+
+
+inline uint32
+js_HashString(JSLinearString *str)
+{
+    const jschar *s = str->chars();
+    size_t n = str->length();
+    uint32 h;
+    for (h = 0; n; s++, n--)
+        h = (((h) << (4)) | ((h) >> (32 - (4)))) ^ *s;
+    return h;
+}
+
+namespace js {
+
+
+
+
+
+extern
+
+# 905 "jsstr.h"
+       bool
+EqualStrings(JSContext *cx, JSString *str1, JSString *str2, JSBool *result);
+
+
+extern
+
+# 909 "jsstr.h"
+       bool
+EqualStrings(JSLinearString *str1, JSLinearString *str2);
+
+
+
+
+
+extern
+
+# 916 "jsstr.h"
+       bool
+CompareStrings(JSContext *cx, JSString *str1, JSString *str2, int32 *result);
+
+
+
+
+extern
+
+# 922 "jsstr.h"
+       bool
+StringEqualsAscii(JSLinearString *str, const char *asciiBytes);
+
+}
+
+
+
+
+
+
+
+static const jsuint sBMHCharSetSize = 256;
+static const jsuint sBMHPatLenMax = 255;
+static const jsint sBMHBadPattern = -2;
+
+extern jsint
+js_BoyerMooreHorspool(const jschar *text, jsuint textlen,
+                      const jschar *pat, jsuint patlen);
+
+extern size_t
+js_strlen(const jschar *s);
+
+extern jschar *
+js_strchr(const jschar *s, jschar c);
+
+extern jschar *
+js_strchr_limit(const jschar *s, jschar c, const jschar *limit);
+
+
+
+inline void
+js_short_strncpy(jschar *dest, const jschar *src, size_t num)
+{
+
+
+
+
+    ((void) 0);
+    for (size_t i = 0; i < num; i++)
+        dest[i] = src[i];
+}
+
+
+
+
+static inline const jschar *
+js_SkipWhiteSpace(const jschar *s, const jschar *end)
+{
+    ((void) 0);
+    while (s != end && JS_ISSPACE(*s))
+        s++;
+    return s;
+}
+
+
+
+
+
+
+extern jschar *
+js_InflateString(JSContext *cx, const char *bytes, size_t *length);
+
+extern char *
+js_DeflateString(JSContext *cx, const jschar *chars, size_t length);
+
+
+
+
+
+
+
+extern JSBool
+js_InflateStringToBuffer(JSContext *cx, const char *bytes, size_t length,
+                         jschar *chars, size_t *charsLength);
+
+
+
+
+extern JSBool
+js_InflateUTF8StringToBuffer(JSContext *cx, const char *bytes, size_t length,
+                             jschar *chars, size_t *charsLength);
+
+
+
+
+
+extern size_t
+js_GetDeflatedStringLength(JSContext *cx, const jschar *chars,
+                           size_t charsLength);
+
+
+
+
+extern size_t
+js_GetDeflatedUTF8StringLength(JSContext *cx, const jschar *chars,
+                               size_t charsLength);
+
+
+
+
+
+
+
+extern JSBool
+js_DeflateStringToBuffer(JSContext *cx, const jschar *chars,
+                         size_t charsLength, char *bytes, size_t *length);
+
+
+
+
+extern JSBool
+js_DeflateStringToUTF8Buffer(JSContext *cx, const jschar *chars,
+                             size_t charsLength, char *bytes, size_t *length);
+
+
+extern JSBool
+js_str_escape(JSContext *cx, uintN argc, js::Value *argv, js::Value *rval);
+
+
+
+
+
+namespace js {
+extern JSBool
+str_replace(JSContext *cx, uintN argc, js::Value *vp);
+}
+
+extern JSBool
+js_str_toString(JSContext *cx, uintN argc, js::Value *vp);
+
+extern JSBool
+js_str_charAt(JSContext *cx, uintN argc, js::Value *vp);
+
+extern JSBool
+js_str_charCodeAt(JSContext *cx, uintN argc, js::Value *vp);
+
+
+
+
+
+extern int
+js_OneUcs4ToUtf8Char(uint8 *utf8Buffer, uint32 ucs4Char);
+
+namespace js {
+
+extern size_t
+PutEscapedStringImpl(char *buffer, size_t size, FILE *fp, JSLinearString *str, uint32 quote);
+# 1079 "jsstr.h"
+inline size_t
+PutEscapedString(char *buffer, size_t size, JSLinearString *str, uint32 quote)
+{
+    size_t n = PutEscapedStringImpl(buffer, size, __null, str, quote);
+
+
+    ((void) 0);
+    return n;
+}
+
+
+
+
+
+
+inline
+
+# 1094 "jsstr.h"
+       bool
+FileEscapedString(FILE *fp, JSLinearString *str, uint32 quote)
+{
+    return PutEscapedStringImpl(__null, 0, fp, str, quote) != size_t(-1);
+}
+
+}
+
+extern JSBool
+js_String(JSContext *cx, uintN argc, js::Value *vp);
+# 53 "jsatom.h" 2
+# 68 "jsatom.h"
+static __attribute__((always_inline)) inline jsid
+JSID_FROM_BITS(size_t bits)
+{
+    jsid id;
+    (id) = bits;
+    return id;
+}
+
+static __attribute__((always_inline)) inline jsid
+ATOM_TO_JSID(JSAtom *atom)
+{
+    ((void) 0);
+    return JSID_FROM_BITS((size_t)atom);
+}
+
+
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_ATOM(jsid id)
+{
+    return JSID_IS_STRING(id);
+}
+
+static __attribute__((always_inline)) inline JSBool
+JSID_IS_ATOM(jsid id, JSAtom *atom)
+{
+    return (id) == (ATOM_TO_JSID(atom));
+}
+
+static __attribute__((always_inline)) inline JSAtom *
+JSID_TO_ATOM(jsid id)
+{
+    return (JSAtom *)JSID_TO_STRING(id);
+}
+
+namespace js {
+
+static __attribute__((always_inline)) inline Value
+IdToValue(jsid id)
+{
+    if (JSID_IS_STRING(id))
+        return StringValue(JSID_TO_STRING(id));
+    if ((__builtin_expect((JSID_IS_INT(id)), 1)))
+        return Int32Value(JSID_TO_INT(id));
+    if ((__builtin_expect((JSID_IS_OBJECT(id)), 1)))
+        return ObjectValue(*JSID_TO_OBJECT(id));
+    ((void) 0);
+    return UndefinedValue();
+}
+
+static __attribute__((always_inline)) inline jsval
+IdToJsval(jsid id)
+{
+    return Jsvalify(IdToValue(id));
+}
+
+}
+# 138 "jsatom.h"
+extern const char *
+js_AtomToPrintableString(JSContext *cx, JSAtom *atom, JSAutoByteString *bytes);
+
+struct JSAtomListElement {
+    JSHashEntry entry;
+};
+# 172 "jsatom.h"
+struct JSAtomSet {
+    JSHashEntry *list;
+    JSHashTable *table;
+    jsuint count;
+};
+
+struct JSAtomList : public JSAtomSet
+{
+
+
+
+
+    JSAtomList() {
+        list = __null; table = __null; count = 0;
+
+
+
+    }
+
+    JSAtomList(const JSAtomSet& as) {
+        list = as.list; table = as.table; count = as.count;
+
+
+
+    }
+
+    void clear() { ((void) 0); list = __null; table = __null; count = 0; }
+
+    JSAtomListElement *lookup(JSAtom *atom) {
+        JSHashEntry **hep;
+        return rawLookup(atom, hep);
+    }
+
+    JSAtomListElement *rawLookup(JSAtom *atom, JSHashEntry **&hep);
+
+    enum AddHow { UNIQUE, SHADOW, HOIST };
+
+    JSAtomListElement *add(js::Parser *parser, JSAtom *atom, AddHow how = UNIQUE);
+
+    void remove(js::Parser *parser, JSAtom *atom) {
+        JSHashEntry **hep;
+        JSAtomListElement *ale = rawLookup(atom, hep);
+        if (ale)
+            rawRemove(parser, ale, hep);
+    }
+
+    void rawRemove(js::Parser *parser, JSAtomListElement *ale, JSHashEntry **hep);
+};
+
+
+
+
+
+struct JSAutoAtomList: public JSAtomList
+{
+    JSAutoAtomList(js::Parser *p): parser(p) {}
+    ~JSAutoAtomList();
+  private:
+    js::Parser *parser;
+};
+
+
+
+
+
+
+
+class JSAtomListIterator {
+    JSAtomList* list;
+    JSAtomListElement* next;
+    uint32 index;
+
+  public:
+    JSAtomListIterator(JSAtomList* al) : list(al) { reset(); }
+
+    void reset() {
+        next = (JSAtomListElement *) list->list;
+        index = 0;
+    }
+
+    JSAtomListElement* operator ()();
+};
+
+struct JSAtomMap {
+    JSAtom **vector;
+    jsatomid length;
+};
+
+namespace js {
+
+
+
+typedef int js_static_assert46[(((size_t)(0x1 | 0x2)) < JS_GCTHING_ALIGN) ? 1 : -1];
+
+typedef uintptr_t AtomEntryType;
+
+static __attribute__((always_inline)) inline JSAtom *
+AtomEntryToKey(AtomEntryType entry)
+{
+    ((void) 0);
+    return (JSAtom *)(entry & ~((size_t)(0x1 | 0x2)));
+}
+
+struct AtomHasher
+{
+    typedef JSLinearString *Lookup;
+
+    static HashNumber hash(JSLinearString *str) {
+        return js_HashString(str);
+    }
+
+    static bool match(AtomEntryType entry, JSLinearString *lookup) {
+        return entry ? EqualStrings(AtomEntryToKey(entry), lookup) : false;
+    }
+};
+
+typedef HashSet<AtomEntryType, AtomHasher, SystemAllocPolicy> AtomSet;
+
+}
+
+struct JSAtomState
+{
+    js::AtomSet atoms;
+
+
+    JSThinLock lock;
+# 311 "jsatom.h"
+    JSAtom *emptyAtom;
+
+
+
+
+
+    JSAtom *booleanAtoms[2];
+    JSAtom *typeAtoms[JSTYPE_LIMIT];
+    JSAtom *nullAtom;
+
+
+    JSAtom *classAtoms[JSProto_LIMIT];
+
+
+    JSAtom *anonymousAtom;
+    JSAtom *applyAtom;
+    JSAtom *argumentsAtom;
+    JSAtom *arityAtom;
+    JSAtom *callAtom;
+    JSAtom *calleeAtom;
+    JSAtom *callerAtom;
+    JSAtom *classPrototypeAtom;
+    JSAtom *constructorAtom;
+    JSAtom *eachAtom;
+    JSAtom *evalAtom;
+    JSAtom *fileNameAtom;
+    JSAtom *getAtom;
+    JSAtom *globalAtom;
+    JSAtom *ignoreCaseAtom;
+    JSAtom *indexAtom;
+    JSAtom *inputAtom;
+    JSAtom *toISOStringAtom;
+    JSAtom *iteratorAtom;
+    JSAtom *joinAtom;
+    JSAtom *lastIndexAtom;
+    JSAtom *lengthAtom;
+    JSAtom *lineNumberAtom;
+    JSAtom *messageAtom;
+    JSAtom *multilineAtom;
+    JSAtom *nameAtom;
+    JSAtom *nextAtom;
+    JSAtom *noSuchMethodAtom;
+    JSAtom *objectNullAtom;
+    JSAtom *objectUndefinedAtom;
+    JSAtom *protoAtom;
+    JSAtom *setAtom;
+    JSAtom *sourceAtom;
+    JSAtom *stackAtom;
+    JSAtom *stickyAtom;
+    JSAtom *toGMTStringAtom;
+    JSAtom *toLocaleStringAtom;
+    JSAtom *toSourceAtom;
+    JSAtom *toStringAtom;
+    JSAtom *toUTCStringAtom;
+    JSAtom *valueOfAtom;
+    JSAtom *toJSONAtom;
+    JSAtom *void0Atom;
+    JSAtom *enumerableAtom;
+    JSAtom *configurableAtom;
+    JSAtom *writableAtom;
+    JSAtom *valueAtom;
+    JSAtom *testAtom;
+    JSAtom *useStrictAtom;
+    JSAtom *locAtom;
+    JSAtom *lineAtom;
+    JSAtom *InfinityAtom;
+    JSAtom *NaNAtom;
+    JSAtom *builderAtom;
+
+
+    JSAtom *etagoAtom;
+    JSAtom *namespaceAtom;
+    JSAtom *ptagcAtom;
+    JSAtom *qualifierAtom;
+    JSAtom *spaceAtom;
+    JSAtom *stagoAtom;
+    JSAtom *starAtom;
+    JSAtom *starQualifierAtom;
+    JSAtom *tagcAtom;
+    JSAtom *xmlAtom;
+
+
+    JSAtom *functionNamespaceURIAtom;
+
+
+    JSAtom *ProxyAtom;
+
+    JSAtom *getOwnPropertyDescriptorAtom;
+    JSAtom *getPropertyDescriptorAtom;
+    JSAtom *definePropertyAtom;
+    JSAtom *deleteAtom;
+    JSAtom *getOwnPropertyNamesAtom;
+    JSAtom *enumerateAtom;
+    JSAtom *fixAtom;
+
+    JSAtom *hasAtom;
+    JSAtom *hasOwnAtom;
+    JSAtom *keysAtom;
+    JSAtom *iterateAtom;
+
+
+    struct {
+        JSAtom *XMLListAtom;
+        JSAtom *decodeURIAtom;
+        JSAtom *decodeURIComponentAtom;
+        JSAtom *defineGetterAtom;
+        JSAtom *defineSetterAtom;
+        JSAtom *encodeURIAtom;
+        JSAtom *encodeURIComponentAtom;
+        JSAtom *escapeAtom;
+        JSAtom *hasOwnPropertyAtom;
+        JSAtom *isFiniteAtom;
+        JSAtom *isNaNAtom;
+        JSAtom *isPrototypeOfAtom;
+        JSAtom *isXMLNameAtom;
+        JSAtom *lookupGetterAtom;
+        JSAtom *lookupSetterAtom;
+        JSAtom *parseFloatAtom;
+        JSAtom *parseIntAtom;
+        JSAtom *propertyIsEnumerableAtom;
+        JSAtom *unescapeAtom;
+        JSAtom *unevalAtom;
+        JSAtom *unwatchAtom;
+        JSAtom *watchAtom;
+    } lazy;
+};
+# 460 "jsatom.h"
+extern const char *const js_common_atom_names[];
+extern const size_t js_common_atom_count;
+# 471 "jsatom.h"
+# 1 "jsproto.tbl" 1
+# 39 "jsproto.tbl"
+# 1 "jsversion.h" 1
+# 40 "jsproto.tbl" 2
+# 64 "jsproto.tbl"
+extern const char js_Null_str[];
+extern const char js_Object_str[];
+extern const char js_Function_str[];
+extern const char js_Array_str[];
+extern const char js_Boolean_str[];
+extern const char js_JSON_str[];
+extern const char js_Date_str[];
+extern const char js_Math_str[];
+extern const char js_Number_str[];
+extern const char js_String_str[];
+extern const char js_RegExp_str[];
+extern const char js_XML_str[];
+extern const char js_Namespace_str[];
+extern const char js_QName_str[];
+extern const char js_Reflect_str[];
+extern const char js_ASTNode_str[];
+extern const char js_Error_str[];
+extern const char js_InternalError_str[];
+extern const char js_EvalError_str[];
+extern const char js_RangeError_str[];
+extern const char js_ReferenceError_str[];
+extern const char js_SyntaxError_str[];
+extern const char js_TypeError_str[];
+extern const char js_URIError_str[];
+extern const char js_Generator_str[];
+extern const char js_Iterator_str[];
+extern const char js_StopIteration_str[];
+extern const char js_ArrayBuffer_str[];
+extern const char js_Int8Array_str[];
+extern const char js_Uint8Array_str[];
+extern const char js_Int16Array_str[];
+extern const char js_Uint16Array_str[];
+extern const char js_Int32Array_str[];
+extern const char js_Uint32Array_str[];
+extern const char js_Float32Array_str[];
+extern const char js_Float64Array_str[];
+extern const char js_Uint8ClampedArray_str[];
+extern const char js_Proxy_str[];
+extern const char js_AnyName_str[];
+# 472 "jsatom.h" 2
+
+
+extern const char js_anonymous_str[];
+extern const char js_apply_str[];
+extern const char js_arguments_str[];
+extern const char js_arity_str[];
+extern const char js_call_str[];
+extern const char js_callee_str[];
+extern const char js_caller_str[];
+extern const char js_class_prototype_str[];
+extern const char js_close_str[];
+extern const char js_constructor_str[];
+extern const char js_count_str[];
+extern const char js_etago_str[];
+extern const char js_each_str[];
+extern const char js_eval_str[];
+extern const char js_fileName_str[];
+extern const char js_get_str[];
+extern const char js_getter_str[];
+extern const char js_global_str[];
+extern const char js_ignoreCase_str[];
+extern const char js_index_str[];
+extern const char js_input_str[];
+extern const char js_iterator_str[];
+extern const char js_join_str[];
+extern const char js_lastIndex_str[];
+extern const char js_length_str[];
+extern const char js_lineNumber_str[];
+extern const char js_message_str[];
+extern const char js_multiline_str[];
+extern const char js_name_str[];
+extern const char js_namespace_str[];
+extern const char js_next_str[];
+extern const char js_noSuchMethod_str[];
+extern const char js_object_str[];
+extern const char js_proto_str[];
+extern const char js_ptagc_str[];
+extern const char js_qualifier_str[];
+extern const char js_send_str[];
+extern const char js_setter_str[];
+extern const char js_set_str[];
+extern const char js_source_str[];
+extern const char js_space_str[];
+extern const char js_stack_str[];
+extern const char js_sticky_str[];
+extern const char js_stago_str[];
+extern const char js_star_str[];
+extern const char js_starQualifier_str[];
+extern const char js_tagc_str[];
+extern const char js_toGMTString_str[];
+extern const char js_toLocaleString_str[];
+extern const char js_toSource_str[];
+extern const char js_toString_str[];
+extern const char js_toUTCString_str[];
+extern const char js_undefined_str[];
+extern const char js_valueOf_str[];
+extern const char js_toJSON_str[];
+extern const char js_xml_str[];
+extern const char js_enumerable_str[];
+extern const char js_configurable_str[];
+extern const char js_writable_str[];
+extern const char js_value_str[];
+extern const char js_test_str[];
+
+
+
+
+
+
+extern JSBool
+js_InitAtomState(JSRuntime *rt);
+
+
+
+
+
+extern void
+js_FinishAtomState(JSRuntime *rt);
+
+
+
+
+
+extern void
+js_TraceAtomState(JSTracer *trc);
+
+extern void
+js_SweepAtomState(JSContext *cx);
+
+extern JSBool
+js_InitCommonAtoms(JSContext *cx);
+
+extern void
+js_FinishCommonAtoms(JSContext *cx);
+
+
+
+
+
+extern JSAtom *
+js_AtomizeString(JSContext *cx, JSString *str, uintN flags);
+
+extern JSAtom *
+js_Atomize(JSContext *cx, const char *bytes, size_t length, uintN flags);
+
+extern JSAtom *
+js_AtomizeChars(JSContext *cx, const jschar *chars, size_t length, uintN flags);
+
+
+
+
+
+extern JSAtom *
+js_GetExistingStringAtom(JSContext *cx, const jschar *chars, size_t length);
+# 594 "jsatom.h"
+inline
+
+# 594 "jsatom.h"
+       bool
+js_ValueToAtom(JSContext *cx, const js::Value &v, JSAtom **atomp);
+
+inline
+
+# 597 "jsatom.h"
+       bool
+js_ValueToStringId(JSContext *cx, const js::Value &v, jsid *idp);
+
+inline
+
+# 600 "jsatom.h"
+       bool
+js_InternNonIntElementId(JSContext *cx, JSObject *obj, const js::Value &idval,
+                         jsid *idp);
+inline
+
+# 603 "jsatom.h"
+       bool
+js_InternNonIntElementId(JSContext *cx, JSObject *obj, const js::Value &idval,
+                         jsid *idp, js::Value *vp);
+
+
+
+
+
+extern void
+js_InitAtomMap(JSContext *cx, JSAtomMap *map, JSAtomList *al);
+# 48 "jsarray.h" 2
+
+
+
+
+const uintN MIN_SPARSE_INDEX = 256;
+
+inline JSObject::EnsureDenseResult
+JSObject::ensureDenseArrayElements(JSContext *cx, uintN index, uintN extra)
+{
+    ((void) 0);
+    uintN currentCapacity = numSlots();
+
+    uintN requiredCapacity;
+    if (extra == 1) {
+
+        if (index < currentCapacity)
+            return ED_OK;
+        requiredCapacity = index + 1;
+        if (requiredCapacity == 0) {
+
+            return ED_SPARSE;
+        }
+    } else {
+        requiredCapacity = index + extra;
+        if (requiredCapacity < index) {
+
+            return ED_SPARSE;
+        }
+        if (requiredCapacity <= currentCapacity)
+            return ED_OK;
+    }
+
+
+
+
+
+    if (requiredCapacity > MIN_SPARSE_INDEX &&
+        willBeSparseDenseArray(requiredCapacity, extra)) {
+        return ED_SPARSE;
+    }
+    return growSlots(cx, requiredCapacity) ? ED_OK : ED_FAILED;
+}
+
+extern
+
+# 91 "jsarray.h"
+       bool
+js_StringIsIndex(JSLinearString *str, jsuint *indexp);
+
+inline JSBool
+js_IdIsIndex(jsid id, jsuint *indexp)
+{
+    if (JSID_IS_INT(id)) {
+        jsint i;
+        i = JSID_TO_INT(id);
+        if (i < 0)
+            return (JSIntn)0;
+        *indexp = (jsuint)i;
+        return (JSIntn)1;
+    }
+
+    if ((__builtin_expect((!JSID_IS_STRING(id)), 0)))
+        return (JSIntn)0;
+
+    return js_StringIsIndex(JSID_TO_ATOM(id), indexp);
+}
+
+
+inline
+
+# 113 "jsarray.h"
+       bool
+js_IdValIsIndex(JSContext *cx, jsval id, jsuint *indexp, bool *isIndex)
+{
+    if (JSVAL_IS_INT(id)) {
+        jsint i;
+        i = JSVAL_TO_INT(id);
+        if (i < 0) {
+            *isIndex = false;
+            return true;
+        }
+        *indexp = (jsuint)i;
+        *isIndex = true;
+        return true;
+    }
+
+    if (!JSVAL_IS_STRING(id)) {
+        *isIndex = false;
+        return true;
+    }
+
+    JSLinearString *str = JSVAL_TO_STRING(id)->ensureLinear(cx);
+    if (!str)
+        return false;
+
+    *isIndex = js_StringIsIndex(str, indexp);
+    return true;
+}
+
+extern js::Class js_ArrayClass, js_SlowArrayClass;
+
+inline
+
+# 143 "jsarray.h"
+       bool
+JSObject::isDenseArray() const
+{
+    return getClass() == &js_ArrayClass;
+}
+
+inline
+
+# 149 "jsarray.h"
+       bool
+JSObject::isSlowArray() const
+{
+    return getClass() == &js_SlowArrayClass;
+}
+
+inline
+
+# 155 "jsarray.h"
+       bool
+JSObject::isArray() const
+{
+    return isDenseArray() || isSlowArray();
+}
+# 180 "jsarray.h"
+static inline JSObject *
+js_GetProtoIfDenseArray(JSObject *obj)
+{
+    return obj->isDenseArray() ? obj->getProto() : obj;
+}
+
+extern JSObject *
+js_InitArrayClass(JSContext *cx, JSObject *obj);
+
+extern
+
+# 189 "jsarray.h"
+       bool
+js_InitContextBusyArrayTable(JSContext *cx);
+
+namespace js
+{
+
+
+extern JSObject *
+NewDenseEmptyArray(JSContext *cx, JSObject *proto=__null);
+
+
+extern JSObject *
+NewDenseAllocatedArray(JSContext *cx, uint length, JSObject *proto=__null);
+
+
+
+
+
+extern JSObject *
+NewDenseUnallocatedArray(JSContext *cx, uint length, JSObject *proto=__null);
+
+
+extern JSObject *
+NewDenseCopiedArray(JSContext *cx, uint length, Value *vp, JSObject *proto=__null);
+
+
+extern JSObject *
+NewSlowEmptyArray(JSContext *cx);
+
+}
+
+extern JSBool
+js_GetLengthProperty(JSContext *cx, JSObject *obj, jsuint *lengthp);
+
+extern JSBool
+js_SetLengthProperty(JSContext *cx, JSObject *obj, jsdouble length);
+
+extern JSBool
+js_HasLengthProperty(JSContext *cx, JSObject *obj, jsuint *lengthp);
+
+extern JSBool
+js_IndexToId(JSContext *cx, jsuint index, jsid *idp);
+
+namespace js {
+
+
+
+
+
+extern
+
+# 238 "jsarray.h"
+       bool
+GetElements(JSContext *cx, JSObject *aobj, jsuint length, js::Value *vp);
+
+}
+
+
+
+
+typedef JSBool (*JSComparator)(void *arg, const void *a, const void *b,
+                               int *result);
+
+enum JSMergeSortElemType {
+    JS_SORTING_VALUES,
+    JS_SORTING_GENERIC
+};
+# 264 "jsarray.h"
+extern
+
+# 264 "jsarray.h"
+       bool
+js_MergeSort(void *vec, size_t nel, size_t elsize, JSComparator cmp,
+             void *arg, void *tmp, JSMergeSortElemType elemType);
+
+
+
+
+
+namespace js {
+extern JSBool
+array_sort(JSContext *cx, uintN argc, js::Value *vp);
+}
+
+
+
+
+
+
+extern JSBool
+js_ArrayCompPush(JSContext *cx, JSObject *obj, const js::Value &vp);
+# 301 "jsarray.h"
+__attribute__((visibility ("default"))) JSBool
+js_CoerceArrayToCanvasImageData(JSObject *obj, jsuint offset, jsuint count,
+                                JSUint8 *dest);
+
+JSBool
+js_PrototypeHasIndexedProperties(JSContext *cx, JSObject *obj);
+
+
+
+
+JSBool
+js_GetDenseArrayElementValue(JSContext *cx, JSObject *obj, jsid id,
+                             js::Value *vp);
+
+
+JSBool
+js_Array(JSContext *cx, uintN argc, js::Value *vp);
+# 329 "jsarray.h"
+__attribute__((visibility ("default"))) JSBool
+js_CloneDensePrimitiveArray(JSContext *cx, JSObject *obj, JSObject **clone);
+
+
+
+
+
+__attribute__((visibility ("default"))) JSBool
+js_IsDensePrimitiveArray(JSObject *obj);
+
+extern JSBool
+js_EnsureDenseArrayCapacity(JSContext *cx, JSObject *obj, jsint i);
+# 54 "jsxml.cpp" 2
+
+# 1 "jsbool.h" 1
+# 50 "jsbool.h"
+extern js::Class js_BooleanClass;
+
+inline
+
+# 52 "jsbool.h"
+       bool
+JSObject::isBoolean() const
+{
+    return getClass() == &js_BooleanClass;
+}
+
+extern JSObject *
+js_InitBooleanClass(JSContext *cx, JSObject *obj);
+
+extern JSString *
+js_BooleanToString(JSContext *cx, JSBool b);
+
+namespace js {
+
+extern
+
+# 66 "jsbool.h"
+       bool
+BooleanToStringBuffer(JSContext *cx, JSBool b, StringBuffer &sb);
+
+}
+
+extern JSBool
+js_ValueToBoolean(const js::Value &v);
+# 56 "jsxml.cpp" 2
+# 1 "jscntxt.h" 1
+# 56 "jscntxt.h"
+# 1 "jsarena.h" 1
+# 53 "jsarena.h"
+extern "C" {
+
+typedef struct JSArena JSArena;
+typedef struct JSArenaPool JSArenaPool;
+
+struct JSArena {
+    JSArena *next;
+    jsuword base;
+    jsuword limit;
+    jsuword avail;
+};
+# 86 "jsarena.h"
+struct JSArenaPool {
+    JSArena first;
+    JSArena *current;
+    size_t arenasize;
+    jsuword mask;
+    size_t *quotap;
+
+
+
+
+};
+# 212 "jsarena.h"
+extern __attribute__((visibility ("default"))) void
+JS_InitArenaPool(JSArenaPool *pool, const char *name, size_t size,
+                 size_t align, size_t *quotap);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_FreeArenaPool(JSArenaPool *pool);
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_FinishArenaPool(JSArenaPool *pool);
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_ArenaFinish(void);
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_ArenaShutDown(void);
+
+
+
+
+extern __attribute__((visibility ("default"))) void *
+JS_ArenaAllocate(JSArenaPool *pool, size_t nb);
+
+extern __attribute__((visibility ("default"))) void *
+JS_ArenaRealloc(JSArenaPool *pool, void *p, size_t size, size_t incr);
+
+extern __attribute__((visibility ("default"))) void *
+JS_ArenaGrow(JSArenaPool *pool, void *p, size_t size, size_t incr);
+
+extern __attribute__((visibility ("default"))) void
+JS_ArenaRelease(JSArenaPool *pool, char *mark);
+# 289 "jsarena.h"
+}
+# 57 "jscntxt.h" 2
+# 1 "jsclist.h" 1
+# 47 "jsclist.h"
+typedef struct JSCListStr {
+    struct JSCListStr *next;
+    struct JSCListStr *prev;
+} JSCList;
+# 58 "jscntxt.h" 2
+
+
+# 1 "jsdhash.h" 1
+# 46 "jsdhash.h"
+extern "C" {
+# 79 "jsdhash.h"
+typedef uint32 JSDHashNumber;
+typedef struct JSDHashEntryHdr JSDHashEntryHdr;
+typedef struct JSDHashEntryStub JSDHashEntryStub;
+typedef struct JSDHashTable JSDHashTable;
+typedef struct JSDHashTableOps JSDHashTableOps;
+# 114 "jsdhash.h"
+struct JSDHashEntryHdr {
+    JSDHashNumber keyHash;
+};
+# 194 "jsdhash.h"
+struct JSDHashTable {
+    const JSDHashTableOps *ops;
+    void *data;
+    int16 hashShift;
+    uint8 maxAlphaFrac;
+    uint8 minAlphaFrac;
+    uint32 entrySize;
+    uint32 entryCount;
+    uint32 removedCount;
+    uint32 generation;
+    char *entryStore;
+# 226 "jsdhash.h"
+};
+# 240 "jsdhash.h"
+typedef void *
+(* JSDHashAllocTable)(JSDHashTable *table, uint32 nbytes);
+
+typedef void
+(* JSDHashFreeTable) (JSDHashTable *table, void *ptr);
+
+
+
+
+
+typedef JSDHashNumber
+(* JSDHashHashKey) (JSDHashTable *table, const void *key);
+
+
+
+
+
+typedef JSBool
+(* JSDHashMatchEntry)(JSDHashTable *table, const JSDHashEntryHdr *entry,
+                      const void *key);
+
+
+
+
+
+
+
+typedef void
+(* JSDHashMoveEntry)(JSDHashTable *table, const JSDHashEntryHdr *from,
+                     JSDHashEntryHdr *to);
+
+
+
+
+
+
+typedef void
+(* JSDHashClearEntry)(JSDHashTable *table, JSDHashEntryHdr *entry);
+
+
+
+
+
+
+typedef void
+(* JSDHashFinalize) (JSDHashTable *table);
+# 294 "jsdhash.h"
+typedef JSBool
+(* JSDHashInitEntry)(JSDHashTable *table, JSDHashEntryHdr *entry,
+                     const void *key);
+# 325 "jsdhash.h"
+struct JSDHashTableOps {
+
+    JSDHashAllocTable allocTable;
+    JSDHashFreeTable freeTable;
+    JSDHashHashKey hashKey;
+    JSDHashMatchEntry matchEntry;
+    JSDHashMoveEntry moveEntry;
+    JSDHashClearEntry clearEntry;
+    JSDHashFinalize finalize;
+
+
+    JSDHashInitEntry initEntry;
+};
+
+
+
+
+extern __attribute__((visibility ("default"))) void *
+JS_DHashAllocTable(JSDHashTable *table, uint32 nbytes);
+
+extern __attribute__((visibility ("default"))) void
+JS_DHashFreeTable(JSDHashTable *table, void *ptr);
+
+extern __attribute__((visibility ("default"))) JSDHashNumber
+JS_DHashStringKey(JSDHashTable *table, const void *key);
+
+
+struct JSDHashEntryStub {
+    JSDHashEntryHdr hdr;
+    const void *key;
+};
+
+extern __attribute__((visibility ("default"))) JSDHashNumber
+JS_DHashVoidPtrKeyStub(JSDHashTable *table, const void *key);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DHashMatchEntryStub(JSDHashTable *table,
+                       const JSDHashEntryHdr *entry,
+                       const void *key);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DHashMatchStringKey(JSDHashTable *table,
+                       const JSDHashEntryHdr *entry,
+                       const void *key);
+
+extern __attribute__((visibility ("default"))) void
+JS_DHashMoveEntryStub(JSDHashTable *table,
+                      const JSDHashEntryHdr *from,
+                      JSDHashEntryHdr *to);
+
+extern __attribute__((visibility ("default"))) void
+JS_DHashClearEntryStub(JSDHashTable *table, JSDHashEntryHdr *entry);
+
+extern __attribute__((visibility ("default"))) void
+JS_DHashFreeStringKey(JSDHashTable *table, JSDHashEntryHdr *entry);
+
+extern __attribute__((visibility ("default"))) void
+JS_DHashFinalizeStub(JSDHashTable *table);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) const JSDHashTableOps *
+JS_DHashGetStubOps(void);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSDHashTable *
+JS_NewDHashTable(const JSDHashTableOps *ops, void *data, uint32 entrySize,
+                 uint32 capacity);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_DHashTableDestroy(JSDHashTable *table);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DHashTableInit(JSDHashTable *table, const JSDHashTableOps *ops, void *data,
+                  uint32 entrySize, uint32 capacity);
+# 427 "jsdhash.h"
+extern __attribute__((visibility ("default"))) void
+JS_DHashTableSetAlphaBounds(JSDHashTable *table,
+                            float maxAlpha,
+                            float minAlpha);
+# 471 "jsdhash.h"
+extern __attribute__((visibility ("default"))) void
+JS_DHashTableFinish(JSDHashTable *table);
+
+
+
+
+
+
+
+typedef enum JSDHashOperator {
+    JS_DHASH_LOOKUP = 0,
+    JS_DHASH_ADD = 1,
+    JS_DHASH_REMOVE = 2,
+    JS_DHASH_NEXT = 0,
+    JS_DHASH_STOP = 1
+} JSDHashOperator;
+# 518 "jsdhash.h"
+extern __attribute__((visibility ("default"))) JSDHashEntryHdr *
+JS_DHashTableOperate(JSDHashTable *table, const void *key, JSDHashOperator op);
+# 530 "jsdhash.h"
+extern __attribute__((visibility ("default"))) void
+JS_DHashTableRawRemove(JSDHashTable *table, JSDHashEntryHdr *entry);
+# 572 "jsdhash.h"
+typedef JSDHashOperator
+(* JSDHashEnumerator)(JSDHashTable *table, JSDHashEntryHdr *hdr, uint32 number,
+                      void *arg);
+
+extern __attribute__((visibility ("default"))) uint32
+JS_DHashTableEnumerate(JSDHashTable *table, JSDHashEnumerator etor, void *arg);
+# 605 "jsdhash.h"
+}
+# 61 "jscntxt.h" 2
+# 1 "jsdtoa.h" 1
+# 49 "jsdtoa.h"
+extern "C" {
+
+struct DtoaState;
+
+DtoaState *
+js_NewDtoaState();
+
+void
+js_DestroyDtoaState(DtoaState *state);
+# 73 "jsdtoa.h"
+double
+js_strtod_harder(DtoaState *state, const char *s00, char **se, int *err);
+# 88 "jsdtoa.h"
+typedef enum JSDToStrMode {
+    DTOSTR_STANDARD,
+    DTOSTR_STANDARD_EXPONENTIAL,
+    DTOSTR_FIXED,
+    DTOSTR_EXPONENTIAL,
+    DTOSTR_PRECISION
+} JSDToStrMode;
+# 121 "jsdtoa.h"
+char *
+js_dtostr(DtoaState *state, char *buffer, size_t bufferSize, JSDToStrMode mode, int precision,
+          double dval);
+# 143 "jsdtoa.h"
+char *
+js_dtobasestr(DtoaState *state, int base, double d);
+
+}
+# 62 "jscntxt.h" 2
+# 1 "jsfun.h" 1
+# 49 "jsfun.h"
+# 1 "jsscript.h" 1
+# 48 "jsscript.h"
+# 1 "jsdbgapi.h" 1
+# 47 "jsdbgapi.h"
+# 1 "jsopcode.h" 1
+# 45 "jsopcode.h"
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 46 "jsopcode.h" 2
+# 54 "jsopcode.h"
+extern "C" {
+
+
+
+
+typedef enum JSOp {
+
+
+# 1 "jsopcode.tbl" 1
+# 113 "jsopcode.tbl"
+JSOP_NOP = 0,
+
+
+JSOP_PUSH = 1,
+JSOP_POPV = 2,
+JSOP_ENTERWITH = 3,
+JSOP_LEAVEWITH = 4,
+JSOP_RETURN = 5,
+JSOP_GOTO = 6,
+JSOP_IFEQ = 7,
+JSOP_IFNE = 8,
+
+
+JSOP_ARGUMENTS = 9,
+
+
+JSOP_FORARG = 10,
+JSOP_FORLOCAL = 11,
+
+
+JSOP_DUP = 12,
+JSOP_DUP2 = 13,
+JSOP_SETCONST = 14,
+JSOP_BITOR = 15,
+JSOP_BITXOR = 16,
+JSOP_BITAND = 17,
+JSOP_EQ = 18,
+JSOP_NE = 19,
+JSOP_LT = 20,
+JSOP_LE = 21,
+JSOP_GT = 22,
+JSOP_GE = 23,
+JSOP_LSH = 24,
+JSOP_RSH = 25,
+JSOP_URSH = 26,
+JSOP_ADD = 27,
+JSOP_SUB = 28,
+JSOP_MUL = 29,
+JSOP_DIV = 30,
+JSOP_MOD = 31,
+JSOP_NOT = 32,
+JSOP_BITNOT = 33,
+JSOP_NEG = 34,
+JSOP_POS = 35,
+JSOP_DELNAME = 36,
+JSOP_DELPROP = 37,
+JSOP_DELELEM = 38,
+JSOP_TYPEOF = 39,
+JSOP_VOID = 40,
+
+JSOP_INCNAME = 41,
+JSOP_INCPROP = 42,
+JSOP_INCELEM = 43,
+JSOP_DECNAME = 44,
+JSOP_DECPROP = 45,
+JSOP_DECELEM = 46,
+JSOP_NAMEINC = 47,
+JSOP_PROPINC = 48,
+JSOP_ELEMINC = 49,
+JSOP_NAMEDEC = 50,
+JSOP_PROPDEC = 51,
+JSOP_ELEMDEC = 52,
+
+JSOP_GETPROP = 53,
+JSOP_SETPROP = 54,
+JSOP_GETELEM = 55,
+JSOP_SETELEM = 56,
+JSOP_CALLNAME = 57,
+JSOP_CALL = 58,
+JSOP_NAME = 59,
+JSOP_DOUBLE = 60,
+JSOP_STRING = 61,
+JSOP_ZERO = 62,
+JSOP_ONE = 63,
+JSOP_NULL = 64,
+JSOP_THIS = 65,
+JSOP_FALSE = 66,
+JSOP_TRUE = 67,
+JSOP_OR = 68,
+JSOP_AND = 69,
+
+
+JSOP_TABLESWITCH = 70,
+JSOP_LOOKUPSWITCH = 71,
+
+
+JSOP_STRICTEQ = 72,
+JSOP_STRICTNE = 73,
+
+
+
+
+
+JSOP_SETCALL = 74,
+# 220 "jsopcode.tbl"
+JSOP_ITER = 75,
+JSOP_MOREITER = 76,
+JSOP_ENDITER = 77,
+
+JSOP_FUNAPPLY = 78,
+JSOP_SWAP = 79,
+
+
+JSOP_OBJECT = 80,
+
+
+JSOP_POP = 81,
+
+
+JSOP_NEW = 82,
+
+
+JSOP_TRAP = 83,
+
+
+JSOP_GETARG = 84,
+JSOP_SETARG = 85,
+JSOP_GETLOCAL = 86,
+JSOP_SETLOCAL = 87,
+
+
+JSOP_UINT16 = 88,
+# 256 "jsopcode.tbl"
+JSOP_NEWINIT = 89,
+JSOP_NEWARRAY = 90,
+JSOP_NEWOBJECT = 91,
+JSOP_ENDINIT = 92,
+JSOP_INITPROP = 93,
+JSOP_INITELEM = 94,
+JSOP_DEFSHARP = 95,
+JSOP_USESHARP = 96,
+
+
+JSOP_INCARG = 97,
+JSOP_DECARG = 98,
+JSOP_ARGINC = 99,
+JSOP_ARGDEC = 100,
+
+JSOP_INCLOCAL = 101,
+JSOP_DECLOCAL = 102,
+JSOP_LOCALINC = 103,
+JSOP_LOCALDEC = 104,
+
+JSOP_IMACOP = 105,
+
+
+JSOP_FORNAME = 106,
+JSOP_FORPROP = 107,
+JSOP_FORELEM = 108,
+JSOP_POPN = 109,
+
+
+JSOP_BINDNAME = 110,
+JSOP_SETNAME = 111,
+
+
+JSOP_THROW = 112,
+
+
+JSOP_IN = 113,
+JSOP_INSTANCEOF = 114,
+
+
+JSOP_DEBUGGER = 115,
+
+
+JSOP_GOSUB = 116,
+JSOP_RETSUB = 117,
+
+
+JSOP_EXCEPTION = 118,
+
+
+JSOP_LINENO = 119,
+
+
+
+
+
+
+JSOP_CONDSWITCH = 120,
+JSOP_CASE = 121,
+JSOP_DEFAULT = 122,
+
+
+
+
+JSOP_EVAL = 123,
+
+
+
+
+JSOP_ENUMELEM = 124,
+
+
+
+
+
+
+JSOP_GETTER = 125,
+JSOP_SETTER = 126,
+
+
+
+
+JSOP_DEFFUN = 127,
+JSOP_DEFCONST = 128,
+JSOP_DEFVAR = 129,
+
+
+JSOP_LAMBDA = 130,
+
+
+JSOP_CALLEE = 131,
+
+
+
+
+
+JSOP_SETLOCALPOP = 132,
+
+
+JSOP_PICK = 133,
+
+
+
+
+
+JSOP_TRY = 134,
+JSOP_FINALLY = 135,
+
+
+
+
+
+
+
+JSOP_GETFCSLOT = 136,
+JSOP_CALLFCSLOT = 137,
+
+
+
+
+
+
+JSOP_ARGSUB = 138,
+JSOP_ARGCNT = 139,
+
+
+
+
+
+
+JSOP_DEFLOCALFUN = 140,
+
+
+JSOP_GOTOX = 141,
+JSOP_IFEQX = 142,
+JSOP_IFNEX = 143,
+JSOP_ORX = 144,
+JSOP_ANDX = 145,
+JSOP_GOSUBX = 146,
+JSOP_CASEX = 147,
+JSOP_DEFAULTX = 148,
+JSOP_TABLESWITCHX = 149,
+JSOP_LOOKUPSWITCHX = 150,
+
+
+JSOP_BACKPATCH = 151,
+JSOP_BACKPATCH_POP = 152,
+
+
+JSOP_THROWING = 153,
+
+
+JSOP_SETRVAL = 154,
+JSOP_RETRVAL = 155,
+
+
+JSOP_GETGNAME = 156,
+JSOP_SETGNAME = 157,
+JSOP_INCGNAME = 158,
+JSOP_DECGNAME = 159,
+JSOP_GNAMEINC = 160,
+JSOP_GNAMEDEC = 161,
+
+
+JSOP_REGEXP = 162,
+
+
+JSOP_DEFXMLNS = 163,
+JSOP_ANYNAME = 164,
+JSOP_QNAMEPART = 165,
+JSOP_QNAMECONST = 166,
+JSOP_QNAME = 167,
+JSOP_TOATTRNAME = 168,
+JSOP_TOATTRVAL = 169,
+JSOP_ADDATTRNAME = 170,
+JSOP_ADDATTRVAL = 171,
+JSOP_BINDXMLNAME = 172,
+JSOP_SETXMLNAME = 173,
+JSOP_XMLNAME = 174,
+JSOP_DESCENDANTS = 175,
+JSOP_FILTER = 176,
+JSOP_ENDFILTER = 177,
+JSOP_TOXML = 178,
+JSOP_TOXMLLIST = 179,
+JSOP_XMLTAGEXPR = 180,
+JSOP_XMLELTEXPR = 181,
+JSOP_NOTRACE = 182,
+JSOP_XMLCDATA = 183,
+JSOP_XMLCOMMENT = 184,
+JSOP_XMLPI = 185,
+JSOP_DELDESC = 186,
+
+JSOP_CALLPROP = 187,
+# 457 "jsopcode.tbl"
+JSOP_BLOCKCHAIN = 188,
+JSOP_NULLBLOCKCHAIN = 189,
+
+
+
+
+JSOP_UINT24 = 190,
+
+
+
+
+
+
+
+JSOP_INDEXBASE = 191,
+JSOP_RESETBASE = 192,
+JSOP_RESETBASE0 = 193,
+
+
+
+
+JSOP_STARTXML = 194,
+JSOP_STARTXMLEXPR = 195,
+
+JSOP_CALLELEM = 196,
+
+
+
+
+
+JSOP_STOP = 197,
+
+
+
+
+
+JSOP_GETXPROP = 198,
+
+JSOP_CALLXMLNAME = 199,
+
+
+
+
+JSOP_TYPEOFEXPR = 200,
+
+
+
+
+JSOP_ENTERBLOCK = 201,
+JSOP_LEAVEBLOCK = 202,
+
+
+JSOP_IFPRIMTOP = 203,
+
+
+JSOP_PRIMTOP = 204,
+
+
+
+
+JSOP_GENERATOR = 205,
+JSOP_YIELD = 206,
+JSOP_ARRAYPUSH = 207,
+
+
+
+
+JSOP_GETFUNNS = 208,
+
+
+
+
+JSOP_ENUMCONSTELEM = 209,
+
+
+
+
+
+JSOP_LEAVEBLOCKEXPR = 210,
+
+
+
+
+JSOP_GETTHISPROP = 211,
+JSOP_GETARGPROP = 212,
+JSOP_GETLOCALPROP = 213,
+
+
+
+
+
+JSOP_INDEXBASE1 = 214,
+JSOP_INDEXBASE2 = 215,
+JSOP_INDEXBASE3 = 216,
+
+JSOP_CALLGNAME = 217,
+JSOP_CALLLOCAL = 218,
+JSOP_CALLARG = 219,
+JSOP_BINDGNAME = 220,
+
+
+
+
+JSOP_INT8 = 221,
+JSOP_INT32 = 222,
+
+
+
+
+JSOP_LENGTH = 223,
+
+
+
+
+
+
+JSOP_HOLE = 224,
+
+
+
+
+JSOP_DEFFUN_FC = 225,
+JSOP_DEFLOCALFUN_FC = 226,
+JSOP_LAMBDA_FC = 227,
+
+
+
+
+
+
+JSOP_OBJTOP = 228,
+
+
+JSOP_TRACE = 229,
+
+
+
+
+JSOP_GETUPVAR_DBG = 230,
+JSOP_CALLUPVAR_DBG = 231,
+JSOP_DEFFUN_DBGFC = 232,
+JSOP_DEFLOCALFUN_DBGFC = 233,
+JSOP_LAMBDA_DBGFC = 234,
+
+
+
+
+JSOP_SETMETHOD = 235,
+JSOP_INITMETHOD = 236,
+JSOP_UNBRAND = 237,
+JSOP_UNBRANDTHIS = 238,
+
+JSOP_SHARPINIT = 239,
+
+
+JSOP_GETGLOBAL = 240,
+JSOP_CALLGLOBAL = 241,
+
+
+JSOP_FUNCALL = 242,
+
+JSOP_FORGNAME = 243,
+# 63 "jsopcode.h" 2
+
+    JSOP_LIMIT,
+
+
+
+
+
+
+    JSOP_GETPROP2 = JSOP_LIMIT,
+    JSOP_GETELEM2 = JSOP_LIMIT + 1,
+    JSOP_FAKE_LIMIT = JSOP_GETELEM2
+} JSOp;
+# 268 "jsopcode.h"
+struct JSCodeSpec {
+    int8 length;
+    int8 nuses;
+    int8 ndefs;
+    uint8 prec;
+    uint32 format;
+
+
+    uint32 type() const { return ((format) & 0x001f); }
+
+};
+
+extern const JSCodeSpec js_CodeSpec[];
+extern uintN js_NumCodeSpecs;
+extern const char *js_CodeName[];
+extern const char js_EscapeMap[];
+# 296 "jsopcode.h"
+extern JSString *
+js_QuoteString(JSContext *cx, JSString *str, jschar quote);
+# 310 "jsopcode.h"
+extern JSPrinter *
+js_NewPrinter(JSContext *cx, const char *name, JSFunction *fun,
+              uintN indent, JSBool pretty, JSBool grouped, JSBool strict);
+
+extern void
+js_DestroyPrinter(JSPrinter *jp);
+
+extern JSString *
+js_GetPrinterOutput(JSPrinter *jp);
+
+extern int
+js_printf(JSPrinter *jp, const char *format, ...);
+
+extern JSBool
+js_puts(JSPrinter *jp, const char *s);
+# 333 "jsopcode.h"
+uintN
+js_GetIndexFromBytecode(JSContext *cx, JSScript *script, jsbytecode *pc,
+                        ptrdiff_t pcoff);
+# 386 "jsopcode.h"
+extern uintN
+js_GetVariableBytecodeLength(jsbytecode *pc);
+
+
+
+
+
+extern uintN
+js_GetVariableStackUses(JSOp op, jsbytecode *pc);
+
+
+
+
+
+extern uintN
+js_GetEnterBlockStackDefs(JSContext *cx, JSScript *script, jsbytecode *pc);
+
+
+static inline uintN
+js_GetStackUses(const JSCodeSpec *cs, JSOp op, jsbytecode *pc)
+{
+    ((void) 0);
+    if (cs->nuses >= 0)
+        return cs->nuses;
+    return js_GetVariableStackUses(op, pc);
+}
+
+static inline uintN
+js_GetStackDefs(JSContext *cx, const JSCodeSpec *cs, JSOp op, JSScript *script,
+                jsbytecode *pc)
+{
+    ((void) 0);
+    if (cs->ndefs >= 0)
+        return cs->ndefs;
+
+
+    ((void) 0);
+    return js_GetEnterBlockStackDefs(cx, script, pc);
+}
+# 444 "jsopcode.h"
+extern JSBool
+js_DecompileScript(JSPrinter *jp, JSScript *script);
+
+extern JSBool
+js_DecompileFunctionBody(JSPrinter *jp);
+
+extern JSBool
+js_DecompileFunction(JSPrinter *jp);
+# 460 "jsopcode.h"
+typedef JSBool (* JSDecompilerPtr)(JSPrinter *);
+
+extern JSString *
+js_DecompileToString(JSContext *cx, const char *name, JSFunction *fun,
+                     uintN indent, JSBool pretty, JSBool grouped, JSBool strict,
+                     JSDecompilerPtr decompiler);
+# 479 "jsopcode.h"
+extern char *
+js_DecompileValueGenerator(JSContext *cx, intN spindex, jsval v,
+                           JSString *fallback);
+
+
+
+
+
+namespace js {
+
+static inline char *
+DecompileValueGenerator(JSContext *cx, intN spindex, const Value &v,
+                        JSString *fallback)
+{
+    return js_DecompileValueGenerator(cx, spindex, Jsvalify(v), fallback);
+}
+
+}
+
+
+
+
+
+
+extern uintN
+js_ReconstructStackDepth(JSContext *cx, JSScript *script, jsbytecode *pc);
+
+
+
+
+
+}
+# 48 "jsdbgapi.h" 2
+
+
+extern "C" {
+
+extern __attribute__((visibility ("default"))) JSCrossCompartmentCall *
+JS_EnterCrossCompartmentCallScript(JSContext *cx, JSScript *target);
+
+
+}
+
+namespace JS {
+
+class __attribute__((visibility ("default"))) AutoEnterScriptCompartment
+{
+    JSCrossCompartmentCall *call;
+
+  public:
+    AutoEnterScriptCompartment() : call(__null) {}
+
+    bool enter(JSContext *cx, JSScript *target);
+
+    bool entered() const { return call != __null; }
+
+    ~AutoEnterScriptCompartment() {
+        if (call && call != reinterpret_cast<JSCrossCompartmentCall*>(1))
+            JS_LeaveCrossCompartmentCall(call);
+    }
+};
+
+}
+
+extern "C" {
+
+
+extern __attribute__((visibility ("default"))) JSScript *
+JS_GetScriptFromObject(JSObject *scriptObject);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, uintN indent);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+JS_SetRuntimeDebugMode(JSRuntime *rt, JSBool debug);
+# 106 "jsdbgapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetDebugMode(JSContext *cx);
+
+
+
+
+
+
+__attribute__((visibility ("default"))) JSBool
+JS_SetDebugModeForCompartment(JSContext *cx, JSCompartment *comp, JSBool debug);
+
+
+
+
+__attribute__((visibility ("default"))) JSBool
+JS_SetDebugMode(JSContext *cx, JSBool debug);
+
+
+extern __attribute__((visibility ("default"))) JSBool
+js_SetSingleStepMode(JSContext *cx, JSScript *script, JSBool singleStep);
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetSingleStepMode(JSContext *cx, JSScript *script, JSBool singleStep);
+
+
+
+
+
+
+extern jsbytecode *
+js_UntrapScriptCode(JSContext *cx, JSScript *script);
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetTrap(JSContext *cx, JSScript *script, jsbytecode *pc,
+           JSTrapHandler handler, jsval closure);
+
+extern __attribute__((visibility ("default"))) JSOp
+JS_GetTrapOpcode(JSContext *cx, JSScript *script, jsbytecode *pc);
+
+extern __attribute__((visibility ("default"))) void
+JS_ClearTrap(JSContext *cx, JSScript *script, jsbytecode *pc,
+             JSTrapHandler *handlerp, jsval *closurep);
+
+extern __attribute__((visibility ("default"))) void
+JS_ClearScriptTraps(JSContext *cx, JSScript *script);
+
+extern __attribute__((visibility ("default"))) void
+JS_ClearAllTraps(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSTrapStatus
+JS_HandleTrap(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetInterrupt(JSRuntime *rt, JSInterruptHook handler, void *closure);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ClearInterrupt(JSRuntime *rt, JSInterruptHook *handlerp, void **closurep);
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetWatchPoint(JSContext *cx, JSObject *obj, jsid id,
+                 JSWatchPointHandler handler, JSObject *closure);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ClearWatchPoint(JSContext *cx, JSObject *obj, jsid id,
+                   JSWatchPointHandler *handlerp, JSObject **closurep);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ClearWatchPointsForObject(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_ClearAllWatchPoints(JSContext *cx);
+
+
+
+
+
+
+extern void
+js_TraceWatchPoints(JSTracer *trc, JSObject *obj);
+
+extern void
+js_SweepWatchPoints(JSContext *cx);
+
+
+
+extern JSBool
+js_watch_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict, js::Value *vp);
+
+namespace js {
+
+
+bool
+# 201 "jsdbgapi.h"
+IsWatchedProperty(JSContext *cx, const Shape *shape);
+
+}
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) uintN
+JS_PCToLineNumber(JSContext *cx, JSScript *script, jsbytecode *pc);
+
+extern __attribute__((visibility ("default"))) jsbytecode *
+JS_LineNumberToPC(JSContext *cx, JSScript *script, uintN lineno);
+
+extern __attribute__((visibility ("default"))) jsbytecode *
+JS_EndPC(JSContext *cx, JSScript *script);
+
+extern __attribute__((visibility ("default"))) uintN
+JS_GetFunctionArgumentCount(JSContext *cx, JSFunction *fun);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_FunctionHasLocalNames(JSContext *cx, JSFunction *fun);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) jsuword *
+JS_GetFunctionLocalNameArray(JSContext *cx, JSFunction *fun, void **markp);
+
+extern __attribute__((visibility ("default"))) JSAtom *
+JS_LocalNameToAtom(jsuword w);
+
+extern __attribute__((visibility ("default"))) JSString *
+JS_AtomKey(JSAtom *atom);
+
+extern __attribute__((visibility ("default"))) void
+JS_ReleaseFunctionLocalNameArray(JSContext *cx, void *mark);
+
+extern __attribute__((visibility ("default"))) JSScript *
+JS_GetFunctionScript(JSContext *cx, JSFunction *fun);
+
+extern __attribute__((visibility ("default"))) JSNative
+JS_GetFunctionNative(JSContext *cx, JSFunction *fun);
+
+extern __attribute__((visibility ("default"))) JSPrincipals *
+JS_GetScriptPrincipals(JSContext *cx, JSScript *script);
+# 259 "jsdbgapi.h"
+extern __attribute__((visibility ("default"))) JSStackFrame *
+JS_FrameIterator(JSContext *cx, JSStackFrame **iteratorp);
+
+extern __attribute__((visibility ("default"))) JSScript *
+JS_GetFrameScript(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) jsbytecode *
+JS_GetFramePC(JSContext *cx, JSStackFrame *fp);
+
+
+
+
+extern __attribute__((visibility ("default"))) JSStackFrame *
+JS_GetScriptedCaller(JSContext *cx, JSStackFrame *fp);
+
+
+
+
+
+extern JSPrincipals *
+js_StackFramePrincipals(JSContext *cx, JSStackFrame *fp);
+
+JSPrincipals *
+js_EvalFramePrincipals(JSContext *cx, JSObject *callee, JSStackFrame *caller);
+
+extern __attribute__((visibility ("default"))) void *
+JS_GetFrameAnnotation(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) void
+JS_SetFrameAnnotation(JSContext *cx, JSStackFrame *fp, void *annotation);
+
+extern __attribute__((visibility ("default"))) void *
+JS_GetFramePrincipalArray(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsScriptFrame(JSContext *cx, JSStackFrame *fp);
+
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetFrameObject(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetFrameScopeChain(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetFrameCallObject(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetFrameThis(JSContext *cx, JSStackFrame *fp, jsval *thisv);
+
+extern __attribute__((visibility ("default"))) JSFunction *
+JS_GetFrameFunction(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetFrameFunctionObject(JSContext *cx, JSStackFrame *fp);
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsConstructorFrame(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsDebuggerFrame(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) jsval
+JS_GetFrameReturnValue(JSContext *cx, JSStackFrame *fp);
+
+extern __attribute__((visibility ("default"))) void
+JS_SetFrameReturnValue(JSContext *cx, JSStackFrame *fp, jsval rval);
+# 355 "jsdbgapi.h"
+extern __attribute__((visibility ("default"))) JSObject *
+JS_GetFrameCalleeObject(JSContext *cx, JSStackFrame *fp);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetValidFrameCalleeObject(JSContext *cx, JSStackFrame *fp, jsval *vp);
+
+
+
+extern __attribute__((visibility ("default"))) const char *
+JS_GetScriptFilename(JSContext *cx, JSScript *script);
+
+extern __attribute__((visibility ("default"))) uintN
+JS_GetScriptBaseLineNumber(JSContext *cx, JSScript *script);
+
+extern __attribute__((visibility ("default"))) uintN
+JS_GetScriptLineExtent(JSContext *cx, JSScript *script);
+
+extern __attribute__((visibility ("default"))) JSVersion
+JS_GetScriptVersion(JSContext *cx, JSScript *script);
+# 390 "jsdbgapi.h"
+extern __attribute__((visibility ("default"))) void
+JS_SetNewScriptHookProc(JSRuntime *rt, JSNewScriptHook hook, void *callerdata);
+
+extern __attribute__((visibility ("default"))) void
+JS_SetDestroyScriptHookProc(JSRuntime *rt, JSDestroyScriptHook hook,
+                        void *callerdata);
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EvaluateUCInStackFrame(JSContext *cx, JSStackFrame *fp,
+                          const jschar *chars, uintN length,
+                          const char *filename, uintN lineno,
+                          jsval *rval);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_EvaluateInStackFrame(JSContext *cx, JSStackFrame *fp,
+                        const char *bytes, uintN length,
+                        const char *filename, uintN lineno,
+                        jsval *rval);
+
+
+
+typedef struct JSPropertyDesc {
+    jsval id;
+    jsval value;
+    uint8 flags;
+    uint8 spare;
+    uint16 slot;
+    jsval alias;
+} JSPropertyDesc;
+# 433 "jsdbgapi.h"
+typedef struct JSPropertyDescArray {
+    uint32 length;
+    JSPropertyDesc *array;
+} JSPropertyDescArray;
+
+typedef struct JSScopeProperty JSScopeProperty;
+
+extern __attribute__((visibility ("default"))) JSScopeProperty *
+JS_PropertyIterator(JSObject *obj, JSScopeProperty **iteratorp);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPropertyDesc(JSContext *cx, JSObject *obj, JSScopeProperty *shape,
+                   JSPropertyDesc *pd);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_GetPropertyDescArray(JSContext *cx, JSObject *obj, JSPropertyDescArray *pda);
+
+extern __attribute__((visibility ("default"))) void
+JS_PutPropertyDescArray(JSContext *cx, JSPropertyDescArray *pda);
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetDebuggerHandler(JSRuntime *rt, JSDebuggerHandler hook, void *closure);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetSourceHandler(JSRuntime *rt, JSSourceHandler handler, void *closure);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetExecuteHook(JSRuntime *rt, JSInterpreterHook hook, void *closure);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetCallHook(JSRuntime *rt, JSInterpreterHook hook, void *closure);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetThrowHook(JSRuntime *rt, JSThrowHook hook, void *closure);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_SetDebugErrorHook(JSRuntime *rt, JSDebugErrorHook hook, void *closure);
+
+
+
+extern __attribute__((visibility ("default"))) size_t
+JS_GetObjectTotalSize(JSContext *cx, JSObject *obj);
+
+extern __attribute__((visibility ("default"))) size_t
+JS_GetFunctionTotalSize(JSContext *cx, JSFunction *fun);
+
+extern __attribute__((visibility ("default"))) size_t
+JS_GetScriptTotalSize(JSContext *cx, JSScript *script);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) uint32
+JS_GetTopScriptFilenameFlags(JSContext *cx, JSStackFrame *fp);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) uint32
+JS_GetScriptFilenameFlags(JSScript *script);
+# 511 "jsdbgapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_FlagScriptFilenamePrefix(JSRuntime *rt, const char *prefix, uint32 flags);
+# 526 "jsdbgapi.h"
+extern __attribute__((visibility ("default"))) JSBool
+JS_IsSystemObject(JSContext *cx, JSObject *obj);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_MakeSystemObject(JSContext *cx, JSObject *obj);
+
+
+
+extern __attribute__((visibility ("default"))) JSObject *
+JS_UnwrapObject(JSContext *cx, JSObject *obj);
+
+
+
+extern __attribute__((visibility ("default"))) void
+js_RevertVersion(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) const JSDebugHooks *
+JS_GetGlobalDebugHooks(JSRuntime *rt);
+
+extern __attribute__((visibility ("default"))) JSDebugHooks *
+JS_SetContextDebugHooks(JSContext *cx, const JSDebugHooks *hooks);
+
+
+extern __attribute__((visibility ("default"))) JSDebugHooks *
+JS_ClearContextDebugHooks(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_StartProfiling();
+
+extern __attribute__((visibility ("default"))) void
+JS_StopProfiling();
+
+extern __attribute__((visibility ("default"))) JSBool
+JS_DefineProfilingFunctions(JSContext *cx, JSObject *obj);
+# 624 "jsdbgapi.h"
+}
+# 49 "jsscript.h" 2
+
+
+
+
+
+
+typedef enum JSTryNoteKind {
+    JSTRY_CATCH,
+    JSTRY_FINALLY,
+    JSTRY_ITER
+} JSTryNoteKind;
+
+namespace js {
+# 76 "jsscript.h"
+class UpvarCookie
+{
+    uint32 value;
+
+    static const uint32 FREE_VALUE = 0xfffffffful;
+
+    void checkInvariants() {
+        typedef int js_static_assert47[(sizeof(UpvarCookie) == sizeof(uint32)) ? 1 : -1];
+        typedef int js_static_assert48[(UPVAR_LEVEL_LIMIT < FREE_LEVEL) ? 1 : -1];
+    }
+
+  public:
+
+
+
+
+    static const uint16 FREE_LEVEL = 0x3fff;
+
+
+
+
+
+    static const uint16 UPVAR_LEVEL_LIMIT = 16;
+    static const uint16 CALLEE_SLOT = 0xffff;
+    static bool isLevelReserved(uint16 level) { return level >= FREE_LEVEL; }
+
+    bool isFree() const { return value == FREE_VALUE; }
+    uint32 asInteger() const { return value; }
+
+    uint16 level() const { ((void) 0); return uint16(value >> 16); }
+    uint16 slot() const { ((void) 0); return uint16(value); }
+
+    void set(const UpvarCookie &other) { set(other.level(), other.slot()); }
+    void set(uint16 newLevel, uint16 newSlot) { value = (uint32(newLevel) << 16) | newSlot; }
+    void makeFree() { set(0xffff, 0xffff); ((void) 0); }
+    void fromInteger(uint32 u32) { value = u32; }
+};
+
+}
+
+
+
+
+struct JSTryNote {
+    uint8 kind;
+    uint8 padding;
+    uint16 stackDepth;
+    uint32 start;
+
+    uint32 length;
+};
+
+typedef struct JSTryNoteArray {
+    JSTryNote *vector;
+    uint32 length;
+} JSTryNoteArray;
+
+typedef struct JSObjectArray {
+    JSObject **vector;
+    uint32 length;
+} JSObjectArray;
+
+typedef struct JSUpvarArray {
+    js::UpvarCookie *vector;
+    uint32 length;
+} JSUpvarArray;
+
+typedef struct JSConstArray {
+    js::Value *vector;
+    uint32 length;
+} JSConstArray;
+
+struct JSArenaPool;
+
+namespace js {
+
+struct GlobalSlotArray {
+    struct Entry {
+        uint32 atomIndex;
+        uint32 slot;
+    };
+    Entry *vector;
+    uint32 length;
+};
+
+struct Shape;
+
+enum BindingKind { NONE, ARGUMENT, VARIABLE, CONSTANT, UPVAR };
+
+
+
+
+
+
+
+class Bindings {
+    js::Shape *lastBinding;
+    uint16 nargs;
+    uint16 nvars;
+    uint16 nupvars;
+
+  public:
+    inline Bindings(JSContext *cx);
+
+
+
+
+
+
+    inline void transfer(JSContext *cx, Bindings *bindings);
+
+
+
+
+
+
+    inline void clone(JSContext *cx, Bindings *bindings);
+
+    uint16 countArgs() const { return nargs; }
+    uint16 countVars() const { return nvars; }
+    uint16 countUpvars() const { return nupvars; }
+
+    uintN countArgsAndVars() const { return nargs + nvars; }
+
+    uintN countLocalNames() const { return nargs + nvars + nupvars; }
+
+    bool hasUpvars() const { return nupvars > 0; }
+    bool hasLocalNames() const { return countLocalNames() > 0; }
+
+
+    inline const js::Shape *lastShape() const;
+
+    enum {
+
+
+
+
+        BINDING_COUNT_LIMIT = 0xFFFF
+    };
+# 232 "jsscript.h"
+    bool add(JSContext *cx, JSAtom *name, BindingKind kind);
+
+
+    bool addVariable(JSContext *cx, JSAtom *name) {
+        return add(cx, name, VARIABLE);
+    }
+    bool addConstant(JSContext *cx, JSAtom *name) {
+        return add(cx, name, CONSTANT);
+    }
+    bool addUpvar(JSContext *cx, JSAtom *name) {
+        return add(cx, name, UPVAR);
+    }
+    bool addArgument(JSContext *cx, JSAtom *name, uint16 *slotp) {
+        ((void) 0);
+        *slotp = nargs;
+        return add(cx, name, ARGUMENT);
+    }
+    bool addDestructuring(JSContext *cx, uint16 *slotp) {
+        *slotp = nargs;
+        return add(cx, __null, ARGUMENT);
+    }
+
+
+
+
+
+
+
+    BindingKind lookup(JSContext *cx, JSAtom *name, uintN *indexp) const;
+
+
+    bool hasBinding(JSContext *cx, JSAtom *name) const {
+        return lookup(cx, name, __null) != NONE;
+    }
+# 284 "jsscript.h"
+    jsuword *
+    getLocalNameArray(JSContext *cx, JSArenaPool *pool);
+
+
+
+
+
+    int sharpSlotBase(JSContext *cx);
+
+
+
+
+
+
+    void makeImmutable();
+# 311 "jsscript.h"
+    const js::Shape *lastArgument() const;
+    const js::Shape *lastVariable() const;
+    const js::Shape *lastUpvar() const;
+
+    void trace(JSTracer *trc);
+};
+
+}
+# 349 "jsscript.h"
+struct JSScript {
+# 361 "jsscript.h"
+    static JSScript *NewScript(JSContext *cx, uint32 length, uint32 nsrcnotes, uint32 natoms,
+                               uint32 nobjects, uint32 nupvars, uint32 nregexps,
+                               uint32 ntrynotes, uint32 nconsts, uint32 nglobals,
+                               uint16 nClosedArgs, uint16 nClosedVars, JSVersion version);
+
+    static JSScript *NewScriptFromCG(JSContext *cx, JSCodeGenerator *cg);
+
+
+    JSCList links;
+    jsbytecode *code;
+    uint32 length;
+
+  private:
+    uint16 version;
+
+    size_t callCount_;
+
+  public:
+    uint16 nfixed;
+
+
+
+
+
+
+    uint8 objectsOffset;
+
+
+    uint8 upvarsOffset;
+
+    uint8 regexpsOffset;
+
+    uint8 trynotesOffset;
+    uint8 globalsOffset;
+    uint8 constOffset;
+
+    bool noScriptRval:1;
+
+    bool savedCallerFun:1;
+    bool hasSharps:1;
+    bool strictModeCode:1;
+    bool compileAndGo:1;
+    bool usesEval:1;
+    bool usesArguments:1;
+    bool warnedAboutTwoArgumentEval:1;
+
+
+    bool hasSingletons:1;
+
+
+
+
+
+    jsbytecode *main;
+    JSAtomMap atomMap;
+    JSCompartment *compartment;
+    const char *filename;
+    uint32 lineno;
+    uint16 nslots;
+    uint16 staticLevel;
+    uint16 nClosedArgs;
+    uint16 nClosedVars;
+    js::Bindings bindings;
+
+    JSPrincipals *principals;
+    union {
+# 443 "jsscript.h"
+        JSObject *object;
+        JSScript *nextToGC;
+    } u;
+
+
+
+
+
+    uint32 *closedSlots;
+
+  public:
+# 492 "jsscript.h"
+    jssrcnote *notes() { return (jssrcnote *)(code + length); }
+
+    static const uint8 INVALID_OFFSET = 0xFF;
+    static bool isValidOffset(uint8 offset) { return offset != INVALID_OFFSET; }
+
+    JSObjectArray *objects() {
+        ((void) 0);
+        return (JSObjectArray *)((uint8 *) (this + 1) + objectsOffset);
+    }
+
+    JSUpvarArray *upvars() {
+        ((void) 0);
+        return (JSUpvarArray *) ((uint8 *) (this + 1) + upvarsOffset);
+    }
+
+    JSObjectArray *regexps() {
+        ((void) 0);
+        return (JSObjectArray *) ((uint8 *) (this + 1) + regexpsOffset);
+    }
+
+    JSTryNoteArray *trynotes() {
+        ((void) 0);
+        return (JSTryNoteArray *) ((uint8 *) (this + 1) + trynotesOffset);
+    }
+
+    js::GlobalSlotArray *globals() {
+        ((void) 0);
+        return (js::GlobalSlotArray *) ((uint8 *) (this + 1) + globalsOffset);
+    }
+
+    JSConstArray *consts() {
+        ((void) 0);
+        return (JSConstArray *) ((uint8 *) (this + 1) + constOffset);
+    }
+
+    JSAtom *getAtom(size_t index) {
+        ((void) 0);
+        return atomMap.vector[index];
+    }
+
+    JSObject *getObject(size_t index) {
+        JSObjectArray *arr = objects();
+        ((void) 0);
+        return arr->vector[index];
+    }
+
+    uint32 getGlobalSlot(size_t index) {
+        js::GlobalSlotArray *arr = globals();
+        ((void) 0);
+        return arr->vector[index].slot;
+    }
+
+    JSAtom *getGlobalAtom(size_t index) {
+        js::GlobalSlotArray *arr = globals();
+        ((void) 0);
+        return getAtom(arr->vector[index].atomIndex);
+    }
+
+    JSVersion getVersion() const {
+        return JSVersion(version);
+    }
+
+    inline JSFunction *getFunction(size_t index);
+
+    inline JSObject *getRegExp(size_t index);
+
+    const js::Value &getConst(size_t index) {
+        JSConstArray *arr = consts();
+        ((void) 0);
+        return arr->vector[index];
+    }
+
+
+
+
+
+
+    inline bool isEmpty() const;
+
+    uint32 getClosedArg(uint32 index) {
+        ((void) 0);
+        return closedSlots[index];
+    }
+
+    uint32 getClosedVar(uint32 index) {
+        ((void) 0);
+        return closedSlots[nClosedArgs + index];
+    }
+
+    void copyClosedSlotsTo(JSScript *other);
+};
+
+
+
+
+static inline uintN
+StackDepth(JSScript *script)
+{
+    return script->nslots - script->nfixed;
+}
+# 609 "jsscript.h"
+extern __attribute__((visibility ("default"))) js::Class js_ScriptClass;
+
+extern JSObject *
+js_InitScriptClass(JSContext *cx, JSObject *obj);
+
+
+
+
+
+extern JSBool
+js_InitRuntimeScriptState(JSRuntime *rt);
+
+
+
+
+
+
+
+extern void
+js_FreeRuntimeScriptState(JSRuntime *rt);
+
+extern const char *
+js_SaveScriptFilename(JSContext *cx, const char *filename);
+
+extern const char *
+js_SaveScriptFilenameRT(JSRuntime *rt, const char *filename, uint32 flags);
+
+extern uint32
+js_GetScriptFilenameFlags(const char *filename);
+
+extern void
+js_MarkScriptFilename(const char *filename);
+
+extern void
+js_MarkScriptFilenames(JSRuntime *rt);
+
+extern void
+js_SweepScriptFilenames(JSRuntime *rt);
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+js_CallNewScriptHook(JSContext *cx, JSScript *script, JSFunction *fun);
+
+extern void
+js_CallDestroyScriptHook(JSContext *cx, JSScript *script);
+
+
+
+
+
+extern void
+js_DestroyScript(JSContext *cx, JSScript *script);
+
+extern void
+js_DestroyScriptFromGC(JSContext *cx, JSScript *script);
+
+
+
+
+
+
+
+extern void
+js_DestroyCachedScript(JSContext *cx, JSScript *script);
+
+extern void
+js_TraceScript(JSTracer *trc, JSScript *script);
+
+extern JSObject *
+js_NewScriptObject(JSContext *cx, JSScript *script);
+# 692 "jsscript.h"
+extern jssrcnote *
+js_GetSrcNoteCached(JSContext *cx, JSScript *script, jsbytecode *pc);
+
+
+
+
+
+
+extern uintN
+js_FramePCToLineNumber(JSContext *cx, JSStackFrame *fp);
+
+extern uintN
+js_PCToLineNumber(JSContext *cx, JSScript *script, jsbytecode *pc);
+
+extern jsbytecode *
+js_LineNumberToPC(JSScript *script, uintN lineno);
+
+extern __attribute__((visibility ("default"))) uintN
+js_GetScriptLineExtent(JSScript *script);
+
+static inline JSOp
+js_GetOpcode(JSContext *cx, JSScript *script, jsbytecode *pc)
+{
+    JSOp op = (JSOp) *pc;
+    if (op == JSOP_TRAP)
+        op = JS_GetTrapOpcode(cx, script, pc);
+    return op;
+}
+
+extern JSScript *
+js_CloneScript(JSContext *cx, JSScript *script);
+# 734 "jsscript.h"
+extern JSBool
+js_XDRScript(JSXDRState *xdr, JSScript **scriptp, JSBool *hasMagic);
+
+inline
+
+# 737 "jsscript.h"
+       bool
+JSObject::isScript() const
+{
+    return getClass() == &js_ScriptClass;
+}
+
+inline JSScript *
+JSObject::getScript() const
+{
+    ((void) 0);
+    return static_cast<JSScript *>(getPrivate());
+}
+# 50 "jsfun.h" 2
+# 117 "jsfun.h"
+struct JSFunction : public JSObject_Slots2
+{
+
+
+    uint16 nargs;
+
+    uint16 flags;
+    union U {
+        struct {
+            js::Native native;
+            js::Class *clasp;
+
+            JSNativeTraceInfo *trcinfo;
+        } n;
+        struct Scripted {
+            JSScript *script;
+            uint16 skipmin;
+
+
+            JSPackedBool wrapper;
+
+
+
+
+
+            js::Shape *names;
+        } i;
+        void *nativeOrScript;
+    } u;
+    JSAtom *atom;
+
+    bool optimizedClosure() const { return ((this)->flags & 0xc000) > 0x4000; }
+    bool needsWrapper() const { return (((this)->flags & 0xc000) == 0xc000) && u.i.skipmin != 0; }
+    bool isInterpreted() const { return (((this)->flags & 0xc000) >= 0x4000); }
+    bool isNative() const { return !(((this)->flags & 0xc000) >= 0x4000); }
+    bool isConstructor() const { return flags & 0x0200; }
+    bool isHeavyweight() const { return ((flags) & 0x80); }
+    bool isFlatClosure() const { return ((this)->flags & 0xc000) == 0x8000; }
+
+    bool isFunctionPrototype() const { return flags & 0x0800; }
+
+
+    inline bool inStrictMode() const;
+
+    void setArgCount(uint16 nargs) {
+        ((void) 0);
+        this->nargs = nargs;
+    }
+
+
+    enum { MAX_ARGS_AND_VARS = 2 * ((1U << 16) - 1) };
+
+
+
+
+    bool mightEscape() const {
+        return isInterpreted() && (isFlatClosure() || !script()->bindings.hasUpvars());
+    }
+
+    bool joinable() const {
+        return flags & 0x0001;
+    }
+
+    JSObject &compiledFunObj() {
+        return *this;
+    }
+
+  private:
+
+
+
+
+
+
+    enum {
+        METHOD_ATOM_SLOT = JSSLOT_FUN_METHOD_ATOM
+    };
+
+  public:
+    void setJoinable() {
+        ((void) 0);
+        getSlotRef(METHOD_ATOM_SLOT).setNull();
+        flags |= 0x0001;
+    }
+
+
+
+
+
+
+    JSAtom *methodAtom() const {
+        return (joinable() && getSlot(METHOD_ATOM_SLOT).isString())
+               ? (((void) 0), (JSAtom *)getSlot(METHOD_ATOM_SLOT).toString())
+               : __null;
+    }
+
+    void setMethodAtom(JSAtom *atom) {
+        ((void) 0);
+        getSlotRef(METHOD_ATOM_SLOT).setString((atom));
+    }
+
+    js::Native maybeNative() const {
+        return isInterpreted() ? __null : u.n.native;
+    }
+
+    JSScript *script() const {
+        ((void) 0);
+        return u.i.script;
+    }
+
+    static uintN offsetOfNativeOrScript() {
+        typedef int js_static_assert49[(__builtin_offsetof (U, n.native) == __builtin_offsetof (U, i.script)) ? 1 : -1];
+        typedef int js_static_assert50[(__builtin_offsetof (U, n.native) == __builtin_offsetof (U, nativeOrScript)) ? 1 : -1];
+        return __builtin_offsetof (JSFunction, u.nativeOrScript);
+    }
+
+
+    static const uint32 CLASS_RESERVED_SLOTS = JSObject::FUN_CLASS_RESERVED_SLOTS;
+};
+# 266 "jsfun.h"
+extern js::Class js_ArgumentsClass;
+
+namespace js {
+
+extern Class StrictArgumentsClass;
+
+struct ArgumentsData {
+    js::Value callee;
+    js::Value slots[1];
+};
+
+}
+
+inline
+
+# 279 "jsfun.h"
+       bool
+JSObject::isNormalArguments() const
+{
+    return getClass() == &js_ArgumentsClass;
+}
+
+inline
+
+# 285 "jsfun.h"
+       bool
+JSObject::isStrictArguments() const
+{
+    return getClass() == &js::StrictArgumentsClass;
+}
+
+inline
+
+# 291 "jsfun.h"
+       bool
+JSObject::isArguments() const
+{
+    return isNormalArguments() || isStrictArguments();
+}
+
+
+
+extern __attribute__((visibility ("default"))) js::Class js_CallClass;
+extern __attribute__((visibility ("default"))) js::Class js_FunctionClass;
+extern js::Class js_DeclEnvClass;
+
+inline
+
+# 303 "jsfun.h"
+       bool
+JSObject::isCall() const
+{
+    return getClass() == &js_CallClass;
+}
+
+inline
+
+# 309 "jsfun.h"
+       bool
+JSObject::isFunction() const
+{
+    return getClass() == &js_FunctionClass;
+}
+
+inline JSFunction *
+JSObject::getFunctionPrivate() const
+{
+    ((void) 0);
+    return reinterpret_cast<JSFunction *>(getPrivate());
+}
+
+namespace js {
+
+
+
+
+
+
+
+extern JSObject *
+NewCallObject(JSContext *cx, js::Bindings *bindings, JSObject &scopeChain, JSObject *callee);
+
+
+
+
+
+
+
+static __attribute__((always_inline)) inline
+
+# 339 "jsfun.h"
+                        bool
+IsFunctionObject(const js::Value &v)
+{
+    return v.isObject() && v.toObject().isFunction();
+}
+
+static __attribute__((always_inline)) inline
+
+# 345 "jsfun.h"
+                        bool
+IsFunctionObject(const js::Value &v, JSObject **funobj)
+{
+    return v.isObject() && (*funobj = &v.toObject())->isFunction();
+}
+
+static __attribute__((always_inline)) inline
+
+# 351 "jsfun.h"
+                        bool
+IsFunctionObject(const js::Value &v, JSFunction **fun)
+{
+    JSObject *funobj;
+    bool b = IsFunctionObject(v, &funobj);
+    if (b)
+        *fun = funobj->getFunctionPrivate();
+    return b;
+}
+
+extern __attribute__((always_inline)) inline
+
+# 361 "jsfun.h"
+                        bool
+SameTraceType(const Value &lhs, const Value &rhs)
+{
+    return SameType(lhs, rhs) &&
+           (lhs.isPrimitive() ||
+            lhs.toObject().isFunction() == rhs.toObject().isFunction());
+}
+# 382 "jsfun.h"
+inline
+
+# 382 "jsfun.h"
+       bool
+IsInternalFunctionObject(JSObject *funobj)
+{
+    ((void) 0);
+    JSFunction *fun = (JSFunction *) funobj->getPrivate();
+    return funobj == fun && (fun->flags & 0x08) && !funobj->getParent();
+}
+
+
+static __attribute__((always_inline)) inline
+
+# 391 "jsfun.h"
+                        bool
+IsConstructing(const Value *vp)
+{
+# 403 "jsfun.h"
+    return vp[1].isMagic();
+}
+
+static __attribute__((always_inline)) inline
+
+# 406 "jsfun.h"
+                        bool
+IsConstructing_PossiblyWithGivenThisObject(const Value *vp, JSObject **ctorThis)
+{
+# 418 "jsfun.h"
+    bool isCtor = vp[1].isMagic();
+    if (isCtor)
+        *ctorThis = vp[1].getMagicObjectOrNullPayload();
+    return isCtor;
+}
+
+inline const char *
+GetFunctionNameBytes(JSContext *cx, JSFunction *fun, JSAutoByteString *bytes)
+{
+    if (fun->atom)
+        return bytes->encode(cx, (fun->atom));
+    return js_anonymous_str;
+}
+
+extern __attribute__((visibility ("default"))) bool
+IsBuiltinFunctionConstructor(JSFunction *fun);
+# 447 "jsfun.h"
+const Shape *
+LookupInterpretedFunctionPrototype(JSContext *cx, JSObject *funobj);
+
+}
+
+extern JSString *
+fun_toStringHelper(JSContext *cx, JSObject *obj, uintN indent);
+
+extern JSFunction *
+js_NewFunction(JSContext *cx, JSObject *funobj, js::Native native, uintN nargs,
+               uintN flags, JSObject *parent, JSAtom *atom);
+
+extern JSObject *
+js_InitFunctionClass(JSContext *cx, JSObject *obj);
+
+extern JSObject *
+js_InitArgumentsClass(JSContext *cx, JSObject *obj);
+
+extern void
+js_TraceFunction(JSTracer *trc, JSFunction *fun);
+
+extern void
+js_FinalizeFunction(JSContext *cx, JSFunction *fun);
+
+extern JSObject *
+js_CloneFunctionObject(JSContext *cx, JSFunction *fun, JSObject *parent,
+                       JSObject *proto);
+
+inline JSObject *
+CloneFunctionObject(JSContext *cx, JSFunction *fun, JSObject *parent)
+{
+    ((void) 0);
+    JSObject *proto;
+    if (!js_GetClassPrototype(cx, parent, JSProto_Function, &proto))
+        return __null;
+    return js_CloneFunctionObject(cx, fun, parent, proto);
+}
+
+extern JSObject *
+js_AllocFlatClosure(JSContext *cx, JSFunction *fun, JSObject *scopeChain);
+
+extern JSObject *
+js_NewFlatClosure(JSContext *cx, JSFunction *fun, JSOp op, size_t oplen);
+
+extern JSObject *
+js_NewDebuggableFlatClosure(JSContext *cx, JSFunction *fun);
+
+extern JSFunction *
+js_DefineFunction(JSContext *cx, JSObject *obj, jsid id, js::Native native,
+                  uintN nargs, uintN flags);
+# 506 "jsfun.h"
+extern JSFunction *
+js_ValueToFunction(JSContext *cx, const js::Value *vp, uintN flags);
+
+extern JSObject *
+js_ValueToFunctionObject(JSContext *cx, js::Value *vp, uintN flags);
+
+extern JSObject *
+js_ValueToCallableObject(JSContext *cx, js::Value *vp, uintN flags);
+
+extern void
+js_ReportIsNotFunction(JSContext *cx, const js::Value *vp, uintN flags);
+
+extern JSObject *
+js_GetCallObject(JSContext *cx, JSStackFrame *fp);
+
+extern JSObject *
+js_CreateCallObjectOnTrace(JSContext *cx, JSFunction *fun, JSObject *callee, JSObject *scopeChain);
+
+extern void
+js_PutCallObject(JSContext *cx, JSStackFrame *fp);
+
+extern JSBool
+js_PutCallObjectOnTrace(JSContext *cx, JSObject *scopeChain, uint32 nargs,
+                        js::Value *argv, uint32 nvars, js::Value *slots);
+
+namespace js {
+
+extern JSBool
+GetCallArg(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
+
+extern JSBool
+GetCallVar(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
+
+
+
+
+
+extern JSBool
+GetCallVarChecked(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
+
+extern JSBool
+GetCallUpvar(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
+
+extern JSBool
+SetCallArg(JSContext *cx, JSObject *obj, jsid id, JSBool strict, js::Value *vp);
+
+extern JSBool
+SetCallVar(JSContext *cx, JSObject *obj, jsid id, JSBool strict, js::Value *vp);
+
+extern JSBool
+SetCallUpvar(JSContext *cx, JSObject *obj, jsid id, JSBool strict, js::Value *vp);
+
+}
+
+extern JSBool
+js_GetArgsValue(JSContext *cx, JSStackFrame *fp, js::Value *vp);
+
+extern JSBool
+js_GetArgsProperty(JSContext *cx, JSStackFrame *fp, jsid id, js::Value *vp);
+# 576 "jsfun.h"
+extern JSObject *
+js_GetArgsObject(JSContext *cx, JSStackFrame *fp);
+
+extern void
+js_PutArgsObject(JSContext *cx, JSStackFrame *fp);
+
+inline
+
+# 582 "jsfun.h"
+       bool
+js_IsNamedLambda(JSFunction *fun) { return (fun->flags & 0x08) && fun->atom; }
+# 595 "jsfun.h"
+const uint32 JS_ARGS_LENGTH_MAX = ((JSUint32)1 << (19)) - 1024;
+
+
+
+
+
+typedef int js_static_assert51[(JS_ARGS_LENGTH_MAX <= ((JSUint32)1 << (30))) ? 1 : -1];
+typedef int js_static_assert52[(((JS_ARGS_LENGTH_MAX << 1) | 1) <= ((jsint)0x7fffffff)) ? 1 : -1];
+
+extern JSBool
+js_XDRFunctionObject(JSXDRState *xdr, JSObject **objp);
+
+extern JSBool
+js_fun_apply(JSContext *cx, uintN argc, js::Value *vp);
+
+extern JSBool
+js_fun_call(JSContext *cx, uintN argc, js::Value *vp);
+# 63 "jscntxt.h" 2
+# 1 "jsgc.h" 1
+# 53 "jsgc.h"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/setjmp.h" 1 3 4
+# 27 "/usr/powerpc64-unknown-linux-gnu/usr/include/setjmp.h" 3 4
+extern "C" {
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/setjmp.h" 1 3 4
+# 31 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/setjmp.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/wordsize.h" 1 3 4
+# 32 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/setjmp.h" 2 3 4
+# 42 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/setjmp.h" 3 4
+typedef long int __jmp_buf[64] __attribute__ ((__aligned__ (16)));
+# 30 "/usr/powerpc64-unknown-linux-gnu/usr/include/setjmp.h" 2 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/sigset.h" 1 3 4
+# 31 "/usr/powerpc64-unknown-linux-gnu/usr/include/setjmp.h" 2 3 4
+
+
+
+struct __jmp_buf_tag
+  {
+
+
+
+
+    __jmp_buf __jmpbuf;
+    int __mask_was_saved;
+    __sigset_t __saved_mask;
+  };
+
+
+
+
+typedef struct __jmp_buf_tag jmp_buf[1];
+
+
+
+extern int setjmp (jmp_buf __env) throw ();
+
+
+
+
+
+
+extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask) throw ();
+
+
+
+extern int _setjmp (struct __jmp_buf_tag __env[1]) throw ();
+
+
+
+
+
+
+
+
+
+
+extern void longjmp (struct __jmp_buf_tag __env[1], int __val)
+     throw () __attribute__ ((__noreturn__));
+
+
+
+
+
+
+
+extern void _longjmp (struct __jmp_buf_tag __env[1], int __val)
+     throw () __attribute__ ((__noreturn__));
+
+
+
+
+
+
+
+typedef struct __jmp_buf_tag sigjmp_buf[1];
+# 102 "/usr/powerpc64-unknown-linux-gnu/usr/include/setjmp.h" 3 4
+extern void siglongjmp (sigjmp_buf __env, int __val)
+     throw () __attribute__ ((__noreturn__));
+
+
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/setjmp2.h" 1 3 4
+# 25 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/setjmp2.h" 3 4
+extern void longjmp (struct __jmp_buf_tag __env[1], int __val) throw () __asm__ ("" "__longjmp_chk")
+
+                        __attribute__ ((__noreturn__));
+extern void _longjmp (struct __jmp_buf_tag __env[1], int __val) throw () __asm__ ("" "__longjmp_chk")
+
+                        __attribute__ ((__noreturn__));
+extern void siglongjmp (struct __jmp_buf_tag __env[1], int __val) throw () __asm__ ("" "__longjmp_chk")
+
+                        __attribute__ ((__noreturn__));
+# 110 "/usr/powerpc64-unknown-linux-gnu/usr/include/setjmp.h" 2 3 4
+
+
+}
+# 54 "jsgc.h" 2
+
+
+
+
+
+
+# 1 "jsgcchunk.h" 1
+# 46 "jsgcchunk.h"
+namespace js {
+
+
+
+
+const size_t GC_CHUNK_SHIFT = 20;
+
+
+const size_t GC_CHUNK_SIZE = size_t(1) << GC_CHUNK_SHIFT;
+const size_t GC_CHUNK_MASK = GC_CHUNK_SIZE - 1;
+
+__attribute__((visibility ("default"))) void *
+AllocGCChunk();
+
+__attribute__((visibility ("default"))) void
+FreeGCChunk(void *p);
+
+class GCChunkAllocator {
+  public:
+    GCChunkAllocator() {}
+
+    void *alloc() {
+        void *chunk = doAlloc();
+        ((void) 0);
+        return chunk;
+    }
+
+    void free(void *chunk) {
+        ((void) 0);
+        ((void) 0);
+        doFree(chunk);
+    }
+
+  private:
+    virtual void *doAlloc() {
+        return AllocGCChunk();
+    }
+
+    virtual void doFree(void *chunk) {
+        FreeGCChunk(chunk);
+    }
+
+
+    GCChunkAllocator(const GCChunkAllocator &);
+    void operator=(const GCChunkAllocator &);
+};
+
+extern GCChunkAllocator defaultGCChunkAllocator;
+
+}
+# 61 "jsgc.h" 2
+
+
+# 1 "jsversion.h" 1
+# 64 "jsgc.h" 2
+
+
+# 1 "jsgcstats.h" 1
+# 58 "jsgcstats.h"
+namespace js {
+namespace gc {
+
+
+
+
+enum ConservativeGCTest {
+    CGCT_VALID,
+    CGCT_VALIDWITHOFFSET,
+    CGCT_LOWBITSET,
+    CGCT_NOTARENA,
+    CGCT_NOTCHUNK,
+    CGCT_FREEARENA,
+    CGCT_WRONGTAG,
+    CGCT_NOTLIVE,
+    CGCT_END
+};
+
+struct ConservativeGCStats {
+    uint32 counter[gc::CGCT_END];
+
+
+    void add(const ConservativeGCStats &another) {
+        for (size_t i = 0; i != (sizeof (counter) / sizeof (counter)[0]); ++i)
+            counter[i] += another.counter[i];
+    }
+
+    void dump(FILE *fp);
+};
+# 136 "jsgcstats.h"
+}
+# 175 "jsgcstats.h"
+}
+
+extern __attribute__((visibility ("default"))) void
+js_DumpGCStats(JSRuntime *rt, FILE *fp);
+# 67 "jsgc.h" 2
+
+
+struct JSCompartment;
+
+extern "C" void
+js_TraceXML(JSTracer *trc, JSXML* thing);
+
+
+
+
+
+
+
+namespace js {
+
+struct Shape;
+
+namespace gc {
+
+
+
+
+
+enum FinalizeKind {
+    FINALIZE_OBJECT0,
+    FINALIZE_OBJECT2,
+    FINALIZE_OBJECT4,
+    FINALIZE_OBJECT8,
+    FINALIZE_OBJECT12,
+    FINALIZE_OBJECT16,
+    FINALIZE_OBJECT_LAST = FINALIZE_OBJECT16,
+    FINALIZE_FUNCTION,
+
+    FINALIZE_XML,
+
+    FINALIZE_SHORT_STRING,
+    FINALIZE_STRING,
+    FINALIZE_EXTERNAL_STRING,
+    FINALIZE_LIMIT
+};
+
+const uintN JS_FINALIZE_OBJECT_LIMIT = 6;
+
+
+struct ArenaHeader {
+    JSCompartment *compartment;
+    Arena<FreeCell> *next;
+    FreeCell *freeList;
+    unsigned thingKind;
+    bool isUsed;
+    size_t thingSize;
+
+
+
+};
+
+template <typename T>
+union ThingOrCell {
+    T t;
+    FreeCell cell;
+};
+
+template <typename T, size_t N, size_t R>
+struct Things {
+    ThingOrCell<T> things[N];
+    char filler[R];
+};
+
+template <typename T, size_t N>
+struct Things<T, N, 0> {
+    ThingOrCell<T> things[N];
+};
+
+template <typename T>
+struct Arena {
+    static const size_t ArenaSize = 4096;
+
+    struct AlignedArenaHeader {
+        T align[(sizeof(ArenaHeader) + sizeof(T) - 1) / sizeof(T)];
+    };
+
+
+    union {
+        ArenaHeader aheader;
+        AlignedArenaHeader align;
+    };
+
+    static const size_t ThingsPerArena = (ArenaSize - sizeof(AlignedArenaHeader)) / sizeof(T);
+    static const size_t FillerSize = ArenaSize - sizeof(AlignedArenaHeader) - sizeof(T) * ThingsPerArena;
+    Things<T, ThingsPerArena, FillerSize> t;
+
+    inline Chunk *chunk() const;
+    inline size_t arenaIndex() const;
+
+    inline ArenaHeader *header() { return &aheader; };
+
+    inline MarkingDelay *getMarkingDelay() const;
+    inline ArenaBitmap *bitmap() const;
+
+    inline ConservativeGCTest mark(T *thing, JSTracer *trc);
+    void markDelayedChildren(JSTracer *trc);
+    inline bool inFreeList(void *thing) const;
+    inline T *getAlignedThing(void *thing);
+
+
+
+
+    void init(JSCompartment *compartment, unsigned thingKind);
+};
+typedef int js_static_assert53[(sizeof(Arena<FreeCell>) == 4096) ? 1 : -1];
+
+
+
+
+
+static const uint32 BLACK = 0;
+
+
+struct ArenaBitmap {
+    static const size_t BitCount = Arena<FreeCell>::ArenaSize / Cell::CellSize;
+    static const size_t BitWords = BitCount / (8 * 8);
+
+    uintptr_t bitmap[BitWords];
+
+    __attribute__((always_inline)) inline bool isMarked(size_t bit, uint32 color) {
+        bit += color;
+        ((void) 0);
+        uintptr_t *word = &bitmap[bit / (8 * 8)];
+        return *word & (uintptr_t(1) << (bit % (8 * 8)));
+    }
+
+    __attribute__((always_inline)) inline bool markIfUnmarked(size_t bit, uint32 color) {
+        ((void) 0);
+        uintptr_t *word = &bitmap[bit / (8 * 8)];
+        uintptr_t mask = (uintptr_t(1) << (bit % (8 * 8)));
+        if (*word & mask)
+            return false;
+        *word |= mask;
+        if (color != BLACK) {
+            bit += color;
+            word = &bitmap[bit / (8 * 8)];
+            mask = (uintptr_t(1) << (bit % (8 * 8)));
+            if (*word & mask)
+                return false;
+            *word |= mask;
+        }
+        return true;
+    }
+
+    __attribute__((always_inline)) inline void unmark(size_t bit, uint32 color) {
+        bit += color;
+        ((void) 0);
+        uintptr_t *word = &bitmap[bit / (8 * 8)];
+        *word &= ~(uintptr_t(1) << (bit % (8 * 8)));
+    }
+# 232 "jsgc.h"
+};
+
+
+typedef int js_static_assert54[(Arena<FreeCell>::ArenaSize % Cell::CellSize == 0) ? 1 : -1];
+typedef int js_static_assert55[(ArenaBitmap::BitCount % (8 * 8) == 0) ? 1 : -1];
+
+
+struct MarkingDelay {
+    Arena<Cell> *link;
+    uintptr_t unmarkedChildren;
+    jsuword start;
+
+    void init()
+    {
+        link = __null;
+        unmarkedChildren = 0;
+    }
+};
+
+struct EmptyArenaLists {
+
+    Arena<FreeCell> *cellFreeList;
+
+
+    Arena<FreeCell> *freeLists[FINALIZE_LIMIT];
+
+    void init() {
+        PodZero(this);
+    }
+
+    Arena<FreeCell> *getOtherArena() {
+        Arena<FreeCell> *arena = cellFreeList;
+        if (arena) {
+            cellFreeList = arena->header()->next;
+            return arena;
+        }
+        for (int i = 0; i < FINALIZE_LIMIT; i++) {
+            if ((arena = (Arena<FreeCell> *) freeLists[i])) {
+                freeLists[i] = freeLists[i]->header()->next;
+                return arena;
+            }
+        }
+        ;
+        return __null;
+    }
+
+    template <typename T>
+    inline Arena<T> *getTypedFreeList(unsigned thingKind);
+
+    template <typename T>
+    inline Arena<T> *getNext(JSCompartment *comp, unsigned thingKind);
+
+    template <typename T>
+    inline void insert(Arena<T> *arena);
+};
+
+template <typename T>
+inline Arena<T> *
+EmptyArenaLists::getTypedFreeList(unsigned thingKind) {
+    ((void) 0);
+    Arena<T> *arena = (Arena<T>*) freeLists[thingKind];
+    if (arena) {
+        freeLists[thingKind] = freeLists[thingKind]->header()->next;
+        return arena;
+    }
+    return __null;
+}
+
+template<typename T>
+inline Arena<T> *
+EmptyArenaLists::getNext(JSCompartment *comp, unsigned thingKind) {
+    Arena<T> *arena = getTypedFreeList<T>(thingKind);
+    if (arena) {
+        ((void) 0);
+        ((void) 0);
+        arena->header()->isUsed = true;
+        arena->header()->thingKind = thingKind;
+        arena->header()->compartment = comp;
+        return arena;
+    }
+    arena = (Arena<T> *)getOtherArena();
+    ((void) 0);
+    arena->init(comp, thingKind);
+    return arena;
+}
+
+template <typename T>
+inline void
+EmptyArenaLists::insert(Arena<T> *arena) {
+    unsigned thingKind = arena->header()->thingKind;
+    ((void) 0);
+    arena->header()->next = freeLists[thingKind];
+    freeLists[thingKind] = (Arena<FreeCell> *) arena;
+}
+
+
+struct ChunkInfo {
+    Chunk *link;
+    JSRuntime *runtime;
+    EmptyArenaLists emptyArenaLists;
+    size_t age;
+    size_t numFree;
+};
+
+
+struct Chunk {
+    static const size_t BytesPerArena = sizeof(Arena<FreeCell>) +
+                                        sizeof(ArenaBitmap) +
+                                        sizeof(MarkingDelay);
+
+    static const size_t ArenasPerChunk = (GC_CHUNK_SIZE - sizeof(ChunkInfo)) / BytesPerArena;
+
+    Arena<FreeCell> arenas[ArenasPerChunk];
+    ArenaBitmap bitmaps[ArenasPerChunk];
+    MarkingDelay markingDelay[ArenasPerChunk];
+
+    ChunkInfo info;
+
+    void clearMarkBitmap();
+    void init(JSRuntime *rt);
+
+    bool unused();
+    bool hasAvailableArenas();
+    bool withinArenasRange(Cell *cell);
+
+    template <typename T>
+    Arena<T> *allocateArena(JSCompartment *comp, unsigned thingKind);
+
+    template <typename T>
+    void releaseArena(Arena<T> *a);
+
+    JSRuntime *getRuntime();
+};
+typedef int js_static_assert56[(sizeof(Chunk) <= GC_CHUNK_SIZE) ? 1 : -1];
+typedef int js_static_assert57[(sizeof(Chunk) + Chunk::BytesPerArena > GC_CHUNK_SIZE) ? 1 : -1];
+
+Arena<Cell> *
+Cell::arena() const
+{
+    uintptr_t addr = uintptr_t(this);
+    ((void) 0);
+    addr &= ~(Arena<FreeCell>::ArenaSize - 1);
+    return reinterpret_cast<Arena<Cell> *>(addr);
+}
+
+Chunk *
+Cell::chunk() const
+{
+    uintptr_t addr = uintptr_t(this);
+    ((void) 0);
+    addr &= ~(GC_CHUNK_SIZE - 1);
+    return reinterpret_cast<Chunk *>(addr);
+}
+
+ArenaBitmap *
+Cell::bitmap() const
+{
+    return &chunk()->bitmaps[arena()->arenaIndex()];
+}
+
+
+size_t
+Cell::cellIndex() const
+{
+    return reinterpret_cast<const FreeCell *>(this) - reinterpret_cast<FreeCell *>(&arena()->t);
+}
+
+template <typename T>
+Chunk *
+Arena<T>::chunk() const
+{
+    uintptr_t addr = uintptr_t(this);
+    ((void) 0);
+    addr &= ~(GC_CHUNK_SIZE - 1);
+    return reinterpret_cast<Chunk *>(addr);
+}
+
+template <typename T>
+size_t
+Arena<T>::arenaIndex() const
+{
+    return reinterpret_cast<const Arena<FreeCell> *>(this) - chunk()->arenas;
+}
+
+template <typename T>
+MarkingDelay *
+Arena<T>::getMarkingDelay() const
+{
+    return &chunk()->markingDelay[arenaIndex()];
+}
+
+template <typename T>
+ArenaBitmap *
+Arena<T>::bitmap() const
+{
+    return &chunk()->bitmaps[arenaIndex()];
+}
+
+template <typename T>
+inline T *
+Arena<T>::getAlignedThing(void *thing)
+{
+    jsuword start = reinterpret_cast<jsuword>(&t.things[0]);
+    jsuword offset = reinterpret_cast<jsuword>(thing) - start;
+    offset -= offset % aheader.thingSize;
+    return reinterpret_cast<T *>(start + offset);
+}
+# 449 "jsgc.h"
+static void
+AssertValidColor(const void *thing, uint32 color)
+{
+    ((void) 0);
+}
+
+inline
+
+# 455 "jsgc.h"
+       bool
+Cell::isMarked(uint32 color = BLACK) const
+{
+    AssertValidColor(this, color);
+    return bitmap()->isMarked(cellIndex(), color);
+}
+
+
+bool
+# 463 "jsgc.h"
+Cell::markIfUnmarked(uint32 color = BLACK) const
+{
+    AssertValidColor(this, color);
+    return bitmap()->markIfUnmarked(cellIndex(), color);
+}
+
+void
+Cell::unmark(uint32 color) const
+{
+    ((void) 0);
+    AssertValidColor(this, color);
+    bitmap()->unmark(cellIndex(), color);
+}
+
+JSCompartment *
+Cell::compartment() const
+{
+    return arena()->header()->compartment;
+}
+
+template <typename T>
+static inline
+Arena<T> *
+GetArena(Cell *cell)
+{
+    return reinterpret_cast<Arena<T> *>(cell->arena());
+}
+# 501 "jsgc.h"
+const size_t GC_ARENA_ALLOCATION_TRIGGER = 30 * js::GC_CHUNK_SIZE;
+
+
+
+
+
+
+
+const float GC_HEAP_GROWTH_FACTOR = 3.0f;
+
+static inline size_t
+GetFinalizableTraceKind(size_t thingKind)
+{
+    typedef int js_static_assert58[(JSExternalString::TYPE_LIMIT == 8) ? 1 : -1];
+
+    static const uint8 map[FINALIZE_LIMIT] = {
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+
+        2,
+
+        1,
+        1,
+        1,
+    };
+
+    ((void) 0);
+    return map[thingKind];
+}
+
+static inline
+
+# 536 "jsgc.h"
+              bool
+IsFinalizableStringKind(unsigned thingKind)
+{
+    return unsigned(FINALIZE_SHORT_STRING) <= thingKind &&
+           thingKind <= unsigned(FINALIZE_EXTERNAL_STRING);
+}
+
+
+
+
+
+static inline intN
+GetExternalStringGCType(JSExternalString *str)
+{
+    typedef int js_static_assert59[(FINALIZE_STRING + 1 == FINALIZE_EXTERNAL_STRING) ? 1 : -1];
+    ((void) 0);
+
+    unsigned thingKind = str->externalStringType;
+    ((void) 0);
+    return intN(thingKind);
+}
+
+static inline uint32
+GetGCThingTraceKind(void *thing)
+{
+    ((void) 0);
+    if (JSString::isStatic(thing))
+        return 1;
+    Cell *cell = reinterpret_cast<Cell *>(thing);
+    return GetFinalizableTraceKind(cell->arena()->header()->thingKind);
+}
+
+static inline JSRuntime *
+GetGCThingRuntime(void *thing)
+{
+    return reinterpret_cast<FreeCell *>(thing)->chunk()->info.runtime;
+}
+
+
+
+
+
+
+
+struct ArenaList {
+    Arena<FreeCell> *head;
+    Arena<FreeCell> *cursor;
+
+    inline void init() {
+        head = __null;
+        cursor = __null;
+    }
+
+    inline Arena<FreeCell> *getNextWithFreeList() {
+        Arena<FreeCell> *a;
+        while (cursor != __null) {
+            ArenaHeader *aheader = cursor->header();
+            a = cursor;
+            cursor = aheader->next;
+            if (aheader->freeList)
+                return a;
+        }
+        return __null;
+    }
+# 621 "jsgc.h"
+    inline void insert(Arena<FreeCell> *a) {
+        a->header()->next = head;
+        head = a;
+    }
+
+    void releaseAll() {
+        while (head) {
+            Arena<FreeCell> *next = head->header()->next;
+            head->chunk()->releaseArena(head);
+            head = next;
+        }
+        head = __null;
+        cursor = __null;
+    }
+
+    inline bool isEmpty() const {
+        return (head == __null);
+    }
+};
+
+struct FreeLists {
+    FreeCell **finalizables[FINALIZE_LIMIT];
+
+    void purge();
+
+    inline FreeCell *getNext(uint32 kind) {
+        FreeCell *top = __null;
+        if (finalizables[kind]) {
+            top = *finalizables[kind];
+            if (top) {
+                *finalizables[kind] = top->link;
+            } else {
+                finalizables[kind] = __null;
+            }
+
+
+
+
+        }
+        return top;
+    }
+
+    template <typename T>
+    inline void populate(Arena<T> *a, uint32 thingKind) {
+        finalizables[thingKind] = &a->header()->freeList;
+    }
+# 677 "jsgc.h"
+};
+}
+
+typedef Vector<gc::Chunk *, 32, SystemAllocPolicy> GCChunks;
+
+struct GCPtrHasher
+{
+    typedef void *Lookup;
+
+    static HashNumber hash(void *key) {
+        return HashNumber(uintptr_t(key) >> JS_GCTHING_ZEROBITS);
+    }
+
+    static bool match(void *l, void *k) { return l == k; }
+};
+
+typedef HashMap<void *, uint32, GCPtrHasher, SystemAllocPolicy> GCLocks;
+
+struct RootInfo {
+    RootInfo() {}
+    RootInfo(const char *name, JSGCRootType type) : name(name), type(type) {}
+    const char *name;
+    JSGCRootType type;
+};
+
+typedef js::HashMap<void *,
+                    RootInfo,
+                    js::DefaultHasher<void *>,
+                    js::SystemAllocPolicy> RootedValueMap;
+
+
+typedef int js_static_assert60[(sizeof(HashNumber) == 4) ? 1 : -1];
+
+struct WrapperHasher
+{
+    typedef Value Lookup;
+
+    static HashNumber hash(Value key) {
+        uint64 bits = (Jsvalify(key));
+        return (uint32)bits ^ (uint32)(bits >> 32);
+    }
+
+    static bool match(const Value &l, const Value &k) { return l == k; }
+};
+
+typedef HashMap<Value, Value, WrapperHasher, SystemAllocPolicy> WrapperMap;
+
+class AutoValueVector;
+class AutoIdVector;
+}
+
+static inline void
+CheckGCFreeListLink(js::gc::FreeCell *cell)
+{
+
+
+
+
+    ((void) 0)
+
+                                     ;
+    ((void) 0);
+}
+
+extern
+
+# 741 "jsgc.h"
+       bool
+RefillFinalizableFreeList(JSContext *cx, unsigned thingKind);
+# 753 "jsgc.h"
+extern intN
+js_GetExternalStringGCType(JSString *str);
+
+extern __attribute__((visibility ("default"))) uint32
+js_GetGCThingTraceKind(void *thing);
+# 770 "jsgc.h"
+extern JSBool
+js_InitGC(JSRuntime *rt, uint32 maxbytes);
+
+extern void
+js_FinishGC(JSRuntime *rt);
+
+extern JSBool
+js_AddRoot(JSContext *cx, js::Value *vp, const char *name);
+
+extern JSBool
+js_AddGCThingRoot(JSContext *cx, void **rp, const char *name);
+# 789 "jsgc.h"
+extern uint32
+js_MapGCRoots(JSRuntime *rt, JSGCRootMapFun map, void *data);
+
+
+typedef struct JSPtrTable {
+    size_t count;
+    void **array;
+} JSPtrTable;
+
+extern JSBool
+js_RegisterCloseableIterator(JSContext *cx, JSObject *obj);
+
+
+
+
+
+
+extern JSBool
+js_LockGCThingRT(JSRuntime *rt, void *thing);
+
+extern void
+js_UnlockGCThingRT(JSRuntime *rt, void *thing);
+
+extern __attribute__((visibility ("default"))) bool
+IsAboutToBeFinalized(JSContext *cx, void *thing);
+
+extern __attribute__((visibility ("default"))) bool
+js_GCThingIsMarked(void *thing, uintN color);
+
+extern void
+js_TraceStackFrame(JSTracer *trc, JSStackFrame *fp);
+
+namespace js {
+
+extern void
+MarkRuntime(JSTracer *trc);
+
+extern void
+TraceRuntime(JSTracer *trc);
+
+extern __attribute__((visibility ("default"))) void
+MarkContext(JSTracer *trc, JSContext *acx);
+
+
+extern void
+TriggerGC(JSRuntime *rt);
+
+
+extern void
+TriggerCompartmentGC(JSCompartment *comp);
+
+extern void
+MaybeGC(JSContext *cx);
+
+}
+
+
+
+
+typedef enum JSGCInvocationKind {
+
+    GC_NORMAL = 0,
+
+
+
+
+
+    GC_LAST_CONTEXT = 1
+} JSGCInvocationKind;
+
+
+extern void
+js_GC(JSContext *cx, JSCompartment *comp, JSGCInvocationKind gckind);
+# 870 "jsgc.h"
+extern void
+js_WaitForGC(JSRuntime *rt);
+
+
+
+
+
+
+
+extern void
+js_DestroyScriptsToGC(JSContext *cx, JSCompartment *comp);
+
+namespace js {
+# 896 "jsgc.h"
+class GCHelperThread {
+    static const size_t FREE_ARRAY_SIZE = size_t(1) << 16;
+    static const size_t FREE_ARRAY_LENGTH = FREE_ARRAY_SIZE / sizeof(void *);
+
+    PRThread* thread;
+    PRCondVar* wakeup;
+    PRCondVar* sweepingDone;
+    bool shutdown;
+    bool sweeping;
+
+    Vector<void **, 16, js::SystemAllocPolicy> freeVector;
+    void **freeCursor;
+    void **freeCursorEnd;
+
+    __attribute__((visibility ("default"))) void
+    replenishAndFreeLater(void *ptr);
+
+    static void freeElementsAndArray(void **array, void **end) {
+        ((void) 0);
+        for (void **p = array; p != end; ++p)
+            js_free(*p);
+        js_free(array);
+    }
+
+    static void threadMain(void* arg);
+
+    void threadLoop(JSRuntime *rt);
+    void doSweep();
+
+  public:
+    GCHelperThread()
+      : thread(__null),
+        wakeup(__null),
+        sweepingDone(__null),
+        shutdown(false),
+        sweeping(false),
+        freeCursor(__null),
+        freeCursorEnd(__null) { }
+
+    bool init(JSRuntime *rt);
+    void finish(JSRuntime *rt);
+
+
+    void startBackgroundSweep(JSRuntime *rt);
+
+
+    void waitBackgroundSweepEnd(JSRuntime *rt);
+
+    void freeLater(void *ptr) {
+        ((void) 0);
+        if (freeCursor != freeCursorEnd)
+            *freeCursor++ = ptr;
+        else
+            replenishAndFreeLater(ptr);
+    }
+};
+
+
+
+struct GCChunkHasher {
+    typedef gc::Chunk *Lookup;
+
+
+
+
+
+    static HashNumber hash(gc::Chunk *chunk) {
+        ((void) 0);
+        return HashNumber(jsuword(chunk) >> GC_CHUNK_SHIFT);
+    }
+
+    static bool match(gc::Chunk *k, gc::Chunk *l) {
+        ((void) 0);
+        ((void) 0);
+        return k == l;
+    }
+};
+
+typedef HashSet<js::gc::Chunk *, GCChunkHasher, SystemAllocPolicy> GCChunkSet;
+
+struct ConservativeGCThreadData {
+
+
+
+
+
+    jsuword *nativeStackTop;
+
+    union {
+        jmp_buf jmpbuf;
+        jsuword words[(((sizeof(jmp_buf))+(sizeof(jsuword))-1)/(sizeof(jsuword)))];
+    } registerSnapshot;
+
+
+
+
+
+
+    unsigned requestThreshold;
+
+    __attribute__((noinline)) void recordStackTop();
+
+
+    void updateForRequestEnd(unsigned suspendCount) {
+        if (suspendCount)
+            recordStackTop();
+        else
+            nativeStackTop = __null;
+    }
+
+
+    bool hasStackToScan() const {
+        return !!nativeStackTop;
+    }
+};
+
+struct GCMarker : public JSTracer {
+  private:
+
+    uint32 color;
+  public:
+    jsuword stackLimit;
+
+    js::gc::Arena<js::gc::Cell> *unmarkedArenaStackTop;
+# 1036 "jsgc.h"
+  public:
+    explicit GCMarker(JSContext *cx);
+    ~GCMarker();
+
+    uint32 getMarkColor() const {
+        return color;
+    }
+
+    void setMarkColor(uint32 newColor) {
+
+
+
+
+        markDelayedChildren();
+        color = newColor;
+    }
+
+    void delayMarkingChildren(void *thing);
+
+    __attribute__((visibility ("default"))) void markDelayedChildren();
+};
+
+void
+MarkStackRangeConservatively(JSTracer *trc, Value *begin, Value *end);
+
+}
+
+extern void
+js_FinalizeStringRT(JSRuntime *rt, JSString *str);
+
+
+
+
+
+extern void
+js_MarkTraps(JSTracer *trc);
+
+namespace js {
+namespace gc {
+# 1095 "jsgc.h"
+extern
+
+# 1095 "jsgc.h"
+       bool
+SetProtoCheckingForCycles(JSContext *cx, JSObject *obj, JSObject *proto);
+
+JSCompartment *
+NewCompartment(JSContext *cx, JSPrincipals *principals);
+
+}
+}
+
+inline JSCompartment *
+JSObject::getCompartment() const
+{
+    return compartment();
+}
+# 64 "jscntxt.h" 2
+
+
+# 1 "jsinterp.h" 1
+# 53 "jsinterp.h"
+struct JSFrameRegs
+{
+   
+    js::Value *sp;
+    jsbytecode *pc;
+    JSStackFrame *fp;
+};
+
+
+enum JSInterpMode
+{
+    JSINTERP_NORMAL = 0,
+    JSINTERP_RECORD = 1,
+    JSINTERP_SAFEPOINT = 2,
+    JSINTERP_PROFILE = 3
+};
+
+
+enum JSFrameFlags
+{
+
+    JSFRAME_GLOBAL = 0x1,
+    JSFRAME_FUNCTION = 0x2,
+    JSFRAME_DUMMY = 0x4,
+
+
+    JSFRAME_EVAL = 0x8,
+    JSFRAME_DEBUGGER = 0x10,
+    JSFRAME_GENERATOR = 0x20,
+    JSFRAME_FLOATING_GENERATOR = 0x40,
+    JSFRAME_CONSTRUCTING = 0x80,
+
+
+    JSFRAME_ASSIGNING = 0x100,
+    JSFRAME_YIELDING = 0x200,
+    JSFRAME_FINISHED_IN_INTERPRETER = 0x400,
+
+
+    JSFRAME_OVERRIDE_ARGS = 0x1000,
+    JSFRAME_OVERFLOW_ARGS = 0x2000,
+    JSFRAME_UNDERFLOW_ARGS = 0x4000,
+
+
+    JSFRAME_HAS_IMACRO_PC = 0x8000,
+    JSFRAME_HAS_CALL_OBJ = 0x10000,
+    JSFRAME_HAS_ARGS_OBJ = 0x20000,
+    JSFRAME_HAS_HOOK_DATA = 0x40000,
+    JSFRAME_HAS_ANNOTATION = 0x80000,
+    JSFRAME_HAS_RVAL = 0x100000,
+    JSFRAME_HAS_SCOPECHAIN = 0x200000,
+    JSFRAME_HAS_PREVPC = 0x400000
+};
+
+namespace js { namespace mjit { struct JITScript; } }
+
+
+
+
+
+struct JSStackFrame
+{
+  private:
+    mutable uint32 flags_;
+    union {
+        JSScript *script;
+        JSFunction *fun;
+    } exec;
+    union {
+        uintN nactual;
+        JSObject *obj;
+        JSScript *script;
+    } args;
+    mutable JSObject *scopeChain_;
+    JSStackFrame *prev_;
+    void *ncode_;
+
+
+    js::Value rval_;
+    jsbytecode *prevpc_;
+    jsbytecode *imacropc_;
+    void *hookData_;
+    void *annotation_;
+
+    friend class js::StackSpace;
+    friend class js::FrameRegsIter;
+    friend struct JSContext;
+
+    inline void initPrev(JSContext *cx);
+
+  public:
+# 159 "jsinterp.h"
+    bool isFunctionFrame() const {
+        return !!(flags_ & JSFRAME_FUNCTION);
+    }
+
+    bool isGlobalFrame() const {
+        return !!(flags_ & JSFRAME_GLOBAL);
+    }
+
+    bool isDummyFrame() const {
+        return !!(flags_ & JSFRAME_DUMMY);
+    }
+
+    bool isScriptFrame() const {
+        return !!(flags_ & (JSFRAME_FUNCTION | JSFRAME_GLOBAL));
+    }
+
+    bool isEvalFrame() const {
+        ((void) 0);
+        return flags_ & JSFRAME_EVAL;
+    }
+
+    bool isExecuteFrame() const {
+        return !!(flags_ & (JSFRAME_GLOBAL | JSFRAME_EVAL));
+    }
+# 195 "jsinterp.h"
+    inline void initCallFrame(JSContext *cx, JSObject &callee, JSFunction *fun,
+                              uint32 nactual, uint32 flags);
+
+
+    inline void resetInvokeCallFrame();
+
+
+    inline void initCallFrameCallerHalf(JSContext *cx, uint32 flags, void *ncode);
+    inline void initCallFrameEarlyPrologue(JSFunction *fun, uint32 nactual);
+    inline void initCallFrameLatePrologue();
+
+
+    inline void initEvalFrame(JSContext *cx, JSScript *script, JSStackFrame *prev,
+                              uint32 flags);
+    inline void initGlobalFrame(JSScript *script, JSObject &chain, uint32 flags);
+
+
+    inline void stealFrameAndSlots(js::Value *vp, JSStackFrame *otherfp,
+                                   js::Value *othervp, js::Value *othersp);
+
+
+    inline void initDummyFrame(JSContext *cx, JSObject &chain);
+# 231 "jsinterp.h"
+    JSStackFrame *prev() const {
+        return prev_;
+    }
+
+    inline void resetGeneratorPrev(JSContext *cx);
+# 245 "jsinterp.h"
+    js::Value *slots() const {
+        return (js::Value *)(this + 1);
+    }
+
+    js::Value *base() const {
+        return slots() + script()->nfixed;
+    }
+
+    js::Value &varSlot(uintN i) {
+        ((void) 0);
+        ((void) 0);
+        return slots()[i];
+    }
+# 270 "jsinterp.h"
+    jsbytecode *pc(JSContext *cx, JSStackFrame *next = __null);
+
+    jsbytecode *prevpc() {
+        ((void) 0);
+        return prevpc_;
+    }
+
+    JSScript *script() const {
+        ((void) 0);
+        return isFunctionFrame()
+               ? isEvalFrame() ? args.script : fun()->script()
+               : exec.script;
+    }
+
+    JSScript *functionScript() const {
+        ((void) 0);
+        return isEvalFrame() ? args.script : fun()->script();
+    }
+
+    JSScript *globalScript() const {
+        ((void) 0);
+        return exec.script;
+    }
+
+    JSScript *maybeScript() const {
+        return isScriptFrame() ? script() : __null;
+    }
+
+    size_t numFixed() const {
+        return script()->nfixed;
+    }
+
+    size_t numSlots() const {
+        return script()->nslots;
+    }
+
+    size_t numGlobalVars() const {
+        ((void) 0);
+        return exec.script->nfixed;
+    }
+
+
+
+
+
+
+
+    JSFunction* fun() const {
+        ((void) 0);
+        return exec.fun;
+    }
+
+    JSFunction* maybeFun() const {
+        return isFunctionFrame() ? fun() : __null;
+    }
+# 346 "jsinterp.h"
+    bool hasArgs() const {
+        return isFunctionFrame() && !isEvalFrame();
+    }
+
+    uintN numFormalArgs() const {
+        ((void) 0);
+        return fun()->nargs;
+    }
+
+    js::Value &formalArg(uintN i) const {
+        ((void) 0);
+        return formalArgs()[i];
+    }
+
+    js::Value *formalArgs() const {
+        ((void) 0);
+        return (js::Value *)this - numFormalArgs();
+    }
+
+    js::Value *formalArgsEnd() const {
+        ((void) 0);
+        return (js::Value *)this;
+    }
+
+    js::Value *maybeFormalArgs() const {
+        return (flags_ & (JSFRAME_FUNCTION | JSFRAME_EVAL)) == JSFRAME_FUNCTION
+               ? formalArgs()
+               : __null;
+    }
+
+    inline uintN numActualArgs() const;
+    inline js::Value *actualArgs() const;
+    inline js::Value *actualArgsEnd() const;
+
+    inline js::Value &canonicalActualArg(uintN i) const;
+    template <class Op> inline void forEachCanonicalActualArg(Op op);
+    template <class Op> inline void forEachFormalArg(Op op);
+
+    inline void clearMissingArgs();
+
+    bool hasArgsObj() const {
+        return !!(flags_ & JSFRAME_HAS_ARGS_OBJ);
+    }
+
+    JSObject &argsObj() const {
+        ((void) 0);
+        ((void) 0);
+        return *args.obj;
+    }
+
+    JSObject *maybeArgsObj() const {
+        return hasArgsObj() ? &argsObj() : __null;
+    }
+
+    inline void setArgsObj(JSObject &obj);
+    inline void clearArgsObj();
+# 417 "jsinterp.h"
+    js::Value &functionThis() const {
+        ((void) 0);
+        if (isEvalFrame())
+            return ((js::Value *)this)[-1];
+        return formalArgs()[-1];
+    }
+
+    JSObject &constructorThis() const {
+        ((void) 0);
+        return formalArgs()[-1].toObject();
+    }
+
+    js::Value &globalThis() const {
+        ((void) 0);
+        return ((js::Value *)this)[-1];
+    }
+
+    js::Value &thisValue() const {
+        if (flags_ & (JSFRAME_EVAL | JSFRAME_GLOBAL))
+            return ((js::Value *)this)[-1];
+        return formalArgs()[-1];
+    }
+
+    inline bool computeThis(JSContext *cx);
+# 449 "jsinterp.h"
+    js::Value &calleeValue() const {
+        ((void) 0);
+        if (isEvalFrame())
+            return ((js::Value *)this)[-2];
+        return formalArgs()[-2];
+    }
+
+    JSObject &callee() const {
+        ((void) 0);
+        return calleeValue().toObject();
+    }
+
+    JSObject *maybeCallee() const {
+        return isFunctionFrame() ? &callee() : __null;
+    }
+
+
+
+
+
+
+
+    bool getValidCalleeObject(JSContext *cx, js::Value *vp);
+# 491 "jsinterp.h"
+    JSObject &scopeChain() const {
+        ((void) 0);
+        if (!(flags_ & JSFRAME_HAS_SCOPECHAIN)) {
+            scopeChain_ = callee().getParent();
+            flags_ |= JSFRAME_HAS_SCOPECHAIN;
+        }
+        return *scopeChain_;
+    }
+
+    bool hasCallObj() const {
+        return !!(flags_ & JSFRAME_HAS_CALL_OBJ);
+    }
+
+    inline JSObject &callObj() const;
+    inline JSObject *maybeCallObj() const;
+    inline void setScopeChainNoCallObj(JSObject &obj);
+    inline void setScopeChainAndCallObj(JSObject &obj);
+    inline void clearCallObj();
+# 518 "jsinterp.h"
+    bool hasImacropc() const {
+        return flags_ & JSFRAME_HAS_IMACRO_PC;
+    }
+
+    jsbytecode *imacropc() const {
+        ((void) 0);
+        return imacropc_;
+    }
+
+    jsbytecode *maybeImacropc() const {
+        return hasImacropc() ? imacropc() : __null;
+    }
+
+    void clearImacropc() {
+        flags_ &= ~JSFRAME_HAS_IMACRO_PC;
+    }
+
+    void setImacropc(jsbytecode *pc) {
+        ((void) 0);
+        ((void) 0);
+        imacropc_ = pc;
+        flags_ |= JSFRAME_HAS_IMACRO_PC;
+    }
+
+
+
+    void* annotation() const {
+        return (flags_ & JSFRAME_HAS_ANNOTATION) ? annotation_ : __null;
+    }
+
+    void setAnnotation(void *annot) {
+        flags_ |= JSFRAME_HAS_ANNOTATION;
+        annotation_ = annot;
+    }
+
+
+
+    bool hasHookData() const {
+        return !!(flags_ & JSFRAME_HAS_HOOK_DATA);
+    }
+
+    void* hookData() const {
+        ((void) 0);
+        return hookData_;
+    }
+
+    void* maybeHookData() const {
+        return hasHookData() ? hookData_ : __null;
+    }
+
+    void setHookData(void *v) {
+        hookData_ = v;
+        flags_ |= JSFRAME_HAS_HOOK_DATA;
+    }
+
+
+
+    const js::Value &returnValue() {
+        if (!(flags_ & JSFRAME_HAS_RVAL))
+            rval_.setUndefined();
+        return rval_;
+    }
+
+    void markReturnValue() {
+        flags_ |= JSFRAME_HAS_RVAL;
+    }
+
+    void setReturnValue(const js::Value &v) {
+        rval_ = v;
+        markReturnValue();
+    }
+
+    void clearReturnValue() {
+        rval_.setUndefined();
+        markReturnValue();
+    }
+
+
+
+    void *nativeReturnAddress() const {
+        return ncode_;
+    }
+
+    void setNativeReturnAddress(void *addr) {
+        ncode_ = addr;
+    }
+
+    void **addressOfNativeReturnAddress() {
+        return &ncode_;
+    }
+# 617 "jsinterp.h"
+    bool isGeneratorFrame() const {
+        return !!(flags_ & JSFRAME_GENERATOR);
+    }
+
+    bool isFloatingGenerator() const {
+        ((void) 0);
+        return !!(flags_ & JSFRAME_FLOATING_GENERATOR);
+    }
+
+    void initFloatingGenerator() {
+        ((void) 0);
+        flags_ |= (JSFRAME_GENERATOR | JSFRAME_FLOATING_GENERATOR);
+    }
+
+    void unsetFloatingGenerator() {
+        flags_ &= ~JSFRAME_FLOATING_GENERATOR;
+    }
+
+    void setFloatingGenerator() {
+        flags_ |= JSFRAME_FLOATING_GENERATOR;
+    }
+
+
+
+
+
+    bool isConstructing() const {
+        return !!(flags_ & JSFRAME_CONSTRUCTING);
+    }
+
+    uint32 isConstructingFlag() const {
+        ((void) 0);
+        ((void) 0);
+        return flags_;
+    }
+
+    bool isDebuggerFrame() const {
+        return !!(flags_ & JSFRAME_DEBUGGER);
+    }
+
+    bool isEvalOrDebuggerFrame() const {
+        return !!(flags_ & (JSFRAME_EVAL | JSFRAME_DEBUGGER));
+    }
+
+    bool hasOverriddenArgs() const {
+        return !!(flags_ & JSFRAME_OVERRIDE_ARGS);
+    }
+
+    bool hasOverflowArgs() const {
+        return !!(flags_ & JSFRAME_OVERFLOW_ARGS);
+    }
+
+    void setOverriddenArgs() {
+        flags_ |= JSFRAME_OVERRIDE_ARGS;
+    }
+
+    bool isAssigning() const {
+        return !!(flags_ & JSFRAME_ASSIGNING);
+    }
+
+    void setAssigning() {
+        flags_ |= JSFRAME_ASSIGNING;
+    }
+
+    void clearAssigning() {
+        flags_ &= ~JSFRAME_ASSIGNING;
+    }
+
+    bool isYielding() {
+        return !!(flags_ & JSFRAME_YIELDING);
+    }
+
+    void setYielding() {
+        flags_ |= JSFRAME_YIELDING;
+    }
+
+    void clearYielding() {
+        flags_ &= ~JSFRAME_YIELDING;
+    }
+
+    void setFinishedInInterpreter() {
+        flags_ |= JSFRAME_FINISHED_IN_INTERPRETER;
+    }
+
+    bool finishedInInterpreter() const {
+        return !!(flags_ & JSFRAME_FINISHED_IN_INTERPRETER);
+    }
+# 717 "jsinterp.h"
+    inline JSObject &varobj(js::StackSegment *seg) const;
+    inline JSObject &varobj(JSContext *cx) const;
+
+
+
+    static size_t offsetOfFlags() {
+        return __builtin_offsetof (JSStackFrame, flags_);
+    }
+
+    static size_t offsetOfExec() {
+        return __builtin_offsetof (JSStackFrame, exec);
+    }
+
+    void *addressOfArgs() {
+        return &args;
+    }
+
+    static size_t offsetOfScopeChain() {
+        return __builtin_offsetof (JSStackFrame, scopeChain_);
+    }
+
+    JSObject **addressOfScopeChain() {
+        ((void) 0);
+        return &scopeChain_;
+    }
+
+    static size_t offsetOfPrev() {
+        return __builtin_offsetof (JSStackFrame, prev_);
+    }
+
+    static size_t offsetOfReturnValue() {
+        return __builtin_offsetof (JSStackFrame, rval_);
+    }
+
+    static ptrdiff_t offsetOfncode() {
+        return __builtin_offsetof (JSStackFrame, ncode_);
+    }
+
+    static ptrdiff_t offsetOfCallee(JSFunction *fun) {
+        ((void) 0);
+        return -(fun->nargs + 2) * sizeof(js::Value);
+    }
+
+    static ptrdiff_t offsetOfThis(JSFunction *fun) {
+        return fun == __null
+               ? -1 * ptrdiff_t(sizeof(js::Value))
+               : -(fun->nargs + 1) * ptrdiff_t(sizeof(js::Value));
+    }
+
+    static ptrdiff_t offsetOfFormalArg(JSFunction *fun, uintN i) {
+        ((void) 0);
+        return (-(int)fun->nargs + i) * sizeof(js::Value);
+    }
+
+    static size_t offsetOfFixed(uintN i) {
+        return sizeof(JSStackFrame) + i * sizeof(js::Value);
+    }
+
+
+
+    void staticAsserts() {
+        typedef int js_static_assert61[(__builtin_offsetof (JSStackFrame, rval_) % sizeof(js::Value) == 0) ? 1 : -1];
+        typedef int js_static_assert62[(sizeof(JSStackFrame) % sizeof(js::Value) == 0) ? 1 : -1];
+    }
+
+
+
+
+
+
+
+    void methodjitStaticAsserts();
+
+
+
+
+
+};
+
+namespace js {
+
+static const size_t VALUES_PER_STACK_FRAME = sizeof(JSStackFrame) / sizeof(Value);
+
+extern JSObject *
+GetBlockChain(JSContext *cx, JSStackFrame *fp);
+
+extern JSObject *
+GetBlockChainFast(JSContext *cx, JSStackFrame *fp, JSOp op, size_t oplen);
+
+extern JSObject *
+GetScopeChain(JSContext *cx);
+# 816 "jsinterp.h"
+extern JSObject *
+GetScopeChain(JSContext *cx, JSStackFrame *fp);
+
+extern JSObject *
+GetScopeChainFast(JSContext *cx, JSStackFrame *fp, JSOp op, size_t oplen);
+
+
+
+
+
+void
+ReportIncompatibleMethod(JSContext *cx, Value *vp, Class *clasp);
+# 837 "jsinterp.h"
+template <typename T>
+bool GetPrimitiveThis(JSContext *cx, Value *vp, T *v);
+
+inline void
+PutActivationObjects(JSContext *cx, JSStackFrame *fp);
+
+inline void
+PutOwnedActivationObjects(JSContext *cx, JSStackFrame *fp);
+
+
+
+
+
+
+
+extern
+
+# 852 "jsinterp.h"
+       bool
+BoxThisForVp(JSContext *cx, js::Value *vp);
+
+
+
+
+
+struct CallArgs
+{
+    Value *argv_;
+    uintN argc_;
+  protected:
+    CallArgs() {}
+    CallArgs(Value *argv, uintN argc) : argv_(argv), argc_(argc) {}
+  public:
+    Value *base() const { return argv_ - 2; }
+    Value &callee() const { return argv_[-2]; }
+    Value &thisv() const { return argv_[-1]; }
+    Value &operator[](unsigned i) const { ((void) 0); return argv_[i]; }
+    Value *argv() const { return argv_; }
+    uintN argc() const { return argc_; }
+    Value &rval() const { return argv_[-2]; }
+};
+# 884 "jsinterp.h"
+extern
+
+# 884 "jsinterp.h"
+                         bool
+Invoke(JSContext *cx, const CallArgs &args, uint32 flags);
+# 911 "jsinterp.h"
+class InvokeSessionGuard;
+# 938 "jsinterp.h"
+extern
+
+# 938 "jsinterp.h"
+       bool
+ExternalInvoke(JSContext *cx, const Value &thisv, const Value &fval,
+               uintN argc, Value *argv, Value *rval);
+
+extern
+
+# 942 "jsinterp.h"
+       bool
+ExternalGetOrSet(JSContext *cx, JSObject *obj, jsid id, const Value &fval,
+                 JSAccessMode mode, uintN argc, Value *argv, Value *rval);
+# 954 "jsinterp.h"
+extern
+
+# 954 "jsinterp.h"
+                         bool
+InvokeConstructor(JSContext *cx, const CallArgs &args);
+
+extern
+
+# 957 "jsinterp.h"
+                         bool
+InvokeConstructorWithGivenThis(JSContext *cx, JSObject *thisobj, const Value &fval,
+                               uintN argc, Value *argv, Value *rval);
+
+extern
+
+# 961 "jsinterp.h"
+       bool
+ExternalInvokeConstructor(JSContext *cx, const Value &fval, uintN argc, Value *argv,
+                          Value *rval);
+# 972 "jsinterp.h"
+extern
+
+# 972 "jsinterp.h"
+                         bool
+DirectEval(JSContext *cx, JSFunction *evalfun, uint32 argc, Value *vp);
+# 982 "jsinterp.h"
+extern
+
+# 982 "jsinterp.h"
+                         bool
+DirectEval(JSContext *cx, JSFunction *evalfun, uint32 argc, Value *vp);
+
+
+
+
+
+extern
+
+# 989 "jsinterp.h"
+                       bool
+Execute(JSContext *cx, JSObject *chain, JSScript *script,
+        JSStackFrame *prev, uintN flags, Value *result);
+
+
+
+
+
+extern __attribute__((noinline))
+
+# 997 "jsinterp.h"
+                                         bool
+Interpret(JSContext *cx, JSStackFrame *stopFp, uintN inlineCallCount = 0, JSInterpMode mode = JSINTERP_NORMAL);
+
+extern
+
+# 1000 "jsinterp.h"
+                         bool
+RunScript(JSContext *cx, JSScript *script, JSStackFrame *fp);
+
+extern
+
+# 1003 "jsinterp.h"
+       bool
+CheckRedeclaration(JSContext *cx, JSObject *obj, jsid id, uintN attrs);
+
+extern
+
+# 1006 "jsinterp.h"
+       bool
+StrictlyEqual(JSContext *cx, const Value &lval, const Value &rval, JSBool *equal);
+
+
+extern
+
+# 1010 "jsinterp.h"
+       bool
+SameValue(JSContext *cx, const Value &v1, const Value &v2, JSBool *same);
+
+extern JSType
+TypeOfValue(JSContext *cx, const Value &v);
+
+inline
+
+# 1016 "jsinterp.h"
+       bool
+InstanceOf(JSContext *cx, JSObject *obj, Class *clasp, Value *argv)
+{
+    if (obj && obj->getClass() == clasp)
+        return true;
+    extern bool InstanceOfSlow(JSContext *, JSObject *, Class *, Value *);
+    return InstanceOfSlow(cx, obj, clasp, argv);
+}
+
+extern JSBool
+HasInstance(JSContext *cx, JSObject *obj, const js::Value *v, JSBool *bp);
+
+inline void *
+GetInstancePrivate(JSContext *cx, JSObject *obj, Class *clasp, Value *argv)
+{
+    if (!InstanceOf(cx, obj, clasp, argv))
+        return __null;
+    return obj->getPrivate();
+}
+
+extern
+
+# 1036 "jsinterp.h"
+       bool
+ValueToId(JSContext *cx, const Value &v, jsid *idp);
+# 1046 "jsinterp.h"
+extern const js::Value &
+GetUpvar(JSContext *cx, uintN level, js::UpvarCookie cookie);
+
+}
+# 1077 "jsinterp.h"
+extern JSBool
+js_EnterWith(JSContext *cx, jsint stackIndex, JSOp op, size_t oplen);
+
+extern void
+js_LeaveWith(JSContext *cx);
+
+
+
+
+
+
+
+extern JSBool
+js_DoIncDec(JSContext *cx, const JSCodeSpec *cs, js::Value *vp, js::Value *vp2);
+
+
+
+
+
+extern void
+js_LogOpcode(JSContext *cx);
+
+
+
+
+extern void
+js_MeterOpcodePair(JSOp op1, JSOp op2);
+
+extern void
+js_MeterSlotOpcode(JSOp op, uint32 slot);
+
+
+
+
+
+
+extern JSBool
+js_UnwindScope(JSContext *cx, jsint stackDepth, JSBool normalUnwind);
+
+extern JSBool
+js_OnUnknownMethod(JSContext *cx, js::Value *vp);
+
+extern js::Class *
+js_IsActiveWithOrBlock(JSContext *cx, JSObject *obj, int stackDepth);
+# 67 "jscntxt.h" 2
+# 1 "jsmath.h" 1
+# 43 "jsmath.h"
+namespace js {
+
+typedef double (*UnaryFunType)(double);
+
+class MathCache
+{
+    static const unsigned SizeLog2 = 12;
+    static const unsigned Size = 1 << SizeLog2;
+    struct Entry { double in; UnaryFunType f; double out; };
+    Entry table[Size];
+
+  public:
+    MathCache();
+
+    uintN hash(double x) {
+        union { double d; struct { uint32 one, two; } s; } u = { x };
+        uint32 hash32 = u.s.one ^ u.s.two;
+        uint16 hash16 = (uint16)(hash32 ^ (hash32 >> 16));
+        return (hash16 & (Size - 1)) ^ (hash16 >> (16 - SizeLog2));
+    }
+
+
+
+
+
+    double lookup(UnaryFunType f, double x) {
+        uintN index = hash(x);
+        Entry &e = table[index];
+        if (e.in == x && e.f == f)
+            return e.out;
+        e.in = x;
+        e.f = f;
+        return (e.out = f(x));
+    }
+};
+
+}
+
+
+
+
+
+extern js::Class js_MathClass;
+
+extern JSObject *
+js_InitMathClass(JSContext *cx, JSObject *obj);
+
+extern
+
+# 90 "jsmath.h"
+       bool
+js_IsMathFunction(JSNative native);
+
+extern void
+js_InitRandom(JSContext *cx);
+
+extern JSBool
+js_math_abs(JSContext *cx, uintN argc, js::Value *vp);
+
+extern JSBool
+js_math_ceil(JSContext *cx, uintN argc, js::Value *vp);
+
+extern JSBool
+js_math_floor(JSContext *cx, uintN argc, js::Value *vp);
+
+extern JSBool
+js_math_max(JSContext *cx, uintN argc, js::Value *vp);
+
+extern JSBool
+js_math_min(JSContext *cx, uintN argc, js::Value *vp);
+
+extern JSBool
+js_math_round(JSContext *cx, uintN argc, js::Value *vp);
+
+extern jsdouble
+js_math_ceil_impl(jsdouble x);
+
+extern jsdouble
+js_math_floor_impl(jsdouble x);
+
+extern jsdouble
+js_math_round_impl(jsdouble x);
+# 68 "jscntxt.h" 2
+
+# 1 "jspropertycache.h" 1
+# 48 "jspropertycache.h"
+namespace js {
+# 57 "jspropertycache.h"
+enum {
+    PCVCAP_PROTOBITS = 4,
+    PCVCAP_PROTOSIZE = ((JSUint32)1 << (PCVCAP_PROTOBITS)),
+    PCVCAP_PROTOMASK = (((JSUint32)1 << (PCVCAP_PROTOBITS)) - 1),
+
+    PCVCAP_SCOPEBITS = 4,
+    PCVCAP_SCOPESIZE = ((JSUint32)1 << (PCVCAP_SCOPEBITS)),
+    PCVCAP_SCOPEMASK = (((JSUint32)1 << (PCVCAP_SCOPEBITS)) - 1),
+
+    PCVCAP_TAGBITS = PCVCAP_PROTOBITS + PCVCAP_SCOPEBITS,
+    PCVCAP_TAGMASK = (((JSUint32)1 << (PCVCAP_TAGBITS)) - 1)
+};
+
+const uint32 SHAPE_OVERFLOW_BIT = ((JSUint32)1 << (32 - PCVCAP_TAGBITS));
+# 81 "jspropertycache.h"
+class PCVal
+{
+  private:
+    enum {
+        OBJECT = 0,
+        SLOT = 1,
+        SHAPE = 2,
+        TAG = 3
+    };
+
+    jsuword v;
+
+  public:
+    bool isNull() const { return v == 0; }
+    void setNull() { v = 0; }
+
+    bool isFunObj() const { return (v & TAG) == OBJECT; }
+    JSObject &toFunObj() const {
+        ((void) 0);
+        return *reinterpret_cast<JSObject *>(v);
+    }
+    void setFunObj(JSObject &obj) {
+        v = reinterpret_cast<jsuword>(&obj);
+    }
+
+    bool isSlot() const { return v & SLOT; }
+    uint32 toSlot() const { ((void) 0); return uint32(v) >> 1; }
+    void setSlot(uint32 slot) { v = (jsuword(slot) << 1) | SLOT; }
+
+    bool isShape() const { return (v & TAG) == SHAPE; }
+    const js::Shape *toShape() const {
+        ((void) 0);
+        return reinterpret_cast<js::Shape *>(v & ~TAG);
+    }
+    void setShape(const js::Shape *shape) {
+        ((void) 0);
+        v = reinterpret_cast<jsuword>(shape) | SHAPE;
+    }
+};
+
+struct PropertyCacheEntry
+{
+    jsbytecode *kpc;
+    jsuword kshape;
+    jsuword vcap;
+    PCVal vword;
+
+    bool adding() const { return vcapTag() == 0 && kshape != vshape(); }
+    bool directHit() const { return vcapTag() == 0 && kshape == vshape(); }
+
+    jsuword vcapTag() const { return vcap & PCVCAP_TAGMASK; }
+    uint32 vshape() const { return uint32(vcap >> PCVCAP_TAGBITS); }
+    jsuword scopeIndex() const { return (vcap >> PCVCAP_PROTOBITS) & PCVCAP_SCOPEMASK; }
+    jsuword protoIndex() const { return vcap & PCVCAP_PROTOMASK; }
+
+    void assign(jsbytecode *kpc, jsuword kshape, jsuword vshape,
+                uintN scopeIndex, uintN protoIndex, PCVal vword) {
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+
+        this->kpc = kpc;
+        this->kshape = kshape;
+        this->vcap = (vshape << PCVCAP_TAGBITS) | (scopeIndex << PCVCAP_PROTOBITS) | protoIndex;
+        this->vword = vword;
+    }
+};
+# 160 "jspropertycache.h"
+class PropertyCache
+{
+  private:
+    enum {
+        SIZE_LOG2 = 12,
+        SIZE = ((JSUint32)1 << (SIZE_LOG2)),
+        MASK = (((JSUint32)1 << (SIZE_LOG2)) - 1)
+    };
+
+    PropertyCacheEntry table[SIZE];
+    JSBool empty;
+# 214 "jspropertycache.h"
+    static inline jsuword
+    hash(jsbytecode *pc, jsuword kshape)
+    {
+        return ((((jsuword(pc) >> SIZE_LOG2) ^ jsuword(pc)) + kshape) & MASK);
+    }
+
+    static inline bool matchShape(JSContext *cx, JSObject *obj, uint32 shape);
+
+    JSAtom *fullTest(JSContext *cx, jsbytecode *pc, JSObject **objp,
+                                       JSObject **pobjp, PropertyCacheEntry *entry);
+
+
+
+
+    inline void assertEmpty() {}
+
+
+  public:
+    __attribute__((always_inline)) inline void test(JSContext *cx, jsbytecode *pc,
+                                                 JSObject *&obj, JSObject *&pobj,
+                                                 PropertyCacheEntry *&entry, JSAtom *&atom);
+# 243 "jspropertycache.h"
+    __attribute__((always_inline)) inline bool testForSet(JSContext *cx, jsbytecode *pc, JSObject *obj,
+                                     PropertyCacheEntry **entryp, JSObject **obj2p,
+                                     JSAtom **atomp);
+# 256 "jspropertycache.h"
+    __attribute__((always_inline)) inline bool testForInit(JSRuntime *rt, jsbytecode *pc, JSObject *obj,
+                                      const js::Shape **shapep, PropertyCacheEntry **entryp);
+# 267 "jspropertycache.h"
+    PropertyCacheEntry *fill(JSContext *cx, JSObject *obj, uintN scopeIndex,
+                                               uintN protoIndex, JSObject *pobj,
+                                               const js::Shape *shape, JSBool adding = false);
+
+    void purge(JSContext *cx);
+    void purgeForScript(JSContext *cx, JSScript *script);
+};
+
+}
+# 70 "jscntxt.h" 2
+# 1 "jspropertytree.h" 1
+# 47 "jspropertytree.h"
+namespace js {
+
+struct ShapeHasher {
+    typedef js::Shape *Key;
+    typedef const js::Shape *Lookup;
+
+    static inline HashNumber hash(const Lookup l);
+    static inline bool match(Key k, Lookup l);
+};
+
+typedef HashSet<js::Shape *, ShapeHasher, SystemAllocPolicy> KidsHash;
+
+class KidsPointer {
+  private:
+    enum {
+        SHAPE = 0,
+        HASH = 1,
+        TAG = 1
+    };
+
+    jsuword w;
+
+  public:
+    bool isNull() const { return !w; }
+    void setNull() { w = 0; }
+
+    bool isShape() const { return (w & TAG) == SHAPE && !isNull(); }
+    js::Shape *toShape() const {
+        ((void) 0);
+        return reinterpret_cast<js::Shape *>(w & ~jsuword(TAG));
+    }
+    void setShape(js::Shape *shape) {
+        ((void) 0);
+        ((void) 0);
+        w = reinterpret_cast<jsuword>(shape) | SHAPE;
+    }
+
+    bool isHash() const { return (w & TAG) == HASH; }
+    KidsHash *toHash() const {
+        ((void) 0);
+        return reinterpret_cast<KidsHash *>(w & ~jsuword(TAG));
+    }
+    void setHash(KidsHash *hash) {
+        ((void) 0);
+        ((void) 0);
+        w = reinterpret_cast<jsuword>(hash) | HASH;
+    }
+
+
+
+
+};
+
+class PropertyTree
+{
+    friend struct ::JSFunction;
+
+    JSCompartment *compartment;
+    JSArenaPool arenaPool;
+    js::Shape *freeList;
+
+    bool insertChild(JSContext *cx, js::Shape *parent, js::Shape *child);
+    void removeChild(js::Shape *child);
+
+    PropertyTree();
+
+  public:
+    enum { MAX_HEIGHT = 128 };
+
+    PropertyTree(JSCompartment *comp)
+        : compartment(comp), freeList(__null)
+    {
+        PodZero(&arenaPool);
+    }
+
+    bool init();
+    void finish();
+
+    js::Shape *newShapeUnchecked();
+    js::Shape *newShape(JSContext *cx);
+    js::Shape *getChild(JSContext *cx, js::Shape *parent, const js::Shape &child);
+
+    void orphanChildren(js::Shape *shape);
+    void sweepShapes(JSContext *cx);
+    void unmarkShapes(JSContext *cx);
+
+    static void dumpShapes(JSContext *cx);
+
+
+
+};
+
+}
+# 71 "jscntxt.h" 2
+
+
+
+
+# 1 "prmjtime.h" 1
+# 46 "prmjtime.h"
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 1 3 4
+# 29 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+extern "C" {
+
+
+
+
+
+
+
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 38 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 2 3 4
+
+
+
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/time.h" 1 3 4
+# 88 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/time.h" 3 4
+# 1 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/timex.h" 1 3 4
+# 25 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/timex.h" 3 4
+struct timex
+{
+  unsigned int modes;
+  __syscall_slong_t offset;
+  __syscall_slong_t freq;
+  __syscall_slong_t maxerror;
+  __syscall_slong_t esterror;
+  int status;
+  __syscall_slong_t constant;
+  __syscall_slong_t precision;
+  __syscall_slong_t tolerance;
+  struct timeval time;
+  __syscall_slong_t tick;
+  __syscall_slong_t ppsfreq;
+  __syscall_slong_t jitter;
+  int shift;
+  __syscall_slong_t stabil;
+  __syscall_slong_t jitcnt;
+  __syscall_slong_t calcnt;
+  __syscall_slong_t errcnt;
+  __syscall_slong_t stbcnt;
+
+  int tai;
+
+
+  int :32; int :32; int :32; int :32;
+  int :32; int :32; int :32; int :32;
+  int :32; int :32; int :32;
+};
+# 89 "/usr/powerpc64-unknown-linux-gnu/usr/include/bits/time.h" 2 3 4
+
+extern "C" {
+
+
+extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) throw ();
+
+}
+# 42 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 2 3 4
+# 131 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+
+
+struct tm
+{
+  int tm_sec;
+  int tm_min;
+  int tm_hour;
+  int tm_mday;
+  int tm_mon;
+  int tm_year;
+  int tm_wday;
+  int tm_yday;
+  int tm_isdst;
+
+
+  long int tm_gmtoff;
+  const char *tm_zone;
+
+
+
+
+};
+
+
+
+
+
+
+
+
+struct itimerspec
+  {
+    struct timespec it_interval;
+    struct timespec it_value;
+  };
+
+
+struct sigevent;
+# 186 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+
+
+
+extern clock_t clock (void) throw ();
+
+
+extern time_t time (time_t *__timer) throw ();
+
+
+extern double difftime (time_t __time1, time_t __time0)
+     throw () __attribute__ ((__const__));
+
+
+extern time_t mktime (struct tm *__tp) throw ();
+
+
+
+
+
+extern size_t strftime (char *__restrict __s, size_t __maxsize,
+   const char *__restrict __format,
+   const struct tm *__restrict __tp) throw ();
+
+
+
+
+
+extern char *strptime (const char *__restrict __s,
+         const char *__restrict __fmt, struct tm *__tp)
+     throw ();
+
+
+
+
+
+
+
+extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
+     const char *__restrict __format,
+     const struct tm *__restrict __tp,
+     __locale_t __loc) throw ();
+
+
+
+extern char *strptime_l (const char *__restrict __s,
+    const char *__restrict __fmt, struct tm *__tp,
+    __locale_t __loc) throw ();
+
+
+
+
+
+
+extern struct tm *gmtime (const time_t *__timer) throw ();
+
+
+
+extern struct tm *localtime (const time_t *__timer) throw ();
+
+
+
+
+
+extern struct tm *gmtime_r (const time_t *__restrict __timer,
+       struct tm *__restrict __tp) throw ();
+
+
+
+extern struct tm *localtime_r (const time_t *__restrict __timer,
+          struct tm *__restrict __tp) throw ();
+
+
+
+
+
+extern char *asctime (const struct tm *__tp) throw ();
+
+
+extern char *ctime (const time_t *__timer) throw ();
+
+
+
+
+
+
+
+extern char *asctime_r (const struct tm *__restrict __tp,
+   char *__restrict __buf) throw ();
+
+
+extern char *ctime_r (const time_t *__restrict __timer,
+        char *__restrict __buf) throw ();
+
+
+
+
+extern char *__tzname[2];
+extern int __daylight;
+extern long int __timezone;
+
+
+
+
+extern char *tzname[2];
+
+
+
+extern void tzset (void) throw ();
+
+
+
+extern int daylight;
+extern long int timezone;
+
+
+
+
+
+extern int stime (const time_t *__when) throw ();
+# 319 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+extern time_t timegm (struct tm *__tp) throw ();
+
+
+extern time_t timelocal (struct tm *__tp) throw ();
+
+
+extern int dysize (int __year) throw () __attribute__ ((__const__));
+# 334 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+extern int nanosleep (const struct timespec *__requested_time,
+        struct timespec *__remaining);
+
+
+
+extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw ();
+
+
+extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw ();
+
+
+extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
+     throw ();
+
+
+
+
+
+
+extern int clock_nanosleep (clockid_t __clock_id, int __flags,
+       const struct timespec *__req,
+       struct timespec *__rem);
+
+
+extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw ();
+
+
+
+
+extern int timer_create (clockid_t __clock_id,
+    struct sigevent *__restrict __evp,
+    timer_t *__restrict __timerid) throw ();
+
+
+extern int timer_delete (timer_t __timerid) throw ();
+
+
+extern int timer_settime (timer_t __timerid, int __flags,
+     const struct itimerspec *__restrict __value,
+     struct itimerspec *__restrict __ovalue) throw ();
+
+
+extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
+     throw ();
+
+
+extern int timer_getoverrun (timer_t __timerid) throw ();
+
+
+
+
+
+extern int timespec_get (struct timespec *__ts, int __base)
+     throw () __attribute__ ((__nonnull__ (1)));
+# 403 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+extern int getdate_err;
+# 412 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+extern struct tm *getdate (const char *__string);
+# 426 "/usr/powerpc64-unknown-linux-gnu/usr/include/time.h" 3 4
+extern int getdate_r (const char *__restrict __string,
+        struct tm *__restrict __resbufp);
+
+
+}
+# 47 "prmjtime.h" 2
+
+
+
+
+
+
+struct JSContext;
+# 99 "prmjtime.h"
+class DSTOffsetCache {
+  public:
+    inline DSTOffsetCache();
+    JSInt64 getDSTOffsetMilliseconds(int64 localTimeMilliseconds, JSContext *cx);
+
+    inline void purge();
+
+
+
+
+  private:
+    JSInt64 computeDSTOffsetMilliseconds(int64 localTimeSeconds);
+
+    JSInt64 offsetMilliseconds;
+    JSInt64 rangeStartSeconds, rangeEndSeconds;
+
+    JSInt64 oldOffsetMilliseconds;
+    JSInt64 oldRangeStartSeconds, oldRangeEndSeconds;
+# 131 "prmjtime.h"
+    static const JSInt64 MAX_UNIX_TIMET = 2145859200;
+    static const JSInt64 MILLISECONDS_PER_SECOND = 1000;
+    static const JSInt64 SECONDS_PER_MINUTE = 60;
+    static const JSInt64 SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;
+    static const JSInt64 SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;
+
+    static const JSInt64 RANGE_EXPANSION_AMOUNT = 30 * SECONDS_PER_DAY;
+
+  private:
+    void sanityCheck();
+
+
+
+
+
+
+    void noteOffsetCalculation() {
+        ((void)0);
+    }
+    void noteCacheHit() {
+        ((void)0);
+    }
+    void noteCacheMissIncrease() {
+        ((void)0);
+    }
+    void noteCacheMissDecrease() {
+        ((void)0);
+    }
+    void noteCacheMissIncreasingOffsetChangeUpper() {
+        ((void)0);
+    }
+    void noteCacheMissIncreasingOffsetChangeExpand() {
+        ((void)0);
+    }
+    void noteCacheMissLargeIncrease() {
+        ((void)0);
+    }
+    void noteCacheMissDecreasingOffsetChangeLower() {
+        ((void)0);
+    }
+    void noteCacheMissDecreasingOffsetChangeExpand() {
+        ((void)0);
+    }
+    void noteCacheMissLargeDecrease() {
+        ((void)0);
+    }
+
+};
+
+extern "C" {
+
+typedef struct PRMJTime PRMJTime;
+
+
+
+
+struct PRMJTime {
+    JSInt32 tm_usec;
+    JSInt8 tm_sec;
+    JSInt8 tm_min;
+    JSInt8 tm_hour;
+    JSInt8 tm_mday;
+    JSInt8 tm_mon;
+    JSInt8 tm_wday;
+    JSInt32 tm_year;
+    JSInt16 tm_yday;
+    JSInt8 tm_isdst;
+};
+
+
+
+
+
+
+extern JSInt64
+PRMJ_Now(void);
+# 217 "prmjtime.h"
+extern JSInt32
+PRMJ_LocalGMTDifference(void);
+
+
+extern size_t
+PRMJ_FormatTime(char *buf, int buflen, const char *fmt, PRMJTime *tm);
+
+}
+# 76 "jscntxt.h" 2
+# 90 "jscntxt.h"
+typedef struct JSGSNCache {
+    jsbytecode *code;
+    JSDHashTable table;
+# 102 "jscntxt.h"
+} JSGSNCache;
+
+
+
+extern void
+js_PurgeGSNCache(JSGSNCache *cache);
+
+
+
+
+
+
+namespace nanojit {
+
+class Assembler;
+class CodeAlloc;
+class Fragment;
+template<typename K> struct DefaultHash;
+template<typename K, typename V, typename H> class HashMap;
+template<typename T> class Seq;
+
+}
+
+namespace js {
+
+
+static const size_t MONITOR_N_GLOBAL_STATES = 4;
+static const size_t FRAGMENT_TABLE_SIZE = 512;
+static const size_t MAX_NATIVE_STACK_SLOTS = 4096;
+static const size_t MAX_CALL_STACK_ENTRIES = 500;
+static const size_t MAX_GLOBAL_SLOTS = 4096;
+static const size_t GLOBAL_SLOTS_BUFFER_SIZE = MAX_GLOBAL_SLOTS + 1;
+static const size_t MAX_SLOW_NATIVE_EXTRA_SLOTS = 16;
+
+
+class VMAllocator;
+class FrameInfoCache;
+struct FrameInfo;
+struct VMSideExit;
+struct TreeFragment;
+struct TracerState;
+template<typename T> class Queue;
+typedef Queue<uint16> SlotList;
+class TypeMap;
+class LoopProfile;
+
+
+
+
+
+
+namespace mjit {
+class JaegerCompartment;
+}
+
+
+
+
+
+
+
+class ContextAllocPolicy
+{
+    JSContext *cx;
+
+  public:
+    ContextAllocPolicy(JSContext *cx) : cx(cx) {}
+    JSContext *context() const { return cx; }
+
+
+    void *malloc(size_t bytes);
+    void free(void *p);
+    void *realloc(void *p, size_t bytes);
+    void reportAllocOverflow() const;
+};
+# 225 "jscntxt.h"
+class StackSegment
+{
+
+    JSContext *cx;
+
+
+    StackSegment *previousInContext;
+
+
+    StackSegment *previousInMemory;
+
+
+    JSStackFrame *initialFrame;
+
+
+    JSFrameRegs *suspendedRegs;
+
+
+    JSObject *initialVarObj;
+
+
+    bool saved;
+# 259 "jscntxt.h"
+  public:
+    StackSegment()
+      : cx(__null), previousInContext(__null), previousInMemory(__null),
+        initialFrame(__null), suspendedRegs(((JSFrameRegs *)0x1)),
+        initialVarObj(__null), saved(false)
+    {
+        ((void) 0);
+    }
+
+
+
+    Value *valueRangeBegin() const {
+        return (Value *)(this + 1);
+    }
+# 285 "jscntxt.h"
+    bool inContext() const {
+        ((void) 0);
+        ((void) 0);
+        return cx;
+    }
+
+    bool isActive() const {
+        ((void) 0);
+        ((void) 0);
+        return !suspendedRegs;
+    }
+
+    bool isSuspended() const {
+        ((void) 0);
+        ((void) 0);
+        return cx && suspendedRegs;
+    }
+
+
+
+    bool isSaved() const {
+        ((void) 0);
+        return saved;
+    }
+
+
+
+    void joinContext(JSContext *cx, JSStackFrame *f) {
+        ((void) 0);
+        this->cx = cx;
+        initialFrame = f;
+        suspendedRegs = __null;
+        ((void) 0);
+    }
+
+    void leaveContext() {
+        ((void) 0);
+        this->cx = __null;
+        initialFrame = __null;
+        suspendedRegs = ((JSFrameRegs *)0x1);
+        ((void) 0);
+    }
+
+    JSContext *maybeContext() const {
+        return cx;
+    }
+
+
+
+
+
+    void suspend(JSFrameRegs *regs) {
+        ((void) 0);
+        ((void) 0);
+        suspendedRegs = regs;
+        ((void) 0);
+    }
+
+    void resume() {
+        ((void) 0);
+        suspendedRegs = __null;
+        ((void) 0);
+    }
+
+
+
+    void save(JSFrameRegs *regs) {
+        ((void) 0);
+        suspend(regs);
+        saved = true;
+        ((void) 0);
+    }
+
+    void restore() {
+        ((void) 0);
+        saved = false;
+        resume();
+        ((void) 0);
+    }
+
+
+
+    JSStackFrame *getInitialFrame() const {
+        ((void) 0);
+        return initialFrame;
+    }
+
+    inline JSFrameRegs *getCurrentRegs() const;
+    inline JSStackFrame *getCurrentFrame() const;
+
+
+
+    JSFrameRegs *getSuspendedRegs() const {
+        ((void) 0);
+        return suspendedRegs;
+    }
+
+    JSStackFrame *getSuspendedFrame() const {
+        return suspendedRegs->fp;
+    }
+
+
+
+    void setPreviousInContext(StackSegment *seg) {
+        previousInContext = seg;
+    }
+
+    StackSegment *getPreviousInContext() const {
+        return previousInContext;
+    }
+
+    void setPreviousInMemory(StackSegment *seg) {
+        previousInMemory = seg;
+    }
+
+    StackSegment *getPreviousInMemory() const {
+        return previousInMemory;
+    }
+
+    void setInitialVarObj(JSObject *obj) {
+        ((void) 0);
+        initialVarObj = obj;
+    }
+
+    bool hasInitialVarObj() {
+        ((void) 0);
+        return initialVarObj != __null;
+    }
+
+    JSObject &getInitialVarObj() const {
+        ((void) 0);
+        return *initialVarObj;
+    }
+
+
+
+
+};
+
+static const size_t VALUES_PER_STACK_SEGMENT = sizeof(StackSegment) / sizeof(Value);
+typedef int js_static_assert63[(sizeof(StackSegment) % sizeof(Value) == 0) ? 1 : -1];
+
+
+class InvokeArgsGuard : public CallArgs
+{
+    friend class StackSpace;
+    JSContext *cx;
+    StackSegment *seg;
+    Value *prevInvokeArgEnd;
+
+
+
+
+  public:
+    InvokeArgsGuard() : cx(__null), seg(__null) {}
+    ~InvokeArgsGuard();
+    bool pushed() const { return cx != __null; }
+};
+
+
+
+
+
+struct InvokeArgsAlreadyOnTheStack : CallArgs
+{
+    InvokeArgsAlreadyOnTheStack(Value *vp, uintN argc) : CallArgs(vp + 2, argc) {}
+};
+
+
+class InvokeFrameGuard
+{
+    friend class StackSpace;
+    JSContext *cx_;
+    JSFrameRegs regs_;
+    JSFrameRegs *prevRegs_;
+  public:
+    InvokeFrameGuard() : cx_(__null) {}
+    ~InvokeFrameGuard() { if (pushed()) pop(); }
+    bool pushed() const { return cx_ != __null; }
+    JSContext *pushedFrameContext() const { ((void) 0); return cx_; }
+    void pop();
+    JSStackFrame *fp() const { return regs_.fp; }
+};
+
+
+class FrameGuard
+{
+    friend class StackSpace;
+    JSContext *cx_;
+    StackSegment *seg_;
+    Value *vp_;
+    JSStackFrame *fp_;
+  public:
+    FrameGuard() : cx_(__null), vp_(__null), fp_(__null) {}
+    ~FrameGuard();
+    bool pushed() const { return cx_ != __null; }
+    StackSegment *segment() const { return seg_; }
+    Value *vp() const { return vp_; }
+    JSStackFrame *fp() const { return fp_; }
+};
+
+
+class ExecuteFrameGuard : public FrameGuard
+{
+    friend class StackSpace;
+    JSFrameRegs regs_;
+};
+
+
+class DummyFrameGuard : public FrameGuard
+{
+    friend class StackSpace;
+    JSFrameRegs regs_;
+};
+
+
+class GeneratorFrameGuard : public FrameGuard
+{};
+# 573 "jscntxt.h"
+class StackSpace
+{
+    Value *base;
+
+
+
+    Value *end;
+    StackSegment *currentSegment;
+# 590 "jscntxt.h"
+    Value *invokeArgEnd;
+
+    friend class InvokeArgsGuard;
+    friend class InvokeFrameGuard;
+    friend class FrameGuard;
+
+    bool pushSegmentForInvoke(JSContext *cx, uintN argc, InvokeArgsGuard *ag);
+    void popSegmentForInvoke(const InvokeArgsGuard &ag);
+
+    bool pushInvokeFrameSlow(JSContext *cx, const InvokeArgsGuard &ag,
+                             InvokeFrameGuard *fg);
+    void popInvokeFrameSlow(const CallArgs &args);
+
+    bool getSegmentAndFrame(JSContext *cx, uintN vplen, uintN nslots,
+                            FrameGuard *fg) const;
+    void pushSegmentAndFrame(JSContext *cx, JSFrameRegs *regs, FrameGuard *fg);
+    void popSegmentAndFrame(JSContext *cx);
+
+    struct EnsureSpaceCheck {
+        inline bool operator()(const StackSpace &, JSContext *, Value *, uintN);
+    };
+
+    struct LimitCheck {
+        JSStackFrame *base;
+        Value **limit;
+        LimitCheck(JSStackFrame *base, Value **limit) : base(base), limit(limit) {}
+        inline bool operator()(const StackSpace &, JSContext *, Value *, uintN);
+    };
+
+    template <class Check>
+    inline JSStackFrame *getCallFrame(JSContext *cx, Value *sp, uintN nactual,
+                                      JSFunction *fun, JSScript *script,
+                                      uint32 *pflags, Check check) const;
+
+    inline void popInvokeArgs(const InvokeArgsGuard &args);
+    inline void popInvokeFrame(const InvokeFrameGuard &ag);
+
+    inline Value *firstUnused() const;
+
+    inline bool isCurrentAndActive(JSContext *cx) const;
+    friend class AllFramesIter;
+    StackSegment *getCurrentSegment() const { return currentSegment; }
+
+
+
+
+
+
+  public:
+    static const size_t CAPACITY_VALS = 512 * 1024;
+    static const size_t CAPACITY_BYTES = CAPACITY_VALS * sizeof(Value);
+    static const size_t COMMIT_VALS = 16 * 1024;
+    static const size_t COMMIT_BYTES = COMMIT_VALS * sizeof(Value);
+# 654 "jscntxt.h"
+    static const size_t STACK_QUOTA = (VALUES_PER_STACK_FRAME + 18) *
+                                         3000;
+
+
+    bool init();
+    void finish();
+# 676 "jscntxt.h"
+    inline bool ensureEnoughSpaceToEnterTrace();
+
+
+    static const ptrdiff_t MAX_TRACE_SPACE_VALS =
+      MAX_NATIVE_STACK_SLOTS + MAX_CALL_STACK_ENTRIES * VALUES_PER_STACK_FRAME +
+      (VALUES_PER_STACK_SEGMENT + VALUES_PER_STACK_FRAME );
+
+
+    void mark(JSTracer *trc);
+# 708 "jscntxt.h"
+    bool pushInvokeArgs(JSContext *cx, uintN argc, InvokeArgsGuard *ag);
+
+
+    bool getInvokeFrame(JSContext *cx, const CallArgs &args, JSFunction *fun,
+                        JSScript *script, uint32 *flags, InvokeFrameGuard *fg) const;
+
+    void pushInvokeFrame(JSContext *cx, const CallArgs &args, InvokeFrameGuard *fg);
+
+
+    bool getExecuteFrame(JSContext *cx, JSScript *script, ExecuteFrameGuard *fg) const;
+    void pushExecuteFrame(JSContext *cx, JSObject *initialVarObj, ExecuteFrameGuard *fg);
+
+
+
+
+
+    inline JSStackFrame *getInlineFrame(JSContext *cx, Value *sp, uintN nactual,
+                                        JSFunction *fun, JSScript *script,
+                                        uint32 *flags) const;
+    inline void pushInlineFrame(JSContext *cx, JSScript *script, JSStackFrame *fp,
+                                JSFrameRegs *regs);
+    inline void popInlineFrame(JSContext *cx, JSStackFrame *prev, js::Value *newsp);
+
+
+    bool getGeneratorFrame(JSContext *cx, uintN vplen, uintN nslots,
+                           GeneratorFrameGuard *fg);
+    void pushGeneratorFrame(JSContext *cx, JSFrameRegs *regs, GeneratorFrameGuard *fg);
+
+
+    bool pushDummyFrame(JSContext *cx, JSObject &scopeChain, DummyFrameGuard *fg);
+
+
+    inline JSStackFrame *getInlineFrameWithinLimit(JSContext *cx, Value *sp, uintN nactual,
+                                                   JSFunction *fun, JSScript *script, uint32 *flags,
+                                                   JSStackFrame *base, Value **limit) const;
+
+
+
+
+
+
+    inline Value *getStackLimit(JSContext *cx);
+
+
+
+
+
+    bool bumpCommitAndLimit(JSStackFrame *base, Value *from, uintN nvals, Value **limit) const;
+
+
+
+
+
+    inline bool ensureSpace(JSContext *maybecx, Value *from, ptrdiff_t nvals) const;
+};
+
+typedef int js_static_assert64[(StackSpace::CAPACITY_VALS % StackSpace::COMMIT_VALS == 0) ? 1 : -1];
+# 776 "jscntxt.h"
+class FrameRegsIter
+{
+    JSContext *cx;
+    StackSegment *curseg;
+    JSStackFrame *curfp;
+    Value *cursp;
+    jsbytecode *curpc;
+
+    void initSlow();
+    void incSlow(JSStackFrame *fp, JSStackFrame *prev);
+
+  public:
+    inline FrameRegsIter(JSContext *cx);
+
+    bool done() const { return curfp == __null; }
+    inline FrameRegsIter &operator++();
+
+    JSStackFrame *fp() const { return curfp; }
+    Value *sp() const { return cursp; }
+    jsbytecode *pc() const { return curpc; }
+};
+
+
+
+
+class AllFramesIter
+{
+public:
+    AllFramesIter(JSContext *cx);
+
+    bool done() const { return curfp == __null; }
+    AllFramesIter& operator++();
+
+    JSStackFrame *fp() const { return curfp; }
+
+private:
+    StackSegment *curcs;
+    JSStackFrame *curfp;
+};
+
+}
+# 840 "jscntxt.h"
+struct JSPendingProxyOperation {
+    JSPendingProxyOperation *next;
+    JSObject *object;
+};
+
+struct JSThreadData {
+
+
+    unsigned requestDepth;
+# 870 "jscntxt.h"
+    volatile int32 interruptFlags;
+
+
+    js::StackSpace stackSpace;
+
+
+
+
+
+    bool waiveGCQuota;
+
+
+
+
+
+    JSGSNCache gsnCache;
+
+
+    js::PropertyCache propertyCache;
+
+
+
+
+
+
+
+    DtoaState *dtoaState;
+
+
+    jsuword *nativeStackBase;
+
+
+    JSPendingProxyOperation *pendingProxyOperation;
+
+    js::ConservativeGCThreadData conservativeGC;
+
+    bool init();
+    void finish();
+    void mark(JSTracer *trc);
+    void purge(JSContext *cx);
+
+
+    inline void triggerOperationCallback(JSRuntime *rt);
+};
+
+
+
+
+
+
+
+struct JSThread {
+    typedef js::HashMap<void *,
+                        JSThread *,
+                        js::DefaultHasher<void *>,
+                        js::SystemAllocPolicy> Map;
+
+
+    JSCList contextList;
+
+
+    void *id;
+
+
+    unsigned suspendCount;
+
+
+
+
+
+
+    JSThreadData data;
+};
+
+
+
+extern JSThread *
+js_CurrentThread(JSRuntime *rt);
+
+
+
+
+
+
+extern JSBool
+js_InitContextThread(JSContext *cx);
+
+
+
+
+extern void
+js_ClearContextThread(JSContext *cx);
+
+
+
+typedef enum JSDestroyContextMode {
+    JSDCM_NO_GC,
+    JSDCM_MAYBE_GC,
+    JSDCM_FORCE_GC,
+    JSDCM_NEW_FAILED
+} JSDestroyContextMode;
+
+typedef enum JSRuntimeState {
+    JSRTS_DOWN,
+    JSRTS_LAUNCHING,
+    JSRTS_UP,
+    JSRTS_LANDING
+} JSRuntimeState;
+
+typedef struct JSPropertyTreeEntry {
+    JSDHashEntryHdr hdr;
+    js::Shape *child;
+} JSPropertyTreeEntry;
+
+typedef void
+(* JSActivityCallback)(void *arg, JSBool active);
+
+namespace js {
+
+typedef js::Vector<JSCompartment *, 0, js::SystemAllocPolicy> WrapperVector;
+
+}
+
+struct JSRuntime {
+
+    JSCompartment *atomsCompartment;
+
+    bool atomsCompartmentIsLocked;
+
+
+
+    js::WrapperVector compartments;
+
+
+    JSRuntimeState state;
+
+
+    JSContextCallback cxCallback;
+
+
+    JSCompartmentCallback compartmentCallback;
+
+
+
+
+
+
+
+    void setActivityCallback(JSActivityCallback cb, void *arg) {
+        activityCallback = cb;
+        activityCallbackArg = arg;
+    }
+
+    JSActivityCallback activityCallback;
+    void *activityCallbackArg;
+# 1038 "jscntxt.h"
+    uint32 protoHazardShape;
+
+
+    js::GCChunkSet gcChunkSet;
+
+    js::RootedValueMap gcRootsHash;
+    js::GCLocks gcLocksHash;
+    jsrefcount gcKeepAtoms;
+    size_t gcBytes;
+    size_t gcTriggerBytes;
+    size_t gcLastBytes;
+    size_t gcMaxBytes;
+    size_t gcMaxMallocBytes;
+    size_t gcChunksWaitingToExpire;
+    uint32 gcEmptyArenaPoolLifespan;
+    uint32 gcNumber;
+    js::GCMarker *gcMarkingTracer;
+    uint32 gcTriggerFactor;
+    int64 gcJitReleaseTime;
+    JSGCMode gcMode;
+    volatile bool gcIsNeeded;
+
+
+
+
+
+    JSCompartment *gcTriggerCompartment;
+
+
+    JSCompartment *gcCurrentCompartment;
+
+
+
+
+
+
+
+    bool gcPoke;
+    bool gcMarkAndSweep;
+    bool gcRunning;
+    bool gcRegenShapes;
+
+
+
+
+
+    JSGCCallback gcCallback;
+
+  private:
+
+
+
+
+    volatile ptrdiff_t gcMallocBytes;
+
+  public:
+    js::GCChunkAllocator *gcChunkAllocator;
+
+    void setCustomGCChunkAllocator(js::GCChunkAllocator *allocator) {
+        ((void) 0);
+        ((void) 0);
+        gcChunkAllocator = allocator;
+    }
+
+
+
+
+
+    JSTraceDataOp gcExtraRootsTraceOp;
+    void *gcExtraRootsData;
+
+
+    js::Value NaNValue;
+    js::Value negativeInfinityValue;
+    js::Value positiveInfinityValue;
+
+    JSFlatString *emptyString;
+
+
+    JSCList contextList;
+
+
+    JSDebugHooks globalDebugHooks;
+
+
+
+
+    JSBool debugMode;
+# 1136 "jscntxt.h"
+    JSCList trapList;
+    JSCList watchPointList;
+
+
+    void *data;
+
+
+
+    PRLock *gcLock;
+    PRCondVar *gcDone;
+    PRCondVar *requestDone;
+    uint32 requestCount;
+    JSThread *gcThread;
+
+    js::GCHelperThread gcHelperThread;
+
+
+    PRLock *rtLock;
+
+
+
+
+
+    PRCondVar *stateChange;
+
+
+
+
+
+
+
+    PRLock *debuggerLock;
+
+    JSThread::Map threads;
+
+    uint32 debuggerMutations;
+
+
+
+
+
+    JSSecurityCallbacks *securityCallbacks;
+
+
+    const JSStructuredCloneCallbacks *structuredCloneCallbacks;
+
+
+
+
+
+
+    int32 propertyRemovals;
+
+
+    struct JSHashTable *scriptFilenameTable;
+    JSCList scriptFilenamePrefixes;
+
+    PRLock *scriptFilenameTableLock;
+
+
+
+    const char *thousandsSeparator;
+    const char *decimalSeparator;
+    const char *numGrouping;
+# 1208 "jscntxt.h"
+    JSObject *anynameObject;
+    JSObject *functionNamespaceObject;
+
+
+
+    volatile int32 interruptCounter;
+# 1233 "jscntxt.h"
+    volatile uint32 shapeGen;
+
+
+    JSAtomState atomState;
+# 1336 "jscntxt.h"
+    JSWrapObjectCallback wrapObjectCallback;
+    JSPreWrapCallback preWrapObjectCallback;
+
+
+
+
+    uint32 stringMemoryUsed;
+
+    JSRuntime();
+    ~JSRuntime();
+
+    bool init(uint32 maxbytes);
+
+    void setGCTriggerFactor(uint32 factor);
+    void setGCLastBytes(size_t lastBytes);
+
+
+
+
+
+    void* malloc(size_t bytes, JSContext *cx = __null) {
+        updateMallocCounter(bytes);
+        void *p = ::js_malloc(bytes);
+        return (__builtin_expect((!!p), 1)) ? p : onOutOfMemory(__null, bytes, cx);
+    }
+
+
+
+
+
+    void* calloc(size_t bytes, JSContext *cx = __null) {
+        updateMallocCounter(bytes);
+        void *p = ::js_calloc(bytes);
+        return (__builtin_expect((!!p), 1)) ? p : onOutOfMemory(reinterpret_cast<void *>(1), bytes, cx);
+    }
+
+    void* realloc(void* p, size_t oldBytes, size_t newBytes, JSContext *cx = __null) {
+        ((void) 0);
+        updateMallocCounter(newBytes - oldBytes);
+        void *p2 = ::js_realloc(p, newBytes);
+        return (__builtin_expect((!!p2), 1)) ? p2 : onOutOfMemory(p, newBytes, cx);
+    }
+
+    void* realloc(void* p, size_t bytes, JSContext *cx = __null) {
+
+
+
+
+        if (!p)
+            updateMallocCounter(bytes);
+        void *p2 = ::js_realloc(p, bytes);
+        return (__builtin_expect((!!p2), 1)) ? p2 : onOutOfMemory(p, bytes, cx);
+    }
+
+    void free(void* p) { ::js_free(p); }
+
+    bool isGCMallocLimitReached() const { return gcMallocBytes <= 0; }
+
+    void resetGCMallocBytes() { gcMallocBytes = ptrdiff_t(gcMaxMallocBytes); }
+
+    void setGCMaxMallocBytes(size_t value) {
+
+
+
+
+        gcMaxMallocBytes = (ptrdiff_t(value) >= 0) ? value : size_t(-1) >> 1;
+        resetGCMallocBytes();
+    }
+# 1413 "jscntxt.h"
+    void updateMallocCounter(size_t nbytes) {
+
+        ptrdiff_t newCount = gcMallocBytes - ptrdiff_t(nbytes);
+        gcMallocBytes = newCount;
+        if ((__builtin_expect((newCount <= 0), 0)))
+            onTooMuchMalloc();
+    }
+
+  private:
+
+
+
+    __attribute__((visibility ("default"))) void onTooMuchMalloc();
+# 1435 "jscntxt.h"
+    __attribute__((visibility ("default"))) void * onOutOfMemory(void *p, size_t nbytes, JSContext *cx);
+};
+# 1459 "jscntxt.h"
+struct JSArgumentFormatMap {
+    const char *format;
+    size_t length;
+    JSArgumentFormatter formatter;
+    JSArgumentFormatMap *next;
+};
+# 1473 "jscntxt.h"
+typedef struct JSResolvingKey {
+    JSObject *obj;
+    jsid id;
+} JSResolvingKey;
+
+typedef struct JSResolvingEntry {
+    JSDHashEntryHdr hdr;
+    JSResolvingKey key;
+    uint32 flags;
+} JSResolvingEntry;
+
+
+
+
+
+extern const JSDebugHooks js_NullDebugHooks;
+
+namespace js {
+
+class AutoGCRooter;
+
+static inline
+
+# 1494 "jscntxt.h"
+              bool
+OptionsHasXML(uint32 options)
+{
+    return !!(options & ((JSUint32)1 << (6)));
+}
+
+static inline
+
+# 1500 "jscntxt.h"
+              bool
+OptionsHasAnonFunFix(uint32 options)
+{
+    return !!(options & ((JSUint32)1 << (10)));
+}
+
+static inline
+
+# 1506 "jscntxt.h"
+              bool
+OptionsSameVersionFlags(uint32 self, uint32 other)
+{
+    static const uint32 mask = ((JSUint32)1 << (6)) | ((JSUint32)1 << (10));
+    return !((self & mask) ^ (other & mask));
+}
+# 1521 "jscntxt.h"
+namespace VersionFlags {
+static const uintN MASK = 0x0FFF;
+static const uintN HAS_XML = 0x1000;
+static const uintN ANONFUNFIX = 0x2000;
+static const uintN FULL_MASK = 0x3FFF;
+}
+
+static inline JSVersion
+VersionNumber(JSVersion version)
+{
+    return JSVersion(uint32(version) & VersionFlags::MASK);
+}
+
+static inline
+
+# 1534 "jscntxt.h"
+              bool
+VersionHasXML(JSVersion version)
+{
+    return !!(version & VersionFlags::HAS_XML);
+}
+
+
+static inline
+
+# 1541 "jscntxt.h"
+              bool
+VersionShouldParseXML(JSVersion version)
+{
+    return VersionHasXML(version) || VersionNumber(version) >= JSVERSION_1_6;
+}
+
+static inline
+
+# 1547 "jscntxt.h"
+              bool
+VersionHasAnonFunFix(JSVersion version)
+{
+    return !!(version & VersionFlags::ANONFUNFIX);
+}
+
+static inline void
+VersionSetXML(JSVersion *version, bool enable)
+{
+    if (enable)
+        *version = JSVersion(uint32(*version) | VersionFlags::HAS_XML);
+    else
+        *version = JSVersion(uint32(*version) & ~VersionFlags::HAS_XML);
+}
+
+static inline void
+VersionSetAnonFunFix(JSVersion *version, bool enable)
+{
+    if (enable)
+        *version = JSVersion(uint32(*version) | VersionFlags::ANONFUNFIX);
+    else
+        *version = JSVersion(uint32(*version) & ~VersionFlags::ANONFUNFIX);
+}
+
+static inline JSVersion
+VersionExtractFlags(JSVersion version)
+{
+    return JSVersion(uint32(version) & ~VersionFlags::MASK);
+}
+
+static inline void
+VersionCopyFlags(JSVersion *version, JSVersion from)
+{
+    *version = JSVersion(VersionNumber(*version) | VersionExtractFlags(from));
+}
+
+static inline
+
+# 1583 "jscntxt.h"
+              bool
+VersionHasFlags(JSVersion version)
+{
+    return !!VersionExtractFlags(version);
+}
+
+static inline uintN
+VersionFlagsToOptions(JSVersion version)
+{
+    uintN copts = (VersionHasXML(version) ? ((JSUint32)1 << (6)) : 0) |
+                  (VersionHasAnonFunFix(version) ? ((JSUint32)1 << (10)) : 0);
+    ((void) 0);
+    return copts;
+}
+
+static inline JSVersion
+OptionFlagsToVersion(uintN options, JSVersion version)
+{
+    VersionSetXML(&version, OptionsHasXML(options));
+    VersionSetAnonFunFix(&version, OptionsHasAnonFunFix(options));
+    return version;
+}
+
+static inline
+
+# 1606 "jscntxt.h"
+              bool
+VersionIsKnown(JSVersion version)
+{
+    return VersionNumber(version) != JSVERSION_UNKNOWN;
+}
+
+typedef js::HashSet<JSObject *,
+                    js::DefaultHasher<JSObject *>,
+                    js::SystemAllocPolicy> BusyArraysMap;
+
+}
+
+struct JSContext
+{
+    explicit JSContext(JSRuntime *rt);
+
+
+    JSCList link;
+
+  private:
+
+    JSVersion defaultVersion;
+    JSVersion versionOverride;
+    bool hasVersionOverride;
+
+
+    JSBool throwing;
+    js::Value exception;
+
+
+    uintN runOptions;
+
+  public:
+
+    JSLocaleCallbacks *localeCallbacks;
+
+
+
+
+
+
+
+    JSDHashTable *resolvingTable;
+
+
+
+
+
+    JSPackedBool generatingError;
+
+
+    jsuword stackLimit;
+
+
+    size_t scriptStackQuota;
+
+
+    JSRuntime *const runtime;
+
+
+    JSCompartment *compartment;
+
+
+   
+    JSFrameRegs *regs;
+
+
+
+    JSStackFrame* fp() {
+        ((void) 0);
+        return regs->fp;
+    }
+
+    JSStackFrame* maybefp() {
+        ((void) 0);
+        return regs ? regs->fp : __null;
+    }
+
+    bool hasfp() {
+        ((void) 0);
+        return !!regs;
+    }
+
+  public:
+    friend class js::StackSpace;
+    friend bool js::Interpret(JSContext *, JSStackFrame *, uintN, JSInterpMode);
+
+    void resetCompartment();
+    void wrapPendingException();
+
+
+    void setCurrentRegs(JSFrameRegs *regs) {
+        ((void) 0);
+        this->regs = regs;
+    }
+
+
+    JSArenaPool tempPool;
+
+
+    JSArenaPool regExpPool;
+
+
+    JSObject *globalObject;
+
+
+    JSSharpObjectMap sharpObjectMap;
+    js::BusyArraysMap busyArrays;
+
+
+    JSArgumentFormatMap *argumentFormatMap;
+
+
+    char *lastMessage;
+
+
+
+
+
+
+    JSErrorReporter errorReporter;
+
+
+    JSOperationCallback operationCallback;
+
+
+    uintN interpLevel;
+
+
+    void *data;
+    void *data2;
+
+  private:
+
+    js::StackSegment *currentSegment;
+
+  public:
+    void assertSegmentsInSync() const {
+# 1753 "jscntxt.h"
+    }
+
+
+    bool hasActiveSegment() const {
+        assertSegmentsInSync();
+        return !!regs;
+    }
+
+
+    js::StackSegment *activeSegment() const {
+        ((void) 0);
+        return currentSegment;
+    }
+
+
+    js::StackSegment *getCurrentSegment() const {
+        assertSegmentsInSync();
+        return currentSegment;
+    }
+
+    inline js::RegExpStatics *regExpStatics();
+
+
+    void pushSegmentAndFrame(js::StackSegment *newseg, JSFrameRegs &regs);
+
+
+    void popSegmentAndFrame();
+
+
+    void saveActiveSegment();
+
+
+    void restoreSegment();
+
+
+    inline JSStackFrame *computeNextFrame(JSStackFrame *fp);
+
+
+
+
+
+    js::StackSegment *containingSegment(const JSStackFrame *target);
+
+
+    JSStackFrame *findFrameAtLevel(uintN targetLevel) const {
+        JSStackFrame *fp = regs->fp;
+        while (true) {
+            ((void) 0);
+            if (fp->script()->staticLevel == targetLevel)
+                break;
+            fp = fp->prev();
+        }
+        return fp;
+    }
+
+  public:
+
+
+
+
+    bool canSetDefaultVersion() const {
+        return !regs && !hasVersionOverride;
+    }
+
+
+    void overrideVersion(JSVersion newVersion) {
+        ((void) 0);
+        versionOverride = newVersion;
+        hasVersionOverride = true;
+    }
+
+
+    void setDefaultVersion(JSVersion version) {
+        defaultVersion = version;
+    }
+
+    void clearVersionOverride() { hasVersionOverride = false; }
+    JSVersion getDefaultVersion() const { return defaultVersion; }
+    bool isVersionOverridden() const { return hasVersionOverride; }
+
+    JSVersion getVersionOverride() const {
+        ((void) 0);
+        return versionOverride;
+    }
+
+
+
+
+
+    bool maybeOverrideVersion(JSVersion newVersion) {
+        if (canSetDefaultVersion()) {
+            setDefaultVersion(newVersion);
+            return false;
+        }
+        overrideVersion(newVersion);
+        return true;
+    }
+
+  private:
+# 1860 "jscntxt.h"
+    void maybeMigrateVersionOverride() {
+        if ((__builtin_expect((!isVersionOverridden() || currentSegment), 1)))
+            return;
+        defaultVersion = versionOverride;
+        clearVersionOverride();
+    }
+
+  public:
+# 1876 "jscntxt.h"
+    JSVersion findVersion() const {
+        if (hasVersionOverride)
+            return versionOverride;
+
+        if (regs) {
+
+            JSStackFrame *fp = regs->fp;
+            while (fp && !fp->isScriptFrame())
+                fp = fp->prev();
+            if (fp)
+                return fp->script()->getVersion();
+        }
+
+        return defaultVersion;
+    }
+
+    void setRunOptions(uintN ropts) {
+        ((void) 0);
+        runOptions = ropts;
+    }
+
+
+    void setCompileOptions(uintN newcopts) {
+        ((void) 0);
+        if ((__builtin_expect((getCompileOptions() == newcopts), 1)))
+            return;
+        JSVersion version = findVersion();
+        JSVersion newVersion = js::OptionFlagsToVersion(newcopts, version);
+        maybeOverrideVersion(newVersion);
+    }
+
+    uintN getRunOptions() const { return runOptions; }
+    uintN getCompileOptions() const { return js::VersionFlagsToOptions(findVersion()); }
+    uintN allOptions() const { return getRunOptions() | getCompileOptions(); }
+
+    bool hasRunOption(uintN ropt) const {
+        ((void) 0);
+        return !!(runOptions & ropt);
+    }
+
+    bool hasStrictOption() const { return hasRunOption(((JSUint32)1 << (0))); }
+    bool hasWErrorOption() const { return hasRunOption(((JSUint32)1 << (1))); }
+    bool hasAtLineOption() const { return hasRunOption(((JSUint32)1 << (5))); }
+
+
+    JSThread *thread;
+    unsigned outstandingRequests;
+
+
+    JSCList threadLinks;
+
+
+
+
+
+
+    js::AutoGCRooter *autoGCRooters;
+
+
+    const JSDebugHooks *debugHooks;
+
+
+    JSSecurityCallbacks *securityCallbacks;
+
+
+    uintN resolveFlags;
+
+
+    int64 rngSeed;
+
+
+    js::Value iterValue;
+# 1969 "jscntxt.h"
+    void updateJITEnabled();
+# 1984 "jscntxt.h"
+    DSTOffsetCache dstOffsetCache;
+
+
+    JSObject *enumerators;
+
+  private:
+
+
+
+
+
+
+    js::Vector<JSGenerator *, 2, js::SystemAllocPolicy> genStack;
+
+  public:
+
+
+
+
+
+    JSGenerator *generatorFor(JSStackFrame *fp) const;
+
+
+    inline bool ensureGeneratorStackSpace();
+
+    bool enterGenerator(JSGenerator *gen) {
+        return genStack.append(gen);
+    }
+
+    void leaveGenerator(JSGenerator *gen) {
+        ((void) 0);
+        genStack.popBack();
+    }
+
+
+
+
+
+
+    js::GCHelperThread *gcBackgroundFree;
+
+
+    inline void* malloc(size_t bytes) {
+        return runtime->malloc(bytes, this);
+    }
+
+    inline void* mallocNoReport(size_t bytes) {
+        ((void) 0);
+        return runtime->malloc(bytes, __null);
+    }
+
+    inline void* calloc(size_t bytes) {
+        ((void) 0);
+        return runtime->calloc(bytes, this);
+    }
+
+    inline void* realloc(void* p, size_t bytes) {
+        return runtime->realloc(p, bytes, this);
+    }
+
+    inline void* realloc(void* p, size_t oldBytes, size_t newBytes) {
+        return runtime->realloc(p, oldBytes, newBytes, this);
+    }
+
+    inline void free(void* p) {
+
+        if (gcBackgroundFree) {
+            gcBackgroundFree->freeLater(p);
+            return;
+        }
+
+        runtime->free(p);
+    }
+# 2069 "jscntxt.h"
+    template <class T>
+    __attribute__((always_inline)) inline T *create() {
+        void *memory = this->malloc(sizeof(T)); if (!memory) return __null; return new(memory) T ();
+    }
+
+    template <class T, class P1>
+    __attribute__((always_inline)) inline T *create(const P1 &p1) {
+        void *memory = this->malloc(sizeof(T)); if (!memory) return __null; return new(memory) T (p1);
+    }
+
+    template <class T, class P1, class P2>
+    __attribute__((always_inline)) inline T *create(const P1 &p1, const P2 &p2) {
+        void *memory = this->malloc(sizeof(T)); if (!memory) return __null; return new(memory) T (p1, p2);
+    }
+
+    template <class T, class P1, class P2, class P3>
+    __attribute__((always_inline)) inline T *create(const P1 &p1, const P2 &p2, const P3 &p3) {
+        void *memory = this->malloc(sizeof(T)); if (!memory) return __null; return new(memory) T (p1, p2, p3);
+    }
+
+
+    template <class T>
+    __attribute__((always_inline)) inline void destroy(T *p) {
+        p->~T();
+        this->free(p);
+    }
+
+    void purge();
+
+    js::StackSpace &stack() const {
+        return (&(this)->thread->data)->stackSpace;
+    }
+
+
+
+
+
+
+
+    void assertValidStackDepth(uintN ) {}
+
+
+    bool isExceptionPending() {
+        return throwing;
+    }
+
+    js::Value getPendingException() {
+        ((void) 0);
+        return exception;
+    }
+
+    void setPendingException(js::Value v);
+
+    void clearPendingException() {
+        this->throwing = false;
+        this->exception.setUndefined();
+    }
+
+  private:
+
+
+
+
+
+
+    __attribute__((visibility ("default"))) void checkMallocGCPressure(void *p);
+};
+# 2168 "jscntxt.h"
+static inline uintN
+FramePCOffset(JSContext *cx, JSStackFrame* fp)
+{
+    jsbytecode *pc = fp->hasImacropc() ? fp->imacropc() : fp->pc(cx);
+    return uintN(pc - fp->script()->code);
+}
+
+static inline JSAtom **
+FrameAtomBase(JSContext *cx, JSStackFrame *fp)
+{
+    return fp->hasImacropc()
+           ? ((JSAtom **)((uint8 *)(&cx->runtime->atomState) + __builtin_offsetof (JSAtomState, emptyAtom)))
+           : fp->script()->atomMap.vector;
+}
+
+namespace js {
+
+class AutoGCRooter {
+  public:
+    AutoGCRooter(JSContext *cx, ptrdiff_t tag)
+      : down(cx->autoGCRooters), tag(tag), context(cx)
+    {
+        ((void) 0);
+        ((void) 0);
+        cx->autoGCRooters = this;
+    }
+
+    ~AutoGCRooter() {
+        ((void) 0);
+        ((void) 0);
+        context->autoGCRooters = down;
+    }
+
+
+    inline void trace(JSTracer *trc);
+
+
+#pragma GCC visibility push(default)
+
+    friend __attribute__((visibility ("default"))) void MarkContext(JSTracer *trc, JSContext *acx);
+    friend void MarkRuntime(JSTracer *trc);
+
+#pragma GCC visibility pop
+
+
+  protected:
+    AutoGCRooter * const down;
+# 2223 "jscntxt.h"
+    ptrdiff_t tag;
+
+    JSContext * const context;
+
+    enum {
+        JSVAL = -1,
+        SHAPE = -2,
+        PARSER = -3,
+        SCRIPT = -4,
+        ENUMERATOR = -5,
+        IDARRAY = -6,
+        DESCRIPTORS = -7,
+        NAMESPACES = -8,
+        XML = -9,
+        OBJECT = -10,
+        ID = -11,
+        VALVECTOR = -12,
+        DESCRIPTOR = -13,
+        STRING = -14,
+        IDVECTOR = -15,
+        BINDINGS = -16,
+        SHAPEVECTOR = -17
+    };
+
+    private:
+
+    AutoGCRooter(AutoGCRooter &ida);
+    void operator=(AutoGCRooter &ida);
+};
+
+
+class AutoValueRooter : private AutoGCRooter
+{
+  public:
+    explicit AutoValueRooter(JSContext *cx
+                             )
+      : AutoGCRooter(cx, JSVAL), val(js::NullValue())
+    {
+        do { } while (0);
+    }
+
+    AutoValueRooter(JSContext *cx, const Value &v
+                    )
+      : AutoGCRooter(cx, JSVAL), val(v)
+    {
+        do { } while (0);
+    }
+
+    AutoValueRooter(JSContext *cx, jsval v
+                    )
+      : AutoGCRooter(cx, JSVAL), val(js::Valueify(v))
+    {
+        do { } while (0);
+    }
+
+
+
+
+
+
+
+    void set(Value v) {
+        ((void) 0);
+        val = v;
+    }
+
+    void set(jsval v) {
+        ((void) 0);
+        val = js::Valueify(v);
+    }
+
+    const Value &value() const {
+        ((void) 0);
+        return val;
+    }
+
+    Value *addr() {
+        ((void) 0);
+        return &val;
+    }
+
+    const jsval &jsval_value() const {
+        ((void) 0);
+        return Jsvalify(val);
+    }
+
+    jsval *jsval_addr() {
+        ((void) 0);
+        return Jsvalify(&val);
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+    friend void MarkRuntime(JSTracer *trc);
+
+  private:
+    Value val;
+   
+};
+
+class AutoObjectRooter : private AutoGCRooter {
+  public:
+    AutoObjectRooter(JSContext *cx, JSObject *obj = __null
+                     )
+      : AutoGCRooter(cx, OBJECT), obj(obj)
+    {
+        do { } while (0);
+    }
+
+    void setObject(JSObject *obj) {
+        this->obj = obj;
+    }
+
+    JSObject * object() const {
+        return obj;
+    }
+
+    JSObject ** addr() {
+        return &obj;
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+    friend void MarkRuntime(JSTracer *trc);
+
+  private:
+    JSObject *obj;
+   
+};
+
+class AutoStringRooter : private AutoGCRooter {
+  public:
+    AutoStringRooter(JSContext *cx, JSString *str = __null
+                     )
+      : AutoGCRooter(cx, STRING), str(str)
+    {
+        do { } while (0);
+    }
+
+    void setString(JSString *str) {
+        this->str = str;
+    }
+
+    JSString * string() const {
+        return str;
+    }
+
+    JSString ** addr() {
+        return &str;
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+
+  private:
+    JSString *str;
+   
+};
+
+class AutoArrayRooter : private AutoGCRooter {
+  public:
+    AutoArrayRooter(JSContext *cx, size_t len, Value *vec
+                    )
+      : AutoGCRooter(cx, len), array(vec)
+    {
+        do { } while (0);
+        ((void) 0);
+    }
+
+    AutoArrayRooter(JSContext *cx, size_t len, jsval *vec
+                    )
+      : AutoGCRooter(cx, len), array(Valueify(vec))
+    {
+        do { } while (0);
+        ((void) 0);
+    }
+
+    void changeLength(size_t newLength) {
+        tag = ptrdiff_t(newLength);
+        ((void) 0);
+    }
+
+    void changeArray(Value *newArray, size_t newLength) {
+        changeLength(newLength);
+        array = newArray;
+    }
+
+    Value *array;
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+
+  private:
+   
+};
+
+class AutoShapeRooter : private AutoGCRooter {
+  public:
+    AutoShapeRooter(JSContext *cx, const js::Shape *shape
+                    )
+      : AutoGCRooter(cx, SHAPE), shape(shape)
+    {
+        do { } while (0);
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+    friend void MarkRuntime(JSTracer *trc);
+
+  private:
+    const js::Shape * const shape;
+   
+};
+
+class AutoScriptRooter : private AutoGCRooter {
+  public:
+    AutoScriptRooter(JSContext *cx, JSScript *script
+                     )
+      : AutoGCRooter(cx, SCRIPT), script(script)
+    {
+        do { } while (0);
+    }
+
+    void setScript(JSScript *script) {
+        this->script = script;
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+
+  private:
+    JSScript *script;
+   
+};
+
+class AutoIdRooter : private AutoGCRooter
+{
+  public:
+    explicit AutoIdRooter(JSContext *cx, jsid id = INT_TO_JSID(0)
+                          )
+      : AutoGCRooter(cx, ID), id_(id)
+    {
+        do { } while (0);
+    }
+
+    jsid id() {
+        return id_;
+    }
+
+    jsid * addr() {
+        return &id_;
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+    friend void MarkRuntime(JSTracer *trc);
+
+  private:
+    jsid id_;
+   
+};
+
+class AutoIdArray : private AutoGCRooter {
+  public:
+    AutoIdArray(JSContext *cx, JSIdArray *ida )
+      : AutoGCRooter(cx, IDARRAY), idArray(ida)
+    {
+        do { } while (0);
+    }
+    ~AutoIdArray() {
+        if (idArray)
+            JS_DestroyIdArray(context, idArray);
+    }
+    bool operator!() {
+        return idArray == __null;
+    }
+    jsid operator[](size_t i) const {
+        ((void) 0);
+        ((void) 0);
+        return idArray->vector[i];
+    }
+    size_t length() const {
+         return idArray->length;
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+
+    JSIdArray *steal() {
+        JSIdArray *copy = idArray;
+        idArray = __null;
+        return copy;
+    }
+
+  protected:
+    inline void trace(JSTracer *trc);
+
+  private:
+    JSIdArray * idArray;
+   
+
+
+    AutoIdArray(AutoIdArray &ida);
+    void operator=(AutoIdArray &ida);
+};
+
+
+class AutoEnumStateRooter : private AutoGCRooter
+{
+  public:
+    AutoEnumStateRooter(JSContext *cx, JSObject *obj
+                        )
+      : AutoGCRooter(cx, ENUMERATOR), obj(obj), stateValue()
+    {
+        do { } while (0);
+        ((void) 0);
+    }
+
+    ~AutoEnumStateRooter() {
+        if (!stateValue.isNull()) {
+
+
+
+            obj->enumerate(context, JSENUMERATE_DESTROY, &stateValue, 0);
+            ((void) 0);
+        }
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+
+    const Value &state() const { return stateValue; }
+    Value *addr() { return &stateValue; }
+
+  protected:
+    void trace(JSTracer *trc);
+
+    JSObject * const obj;
+
+  private:
+    Value stateValue;
+   
+};
+
+
+class AutoXMLRooter : private AutoGCRooter {
+  public:
+    AutoXMLRooter(JSContext *cx, JSXML *xml
+                  )
+      : AutoGCRooter(cx, XML), xml(xml)
+    {
+        do { } while (0);
+        ((void) 0);
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+    friend void MarkRuntime(JSTracer *trc);
+
+  private:
+    JSXML * const xml;
+   
+};
+
+
+class AutoBindingsRooter : private AutoGCRooter {
+  public:
+    AutoBindingsRooter(JSContext *cx, Bindings &bindings
+                       )
+      : AutoGCRooter(cx, BINDINGS), bindings(bindings)
+    {
+        do { } while (0);
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+
+  private:
+    Bindings &bindings;
+   
+};
+
+class AutoLockGC {
+  public:
+    explicit AutoLockGC(JSRuntime *rt
+                        )
+      : rt(rt)
+    {
+        do { } while (0);
+        PR_Lock((rt)->gcLock);
+    }
+    ~AutoLockGC() { PR_Unlock((rt)->gcLock); }
+
+  private:
+    JSRuntime *rt;
+   
+};
+
+class AutoUnlockGC {
+  private:
+    JSRuntime *rt;
+   
+
+  public:
+    explicit AutoUnlockGC(JSRuntime *rt
+                          )
+      : rt(rt)
+    {
+        do { } while (0);
+        PR_Unlock((rt)->gcLock);
+    }
+    ~AutoUnlockGC() { PR_Lock((rt)->gcLock); }
+};
+
+class AutoLockAtomsCompartment {
+  private:
+    JSContext *cx;
+   
+
+  public:
+    AutoLockAtomsCompartment(JSContext *cx
+                               )
+      : cx(cx)
+    {
+        do { } while (0);
+        js_Lock(cx, &cx->runtime->atomState.lock);
+
+        cx->runtime->atomsCompartmentIsLocked = true;
+
+    }
+    ~AutoLockAtomsCompartment() {
+
+        cx->runtime->atomsCompartmentIsLocked = false;
+
+        js_Unlock(cx, &cx->runtime->atomState.lock);
+    }
+};
+
+class AutoUnlockAtomsCompartment {
+    JSContext *cx;
+   
+
+  public:
+    AutoUnlockAtomsCompartment(JSContext *cx
+                                 )
+      : cx(cx)
+    {
+        do { } while (0);
+
+        cx->runtime->atomsCompartmentIsLocked = false;
+
+        js_Unlock(cx, &cx->runtime->atomState.lock);
+    }
+    ~AutoUnlockAtomsCompartment() {
+        js_Lock(cx, &cx->runtime->atomState.lock);
+
+        cx->runtime->atomsCompartmentIsLocked = true;
+
+    }
+};
+
+class AutoKeepAtoms {
+    JSRuntime *rt;
+   
+
+  public:
+    explicit AutoKeepAtoms(JSRuntime *rt
+                           )
+      : rt(rt)
+    {
+        do { } while (0);
+        PR_AtomicIncrement((PRInt32 *)(&(rt)->gcKeepAtoms));;
+    }
+    ~AutoKeepAtoms() { PR_AtomicDecrement((PRInt32 *)(&(rt)->gcKeepAtoms));; }
+};
+
+class AutoArenaAllocator {
+    JSArenaPool *pool;
+    void *mark;
+   
+
+  public:
+    explicit AutoArenaAllocator(JSArenaPool *pool
+                                )
+      : pool(pool), mark(((void *) (pool)->current->avail))
+    {
+        do { } while (0);
+    }
+    ~AutoArenaAllocator() { do { char *_m = (char *)(mark); JSArena *_a = (pool)->current; if (_a != &(pool)->first && (((jsuword)(_m) - (jsuword)((_a)->base)) <= ((jsuword)((_a)->avail) - (jsuword)((_a)->base)))) { _a->avail = (jsuword)(((jsuword)(_m) + (pool)->mask) & ~(pool)->mask); ((void) 0); ; ; } else { JS_ArenaRelease(pool, _m); } ; } while (0); }
+
+    template <typename T>
+    T *alloc(size_t elems) {
+        void *ptr;
+        do { JSArena *_a = (pool)->current; size_t _nb = (((jsuword)(elems * sizeof(T)) + (pool)->mask) & ~(pool)->mask); jsuword _p = _a->avail; if ((_nb > _a->limit) || _p > _a->limit - _nb) _p = (jsuword)JS_ArenaAllocate(pool, _nb); else _a->avail = _p + _nb; ptr = (void *) _p; do { } while (0) ; } while (0);
+        return static_cast<T *>(ptr);
+    }
+};
+
+class AutoReleasePtr {
+    JSContext *cx;
+    void *ptr;
+   
+
+    AutoReleasePtr operator=(const AutoReleasePtr &other);
+
+  public:
+    explicit AutoReleasePtr(JSContext *cx, void *ptr
+                            )
+      : cx(cx), ptr(ptr)
+    {
+        do { } while (0);
+    }
+    ~AutoReleasePtr() { cx->free(ptr); }
+};
+
+
+
+
+class AutoReleaseNullablePtr {
+    JSContext *cx;
+    void *ptr;
+   
+
+    AutoReleaseNullablePtr operator=(const AutoReleaseNullablePtr &other);
+
+  public:
+    explicit AutoReleaseNullablePtr(JSContext *cx, void *ptr
+                                    )
+      : cx(cx), ptr(ptr)
+    {
+        do { } while (0);
+    }
+    void reset(void *ptr2) {
+        if (ptr)
+            cx->free(ptr);
+        ptr = ptr2;
+    }
+    ~AutoReleaseNullablePtr() { if (ptr) cx->free(ptr); }
+};
+
+class AutoLocalNameArray {
+  public:
+    explicit AutoLocalNameArray(JSContext *cx, JSFunction *fun
+                                )
+      : context(cx),
+        mark(((void *) (&cx->tempPool)->current->avail)),
+        names(fun->script()->bindings.getLocalNameArray(cx, &cx->tempPool)),
+        count(fun->script()->bindings.countLocalNames())
+    {
+        do { } while (0);
+    }
+
+    ~AutoLocalNameArray() {
+        do { char *_m = (char *)(mark); JSArena *_a = (&context->tempPool)->current; if (_a != &(&context->tempPool)->first && (((jsuword)(_m) - (jsuword)((_a)->base)) <= ((jsuword)((_a)->avail) - (jsuword)((_a)->base)))) { _a->avail = (jsuword)(((jsuword)(_m) + (&context->tempPool)->mask) & ~(&context->tempPool)->mask); ((void) 0); ; ; } else { JS_ArenaRelease(&context->tempPool, _m); } ; } while (0);
+    }
+
+    operator bool() const { return !!names; }
+
+    uint32 length() const { return count; }
+
+    const jsuword &operator [](unsigned i) const { return names[i]; }
+
+  private:
+    JSContext *context;
+    void *mark;
+    jsuword *names;
+    uint32 count;
+
+   
+};
+
+template <class RefCountable>
+class AlreadyIncRefed
+{
+    typedef RefCountable *****ConvertibleToBool;
+
+    RefCountable *obj;
+
+  public:
+    explicit AlreadyIncRefed(RefCountable *obj) : obj(obj) {}
+
+    bool null() const { return obj == __null; }
+    operator ConvertibleToBool() const { return (ConvertibleToBool)obj; }
+
+    RefCountable *operator->() const { ((void) 0); return obj; }
+    RefCountable &operator*() const { ((void) 0); return *obj; }
+    RefCountable *get() const { return obj; }
+};
+
+template <class RefCountable>
+class NeedsIncRef
+{
+    typedef RefCountable *****ConvertibleToBool;
+
+    RefCountable *obj;
+
+  public:
+    explicit NeedsIncRef(RefCountable *obj) : obj(obj) {}
+
+    bool null() const { return obj == __null; }
+    operator ConvertibleToBool() const { return (ConvertibleToBool)obj; }
+
+    RefCountable *operator->() const { ((void) 0); return obj; }
+    RefCountable &operator*() const { ((void) 0); return *obj; }
+    RefCountable *get() const { return obj; }
+};
+
+template <class RefCountable>
+class AutoRefCount
+{
+    typedef RefCountable *****ConvertibleToBool;
+
+    JSContext *const cx;
+    RefCountable *obj;
+
+    AutoRefCount(const AutoRefCount &);
+    void operator=(const AutoRefCount &);
+
+  public:
+    explicit AutoRefCount(JSContext *cx)
+      : cx(cx), obj(__null)
+    {}
+
+    AutoRefCount(JSContext *cx, NeedsIncRef<RefCountable> aobj)
+      : cx(cx), obj(aobj.get())
+    {
+        if (obj)
+            obj->incref(cx);
+    }
+
+    AutoRefCount(JSContext *cx, AlreadyIncRefed<RefCountable> aobj)
+      : cx(cx), obj(aobj.get())
+    {}
+
+    ~AutoRefCount() {
+        if (obj)
+            obj->decref(cx);
+    }
+
+    void reset(NeedsIncRef<RefCountable> aobj) {
+        if (obj)
+            obj->decref(cx);
+        obj = aobj.get();
+        if (obj)
+            obj->incref(cx);
+    }
+
+    void reset(AlreadyIncRefed<RefCountable> aobj) {
+        if (obj)
+            obj->decref(cx);
+        obj = aobj.get();
+    }
+
+    bool null() const { return obj == __null; }
+    operator ConvertibleToBool() const { return (ConvertibleToBool)obj; }
+
+    RefCountable *operator->() const { ((void) 0); return obj; }
+    RefCountable &operator*() const { ((void) 0); return *obj; }
+    RefCountable *get() const { return obj; }
+};
+
+}
+
+class JSAutoResolveFlags
+{
+  public:
+    JSAutoResolveFlags(JSContext *cx, uintN flags
+                       )
+      : mContext(cx), mSaved(cx->resolveFlags)
+    {
+        do { } while (0);
+        cx->resolveFlags = flags;
+    }
+
+    ~JSAutoResolveFlags() { mContext->resolveFlags = mSaved; }
+
+  private:
+    JSContext *mContext;
+    uintN mSaved;
+   
+};
+
+extern JSThreadData *
+js_CurrentThreadData(JSRuntime *rt);
+
+extern JSBool
+js_InitThreads(JSRuntime *rt);
+
+extern void
+js_FinishThreads(JSRuntime *rt);
+
+extern void
+js_PurgeThreads(JSContext *cx);
+
+namespace js {
+
+
+
+
+class ThreadDataIter : public JSThread::Map::Range
+{
+  public:
+    ThreadDataIter(JSRuntime *rt) : JSThread::Map::Range(rt->threads.all()) {}
+
+    JSThreadData *threadData() const {
+        return &front().value->data;
+    }
+};
+# 2947 "jscntxt.h"
+}
+
+
+
+
+
+extern JSContext *
+js_NewContext(JSRuntime *rt, size_t stackChunkSize);
+
+extern void
+js_DestroyContext(JSContext *cx, JSDestroyContextMode mode);
+
+static inline JSContext *
+js_ContextFromLinkField(JSCList *link)
+{
+    ((void) 0);
+    return (JSContext *) ((uint8 *) link - __builtin_offsetof (JSContext, link));
+}
+
+
+
+
+
+extern JSContext *
+js_ContextIterator(JSRuntime *rt, JSBool unlocked, JSContext **iterp);
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSContext *
+js_NextActiveContext(JSRuntime *, JSContext *);
+
+
+
+
+extern JSBool
+js_StartResolving(JSContext *cx, JSResolvingKey *key, uint32 flag,
+                  JSResolvingEntry **entryp);
+
+extern void
+js_StopResolving(JSContext *cx, JSResolvingKey *key, uint32 flag,
+                 JSResolvingEntry *entry, uint32 generation);
+
+
+
+
+
+typedef enum JSErrNum {
+
+
+# 1 "js.msg" 1
+# 82 "js.msg"
+JSMSG_NOT_AN_ERROR = 0,
+JSMSG_NOT_DEFINED = 1,
+JSMSG_INACTIVE = 2,
+JSMSG_MORE_ARGS_NEEDED = 3,
+JSMSG_BAD_CHAR = 4,
+JSMSG_BAD_TYPE = 5,
+JSMSG_ALLOC_OVERFLOW = 6,
+JSMSG_MISSING_HEXDIGITS = 7,
+JSMSG_INCOMPATIBLE_PROTO = 8,
+JSMSG_NO_CONSTRUCTOR = 9,
+JSMSG_CANT_ALIAS = 10,
+JSMSG_NOT_SCRIPTED_FUNCTION = 11,
+JSMSG_BAD_SORT_ARG = 12,
+JSMSG_BAD_ATOMIC_NUMBER = 13,
+JSMSG_TOO_MANY_LITERALS = 14,
+JSMSG_CANT_WATCH = 15,
+JSMSG_STACK_UNDERFLOW = 16,
+JSMSG_NEED_DIET = 17,
+JSMSG_TOO_MANY_LOCAL_ROOTS = 18,
+JSMSG_READ_ONLY = 19,
+JSMSG_BAD_FORMAL = 20,
+JSMSG_CANT_DELETE = 21,
+JSMSG_NOT_FUNCTION = 22,
+JSMSG_NOT_CONSTRUCTOR = 23,
+JSMSG_SCRIPT_STACK_QUOTA = 24,
+JSMSG_TOO_DEEP = 25,
+JSMSG_OVER_RECURSED = 26,
+JSMSG_IN_NOT_OBJECT = 27,
+JSMSG_BAD_NEW_RESULT = 28,
+JSMSG_BAD_SHARP_DEF = 29,
+JSMSG_BAD_SHARP_USE = 30,
+JSMSG_BAD_INSTANCEOF_RHS = 31,
+JSMSG_BAD_BYTECODE = 32,
+JSMSG_BAD_RADIX = 33,
+JSMSG_PAREN_BEFORE_LET = 34,
+JSMSG_CANT_CONVERT = 35,
+JSMSG_CYCLIC_VALUE = 36,
+JSMSG_COMPILE_EXECED_SCRIPT = 37,
+JSMSG_CANT_CONVERT_TO = 38,
+JSMSG_NO_PROPERTIES = 39,
+JSMSG_CANT_FIND_CLASS = 40,
+JSMSG_CANT_XDR_CLASS = 41,
+JSMSG_BYTECODE_TOO_BIG = 42,
+JSMSG_UNKNOWN_FORMAT = 43,
+JSMSG_TOO_MANY_CON_ARGS = 44,
+JSMSG_TOO_MANY_FUN_ARGS = 45,
+JSMSG_BAD_QUANTIFIER = 46,
+JSMSG_MIN_TOO_BIG = 47,
+JSMSG_MAX_TOO_BIG = 48,
+JSMSG_OUT_OF_ORDER = 49,
+JSMSG_BAD_DESTRUCT_DECL = 50,
+JSMSG_BAD_DESTRUCT_ASS = 51,
+JSMSG_PAREN_AFTER_LET = 52,
+JSMSG_CURLY_AFTER_LET = 53,
+JSMSG_MISSING_PAREN = 54,
+JSMSG_UNTERM_CLASS = 55,
+JSMSG_TRAILING_SLASH = 56,
+JSMSG_BAD_CLASS_RANGE = 57,
+JSMSG_BAD_REGEXP_FLAG = 58,
+JSMSG_NO_INPUT = 59,
+JSMSG_CANT_OPEN = 60,
+JSMSG_BAD_STRING_MASK = 61,
+JSMSG_UNMATCHED_RIGHT_PAREN = 62,
+JSMSG_END_OF_DATA = 63,
+JSMSG_SEEK_BEYOND_START = 64,
+JSMSG_SEEK_BEYOND_END = 65,
+JSMSG_END_SEEK = 66,
+JSMSG_WHITHER_WHENCE = 67,
+JSMSG_BAD_SCRIPT_MAGIC = 68,
+JSMSG_PAREN_BEFORE_FORMAL = 69,
+JSMSG_MISSING_FORMAL = 70,
+JSMSG_PAREN_AFTER_FORMAL = 71,
+JSMSG_CURLY_BEFORE_BODY = 72,
+JSMSG_CURLY_AFTER_BODY = 73,
+JSMSG_PAREN_BEFORE_COND = 74,
+JSMSG_PAREN_AFTER_COND = 75,
+JSMSG_DESTRUCT_DUP_ARG = 76,
+JSMSG_NAME_AFTER_DOT = 77,
+JSMSG_BRACKET_IN_INDEX = 78,
+JSMSG_XML_WHOLE_PROGRAM = 79,
+JSMSG_PAREN_BEFORE_SWITCH = 80,
+JSMSG_PAREN_AFTER_SWITCH = 81,
+JSMSG_CURLY_BEFORE_SWITCH = 82,
+JSMSG_COLON_AFTER_CASE = 83,
+JSMSG_WHILE_AFTER_DO = 84,
+JSMSG_PAREN_AFTER_FOR = 85,
+JSMSG_SEMI_AFTER_FOR_INIT = 86,
+JSMSG_SEMI_AFTER_FOR_COND = 87,
+JSMSG_PAREN_AFTER_FOR_CTRL = 88,
+JSMSG_CURLY_BEFORE_TRY = 89,
+JSMSG_CURLY_AFTER_TRY = 90,
+JSMSG_PAREN_BEFORE_CATCH = 91,
+JSMSG_CATCH_IDENTIFIER = 92,
+JSMSG_PAREN_AFTER_CATCH = 93,
+JSMSG_CURLY_BEFORE_CATCH = 94,
+JSMSG_CURLY_AFTER_CATCH = 95,
+JSMSG_CURLY_BEFORE_FINALLY = 96,
+JSMSG_CURLY_AFTER_FINALLY = 97,
+JSMSG_CATCH_OR_FINALLY = 98,
+JSMSG_PAREN_BEFORE_WITH = 99,
+JSMSG_PAREN_AFTER_WITH = 100,
+JSMSG_CURLY_IN_COMPOUND = 101,
+JSMSG_NO_VARIABLE_NAME = 102,
+JSMSG_COLON_IN_COND = 103,
+JSMSG_PAREN_AFTER_ARGS = 104,
+JSMSG_BRACKET_AFTER_LIST = 105,
+JSMSG_COLON_AFTER_ID = 106,
+JSMSG_CURLY_AFTER_LIST = 107,
+JSMSG_PAREN_IN_PAREN = 108,
+JSMSG_SEMI_BEFORE_STMNT = 109,
+JSMSG_NO_RETURN_VALUE = 110,
+JSMSG_DUPLICATE_FORMAL = 111,
+JSMSG_EQUAL_AS_ASSIGN = 112,
+JSMSG_OPTIMIZED_CLOSURE_LEAK = 113,
+JSMSG_TOO_MANY_DEFAULTS = 114,
+JSMSG_TOO_MANY_CASES = 115,
+JSMSG_BAD_SWITCH = 116,
+JSMSG_BAD_FOR_LEFTSIDE = 117,
+JSMSG_CATCH_AFTER_GENERAL = 118,
+JSMSG_CATCH_WITHOUT_TRY = 119,
+JSMSG_FINALLY_WITHOUT_TRY = 120,
+JSMSG_LABEL_NOT_FOUND = 121,
+JSMSG_TOUGH_BREAK = 122,
+JSMSG_BAD_CONTINUE = 123,
+JSMSG_BAD_RETURN_OR_YIELD = 124,
+JSMSG_BAD_LABEL = 125,
+JSMSG_DUPLICATE_LABEL = 126,
+JSMSG_VAR_HIDES_ARG = 127,
+JSMSG_BAD_VAR_INIT = 128,
+JSMSG_BAD_LEFTSIDE_OF_ASS = 129,
+JSMSG_BAD_OPERAND = 130,
+JSMSG_BAD_PROP_ID = 131,
+JSMSG_RESERVED_ID = 132,
+JSMSG_SYNTAX_ERROR = 133,
+JSMSG_BAD_SHARP_VAR_DEF = 134,
+JSMSG_BAD_PROTOTYPE = 135,
+JSMSG_MISSING_EXPONENT = 136,
+JSMSG_OUT_OF_MEMORY = 137,
+JSMSG_UNTERMINATED_STRING = 138,
+JSMSG_TOO_MANY_PARENS = 139,
+JSMSG_UNTERMINATED_COMMENT = 140,
+JSMSG_UNTERMINATED_REGEXP = 141,
+JSMSG_BAD_CLONE_FUNOBJ_SCOPE = 142,
+JSMSG_SHARPVAR_TOO_BIG = 143,
+JSMSG_ILLEGAL_CHARACTER = 144,
+JSMSG_BAD_OCTAL = 145,
+JSMSG_BAD_INDIRECT_CALL = 146,
+JSMSG_UNCAUGHT_EXCEPTION = 147,
+JSMSG_INVALID_BACKREF = 148,
+JSMSG_BAD_BACKREF = 149,
+JSMSG_PRECISION_RANGE = 150,
+JSMSG_BAD_GETTER_OR_SETTER = 151,
+JSMSG_BAD_ARRAY_LENGTH = 152,
+JSMSG_CANT_DESCRIBE_PROPS = 153,
+JSMSG_BAD_APPLY_ARGS = 154,
+JSMSG_REDECLARED_VAR = 155,
+JSMSG_UNDECLARED_VAR = 156,
+JSMSG_ANON_NO_RETURN_VALUE = 157,
+JSMSG_DEPRECATED_USAGE = 158,
+JSMSG_BAD_URI = 159,
+JSMSG_GETTER_ONLY = 160,
+JSMSG_IDSTART_AFTER_NUMBER = 161,
+JSMSG_UNDEFINED_PROP = 162,
+JSMSG_USELESS_EXPR = 163,
+JSMSG_REDECLARED_PARAM = 164,
+JSMSG_NEWREGEXP_FLAGGED = 165,
+JSMSG_RESERVED_SLOT_RANGE = 166,
+JSMSG_CANT_DECODE_PRINCIPALS = 167,
+JSMSG_CANT_SEAL_OBJECT = 168,
+JSMSG_TOO_MANY_CATCH_VARS = 169,
+JSMSG_BAD_XML_MARKUP = 170,
+JSMSG_BAD_XML_CHARACTER = 171,
+JSMSG_BAD_DEFAULT_XML_NAMESPACE = 172,
+JSMSG_BAD_XML_NAME_SYNTAX = 173,
+JSMSG_BRACKET_AFTER_ATTR_EXPR = 174,
+JSMSG_NESTING_GENERATOR = 175,
+JSMSG_CURLY_IN_XML_EXPR = 176,
+JSMSG_BAD_XML_NAMESPACE = 177,
+JSMSG_BAD_XML_ATTR_NAME = 178,
+JSMSG_BAD_XML_NAME = 179,
+JSMSG_BAD_XML_CONVERSION = 180,
+JSMSG_BAD_XMLLIST_CONVERSION = 181,
+JSMSG_BAD_GENERATOR_SEND = 182,
+JSMSG_NO_ASSIGN_IN_XML_ATTR = 183,
+JSMSG_BAD_XML_ATTR_VALUE = 184,
+JSMSG_XML_TAG_NAME_MISMATCH = 185,
+JSMSG_BAD_XML_TAG_SYNTAX = 186,
+JSMSG_BAD_XML_LIST_SYNTAX = 187,
+JSMSG_INCOMPATIBLE_METHOD = 188,
+JSMSG_CANT_SET_XML_ATTRS = 189,
+JSMSG_END_OF_XML_SOURCE = 190,
+JSMSG_END_OF_XML_ENTITY = 191,
+JSMSG_BAD_XML_QNAME = 192,
+JSMSG_BAD_FOR_EACH_LOOP = 193,
+JSMSG_BAD_XMLLIST_PUT = 194,
+JSMSG_UNKNOWN_XML_ENTITY = 195,
+JSMSG_BAD_XML_NCR = 196,
+JSMSG_UNDEFINED_XML_NAME = 197,
+JSMSG_DUPLICATE_XML_ATTR = 198,
+JSMSG_TOO_MANY_LOCALS = 199,
+JSMSG_ARRAY_INIT_TOO_BIG = 200,
+JSMSG_REGEXP_TOO_COMPLEX = 201,
+JSMSG_BUFFER_TOO_SMALL = 202,
+JSMSG_BAD_SURROGATE_CHAR = 203,
+JSMSG_UTF8_CHAR_TOO_LARGE = 204,
+JSMSG_MALFORMED_UTF8_CHAR = 205,
+JSMSG_USER_DEFINED_ERROR = 206,
+JSMSG_WRONG_CONSTRUCTOR = 207,
+JSMSG_BAD_GENERATOR_RETURN = 208,
+JSMSG_BAD_ANON_GENERATOR_RETURN = 209,
+JSMSG_NAME_AFTER_FOR_PAREN = 210,
+JSMSG_IN_AFTER_FOR_NAME = 211,
+JSMSG_BAD_TRAP_RETURN_VALUE = 212,
+JSMSG_KEYWORD_NOT_NS = 213,
+JSMSG_BAD_GENERATOR_YIELD = 214,
+JSMSG_BAD_GENERATOR_SYNTAX = 215,
+JSMSG_ARRAY_COMP_LEFTSIDE = 216,
+JSMSG_NON_XML_FILTER = 217,
+JSMSG_EMPTY_ARRAY_REDUCE = 218,
+JSMSG_NON_LIST_XML_METHOD = 219,
+JSMSG_BAD_DELETE_OPERAND = 220,
+JSMSG_BAD_INCOP_OPERAND = 221,
+JSMSG_UNEXPECTED_TYPE = 222,
+JSMSG_LET_DECL_NOT_IN_BLOCK = 223,
+JSMSG_BAD_OBJECT_INIT = 224,
+JSMSG_CANT_SET_ARRAY_ATTRS = 225,
+JSMSG_EVAL_ARITY = 226,
+JSMSG_MISSING_FUN_ARG = 227,
+JSMSG_JSON_BAD_PARSE = 228,
+JSMSG_JSON_BAD_STRINGIFY = 229,
+JSMSG_XDR_CLOSURE_WRAPPER = 230,
+JSMSG_NOT_NONNULL_OBJECT = 231,
+JSMSG_DEPRECATED_OCTAL = 232,
+JSMSG_STRICT_CODE_WITH = 233,
+JSMSG_DUPLICATE_PROPERTY = 234,
+JSMSG_DEPRECATED_DELETE_OPERAND = 235,
+JSMSG_DEPRECATED_ASSIGN = 236,
+JSMSG_BAD_BINDING = 237,
+JSMSG_INVALID_DESCRIPTOR = 238,
+JSMSG_OBJECT_NOT_EXTENSIBLE = 239,
+JSMSG_CANT_REDEFINE_PROP = 240,
+JSMSG_CANT_APPEND_TO_ARRAY = 241,
+JSMSG_CANT_DEFINE_ARRAY_LENGTH = 242,
+JSMSG_CANT_DEFINE_ARRAY_INDEX = 243,
+JSMSG_TYPED_ARRAY_BAD_INDEX = 244,
+JSMSG_TYPED_ARRAY_NEGATIVE_ARG = 245,
+JSMSG_TYPED_ARRAY_BAD_ARGS = 246,
+JSMSG_CSP_BLOCKED_FUNCTION = 247,
+JSMSG_BAD_GET_SET_FIELD = 248,
+JSMSG_BAD_PROXY_FIX = 249,
+JSMSG_INVALID_EVAL_SCOPE_ARG = 250,
+JSMSG_ACCESSOR_WRONG_ARGS = 251,
+JSMSG_THROW_TYPE_ERROR = 252,
+JSMSG_BAD_TOISOSTRING_PROP = 253,
+JSMSG_BAD_PARSE_NODE = 254,
+JSMSG_NOT_EXPECTED_TYPE = 255,
+JSMSG_CALLER_IS_STRICT = 256,
+JSMSG_NEED_DEBUG_MODE = 257,
+JSMSG_STRICT_CODE_LET_EXPR_STMT = 258,
+JSMSG_CANT_CHANGE_EXTENSIBILITY = 259,
+JSMSG_SC_BAD_SERIALIZED_DATA = 260,
+JSMSG_SC_UNSUPPORTED_TYPE = 261,
+JSMSG_SC_RECURSION = 262,
+JSMSG_CANT_WRAP_XML_OBJECT = 263,
+JSMSG_BAD_CLONE_VERSION = 264,
+JSMSG_CANT_CLONE_OBJECT = 265,
+JSMSG_NON_NATIVE_SCOPE = 266,
+JSMSG_STRICT_FUNCTION_STATEMENT = 267,
+JSMSG_INVALID_FOR_IN_INIT = 268,
+JSMSG_CLEARED_SCOPE = 269,
+# 3000 "jscntxt.h" 2
+
+    JSErr_Limit
+} JSErrNum;
+
+extern __attribute__((visibility ("default"))) const JSErrorFormatString *
+js_GetErrorMessage(void *userRef, const char *locale, const uintN errorNumber);
+
+
+extern JSBool
+js_ReportErrorVA(JSContext *cx, uintN flags, const char *format, va_list ap);
+
+extern JSBool
+js_ReportErrorNumberVA(JSContext *cx, uintN flags, JSErrorCallback callback,
+                       void *userRef, const uintN errorNumber,
+                       JSBool charArgs, va_list ap);
+
+extern JSBool
+js_ExpandErrorArguments(JSContext *cx, JSErrorCallback callback,
+                        void *userRef, const uintN errorNumber,
+                        char **message, JSErrorReport *reportp,
+                        bool charArgs, va_list ap);
+
+
+extern void
+js_ReportOutOfMemory(JSContext *cx);
+
+
+
+
+void
+js_ReportOutOfScriptQuota(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+js_ReportOverRecursed(JSContext *cx);
+
+extern __attribute__((visibility ("default"))) void
+js_ReportAllocationOverflow(JSContext *cx);
+# 3052 "jscntxt.h"
+extern __attribute__((visibility ("default"))) void
+js_ReportErrorAgain(JSContext *cx, const char *message, JSErrorReport *report);
+
+extern void
+js_ReportIsNotDefined(JSContext *cx, const char *name);
+
+
+
+
+extern JSBool
+js_ReportIsNullOrUndefined(JSContext *cx, intN spindex, const js::Value &v,
+                           JSString *fallback);
+
+extern void
+js_ReportMissingArg(JSContext *cx, const js::Value &v, uintN arg);
+
+
+
+
+
+
+extern JSBool
+js_ReportValueErrorFlags(JSContext *cx, uintN flags, const uintN errorNumber,
+                         intN spindex, const js::Value &v, JSString *fallback,
+                         const char *arg1, const char *arg2);
+# 3090 "jscntxt.h"
+extern JSErrorFormatString js_ErrorFormatString[JSErr_Limit];
+# 3108 "jscntxt.h"
+__attribute__((always_inline)) inline void
+JSThreadData::triggerOperationCallback(JSRuntime *rt)
+{
+
+
+
+
+
+
+    if (interruptFlags)
+        return;
+    PR_AtomicSet((PRInt32 *)(&interruptFlags), (PRInt32)(1));
+
+
+
+    if (requestDepth != 0)
+        PR_AtomicIncrement((PRInt32 *)(&rt->interruptCounter));
+
+}
+
+
+
+
+
+extern JSBool
+js_InvokeOperationCallback(JSContext *cx);
+
+extern JSBool
+js_HandleExecutionInterrupt(JSContext *cx);
+
+namespace js {
+
+
+
+__attribute__((visibility ("default"))) void
+TriggerOperationCallback(JSContext *cx);
+
+void
+TriggerAllOperationCallbacks(JSRuntime *rt);
+
+}
+
+extern JSStackFrame *
+js_GetScriptedCaller(JSContext *cx, JSStackFrame *fp);
+
+extern jsbytecode*
+js_GetCurrentBytecodePC(JSContext* cx);
+
+extern
+
+# 3156 "jscntxt.h"
+       bool
+js_CurrentPCIsInImacro(JSContext *cx);
+
+namespace js {
+
+class RegExpStatics;
+
+extern __attribute__((visibility ("default"))) void
+LeaveTrace(JSContext *cx);
+
+}
+
+
+
+
+
+
+
+static inline JSStackFrame *
+js_GetTopStackFrame(JSContext *cx)
+{
+    js::LeaveTrace(cx);
+    return cx->maybefp();
+}
+
+static inline JSBool
+js_IsPropertyCacheDisabled(JSContext *cx)
+{
+    return cx->runtime->shapeGen >= js::SHAPE_OVERFLOW_BIT;
+}
+
+static inline uint32
+js_RegenerateShapeForGC(JSRuntime *rt)
+{
+    ((void) 0);
+    ((void) 0);
+
+
+
+
+
+
+    uint32 shape = rt->shapeGen;
+    shape = (shape + 1) | (shape & js::SHAPE_OVERFLOW_BIT);
+    rt->shapeGen = shape;
+    return shape;
+}
+
+namespace js {
+
+inline void *
+ContextAllocPolicy::malloc(size_t bytes)
+{
+    return cx->malloc(bytes);
+}
+
+inline void
+ContextAllocPolicy::free(void *p)
+{
+    cx->free(p);
+}
+
+inline void *
+ContextAllocPolicy::realloc(void *p, size_t bytes)
+{
+    return cx->realloc(p, bytes);
+}
+
+inline void
+ContextAllocPolicy::reportAllocOverflow() const
+{
+    js_ReportAllocationOverflow(cx);
+}
+
+template<class T>
+class AutoVectorRooter : protected AutoGCRooter
+{
+  public:
+    explicit AutoVectorRooter(JSContext *cx, ptrdiff_t tag
+                              )
+        : AutoGCRooter(cx, tag), vector(cx)
+    {
+        do { } while (0);
+    }
+
+    size_t length() const { return vector.length(); }
+
+    bool append(const T &v) { return vector.append(v); }
+
+    void popBack() { vector.popBack(); }
+
+    bool growBy(size_t inc) {
+        size_t oldLength = vector.length();
+        if (!vector.growByUninitialized(inc))
+            return false;
+        MakeRangeGCSafe(vector.begin() + oldLength, vector.end());
+        return true;
+    }
+
+    bool resize(size_t newLength) {
+        size_t oldLength = vector.length();
+        if (newLength <= oldLength) {
+            vector.shrinkBy(oldLength - newLength);
+            return true;
+        }
+        if (!vector.growByUninitialized(newLength - oldLength))
+            return false;
+        MakeRangeGCSafe(vector.begin() + oldLength, vector.end());
+        return true;
+    }
+
+    bool reserve(size_t newLength) {
+        return vector.reserve(newLength);
+    }
+
+    T &operator[](size_t i) { return vector[i]; }
+    const T &operator[](size_t i) const { return vector[i]; }
+
+    const T *begin() const { return vector.begin(); }
+    T *begin() { return vector.begin(); }
+
+    const T *end() const { return vector.end(); }
+    T *end() { return vector.end(); }
+
+    const T &back() const { return vector.back(); }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+
+  private:
+    Vector<T, 8> vector;
+   
+};
+
+class AutoValueVector : public AutoVectorRooter<Value>
+{
+  public:
+    explicit AutoValueVector(JSContext *cx
+                             )
+        : AutoVectorRooter<Value>(cx, VALVECTOR)
+    {
+        do { } while (0);
+    }
+
+    const jsval *jsval_begin() const { return Jsvalify(begin()); }
+    jsval *jsval_begin() { return Jsvalify(begin()); }
+
+    const jsval *jsval_end() const { return Jsvalify(end()); }
+    jsval *jsval_end() { return Jsvalify(end()); }
+
+   
+};
+
+class AutoIdVector : public AutoVectorRooter<jsid>
+{
+  public:
+    explicit AutoIdVector(JSContext *cx
+                          )
+        : AutoVectorRooter<jsid>(cx, IDVECTOR)
+    {
+        do { } while (0);
+    }
+
+   
+};
+
+class AutoShapeVector : public AutoVectorRooter<const Shape *>
+{
+  public:
+    explicit AutoShapeVector(JSContext *cx
+                             )
+        : AutoVectorRooter<const Shape *>(cx, SHAPEVECTOR)
+    {
+        do { } while (0);
+    }
+
+   
+};
+
+JSIdArray *
+NewIdArray(JSContext *cx, jsint length);
+
+}
+# 57 "jsxml.cpp" 2
+
+
+
+
+# 1 "jsnum.h" 1
+# 76 "jsnum.h"
+typedef union jsdpun {
+    struct {
+
+
+
+        uint32 hi, lo;
+
+    } s;
+    uint64 u64;
+    jsdouble d;
+} jsdpun;
+
+static inline int
+JSDOUBLE_IS_NaN(jsdouble d)
+{
+
+
+
+    return (sizeof (d) == sizeof (float) ? __isnanf (d) : sizeof (d) == sizeof (double) ? __isnan (d) : __isnanl (d));
+
+}
+
+static inline int
+JSDOUBLE_IS_FINITE(jsdouble d)
+{
+
+
+
+
+
+    return finite(d);
+
+}
+
+static inline int
+JSDOUBLE_IS_INFINITE(jsdouble d)
+{
+
+
+
+
+
+
+    return (sizeof (d) == sizeof (float) ? __isinff (d) : sizeof (d) == sizeof (double) ? __isinf (d) : __isinfl (d));
+
+}
+
+
+
+
+
+
+
+static inline
+
+# 129 "jsnum.h"
+              bool
+JSDOUBLE_IS_NEG(jsdouble d)
+{
+
+
+
+
+
+    return (sizeof (d) == sizeof (float) ? __signbitf (d) : sizeof (d) == sizeof (double) ? __signbit (d) : __signbitl (d));
+
+}
+
+static inline uint32
+JS_HASH_DOUBLE(jsdouble d)
+{
+    jsdpun u;
+    u.d = d;
+    return u.s.lo ^ u.s.hi;
+}
+# 158 "jsnum.h"
+extern jsdouble js_NaN;
+extern jsdouble js_PositiveInfinity;
+extern jsdouble js_NegativeInfinity;
+
+
+extern JSBool
+js_InitRuntimeNumberState(JSContext *cx);
+
+extern void
+js_FinishRuntimeNumberState(JSContext *cx);
+
+
+extern js::Class js_NumberClass;
+
+inline
+
+# 172 "jsnum.h"
+       bool
+JSObject::isNumber() const
+{
+    return getClass() == &js_NumberClass;
+}
+
+extern JSObject *
+js_InitNumberClass(JSContext *cx, JSObject *obj);
+
+
+
+
+extern const char js_Infinity_str[];
+extern const char js_NaN_str[];
+extern const char js_isNaN_str[];
+extern const char js_isFinite_str[];
+extern const char js_parseFloat_str[];
+extern const char js_parseInt_str[];
+
+extern JSString *
+js_IntToString(JSContext *cx, jsint i);
+
+
+
+
+
+
+extern JSString *
+js_NumberToString(JSContext *cx, jsdouble d);
+
+namespace js {
+
+
+
+
+
+extern bool
+NumberValueToStringBuffer(JSContext *cx, const Value &v, StringBuffer &sb);
+
+
+extern JSFlatString *
+NumberToString(JSContext *cx, jsdouble d);
+
+
+
+
+
+
+struct ToCStringBuf
+{
+
+
+
+
+
+    static const size_t sbufSize = 34;
+    char sbuf[sbufSize];
+    char *dbuf;
+
+    ToCStringBuf();
+    ~ToCStringBuf();
+};
+
+
+
+
+
+
+
+extern char *
+NumberToCString(JSContext *cx, ToCStringBuf *cbuf, jsdouble d, jsint base = 10);
+
+
+
+
+
+const double DOUBLE_INTEGRAL_PRECISION_LIMIT = uint64(1) << 53;
+# 262 "jsnum.h"
+extern
+
+# 262 "jsnum.h"
+       bool
+GetPrefixInteger(JSContext *cx, const jschar *start, const jschar *end, int base,
+                 const jschar **endp, jsdouble *dp);
+
+
+
+
+
+__attribute__((always_inline)) inline
+
+# 270 "jsnum.h"
+                 bool
+ValueToNumber(JSContext *cx, const js::Value &v, double *out)
+{
+    if (v.isNumber()) {
+        *out = v.toNumber();
+        return true;
+    }
+    extern bool ValueToNumberSlow(JSContext *, js::Value, double *);
+    return ValueToNumberSlow(cx, v, out);
+}
+
+
+__attribute__((always_inline)) inline
+
+# 282 "jsnum.h"
+                 bool
+ValueToNumber(JSContext *cx, js::Value *vp)
+{
+    if (vp->isNumber())
+        return true;
+    double d;
+    extern bool ValueToNumberSlow(JSContext *, js::Value, double *);
+    if (!ValueToNumberSlow(cx, *vp, &d))
+        return false;
+    vp->setNumber(d);
+    return true;
+}
+
+
+
+
+
+
+__attribute__((always_inline)) inline
+
+# 300 "jsnum.h"
+                 bool
+ValueToECMAInt32(JSContext *cx, const js::Value &v, int32_t *out)
+{
+    if (v.isInt32()) {
+        *out = v.toInt32();
+        return true;
+    }
+    extern bool ValueToECMAInt32Slow(JSContext *, const js::Value &, int32_t *);
+    return ValueToECMAInt32Slow(cx, v, out);
+}
+
+__attribute__((always_inline)) inline
+
+# 311 "jsnum.h"
+                 bool
+ValueToECMAUint32(JSContext *cx, const js::Value &v, uint32_t *out)
+{
+    if (v.isInt32()) {
+        *out = (uint32_t)v.toInt32();
+        return true;
+    }
+    extern bool ValueToECMAUint32Slow(JSContext *, const js::Value &, uint32_t *);
+    return ValueToECMAUint32Slow(cx, v, out);
+}
+
+
+
+
+
+
+__attribute__((always_inline)) inline
+
+# 327 "jsnum.h"
+                 bool
+ValueToInt32(JSContext *cx, const js::Value &v, int32_t *out)
+{
+    if (v.isInt32()) {
+        *out = v.toInt32();
+        return true;
+    }
+    extern bool ValueToInt32Slow(JSContext *, const js::Value &, int32_t *);
+    return ValueToInt32Slow(cx, v, out);
+}
+
+
+
+
+
+
+__attribute__((always_inline)) inline
+
+# 343 "jsnum.h"
+                 bool
+ValueToUint16(JSContext *cx, const js::Value &v, uint16_t *out)
+{
+    if (v.isInt32()) {
+        *out = (uint16_t)v.toInt32();
+        return true;
+    }
+    extern bool ValueToUint16Slow(JSContext *, const js::Value &, uint16_t *);
+    return ValueToUint16Slow(cx, v, out);
+}
+
+}
+# 369 "jsnum.h"
+static inline int32
+js_DoubleToECMAInt32(jsdouble d)
+{
+# 567 "jsnum.h"
+    int32 i;
+    jsdouble two32, two31;
+
+    if (!JSDOUBLE_IS_FINITE(d))
+        return 0;
+
+    i = (int32) d;
+    if ((jsdouble) i == d)
+        return i;
+
+    two32 = 4294967296.0;
+    two31 = 2147483648.0;
+    d = fmod(d, two32);
+    d = (d >= 0) ? floor(d) : ceil(d) + two32;
+    return (int32) (d >= two31 ? d - two32 : d);
+
+}
+
+uint32
+js_DoubleToECMAUint32(jsdouble d);
+
+
+
+
+
+static inline jsdouble
+js_DoubleToInteger(jsdouble d)
+{
+    if (d == 0)
+        return d;
+
+    if (!JSDOUBLE_IS_FINITE(d)) {
+        if (JSDOUBLE_IS_NaN(d))
+            return 0;
+        return d;
+    }
+
+    JSBool neg = (d < 0);
+    d = floor(neg ? -d : d);
+
+    return neg ? -d : d;
+}
+# 620 "jsnum.h"
+extern JSBool
+js_strtod(JSContext *cx, const jschar *s, const jschar *send,
+          const jschar **ep, jsdouble *dp);
+
+extern JSBool
+js_num_valueOf(JSContext *cx, uintN argc, js::Value *vp);
+
+namespace js {
+
+static __attribute__((always_inline)) inline
+
+# 629 "jsnum.h"
+                        bool
+ValueFitsInInt32(const Value &v, int32_t *pi)
+{
+    if (v.isInt32()) {
+        *pi = v.toInt32();
+        return true;
+    }
+    return v.isDouble() && JSDOUBLE_IS_INT32(v.toDouble(), pi);
+}
+
+template<typename T> struct NumberTraits { };
+template<> struct NumberTraits<int32> {
+  static __attribute__((always_inline)) inline int32 NaN() { return 0; }
+  static __attribute__((always_inline)) inline int32 toSelfType(int32 i) { return i; }
+  static __attribute__((always_inline)) inline int32 toSelfType(jsdouble d) { return js_DoubleToECMAUint32(d); }
+};
+template<> struct NumberTraits<jsdouble> {
+  static __attribute__((always_inline)) inline jsdouble NaN() { return js_NaN; }
+  static __attribute__((always_inline)) inline jsdouble toSelfType(int32 i) { return i; }
+  static __attribute__((always_inline)) inline jsdouble toSelfType(jsdouble d) { return d; }
+};
+
+template<typename T>
+static __attribute__((always_inline)) inline
+
+# 652 "jsnum.h"
+                        bool
+StringToNumberType(JSContext *cx, JSString *str, T *result)
+{
+    size_t length = str->length();
+    const jschar *chars = str->getChars(__null);
+    if (!chars)
+        return false;
+
+    if (length == 1) {
+        jschar c = chars[0];
+        if ('0' <= c && c <= '9') {
+            *result = NumberTraits<T>::toSelfType(T(c - '0'));
+            return true;
+        }
+        if (JS_ISSPACE(c)) {
+            *result = NumberTraits<T>::toSelfType(T(0));
+            return true;
+        }
+        *result = NumberTraits<T>::NaN();
+        return true;
+    }
+
+    const jschar *bp = chars;
+    const jschar *end = chars + length;
+    bp = js_SkipWhiteSpace(bp, end);
+
+
+    if (end - bp >= 2 && bp[0] == '0' && (bp[1] == 'x' || bp[1] == 'X')) {
+
+        const jschar *endptr;
+        double d;
+        if (!GetPrefixInteger(cx, bp + 2, end, 16, &endptr, &d) ||
+            js_SkipWhiteSpace(endptr, end) != end) {
+            *result = NumberTraits<T>::NaN();
+            return true;
+        }
+        *result = NumberTraits<T>::toSelfType(d);
+        return true;
+    }
+# 699 "jsnum.h"
+    const jschar *ep;
+    double d;
+    if (!js_strtod(cx, bp, end, &ep, &d) || js_SkipWhiteSpace(ep, end) != end) {
+        *result = NumberTraits<T>::NaN();
+        return true;
+    }
+    *result = NumberTraits<T>::toSelfType(d);
+    return true;
+}
+}
+# 62 "jsxml.cpp" 2
+
+
+# 1 "jsparse.h" 1
+# 46 "jsparse.h"
+# 1 "jsversion.h" 1
+# 47 "jsparse.h" 2
+
+
+
+# 1 "jsscan.h" 1
+# 45 "jsscan.h"
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 46 "jsscan.h" 2
+
+
+# 1 "jsversion.h" 1
+# 49 "jsscan.h" 2
+
+
+
+
+
+
+
+# 1 "jskeyword.tbl" 1
+# 45 "jskeyword.tbl"
+extern const char js_false_str[];
+extern const char js_true_str[];
+extern const char js_null_str[];
+
+
+extern const char js_break_str[];
+extern const char js_case_str[];
+extern const char js_catch_str[];
+extern const char js_continue_str[];
+extern const char js_debugger_str[];
+extern const char js_default_str[];
+extern const char js_delete_str[];
+extern const char js_do_str[];
+extern const char js_else_str[];
+extern const char js_finally_str[];
+extern const char js_for_str[];
+extern const char js_function_str[];
+extern const char js_if_str[];
+extern const char js_in_str[];
+extern const char js_instanceof_str[];
+extern const char js_new_str[];
+extern const char js_return_str[];
+extern const char js_switch_str[];
+extern const char js_this_str[];
+extern const char js_throw_str[];
+extern const char js_try_str[];
+extern const char js_typeof_str[];
+extern const char js_var_str[];
+extern const char js_void_str[];
+extern const char js_while_str[];
+extern const char js_with_str[];
+
+
+
+
+
+extern const char js_class_str[];
+extern const char js_enum_str[];
+extern const char js_export_str[];
+extern const char js_extends_str[];
+extern const char js_import_str[];
+extern const char js_super_str[];
+
+
+
+
+
+
+extern const char js_const_str[];
+
+
+
+
+extern const char js_let_str[];
+
+
+
+
+extern const char js_yield_str[];
+
+
+
+
+
+extern const char js_implements_str[];
+extern const char js_interface_str[];
+extern const char js_package_str[];
+extern const char js_private_str[];
+extern const char js_protected_str[];
+extern const char js_public_str[];
+extern const char js_static_str[];
+# 57 "jsscan.h" 2
+
+
+namespace js {
+
+enum TokenKind {
+    TOK_ERROR = -1,
+    TOK_EOF = 0,
+    TOK_EOL = 1,
+    TOK_SEMI = 2,
+    TOK_COMMA = 3,
+    TOK_ASSIGN = 4,
+    TOK_HOOK = 5, TOK_COLON = 6,
+    TOK_OR = 7,
+    TOK_AND = 8,
+    TOK_BITOR = 9,
+    TOK_BITXOR = 10,
+    TOK_BITAND = 11,
+    TOK_EQOP = 12,
+    TOK_RELOP = 13,
+    TOK_SHOP = 14,
+    TOK_PLUS = 15,
+    TOK_MINUS = 16,
+    TOK_STAR = 17, TOK_DIVOP = 18,
+    TOK_UNARYOP = 19,
+    TOK_INC = 20, TOK_DEC = 21,
+    TOK_DOT = 22,
+    TOK_LB = 23, TOK_RB = 24,
+    TOK_LC = 25, TOK_RC = 26,
+    TOK_LP = 27, TOK_RP = 28,
+    TOK_NAME = 29,
+    TOK_NUMBER = 30,
+    TOK_STRING = 31,
+    TOK_REGEXP = 32,
+    TOK_PRIMARY = 33,
+    TOK_FUNCTION = 34,
+    TOK_IF = 35,
+    TOK_ELSE = 36,
+    TOK_SWITCH = 37,
+    TOK_CASE = 38,
+    TOK_DEFAULT = 39,
+    TOK_WHILE = 40,
+    TOK_DO = 41,
+    TOK_FOR = 42,
+    TOK_BREAK = 43,
+    TOK_CONTINUE = 44,
+    TOK_IN = 45,
+    TOK_VAR = 46,
+    TOK_WITH = 47,
+    TOK_RETURN = 48,
+    TOK_NEW = 49,
+    TOK_DELETE = 50,
+    TOK_DEFSHARP = 51,
+    TOK_USESHARP = 52,
+    TOK_TRY = 53,
+    TOK_CATCH = 54,
+    TOK_FINALLY = 55,
+    TOK_THROW = 56,
+    TOK_INSTANCEOF = 57,
+    TOK_DEBUGGER = 58,
+    TOK_XMLSTAGO = 59,
+    TOK_XMLETAGO = 60,
+    TOK_XMLPTAGC = 61,
+    TOK_XMLTAGC = 62,
+    TOK_XMLNAME = 63,
+    TOK_XMLATTR = 64,
+    TOK_XMLSPACE = 65,
+    TOK_XMLTEXT = 66,
+    TOK_XMLCOMMENT = 67,
+    TOK_XMLCDATA = 68,
+    TOK_XMLPI = 69,
+    TOK_AT = 70,
+    TOK_DBLCOLON = 71,
+    TOK_ANYNAME = 72,
+    TOK_DBLDOT = 73,
+    TOK_FILTER = 74,
+    TOK_XMLELEM = 75,
+    TOK_XMLLIST = 76,
+    TOK_YIELD = 77,
+    TOK_ARRAYCOMP = 78,
+    TOK_ARRAYPUSH = 79,
+    TOK_LEXICALSCOPE = 80,
+    TOK_LET = 81,
+    TOK_SEQ = 82,
+
+    TOK_FORHEAD = 83,
+    TOK_ARGSBODY = 84,
+    TOK_UPVARS = 85,
+
+
+    TOK_RESERVED,
+    TOK_STRICT_RESERVED,
+    TOK_LIMIT
+};
+
+static inline
+
+# 151 "jsscan.h"
+              bool
+TokenKindIsXML(TokenKind tt)
+{
+    return tt == TOK_AT || tt == TOK_DBLCOLON || tt == TOK_ANYNAME;
+}
+
+static inline
+
+# 157 "jsscan.h"
+              bool
+TreeTypeIsXML(TokenKind tt)
+{
+    return tt == TOK_XMLCOMMENT || tt == TOK_XMLCDATA || tt == TOK_XMLPI ||
+           tt == TOK_XMLELEM || tt == TOK_XMLLIST;
+}
+
+static inline
+
+# 164 "jsscan.h"
+              bool
+TokenKindIsDecl(TokenKind tt)
+{
+
+    return tt == TOK_VAR || tt == TOK_LET;
+
+
+
+}
+
+struct TokenPtr {
+    uint32 index;
+    uint32 lineno;
+
+    bool operator==(const TokenPtr& bptr) {
+        return index == bptr.index && lineno == bptr.lineno;
+    }
+
+    bool operator!=(const TokenPtr& bptr) {
+        return index != bptr.index || lineno != bptr.lineno;
+    }
+
+    bool operator <(const TokenPtr& bptr) {
+        return lineno < bptr.lineno ||
+               (lineno == bptr.lineno && index < bptr.index);
+    }
+
+    bool operator <=(const TokenPtr& bptr) {
+        return lineno < bptr.lineno ||
+               (lineno == bptr.lineno && index <= bptr.index);
+    }
+
+    bool operator >(const TokenPtr& bptr) {
+        return !(*this <= bptr);
+    }
+
+    bool operator >=(const TokenPtr& bptr) {
+        return !(*this < bptr);
+    }
+};
+
+struct TokenPos {
+    TokenPtr begin;
+    TokenPtr end;
+
+    bool operator==(const TokenPos& bpos) {
+        return begin == bpos.begin && end == bpos.end;
+    }
+
+    bool operator!=(const TokenPos& bpos) {
+        return begin != bpos.begin || end != bpos.end;
+    }
+
+    bool operator <(const TokenPos& bpos) {
+        return begin < bpos.begin;
+    }
+
+    bool operator <=(const TokenPos& bpos) {
+        return begin <= bpos.begin;
+    }
+
+    bool operator >(const TokenPos& bpos) {
+        return !(*this <= bpos);
+    }
+
+    bool operator >=(const TokenPos& bpos) {
+        return !(*this < bpos);
+    }
+};
+
+struct Token {
+    TokenKind type;
+    TokenPos pos;
+    jschar *ptr;
+    union {
+        struct {
+            JSOp op;
+            JSAtom *atom;
+        } s;
+        uintN reflags;
+
+        struct {
+            JSAtom *atom2;
+            JSAtom *atom;
+        } p;
+        jsdouble dval;
+    } u;
+};
+
+enum TokenStreamFlags
+{
+    TSF_ERROR = 0x01,
+    TSF_EOF = 0x02,
+    TSF_NEWLINES = 0x04,
+    TSF_OPERAND = 0x08,
+    TSF_UNEXPECTED_EOF = 0x10,
+    TSF_KEYWORD_IS_NAME = 0x20,
+    TSF_STRICT_MODE_CODE = 0x40,
+    TSF_DIRTYLINE = 0x80,
+    TSF_OWNFILENAME = 0x100,
+    TSF_XMLTAGMODE = 0x200,
+    TSF_XMLTEXTMODE = 0x400,
+    TSF_XMLONLYMODE = 0x800,
+    TSF_OCTAL_CHAR = 0x1000,
+# 288 "jsscan.h"
+    TSF_IN_HTML_COMMENT = 0x2000
+};
+
+
+
+
+
+
+
+class TokenStream
+{
+    static const size_t ntokens = 4;
+
+    static const uintN ntokensMask = ntokens - 1;
+
+  public:
+    typedef Vector<jschar, 32> CharBuffer;
+# 316 "jsscan.h"
+    TokenStream(JSContext *);
+
+
+
+
+
+    bool init(const jschar *base, size_t length, const char *filename, uintN lineno,
+              JSVersion version);
+    void close();
+    ~TokenStream() {}
+
+
+    JSContext *getContext() const { return cx; }
+    bool onCurrentLine(const TokenPos &pos) const { return lineno == pos.end.lineno; }
+    const Token &currentToken() const { return tokens[cursor]; }
+    const CharBuffer &getTokenbuf() const { return tokenbuf; }
+    const char *getFilename() const { return filename; }
+    uintN getLineno() const { return lineno; }
+
+    JSVersion versionNumber() const { return VersionNumber(version); }
+    JSVersion versionWithFlags() const { return version; }
+    bool hasAnonFunFix() const { return VersionHasAnonFunFix(version); }
+    bool hasXML() const { return xml || VersionShouldParseXML(versionNumber()); }
+    void setXML(bool enabled) { xml = enabled; }
+
+
+    void setStrictMode(bool enabled = true) { setFlag(enabled, TSF_STRICT_MODE_CODE); }
+    void setXMLTagMode(bool enabled = true) { setFlag(enabled, TSF_XMLTAGMODE); }
+    void setXMLOnlyMode(bool enabled = true) { setFlag(enabled, TSF_XMLONLYMODE); }
+    void setUnexpectedEOF(bool enabled = true) { setFlag(enabled, TSF_UNEXPECTED_EOF); }
+    void setOctalCharacterEscape(bool enabled = true) { setFlag(enabled, TSF_OCTAL_CHAR); }
+
+    bool isStrictMode() { return !!(flags & TSF_STRICT_MODE_CODE); }
+    bool isXMLTagMode() { return !!(flags & TSF_XMLTAGMODE); }
+    bool isXMLOnlyMode() { return !!(flags & TSF_XMLONLYMODE); }
+    bool isUnexpectedEOF() { return !!(flags & TSF_UNEXPECTED_EOF); }
+    bool isEOF() const { return !!(flags & TSF_EOF); }
+    bool isError() const { return !!(flags & TSF_ERROR); }
+    bool hasOctalCharacterEscape() const { return flags & TSF_OCTAL_CHAR; }
+
+
+    bool reportCompileErrorNumberVA(JSParseNode *pn, uintN flags, uintN errorNumber, va_list ap);
+    void mungeCurrentToken(TokenKind newKind) { tokens[cursor].type = newKind; }
+    void mungeCurrentToken(JSOp newOp) { tokens[cursor].u.s.op = newOp; }
+    void mungeCurrentToken(TokenKind newKind, JSOp newOp) {
+        mungeCurrentToken(newKind);
+        mungeCurrentToken(newOp);
+    }
+
+  private:
+    static JSAtom *atomize(JSContext *cx, CharBuffer &cb);
+
+
+
+
+
+    class Flagger {
+        TokenStream * const parent;
+        uintN flags;
+      public:
+        Flagger(TokenStream *parent, uintN withFlags) : parent(parent), flags(withFlags) {
+            parent->flags |= flags;
+        }
+
+        ~Flagger() { parent->flags &= ~flags; }
+    };
+    friend class Flagger;
+
+    void setFlag(bool enabled, TokenStreamFlags flag) {
+        if (enabled)
+            flags |= flag;
+        else
+            flags &= ~flag;
+    }
+
+  public:
+
+
+
+
+    TokenKind getToken() {
+
+        while (lookahead != 0) {
+            ((void) 0);
+            lookahead--;
+            cursor = (cursor + 1) & ntokensMask;
+            TokenKind tt = currentToken().type;
+            ((void) 0);
+            if (tt != TOK_EOL)
+                return tt;
+        }
+
+
+        if (flags & TSF_ERROR)
+            return TOK_ERROR;
+
+        return getTokenInternal();
+    }
+
+
+    TokenKind getToken(uintN withFlags) {
+        Flagger flagger(this, withFlags);
+        return getToken();
+    }
+
+
+
+
+    void ungetToken() {
+        ((void) 0);
+        lookahead++;
+        cursor = (cursor - 1) & ntokensMask;
+    }
+
+    TokenKind peekToken(uintN withFlags = 0) {
+        Flagger flagger(this, withFlags);
+        if (lookahead != 0) {
+            ((void) 0);
+            return tokens[(cursor + lookahead) & ntokensMask].type;
+        }
+        TokenKind tt = getToken();
+        ungetToken();
+        return tt;
+    }
+
+    TokenKind peekTokenSameLine(uintN withFlags = 0) {
+        Flagger flagger(this, withFlags);
+        if (!onCurrentLine(currentToken().pos))
+            return TOK_EOL;
+        TokenKind tt = peekToken(TSF_NEWLINES);
+        return tt;
+    }
+
+
+
+
+    JSBool matchToken(TokenKind tt, uintN withFlags = 0) {
+        Flagger flagger(this, withFlags);
+        if (getToken() == tt)
+            return (JSIntn)1;
+        ungetToken();
+        return (JSIntn)0;
+    }
+
+  private:
+    typedef struct TokenBuf {
+        jschar *base;
+        jschar *limit;
+        jschar *ptr;
+    } TokenBuf;
+
+    TokenKind getTokenInternal();
+
+    int32 getChar();
+    int32 getCharIgnoreEOL();
+    void ungetChar(int32 c);
+    void ungetCharIgnoreEOL(int32 c);
+    Token *newToken(ptrdiff_t adjust);
+    bool peekUnicodeEscape(int32 *c);
+    bool matchUnicodeEscapeIdStart(int32 *c);
+    bool matchUnicodeEscapeIdent(int32 *c);
+    JSBool peekChars(intN n, jschar *cp);
+    JSBool getXMLEntity();
+    jschar *findEOL();
+
+    JSBool matchChar(int32 expect) {
+        int32 c = getChar();
+        if (c == expect)
+            return (JSIntn)1;
+        ungetChar(c);
+        return (JSIntn)0;
+    }
+
+    int32 peekChar() {
+        int32 c = getChar();
+        ungetChar(c);
+        return c;
+    }
+
+    void skipChars(intN n) {
+        while (--n >= 0)
+            getChar();
+    }
+
+    JSContext * const cx;
+    Token tokens[ntokens];
+    uintN cursor;
+    uintN lookahead;
+    uintN lineno;
+    uintN flags;
+    jschar *linebase;
+    jschar *prevLinebase;
+    TokenBuf userbuf;
+    const char *filename;
+    JSSourceHandler listener;
+    void *listenerData;
+    void *listenerTSData;
+    CharBuffer tokenbuf;
+    bool maybeEOL[256];
+    bool maybeStrSpecial[256];
+    JSVersion version;
+    bool xml;
+};
+
+}
+
+
+
+
+
+extern void
+js_CloseTokenStream(JSContext *cx, js::TokenStream *ts);
+
+extern __attribute__((visibility ("default"))) int
+js_fgets(char *buf, int size, FILE *file);
+
+namespace js {
+
+struct KeywordInfo {
+    const char *chars;
+    TokenKind tokentype;
+    JSOp op;
+    JSVersion version;
+};
+
+
+
+
+
+extern const KeywordInfo *
+FindKeyword(const jschar *s, size_t length);
+
+}
+
+
+
+
+
+typedef void (*JSMapKeywordFun)(const char *);
+
+
+
+
+
+extern JSBool
+js_IsIdentifier(JSLinearString *str);
+
+
+
+
+
+
+
+namespace js {
+
+
+
+
+
+
+
+bool
+# 577 "jsscan.h"
+ReportCompileErrorNumber(JSContext *cx, TokenStream *ts, JSParseNode *pn, uintN flags,
+                         uintN errorNumber, ...);
+# 597 "jsscan.h"
+
+bool
+# 598 "jsscan.h"
+ReportStrictModeError(JSContext *cx, TokenStream *ts, JSTreeContext *tc, JSParseNode *pn,
+                      uintN errorNumber, ...);
+
+}
+# 51 "jsparse.h" 2
+
+extern "C" {
+# 291 "jsparse.h"
+typedef enum JSParseNodeArity {
+    PN_NULLARY,
+    PN_UNARY,
+    PN_BINARY,
+    PN_TERNARY,
+    PN_FUNC,
+    PN_LIST,
+    PN_NAME,
+    PN_NAMESET
+} JSParseNodeArity;
+
+struct JSDefinition;
+
+namespace js {
+
+struct GlobalScope {
+    GlobalScope(JSContext *cx, JSObject *globalObj, JSCodeGenerator *cg)
+      : globalObj(globalObj), cg(cg), defs(ContextAllocPolicy(cx))
+    { }
+
+    struct GlobalDef {
+        JSAtom *atom;
+        JSFunctionBox *funbox;
+
+        uint32 knownSlot;
+
+        GlobalDef() { }
+        GlobalDef(uint32 knownSlot)
+          : atom(__null), knownSlot(knownSlot)
+        { }
+        GlobalDef(JSAtom *atom, JSFunctionBox *box) :
+          atom(atom), funbox(box)
+        { }
+    };
+
+    JSObject *globalObj;
+    JSCodeGenerator *cg;
+# 337 "jsparse.h"
+    Vector<GlobalDef, 16, ContextAllocPolicy> defs;
+    JSAtomList names;
+};
+
+}
+
+struct JSParseNode {
+    uint32 pn_type:16,
+                        pn_op:8,
+                        pn_arity:5,
+                        pn_parens:1,
+                        pn_used:1,
+                        pn_defn:1;
+
+
+
+
+    js::TokenPos pn_pos;
+    int32 pn_offset;
+    JSParseNode *pn_next;
+    JSParseNode *pn_link;
+
+
+    union {
+        struct {
+            JSParseNode *head;
+            JSParseNode **tail;
+            uint32 count;
+            uint32 xflags:12,
+                        blockid:20;
+        } list;
+        struct {
+            JSParseNode *kid1;
+            JSParseNode *kid2;
+            JSParseNode *kid3;
+        } ternary;
+        struct {
+            JSParseNode *left;
+            JSParseNode *right;
+            js::Value *pval;
+            uintN iflags;
+        } binary;
+        struct {
+            JSParseNode *kid;
+            jsint num;
+            JSBool hidden;
+
+
+        } unary;
+        struct {
+            union {
+                JSAtom *atom;
+                JSFunctionBox *funbox;
+                JSObjectBox *objbox;
+            };
+            union {
+                JSParseNode *expr;
+
+                JSDefinition *lexdef;
+            };
+            js::UpvarCookie cookie;
+
+
+            uint32 dflags:12,
+                        blockid:20;
+
+        } name;
+        struct {
+            JSAtomSet names;
+            JSParseNode *tree;
+        } nameset;
+        struct {
+            JSAtom *atom;
+            JSAtom *atom2;
+        } apair;
+        jsdouble dval;
+    } pn_u;
+# 445 "jsparse.h"
+protected:
+    void inline init(js::TokenKind type, JSOp op, JSParseNodeArity arity) {
+        pn_type = type;
+        pn_op = op;
+        pn_arity = arity;
+        pn_parens = false;
+        ((void) 0);
+        ((void) 0);
+        pn_next = pn_link = __null;
+    }
+
+    static JSParseNode *create(JSParseNodeArity arity, JSTreeContext *tc);
+
+public:
+    static JSParseNode *newBinaryOrAppend(js::TokenKind tt, JSOp op, JSParseNode *left,
+                                          JSParseNode *right, JSTreeContext *tc);
+
+
+
+
+
+
+
+    JSParseNode *expr() const {
+        ((void) 0);
+        ((void) 0);
+        return pn_u.name.expr;
+    }
+
+    JSDefinition *lexdef() const {
+        ((void) 0);
+        ((void) 0);
+        return pn_u.name.lexdef;
+    }
+
+    JSParseNode *maybeExpr() { return pn_used ? __null : expr(); }
+    JSDefinition *maybeLexDef() { return pn_used ? lexdef() : __null; }
+# 524 "jsparse.h"
+    uintN frameLevel() const {
+        ((void) 0);
+        return pn_u.name.cookie.level();
+    }
+
+    uintN frameSlot() const {
+        ((void) 0);
+        return pn_u.name.cookie.slot();
+    }
+
+    inline bool test(uintN flag) const;
+
+    bool isLet() const { return test(0x01); }
+    bool isConst() const { return test(0x02); }
+    bool isInitialized() const { return test(0x04); }
+    bool isBlockChild() const { return test(0x20); }
+    bool isPlaceholder() const { return test(0x80); }
+    bool isDeoptimized() const { return test(0x400); }
+    bool isAssigned() const { return test(0x08); }
+    bool isFunArg() const { return test(0x100); }
+    bool isClosed() const { return test(0x800); }
+# 558 "jsparse.h"
+    bool isTopLevel() const { return test(0x10); }
+
+
+    void setFunArg();
+
+    void become(JSParseNode *pn2);
+    void clear();
+
+
+    bool isLiteral() const {
+        return ((js::TokenKind)(this)->pn_type) == js::TOK_NUMBER ||
+               ((js::TokenKind)(this)->pn_type) == js::TOK_STRING ||
+               (((js::TokenKind)(this)->pn_type) == js::TOK_PRIMARY && ((JSOp)(this)->pn_op) != JSOP_THIS);
+    }
+# 588 "jsparse.h"
+    bool isStringExprStatement() const {
+        if (((js::TokenKind)(this)->pn_type) == js::TOK_SEMI) {
+            ((void) 0);
+            JSParseNode *kid = pn_u.unary.kid;
+            return kid && ((js::TokenKind)(kid)->pn_type) == js::TOK_STRING && !kid->pn_parens;
+        }
+        return false;
+    }
+
+
+
+
+
+
+    bool isEscapeFreeStringLiteral() const {
+        ((void) 0);
+        JSString *str = (pn_u.name.atom);
+
+
+
+
+
+
+        return (pn_pos.begin.lineno == pn_pos.end.lineno &&
+                pn_pos.begin.index + str->length() + 2 == pn_pos.end.index);
+    }
+
+
+    bool isDirectivePrologueMember() const { return pn_u.unary.hidden; }
+
+
+
+
+
+    bool isGeneratorExpr() const {
+        if (((js::TokenKind)(this)->pn_type) == js::TOK_LP) {
+            JSParseNode *callee = this->pn_u.list.head;
+            if (((js::TokenKind)(callee)->pn_type) == js::TOK_FUNCTION) {
+                JSParseNode *body = (((js::TokenKind)(callee->pn_u.name.expr)->pn_type) == js::TOK_UPVARS)
+                                    ? callee->pn_u.name.expr->pn_u.nameset.tree
+                                    : callee->pn_u.name.expr;
+                if (((js::TokenKind)(body)->pn_type) == js::TOK_LEXICALSCOPE)
+                    return true;
+            }
+        }
+        return false;
+    }
+
+    JSParseNode *generatorExpr() const {
+        ((void) 0);
+        JSParseNode *callee = this->pn_u.list.head;
+        JSParseNode *body = ((js::TokenKind)(callee->pn_u.name.expr)->pn_type) == js::TOK_UPVARS
+            ? callee->pn_u.name.expr->pn_u.nameset.tree
+            : callee->pn_u.name.expr;
+        ((void) 0);
+        return body->pn_u.name.expr;
+    }
+
+
+
+
+
+
+    JSParseNode *last() const {
+        ((void) 0);
+        ((void) 0);
+        return (JSParseNode *)((char *)pn_u.list.tail - __builtin_offsetof (JSParseNode, pn_next));
+    }
+
+    void makeEmpty() {
+        ((void) 0);
+        pn_u.list.head = __null;
+        pn_u.list.tail = &pn_u.list.head;
+        pn_u.list.count = 0;
+        pn_u.list.xflags = 0;
+        pn_u.name.blockid = 0;
+    }
+
+    void initList(JSParseNode *pn) {
+        ((void) 0);
+        pn_u.list.head = pn;
+        pn_u.list.tail = &pn->pn_next;
+        pn_u.list.count = 1;
+        pn_u.list.xflags = 0;
+        pn_u.name.blockid = 0;
+    }
+
+    void append(JSParseNode *pn) {
+        ((void) 0);
+        *pn_u.list.tail = pn;
+        pn_u.list.tail = &pn->pn_next;
+        pn_u.list.count++;
+    }
+
+    bool getConstantValue(JSContext *cx, bool strictChecks, js::Value *vp);
+    inline bool isConstant();
+};
+
+namespace js {
+
+struct NullaryNode : public JSParseNode {
+    static inline NullaryNode *create(JSTreeContext *tc) {
+        return (NullaryNode *)JSParseNode::create(PN_NULLARY, tc);
+    }
+};
+
+struct UnaryNode : public JSParseNode {
+    static inline UnaryNode *create(JSTreeContext *tc) {
+        return (UnaryNode *)JSParseNode::create(PN_UNARY, tc);
+    }
+};
+
+struct BinaryNode : public JSParseNode {
+    static inline BinaryNode *create(JSTreeContext *tc) {
+        return (BinaryNode *)JSParseNode::create(PN_BINARY, tc);
+    }
+};
+
+struct TernaryNode : public JSParseNode {
+    static inline TernaryNode *create(JSTreeContext *tc) {
+        return (TernaryNode *)JSParseNode::create(PN_TERNARY, tc);
+    }
+};
+
+struct ListNode : public JSParseNode {
+    static inline ListNode *create(JSTreeContext *tc) {
+        return (ListNode *)JSParseNode::create(PN_LIST, tc);
+    }
+};
+
+struct FunctionNode : public JSParseNode {
+    static inline FunctionNode *create(JSTreeContext *tc) {
+        return (FunctionNode *)JSParseNode::create(PN_FUNC, tc);
+    }
+};
+
+struct NameNode : public JSParseNode {
+    static NameNode *create(JSAtom *atom, JSTreeContext *tc);
+
+    void inline initCommon(JSTreeContext *tc);
+};
+
+struct NameSetNode : public JSParseNode {
+    static inline NameSetNode *create(JSTreeContext *tc) {
+        return (NameSetNode *)JSParseNode::create(PN_NAMESET, tc);
+    }
+};
+
+struct LexicalScopeNode : public JSParseNode {
+    static inline LexicalScopeNode *create(JSTreeContext *tc) {
+        return (LexicalScopeNode *)JSParseNode::create(PN_NAME, tc);
+    }
+};
+
+}
+# 857 "jsparse.h"
+struct JSDefinition : public JSParseNode
+{
+# 867 "jsparse.h"
+    JSDefinition *resolve() {
+        JSParseNode *pn = this;
+        while (!pn->pn_defn) {
+            if (pn->pn_type == js::TOK_ASSIGN) {
+                pn = pn->pn_u.binary.left;
+                continue;
+            }
+            pn = pn->lexdef();
+        }
+        return (JSDefinition *) pn;
+    }
+
+    bool isFreeVar() const {
+        ((void) 0);
+        return pn_u.name.cookie.isFree() || test(0x40);
+    }
+
+    bool isGlobal() const {
+        ((void) 0);
+        return test(0x40);
+    }
+
+
+
+
+
+    enum Kind { VAR, CONST, LET, FUNCTION, ARG, UNKNOWN };
+
+    bool isBindingForm() { return int(kind()) <= int(LET); }
+
+    static const char *kindString(Kind kind);
+
+    Kind kind() {
+        if (((js::TokenKind)(this)->pn_type) == js::TOK_FUNCTION)
+            return FUNCTION;
+        ((void) 0);
+        if (((JSOp)(this)->pn_op) == JSOP_NOP)
+            return UNKNOWN;
+        if (((JSOp)(this)->pn_op) == JSOP_GETARG)
+            return ARG;
+        if (isConst())
+            return CONST;
+        if (isLet())
+            return LET;
+        return VAR;
+    }
+};
+
+inline
+
+# 915 "jsparse.h"
+       bool
+JSParseNode::test(uintN flag) const
+{
+    ((void) 0);
+# 927 "jsparse.h"
+    return !!(pn_u.name.dflags & flag);
+}
+
+inline void
+JSParseNode::setFunArg()
+{
+# 943 "jsparse.h"
+    ((void) 0);
+    if (pn_used)
+        pn_u.name.lexdef->pn_u.name.dflags |= 0x100;
+    pn_u.name.dflags |= 0x100;
+}
+
+struct JSObjectBox {
+    JSObjectBox *traceLink;
+    JSObjectBox *emitLink;
+    JSObject *object;
+    JSObjectBox *parent;
+    uintN index;
+    bool isFunctionBox;
+};
+
+
+
+struct JSFunctionBox : public JSObjectBox
+{
+    JSParseNode *node;
+    JSFunctionBox *siblings;
+    JSFunctionBox *kids;
+    JSFunctionBox *parent;
+    JSParseNode *methods;
+
+
+
+
+    js::Bindings bindings;
+    uint32 queued:1,
+                        inLoop:1,
+                        level:14;
+    uint32 tcflags;
+
+    bool joinable() const;
+
+
+
+
+
+    bool inAnyDynamicScope() const;
+# 995 "jsparse.h"
+    bool shouldUnbrand(uintN methods, uintN slowMethods) const;
+};
+
+struct JSFunctionBoxQueue {
+    JSFunctionBox **vector;
+    size_t head, tail;
+    size_t lengthMask;
+
+    size_t count() { return head - tail; }
+    size_t length() { return lengthMask + 1; }
+
+    JSFunctionBoxQueue()
+      : vector(__null), head(0), tail(0), lengthMask(0) { }
+
+    bool init(uint32 count) {
+        lengthMask = (((JSUint32)1 << (JS_CeilingLog2(count))) - 1);
+        vector = js_array_new<JSFunctionBox*>(length());
+        return !!vector;
+    }
+
+    ~JSFunctionBoxQueue() { js_array_delete(vector); }
+
+    void push(JSFunctionBox *funbox) {
+        if (!funbox->queued) {
+            ((void) 0);
+            vector[head++ & lengthMask] = funbox;
+            funbox->queued = true;
+        }
+    }
+
+    JSFunctionBox *pull() {
+        if (tail == head)
+            return __null;
+        ((void) 0);
+        JSFunctionBox *funbox = vector[tail++ & lengthMask];
+        funbox->queued = false;
+        return funbox;
+    }
+};
+
+
+
+typedef struct BindData BindData;
+
+namespace js {
+
+struct Parser : private js::AutoGCRooter
+{
+    JSContext * const context;
+    JSAtomListElement *aleFreeList;
+    void *tempFreeList[6U];
+    TokenStream tokenStream;
+    void *tempPoolMark;
+    JSPrincipals *principals;
+    JSStackFrame *const callerFrame;
+    JSObject *const callerVarObj;
+    JSParseNode *nodeList;
+    uint32 functionCount;
+    JSObjectBox *traceListHead;
+    JSTreeContext *tc;
+
+
+    js::AutoKeepAtoms keepAtoms;
+
+    Parser(JSContext *cx, JSPrincipals *prin = __null, JSStackFrame *cfp = __null);
+    ~Parser();
+
+    friend void js::AutoGCRooter::trace(JSTracer *trc);
+    friend struct ::JSTreeContext;
+    friend struct Compiler;
+
+
+
+
+
+
+
+    bool init(const jschar *base, size_t length, const char *filename, uintN lineno,
+              JSVersion version);
+
+    void setPrincipals(JSPrincipals *prin);
+
+    const char *getFilename() const { return tokenStream.getFilename(); }
+    JSVersion versionWithFlags() const { return tokenStream.versionWithFlags(); }
+    JSVersion versionNumber() const { return tokenStream.versionNumber(); }
+    bool hasXML() const { return tokenStream.hasXML(); }
+    bool hasAnonFunFix() const { return tokenStream.hasAnonFunFix(); }
+
+
+
+
+    JSParseNode *parse(JSObject *chain);
+
+
+    JSParseNode *parseXMLText(JSObject *chain, bool allowList);
+
+
+
+
+
+    JSObjectBox *newObjectBox(JSObject *obj);
+
+    JSFunctionBox *newFunctionBox(JSObject *obj, JSParseNode *fn, JSTreeContext *tc);
+
+
+
+
+
+    JSFunction *newFunction(JSTreeContext *tc, JSAtom *atom, uintN lambda);
+
+
+
+
+
+
+    bool analyzeFunctions(JSTreeContext *tc);
+    void cleanFunctionList(JSFunctionBox **funbox);
+    bool markFunArgs(JSFunctionBox *funbox);
+    void setFunctionKinds(JSFunctionBox *funbox, uint32 *tcflags);
+
+    void trace(JSTracer *trc);
+
+
+
+
+    inline bool reportErrorNumber(JSParseNode *pn, uintN flags, uintN errorNumber, ...);
+
+private:
+# 1131 "jsparse.h"
+    JSParseNode *functionStmt();
+    JSParseNode *functionExpr();
+    JSParseNode *statements();
+    JSParseNode *statement();
+    JSParseNode *switchStatement();
+    JSParseNode *forStatement();
+    JSParseNode *tryStatement();
+    JSParseNode *withStatement();
+
+    JSParseNode *letStatement();
+
+    JSParseNode *expressionStatement();
+    JSParseNode *variables(bool inLetHead);
+    JSParseNode *expr();
+    JSParseNode *assignExpr();
+    JSParseNode *condExpr();
+    JSParseNode *orExpr();
+    JSParseNode *andExpr();
+    JSParseNode *bitOrExpr();
+    JSParseNode *bitXorExpr();
+    JSParseNode *bitAndExpr();
+    JSParseNode *eqExpr();
+    JSParseNode *relExpr();
+    JSParseNode *shiftExpr();
+    JSParseNode *addExpr();
+    JSParseNode *mulExpr();
+    JSParseNode *unaryExpr();
+    JSParseNode *memberExpr(JSBool allowCallSyntax);
+    JSParseNode *primaryExpr(js::TokenKind tt, JSBool afterDot);
+    JSParseNode *parenExpr(JSBool *genexp = __null);
+
+
+
+
+    bool recognizeDirectivePrologue(JSParseNode *pn, bool *isDirectivePrologueMember);
+
+    enum FunctionType { GETTER, SETTER, GENERAL };
+    bool functionArguments(JSTreeContext &funtc, JSFunctionBox *funbox, JSParseNode **list);
+    JSParseNode *functionBody();
+    JSParseNode *functionDef(JSAtom *name, FunctionType type, uintN lambda);
+
+    JSParseNode *condition();
+    JSParseNode *comprehensionTail(JSParseNode *kid, uintN blockid,
+                                   js::TokenKind type = js::TOK_SEMI, JSOp op = JSOP_NOP);
+    JSParseNode *generatorExpr(JSParseNode *kid);
+    JSBool argumentList(JSParseNode *listNode);
+    JSParseNode *bracketedExpr();
+    JSParseNode *letBlock(JSBool statement);
+    JSParseNode *returnOrYield(bool useAssignExpr);
+    JSParseNode *destructuringExpr(BindData *data, js::TokenKind tt);
+
+
+    JSParseNode *endBracketedExpr();
+
+    JSParseNode *propertySelector();
+    JSParseNode *qualifiedSuffix(JSParseNode *pn);
+    JSParseNode *qualifiedIdentifier();
+    JSParseNode *attributeIdentifier();
+    JSParseNode *xmlExpr(JSBool inTag);
+    JSParseNode *xmlAtomNode();
+    JSParseNode *xmlNameExpr();
+    JSParseNode *xmlTagContent(js::TokenKind tagtype, JSAtom **namep);
+    JSBool xmlElementContent(JSParseNode *pn);
+    JSParseNode *xmlElementOrList(JSBool allowList);
+    JSParseNode *xmlElementOrListRoot(JSBool allowList);
+
+};
+
+inline
+
+# 1199 "jsparse.h"
+       bool
+Parser::reportErrorNumber(JSParseNode *pn, uintN flags, uintN errorNumber, ...)
+{
+    va_list args;
+    __builtin_va_start(args,errorNumber);
+    bool result = tokenStream.reportCompileErrorNumberVA(pn, flags, errorNumber, args);
+    __builtin_va_end(args);
+    return result;
+}
+
+struct Compiler
+{
+    Parser parser;
+    GlobalScope *globalScope;
+
+    Compiler(JSContext *cx, JSPrincipals *prin = __null, JSStackFrame *cfp = __null);
+
+
+
+
+    inline
+   
+# 1220 "jsparse.h"
+   
+# 1219 "jsparse.h"
+           bool
+    init(const jschar *base, size_t length, const char *filename, uintN lineno, JSVersion version)
+    {
+        return parser.init(base, length, filename, lineno, version);
+    }
+
+    static
+   
+# 1226 "jsparse.h"
+   
+# 1225 "jsparse.h"
+           bool
+    compileFunctionBody(JSContext *cx, JSFunction *fun, JSPrincipals *principals,
+                        js::Bindings *bindings, const jschar *chars, size_t length,
+                        const char *filename, uintN lineno, JSVersion version);
+
+    static JSScript *
+    compileScript(JSContext *cx, JSObject *scopeChain, JSStackFrame *callerFrame,
+                  JSPrincipals *principals, uint32 tcflags,
+                  const jschar *chars, size_t length,
+                  const char *filename, uintN lineno, JSVersion version,
+                  JSString *source = __null, uintN staticLevel = 0);
+
+  private:
+    static bool defineGlobals(JSContext *cx, GlobalScope &globalScope, JSScript *script);
+};
+
+}
+
+
+
+
+
+
+extern JSBool
+js_FoldConstants(JSContext *cx, JSParseNode *pn, JSTreeContext *tc,
+                 bool inCond = false);
+
+}
+# 65 "jsxml.cpp" 2
+
+# 1 "jsscope.h" 1
+# 53 "jsscope.h"
+# 1 "jscompartment.h" 1
+# 50 "jscompartment.h"
+# 1 "jsxml.h" 1
+# 46 "jsxml.h"
+extern const char js_AnyName_str[];
+extern const char js_AttributeName_str[];
+extern const char js_isXMLName_str[];
+extern const char js_XMLList_str[];
+
+extern const char js_amp_entity_str[];
+extern const char js_gt_entity_str[];
+extern const char js_lt_entity_str[];
+extern const char js_quot_entity_str[];
+
+typedef JSBool
+(* JSIdentityOp)(const void *a, const void *b);
+
+struct JSXMLArray {
+    uint32 length;
+    uint32 capacity;
+    void **vector;
+    JSXMLArrayCursor *cursors;
+
+    void init() {
+        length = capacity = 0;
+        vector = __null;
+        cursors = __null;
+    }
+
+    void finish(JSContext *cx);
+
+    bool setCapacity(JSContext *cx, uint32 capacity);
+    void trim();
+};
+
+struct JSXMLArrayCursor
+{
+    JSXMLArray *array;
+    uint32 index;
+    JSXMLArrayCursor *next;
+    JSXMLArrayCursor **prevp;
+    void *root;
+
+    JSXMLArrayCursor(JSXMLArray *array)
+      : array(array), index(0), next(array->cursors), prevp(&array->cursors),
+        root(__null)
+    {
+        if (next)
+            next->prevp = &next;
+        array->cursors = this;
+    }
+
+    ~JSXMLArrayCursor() { disconnect(); }
+
+    void disconnect() {
+        if (!array)
+            return;
+        if (next)
+            next->prevp = prevp;
+        *prevp = next;
+        array = __null;
+    }
+
+    void *getNext() {
+        if (!array || index >= array->length)
+            return __null;
+        return root = array->vector[index++];
+    }
+
+    void *getCurrent() {
+        if (!array || index >= array->length)
+            return __null;
+        return root = array->vector[index];
+    }
+
+    void trace(JSTracer *trc);
+};
+# 128 "jsxml.h"
+typedef enum JSXMLClass {
+    JSXML_CLASS_LIST,
+    JSXML_CLASS_ELEMENT,
+    JSXML_CLASS_ATTRIBUTE,
+    JSXML_CLASS_PROCESSING_INSTRUCTION,
+    JSXML_CLASS_TEXT,
+    JSXML_CLASS_COMMENT,
+    JSXML_CLASS_LIMIT
+} JSXMLClass;
+# 148 "jsxml.h"
+typedef struct JSXMLListVar {
+    JSXMLArray kids;
+    JSXML *target;
+    JSObject *targetprop;
+} JSXMLListVar;
+
+typedef struct JSXMLElemVar {
+    JSXMLArray kids;
+    JSXMLArray namespaces;
+    JSXMLArray attrs;
+} JSXMLElemVar;
+# 176 "jsxml.h"
+struct JSXML : js::gc::Cell {
+
+
+
+
+    JSObject *object;
+    void *domnode;
+    JSXML *parent;
+    JSObject *name;
+    uint32 xml_class;
+    uint32 xml_flags;
+    union {
+        JSXMLListVar list;
+        JSXMLElemVar elem;
+        JSString *value;
+    } u;
+
+    void finalize(JSContext *cx) {
+        if ((((this)->xml_class) < JSXML_CLASS_ATTRIBUTE)) {
+            u.list.kids.finish(cx);
+            if (xml_class == JSXML_CLASS_ELEMENT) {
+                u.elem.namespaces.finish(cx);
+                u.elem.attrs.finish(cx);
+            }
+        }
+
+
+
+    }
+};
+
+
+
+
+extern JSXML *
+js_NewXML(JSContext *cx, JSXMLClass xml_class);
+
+extern void
+js_TraceXML(JSTracer *trc, JSXML *xml);
+
+extern JSObject *
+js_NewXMLObject(JSContext *cx, JSXMLClass xml_class);
+
+extern JSObject *
+js_GetXMLObject(JSContext *cx, JSXML *xml);
+
+extern __attribute__((visibility ("default"))) js::Class js_XMLClass;
+extern __attribute__((visibility ("default"))) js::Class js_NamespaceClass;
+extern __attribute__((visibility ("default"))) js::Class js_QNameClass;
+extern __attribute__((visibility ("default"))) js::Class js_AttributeNameClass;
+extern __attribute__((visibility ("default"))) js::Class js_AnyNameClass;
+extern js::Class js_XMLFilterClass;
+
+
+
+
+inline
+
+# 232 "jsxml.h"
+       bool
+JSObject::isXML() const
+{
+    return getClass() == &js_XMLClass;
+}
+
+inline
+
+# 238 "jsxml.h"
+       bool
+JSObject::isXMLId() const
+{
+    js::Class *clasp = getClass();
+    return clasp == &js_QNameClass ||
+           clasp == &js_AttributeNameClass ||
+           clasp == &js_AnyNameClass;
+}
+
+
+
+inline
+
+# 249 "jsxml.h"
+       bool
+JSObject::isNamespace() const
+{
+    return getClass() == &js_NamespaceClass;
+}
+
+inline
+
+# 255 "jsxml.h"
+       bool
+JSObject::isQName() const
+{
+    js::Class* clasp = getClass();
+    return clasp == &js_QNameClass ||
+           clasp == &js_AttributeNameClass ||
+           clasp == &js_AnyNameClass;
+}
+
+static inline
+
+# 264 "jsxml.h"
+              bool
+IsXML(const js::Value &v)
+{
+    return v.isObject() && v.toObject().isXML();
+}
+
+extern JSObject *
+js_InitNamespaceClass(JSContext *cx, JSObject *obj);
+
+extern JSObject *
+js_InitQNameClass(JSContext *cx, JSObject *obj);
+
+extern JSObject *
+js_InitXMLClass(JSContext *cx, JSObject *obj);
+
+extern JSObject *
+js_InitXMLClasses(JSContext *cx, JSObject *obj);
+
+extern JSBool
+js_GetFunctionNamespace(JSContext *cx, js::Value *vp);
+
+
+
+
+
+JSBool
+js_IsFunctionQName(JSContext *cx, JSObject *obj, jsid *funidp);
+
+extern JSBool
+js_GetDefaultXMLNamespace(JSContext *cx, jsval *vp);
+
+extern JSBool
+js_SetDefaultXMLNamespace(JSContext *cx, const js::Value &v);
+
+
+
+
+
+
+extern JSBool
+js_IsXMLName(JSContext *cx, jsval v);
+
+extern JSBool
+js_ToAttributeName(JSContext *cx, js::Value *vp);
+
+extern JSFlatString *
+js_EscapeAttributeValue(JSContext *cx, JSString *str, JSBool quote);
+
+extern JSString *
+js_AddAttributePart(JSContext *cx, JSBool isName, JSString *str,
+                    JSString *str2);
+
+extern JSFlatString *
+js_EscapeElementValue(JSContext *cx, JSString *str);
+
+extern JSString *
+js_ValueToXMLString(JSContext *cx, const js::Value &v);
+
+extern JSObject *
+js_ConstructXMLQNameObject(JSContext *cx, const js::Value & nsval,
+                           const js::Value & lnval);
+
+extern JSBool
+js_GetAnyName(JSContext *cx, jsid *idp);
+
+
+
+
+extern JSBool
+js_FindXMLProperty(JSContext *cx, const js::Value &nameval, JSObject **objp, jsid *idp);
+
+extern JSBool
+js_GetXMLMethod(JSContext *cx, JSObject *obj, jsid id, js::Value *vp);
+
+extern JSBool
+js_GetXMLDescendants(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
+
+extern JSBool
+js_DeleteXMLListElements(JSContext *cx, JSObject *listobj);
+
+extern JSBool
+js_StepXMLListFilter(JSContext *cx, JSBool initialized);
+
+extern JSObject *
+js_ValueToXMLObject(JSContext *cx, const js::Value &v);
+
+extern JSObject *
+js_ValueToXMLListObject(JSContext *cx, const js::Value &v);
+
+extern JSObject *
+js_NewXMLSpecialObject(JSContext *cx, JSXMLClass xml_class, JSString *name,
+                       JSString *value);
+
+extern JSString *
+js_MakeXMLCDATAString(JSContext *cx, JSString *str);
+
+extern JSString *
+js_MakeXMLCommentString(JSContext *cx, JSString *str);
+
+extern JSString *
+js_MakeXMLPIString(JSContext *cx, JSString *name, JSString *str);
+
+
+extern JSBool
+js_TestXMLEquality(JSContext *cx, const js::Value &v1, const js::Value &v2,
+                   JSBool *bp);
+
+extern JSBool
+js_ConcatenateXML(JSContext *cx, JSObject *obj1, JSObject *obj2, js::Value *vp);
+# 51 "jscompartment.h" 2
+
+
+
+
+
+
+namespace JSC {
+
+class ExecutableAllocator;
+
+}
+
+namespace js {
+
+
+typedef HashMap<jsbytecode*,
+                size_t,
+                DefaultHasher<jsbytecode*>,
+                SystemAllocPolicy> RecordAttemptMap;
+
+
+typedef HashMap<jsbytecode*,
+                LoopProfile*,
+                DefaultHasher<jsbytecode*>,
+                SystemAllocPolicy> LoopProfileMap;
+
+class Oracle;
+
+typedef HashSet<JSScript *,
+                DefaultHasher<JSScript *>,
+                SystemAllocPolicy> TracedScriptSet;
+
+typedef HashMap<JSFunction *,
+                JSString *,
+                DefaultHasher<JSFunction *>,
+                SystemAllocPolicy> ToSourceCache;
+
+struct TraceMonitor;
+
+
+struct TracerState
+{
+    JSContext* cx;
+    TraceMonitor* traceMonitor;
+    double* stackBase;
+    double* sp;
+    double* eos;
+    FrameInfo** callstackBase;
+    void* sor;
+    FrameInfo** rp;
+    void* eor;
+    VMSideExit* lastTreeExitGuard;
+    VMSideExit* lastTreeCallGuard;
+
+    void* rpAtLastTreeCall;
+    VMSideExit* outermostTreeExitGuard;
+    TreeFragment* outermostTree;
+    uintN* inlineCallCountp;
+    VMSideExit** innermostNestedGuardp;
+    VMSideExit* innermost;
+    uint64 startTime;
+    TracerState* prev;
+
+
+
+
+    uint32 builtinStatus;
+
+
+    double* deepBailSp;
+
+
+    uintN nativeVpLen;
+    js::Value* nativeVp;
+
+    TracerState(JSContext *cx, TraceMonitor *tm, TreeFragment *ti,
+                uintN &inlineCallCountp, VMSideExit** innermostNestedGuardp);
+    ~TracerState();
+};
+
+
+
+
+
+
+
+struct TraceNativeStorage
+{
+    double stack_global_buf[MAX_NATIVE_STACK_SLOTS + GLOBAL_SLOTS_BUFFER_SIZE];
+    FrameInfo *callstack_buf[MAX_CALL_STACK_ENTRIES];
+
+    double *stack() { return stack_global_buf; }
+    double *global() { return stack_global_buf + MAX_NATIVE_STACK_SLOTS; }
+    FrameInfo **callstack() { return callstack_buf; }
+};
+
+
+struct GlobalState {
+    JSObject* globalObj;
+    uint32 globalShape;
+    SlotList* globalSlots;
+};
+
+
+
+
+
+
+struct TraceMonitor {
+# 170 "jscompartment.h"
+    JSContext *tracecx;
+
+
+
+
+
+
+    js::TracerState *tracerState;
+    js::VMSideExit *bailExit;
+
+
+    unsigned iterationCounter;
+
+
+
+
+
+
+    TraceNativeStorage *storage;
+# 214 "jscompartment.h"
+    VMAllocator* dataAlloc;
+    VMAllocator* traceAlloc;
+    VMAllocator* tempAlloc;
+    nanojit::CodeAlloc* codeAlloc;
+    nanojit::Assembler* assembler;
+    FrameInfoCache* frameCache;
+
+
+    uintN flushEpoch;
+
+    Oracle* oracle;
+    TraceRecorder* recorder;
+
+
+    LoopProfile* profile;
+
+    GlobalState globalStates[MONITOR_N_GLOBAL_STATES];
+    TreeFragment *vmfragments[FRAGMENT_TABLE_SIZE];
+    RecordAttemptMap* recordAttempts;
+
+
+    LoopProfileMap* loopProfiles;
+
+
+
+
+
+    uint32 maxCodeCacheBytes;
+
+
+
+
+
+
+    JSBool needFlush;
+
+
+
+
+    TypeMap* cachedTempTypeMap;
+
+
+    TracedScriptSet tracedScripts;
+# 270 "jscompartment.h"
+    bool ontrace() const {
+        return !!tracecx;
+    }
+
+
+    void flush();
+
+
+    void sweep(JSContext *cx);
+
+
+    void mark(JSTracer *trc);
+
+    bool outOfMemory() const;
+};
+
+namespace mjit {
+class JaegerCompartment;
+}
+}
+# 308 "jscompartment.h"
+namespace js {
+
+class NativeIterCache {
+    static const size_t SIZE = size_t(1) << 8;
+
+
+    JSObject *data[SIZE];
+
+    static size_t getIndex(uint32 key) {
+        return size_t(key) % SIZE;
+    }
+
+  public:
+
+    JSObject *last;
+
+    NativeIterCache()
+      : last(__null) {
+        PodArrayZero(data);
+    }
+
+    void purge() {
+        PodArrayZero(data);
+        last = __null;
+    }
+
+    JSObject *get(uint32 key) const {
+        return data[getIndex(key)];
+    }
+
+    void set(uint32 key, JSObject *iterobj) {
+        data[getIndex(key)] = iterobj;
+    }
+};
+# 350 "jscompartment.h"
+class DtoaCache {
+    double d;
+    jsint base;
+    JSString *s;
+  public:
+    DtoaCache() : s(__null) {}
+    void purge() { s = __null; }
+
+    JSString *lookup(jsint base, double d) {
+        return this->s && base == this->base && d == this->d ? this->s : __null;
+    }
+
+    void cache(jsint base, double d, JSString *s) {
+        this->base = base;
+        this->d = d;
+        this->s = s;
+    }
+
+};
+
+}
+
+struct __attribute__((visibility ("default"))) JSCompartment {
+    JSRuntime *rt;
+    JSPrincipals *principals;
+    js::gc::Chunk *chunk;
+
+    js::gc::ArenaList arenas[js::gc::FINALIZE_LIMIT];
+    js::gc::FreeLists freeLists;
+
+    size_t gcBytes;
+    size_t gcTriggerBytes;
+    size_t gcLastBytes;
+# 394 "jscompartment.h"
+    JSScript *scriptsToGC[((JSUint32)1 << (6))];
+
+
+
+
+
+    void *data;
+    bool active;
+    js::WrapperMap crossCompartmentWrappers;
+# 411 "jscompartment.h"
+    js::PropertyTree propertyTree;
+# 425 "jscompartment.h"
+    js::EmptyShape *emptyArgumentsShape;
+    js::EmptyShape *emptyBlockShape;
+    js::EmptyShape *emptyCallShape;
+    js::EmptyShape *emptyDeclEnvShape;
+    js::EmptyShape *emptyEnumeratorShape;
+    js::EmptyShape *emptyWithShape;
+
+    typedef js::HashSet<js::EmptyShape *,
+                        js::DefaultHasher<js::EmptyShape *>,
+                        js::SystemAllocPolicy> EmptyShapeSet;
+
+    EmptyShapeSet emptyShapes;
+
+    bool debugMode;
+    JSCList scripts;
+
+    JSC::ExecutableAllocator *regExpAllocator;
+
+    js::NativeIterCache nativeIterCache;
+
+    js::ToSourceCache toSourceCache;
+
+    JSCompartment(JSRuntime *rt);
+    ~JSCompartment();
+
+    bool init();
+
+
+    void markCrossCompartment(JSTracer *trc);
+
+
+    void mark(JSTracer *trc);
+
+    bool wrap(JSContext *cx, js::Value *vp);
+    bool wrap(JSContext *cx, JSString **strp);
+    bool wrap(JSContext *cx, JSObject **objp);
+    bool wrapId(JSContext *cx, jsid *idp);
+    bool wrap(JSContext *cx, js::PropertyOp *op);
+    bool wrap(JSContext *cx, js::StrictPropertyOp *op);
+    bool wrap(JSContext *cx, js::PropertyDescriptor *desc);
+    bool wrap(JSContext *cx, js::AutoIdVector &props);
+
+    void sweep(JSContext *cx, uint32 releaseInterval);
+    void purge(JSContext *cx);
+    void finishArenaLists();
+    void finalizeObjectArenaLists(JSContext *cx);
+    void finalizeStringArenaLists(JSContext *cx);
+    bool arenaListsAreEmpty();
+
+    void setGCLastBytes(size_t lastBytes);
+
+    js::DtoaCache dtoaCache;
+
+  private:
+    js::MathCache *mathCache;
+
+    js::MathCache *allocMathCache(JSContext *cx);
+
+    bool marked;
+
+    typedef js::HashMap<jsbytecode*,
+                        size_t,
+                        js::DefaultHasher<jsbytecode*>,
+                        js::SystemAllocPolicy> BackEdgeMap;
+
+    BackEdgeMap backEdgeTable;
+
+    JSCompartment *thisForCtor() { return this; }
+  public:
+    js::MathCache *getMathCache(JSContext *cx) {
+        return mathCache ? mathCache : allocMathCache(cx);
+    }
+
+    bool isMarked() { return marked; }
+    void clearMark() { marked = false; }
+
+    size_t backEdgeCount(jsbytecode *pc) const;
+    size_t incBackEdgeCount(jsbytecode *pc);
+};
+# 519 "jscompartment.h"
+static inline
+
+# 519 "jscompartment.h"
+              bool
+JS_ON_TRACE(JSContext *cx)
+{
+
+
+
+
+    return false;
+}
+# 549 "jscompartment.h"
+static inline js::TraceRecorder *
+TRACE_RECORDER(JSContext *cx)
+{
+
+
+
+
+    return __null;
+}
+
+static inline js::LoopProfile *
+TRACE_PROFILER(JSContext *cx)
+{
+
+
+
+
+    return __null;
+}
+
+namespace js {
+static inline MathCache *
+GetMathCache(JSContext *cx)
+{
+    return cx->compartment->getMathCache(cx);
+}
+}
+# 587 "jscompartment.h"
+namespace js {
+
+class PreserveCompartment {
+  protected:
+    JSContext *cx;
+  private:
+    JSCompartment *oldCompartment;
+   
+  public:
+     PreserveCompartment(JSContext *cx ) : cx(cx) {
+        do { } while (0);
+        oldCompartment = cx->compartment;
+    }
+
+    ~PreserveCompartment() {
+        cx->compartment = oldCompartment;
+    }
+};
+
+class SwitchToCompartment : public PreserveCompartment {
+  public:
+    SwitchToCompartment(JSContext *cx, JSCompartment *newCompartment) : PreserveCompartment(cx) {
+        cx->compartment = newCompartment;
+    }
+
+    SwitchToCompartment(JSContext *cx, JSObject *target) : PreserveCompartment(cx) {
+        cx->compartment = target->getCompartment();
+    }
+};
+
+class AssertCompartmentUnchanged {
+  protected:
+    JSContext * const cx;
+    JSCompartment * const oldCompartment;
+   
+  public:
+     AssertCompartmentUnchanged(JSContext *cx )
+     : cx(cx), oldCompartment(cx->compartment) {
+        do { } while (0);
+    }
+
+    ~AssertCompartmentUnchanged() {
+        ((void) 0);
+    }
+};
+
+}
+# 54 "jsscope.h" 2
+
+
+
+
+
+# 1 "jsstrinlines.h" 1
+# 44 "jsstrinlines.h"
+# 1 "jscntxtinlines.h" 1
+# 49 "jscntxtinlines.h"
+# 1 "jsregexp.h" 1
+# 45 "jsregexp.h"
+# 1 "/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include/stddef.h" 1 3 4
+# 46 "jsregexp.h" 2
+# 55 "jsregexp.h"
+extern js::Class js_RegExpClass;
+
+namespace js {
+
+class RegExpStatics
+{
+    typedef Vector<int, 20, SystemAllocPolicy> MatchPairs;
+    MatchPairs matchPairs;
+
+    JSLinearString *matchPairsInput;
+
+    JSString *pendingInput;
+    uintN flags;
+    RegExpStatics *bufferLink;
+    bool copied;
+
+    bool createDependent(JSContext *cx, size_t start, size_t end, Value *out) const;
+
+    void copyTo(RegExpStatics &dst) {
+        dst.matchPairs.clear();
+
+        ((void) (dst.matchPairs.append(matchPairs)));
+        dst.matchPairsInput = matchPairsInput;
+        dst.pendingInput = pendingInput;
+        dst.flags = flags;
+    }
+
+    void aboutToWrite() {
+        if (bufferLink && !bufferLink->copied) {
+            copyTo(*bufferLink);
+            bufferLink->copied = true;
+        }
+    }
+
+    bool save(JSContext *cx, RegExpStatics *buffer) {
+        ((void) 0);
+        buffer->bufferLink = bufferLink;
+        bufferLink = buffer;
+        if (!buffer->matchPairs.reserve(matchPairs.length())) {
+            js_ReportOutOfMemory(cx);
+            return false;
+        }
+        return true;
+    }
+
+    void restore() {
+        if (bufferLink->copied)
+            bufferLink->copyTo(*this);
+        bufferLink = bufferLink->bufferLink;
+    }
+
+    void checkInvariants() {
+# 130 "jsregexp.h"
+    }
+
+
+
+
+
+    void checkParenNum(size_t pairNum) const {
+        ((void) 0);
+        ((void) 0);
+    }
+
+    bool pairIsPresent(size_t pairNum) const {
+        return get(pairNum, 0) >= 0;
+    }
+
+
+    size_t getParenLength(size_t pairNum) const {
+        checkParenNum(pairNum);
+        ((void) 0);
+        return get(pairNum, 1) - get(pairNum, 0);
+    }
+
+    int get(size_t pairNum, bool which) const {
+        ((void) 0);
+        return matchPairs[2 * pairNum + which];
+    }
+
+
+
+
+
+
+    bool makeMatch(JSContext *cx, size_t checkValidIndex, size_t pairNum, Value *out) const;
+
+    static const uintN allFlags = 0x01 | 0x02 | 0x08 | 0x04;
+
+    struct InitBuffer {};
+    explicit RegExpStatics(InitBuffer) : bufferLink(__null), copied(false) {}
+
+    friend class PreserveRegExpStatics;
+
+  public:
+    RegExpStatics() : bufferLink(__null), copied(false) { clear(); }
+
+    static RegExpStatics *extractFrom(JSObject *global);
+
+
+
+    bool updateFromMatch(JSContext *cx, JSLinearString *input, int *buf, size_t matchItemCount) {
+        aboutToWrite();
+        pendingInput = input;
+
+        if (!matchPairs.resizeUninitialized(matchItemCount)) {
+            js_ReportOutOfMemory(cx);
+            return false;
+        }
+
+        for (size_t i = 0; i < matchItemCount; ++i)
+            matchPairs[i] = buf[i];
+
+        matchPairsInput = input;
+        return true;
+    }
+
+    void setMultiline(bool enabled) {
+        aboutToWrite();
+        if (enabled)
+            flags = flags | 0x04;
+        else
+            flags = flags & ~0x04;
+    }
+
+    void clear() {
+        aboutToWrite();
+        flags = 0;
+        pendingInput = __null;
+        matchPairsInput = __null;
+        matchPairs.clear();
+    }
+
+
+    void reset(JSString *newInput, bool newMultiline) {
+        aboutToWrite();
+        clear();
+        pendingInput = newInput;
+        setMultiline(newMultiline);
+        checkInvariants();
+    }
+
+    void setPendingInput(JSString *newInput) {
+        aboutToWrite();
+        pendingInput = newInput;
+    }
+# 233 "jsregexp.h"
+  private:
+    size_t pairCount() const {
+        ((void) 0);
+        return matchPairs.length() / 2;
+    }
+
+  public:
+    size_t parenCount() const {
+        size_t pc = pairCount();
+        ((void) 0);
+        return pc - 1;
+    }
+
+    JSString *getPendingInput() const { return pendingInput; }
+    uintN getFlags() const { return flags; }
+    bool multiline() const { return flags & 0x04; }
+
+    size_t matchStart() const {
+        int start = get(0, 0);
+        ((void) 0);
+        return size_t(start);
+    }
+
+    size_t matchLimit() const {
+        int limit = get(0, 1);
+        ((void) 0);
+        return size_t(limit);
+    }
+
+
+    bool matched() const {
+        ((void) 0);
+        ((void) 0);
+        return get(0, 1) - get(0, 0) > 0;
+    }
+
+    void mark(JSTracer *trc) const {
+        if (pendingInput)
+            do { JSString *str_ = (pendingInput); ((void) 0); do { do { } while (0); JS_CallTracer(((trc)), (str_), (1)); } while (0); } while (0);
+        if (matchPairsInput)
+            do { JSString *str_ = (matchPairsInput); ((void) 0); do { do { } while (0); JS_CallTracer(((trc)), (str_), (1)); } while (0); } while (0);
+    }
+
+
+
+    bool createPendingInput(JSContext *cx, Value *out) const;
+    bool createLastMatch(JSContext *cx, Value *out) const { return makeMatch(cx, 0, 0, out); }
+    bool createLastParen(JSContext *cx, Value *out) const;
+    bool createLeftContext(JSContext *cx, Value *out) const;
+    bool createRightContext(JSContext *cx, Value *out) const;
+
+
+    bool createParen(JSContext *cx, size_t pairNum, Value *out) const {
+        ((void) 0);
+        if (pairNum >= pairCount()) {
+            out->setString(cx->runtime->emptyString);
+            return true;
+        }
+        return makeMatch(cx, pairNum * 2, pairNum, out);
+    }
+
+
+
+    void getParen(size_t pairNum, JSSubString *out) const;
+    void getLastMatch(JSSubString *out) const;
+    void getLastParen(JSSubString *out) const;
+    void getLeftContext(JSSubString *out) const;
+    void getRightContext(JSSubString *out) const;
+};
+
+class PreserveRegExpStatics
+{
+    RegExpStatics *const original;
+    RegExpStatics buffer;
+
+  public:
+    explicit PreserveRegExpStatics(RegExpStatics *original)
+     : original(original),
+       buffer(RegExpStatics::InitBuffer())
+    {}
+
+    bool init(JSContext *cx) {
+        return original->save(cx, &buffer);
+    }
+
+    ~PreserveRegExpStatics() {
+        original->restore();
+    }
+};
+
+}
+
+static inline
+
+# 325 "jsregexp.h"
+              bool
+VALUE_IS_REGEXP(JSContext *cx, js::Value v)
+{
+    return !v.isPrimitive() && v.toObject().isRegExp();
+}
+
+inline const js::Value &
+JSObject::getRegExpLastIndex() const
+{
+    ((void) 0);
+    return getSlot(JSSLOT_REGEXP_LAST_INDEX);
+}
+
+inline void
+JSObject::setRegExpLastIndex(const js::Value &v)
+{
+    ((void) 0);
+    setSlot(JSSLOT_REGEXP_LAST_INDEX, v);
+}
+
+inline void
+JSObject::setRegExpLastIndex(jsdouble d)
+{
+    ((void) 0);
+    setSlot(JSSLOT_REGEXP_LAST_INDEX, js::NumberValue(d));
+}
+
+inline void
+JSObject::zeroRegExpLastIndex()
+{
+    ((void) 0);
+    getSlotRef(JSSLOT_REGEXP_LAST_INDEX).setInt32(0);
+}
+
+namespace js { class AutoStringRooter; }
+
+inline
+
+# 361 "jsregexp.h"
+       bool
+JSObject::isRegExp() const
+{
+    return getClass() == &js_RegExpClass;
+}
+
+extern __attribute__((visibility ("default"))) JSBool
+js_ObjectIsRegExp(JSObject *obj);
+
+extern JSObject *
+js_InitRegExpClass(JSContext *cx, JSObject *obj);
+
+
+
+
+extern JSBool
+js_regexp_toString(JSContext *cx, JSObject *obj, js::Value *vp);
+
+extern __attribute__((visibility ("default"))) JSObject *
+js_CloneRegExpObject(JSContext *cx, JSObject *obj, JSObject *proto);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) void
+js_SaveAndClearRegExpStatics(JSContext *cx, js::RegExpStatics *res, js::AutoStringRooter *tvr);
+
+
+extern __attribute__((visibility ("default"))) void
+js_RestoreRegExpStatics(JSContext *cx, js::RegExpStatics *res);
+
+extern JSBool
+js_XDRRegExpObject(JSXDRState *xdr, JSObject **objp);
+
+extern JSBool
+js_regexp_exec(JSContext *cx, uintN argc, js::Value *vp);
+extern JSBool
+js_regexp_test(JSContext *cx, uintN argc, js::Value *vp);
+# 50 "jscntxtinlines.h" 2
+
+
+namespace js {
+
+static inline JSObject *
+GetGlobalForScopeChain(JSContext *cx)
+{
+# 65 "jscntxtinlines.h"
+    ((void) 0);
+
+    if (cx->hasfp())
+        return cx->fp()->scopeChain().getGlobal();
+
+    JSObject *scope = cx->globalObject;
+    if (!scope) {
+        JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_INACTIVE);
+        return __null;
+    }
+    OBJ_TO_INNER_OBJECT(cx, scope);
+    return scope;
+}
+
+}
+# 88 "jscntxtinlines.h"
+inline
+
+# 88 "jscntxtinlines.h"
+       bool
+JSContext::ensureGeneratorStackSpace()
+{
+    bool ok = genStack.reserve(genStack.length() + 1);
+    if (!ok)
+        js_ReportOutOfMemory(this);
+    return ok;
+}
+
+JSStackFrame *
+JSContext::computeNextFrame(JSStackFrame *fp)
+{
+    JSStackFrame *next = __null;
+    for (js::StackSegment *ss = currentSegment; ; ss = ss->getPreviousInContext()) {
+        JSStackFrame *end = ss->getInitialFrame()->prev();
+        for (JSStackFrame *f = ss->getCurrentFrame(); f != end; next = f, f = f->prev()) {
+            if (f == fp)
+                return next;
+        }
+        if (end != ss->getPreviousInContext()->getCurrentFrame())
+            next = __null;
+    }
+}
+
+inline js::RegExpStatics *
+JSContext::regExpStatics()
+{
+    return js::RegExpStatics::extractFrom(js::GetGlobalForScopeChain(this));
+}
+
+namespace js {
+
+ __attribute__((always_inline)) inline JSFrameRegs *
+StackSegment::getCurrentRegs() const
+{
+    ((void) 0);
+    return isActive() ? cx->regs : getSuspendedRegs();
+}
+
+ __attribute__((always_inline)) inline JSStackFrame *
+StackSegment::getCurrentFrame() const
+{
+    return getCurrentRegs()->fp;
+}
+
+ inline Value *
+StackSpace::firstUnused() const
+{
+    StackSegment *seg = currentSegment;
+    if (!seg) {
+        ((void) 0);
+        return base;
+    }
+    if (seg->inContext()) {
+        Value *sp = seg->getCurrentRegs()->sp;
+        if (invokeArgEnd > sp) {
+            ((void) 0);
+            ((void) 0)
+                                                                  ;
+            return invokeArgEnd;
+        }
+        return sp;
+    }
+    ((void) 0);
+    ((void) 0);
+    return invokeArgEnd;
+}
+
+
+
+__attribute__((always_inline)) inline
+
+# 158 "jscntxtinlines.h"
+                 bool
+StackSpace::isCurrentAndActive(JSContext *cx) const
+{
+
+
+
+
+
+    return currentSegment &&
+           currentSegment->isActive() &&
+           currentSegment == cx->getCurrentSegment();
+}
+
+
+__attribute__((always_inline)) inline
+
+# 172 "jscntxtinlines.h"
+                 bool
+StackSpace::ensureSpace(JSContext *maybecx, Value *from, ptrdiff_t nvals) const
+{
+    ((void) 0);
+# 192 "jscntxtinlines.h"
+    if (end - from < nvals) {
+        if (maybecx)
+            js_ReportOutOfScriptQuota(maybecx);
+        return false;
+    }
+    goto success;
+
+  success:
+
+
+
+    return true;
+}
+
+__attribute__((always_inline)) inline
+
+# 206 "jscntxtinlines.h"
+                 bool
+StackSpace::ensureEnoughSpaceToEnterTrace()
+{
+
+
+
+    return end - firstUnused() > MAX_TRACE_SPACE_VALS;
+}
+
+__attribute__((always_inline)) inline
+
+# 215 "jscntxtinlines.h"
+                 bool
+StackSpace::EnsureSpaceCheck::operator()(const StackSpace &stack, JSContext *cx,
+                                         Value *from, uintN nvals)
+{
+    return stack.ensureSpace(cx, from, nvals);
+}
+
+__attribute__((always_inline)) inline
+
+# 222 "jscntxtinlines.h"
+                 bool
+StackSpace::LimitCheck::operator()(const StackSpace &stack, JSContext *cx,
+                                   Value *from, uintN nvals)
+{
+    ((void) 0);
+    ((void) 0);
+    if (*limit - from >= ptrdiff_t(nvals))
+        return true;
+    if (stack.bumpCommitAndLimit(base, from, nvals, limit))
+        return true;
+    js_ReportOverRecursed(cx);
+    return false;
+}
+
+ __attribute__((always_inline)) inline
+
+# 236 "jscntxtinlines.h"
+                                   bool
+StackSpace::pushInvokeArgs(JSContext *cx, uintN argc, InvokeArgsGuard *ag)
+{
+    if ((__builtin_expect((!isCurrentAndActive(cx)), 0)))
+        return pushSegmentForInvoke(cx, argc, ag);
+
+    Value *sp = cx->regs->sp;
+    Value *start = invokeArgEnd > sp ? invokeArgEnd : sp;
+    ((void) 0);
+    uintN nvals = 2 + argc;
+    if (!ensureSpace(cx, start, nvals))
+        return false;
+
+    Value *vp = start;
+    Value *vpend = vp + nvals;
+
+
+
+    ag->prevInvokeArgEnd = invokeArgEnd;
+    invokeArgEnd = vpend;
+
+
+
+
+
+
+
+    ag->cx = cx;
+    ag->argv_ = vp + 2;
+    ag->argc_ = argc;
+    return true;
+}
+
+ __attribute__((always_inline)) inline void
+StackSpace::popInvokeArgs(const InvokeArgsGuard &ag)
+{
+    if ((__builtin_expect((ag.seg != __null), 0))) {
+        popSegmentForInvoke(ag);
+        return;
+    }
+
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+
+
+
+
+    invokeArgEnd = ag.prevInvokeArgEnd;
+}
+
+__attribute__((always_inline)) inline
+InvokeArgsGuard::~InvokeArgsGuard()
+{
+    if ((__builtin_expect((!pushed()), 0)))
+        return;
+    cx->stack().popInvokeArgs(*this);
+}
+
+template <class Check>
+ __attribute__((always_inline)) inline JSStackFrame *
+StackSpace::getCallFrame(JSContext *cx, Value *firstUnused, uintN nactual,
+                         JSFunction *fun, JSScript *script, uint32 *flags,
+                         Check check) const
+{
+    ((void) 0);
+
+
+    uintN nvals = VALUES_PER_STACK_FRAME + script->nslots;
+    uintN nformal = fun->nargs;
+
+
+
+    if (nactual == nformal) {
+        if ((__builtin_expect((!check(*this, cx, firstUnused, nvals)), 0)))
+            return __null;
+        return reinterpret_cast<JSStackFrame *>(firstUnused);
+    }
+
+    if (nactual < nformal) {
+        *flags |= JSFRAME_UNDERFLOW_ARGS;
+        uintN nmissing = nformal - nactual;
+        if ((__builtin_expect((!check(*this, cx, firstUnused, nmissing + nvals)), 0)))
+            return __null;
+        SetValueRangeToUndefined(firstUnused, nmissing);
+        return reinterpret_cast<JSStackFrame *>(firstUnused + nmissing);
+    }
+
+    *flags |= JSFRAME_OVERFLOW_ARGS;
+    uintN ncopy = 2 + nformal;
+    if ((__builtin_expect((!check(*this, cx, firstUnused, ncopy + nvals)), 0)))
+        return __null;
+
+    Value *dst = firstUnused;
+    Value *src = firstUnused - (2 + nactual);
+    PodCopy(dst, src, ncopy);
+    Debug_SetValueRangeToCrashOnTouch(src, ncopy);
+    return reinterpret_cast<JSStackFrame *>(firstUnused + ncopy);
+}
+
+ __attribute__((always_inline)) inline
+
+# 338 "jscntxtinlines.h"
+                                   bool
+StackSpace::getInvokeFrame(JSContext *cx, const CallArgs &args,
+                           JSFunction *fun, JSScript *script,
+                           uint32 *flags, InvokeFrameGuard *fg) const
+{
+    ((void) 0);
+
+    Value *firstUnused = args.argv() + args.argc();
+    fg->regs_.fp = getCallFrame(cx, firstUnused, args.argc(), fun, script, flags,
+                                EnsureSpaceCheck());
+    fg->regs_.sp = fg->regs_.fp->slots() + script->nfixed;
+    fg->regs_.pc = script->code;
+
+    return fg->regs_.fp != __null;
+}
+
+ __attribute__((always_inline)) inline void
+StackSpace::pushInvokeFrame(JSContext *cx, const CallArgs &args,
+                            InvokeFrameGuard *fg)
+{
+    ((void) 0);
+
+    if ((__builtin_expect((!currentSegment->inContext()), 0))) {
+        cx->pushSegmentAndFrame(currentSegment, fg->regs_);
+    } else {
+        fg->prevRegs_ = cx->regs;
+        cx->setCurrentRegs(&fg->regs_);
+    }
+
+    fg->cx_ = cx;
+    ((void) 0);
+}
+
+ __attribute__((always_inline)) inline void
+StackSpace::popInvokeFrame(const InvokeFrameGuard &fg)
+{
+    JSContext *cx = fg.cx_;
+    JSStackFrame *fp = fg.regs_.fp;
+
+    ((void) 0);
+    if ((__builtin_expect((currentSegment->getInitialFrame() == fp), 0))) {
+        cx->popSegmentAndFrame();
+    } else {
+        ((void) 0);
+        ((void) 0);
+        ((void) 0);
+        cx->setCurrentRegs(fg.prevRegs_);
+    }
+}
+
+__attribute__((always_inline)) inline void
+InvokeFrameGuard::pop()
+{
+    ((void) 0);
+    cx_->stack().popInvokeFrame(*this);
+    cx_ = __null;
+}
+
+ __attribute__((always_inline)) inline JSStackFrame *
+StackSpace::getInlineFrame(JSContext *cx, Value *sp, uintN nactual,
+                           JSFunction *fun, JSScript *script, uint32 *flags) const
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    return getCallFrame(cx, sp, nactual, fun, script, flags, EnsureSpaceCheck());
+}
+
+ __attribute__((always_inline)) inline JSStackFrame *
+StackSpace::getInlineFrameWithinLimit(JSContext *cx, Value *sp, uintN nactual,
+                                      JSFunction *fun, JSScript *script, uint32 *flags,
+                                      JSStackFrame *base, Value **limit) const
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    return getCallFrame(cx, sp, nactual, fun, script, flags, LimitCheck(base, limit));
+}
+
+ __attribute__((always_inline)) inline void
+StackSpace::pushInlineFrame(JSContext *cx, JSScript *script, JSStackFrame *fp,
+                            JSFrameRegs *regs)
+{
+    ((void) 0);
+    ((void) 0);
+
+    regs->fp = fp;
+    regs->pc = script->code;
+    regs->sp = fp->slots() + script->nfixed;
+}
+
+ __attribute__((always_inline)) inline void
+StackSpace::popInlineFrame(JSContext *cx, JSStackFrame *prev, Value *newsp)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    JSFrameRegs *regs = cx->regs;
+    regs->pc = prev->pc(cx, regs->fp);
+    regs->fp = prev;
+    regs->sp = newsp;
+}
+
+__attribute__((always_inline)) inline Value *
+StackSpace::getStackLimit(JSContext *cx)
+{
+    Value *sp = cx->regs->sp;
+    ((void) 0);
+    Value *limit = sp + STACK_QUOTA;
+# 466 "jscntxtinlines.h"
+    if ((__builtin_expect((limit <= end), 1)))
+        return limit;
+    uintN minimum = cx->fp()->numSlots() + VALUES_PER_STACK_FRAME;
+    return ensureSpace(cx, sp, minimum) ? sp + minimum : __null;
+
+}
+
+ inline
+FrameRegsIter::FrameRegsIter(JSContext *cx)
+  : cx(cx)
+{
+    curseg = cx->getCurrentSegment();
+    if ((__builtin_expect((!curseg || !curseg->isActive()), 0))) {
+        initSlow();
+        return;
+    }
+    ((void) 0);
+    curfp = cx->regs->fp;
+    cursp = cx->regs->sp;
+    curpc = cx->regs->pc;
+    return;
+}
+
+inline FrameRegsIter &
+FrameRegsIter::operator++()
+{
+    JSStackFrame *fp = curfp;
+    JSStackFrame *prev = curfp = curfp->prev();
+    if (!prev)
+        return *this;
+
+    curpc = curfp->pc(cx, fp);
+
+    if ((__builtin_expect((fp == curseg->getInitialFrame()), 0))) {
+        incSlow(fp, prev);
+        return *this;
+    }
+
+    cursp = fp->formalArgsEnd();
+    return *this;
+}
+
+class AutoNamespaceArray : protected AutoGCRooter {
+  public:
+    AutoNamespaceArray(JSContext *cx) : AutoGCRooter(cx, NAMESPACES) {
+        array.init();
+    }
+
+    ~AutoNamespaceArray() {
+        array.finish(context);
+    }
+
+    uint32 length() const { return array.length; }
+
+  public:
+    friend void AutoGCRooter::trace(JSTracer *trc);
+
+    JSXMLArray array;
+};
+# 636 "jscntxtinlines.h"
+template <class T1> inline void
+assertSameCompartment(JSContext *cx, T1 t1)
+{
+
+
+
+
+}
+
+template <class T1, class T2> inline void
+assertSameCompartment(JSContext *cx, T1 t1, T2 t2)
+{
+
+
+
+
+
+}
+
+template <class T1, class T2, class T3> inline void
+assertSameCompartment(JSContext *cx, T1 t1, T2 t2, T3 t3)
+{
+
+
+
+
+
+
+}
+
+template <class T1, class T2, class T3, class T4> inline void
+assertSameCompartment(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4)
+{
+
+
+
+
+
+
+
+}
+
+template <class T1, class T2, class T3, class T4, class T5> inline void
+assertSameCompartment(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
+{
+# 689 "jscntxtinlines.h"
+}
+
+
+
+
+__attribute__((always_inline)) inline
+
+# 694 "jscntxtinlines.h"
+                 bool
+CallJSNative(JSContext *cx, js::Native native, uintN argc, js::Value *vp)
+{
+
+
+
+    assertSameCompartment(cx, ValueArray(vp, argc + 2));
+    JSBool ok = native(cx, argc, vp);
+    if (ok) {
+        assertSameCompartment(cx, vp[0]);
+        ((void) 0);
+    }
+    return ok;
+}
+
+extern JSBool CallOrConstructBoundFunction(JSContext *, uintN, js::Value *);
+
+
+__attribute__((always_inline)) inline
+
+# 712 "jscntxtinlines.h"
+                 bool
+CallJSNativeConstructor(JSContext *cx, js::Native native, uintN argc, js::Value *vp)
+{
+
+
+
+
+    ((void) 0);
+    if (!CallJSNative(cx, native, argc, vp))
+        return false;
+# 738 "jscntxtinlines.h"
+    extern JSBool proxy_Construct(JSContext *, uintN, Value *);
+    ((void) 0)
+
+                                                                   ;
+
+    return true;
+}
+
+__attribute__((always_inline)) inline
+
+# 746 "jscntxtinlines.h"
+                 bool
+CallJSPropertyOp(JSContext *cx, js::PropertyOp op, JSObject *obj, jsid id, js::Value *vp)
+{
+    assertSameCompartment(cx, obj, id, *vp);
+    JSBool ok = op(cx, obj, id, vp);
+    if (ok)
+        assertSameCompartment(cx, obj, *vp);
+    return ok;
+}
+
+__attribute__((always_inline)) inline
+
+# 756 "jscntxtinlines.h"
+                 bool
+CallJSPropertyOpSetter(JSContext *cx, js::StrictPropertyOp op, JSObject *obj, jsid id,
+                       JSBool strict, js::Value *vp)
+{
+    assertSameCompartment(cx, obj, id, *vp);
+    return op(cx, obj, id, strict, vp);
+}
+
+inline
+
+# 764 "jscntxtinlines.h"
+       bool
+CallSetter(JSContext *cx, JSObject *obj, jsid id, js::StrictPropertyOp op, uintN attrs,
+           uintN shortid, JSBool strict, js::Value *vp)
+{
+    if (attrs & 0x20)
+        return ExternalGetOrSet(cx, obj, id, CastAsObjectJsval(op), JSACC_WRITE, 1, vp, vp);
+
+    if (attrs & 0x10)
+        return js_ReportGetterOnlyAssignment(cx);
+
+    if (attrs & 0x100)
+        id = INT_TO_JSID(shortid);
+    return CallJSPropertyOpSetter(cx, op, obj, id, strict, vp);
+}
+# 791 "jscntxtinlines.h"
+static inline void
+LeaveTraceIfGlobalObject(JSContext *cx, JSObject *obj)
+{
+    if (!obj->parent)
+        LeaveTrace(cx);
+}
+
+static inline void
+LeaveTraceIfArgumentsObject(JSContext *cx, JSObject *obj)
+{
+    if (obj->isArguments())
+        LeaveTrace(cx);
+}
+
+static inline JSBool
+CanLeaveTrace(JSContext *cx)
+{
+    ((void) 0);
+
+
+
+    return (JSIntn)0;
+
+}
+
+}
+
+inline void
+JSContext::setPendingException(js::Value v) {
+    this->throwing = true;
+    this->exception = v;
+    assertSameCompartment(this, v);
+}
+# 45 "jsstrinlines.h" 2
+
+namespace js {
+
+static inline
+
+# 48 "jsstrinlines.h"
+              bool
+CheckStringLength(JSContext *cx, size_t length)
+{
+    if ((__builtin_expect((length > JSString::MAX_LENGTH), 0))) {
+        js_ReportAllocationOverflow(cx);
+        return false;
+    }
+
+    return true;
+}
+# 67 "jsstrinlines.h"
+class StringBuffer
+{
+    typedef Vector<jschar, 32> CharBuffer;
+    CharBuffer cb;
+
+    static inline bool checkLength(JSContext *cx, size_t length);
+    inline bool checkLength(size_t length);
+    JSContext *context() const { return cb.allocPolicy().context(); }
+
+  public:
+    explicit inline StringBuffer(JSContext *cx);
+    bool reserve(size_t len);
+    bool resize(size_t len);
+    bool append(const jschar c);
+    bool append(const jschar *chars, size_t len);
+    bool append(const jschar *begin, const jschar *end);
+    bool append(JSString *str);
+    bool append(JSAtom *atom);
+    bool appendN(const jschar c, size_t n);
+    bool appendInflated(const char *cstr, size_t len);
+    JSAtom *atomize(uintN flags = 0);
+    static JSAtom *atomize(JSContext *cx, const CharBuffer &cb, uintN flags = 0);
+    static JSAtom *atomize(JSContext *cx, const jschar *begin, size_t length, uintN flags = 0);
+
+    void replaceRawBuffer(jschar *chars, size_t len) { cb.replaceRawBuffer(chars, len); }
+    jschar *begin() { return cb.begin(); }
+    jschar *end() { return cb.end(); }
+    const jschar *begin() const { return cb.begin(); }
+    const jschar *end() const { return cb.end(); }
+    bool empty() const { return cb.empty(); }
+    inline jsint length() const;
+
+
+
+
+
+
+    JSFlatString *finishString();
+
+    template <size_t ArrayLength>
+    bool append(const char (&array)[ArrayLength]) {
+        return cb.append(array, array + ArrayLength - 1);
+    }
+};
+
+inline
+StringBuffer::StringBuffer(JSContext *cx)
+  : cb(cx)
+{}
+
+inline
+
+# 117 "jsstrinlines.h"
+       bool
+StringBuffer::reserve(size_t len)
+{
+    if (!checkLength(len))
+        return false;
+    return cb.reserve(len);
+}
+
+inline
+
+# 125 "jsstrinlines.h"
+       bool
+StringBuffer::resize(size_t len)
+{
+    if (!checkLength(len))
+        return false;
+    return cb.resize(len);
+}
+
+inline
+
+# 133 "jsstrinlines.h"
+       bool
+StringBuffer::append(const jschar c)
+{
+    if (!checkLength(cb.length() + 1))
+        return false;
+    return cb.append(c);
+}
+
+inline
+
+# 141 "jsstrinlines.h"
+       bool
+StringBuffer::append(const jschar *chars, size_t len)
+{
+    if (!checkLength(cb.length() + len))
+        return false;
+    return cb.append(chars, len);
+}
+
+inline
+
+# 149 "jsstrinlines.h"
+       bool
+StringBuffer::append(const jschar *begin, const jschar *end)
+{
+    if (!checkLength(cb.length() + (end - begin)))
+        return false;
+    return cb.append(begin, end);
+}
+
+inline
+
+# 157 "jsstrinlines.h"
+       bool
+StringBuffer::append(JSString *str)
+{
+    JSLinearString *linear = str->ensureLinear(context());
+    size_t strLen = linear->length();
+    if (!checkLength(cb.length() + strLen))
+        return false;
+    return cb.append(linear->chars(), strLen);
+}
+
+inline
+
+# 167 "jsstrinlines.h"
+       bool
+StringBuffer::append(JSAtom *atom)
+{
+    size_t strLen = atom->length();
+    if (!checkLength(cb.length() + strLen))
+        return false;
+    return cb.append(atom->chars(), strLen);
+}
+
+inline
+
+# 176 "jsstrinlines.h"
+       bool
+StringBuffer::appendN(const jschar c, size_t n)
+{
+    if (!checkLength(cb.length() + n))
+        return false;
+    return cb.appendN(c, n);
+}
+
+inline
+
+# 184 "jsstrinlines.h"
+       bool
+StringBuffer::appendInflated(const char *cstr, size_t cstrlen)
+{
+    size_t lengthBefore = length();
+    if (!cb.growByUninitialized(cstrlen))
+        return false;
+
+
+
+
+    js_InflateStringToBuffer(context(), cstr, cstrlen, begin() + lengthBefore, &cstrlen);
+    ((void) 0);
+    return true;
+}
+
+inline jsint
+StringBuffer::length() const
+{
+    typedef int js_static_assert65[(jsint(JSString::MAX_LENGTH) == JSString::MAX_LENGTH) ? 1 : -1];
+    ((void) 0);
+    return jsint(cb.length());
+}
+
+inline
+
+# 207 "jsstrinlines.h"
+       bool
+StringBuffer::checkLength(size_t length)
+{
+    return CheckStringLength(context(), length);
+}
+
+}
+
+inline JSFlatString *
+JSString::unitString(jschar c)
+{
+
+    ((void) 0);
+    return const_cast<JSString *>(&unitStringTable[c])->assertIsFlat();
+
+
+
+
+}
+
+inline JSLinearString *
+JSString::getUnitString(JSContext *cx, JSString *str, size_t index)
+{
+    ((void) 0);
+
+    const jschar *chars = str->getChars(cx);
+    if (!chars)
+        return __null;
+    jschar c = chars[index];
+    if (c < UNIT_STRING_LIMIT)
+        return unitString(c);
+
+    return js_NewDependentString(cx, str, index, 1);
+}
+
+inline JSFlatString *
+JSString::length2String(jschar c1, jschar c2)
+{
+
+    ((void) 0);
+    ((void) 0);
+    return const_cast<JSString *> (
+             &length2StringTable[(((size_t)toSmallChar[c1]) << 6) + toSmallChar[c2]]
+           )->assertIsFlat();
+
+
+
+
+}
+
+inline JSFlatString *
+JSString::length2String(uint32 i)
+{
+
+    ((void) 0);
+    return length2String('0' + i / 10, '0' + i % 10);
+
+
+
+
+}
+
+inline JSFlatString *
+JSString::intString(jsint i)
+{
+
+    jsuint u = jsuint(i);
+    ((void) 0);
+    return const_cast<JSString *>(JSString::intStringTable[u])->assertIsFlat();
+
+
+
+
+}
+
+
+inline JSFlatString *
+JSString::lookupStaticString(const jschar *chars, size_t length)
+{
+
+    if (length == 1) {
+        if (chars[0] < UNIT_STRING_LIMIT)
+            return unitString(chars[0]);
+    }
+
+    if (length == 2) {
+        if (fitsInSmallChar(chars[0]) && fitsInSmallChar(chars[1]))
+            return length2String(chars[0], chars[1]);
+    }
+
+
+
+
+
+
+
+    typedef int js_static_assert66[(INT_STRING_LIMIT <= 999) ? 1 : -1];
+    if (length == 3) {
+        if ('1' <= chars[0] && chars[0] <= '9' &&
+            '0' <= chars[1] && chars[1] <= '9' &&
+            '0' <= chars[2] && chars[2] <= '9') {
+            jsint i = (chars[0] - '0') * 100 +
+                      (chars[1] - '0') * 10 +
+                      (chars[2] - '0');
+
+            if (jsuint(i) < INT_STRING_LIMIT)
+                return intString(i);
+        }
+    }
+
+
+    return __null;
+}
+
+inline void
+JSString::finalize(JSContext *cx) {
+    ((void) 0);
+    ;
+    if (isDependent()) {
+        ;
+    } else if (isFlat()) {
+
+
+
+
+        cx->runtime->stringMemoryUsed -= length() * 2;
+        cx->free(const_cast<jschar *>(flatChars()));
+    }
+}
+
+inline void
+JSShortString::finalize(JSContext *cx)
+{
+    ((void) 0);
+    ((void) 0);
+    ;
+}
+
+inline void
+JSExternalString::finalize(JSContext *cx)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ;
+
+
+    jschar *chars = const_cast<jschar *>(flatChars());
+    if (!chars)
+        return;
+    JSStringFinalizeOp finalizer = str_finalizers[externalStringType];
+    if (finalizer)
+        finalizer(cx, this);
+}
+
+inline void
+JSExternalString::finalize()
+{
+    ((void) 0);
+    JSStringFinalizeOp finalizer = str_finalizers[externalStringType];
+    if (finalizer) {
+
+
+
+
+        finalizer(__null, this);
+    }
+}
+
+namespace js {
+
+class RopeBuilder {
+    JSContext *cx;
+    JSString *res;
+
+  public:
+    RopeBuilder(JSContext *cx)
+      : cx(cx), res(cx->runtime->emptyString)
+    {}
+
+    inline bool append(JSString *str) {
+        res = js_ConcatStrings(cx, res, str);
+        return !!res;
+    }
+
+    inline JSString *result() {
+        return res;
+    }
+};
+
+class StringSegmentRange
+{
+
+
+
+
+    Vector<JSString *, 32> stack;
+    JSString *cur;
+
+    bool settle(JSString *str) {
+        while (str->isRope()) {
+            if (!stack.append(str->ropeRight()))
+                return false;
+            str = str->ropeLeft();
+        }
+        cur = str;
+        return true;
+    }
+
+  public:
+    StringSegmentRange(JSContext *cx)
+      : stack(cx), cur(__null)
+    {}
+
+    __attribute__((warn_unused_result)) bool init(JSString *str) {
+        ((void) 0);
+        return settle(str);
+    }
+
+    bool empty() const {
+        return cur == __null;
+    }
+
+    JSString *front() const {
+        ((void) 0);
+        return cur;
+    }
+
+    __attribute__((warn_unused_result)) bool popFront() {
+        ((void) 0);
+        if (stack.empty()) {
+            cur = __null;
+            return true;
+        }
+        return settle(stack.popCopy());
+    }
+};
+
+}
+# 60 "jsscope.h" 2
+# 213 "jsscope.h"
+namespace js {
+
+
+
+
+
+
+
+struct PropertyTable {
+    static const uint32 MAX_LINEAR_SEARCHES = 7;
+    static const uint32 MIN_SIZE_LOG2 = 4;
+    static const uint32 MIN_SIZE = ((JSUint32)1 << (MIN_SIZE_LOG2));
+
+    int hashShift;
+
+    uint32 entryCount;
+    uint32 removedCount;
+    uint32 freelist;
+
+
+    js::Shape **entries;
+
+    PropertyTable(uint32 nentries)
+      : hashShift(32 - MIN_SIZE_LOG2),
+        entryCount(nentries),
+        removedCount(0),
+        freelist(0xffffffff)
+    {
+
+    }
+
+    ~PropertyTable() {
+        js_free(entries);
+    }
+
+
+    uint32 capacity() const { return ((JSUint32)1 << (32 - hashShift)); }
+
+
+    bool needsToGrow() const {
+        uint32 size = capacity();
+        return entryCount + removedCount >= size - (size >> 2);
+    }
+
+
+
+
+
+
+    bool grow(JSContext *cx);
+
+
+
+
+
+
+    bool init(JSRuntime *rt, js::Shape *lastProp);
+    bool change(int log2Delta, JSContext *cx);
+    js::Shape **search(jsid id, bool adding);
+};
+
+}
+
+struct JSObject;
+
+namespace js {
+
+class PropertyTree;
+
+static inline PropertyOp
+CastAsPropertyOp(js::Class *clasp)
+{
+    return (__extension__ (PropertyOp) (size_t) (clasp));
+}
+
+
+
+
+
+
+struct Shape : public JSObjectMap
+{
+    friend struct ::JSObject;
+    friend struct ::JSFunction;
+    friend class js::PropertyTree;
+    friend class js::Bindings;
+    friend bool IsShapeAboutToBeFinalized(JSContext *cx, const js::Shape *shape);
+# 309 "jsscope.h"
+    union {
+        mutable size_t numLinearSearches;
+        mutable js::PropertyTable *table;
+    };
+
+  public:
+    inline void freeTable(JSContext *cx);
+
+    static bool initEmptyShapes(JSCompartment *comp);
+    static void finishEmptyShapes(JSCompartment *comp);
+
+    jsid id;
+
+
+
+
+
+  protected:
+    union {
+        js::PropertyOp rawGetter;
+        JSObject *getterObj;
+
+
+
+        js::Class *clasp;
+    };
+
+    union {
+        js::StrictPropertyOp rawSetter;
+
+        JSObject *setterObj;
+
+    };
+
+  public:
+    uint32 slot;
+  private:
+    uint8 attrs;
+    mutable uint8 flags;
+  public:
+    int16 shortid;
+
+  protected:
+    mutable js::Shape *parent;
+    union {
+        mutable js::KidsPointer kids;
+
+        mutable js::Shape **listp;
+
+
+
+    };
+
+    static inline js::Shape **search(JSRuntime *rt, js::Shape **startp, jsid id,
+                                     bool adding = false);
+    static js::Shape *newDictionaryShape(JSContext *cx, const js::Shape &child, js::Shape **listp);
+    static js::Shape *newDictionaryList(JSContext *cx, js::Shape **listp);
+
+    inline void removeFromDictionary(JSObject *obj) const;
+    inline void insertIntoDictionary(js::Shape **dictp);
+
+    js::Shape *getChild(JSContext *cx, const js::Shape &child, js::Shape **listp);
+
+    bool hashify(JSRuntime *rt);
+
+    bool hasTable() const {
+
+        return numLinearSearches > PropertyTable::MAX_LINEAR_SEARCHES;
+    }
+
+    js::PropertyTable *getTable() const {
+        ((void) 0);
+        return table;
+    }
+
+    void setTable(js::PropertyTable *t) const {
+        ((void) 0);
+        table = t;
+    }
+# 430 "jsscope.h"
+    void setParent(js::Shape *p) {
+        typedef int js_static_assert67[(uint32(0xffffffff) == ~uint32(0)) ? 1 : -1];
+        if (p)
+            slotSpan = ((p->slotSpan)>(slot + 1)?(p->slotSpan):(slot + 1));
+        ((void) 0);
+        parent = p;
+    }
+
+    void insertFree(js::Shape **freep) {
+
+
+
+        id = ((jsid)0x2);
+        parent = *freep;
+        if (parent)
+            parent->listp = &parent;
+        listp = freep;
+        *freep = this;
+    }
+
+    void removeFree() {
+        ((void) 0);
+        *listp = parent;
+        if (parent)
+            parent->listp = listp;
+    }
+
+  public:
+    const js::Shape *previous() const {
+        return parent;
+    }
+
+    class Range {
+      protected:
+        friend struct Shape;
+
+        const Shape *cursor;
+        const Shape *end;
+
+      public:
+        Range(const Shape *shape) : cursor(shape) { }
+
+        bool empty() const {
+            ((void) 0);
+            return !cursor->parent;
+        }
+
+        const Shape &front() const {
+            ((void) 0);
+            return *cursor;
+        }
+
+        void popFront() {
+            ((void) 0);
+            cursor = cursor->parent;
+        }
+    };
+
+    Range all() const {
+        return Range(this);
+    }
+
+  protected:
+
+
+
+
+
+    enum {
+
+        MARK = 0x01,
+
+        SHARED_EMPTY = 0x02,
+
+
+
+
+
+        SHAPE_REGEN = 0x04,
+
+
+        IN_DICTIONARY = 0x08,
+
+
+        FROZEN = 0x10
+    };
+
+    Shape(jsid id, js::PropertyOp getter, js::StrictPropertyOp setter, uint32 slot, uintN attrs,
+          uintN flags, intN shortid, uint32 shape = INVALID_SHAPE, uint32 slotSpan = 0);
+
+
+    Shape(JSCompartment *comp, Class *aclasp);
+
+    bool marked() const { return (flags & MARK) != 0; }
+    void mark() const { flags |= MARK; }
+    void clearMark() { flags &= ~MARK; }
+
+    bool hasRegenFlag() const { return (flags & SHAPE_REGEN) != 0; }
+    void setRegenFlag() { flags |= SHAPE_REGEN; }
+    void clearRegenFlag() { flags &= ~SHAPE_REGEN; }
+
+    bool inDictionary() const { return (flags & IN_DICTIONARY) != 0; }
+    bool frozen() const { return (flags & FROZEN) != 0; }
+    void setFrozen() { flags |= FROZEN; }
+
+    bool isEmptyShape() const { ((void) 0); return !parent; }
+
+  public:
+
+    enum {
+        ALIAS = 0x20,
+        HAS_SHORTID = 0x40,
+        METHOD = 0x80,
+        PUBLIC_FLAGS = ALIAS | HAS_SHORTID | METHOD
+    };
+
+    uintN getFlags() const { return flags & PUBLIC_FLAGS; }
+    bool isAlias() const { return (flags & ALIAS) != 0; }
+    bool hasShortID() const { return (flags & HAS_SHORTID) != 0; }
+    bool isMethod() const { return (flags & METHOD) != 0; }
+
+    JSObject &methodObject() const { ((void) 0); return *getterObj; }
+
+    js::PropertyOp getter() const { return rawGetter; }
+    bool hasDefaultGetter() const { return !rawGetter; }
+    js::PropertyOp getterOp() const { ((void) 0); return rawGetter; }
+    JSObject *getterObject() const { ((void) 0); return getterObj; }
+
+
+    js::Value getterValue() const {
+        ((void) 0);
+        return getterObj ? js::ObjectValue(*getterObj) : js::UndefinedValue();
+    }
+
+    js::Value getterOrUndefined() const {
+        return hasGetterValue() && getterObj ? js::ObjectValue(*getterObj) : js::UndefinedValue();
+    }
+
+    js::StrictPropertyOp setter() const { return rawSetter; }
+    bool hasDefaultSetter() const { return !rawSetter; }
+    js::StrictPropertyOp setterOp() const { ((void) 0); return rawSetter; }
+    JSObject *setterObject() const { ((void) 0); return setterObj; }
+
+
+    js::Value setterValue() const {
+        ((void) 0);
+        return setterObj ? js::ObjectValue(*setterObj) : js::UndefinedValue();
+    }
+
+    js::Value setterOrUndefined() const {
+        return hasSetterValue() && setterObj ? js::ObjectValue(*setterObj) : js::UndefinedValue();
+    }
+
+    inline JSDHashNumber hash() const;
+    inline bool matches(const js::Shape *p) const;
+    inline bool matchesParamsAfterId(js::PropertyOp agetter, js::StrictPropertyOp asetter,
+                                     uint32 aslot, uintN aattrs, uintN aflags,
+                                     intN ashortid) const;
+
+    bool get(JSContext* cx, JSObject *receiver, JSObject *obj, JSObject *pobj, js::Value* vp) const;
+    bool set(JSContext* cx, JSObject *obj, bool strict, js::Value* vp) const;
+
+    inline bool isSharedPermanent() const;
+
+    void trace(JSTracer *trc) const;
+
+    bool hasSlot() const { return (attrs & 0x40) == 0; }
+
+    uint8 attributes() const { return attrs; }
+    bool configurable() const { return (attrs & 0x04) == 0; }
+    bool enumerable() const { return (attrs & 0x01) != 0; }
+    bool writable() const {
+
+        return (attrs & 0x02) == 0;
+    }
+    bool hasGetterValue() const { return attrs & 0x10; }
+    bool hasSetterValue() const { return attrs & 0x20; }
+
+    bool hasDefaultGetterOrIsMethod() const {
+        return hasDefaultGetter() || isMethod();
+    }
+
+    bool isDataDescriptor() const {
+        return (attrs & (0x20 | 0x10)) == 0;
+    }
+    bool isAccessorDescriptor() const {
+        return (attrs & (0x20 | 0x10)) != 0;
+    }
+
+
+
+
+
+
+
+    bool shadowable() const {
+        ((void) 0);
+        return hasSlot() || (attrs & 0x80);
+    }
+
+    uint32 entryCount() const {
+        if (hasTable())
+            return getTable()->entryCount;
+
+        const js::Shape *shape = this;
+        uint32 count = 0;
+        for (js::Shape::Range r = shape->all(); !r.empty(); r.popFront())
+            ++count;
+        return count;
+    }
+
+
+
+
+
+};
+
+struct EmptyShape : public js::Shape
+{
+    EmptyShape(JSCompartment *comp, js::Class *aclasp);
+
+    js::Class *getClass() const { return clasp; };
+
+    static EmptyShape *create(JSCompartment *comp, js::Class *clasp) {
+        js::Shape *eprop = comp->propertyTree.newShapeUnchecked();
+        if (!eprop)
+            return __null;
+        return new (eprop) EmptyShape(comp, clasp);
+    }
+
+    static EmptyShape *create(JSContext *cx, js::Class *clasp) {
+        js::Shape *eprop = ((cx)->compartment->propertyTree).newShape(cx);
+        if (!eprop)
+            return __null;
+        return new (eprop) EmptyShape(cx->compartment, clasp);
+    }
+};
+
+}
+# 689 "jsscope.h"
+inline js::Shape **
+JSObject::nativeSearch(jsid id, bool adding)
+{
+    return js::Shape::search(compartment()->rt, &lastProp, id, adding);
+}
+
+inline const js::Shape *
+JSObject::nativeLookup(jsid id)
+{
+    ((void) 0);
+    return ((js::Shape *) (jsuword(*(nativeSearch(id))) & ~(jsuword(1))));
+}
+
+inline
+
+# 702 "jsscope.h"
+       bool
+JSObject::nativeContains(jsid id)
+{
+    return nativeLookup(id) != __null;
+}
+
+inline
+
+# 708 "jsscope.h"
+       bool
+JSObject::nativeContains(const js::Shape &shape)
+{
+    return nativeLookup(shape.id) == &shape;
+}
+
+inline const js::Shape *
+JSObject::lastProperty() const
+{
+    ((void) 0);
+    ((void) 0);
+    return lastProp;
+}
+
+inline
+
+# 722 "jsscope.h"
+       bool
+JSObject::nativeEmpty() const
+{
+    return lastProperty()->isEmptyShape();
+}
+
+inline
+
+# 728 "jsscope.h"
+       bool
+JSObject::inDictionaryMode() const
+{
+    return lastProperty()->inDictionary();
+}
+
+inline uint32
+JSObject::propertyCount() const
+{
+    return lastProperty()->entryCount();
+}
+
+inline
+
+# 740 "jsscope.h"
+       bool
+JSObject::hasPropertyTable() const
+{
+    return lastProperty()->hasTable();
+}
+
+
+
+
+inline void
+JSObject::setLastProperty(const js::Shape *shape)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    lastProp = const_cast<js::Shape *>(shape);
+}
+
+inline void
+JSObject::removeLastProperty()
+{
+    ((void) 0);
+    ((void) 0);
+
+    lastProp = lastProp->parent;
+}
+
+namespace js {
+
+inline void
+Shape::removeFromDictionary(JSObject *obj) const
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    if (parent)
+        parent->listp = listp;
+    *listp = parent;
+    listp = __null;
+}
+
+inline void
+Shape::insertIntoDictionary(js::Shape **dictp)
+{
+
+
+
+
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    setParent(*dictp);
+    if (parent)
+        parent->listp = &parent;
+    listp = dictp;
+    *dictp = this;
+}
+
+}
+# 824 "jsscope.h"
+extern uint32
+js_GenerateShape(JSRuntime *rt);
+
+extern uint32
+js_GenerateShape(JSContext *cx);
+# 869 "jsscope.h"
+namespace js {
+
+__attribute__((always_inline)) inline js::Shape **
+Shape::search(JSRuntime *rt, js::Shape **startp, jsid id, bool adding)
+{
+    js::Shape *start = *startp;
+    ;
+
+    if (start->hasTable())
+        return start->getTable()->search(id, adding);
+
+    if (start->numLinearSearches == PropertyTable::MAX_LINEAR_SEARCHES) {
+        if (start->hashify(rt))
+            return start->getTable()->search(id, adding);
+
+        ((void) 0);
+    } else {
+        ((void) 0);
+        start->numLinearSearches++;
+    }
+# 898 "jsscope.h"
+    js::Shape **spp;
+    for (spp = startp; js::Shape *shape = *spp; spp = &shape->parent) {
+        if (shape->id == id) {
+            ;
+            return spp;
+        }
+    }
+    ;
+    return spp;
+}
+
+
+
+inline
+
+# 911 "jsscope.h"
+       bool
+Shape::isSharedPermanent() const
+{
+    return (~attrs & (0x40 | 0x04)) == 0;
+}
+
+}
+# 67 "jsxml.cpp" 2
+
+
+
+
+
+
+# 1 "jsatominlines.h" 1
+# 49 "jsatominlines.h"
+inline
+
+# 49 "jsatominlines.h"
+       bool
+js_ValueToAtom(JSContext *cx, const js::Value &v, JSAtom **atomp)
+{
+    JSString *str;
+    JSAtom *atom;
+# 62 "jsatominlines.h"
+    if (v.isString()) {
+        str = v.toString();
+        if (str->isAtomized()) {
+            *atomp = (((void) 0), (JSAtom *)str);
+            return true;
+        }
+    } else {
+        str = js_ValueToString(cx, v);
+        if (!str)
+            return false;
+    }
+    atom = js_AtomizeString(cx, str, 0);
+    if (!atom)
+        return false;
+    *atomp = atom;
+    return true;
+}
+
+inline
+
+# 80 "jsatominlines.h"
+       bool
+js_ValueToStringId(JSContext *cx, const js::Value &v, jsid *idp)
+{
+    JSAtom *atom;
+    if (js_ValueToAtom(cx, v, &atom)) {
+        *idp = ATOM_TO_JSID(atom);
+        return true;
+    }
+    return false;
+}
+
+inline
+
+# 91 "jsatominlines.h"
+       bool
+js_InternNonIntElementId(JSContext *cx, JSObject *obj, const js::Value &idval,
+                         jsid *idp)
+{
+    ((void) 0);
+
+
+    extern bool js_InternNonIntElementIdSlow(JSContext *, JSObject *,
+                                             const js::Value &, jsid *);
+    if (idval.isObject())
+        return js_InternNonIntElementIdSlow(cx, obj, idval, idp);
+
+
+    return js_ValueToStringId(cx, idval, idp);
+}
+
+inline
+
+# 107 "jsatominlines.h"
+       bool
+js_InternNonIntElementId(JSContext *cx, JSObject *obj, const js::Value &idval,
+                         jsid *idp, js::Value *vp)
+{
+    ((void) 0);
+
+
+    extern bool js_InternNonIntElementIdSlow(JSContext *, JSObject *,
+                                             const js::Value &,
+                                             jsid *, js::Value *);
+    if (idval.isObject())
+        return js_InternNonIntElementIdSlow(cx, obj, idval, idp, vp);
+
+
+    JSAtom *atom;
+    if (js_ValueToAtom(cx, idval, &atom)) {
+        *idp = ATOM_TO_JSID(atom);
+        vp->setString((atom));
+        return true;
+    }
+    return false;
+}
+
+inline
+
+# 130 "jsatominlines.h"
+       bool
+js_Int32ToId(JSContext* cx, int32 index, jsid* id)
+{
+    if (INT_FITS_IN_JSID(index)) {
+        *id = INT_TO_JSID(index);
+        return true;
+    }
+
+    JSString* str = js_NumberToString(cx, index);
+    if (!str)
+        return false;
+
+    return js_ValueToStringId(cx, js::StringValue(str), id);
+}
+# 74 "jsxml.cpp" 2
+
+# 1 "jsinterpinlines.h" 1
+# 48 "jsinterpinlines.h"
+# 1 "jsprobes.h" 1
+# 45 "jsprobes.h"
+namespace js {
+
+class Probes {
+    static const char nullName[];
+
+    static const char *FunctionClassname(const JSFunction *fun);
+    static const char *ScriptFilename(JSScript *script);
+    static int FunctionLineNumber(JSContext *cx, const JSFunction *fun);
+    static const char *FunctionName(JSContext *cx, const JSFunction *fun, JSAutoByteString *bytes);
+
+    static void enterJSFunImpl(JSContext *cx, JSFunction *fun, JSScript *script);
+    static void handleFunctionReturn(JSContext *cx, JSFunction *fun, JSScript *script);
+    static void finalizeObjectImpl(JSObject *obj);
+  public:
+    static bool callTrackingActive(JSContext *);
+
+    static void enterJSFun(JSContext *, JSFunction *, JSScript *, int counter = 1);
+    static void exitJSFun(JSContext *, JSFunction *, JSScript *, int counter = 0);
+
+    static void startExecution(JSContext *cx, JSScript *script);
+    static void stopExecution(JSContext *cx, JSScript *script);
+
+    static void resizeHeap(JSCompartment *compartment, size_t oldSize, size_t newSize);
+
+
+    static void createObject(JSContext *cx, JSObject *obj);
+
+    static void resizeObject(JSContext *cx, JSObject *obj, size_t oldSize, size_t newSize);
+
+
+    static void finalizeObject(JSObject *obj);
+# 85 "jsprobes.h"
+    static void createString(JSContext *cx, JSString *string, size_t length);
+
+
+
+
+    static void finalizeString(JSString *string);
+
+    static void compileScriptBegin(JSContext *cx, const char *filename, int lineno);
+    static void compileScriptEnd(JSContext *cx, JSScript *script, const char *filename, int lineno);
+
+    static void calloutBegin(JSContext *cx, JSFunction *fun);
+    static void calloutEnd(JSContext *cx, JSFunction *fun);
+
+    static void acquireMemory(JSContext *cx, void *address, size_t nbytes);
+    static void releaseMemory(JSContext *cx, void *address, size_t nbytes);
+
+    static void GCStart(JSCompartment *compartment);
+    static void GCEnd(JSCompartment *compartment);
+    static void GCStartMarkPhase(JSCompartment *compartment);
+
+    static void GCEndMarkPhase(JSCompartment *compartment);
+    static void GCStartSweepPhase(JSCompartment *compartment);
+    static void GCEndSweepPhase(JSCompartment *compartment);
+
+    static bool CustomMark(JSString *string);
+    static bool CustomMark(const char *string);
+    static bool CustomMark(int marker);
+
+    static bool startProfiling();
+    static void stopProfiling();
+};
+
+inline
+
+# 117 "jsprobes.h"
+       bool
+Probes::callTrackingActive(JSContext *cx)
+{
+# 132 "jsprobes.h"
+    return false;
+}
+
+inline void
+Probes::enterJSFun(JSContext *cx, JSFunction *fun, JSScript *script, int counter)
+{
+
+
+
+
+
+
+
+}
+
+inline void
+Probes::exitJSFun(JSContext *cx, JSFunction *fun, JSScript *script, int counter)
+{
+# 159 "jsprobes.h"
+}
+
+inline void
+Probes::createObject(JSContext *cx, JSObject *obj)
+{
+
+
+
+
+
+
+}
+
+inline void
+Probes::finalizeObject(JSObject *obj)
+{
+# 183 "jsprobes.h"
+}
+
+inline void
+Probes::startExecution(JSContext *cx, JSScript *script)
+{
+# 196 "jsprobes.h"
+}
+
+inline void
+Probes::stopExecution(JSContext *cx, JSScript *script)
+{
+# 209 "jsprobes.h"
+}
+
+
+
+
+
+
+inline void Probes::resizeHeap(JSCompartment *compartment, size_t oldSize, size_t newSize) {}
+inline void Probes::resizeObject(JSContext *cx, JSObject *obj, size_t oldSize, size_t newSize) {}
+inline void Probes::createString(JSContext *cx, JSString *string, size_t length) {}
+inline void Probes::finalizeString(JSString *string) {}
+inline void Probes::compileScriptBegin(JSContext *cx, const char *filename, int lineno) {}
+inline void Probes::compileScriptEnd(JSContext *cx, JSScript *script, const char *filename, int lineno) {}
+inline void Probes::calloutBegin(JSContext *cx, JSFunction *fun) {}
+inline void Probes::calloutEnd(JSContext *cx, JSFunction *fun) {}
+inline void Probes::acquireMemory(JSContext *cx, void *address, size_t nbytes) {}
+inline void Probes::releaseMemory(JSContext *cx, void *address, size_t nbytes) {}
+inline void Probes::GCStart(JSCompartment *compartment) {}
+inline void Probes::GCEnd(JSCompartment *compartment) {}
+inline void Probes::GCStartMarkPhase(JSCompartment *compartment) {}
+inline void Probes::GCEndMarkPhase(JSCompartment *compartment) {}
+inline void Probes::GCStartSweepPhase(JSCompartment *compartment) {}
+inline void Probes::GCEndSweepPhase(JSCompartment *compartment) {}
+inline bool Probes::CustomMark(JSString *string) { return (JSIntn)1; }
+inline bool Probes::CustomMark(const char *string) { return (JSIntn)1; }
+inline bool Probes::CustomMark(int marker) { return (JSIntn)1; }
+
+struct AutoFunctionCallProbe {
+    JSContext * const cx;
+    JSFunction *fun;
+    JSScript *script;
+   
+
+    AutoFunctionCallProbe(JSContext *cx, JSFunction *fun, JSScript *script
+                          )
+      : cx(cx), fun(fun), script(script)
+    {
+        do { } while (0);
+        Probes::enterJSFun(cx, fun, script);
+    }
+
+    ~AutoFunctionCallProbe() {
+        Probes::exitJSFun(cx, fun, script);
+    }
+};
+
+}
+# 49 "jsinterpinlines.h" 2
+
+# 1 "methodjit/MethodJIT.h" 1
+# 51 "jsinterpinlines.h" 2
+
+# 1 "jsfuninlines.h" 1
+# 46 "jsfuninlines.h"
+inline
+
+# 46 "jsfuninlines.h"
+       bool
+JSFunction::inStrictMode() const
+{
+    return script()->strictModeCode;
+}
+# 53 "jsinterpinlines.h" 2
+
+inline void
+JSStackFrame::initPrev(JSContext *cx)
+{
+    ((void) 0);
+    if (JSFrameRegs *regs = cx->regs) {
+        prev_ = regs->fp;
+        prevpc_ = regs->pc;
+        ((void) 0)
+                                                                                       ;
+    } else {
+        prev_ = __null;
+
+
+
+    }
+}
+
+inline void
+JSStackFrame::resetGeneratorPrev(JSContext *cx)
+{
+    flags_ |= JSFRAME_HAS_PREVPC;
+    initPrev(cx);
+}
+
+inline void
+JSStackFrame::initCallFrame(JSContext *cx, JSObject &callee, JSFunction *fun,
+                            uint32 nactual, uint32 flagsArg)
+{
+    ((void) 0)
+
+                                                          ;
+    ((void) 0);
+
+
+    flags_ = JSFRAME_FUNCTION | JSFRAME_HAS_PREVPC | JSFRAME_HAS_SCOPECHAIN | flagsArg;
+    exec.fun = fun;
+    args.nactual = nactual;
+    scopeChain_ = callee.getParent();
+    initPrev(cx);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    ((void) 0);
+}
+
+inline void
+JSStackFrame::resetInvokeCallFrame()
+{
+
+
+    ((void) 0)
+
+
+
+
+
+
+
+                                                             ;
+    flags_ &= JSFRAME_FUNCTION |
+              JSFRAME_OVERFLOW_ARGS |
+              JSFRAME_HAS_PREVPC |
+              JSFRAME_UNDERFLOW_ARGS;
+
+    ((void) 0);
+    scopeChain_ = callee().getParent();
+}
+
+inline void
+JSStackFrame::initCallFrameCallerHalf(JSContext *cx, uint32 flagsArg,
+                                      void *ncode)
+{
+    ((void) 0)
+
+
+                                                          ;
+
+    flags_ = JSFRAME_FUNCTION | flagsArg;
+    prev_ = cx->regs->fp;
+    ncode_ = ncode;
+}
+
+
+
+
+
+inline void
+JSStackFrame::initCallFrameEarlyPrologue(JSFunction *fun, uint32 nactual)
+{
+    exec.fun = fun;
+    if (flags_ & (JSFRAME_OVERFLOW_ARGS | JSFRAME_UNDERFLOW_ARGS))
+        args.nactual = nactual;
+}
+
+
+
+
+
+inline void
+JSStackFrame::initCallFrameLatePrologue()
+{
+    SetValueRangeToUndefined(slots(), script()->nfixed);
+}
+
+inline void
+JSStackFrame::initEvalFrame(JSContext *cx, JSScript *script, JSStackFrame *prev, uint32 flagsArg)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+
+    js::Value *dstvp = (js::Value *)this - 2;
+    js::Value *srcvp = prev->flags_ & (JSFRAME_GLOBAL | JSFRAME_EVAL)
+                       ? (js::Value *)prev - 2
+                       : prev->formalArgs() - 2;
+    dstvp[0] = srcvp[0];
+    dstvp[1] = srcvp[1];
+    ((void) 0)
+                                                  ;
+
+
+    flags_ = flagsArg | JSFRAME_HAS_PREVPC | JSFRAME_HAS_SCOPECHAIN |
+             (prev->flags_ & (JSFRAME_FUNCTION | JSFRAME_GLOBAL | JSFRAME_HAS_CALL_OBJ));
+    if (isFunctionFrame()) {
+        exec = prev->exec;
+        args.script = script;
+    } else {
+        exec.script = script;
+    }
+
+    scopeChain_ = &prev->scopeChain();
+    ((void) 0);
+
+    prev_ = prev;
+    prevpc_ = prev->pc(cx);
+    ((void) 0);
+    ((void) 0);
+    setAnnotation(prev->annotation());
+}
+
+inline void
+JSStackFrame::initGlobalFrame(JSScript *script, JSObject &chain, uint32 flagsArg)
+{
+    ((void) 0);
+
+
+    js::Value *vp = (js::Value *)this - 2;
+    vp[0].setUndefined();
+    vp[1].setUndefined();
+
+
+    flags_ = flagsArg | JSFRAME_GLOBAL | JSFRAME_HAS_PREVPC | JSFRAME_HAS_SCOPECHAIN;
+    exec.script = script;
+    args.script = (JSScript *)0xbad;
+    scopeChain_ = &chain;
+    prev_ = __null;
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+}
+
+inline void
+JSStackFrame::initDummyFrame(JSContext *cx, JSObject &chain)
+{
+    js::PodZero(this);
+    flags_ = JSFRAME_DUMMY | JSFRAME_HAS_PREVPC | JSFRAME_HAS_SCOPECHAIN;
+    initPrev(cx);
+    chain.isGlobal();
+    setScopeChainNoCallObj(chain);
+}
+
+inline void
+JSStackFrame::stealFrameAndSlots(js::Value *vp, JSStackFrame *otherfp,
+                                 js::Value *othervp, js::Value *othersp)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    PodCopy(vp, othervp, othersp - othervp);
+    ((void) 0);
+
+
+    if (otherfp->hasOverflowArgs())
+        Debug_SetValueRangeToCrashOnTouch(othervp, othervp + 2 + otherfp->numFormalArgs());
+
+
+
+
+
+
+
+    if (hasCallObj()) {
+        callObj().setPrivate(this);
+        otherfp->flags_ &= ~JSFRAME_HAS_CALL_OBJ;
+        if (js_IsNamedLambda(fun())) {
+            JSObject *env = callObj().getParent();
+            ((void) 0);
+            env->setPrivate(this);
+        }
+    }
+    if (hasArgsObj()) {
+        JSObject &args = argsObj();
+        ((void) 0);
+        if (args.isNormalArguments())
+            args.setPrivate(this);
+        else
+            ((void) 0);
+        otherfp->flags_ &= ~JSFRAME_HAS_ARGS_OBJ;
+    }
+}
+
+inline js::Value &
+JSStackFrame::canonicalActualArg(uintN i) const
+{
+    if (i < numFormalArgs())
+        return formalArg(i);
+    ((void) 0);
+    return actualArgs()[i];
+}
+
+template <class Op>
+inline void
+JSStackFrame::forEachCanonicalActualArg(Op op)
+{
+    uintN nformal = fun()->nargs;
+    js::Value *formals = formalArgsEnd() - nformal;
+    uintN nactual = numActualArgs();
+    if (nactual <= nformal) {
+        uintN i = 0;
+        js::Value *actualsEnd = formals + nactual;
+        for (js::Value *p = formals; p != actualsEnd; ++p, ++i)
+            op(i, p);
+    } else {
+        uintN i = 0;
+        js::Value *formalsEnd = formalArgsEnd();
+        for (js::Value *p = formals; p != formalsEnd; ++p, ++i)
+            op(i, p);
+        js::Value *actuals = formalsEnd - (nactual + 2);
+        js::Value *actualsEnd = formals - 2;
+        for (js::Value *p = actuals; p != actualsEnd; ++p, ++i)
+            op(i, p);
+    }
+}
+
+template <class Op>
+inline void
+JSStackFrame::forEachFormalArg(Op op)
+{
+    js::Value *formals = formalArgsEnd() - fun()->nargs;
+    js::Value *formalsEnd = formalArgsEnd();
+    uintN i = 0;
+    for (js::Value *p = formals; p != formalsEnd; ++p, ++i)
+        op(i, p);
+}
+
+namespace js {
+
+struct CopyNonHoleArgsTo
+{
+    CopyNonHoleArgsTo(JSObject *aobj, Value *dst) : aobj(aobj), dst(dst) {}
+    JSObject *aobj;
+    Value *dst;
+    void operator()(uintN argi, Value *src) {
+        if (aobj->getArgsElement(argi).isMagic(JS_ARGS_HOLE))
+            dst->setUndefined();
+        else
+            *dst = *src;
+        ++dst;
+    }
+};
+
+struct CopyTo
+{
+    Value *dst;
+    CopyTo(Value *dst) : dst(dst) {}
+    void operator()(uintN, Value *src) {
+        *dst++ = *src;
+    }
+};
+
+}
+
+__attribute__((always_inline)) inline void
+JSStackFrame::clearMissingArgs()
+{
+    if (flags_ & JSFRAME_UNDERFLOW_ARGS)
+        SetValueRangeToUndefined(formalArgs() + numActualArgs(), formalArgsEnd());
+}
+
+inline
+
+# 347 "jsinterpinlines.h"
+       bool
+JSStackFrame::computeThis(JSContext *cx)
+{
+    js::Value &thisv = thisValue();
+    if (thisv.isObject())
+        return true;
+    if (isFunctionFrame()) {
+        if (fun()->inStrictMode())
+            return true;
+
+
+
+
+
+
+
+        ((void) 0);
+    }
+    if (!js::BoxThisForVp(cx, &thisv - 1))
+        return false;
+    return true;
+}
+
+inline JSObject &
+JSStackFrame::varobj(js::StackSegment *seg) const
+{
+    ((void) 0);
+    return isFunctionFrame() ? callObj() : seg->getInitialVarObj();
+}
+
+inline JSObject &
+JSStackFrame::varobj(JSContext *cx) const
+{
+    ((void) 0);
+    return isFunctionFrame() ? callObj() : cx->activeSegment()->getInitialVarObj();
+}
+
+inline uintN
+JSStackFrame::numActualArgs() const
+{
+    ((void) 0);
+    if ((__builtin_expect((flags_ & (JSFRAME_OVERFLOW_ARGS | JSFRAME_UNDERFLOW_ARGS)), 0)))
+        return hasArgsObj() ? argsObj().getArgsInitialLength() : args.nactual;
+    return numFormalArgs();
+}
+
+inline js::Value *
+JSStackFrame::actualArgs() const
+{
+    ((void) 0);
+    js::Value *argv = formalArgs();
+    if ((__builtin_expect((flags_ & JSFRAME_OVERFLOW_ARGS), 0))) {
+        uintN nactual = hasArgsObj() ? argsObj().getArgsInitialLength() : args.nactual;
+        return argv - (2 + nactual);
+    }
+    return argv;
+}
+
+inline js::Value *
+JSStackFrame::actualArgsEnd() const
+{
+    ((void) 0);
+    if ((__builtin_expect((flags_ & JSFRAME_OVERFLOW_ARGS), 0)))
+        return formalArgs() - 2;
+    return formalArgs() + numActualArgs();
+}
+
+inline void
+JSStackFrame::setArgsObj(JSObject &obj)
+{
+    ((void) 0);
+    ((void) 0);
+    args.obj = &obj;
+    flags_ |= JSFRAME_HAS_ARGS_OBJ;
+}
+
+inline void
+JSStackFrame::clearArgsObj()
+{
+    ((void) 0);
+    args.nactual = args.obj->getArgsInitialLength();
+    flags_ ^= JSFRAME_HAS_ARGS_OBJ;
+}
+
+inline void
+JSStackFrame::setScopeChainNoCallObj(JSObject &obj)
+{
+# 442 "jsinterpinlines.h"
+    scopeChain_ = &obj;
+    flags_ |= JSFRAME_HAS_SCOPECHAIN;
+    ((void) 0);
+}
+
+inline void
+JSStackFrame::setScopeChainAndCallObj(JSObject &obj)
+{
+    ((void) 0);
+    ((void) 0);
+    scopeChain_ = &obj;
+    flags_ |= JSFRAME_HAS_SCOPECHAIN | JSFRAME_HAS_CALL_OBJ;
+}
+
+inline void
+JSStackFrame::clearCallObj()
+{
+    ((void) 0);
+    flags_ ^= JSFRAME_HAS_CALL_OBJ;
+}
+
+inline JSObject &
+JSStackFrame::callObj() const
+{
+    ((void) 0);
+    JSObject *pobj = &scopeChain();
+    while ((__builtin_expect((pobj->getClass() != &js_CallClass), 0))) {
+        ((void) 0);
+        pobj = pobj->getParent();
+    }
+    return *pobj;
+}
+
+inline JSObject *
+JSStackFrame::maybeCallObj() const
+{
+    return hasCallObj() ? &callObj() : __null;
+}
+
+namespace js {
+
+class AutoPreserveEnumerators {
+    JSContext *cx;
+    JSObject *enumerators;
+
+  public:
+    AutoPreserveEnumerators(JSContext *cx) : cx(cx), enumerators(cx->enumerators)
+    {
+    }
+
+    ~AutoPreserveEnumerators()
+    {
+        cx->enumerators = enumerators;
+    }
+};
+
+struct AutoInterpPreparer {
+    JSContext *cx;
+    JSScript *script;
+
+    AutoInterpPreparer(JSContext *cx, JSScript *script)
+      : cx(cx), script(script)
+    {
+        cx->interpLevel++;
+    }
+
+    ~AutoInterpPreparer()
+    {
+        --cx->interpLevel;
+    }
+};
+
+inline void
+PutActivationObjects(JSContext *cx, JSStackFrame *fp)
+{
+    ((void) 0);
+    ((void) 0);
+
+
+    if (fp->hasCallObj()) {
+        js_PutCallObject(cx, fp);
+    } else if (fp->hasArgsObj()) {
+        js_PutArgsObject(cx, fp);
+    }
+}
+
+
+
+
+
+
+inline void
+PutOwnedActivationObjects(JSContext *cx, JSStackFrame *fp)
+{
+    ((void) 0);
+    if (!fp->isEvalFrame() || fp->script()->strictModeCode)
+        PutActivationObjects(cx, fp);
+}
+
+class InvokeSessionGuard
+{
+    InvokeArgsGuard args_;
+    InvokeFrameGuard frame_;
+    Value savedCallee_, savedThis_;
+    Value *formals_, *actuals_;
+    unsigned nformals_;
+    JSScript *script_;
+    Value *stackLimit_;
+    jsbytecode *stop_;
+
+    bool optimized() const { return frame_.pushed(); }
+
+  public:
+    InvokeSessionGuard() : args_(), frame_() {}
+    inline ~InvokeSessionGuard();
+
+    bool start(JSContext *cx, const Value &callee, const Value &thisv, uintN argc);
+    bool invoke(JSContext *cx) const;
+
+    bool started() const {
+        return args_.pushed();
+    }
+
+    Value &operator[](unsigned i) const {
+        ((void) 0);
+        Value &arg = i < nformals_ ? formals_[i] : actuals_[i];
+        ((void) 0);
+        ((void) 0);
+        return arg;
+    }
+
+    uintN argc() const {
+        return args_.argc();
+    }
+
+    const Value &rval() const {
+        return optimized() ? frame_.fp()->returnValue() : args_.rval();
+    }
+};
+
+inline
+InvokeSessionGuard::~InvokeSessionGuard()
+{
+    if (frame_.pushed())
+        PutActivationObjects(frame_.pushedFrameContext(), frame_.fp());
+}
+
+inline
+
+# 589 "jsinterpinlines.h"
+       bool
+InvokeSessionGuard::invoke(JSContext *cx) const
+{
+
+
+
+    formals_[-2] = savedCallee_;
+    formals_[-1] = savedThis_;
+
+
+
+
+
+    if (!optimized())
+
+        return Invoke(cx, args_, 0);
+
+
+    JSStackFrame *fp = frame_.fp();
+    fp->clearMissingArgs();
+    PutActivationObjects(cx, frame_.fp());
+    fp->resetInvokeCallFrame();
+    SetValueRangeToUndefined(fp->slots(), script_->nfixed);
+
+    JSBool ok;
+    {
+        AutoPreserveEnumerators preserve(cx);
+        Probes::enterJSFun(cx, fp->fun(), script_);
+
+
+
+
+
+        cx->regs->pc = script_->code;
+        ok = Interpret(cx, cx->fp());
+
+        Probes::exitJSFun(cx, fp->fun(), script_);
+    }
+
+
+    return ok;
+}
+
+namespace detail {
+
+template<typename T> class PrimitiveBehavior { };
+
+template<>
+class PrimitiveBehavior<JSString *> {
+  public:
+    static inline bool isType(const Value &v) { return v.isString(); }
+    static inline JSString *extract(const Value &v) { return v.toString(); }
+    static inline Class *getClass() { return &js_StringClass; }
+};
+
+template<>
+class PrimitiveBehavior<bool> {
+  public:
+    static inline bool isType(const Value &v) { return v.isBoolean(); }
+    static inline bool extract(const Value &v) { return v.toBoolean(); }
+    static inline Class *getClass() { return &js_BooleanClass; }
+};
+
+template<>
+class PrimitiveBehavior<double> {
+  public:
+    static inline bool isType(const Value &v) { return v.isNumber(); }
+    static inline double extract(const Value &v) { return v.toNumber(); }
+    static inline Class *getClass() { return &js_NumberClass; }
+};
+
+}
+# 703 "jsinterpinlines.h"
+inline
+
+# 703 "jsinterpinlines.h"
+       bool
+ComputeImplicitThis(JSContext *cx, JSObject *obj, const Value &funval, Value *vp)
+{
+    vp->setUndefined();
+
+    if (!funval.isObject())
+        return true;
+
+    if (!obj->isGlobal()) {
+        if (IsCacheableNonGlobalScope(obj))
+            return true;
+    } else {
+        JSObject *callee = &funval.toObject();
+
+        if (callee->isProxy()) {
+            callee = callee->unwrap();
+            if (!callee->isFunction())
+                return true;
+        }
+        if (callee->isFunction()) {
+            JSFunction *fun = callee->getFunctionPrivate();
+            if (fun->isInterpreted() && fun->inStrictMode())
+                return true;
+        }
+        if (callee->getGlobal() == cx->fp()->scopeChain().getGlobal())
+            return true;;
+    }
+
+    obj = obj->thisObject(cx);
+    if (!obj)
+        return false;
+
+    vp->setObject(*obj);
+    return true;
+}
+
+template <typename T>
+
+bool
+# 741 "jsinterpinlines.h"
+GetPrimitiveThis(JSContext *cx, Value *vp, T *v)
+{
+    typedef detail::PrimitiveBehavior<T> Behavior;
+
+    const Value &thisv = vp[1];
+    if (Behavior::isType(thisv)) {
+        *v = Behavior::extract(thisv);
+        return true;
+    }
+
+    if (thisv.isObject() && thisv.toObject().getClass() == Behavior::getClass()) {
+        *v = Behavior::extract(thisv.toObject().getPrimitiveThis());
+        return true;
+    }
+
+    ReportIncompatibleMethod(cx, vp, Behavior::getClass());
+    return false;
+}
+# 771 "jsinterpinlines.h"
+__attribute__((always_inline)) inline JSObject *
+ValuePropertyBearer(JSContext *cx, const Value &v, int spindex)
+{
+    if (v.isObject())
+        return &v.toObject();
+
+    JSProtoKey protoKey;
+    if (v.isString()) {
+        protoKey = JSProto_String;
+    } else if (v.isNumber()) {
+        protoKey = JSProto_Number;
+    } else if (v.isBoolean()) {
+        protoKey = JSProto_Boolean;
+    } else {
+        ((void) 0);
+        js_ReportIsNullOrUndefined(cx, spindex, v, __null);
+        return __null;
+    }
+
+    JSObject *pobj;
+    if (!js_GetClassPrototype(cx, __null, protoKey, &pobj))
+        return __null;
+    return pobj;
+}
+
+static inline
+
+# 796 "jsinterpinlines.h"
+              bool
+ScriptEpilogue(JSContext *cx, JSStackFrame *fp, JSBool ok)
+{
+    if (!fp->isExecuteFrame())
+        Probes::exitJSFun(cx, fp->maybeFun(), fp->maybeScript());
+
+    JSInterpreterHook hook =
+        fp->isExecuteFrame() ? cx->debugHooks->executeHook : cx->debugHooks->callHook;
+
+    void* hookData;
+    if ((__builtin_expect((hook != __null), 0)) && (hookData = fp->maybeHookData()))
+        hook(cx, fp, (JSIntn)0, &ok, hookData);
+
+    if (fp->isEvalFrame()) {
+
+
+
+
+
+
+        if (fp->script()->strictModeCode) {
+            ((void) 0);
+            ((void) 0);
+            ((void) 0);
+            ((void) 0);
+            js_PutCallObject(cx, fp);
+        }
+    } else {
+
+
+
+
+
+        if (fp->isFunctionFrame() && !fp->isYielding()) {
+            ((void) 0);
+            PutActivationObjects(cx, fp);
+        }
+    }
+
+
+
+
+
+    if (fp->isConstructing() && ok) {
+        if (fp->returnValue().isPrimitive())
+            fp->setReturnValue(ObjectValue(fp->constructorThis()));
+        ;
+    }
+
+    return ok;
+}
+
+}
+# 76 "jsxml.cpp" 2
+# 1 "jsobjinlines.h" 1
+# 45 "jsobjinlines.h"
+# 1 "jsdate.h" 1
+# 49 "jsdate.h"
+extern js::Class js_DateClass;
+
+inline
+
+# 51 "jsdate.h"
+       bool
+JSObject::isDate() const
+{
+    return getClass() == &js_DateClass;
+}
+
+
+
+
+
+
+
+extern JSObject *
+js_InitDateClass(JSContext *cx, JSObject *obj);
+# 74 "jsdate.h"
+extern __attribute__((visibility ("default"))) JSObject*
+js_NewDateObjectMsec(JSContext* cx, jsdouble msec_time);
+# 84 "jsdate.h"
+extern __attribute__((visibility ("default"))) JSObject*
+js_NewDateObject(JSContext* cx, int year, int mon, int mday,
+                 int hour, int min, int sec);
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+js_DateIsValid(JSContext *cx, JSObject* obj);
+
+extern __attribute__((visibility ("default"))) int
+js_DateGetYear(JSContext *cx, JSObject* obj);
+
+extern __attribute__((visibility ("default"))) int
+js_DateGetMonth(JSContext *cx, JSObject* obj);
+
+extern __attribute__((visibility ("default"))) int
+js_DateGetDate(JSContext *cx, JSObject* obj);
+
+extern __attribute__((visibility ("default"))) int
+js_DateGetHours(JSContext *cx, JSObject* obj);
+
+extern __attribute__((visibility ("default"))) int
+js_DateGetMinutes(JSContext *cx, JSObject* obj);
+
+extern __attribute__((visibility ("default"))) int
+js_DateGetSeconds(JSContext *cx, JSObject* obj);
+
+extern __attribute__((visibility ("default"))) jsdouble
+js_DateGetMsecSinceEpoch(JSContext *cx, JSObject *obj);
+
+typedef uint32 JSIntervalTime;
+
+extern __attribute__((visibility ("default"))) JSIntervalTime
+js_IntervalNow();
+
+
+JSBool
+js_Date(JSContext *cx, uintN argc, js::Value *vp);
+# 46 "jsobjinlines.h" 2
+
+# 1 "jsiter.h" 1
+# 49 "jsiter.h"
+# 1 "jsversion.h" 1
+# 50 "jsiter.h" 2
+# 69 "jsiter.h"
+namespace js {
+
+struct NativeIterator {
+    JSObject *obj;
+    jsid *props_array;
+    jsid *props_cursor;
+    jsid *props_end;
+    uint32 *shapes_array;
+    uint32 shapes_length;
+    uint32 shapes_key;
+    uint32 flags;
+    JSObject *next;
+
+    bool isKeyIter() const { return (flags & 0x2) == 0; }
+
+    inline jsid *begin() const {
+        return props_array;
+    }
+
+    inline jsid *end() const {
+        return props_end;
+    }
+
+    size_t numKeys() const {
+        return end() - begin();
+    }
+
+    jsid *current() const {
+        ((void) 0);
+        return props_cursor;
+    }
+
+    void incCursor() {
+        props_cursor = props_cursor + 1;
+    }
+
+    static NativeIterator *allocateIterator(JSContext *cx, uint32 slength,
+                                            const js::AutoIdVector &props);
+    void init(JSObject *obj, uintN flags, uint32 slength, uint32 key);
+
+    void mark(JSTracer *trc);
+};
+
+
+bool
+# 113 "jsiter.h"
+VectorToIdArray(JSContext *cx, js::AutoIdVector &props, JSIdArray **idap);
+
+__attribute__((visibility ("default"))) bool
+GetPropertyNames(JSContext *cx, JSObject *obj, uintN flags, js::AutoIdVector *props);
+
+
+bool
+# 119 "jsiter.h"
+GetIterator(JSContext *cx, JSObject *obj, uintN flags, js::Value *vp);
+
+
+bool
+# 122 "jsiter.h"
+VectorToKeyIterator(JSContext *cx, JSObject *obj, uintN flags, js::AutoIdVector &props, js::Value *vp);
+
+
+bool
+# 125 "jsiter.h"
+VectorToValueIterator(JSContext *cx, JSObject *obj, uintN flags, js::AutoIdVector &props, js::Value *vp);
+
+
+
+
+
+
+bool
+# 132 "jsiter.h"
+EnumeratedIdVectorToIterator(JSContext *cx, JSObject *obj, uintN flags, js::AutoIdVector &props, js::Value *vp);
+
+}
+
+
+
+
+
+
+
+extern __attribute__((visibility ("default"))) JSBool
+js_ValueToIterator(JSContext *cx, uintN flags, js::Value *vp);
+
+extern __attribute__((visibility ("default"))) JSBool
+js_CloseIterator(JSContext *cx, JSObject *iterObj);
+
+
+bool
+# 149 "jsiter.h"
+js_SuppressDeletedProperty(JSContext *cx, JSObject *obj, jsid id);
+
+
+bool
+# 152 "jsiter.h"
+js_SuppressDeletedIndexProperties(JSContext *cx, JSObject *obj, jsint begin, jsint end);
+
+
+
+
+
+
+extern JSBool
+js_IteratorMore(JSContext *cx, JSObject *iterobj, js::Value *rval);
+
+extern JSBool
+js_IteratorNext(JSContext *cx, JSObject *iterobj, js::Value *rval);
+
+extern JSBool
+js_ThrowStopIteration(JSContext *cx);
+
+
+
+
+
+
+typedef enum JSGeneratorState {
+    JSGEN_NEWBORN,
+    JSGEN_OPEN,
+    JSGEN_RUNNING,
+    JSGEN_CLOSING,
+    JSGEN_CLOSED
+} JSGeneratorState;
+
+struct JSGenerator {
+    JSObject *obj;
+    JSGeneratorState state;
+    JSFrameRegs regs;
+    JSObject *enumerators;
+    JSStackFrame *floating;
+    js::Value floatingStack[1];
+
+    JSStackFrame *floatingFrame() {
+        return floating;
+    }
+
+    JSStackFrame *liveFrame() {
+        ((void) 0)
+                                               ;
+        return regs.fp;
+    }
+};
+
+extern JSObject *
+js_NewGenerator(JSContext *cx);
+# 214 "jsiter.h"
+inline JSStackFrame *
+js_FloatingFrameIfGenerator(JSContext *cx, JSStackFrame *fp)
+{
+    ((void) 0);
+    if ((__builtin_expect((fp->isGeneratorFrame()), 0)))
+        return cx->generatorFor(fp)->floatingFrame();
+    return fp;
+}
+
+
+extern JSGenerator *
+js_FloatingFrameToGenerator(JSStackFrame *fp);
+
+inline JSStackFrame *
+js_LiveFrameIfGenerator(JSStackFrame *fp)
+{
+    return fp->isGeneratorFrame() ? js_FloatingFrameToGenerator(fp)->liveFrame() : fp;
+}
+
+
+
+extern js::Class js_GeneratorClass;
+extern js::Class js_IteratorClass;
+extern js::Class js_StopIterationClass;
+
+static inline
+
+# 239 "jsiter.h"
+              bool
+js_ValueIsStopIteration(const js::Value &v)
+{
+    return v.isObject() && v.toObject().getClass() == &js_StopIterationClass;
+}
+
+extern JSObject *
+js_InitIteratorClasses(JSContext *cx, JSObject *obj);
+# 48 "jsobjinlines.h" 2
+
+
+# 1 "jsprobes.h" 1
+# 51 "jsobjinlines.h" 2
+
+# 1 "jsproxy.h" 1
+# 49 "jsproxy.h"
+namespace js {
+
+
+class __attribute__((visibility ("default"))) JSProxyHandler {
+    void *mFamily;
+  public:
+    explicit JSProxyHandler(void *family);
+    virtual ~JSProxyHandler();
+
+
+    virtual bool getPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
+                                       PropertyDescriptor *desc) = 0;
+    virtual bool getOwnPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
+                                          PropertyDescriptor *desc) = 0;
+    virtual bool defineProperty(JSContext *cx, JSObject *proxy, jsid id,
+                                PropertyDescriptor *desc) = 0;
+    virtual bool getOwnPropertyNames(JSContext *cx, JSObject *proxy, js::AutoIdVector &props) = 0;
+    virtual bool delete_(JSContext *cx, JSObject *proxy, jsid id, bool *bp) = 0;
+    virtual bool enumerate(JSContext *cx, JSObject *proxy, js::AutoIdVector &props) = 0;
+    virtual bool fix(JSContext *cx, JSObject *proxy, Value *vp) = 0;
+
+
+    virtual bool has(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
+    virtual bool hasOwn(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
+    virtual bool get(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, js::Value *vp);
+    virtual bool set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, bool strict,
+                     js::Value *vp);
+    virtual bool keys(JSContext *cx, JSObject *proxy, js::AutoIdVector &props);
+    virtual bool iterate(JSContext *cx, JSObject *proxy, uintN flags, js::Value *vp);
+
+
+    virtual bool call(JSContext *cx, JSObject *proxy, uintN argc, js::Value *vp);
+    virtual bool construct(JSContext *cx, JSObject *proxy,
+                                          uintN argc, js::Value *argv, js::Value *rval);
+    virtual bool hasInstance(JSContext *cx, JSObject *proxy, const js::Value *vp, bool *bp);
+    virtual JSType typeOf(JSContext *cx, JSObject *proxy);
+    virtual JSString *obj_toString(JSContext *cx, JSObject *proxy);
+    virtual JSString *fun_toString(JSContext *cx, JSObject *proxy, uintN indent);
+    virtual void finalize(JSContext *cx, JSObject *proxy);
+    virtual void trace(JSTracer *trc, JSObject *proxy);
+
+    virtual bool isOuterWindow() {
+        return false;
+    }
+
+    inline void *family() {
+        return mFamily;
+    }
+};
+
+
+class JSProxy {
+  public:
+
+    static bool getPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
+                                      PropertyDescriptor *desc);
+    static bool getPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set, Value *vp);
+    static bool getOwnPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
+                                         PropertyDescriptor *desc);
+    static bool getOwnPropertyDescriptor(JSContext *cx, JSObject *proxy, jsid id, bool set,
+                                         Value *vp);
+    static bool defineProperty(JSContext *cx, JSObject *proxy, jsid id, PropertyDescriptor *desc);
+    static bool defineProperty(JSContext *cx, JSObject *proxy, jsid id, const Value &v);
+    static bool getOwnPropertyNames(JSContext *cx, JSObject *proxy, js::AutoIdVector &props);
+    static bool delete_(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
+    static bool enumerate(JSContext *cx, JSObject *proxy, js::AutoIdVector &props);
+    static bool fix(JSContext *cx, JSObject *proxy, Value *vp);
+
+
+    static bool has(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
+    static bool hasOwn(JSContext *cx, JSObject *proxy, jsid id, bool *bp);
+    static bool get(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, Value *vp);
+    static bool set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, bool strict,
+                    Value *vp);
+    static bool keys(JSContext *cx, JSObject *proxy, js::AutoIdVector &props);
+    static bool iterate(JSContext *cx, JSObject *proxy, uintN flags, Value *vp);
+
+
+    static bool call(JSContext *cx, JSObject *proxy, uintN argc, js::Value *vp);
+    static bool construct(JSContext *cx, JSObject *proxy, uintN argc, js::Value *argv, js::Value *rval);
+    static bool hasInstance(JSContext *cx, JSObject *proxy, const js::Value *vp, bool *bp);
+    static JSType typeOf(JSContext *cx, JSObject *proxy);
+    static JSString *obj_toString(JSContext *cx, JSObject *proxy);
+    static JSString *fun_toString(JSContext *cx, JSObject *proxy, uintN indent);
+};
+
+
+const uint32 JSSLOT_PROXY_HANDLER = 0;
+const uint32 JSSLOT_PROXY_PRIVATE = 1;
+const uint32 JSSLOT_PROXY_EXTRA = 2;
+
+const uint32 JSSLOT_PROXY_CALL = 3;
+const uint32 JSSLOT_PROXY_CONSTRUCT = 4;
+
+extern __attribute__((visibility ("default"))) js::Class ObjectProxyClass;
+extern __attribute__((visibility ("default"))) js::Class FunctionProxyClass;
+extern __attribute__((visibility ("default"))) js::Class OuterWindowProxyClass;
+extern js::Class CallableObjectClass;
+
+}
+
+inline
+
+# 150 "jsproxy.h"
+       bool
+JSObject::isObjectProxy() const
+{
+    return getClass() == &js::ObjectProxyClass ||
+           getClass() == &js::OuterWindowProxyClass;
+}
+
+inline
+
+# 157 "jsproxy.h"
+       bool
+JSObject::isFunctionProxy() const
+{
+    return getClass() == &js::FunctionProxyClass;
+}
+
+inline
+
+# 163 "jsproxy.h"
+       bool
+JSObject::isProxy() const
+{
+    return isObjectProxy() || isFunctionProxy();
+}
+
+inline js::JSProxyHandler *
+JSObject::getProxyHandler() const
+{
+    ((void) 0);
+    return (js::JSProxyHandler *) getSlot(js::JSSLOT_PROXY_HANDLER).toPrivate();
+}
+
+inline const js::Value &
+JSObject::getProxyPrivate() const
+{
+    ((void) 0);
+    return getSlot(js::JSSLOT_PROXY_PRIVATE);
+}
+
+inline void
+JSObject::setProxyPrivate(const js::Value &priv)
+{
+    ((void) 0);
+    setSlot(js::JSSLOT_PROXY_PRIVATE, priv);
+}
+
+inline const js::Value &
+JSObject::getProxyExtra() const
+{
+    ((void) 0);
+    return getSlot(js::JSSLOT_PROXY_EXTRA);
+}
+
+inline void
+JSObject::setProxyExtra(const js::Value &extra)
+{
+    ((void) 0);
+    setSlot(js::JSSLOT_PROXY_EXTRA, extra);
+}
+
+namespace js {
+
+__attribute__((visibility ("default"))) JSObject *
+NewProxyObject(JSContext *cx, JSProxyHandler *handler, const js::Value &priv,
+               JSObject *proto, JSObject *parent,
+               JSObject *call = __null, JSObject *construct = __null);
+
+__attribute__((visibility ("default"))) JSBool
+FixProxy(JSContext *cx, JSObject *proxy, JSBool *bp);
+
+}
+
+extern "C" {
+
+extern js::Class js_ProxyClass;
+
+extern __attribute__((visibility ("default"))) JSObject *
+js_InitProxyClass(JSContext *cx, JSObject *obj);
+
+}
+# 53 "jsobjinlines.h" 2
+# 61 "jsobjinlines.h"
+# 1 "jsscopeinlines.h" 1
+# 53 "jsscopeinlines.h"
+inline void
+js::Shape::freeTable(JSContext *cx)
+{
+    if (hasTable()) {
+        cx->destroy(getTable());
+        setTable(__null);
+    }
+}
+
+inline js::EmptyShape *
+JSObject::getEmptyShape(JSContext *cx, js::Class *aclasp,
+                                               unsigned kind)
+{
+    ((void) 0);
+    int i = kind - js::gc::FINALIZE_OBJECT0;
+
+    if (!emptyShapes) {
+        emptyShapes = (js::EmptyShape**)
+            cx->calloc(sizeof(js::EmptyShape*) * js::gc::JS_FINALIZE_OBJECT_LIMIT);
+        if (!emptyShapes)
+            return __null;
+
+
+
+
+
+        emptyShapes[0] = js::EmptyShape::create(cx, aclasp);
+        if (!emptyShapes[0]) {
+            cx->free(emptyShapes);
+            emptyShapes = __null;
+            return __null;
+        }
+    }
+
+    ((void) 0);
+
+    if (!emptyShapes[i]) {
+        emptyShapes[i] = js::EmptyShape::create(cx, aclasp);
+        if (!emptyShapes[i])
+            return __null;
+    }
+
+    return emptyShapes[i];
+}
+
+inline
+
+# 98 "jsscopeinlines.h"
+       bool
+JSObject::canProvideEmptyShape(js::Class *aclasp)
+{
+    return !emptyShapes || emptyShapes[0]->getClass() == aclasp;
+}
+
+inline void
+JSObject::updateShape(JSContext *cx)
+{
+    ((void) 0);
+    js::LeaveTraceIfGlobalObject(cx, this);
+    if (hasOwnShape())
+        setOwnShape(js_GenerateShape(cx));
+    else
+        objShape = lastProp->shape;
+}
+
+inline void
+JSObject::updateFlags(const js::Shape *shape, bool isDefinitelyAtom)
+{
+    jsuint index;
+    if (!isDefinitelyAtom && js_IdIsIndex(shape->id, &index))
+        setIndexed();
+
+    if (shape->isMethod())
+        setMethodBarrier();
+}
+
+inline void
+JSObject::extend(JSContext *cx, const js::Shape *shape, bool isDefinitelyAtom)
+{
+    setLastProperty(shape);
+    updateFlags(shape, isDefinitelyAtom);
+    updateShape(cx);
+}
+
+inline void
+JSObject::trace(JSTracer *trc)
+{
+    if (!isNative())
+        return;
+
+    JSContext *cx = trc->context;
+    js::Shape *shape = lastProp;
+
+    if (((trc)->callback == __null) && cx->runtime->gcRegenShapes) {
+
+
+
+
+        if (!shape->hasRegenFlag()) {
+            shape->shape = js_RegenerateShapeForGC(cx->runtime);
+            shape->setRegenFlag();
+        }
+
+        uint32 newShape = shape->shape;
+        if (hasOwnShape()) {
+            newShape = js_RegenerateShapeForGC(cx->runtime);
+            ((void) 0);
+        }
+        objShape = newShape;
+    }
+
+
+    do {
+        shape->trace(trc);
+    } while ((shape = shape->parent) != __null);
+}
+
+namespace js {
+
+inline
+Shape::Shape(jsid id, js::PropertyOp getter, js::StrictPropertyOp setter, uint32 slot, uintN attrs,
+             uintN flags, intN shortid, uint32 shape, uint32 slotSpan)
+  : JSObjectMap(shape, slotSpan),
+    numLinearSearches(0), id(id), rawGetter(getter), rawSetter(setter), slot(slot),
+    attrs(uint8(attrs)), flags(uint8(flags)), shortid(int16(shortid)), parent(__null)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    kids.setNull();
+}
+
+inline
+Shape::Shape(JSCompartment *comp, Class *aclasp)
+  : JSObjectMap(js_GenerateShape(comp->rt), (((aclasp)->flags >> 8) & (((JSUint32)1 << (8)) - 1))),
+    numLinearSearches(0),
+    id(((jsid)0x4)),
+    clasp(aclasp),
+    rawSetter(__null),
+    slot(0xffffffff),
+    attrs(0),
+    flags(SHARED_EMPTY),
+    shortid(0),
+    parent(__null)
+{
+    kids.setNull();
+}
+
+inline JSDHashNumber
+Shape::hash() const
+{
+    JSDHashNumber hash = 0;
+
+
+    ((void) 0);
+    if (rawGetter)
+        hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ jsuword(rawGetter);
+    if (rawSetter)
+        hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ jsuword(rawSetter);
+    hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ (flags & PUBLIC_FLAGS);
+    hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ attrs;
+    hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ shortid;
+    hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ slot;
+    hash = (((hash) << (4)) | ((hash) >> (32 - (4)))) ^ (id);
+    return hash;
+}
+
+inline
+
+# 217 "jsscopeinlines.h"
+       bool
+Shape::matches(const js::Shape *other) const
+{
+    ((void) 0);
+    ((void) 0);
+    return id == other->id &&
+           matchesParamsAfterId(other->rawGetter, other->rawSetter, other->slot, other->attrs,
+                                other->flags, other->shortid);
+}
+
+inline
+
+# 227 "jsscopeinlines.h"
+       bool
+Shape::matchesParamsAfterId(js::PropertyOp agetter, js::StrictPropertyOp asetter, uint32 aslot,
+                            uintN aattrs, uintN aflags, intN ashortid) const
+{
+    ((void) 0);
+    return rawGetter == agetter &&
+           rawSetter == asetter &&
+           slot == aslot &&
+           attrs == aattrs &&
+           ((flags ^ aflags) & PUBLIC_FLAGS) == 0 &&
+           shortid == ashortid;
+}
+
+inline
+
+# 240 "jsscopeinlines.h"
+       bool
+Shape::get(JSContext* cx, JSObject *receiver, JSObject* obj, JSObject *pobj, js::Value* vp) const
+{
+    ((void) 0);
+    ((void) 0);
+
+    if (hasGetterValue()) {
+        ((void) 0);
+        js::Value fval = getterValue();
+        return js::ExternalGetOrSet(cx, receiver, id, fval, JSACC_READ, 0, 0, vp);
+    }
+
+    if (isMethod()) {
+        vp->setObject(methodObject());
+        return pobj->methodReadBarrier(cx, *this, vp);
+    }
+
+
+
+
+
+    if (obj->getClass() == &js_WithClass)
+        obj = js_UnwrapWithObject(cx, obj);
+    return js::CallJSPropertyOp(cx, getterOp(), obj, ((this)->hasShortID() ? INT_TO_JSID((this)->shortid) : (this)->id), vp);
+}
+
+inline
+
+# 266 "jsscopeinlines.h"
+       bool
+Shape::set(JSContext* cx, JSObject* obj, bool strict, js::Value* vp) const
+{
+    ((void) 0);
+
+    if (attrs & 0x20) {
+        js::Value fval = setterValue();
+        return js::ExternalGetOrSet(cx, obj, id, fval, JSACC_WRITE, 1, vp, vp);
+    }
+
+    if (attrs & 0x10)
+        return js_ReportGetterOnlyAssignment(cx);
+
+
+    if (obj->getClass() == &js_WithClass)
+        obj = js_UnwrapWithObject(cx, obj);
+    return js::CallJSPropertyOpSetter(cx, setterOp(), obj, ((this)->hasShortID() ? INT_TO_JSID((this)->shortid) : (this)->id), strict, vp);
+}
+
+inline
+EmptyShape::EmptyShape(JSCompartment *comp, js::Class *aclasp)
+  : js::Shape(comp, aclasp)
+{
+
+
+
+
+}
+
+}
+# 62 "jsobjinlines.h" 2
+
+
+
+# 1 "jsgcinlines.h" 1
+# 58 "jsgcinlines.h"
+namespace js {
+namespace gc {
+
+
+const size_t SLOTS_TO_THING_KIND_LIMIT = 17;
+
+
+static inline FinalizeKind
+GetGCObjectKind(size_t numSlots)
+{
+    extern FinalizeKind slotsToThingKind[];
+
+    if (numSlots >= SLOTS_TO_THING_KIND_LIMIT)
+        return FINALIZE_OBJECT0;
+    return slotsToThingKind[numSlots];
+}
+
+
+static inline size_t
+GetGCKindSlots(FinalizeKind thingKind)
+{
+
+    switch (thingKind) {
+      case FINALIZE_OBJECT0:
+        return 0;
+      case FINALIZE_OBJECT2:
+        return 2;
+      case FINALIZE_OBJECT4:
+        return 4;
+      case FINALIZE_OBJECT8:
+        return 8;
+      case FINALIZE_OBJECT12:
+        return 12;
+      case FINALIZE_OBJECT16:
+        return 16;
+      default:
+        ;
+        return 0;
+    }
+}
+
+}
+}
+# 109 "jsgcinlines.h"
+template <typename T>
+__attribute__((always_inline)) inline T *
+NewFinalizableGCThing(JSContext *cx, unsigned thingKind)
+{
+    ((void) 0);
+
+    ((void) 0)
+
+                                                              ;
+
+
+    ((void) 0);
+    do {
+        js::gc::FreeCell *cell = cx->compartment->freeLists.getNext(thingKind);
+        if (cell) {
+            CheckGCFreeListLink(cell);
+            return (T *)cell;
+        }
+        if (!RefillFinalizableFreeList(cx, thingKind))
+            return __null;
+    } while (true);
+}
+
+
+
+
+inline JSObject *
+js_NewGCObject(JSContext *cx, js::gc::FinalizeKind kind)
+{
+    ((void) 0);
+    JSObject *obj = NewFinalizableGCThing<JSObject>(cx, kind);
+    if (obj)
+        obj->capacity = js::gc::GetGCKindSlots(kind);
+    return obj;
+}
+
+inline JSString *
+js_NewGCString(JSContext *cx)
+{
+    return NewFinalizableGCThing<JSString>(cx, js::gc::FINALIZE_STRING);
+}
+
+inline JSShortString *
+js_NewGCShortString(JSContext *cx)
+{
+    return NewFinalizableGCThing<JSShortString>(cx, js::gc::FINALIZE_SHORT_STRING);
+}
+
+inline JSExternalString *
+js_NewGCExternalString(JSContext *cx, uintN type)
+{
+    ((void) 0);
+    JSExternalString *str = NewFinalizableGCThing<JSExternalString>(cx, js::gc::FINALIZE_EXTERNAL_STRING);
+    return str;
+}
+
+inline JSFunction*
+js_NewGCFunction(JSContext *cx)
+{
+    JSFunction *fun = NewFinalizableGCThing<JSFunction>(cx, js::gc::FINALIZE_FUNCTION);
+    if (fun)
+        fun->capacity = JSObject::FUN_CLASS_RESERVED_SLOTS;
+    return fun;
+}
+
+
+inline JSXML *
+js_NewGCXML(JSContext *cx)
+{
+    return NewFinalizableGCThing<JSXML>(cx, js::gc::FINALIZE_XML);
+}
+
+
+namespace js {
+namespace gc {
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSXML *thing);
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSObject *thing);
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSFunction *thing);
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSShortString *thing);
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSString *thing);
+
+template<typename T>
+static __attribute__((always_inline)) inline void
+Mark(JSTracer *trc, T *thing)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+
+    ((void) 0);
+
+    JSRuntime *rt = trc->context->runtime;
+
+    if (rt->gcCurrentCompartment && thing->asCell()->compartment() != rt->gcCurrentCompartment)
+        goto out;
+
+    if (!((trc)->callback == __null)) {
+        uint32 kind = GetGCThingTraceKind(thing);
+        trc->callback(trc, thing, kind);
+        goto out;
+    }
+
+    TypedMarker(trc, thing);
+
+  out:
+
+
+
+
+    return;
+}
+
+static inline void
+MarkString(JSTracer *trc, JSString *str)
+{
+    ((void) 0);
+    if (JSString::isStatic(str))
+        return;
+    ((void) 0);
+    Mark(trc, str);
+}
+
+static inline void
+MarkString(JSTracer *trc, JSString *str, const char *name)
+{
+    ((void) 0);
+    do { } while (0);
+    MarkString(trc, str);
+}
+
+static inline void
+MarkObject(JSTracer *trc, JSObject &obj, const char *name)
+{
+    ((void) 0);
+    ((void) 0);
+    do { } while (0);
+    ((void) 0)
+
+
+
+
+
+                                                                             ;
+    Mark(trc, &obj);
+}
+
+static inline void
+MarkChildren(JSTracer *trc, JSObject *obj)
+{
+
+    if (!obj->map)
+        return;
+
+
+    if (JSObject *proto = obj->getProto())
+        MarkObject(trc, *proto, "proto");
+    if (JSObject *parent = obj->getParent())
+        MarkObject(trc, *parent, "parent");
+
+    if (obj->emptyShapes) {
+        int count = FINALIZE_OBJECT_LAST - FINALIZE_OBJECT0 + 1;
+        for (int i = 0; i < count; i++) {
+            if (obj->emptyShapes[i])
+                obj->emptyShapes[i]->trace(trc);
+        }
+    }
+
+
+    TraceOp op = obj->getOps()->trace;
+    (op ? op : js_TraceObject)(trc, obj);
+}
+
+static inline void
+MarkChildren(JSTracer *trc, JSString *str)
+{
+    if (str->isDependent())
+        MarkString(trc, str->dependentBase(), "base");
+    else if (str->isRope()) {
+        MarkString(trc, str->ropeLeft(), "left child");
+        MarkString(trc, str->ropeRight(), "right child");
+    }
+}
+
+
+static inline void
+MarkChildren(JSTracer *trc, JSXML *xml)
+{
+    js_TraceXML(trc, xml);
+}
+
+
+static inline
+
+# 311 "jsgcinlines.h"
+              bool
+RecursionTooDeep(GCMarker *gcmarker) {
+
+
+
+    int stackDummy;
+    return !((jsuword)(&stackDummy) > gcmarker->stackLimit);
+
+}
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSXML *thing)
+{
+    if (!reinterpret_cast<Cell *>(thing)->markIfUnmarked(reinterpret_cast<GCMarker *>(trc)->getMarkColor()))
+        return;
+    GCMarker *gcmarker = static_cast<GCMarker *>(trc);
+    if (RecursionTooDeep(gcmarker)) {
+        gcmarker->delayMarkingChildren(thing);
+    } else {
+        MarkChildren(trc, thing);
+    }
+}
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSObject *thing)
+{
+    ((void) 0);
+    ((void) 0);
+
+    GCMarker *gcmarker = static_cast<GCMarker *>(trc);
+    if (!thing->markIfUnmarked(gcmarker->getMarkColor()))
+        return;
+
+    if (RecursionTooDeep(gcmarker)) {
+        gcmarker->delayMarkingChildren(thing);
+    } else {
+        MarkChildren(trc, thing);
+    }
+}
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSFunction *thing)
+{
+    ((void) 0);
+    ((void) 0);
+
+    GCMarker *gcmarker = static_cast<GCMarker *>(trc);
+    if (!thing->markIfUnmarked(gcmarker->getMarkColor()))
+        return;
+
+    if (RecursionTooDeep(gcmarker)) {
+        gcmarker->delayMarkingChildren(thing);
+    } else {
+        MarkChildren(trc, static_cast<JSObject *>(thing));
+    }
+}
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSShortString *thing)
+{
+
+
+
+
+
+    (void) thing->asCell()->markIfUnmarked();
+}
+
+}
+
+namespace detail {
+
+static __attribute__((always_inline)) inline JSString *
+Tag(JSString *str)
+{
+    ((void) 0);
+    return (JSString *)(size_t(str) | 1);
+}
+
+static __attribute__((always_inline)) inline
+
+# 390 "jsgcinlines.h"
+                        bool
+Tagged(JSString *str)
+{
+    return (size_t(str) & 1) != 0;
+}
+
+static __attribute__((always_inline)) inline JSString *
+Untag(JSString *str)
+{
+    ((void) 0);
+    return (JSString *)(size_t(str) & ~size_t(1));
+}
+
+static __attribute__((always_inline)) inline void
+NonRopeTypedMarker(JSRuntime *rt, JSString *str)
+{
+
+    ((void) 0);
+
+    if (rt->gcCurrentCompartment) {
+        for (;;) {
+            if (JSString::isStatic(str))
+                break;
+
+
+
+
+
+            if (str->asCell()->compartment() != rt->gcCurrentCompartment) {
+                ((void) 0);
+                break;
+            }
+            if (!str->asCell()->markIfUnmarked())
+                break;
+            if (!str->isDependent())
+                break;
+            str = str->dependentBase();
+        }
+    } else {
+        while (!JSString::isStatic(str) &&
+               str->asCell()->markIfUnmarked() &&
+               str->isDependent()) {
+            str = str->dependentBase();
+        }
+    }
+}
+
+}
+
+namespace gc {
+
+static __attribute__((always_inline)) inline void
+TypedMarker(JSTracer *trc, JSString *str)
+{
+    using namespace detail;
+    JSRuntime *rt = trc->context->runtime;
+    ((void) 0);
+
+
+
+    if (!str->isRope()) {
+        NonRopeTypedMarker(rt, str);
+        return;
+    }
+
+
+
+
+
+
+
+    JSString *parent = __null;
+    first_visit_node: {
+        ((void) 0);
+        ((void) 0);
+        if (!str->asCell()->markIfUnmarked())
+            goto finish_node;
+        JSString *left = str->ropeLeft();
+        if (left->isRope()) {
+            ((void) 0);
+            str->u.left = Tag(parent);
+            parent = str;
+            str = left;
+            goto first_visit_node;
+        }
+        ((void) 0)
+
+                                                                              ;
+        NonRopeTypedMarker(rt, left);
+    }
+    visit_right_child: {
+        JSString *right = str->ropeRight();
+        if (right->isRope()) {
+            ((void) 0);
+            str->s.right = Tag(parent);
+            parent = str;
+            str = right;
+            goto first_visit_node;
+        }
+        ((void) 0)
+
+                                                                               ;
+        NonRopeTypedMarker(rt, right);
+    }
+    finish_node: {
+        if (!parent)
+            return;
+        if (Tagged(parent->u.left)) {
+            ((void) 0);
+            JSString *nextParent = Untag(parent->u.left);
+            parent->u.left = str;
+            str = parent;
+            parent = nextParent;
+            goto visit_right_child;
+        }
+        ((void) 0);
+        JSString *nextParent = Untag(parent->s.right);
+        parent->s.right = str;
+        str = parent;
+        parent = nextParent;
+        goto finish_node;
+    }
+}
+
+static inline void
+MarkAtomRange(JSTracer *trc, size_t len, JSAtom **vec, const char *name)
+{
+    for (uint32 i = 0; i < len; i++) {
+        if (JSAtom *atom = vec[i]) {
+            do { } while (0);
+            JSString *str = (atom);
+            if (!JSString::isStatic(str))
+                Mark(trc, str);
+        }
+    }
+}
+
+static inline void
+MarkObjectRange(JSTracer *trc, size_t len, JSObject **vec, const char *name)
+{
+    for (uint32 i = 0; i < len; i++) {
+        if (JSObject *obj = vec[i]) {
+            do { } while (0);
+            Mark(trc, obj);
+        }
+    }
+}
+
+static inline void
+MarkId(JSTracer *trc, jsid id)
+{
+    if (JSID_IS_STRING(id)) {
+        JSString *str = JSID_TO_STRING(id);
+        if (!JSString::isStatic(str))
+            Mark(trc, str);
+    }
+    else if ((__builtin_expect((JSID_IS_OBJECT(id)), 0)))
+        Mark(trc, JSID_TO_OBJECT(id));
+}
+
+static inline void
+MarkId(JSTracer *trc, jsid id, const char *name)
+{
+    do { } while (0);
+    MarkId(trc, id);
+}
+
+static inline void
+MarkIdRange(JSTracer *trc, jsid *beg, jsid *end, const char *name)
+{
+    for (jsid *idp = beg; idp != end; ++idp) {
+        do { } while (0);
+        MarkId(trc, *idp);
+    }
+}
+
+static inline void
+MarkIdRange(JSTracer *trc, size_t len, jsid *vec, const char *name)
+{
+    MarkIdRange(trc, vec, vec + len, name);
+}
+
+static inline void
+MarkKind(JSTracer *trc, void *thing, uint32 kind)
+{
+    ((void) 0);
+    ((void) 0);
+    switch (kind) {
+        case 0:
+            Mark(trc, reinterpret_cast<JSObject *>(thing));
+            break;
+        case 1:
+            MarkString(trc, reinterpret_cast<JSString *>(thing));
+            break;
+
+        case 2:
+            Mark(trc, reinterpret_cast<JSXML *>(thing));
+            break;
+
+        default:
+            ((void) 0);
+    }
+}
+
+
+static inline void
+MarkValueRaw(JSTracer *trc, const js::Value &v)
+{
+    if (v.isMarkable()) {
+        ((void) 0);
+        return MarkKind(trc, v.toGCThing(), v.gcKind());
+    }
+}
+
+static inline void
+MarkValue(JSTracer *trc, const js::Value &v, const char *name)
+{
+    do { } while (0);
+    MarkValueRaw(trc, v);
+}
+
+static inline void
+MarkValueRange(JSTracer *trc, Value *beg, Value *end, const char *name)
+{
+    for (Value *vp = beg; vp < end; ++vp) {
+        do { } while (0);
+        MarkValueRaw(trc, *vp);
+    }
+}
+
+static inline void
+MarkValueRange(JSTracer *trc, size_t len, Value *vec, const char *name)
+{
+    MarkValueRange(trc, vec, vec + len, name);
+}
+
+static inline void
+MarkShapeRange(JSTracer *trc, const Shape **beg, const Shape **end, const char *name)
+{
+    for (const Shape **sp = beg; sp < end; ++sp) {
+        do { } while (0);
+        (*sp)->trace(trc);
+    }
+}
+
+static inline void
+MarkShapeRange(JSTracer *trc, size_t len, const Shape **vec, const char *name)
+{
+    MarkShapeRange(trc, vec, vec + len, name);
+}
+
+
+static inline void
+MarkGCThing(JSTracer *trc, void *thing, uint32 kind)
+{
+    if (!thing)
+        return;
+
+    MarkKind(trc, thing, kind);
+}
+
+static inline void
+MarkGCThing(JSTracer *trc, void *thing)
+{
+    if (!thing)
+        return;
+    MarkKind(trc, thing, GetGCThingTraceKind(thing));
+}
+
+static inline void
+MarkGCThing(JSTracer *trc, void *thing, const char *name)
+{
+    do { } while (0);
+    MarkGCThing(trc, thing);
+}
+
+static inline void
+MarkGCThing(JSTracer *trc, void *thing, const char *name, size_t index)
+{
+    do { } while (0);
+    MarkGCThing(trc, thing);
+}
+
+static inline void
+Mark(JSTracer *trc, void *thing, uint32 kind, const char *name)
+{
+    ((void) 0);
+    do { } while (0);
+    MarkKind(trc, thing, kind);
+}
+
+}}
+# 66 "jsobjinlines.h" 2
+# 1 "jsprobes.h" 1
+# 67 "jsobjinlines.h" 2
+
+inline
+
+# 68 "jsobjinlines.h"
+       bool
+JSObject::preventExtensions(JSContext *cx, js::AutoIdVector *props)
+{
+    ((void) 0);
+
+    if (js::FixOp fix = getOps()->fix) {
+        bool success;
+        if (!fix(cx, this, &success, props))
+            return false;
+        if (!success) {
+            JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_CANT_CHANGE_EXTENSIBILITY);
+            return false;
+        }
+    } else {
+        if (!GetPropertyNames(cx, this, 0x10 | 0x8, props))
+            return false;
+    }
+
+    if (isNative())
+        extensibleShapeChange(cx);
+
+    flags |= NOT_EXTENSIBLE;
+    return true;
+}
+
+inline
+
+# 93 "jsobjinlines.h"
+       bool
+JSObject::brand(JSContext *cx)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    generateOwnShape(cx);
+    if (js_IsPropertyCacheDisabled(cx))
+        return false;
+    flags |= BRANDED;
+    return true;
+}
+
+inline
+
+# 106 "jsobjinlines.h"
+       bool
+JSObject::unbrand(JSContext *cx)
+{
+    ((void) 0);
+    if (branded()) {
+        generateOwnShape(cx);
+        if (js_IsPropertyCacheDisabled(cx))
+            return false;
+        flags &= ~BRANDED;
+    }
+    setGeneric();
+    return true;
+}
+
+inline void
+JSObject::syncSpecialEquality()
+{
+    if (clasp->ext.equality)
+        flags |= JSObject::HAS_EQUALITY;
+}
+
+inline void
+JSObject::finalize(JSContext *cx)
+{
+
+    if (!map)
+        return;
+
+
+    js::Class *clasp = getClass();
+    if (clasp->finalize)
+        clasp->finalize(cx, this);
+
+    js::Probes::finalizeObject(this);
+
+    finish(cx);
+}
+
+
+
+
+
+inline const js::Shape *
+JSObject::methodReadBarrier(JSContext *cx, const js::Shape &shape, js::Value *vp)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+
+    JSObject *funobj = &vp->toObject();
+    JSFunction *fun = funobj->getFunctionPrivate();
+    ((void) 0);
+    ((void) 0);
+
+    funobj = CloneFunctionObject(cx, fun, funobj->getParent());
+    if (!funobj)
+        return __null;
+    funobj->setMethodObj(*this);
+
+
+
+
+
+
+    uint32 slot = shape.slot;
+    const js::Shape *newshape = methodShapeChange(cx, shape);
+    if (!newshape)
+        return __null;
+    ((void) 0);
+    ((void) 0);
+    vp->setObject(*funobj);
+    nativeSetSlot(slot, *vp);
+# 200 "jsobjinlines.h"
+    return newshape;
+}
+
+static __attribute__((always_inline)) inline
+
+# 203 "jsobjinlines.h"
+                        bool
+ChangesMethodValue(const js::Value &prev, const js::Value &v)
+{
+    JSObject *prevObj;
+    return prev.isObject() && (prevObj = &prev.toObject())->isFunction() &&
+           (!v.isObject() || &v.toObject() != prevObj);
+}
+
+inline const js::Shape *
+JSObject::methodWriteBarrier(JSContext *cx, const js::Shape &shape, const js::Value &v)
+{
+    if (brandedOrHasMethodBarrier() && shape.slot != 0xffffffff) {
+        const js::Value &prev = nativeGetSlot(shape.slot);
+
+        if (ChangesMethodValue(prev, v)) {
+            ((void)0);
+            return methodShapeChange(cx, shape);
+        }
+    }
+    return &shape;
+}
+
+inline
+
+# 225 "jsobjinlines.h"
+       bool
+JSObject::methodWriteBarrier(JSContext *cx, uint32 slot, const js::Value &v)
+{
+    if (brandedOrHasMethodBarrier()) {
+        const js::Value &prev = nativeGetSlot(slot);
+
+        if (ChangesMethodValue(prev, v)) {
+            ((void)0);
+            return methodShapeChange(cx, slot);
+        }
+    }
+    return true;
+}
+
+inline
+
+# 239 "jsobjinlines.h"
+       bool
+JSObject::ensureClassReservedSlots(JSContext *cx)
+{
+    return !nativeEmpty() || ensureClassReservedSlotsForEmptyObject(cx);
+}
+
+inline js::Value
+JSObject::getReservedSlot(uintN index) const
+{
+    return (index < numSlots()) ? getSlot(index) : js::UndefinedValue();
+}
+
+inline
+
+# 251 "jsobjinlines.h"
+       bool
+JSObject::canHaveMethodBarrier() const
+{
+    return isObject() || isFunction() || isPrimitive() || isDate();
+}
+
+inline
+
+# 257 "jsobjinlines.h"
+       bool
+JSObject::isPrimitive() const
+{
+    return isNumber() || isString() || isBoolean();
+}
+
+inline const js::Value &
+JSObject::getPrimitiveThis() const
+{
+    ((void) 0);
+    return getSlot(JSSLOT_PRIMITIVE_THIS);
+}
+
+inline void
+JSObject::setPrimitiveThis(const js::Value &pthis)
+{
+    ((void) 0);
+    setSlot(JSSLOT_PRIMITIVE_THIS, pthis);
+}
+
+inline unsigned
+JSObject::finalizeKind() const
+{
+    return js::gc::FinalizeKind(arena()->header()->thingKind);
+}
+
+inline size_t
+JSObject::numFixedSlots() const
+{
+    if (isFunction())
+        return JSObject::FUN_CLASS_RESERVED_SLOTS;
+    if (!hasSlotsArray())
+        return capacity;
+    return js::gc::GetGCKindSlots(js::gc::FinalizeKind(finalizeKind()));
+}
+
+inline size_t
+JSObject::slotsAndStructSize(uint32 nslots) const
+{
+    bool isFun = isFunction() && this == (JSObject*) getPrivate();
+
+    int ndslots = hasSlotsArray() ? nslots : 0;
+    int nfslots = isFun ? 0 : numFixedSlots();
+
+    return sizeof(js::Value) * (ndslots + nfslots)
+           + isFun ? sizeof(JSFunction) : sizeof(JSObject);
+}
+
+inline uint32
+JSObject::getArrayLength() const
+{
+    ((void) 0);
+    return (uint32)(size_t) getPrivate();
+}
+
+inline void
+JSObject::setArrayLength(uint32 length)
+{
+    ((void) 0);
+    setPrivate((void*) length);
+}
+
+inline uint32
+JSObject::getDenseArrayCapacity()
+{
+    ((void) 0);
+    return numSlots();
+}
+
+inline js::Value*
+JSObject::getDenseArrayElements()
+{
+    ((void) 0);
+    return getSlots();
+}
+
+inline const js::Value &
+JSObject::getDenseArrayElement(uintN idx)
+{
+    ((void) 0);
+    return getSlot(idx);
+}
+
+inline js::Value *
+JSObject::addressOfDenseArrayElement(uintN idx)
+{
+    ((void) 0);
+    return &getSlotRef(idx);
+}
+
+inline void
+JSObject::setDenseArrayElement(uintN idx, const js::Value &val)
+{
+    ((void) 0);
+    setSlot(idx, val);
+}
+
+inline void
+JSObject::shrinkDenseArrayElements(JSContext *cx, uintN cap)
+{
+    ((void) 0);
+    shrinkSlots(cx, cap);
+}
+
+inline void
+JSObject::setArgsLength(uint32 argc)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    getSlotRef(JSSLOT_ARGS_LENGTH).setInt32(argc << ARGS_PACKED_BITS_COUNT);
+    ((void) 0);
+}
+
+inline uint32
+JSObject::getArgsInitialLength() const
+{
+    ((void) 0);
+    uint32 argc = uint32(getSlot(JSSLOT_ARGS_LENGTH).toInt32()) >> ARGS_PACKED_BITS_COUNT;
+    ((void) 0);
+    return argc;
+}
+
+inline void
+JSObject::setArgsLengthOverridden()
+{
+    ((void) 0);
+    getSlotRef(JSSLOT_ARGS_LENGTH).getInt32Ref() |= ARGS_LENGTH_OVERRIDDEN_BIT;
+}
+
+inline
+
+# 387 "jsobjinlines.h"
+       bool
+JSObject::isArgsLengthOverridden() const
+{
+    ((void) 0);
+    const js::Value &v = getSlot(JSSLOT_ARGS_LENGTH);
+    return v.toInt32() & ARGS_LENGTH_OVERRIDDEN_BIT;
+}
+
+inline js::ArgumentsData *
+JSObject::getArgsData() const
+{
+    ((void) 0);
+    return (js::ArgumentsData *) getSlot(JSSLOT_ARGS_DATA).toPrivate();
+}
+
+inline void
+JSObject::setArgsData(js::ArgumentsData *data)
+{
+    ((void) 0);
+    getSlotRef(JSSLOT_ARGS_DATA).setPrivate(data);
+}
+
+inline const js::Value &
+JSObject::getArgsCallee() const
+{
+    return getArgsData()->callee;
+}
+
+inline void
+JSObject::setArgsCallee(const js::Value &callee)
+{
+    getArgsData()->callee = callee;
+}
+
+inline const js::Value &
+JSObject::getArgsElement(uint32 i) const
+{
+    ((void) 0);
+    ((void) 0);
+    return getArgsData()->slots[i];
+}
+
+inline js::Value *
+JSObject::getArgsElements() const
+{
+    ((void) 0);
+    return getArgsData()->slots;
+}
+
+inline js::Value *
+JSObject::addressOfArgsElement(uint32 i)
+{
+    ((void) 0);
+    ((void) 0);
+    return &getArgsData()->slots[i];
+}
+
+inline void
+JSObject::setArgsElement(uint32 i, const js::Value &v)
+{
+    ((void) 0);
+    ((void) 0);
+    getArgsData()->slots[i] = v;
+}
+
+inline
+
+# 452 "jsobjinlines.h"
+       bool
+JSObject::callIsForEval() const
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0)
+                                                                     ;
+    return getSlot(JSSLOT_CALL_CALLEE).isNull();
+}
+
+inline JSStackFrame *
+JSObject::maybeCallObjStackFrame() const
+{
+    ((void) 0);
+    return reinterpret_cast<JSStackFrame *>(getPrivate());
+}
+
+inline void
+JSObject::setCallObjCallee(JSObject *callee)
+{
+    ((void) 0);
+    ((void) 0);
+    return getSlotRef(JSSLOT_CALL_CALLEE).setObjectOrNull(callee);
+}
+
+inline JSObject *
+JSObject::getCallObjCallee() const
+{
+    ((void) 0);
+    return getSlot(JSSLOT_CALL_CALLEE).toObjectOrNull();
+}
+
+inline JSFunction *
+JSObject::getCallObjCalleeFunction() const
+{
+    ((void) 0);
+    return getSlot(JSSLOT_CALL_CALLEE).toObject().getFunctionPrivate();
+}
+
+inline const js::Value &
+JSObject::getCallObjArguments() const
+{
+    ((void) 0);
+    ((void) 0);
+    return getSlot(JSSLOT_CALL_ARGUMENTS);
+}
+
+inline void
+JSObject::setCallObjArguments(const js::Value &v)
+{
+    ((void) 0);
+    ((void) 0);
+    setSlot(JSSLOT_CALL_ARGUMENTS, v);
+}
+
+inline const js::Value &
+JSObject::callObjArg(uintN i) const
+{
+    ((void) 0);
+    ((void) 0);
+    return getSlot(JSObject::CALL_RESERVED_SLOTS + i);
+}
+
+inline js::Value &
+JSObject::callObjArg(uintN i)
+{
+    ((void) 0);
+    ((void) 0);
+    return getSlotRef(JSObject::CALL_RESERVED_SLOTS + i);
+}
+
+inline const js::Value &
+JSObject::callObjVar(uintN i) const
+{
+    JSFunction *fun = getCallObjCalleeFunction();
+    ((void) 0);
+    ((void) 0);
+    return getSlot(JSObject::CALL_RESERVED_SLOTS + fun->nargs + i);
+}
+
+inline js::Value &
+JSObject::callObjVar(uintN i)
+{
+    JSFunction *fun = getCallObjCalleeFunction();
+    ((void) 0);
+    ((void) 0);
+    return getSlotRef(JSObject::CALL_RESERVED_SLOTS + fun->nargs + i);
+}
+
+inline const js::Value &
+JSObject::getDateUTCTime() const
+{
+    ((void) 0);
+    return getSlot(JSSLOT_DATE_UTC_TIME);
+}
+
+inline void
+JSObject::setDateUTCTime(const js::Value &time)
+{
+    ((void) 0);
+    setSlot(JSSLOT_DATE_UTC_TIME, time);
+}
+
+inline js::Value *
+JSObject::getFlatClosureUpvars() const
+{
+
+
+
+
+
+    return (js::Value *) getSlot(JSSLOT_FLAT_CLOSURE_UPVARS).toPrivate();
+}
+
+inline js::Value
+JSObject::getFlatClosureUpvar(uint32 i) const
+{
+    ((void) 0);
+    return getFlatClosureUpvars()[i];
+}
+
+inline js::Value &
+JSObject::getFlatClosureUpvar(uint32 i)
+{
+    ((void) 0);
+    return getFlatClosureUpvars()[i];
+}
+
+inline void
+JSObject::setFlatClosureUpvars(js::Value *upvars)
+{
+    ((void) 0);
+    ((void) 0);
+    getSlotRef(JSSLOT_FLAT_CLOSURE_UPVARS).setPrivate(upvars);
+}
+
+inline
+
+# 588 "jsobjinlines.h"
+       bool
+JSObject::hasMethodObj(const JSObject& obj) const
+{
+    return JSSLOT_FUN_METHOD_OBJ < numSlots() &&
+           getSlot(JSSLOT_FUN_METHOD_OBJ).isObject() &&
+           &getSlot(JSSLOT_FUN_METHOD_OBJ).toObject() == &obj;
+}
+
+inline void
+JSObject::setMethodObj(JSObject& obj)
+{
+    getSlotRef(JSSLOT_FUN_METHOD_OBJ).setObject(obj);
+}
+
+inline js::NativeIterator *
+JSObject::getNativeIterator() const
+{
+    return (js::NativeIterator *) getPrivate();
+}
+
+inline void
+JSObject::setNativeIterator(js::NativeIterator *ni)
+{
+    setPrivate(ni);
+}
+
+inline JSLinearString *
+JSObject::getNamePrefix() const
+{
+    ((void) 0);
+    const js::Value &v = getSlot(JSSLOT_NAME_PREFIX);
+    return !v.isUndefined() ? v.toString()->assertIsLinear() : __null;
+}
+
+inline jsval
+JSObject::getNamePrefixVal() const
+{
+    ((void) 0);
+    return js::Jsvalify(getSlot(JSSLOT_NAME_PREFIX));
+}
+
+inline void
+JSObject::setNamePrefix(JSLinearString *prefix)
+{
+    ((void) 0);
+    setSlot(JSSLOT_NAME_PREFIX, prefix ? js::StringValue(prefix) : js::UndefinedValue());
+}
+
+inline void
+JSObject::clearNamePrefix()
+{
+    ((void) 0);
+    setSlot(JSSLOT_NAME_PREFIX, js::UndefinedValue());
+}
+
+inline JSLinearString *
+JSObject::getNameURI() const
+{
+    ((void) 0);
+    const js::Value &v = getSlot(JSSLOT_NAME_URI);
+    return !v.isUndefined() ? v.toString()->assertIsLinear() : __null;
+}
+
+inline jsval
+JSObject::getNameURIVal() const
+{
+    ((void) 0);
+    return js::Jsvalify(getSlot(JSSLOT_NAME_URI));
+}
+
+inline void
+JSObject::setNameURI(JSLinearString *uri)
+{
+    ((void) 0);
+    setSlot(JSSLOT_NAME_URI, uri ? js::StringValue(uri) : js::UndefinedValue());
+}
+
+inline jsval
+JSObject::getNamespaceDeclared() const
+{
+    ((void) 0);
+    return js::Jsvalify(getSlot(JSSLOT_NAMESPACE_DECLARED));
+}
+
+inline void
+JSObject::setNamespaceDeclared(jsval decl)
+{
+    ((void) 0);
+    setSlot(JSSLOT_NAMESPACE_DECLARED, js::Valueify(decl));
+}
+
+inline JSLinearString *
+JSObject::getQNameLocalName() const
+{
+    ((void) 0);
+    const js::Value &v = getSlot(JSSLOT_QNAME_LOCAL_NAME);
+    return !v.isUndefined() ? v.toString()->assertIsLinear() : __null;
+}
+
+inline jsval
+JSObject::getQNameLocalNameVal() const
+{
+    ((void) 0);
+    return js::Jsvalify(getSlot(JSSLOT_QNAME_LOCAL_NAME));
+}
+
+inline void
+JSObject::setQNameLocalName(JSLinearString *name)
+{
+    ((void) 0);
+    setSlot(JSSLOT_QNAME_LOCAL_NAME, name ? js::StringValue(name) : js::UndefinedValue());
+}
+
+inline JSObject *
+JSObject::getWithThis() const
+{
+    return &getSlot(JSSLOT_WITH_THIS).toObject();
+}
+
+inline void
+JSObject::setWithThis(JSObject *thisp)
+{
+    getSlotRef(JSSLOT_WITH_THIS).setObject(*thisp);
+}
+
+inline void
+JSObject::init(JSContext *cx, js::Class *aclasp, JSObject *proto, JSObject *parent,
+               void *priv, bool useHoles)
+{
+    clasp = aclasp;
+    flags = 0;
+# 731 "jsobjinlines.h"
+    setProto(proto);
+    setParent(parent);
+
+    privateData = priv;
+    slots = fixedSlots();
+
+
+
+
+
+    ((void) 0);
+    ClearValueRange(slots, capacity, useHoles);
+
+    emptyShapes = __null;
+}
+
+inline void
+JSObject::finish(JSContext *cx)
+{
+
+
+
+
+    if (hasSlotsArray())
+        freeSlotsArray(cx);
+    if (emptyShapes)
+        cx->free(emptyShapes);
+}
+
+inline
+
+# 760 "jsobjinlines.h"
+       bool
+JSObject::initSharingEmptyShape(JSContext *cx,
+                                js::Class *aclasp,
+                                JSObject *proto,
+                                JSObject *parent,
+                                void *privateValue,
+                                                           unsigned kind)
+{
+    init(cx, aclasp, proto, parent, privateValue, false);
+
+    ((void) 0);
+
+    js::EmptyShape *empty = proto->getEmptyShape(cx, aclasp, kind);
+    if (!empty)
+        return false;
+
+    setMap(empty);
+    return true;
+}
+
+inline void
+JSObject::freeSlotsArray(JSContext *cx)
+{
+    ((void) 0);
+    cx->free(slots);
+}
+
+inline void
+JSObject::revertToFixedSlots(JSContext *cx)
+{
+    ((void) 0);
+    size_t fixed = numFixedSlots();
+    ((void) 0);
+    memcpy(fixedSlots(), slots, fixed * sizeof(js::Value));
+    freeSlotsArray(cx);
+    slots = fixedSlots();
+    capacity = fixed;
+}
+
+inline
+
+# 799 "jsobjinlines.h"
+       bool
+JSObject::hasProperty(JSContext *cx, jsid id, bool *foundp, uintN flags)
+{
+    JSObject *pobj;
+    JSProperty *prop;
+    JSAutoResolveFlags rf(cx, flags);
+    if (!lookupProperty(cx, id, &pobj, &prop))
+        return false;
+    *foundp = !!prop;
+    return true;
+}
+
+inline
+
+# 811 "jsobjinlines.h"
+       bool
+JSObject::isCallable()
+{
+    return isFunction() || getClass()->call;
+}
+
+static inline
+
+# 817 "jsobjinlines.h"
+              bool
+js_IsCallable(const js::Value &v)
+{
+    return v.isObject() && v.toObject().isCallable();
+}
+
+namespace js {
+
+class AutoPropDescArrayRooter : private AutoGCRooter
+{
+  public:
+    AutoPropDescArrayRooter(JSContext *cx)
+      : AutoGCRooter(cx, DESCRIPTORS), descriptors(cx)
+    { }
+
+    PropDesc *append() {
+        if (!descriptors.append(PropDesc()))
+            return __null;
+        return &descriptors.back();
+    }
+
+    PropDesc& operator[](size_t i) {
+        ((void) 0);
+        return descriptors[i];
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+
+  private:
+    PropDescArray descriptors;
+};
+
+class AutoPropertyDescriptorRooter : private AutoGCRooter, public PropertyDescriptor
+{
+  public:
+    AutoPropertyDescriptorRooter(JSContext *cx) : AutoGCRooter(cx, DESCRIPTOR) {
+        obj = __null;
+        attrs = 0;
+        getter = (PropertyOp) __null;
+        setter = (StrictPropertyOp) __null;
+        value.setUndefined();
+    }
+
+    AutoPropertyDescriptorRooter(JSContext *cx, PropertyDescriptor *desc)
+      : AutoGCRooter(cx, DESCRIPTOR)
+    {
+        obj = desc->obj;
+        attrs = desc->attrs;
+        getter = desc->getter;
+        setter = desc->setter;
+        value = desc->value;
+    }
+
+    friend void AutoGCRooter::trace(JSTracer *trc);
+};
+
+static inline
+
+# 873 "jsobjinlines.h"
+              bool
+InitScopeForObject(JSContext* cx, JSObject* obj, js::Class *clasp, JSObject* proto,
+                   gc::FinalizeKind kind)
+{
+    ((void) 0);
+    ((void) 0);
+
+
+    js::EmptyShape *empty = __null;
+
+    if (proto) {
+        if (proto->canProvideEmptyShape(clasp)) {
+            empty = proto->getEmptyShape(cx, clasp, kind);
+            if (!empty)
+                goto bad;
+        }
+    }
+
+    if (!empty) {
+        empty = js::EmptyShape::create(cx, clasp);
+        if (!empty)
+            goto bad;
+        uint32 freeslot = (((clasp)->flags >> 8) & (((JSUint32)1 << (8)) - 1));
+        if (freeslot > obj->numSlots() && !obj->allocSlots(cx, freeslot))
+            goto bad;
+    }
+
+    obj->setMap(empty);
+    return true;
+
+  bad:
+
+    ((void) 0);
+    return false;
+}
+
+
+
+
+
+
+
+static inline JSObject *
+NewNativeClassInstance(JSContext *cx, Class *clasp, JSObject *proto,
+                       JSObject *parent, gc::FinalizeKind kind)
+{
+    ((void) 0);
+    ((void) 0);
+
+
+
+
+
+    JSObject* obj = js_NewGCObject(cx, kind);
+
+    if (obj) {
+
+
+
+
+        bool useHoles = (clasp == &js_ArrayClass);
+        obj->init(cx, clasp, proto, parent, __null, useHoles);
+
+        ((void) 0);
+        js::EmptyShape *empty = proto->getEmptyShape(cx, clasp, kind);
+
+        if (empty)
+            obj->setMap(empty);
+        else
+            obj = __null;
+    }
+
+    return obj;
+}
+
+static inline JSObject *
+NewNativeClassInstance(JSContext *cx, Class *clasp, JSObject *proto, JSObject *parent)
+{
+    gc::FinalizeKind kind = gc::GetGCObjectKind((((clasp)->flags >> 8) & (((JSUint32)1 << (8)) - 1)));
+    return NewNativeClassInstance(cx, clasp, proto, parent, kind);
+}
+
+
+bool
+# 956 "jsobjinlines.h"
+FindClassPrototype(JSContext *cx, JSObject *scope, JSProtoKey protoKey, JSObject **protop,
+                   Class *clasp);
+
+
+
+
+
+
+
+static inline JSObject *
+NewBuiltinClassInstance(JSContext *cx, Class *clasp, gc::FinalizeKind kind)
+{
+    ((void) 0);
+
+    JSProtoKey protoKey = ((JSProtoKey) (((clasp)->flags >> ((8 + 8) + 8)) & (((JSUint32)1 << (8)) - 1)));
+    ((void) 0);
+
+
+    JSObject *global;
+    if (!cx->hasfp()) {
+        global = cx->globalObject;
+        OBJ_TO_INNER_OBJECT(cx, global);
+        if (!global)
+            return __null;
+    } else {
+        global = cx->fp()->scopeChain().getGlobal();
+    }
+    ((void) 0);
+
+    const Value &v = global->getReservedSlot(JSProto_LIMIT + protoKey);
+    JSObject *proto;
+    if (v.isObject()) {
+        proto = &v.toObject();
+        ((void) 0);
+    } else {
+        if (!FindClassPrototype(cx, global, protoKey, &proto, clasp))
+            return __null;
+    }
+
+    return NewNativeClassInstance(cx, clasp, proto, global, kind);
+}
+
+static inline JSObject *
+NewBuiltinClassInstance(JSContext *cx, Class *clasp)
+{
+    gc::FinalizeKind kind = gc::GetGCObjectKind((((clasp)->flags >> 8) & (((JSUint32)1 << (8)) - 1)));
+    return NewBuiltinClassInstance(cx, clasp, kind);
+}
+
+static inline JSProtoKey
+GetClassProtoKey(js::Class *clasp)
+{
+    JSProtoKey key = ((JSProtoKey) (((clasp)->flags >> ((8 + 8) + 8)) & (((JSUint32)1 << (8)) - 1)));
+    if (key != JSProto_Null)
+        return key;
+    if (clasp->flags & (1<<((8 + 8)+1)))
+        return JSProto_Object;
+    return JSProto_Null;
+}
+
+namespace WithProto {
+    enum e {
+        Class = 0,
+        Given = 1
+    };
+}
+# 1049 "jsobjinlines.h"
+static __attribute__((always_inline)) inline
+
+# 1049 "jsobjinlines.h"
+                        bool
+FindProto(JSContext *cx, js::Class *clasp, JSObject *parent, JSObject ** proto)
+{
+    JSProtoKey protoKey = GetClassProtoKey(clasp);
+    if (!js_GetClassPrototype(cx, parent, protoKey, proto, clasp))
+        return false;
+    if (!(*proto) && !js_GetClassPrototype(cx, parent, JSProto_Object, proto))
+        return false;
+
+    return true;
+}
+
+namespace detail
+{
+template <bool withProto, bool isFunction>
+static __attribute__((always_inline)) inline JSObject *
+NewObject(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent,
+          gc::FinalizeKind kind)
+{
+
+    if (withProto == WithProto::Class && !proto) {
+        if (!FindProto(cx, clasp, parent, &proto))
+          return __null;
+    }
+# 1081 "jsobjinlines.h"
+    JSObject* obj = isFunction ? js_NewGCFunction(cx) : js_NewGCObject(cx, kind);
+    if (!obj)
+        goto out;
+
+
+    ((void) 0);
+
+
+
+
+
+    obj->init(cx, clasp, proto,
+              (!parent && proto) ? proto->getParent() : parent,
+              __null, clasp == &js_ArrayClass);
+
+    if (clasp->isNative()) {
+        if (!InitScopeForObject(cx, obj, clasp, proto, kind)) {
+            obj = __null;
+            goto out;
+        }
+    } else {
+        obj->setSharedNonNativeMap();
+    }
+
+out:
+    Probes::createObject(cx, obj);
+    return obj;
+}
+}
+
+static __attribute__((always_inline)) inline JSObject *
+NewFunction(JSContext *cx, JSObject *parent)
+{
+    return detail::NewObject<WithProto::Class, true>(cx, &js_FunctionClass, __null, parent,
+                                                     gc::FINALIZE_OBJECT2);
+}
+
+template <WithProto::e withProto>
+static __attribute__((always_inline)) inline JSObject *
+NewNonFunction(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent,
+               gc::FinalizeKind kind)
+{
+    return detail::NewObject<withProto, false>(cx, clasp, proto, parent, kind);
+}
+
+template <WithProto::e withProto>
+static __attribute__((always_inline)) inline JSObject *
+NewNonFunction(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent)
+{
+    gc::FinalizeKind kind = gc::GetGCObjectKind((((clasp)->flags >> 8) & (((JSUint32)1 << (8)) - 1)));
+    return detail::NewObject<withProto, false>(cx, clasp, proto, parent, kind);
+}
+
+template <WithProto::e withProto>
+static __attribute__((always_inline)) inline JSObject *
+NewObject(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent,
+          gc::FinalizeKind kind)
+{
+    if (clasp == &js_FunctionClass)
+        return detail::NewObject<withProto, true>(cx, clasp, proto, parent, kind);
+    return detail::NewObject<withProto, false>(cx, clasp, proto, parent, kind);
+}
+
+template <WithProto::e withProto>
+static __attribute__((always_inline)) inline JSObject *
+NewObject(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent)
+{
+    gc::FinalizeKind kind = gc::GetGCObjectKind((((clasp)->flags >> 8) & (((JSUint32)1 << (8)) - 1)));
+    return NewObject<withProto>(cx, clasp, proto, parent, kind);
+}
+
+
+
+
+
+static inline gc::FinalizeKind
+GuessObjectGCKind(size_t numSlots, bool isArray)
+{
+    if (numSlots)
+        return gc::GetGCObjectKind(numSlots);
+    return isArray ? gc::FINALIZE_OBJECT8 : gc::FINALIZE_OBJECT4;
+}
+
+
+
+
+
+static inline gc::FinalizeKind
+NewObjectGCKind(JSContext *cx, js::Class *clasp)
+{
+    if (clasp == &js_ArrayClass || clasp == &js_SlowArrayClass)
+        return gc::FINALIZE_OBJECT8;
+    if (clasp == &js_FunctionClass)
+        return gc::FINALIZE_OBJECT2;
+    return gc::FINALIZE_OBJECT4;
+}
+
+
+static inline JSObject *
+CopyInitializerObject(JSContext *cx, JSObject *baseobj)
+{
+    ((void) 0);
+    ((void) 0);
+
+    gc::FinalizeKind kind = gc::FinalizeKind(baseobj->finalizeKind());
+    JSObject *obj = NewBuiltinClassInstance(cx, &js_ObjectClass, kind);
+
+    if (!obj || !obj->ensureSlots(cx, baseobj->numSlots()))
+        return __null;
+
+    obj->flags = baseobj->flags;
+    obj->lastProp = baseobj->lastProp;
+    obj->objShape = baseobj->objShape;
+
+    return obj;
+}
+# 1206 "jsobjinlines.h"
+static __attribute__((always_inline)) inline
+
+# 1206 "jsobjinlines.h"
+                        bool
+ClassMethodIsNative(JSContext *cx, JSObject *obj, Class *clasp, jsid methodid,
+                    Native native)
+{
+    ((void) 0);
+
+    if (HasNativeMethod(obj, methodid, native))
+        return true;
+
+    JSObject *pobj = obj->getProto();
+    return pobj && pobj->getClass() == clasp &&
+           HasNativeMethod(pobj, methodid, native);
+}
+
+}
+# 77 "jsxml.cpp" 2
+
+
+
+
+
+
+using namespace js;
+using namespace js::gc;
+# 98 "jsxml.cpp"
+static inline
+
+# 98 "jsxml.cpp"
+              bool
+js_EnterLocalRootScope(JSContext *cx)
+{
+    return true;
+}
+
+static inline void
+js_LeaveLocalRootScope(JSContext *cx)
+{
+}
+
+static inline void
+js_LeaveLocalRootScopeWithResult(JSContext *cx, jsval rval)
+{
+}
+
+static inline void
+js_LeaveLocalRootScopeWithResult(JSContext *cx, Value rval)
+{
+}
+
+static inline void
+js_LeaveLocalRootScopeWithResult(JSContext *cx, void *rval)
+{
+}
+# 142 "jsxml.cpp"
+const char js_AttributeName_str[] = "AttributeName";
+const char js_isXMLName_str[] = "isXMLName";
+const char js_XMLList_str[] = "XMLList";
+const char js_localName_str[] = "localName";
+const char js_xml_parent_str[] = "parent";
+const char js_prefix_str[] = "prefix";
+const char js_toXMLString_str[] = "toXMLString";
+const char js_uri_str[] = "uri";
+
+const char js_amp_entity_str[] = "&amp;";
+const char js_gt_entity_str[] = "&gt;";
+const char js_lt_entity_str[] = "&lt;";
+const char js_quot_entity_str[] = "&quot;";
+const char js_leftcurly_entity_str[] = "&#123;";
+
+
+
+static JSBool
+GetXMLFunction(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
+
+static JSBool
+IsDeclared(const JSObject *obj)
+{
+    jsval v;
+
+    ((void) 0);
+    v = obj->getNamespaceDeclared();
+    ((void) 0);
+    return v == ((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)1));
+}
+
+static JSBool
+xml_isXMLName(JSContext *cx, uintN argc, jsval *vp)
+{
+    *vp = BOOLEAN_TO_JSVAL(js_IsXMLName(cx, argc ? vp[2] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0))));
+    return (JSIntn)1;
+}
+
+
+
+
+
+
+static inline JSObject *
+NewBuiltinClassInstanceXML(JSContext *cx, Class *clasp)
+{
+    JSObject *obj = NewBuiltinClassInstance(cx, clasp);
+    if (obj)
+        obj->syncSpecialEquality();
+    return obj;
+}
+# 205 "jsxml.cpp"
+static JSBool NamePrefix_getter(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { if (obj->getClass() == &js_NamespaceClass) *vp = obj->getNamePrefixVal(); return true; }
+
+static JSBool NameURI_getter(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { if (obj->getClass() == &js_NamespaceClass) *vp = obj->getNameURIVal(); return true; }
+
+
+static JSBool
+namespace_equality(JSContext *cx, JSObject *obj, const Value *v, JSBool *bp)
+{
+    JSObject *obj2;
+
+    ((void) 0);
+    obj2 = v->toObjectOrNull();
+    *bp = (!obj2 || obj2->getClass() != &js_NamespaceClass)
+          ? (JSIntn)0
+          : EqualStrings(obj->getNameURI(), obj2->getNameURI());
+    return (JSIntn)1;
+}
+
+__attribute__((visibility ("default"))) Class js_NamespaceClass = {
+    "Namespace",
+    (1<<6) |
+    (((JSObject::NAMESPACE_CLASS_RESERVED_SLOTS) & (((JSUint32)1 << (8)) - 1)) << 8) |
+    (1<<((8 + 8)+3)) | ((JSProto_Namespace) << ((8 + 8) + 8)),
+    PropertyStub,
+    PropertyStub,
+    PropertyStub,
+    StrictPropertyStub,
+    EnumerateStub,
+    ResolveStub,
+    ConvertStub,
+    FinalizeStub,
+    __null,
+    __null,
+    __null,
+    __null,
+    __null,
+    __null,
+    __null,
+    {
+        namespace_equality,
+        __null,
+        __null,
+        __null,
+        __null,
+    }
+};
+
+
+
+
+static JSPropertySpec namespace_props[] = {
+    {js_prefix_str, 0, (0x01 | 0x02 | 0x04 | 0x40), NamePrefix_getter, 0},
+    {js_uri_str, 0, (0x01 | 0x02 | 0x04 | 0x40), NameURI_getter, 0},
+    {0,0,0,0,0}
+};
+
+static JSBool
+namespace_toString(JSContext *cx, uintN argc, Value *vp)
+{
+    JSObject *obj = ToObject(cx, &vp[1]);
+    if (!obj)
+        return (JSIntn)0;
+    if (!JS_InstanceOf(cx, obj, Jsvalify(&js_NamespaceClass), Jsvalify(vp + 2)))
+        return (JSIntn)0;
+    *vp = Valueify(obj->getNameURIVal());
+    return (JSIntn)1;
+}
+
+static JSFunctionSpec namespace_methods[] = {
+    {js_toString_str, ((JSNative)(namespace_toString)), 0, (0) | 0x1000},
+    {__null, __null, 0, 0}
+};
+
+static JSObject *
+NewXMLNamespace(JSContext *cx, JSLinearString *prefix, JSLinearString *uri, JSBool declared)
+{
+    JSObject *obj;
+
+    obj = NewBuiltinClassInstanceXML(cx, &js_NamespaceClass);
+    if (!obj)
+        return (JSIntn)0;
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    if (prefix)
+        obj->setNamePrefix(prefix);
+    if (uri)
+        obj->setNameURI(uri);
+    if (declared)
+        obj->setNamespaceDeclared(((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)1)));
+    ;
+    return obj;
+}
+
+
+
+
+static JSBool QNameNameURI_getter(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { if (obj->getClass() == &js_QNameClass) *vp = JSVAL_IS_VOID(obj->getNameURIVal()) ? ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0)) : obj->getNameURIVal(); return true; }
+
+
+static JSBool QNameLocalName_getter(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { if (obj->getClass() == &js_QNameClass) *vp = obj->getQNameLocalNameVal(); return true; }
+
+
+
+static JSBool
+qname_identity(JSObject *qna, JSObject *qnb)
+{
+    JSLinearString *uri1 = qna->getNameURI();
+    JSLinearString *uri2 = qnb->getNameURI();
+
+    if (!uri1 ^ !uri2)
+        return (JSIntn)0;
+    if (uri1 && !EqualStrings(uri1, uri2))
+        return (JSIntn)0;
+    return EqualStrings(qna->getQNameLocalName(), qnb->getQNameLocalName());
+}
+
+static JSBool
+qname_equality(JSContext *cx, JSObject *qn, const Value *v, JSBool *bp)
+{
+    JSObject *obj2;
+
+    obj2 = v->toObjectOrNull();
+    *bp = (!obj2 || obj2->getClass() != &js_QNameClass)
+          ? (JSIntn)0
+          : qname_identity(qn, obj2);
+    return (JSIntn)1;
+}
+
+__attribute__((visibility ("default"))) Class js_QNameClass = {
+    "QName",
+    (1<<6) |
+    (((JSObject::QNAME_CLASS_RESERVED_SLOTS) & (((JSUint32)1 << (8)) - 1)) << 8) |
+    (1<<((8 + 8)+3)) | ((JSProto_QName) << ((8 + 8) + 8)),
+    PropertyStub,
+    PropertyStub,
+    PropertyStub,
+    StrictPropertyStub,
+    EnumerateStub,
+    ResolveStub,
+    ConvertStub,
+    FinalizeStub,
+    __null,
+    __null,
+    __null,
+    __null,
+    __null,
+    __null,
+    __null,
+    {
+        qname_equality,
+        __null,
+        __null,
+        __null,
+        __null,
+    }
+};
+
+
+
+
+
+
+
+__attribute__((visibility ("default"))) Class js_AttributeNameClass = {
+    js_AttributeName_str,
+    (1<<6) |
+    (((JSObject::QNAME_CLASS_RESERVED_SLOTS) & (((JSUint32)1 << (8)) - 1)) << 8) |
+    (1<<((8 + 8)+3)) | (1<<((8 + 8)+1)),
+    PropertyStub,
+    PropertyStub,
+    PropertyStub,
+    StrictPropertyStub,
+    EnumerateStub,
+    ResolveStub,
+    ConvertStub,
+    FinalizeStub
+};
+
+__attribute__((visibility ("default"))) Class js_AnyNameClass = {
+    js_AnyName_str,
+    (1<<6) |
+    (((JSObject::QNAME_CLASS_RESERVED_SLOTS) & (((JSUint32)1 << (8)) - 1)) << 8) |
+    (1<<((8 + 8)+3)) | (1<<((8 + 8)+1)),
+    PropertyStub,
+    PropertyStub,
+    PropertyStub,
+    StrictPropertyStub,
+    EnumerateStub,
+    ResolveStub,
+    ConvertStub,
+    FinalizeStub
+};
+
+
+
+static JSPropertySpec qname_props[] = {
+    {js_uri_str, 0, (0x01 | 0x02 | 0x04 | 0x40), QNameNameURI_getter, 0},
+    {js_localName_str, 0, (0x01 | 0x02 | 0x04 | 0x40), QNameLocalName_getter, 0},
+    {0,0,0,0,0}
+};
+
+static JSString *
+ConvertQNameToString(JSContext *cx, JSObject *obj)
+{
+    ((void) 0);
+    JSString *uri = obj->getNameURI();
+    JSString *str;
+    if (!uri) {
+
+        str = (cx->runtime->atomState.starQualifierAtom);
+    } else if (uri->empty()) {
+
+        str = cx->runtime->emptyString;
+    } else {
+        JSString *qualstr = (cx->runtime->atomState.qualifierAtom);
+        str = js_ConcatStrings(cx, uri, qualstr);
+        if (!str)
+            return __null;
+    }
+    str = js_ConcatStrings(cx, str, obj->getQNameLocalName());
+    if (!str)
+        return __null;
+
+    if (obj->getClass() == &js_AttributeNameClass) {
+        JS::Anchor<JSString *> anchor(str);
+        size_t length = str->length();
+        jschar *chars = (jschar *) cx->malloc((length + 2) * sizeof(jschar));
+        if (!chars)
+            return (JSIntn)0;
+        *chars = '@';
+        const jschar *strChars = str->getChars(cx);
+        if (!strChars) {
+            cx->free(chars);
+            return __null;
+        }
+        memcpy((chars + 1), (strChars), (length) * sizeof(jschar));
+        chars[++length] = 0;
+        str = js_NewString(cx, chars, length);
+        if (!str) {
+            cx->free(chars);
+            return __null;
+        }
+    }
+    return str;
+}
+
+static JSBool
+qname_toString(JSContext *cx, uintN argc, Value *vp)
+{
+    JSObject *obj = ToObject(cx, &vp[1]);
+    if (!obj)
+        return false;
+
+    if (!InstanceOf(cx, obj, &js_QNameClass, vp + 2))
+        return false;
+
+    JSString *str = ConvertQNameToString(cx, obj);
+    if (!str)
+        return false;
+
+    vp->setString(str);
+    return true;
+}
+
+static JSFunctionSpec qname_methods[] = {
+    {js_toString_str, ((JSNative)(qname_toString)), 0, (0) | 0x1000},
+    {__null, __null, 0, 0}
+};
+
+
+static void
+InitXMLQName(JSObject *obj, JSLinearString *uri, JSLinearString *prefix,
+             JSLinearString *localName)
+{
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    ((void) 0);
+    if (uri)
+        obj->setNameURI(uri);
+    if (prefix)
+        obj->setNamePrefix(prefix);
+    if (localName)
+        obj->setQNameLocalName(localName);
+}
+
+static JSObject *
+NewXMLQName(JSContext *cx, JSLinearString *uri, JSLinearString *prefix,
+            JSLinearString *localName)
+{
+    JSObject *obj = NewBuiltinClassInstanceXML(cx, &js_QNameClass);
+    if (!obj)
+        return __null;
+    InitXMLQName(obj, uri, prefix, localName);
+    ;
+    return obj;
+}
+
+static JSObject *
+NewXMLAttributeName(JSContext *cx, JSLinearString *uri, JSLinearString *prefix,
+                    JSLinearString *localName)
+{
+
+
+
+
+    JSObject *obj = NewNonFunction<WithProto::Given>(cx, &js_AttributeNameClass, __null, __null);
+    if (!obj)
+        return __null;
+    ((void) 0);
+    InitXMLQName(obj, uri, prefix, localName);
+    ;
+    return obj;
+}
+
+JSObject *
+js_ConstructXMLQNameObject(JSContext *cx, const Value &nsval, const Value &lnval)
+{
+    Value argv[2];
+
+
+
+
+
+
+    if (nsval.isObject() &&
+        nsval.toObject().getClass() == &js_AnyNameClass) {
+        argv[0].setNull();
+    } else {
+        argv[0] = nsval;
+    }
+    argv[1] = lnval;
+    return js_ConstructObject(cx, &js_QNameClass, __null, __null, 2, argv);
+}
+
+static JSBool
+IsXMLName(const jschar *cp, size_t n)
+{
+    JSBool rv;
+    jschar c;
+
+    rv = (JSIntn)0;
+    if (n != 0 && (((js_A[js_Y[(js_X[(uint16)(*cp)>>6]<<6)|((*cp)&0x3F)]]) & 0x00000100) || (*cp) == '_')) {
+        while (--n != 0) {
+            c = *++cp;
+            if (!(((js_A[js_Y[(js_X[(uint16)(c)>>6]<<6)|((c)&0x3F)]]) & 0x00000080) || (c) == '.' || (c) == '-' || (c) == '_'))
+                return rv;
+        }
+        rv = (JSIntn)1;
+    }
+    return rv;
+}
+
+JSBool
+js_IsXMLName(JSContext *cx, jsval v)
+{
+    JSLinearString *name = __null;
+    JSErrorReporter older;
+
+
+
+
+
+
+
+    if (!JSVAL_IS_PRIMITIVE(v) &&
+        JSVAL_TO_OBJECT(v)->isQName()) {
+        name = JSVAL_TO_OBJECT(v)->getQNameLocalName();
+    } else {
+        older = JS_SetErrorReporter(cx, __null);
+        JSString *str = js_ValueToString(cx, Valueify(v));
+        if (str)
+            name = str->ensureLinear(cx);
+        JS_SetErrorReporter(cx, older);
+        if (!name) {
+            JS_ClearPendingException(cx);
+            return (JSIntn)0;
+        }
+    }
+
+    return IsXMLName(name->chars(), name->length());
+}
+
+
+
+
+
+static JSBool
+NamespaceHelper(JSContext *cx, JSObject *obj, intN argc, jsval *argv,
+                jsval *rval)
+{
+    jsval urival, prefixval;
+    JSObject *uriobj;
+    JSBool isNamespace, isQName;
+    Class *clasp;
+    JSLinearString *empty, *prefix, *uri;
+
+    isNamespace = isQName = (JSIntn)0;
+
+    uriobj = __null;
+
+    if (argc <= 0) {
+        urival = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+    } else {
+        urival = argv[argc > 1];
+        if (!JSVAL_IS_PRIMITIVE(urival)) {
+            uriobj = JSVAL_TO_OBJECT(urival);
+            clasp = uriobj->getClass();
+            isNamespace = (clasp == &js_NamespaceClass);
+            isQName = (clasp == &js_QNameClass);
+        }
+    }
+
+    if (!obj) {
+
+        if (argc == 1 && isNamespace) {
+
+            *rval = urival;
+            return (JSIntn)1;
+        }
+
+        obj = NewBuiltinClassInstanceXML(cx, &js_NamespaceClass);
+        if (!obj)
+            return (JSIntn)0;
+    }
+    *rval = OBJECT_TO_JSVAL(obj);
+    ;
+
+    empty = cx->runtime->emptyString;
+    obj->setNamePrefix(empty);
+    obj->setNameURI(empty);
+
+    if (argc == 1 || argc == -1) {
+        if (isNamespace) {
+            obj->setNameURI(uriobj->getNameURI());
+            obj->setNamePrefix(uriobj->getNamePrefix());
+        } else if (isQName && (uri = uriobj->getNameURI())) {
+            obj->setNameURI(uri);
+            obj->setNamePrefix(uriobj->getNamePrefix());
+        } else {
+            JSString *str = js_ValueToString(cx, Valueify(urival));
+            if (!str)
+                return (JSIntn)0;
+            uri = str->ensureLinear(cx);
+            if (!uri)
+                return (JSIntn)0;
+            obj->setNameURI(uri);
+            if (!uri->empty())
+                obj->clearNamePrefix();
+        }
+    } else if (argc == 2) {
+        if (!isQName || !(uri = uriobj->getNameURI())) {
+            JSString *str = js_ValueToString(cx, Valueify(urival));
+            if (!str)
+                return (JSIntn)0;
+            uri = str->ensureLinear(cx);
+            if (!uri)
+                return (JSIntn)0;
+        }
+        obj->setNameURI(uri);
+
+        prefixval = argv[0];
+        if (uri->empty()) {
+            if (!JSVAL_IS_VOID(prefixval)) {
+                JSString *str = js_ValueToString(cx, Valueify(prefixval));
+                if (!str)
+                    return (JSIntn)0;
+                if (!str->empty()) {
+                    JSAutoByteString bytes;
+                    if (js_ValueToPrintable(cx, StringValue(str), &bytes)) {
+                        JS_ReportErrorNumber(cx, js_GetErrorMessage, __null,
+                                             JSMSG_BAD_XML_NAMESPACE, bytes.ptr());
+                    }
+                    return (JSIntn)0;
+                }
+            }
+        } else if (JSVAL_IS_VOID(prefixval) || !js_IsXMLName(cx, prefixval)) {
+            obj->clearNamePrefix();
+        } else {
+            JSString *str = js_ValueToString(cx, Valueify(prefixval));
+            if (!str)
+                return (JSIntn)0;
+            prefix = str->ensureLinear(cx);
+            if (!prefix)
+                return (JSIntn)0;
+            obj->setNamePrefix(prefix);
+        }
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+Namespace(JSContext *cx, uintN argc, Value *vp)
+{
+    JSObject *thisobj = __null;
+    (void)IsConstructing_PossiblyWithGivenThisObject(vp, &thisobj);
+    return NamespaceHelper(cx, thisobj, argc, Jsvalify(vp + 2), Jsvalify(vp));
+}
+
+
+
+
+
+static JSBool
+QNameHelper(JSContext *cx, JSObject *obj, intN argc, jsval *argv, jsval *rval)
+{
+    jsval nameval, nsval;
+    JSBool isQName, isNamespace;
+    JSObject *qn;
+    JSLinearString *uri, *prefix, *name;
+    JSObject *obj2;
+
+    if (argc <= 0) {
+        nameval = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+        isQName = (JSIntn)0;
+    } else {
+        nameval = argv[argc > 1];
+        isQName =
+            !JSVAL_IS_PRIMITIVE(nameval) &&
+            JSVAL_TO_OBJECT(nameval)->getClass() == &js_QNameClass;
+    }
+
+    if (!obj) {
+
+        if (argc == 1 && isQName) {
+
+            *rval = nameval;
+            return (JSIntn)1;
+        }
+
+
+        obj = NewBuiltinClassInstanceXML(cx, &js_QNameClass);
+        if (!obj)
+            return (JSIntn)0;
+    }
+    *rval = OBJECT_TO_JSVAL(obj);
+    ;
+
+    if (isQName) {
+
+        qn = JSVAL_TO_OBJECT(nameval);
+        if (argc == 1) {
+            uri = qn->getNameURI();
+            prefix = qn->getNamePrefix();
+            name = qn->getQNameLocalName();
+            goto out;
+        }
+
+
+        nameval = qn->getQNameLocalNameVal();
+    }
+
+    if (argc == 0) {
+        name = cx->runtime->emptyString;
+    } else if (argc < 0) {
+        name = (cx->runtime->atomState.typeAtoms[JSTYPE_VOID]);
+    } else {
+        JSString *str = js_ValueToString(cx, Valueify(nameval));
+        if (!str)
+            return (JSIntn)0;
+        name = str->ensureLinear(cx);
+        if (!name)
+            return (JSIntn)0;
+        argv[argc > 1] = STRING_TO_JSVAL(name);
+    }
+
+    if (argc > 1 && !JSVAL_IS_VOID(argv[0])) {
+        nsval = argv[0];
+    } else if (((name)->length() == 1 && *(name)->chars() == '*')) {
+        nsval = ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+    } else {
+        if (!js_GetDefaultXMLNamespace(cx, &nsval))
+            return (JSIntn)0;
+        ((void) 0);
+        ((void) 0)
+                                     ;
+    }
+
+    if (JSVAL_IS_NULL(nsval)) {
+
+        prefix = uri = __null;
+    } else {
+
+
+
+
+
+
+
+        isNamespace = isQName = (JSIntn)0;
+        if (!JSVAL_IS_PRIMITIVE(nsval)) {
+            obj2 = JSVAL_TO_OBJECT(nsval);
+            isNamespace = (obj2->getClass() == &js_NamespaceClass);
+            isQName = (obj2->getClass() == &js_QNameClass);
+        }
+
+        else obj2 = __null;
+
+
+        if (isNamespace) {
+            uri = obj2->getNameURI();
+            prefix = obj2->getNamePrefix();
+        } else if (isQName && (uri = obj2->getNameURI())) {
+            ((void) 0);
+            prefix = obj2->getNamePrefix();
+        } else {
+            ((void) 0);
+            JSString *str = js_ValueToString(cx, Valueify(nsval));
+            if (!str)
+                return (JSIntn)0;
+            uri = str->ensureLinear(cx);
+            if (!uri)
+                return (JSIntn)0;
+            argv[0] = STRING_TO_JSVAL(uri);
+
+
+            prefix = uri->empty() ? cx->runtime->emptyString : __null;
+        }
+    }
+
+out:
+    InitXMLQName(obj, uri, prefix, name);
+    return (JSIntn)1;
+}
+
+static JSBool
+QName(JSContext *cx, uintN argc, Value *vp)
+{
+    JSObject *thisobj = __null;
+    (void)IsConstructing_PossiblyWithGivenThisObject(vp, &thisobj);
+    return QNameHelper(cx, thisobj, argc, Jsvalify(vp + 2), Jsvalify(vp));
+}
+
+
+
+
+static JSBool
+namespace_identity(const void *a, const void *b)
+{
+    const JSObject *nsa = (const JSObject *) a;
+    const JSObject *nsb = (const JSObject *) b;
+    JSLinearString *prefixa = nsa->getNamePrefix();
+    JSLinearString *prefixb = nsb->getNamePrefix();
+
+    if (prefixa && prefixb) {
+        if (!EqualStrings(prefixa, prefixb))
+            return (JSIntn)0;
+    } else {
+        if (prefixa || prefixb)
+            return (JSIntn)0;
+    }
+    return EqualStrings(nsa->getNameURI(), nsb->getNameURI());
+}
+
+static JSBool
+attr_identity(const void *a, const void *b)
+{
+    const JSXML *xmla = (const JSXML *) a;
+    const JSXML *xmlb = (const JSXML *) b;
+
+    return qname_identity(xmla->name, xmlb->name);
+}
+
+void
+JSXMLArrayCursor::trace(JSTracer *trc) {
+
+
+
+    for (JSXMLArrayCursor *cursor = this; cursor; cursor = cursor->next)
+        js::gc::MarkGCThing(trc, cursor->root, "cursor_root", index++);
+}
+
+static void
+XMLArrayCursorTrace(JSTracer *trc, JSXMLArrayCursor *cursor)
+{
+    cursor->trace(trc);
+}
+
+
+
+bool
+# 886 "jsxml.cpp"
+JSXMLArray::setCapacity(JSContext *cx, uint32 newCapacity)
+{
+    if (newCapacity == 0) {
+
+        if (vector) {
+            if (cx)
+                cx->free(vector);
+            else
+                js_free(vector);
+        }
+        vector = __null;
+    } else {
+        void **tmp;
+
+        if (
+
+
+
+            !(tmp = (void **) js_realloc(vector, newCapacity * sizeof(void *)))) {
+            if (cx)
+                JS_ReportOutOfMemory(cx);
+            return false;
+        }
+        vector = tmp;
+    }
+    capacity = ((JSUint32)1 << (31)) | newCapacity;
+    return true;
+}
+
+void
+JSXMLArray::trim()
+{
+    if (capacity & ((JSUint32)1 << (31)))
+        return;
+    if (length < capacity)
+        setCapacity(__null, length);
+}
+
+void
+JSXMLArray::finish(JSContext *cx)
+{
+    cx->free(vector);
+
+    while (JSXMLArrayCursor *cursor = cursors)
+        cursor->disconnect();
+
+
+
+
+}
+
+
+
+static uint32
+XMLArrayFindMember(const JSXMLArray *array, void *elt, JSIdentityOp identity)
+{
+    void **vector;
+    uint32 i, n;
+
+
+    vector = array->vector;
+    if (identity) {
+        for (i = 0, n = array->length; i < n; i++) {
+            if (identity(vector[i], elt))
+                return i;
+        }
+    } else {
+        for (i = 0, n = array->length; i < n; i++) {
+            if (vector[i] == elt)
+                return i;
+        }
+    }
+    return ((uint32) -1);
+}
+# 969 "jsxml.cpp"
+static JSBool
+XMLArrayAddMember(JSContext *cx, JSXMLArray *array, uint32 index, void *elt)
+{
+    uint32 capacity, i;
+    int log2;
+    void **vector;
+
+    if (index >= array->length) {
+        if (index >= ((array)->capacity & (((JSUint32)1 << (31)) - 1))) {
+
+            capacity = index + 1;
+            if (index >= 256) {
+                capacity = ((((capacity)+(32)-1)/(32))*(32));
+            } else {
+                do { unsigned int j_ = (unsigned int)(capacity); (log2) = (j_ <= 1 ? 0 : 32 - __builtin_clz(j_ - 1)); } while (0);
+                capacity = ((JSUint32)1 << (log2));
+            }
+            if (
+
+
+
+                !(vector = (void **)
+                           js_realloc(array->vector, capacity * sizeof(void *)))) {
+                JS_ReportOutOfMemory(cx);
+                return (JSIntn)0;
+            }
+            array->capacity = capacity;
+            array->vector = vector;
+            for (i = array->length; i < index; i++)
+                vector[i] = __null;
+        }
+        array->length = index + 1;
+    }
+
+    array->vector[index] = elt;
+    return (JSIntn)1;
+}
+
+static JSBool
+XMLArrayInsert(JSContext *cx, JSXMLArray *array, uint32 i, uint32 n)
+{
+    uint32 j;
+    JSXMLArrayCursor *cursor;
+
+    j = array->length;
+    ((void) 0);
+    if (!array->setCapacity(cx, j + n))
+        return (JSIntn)0;
+
+    array->length = j + n;
+    ((void) 0);
+    while (j != i) {
+        --j;
+        array->vector[j + n] = array->vector[j];
+    }
+
+    for (cursor = array->cursors; cursor; cursor = cursor->next) {
+        if (cursor->index > i)
+            cursor->index += n;
+    }
+    return (JSIntn)1;
+}
+
+static void *
+XMLArrayDelete(JSContext *cx, JSXMLArray *array, uint32 index, JSBool compress)
+{
+    uint32 length;
+    void **vector, *elt;
+    JSXMLArrayCursor *cursor;
+
+    length = array->length;
+    if (index >= length)
+        return __null;
+
+    vector = array->vector;
+    elt = vector[index];
+    if (compress) {
+        while (++index < length)
+            vector[index-1] = vector[index];
+        array->length = length - 1;
+        array->capacity = ((array)->capacity & (((JSUint32)1 << (31)) - 1));
+    } else {
+        vector[index] = __null;
+    }
+
+    for (cursor = array->cursors; cursor; cursor = cursor->next) {
+        if (cursor->index > index)
+            --cursor->index;
+    }
+    return elt;
+}
+
+static void
+XMLArrayTruncate(JSContext *cx, JSXMLArray *array, uint32 length)
+{
+    void **vector;
+
+    ((void) 0);
+    if (length >= array->length)
+        return;
+
+    if (length == 0) {
+        if (array->vector)
+            cx->free(array->vector);
+        vector = __null;
+    } else {
+        vector = (void **) js_realloc(array->vector, length * sizeof(void *));
+        if (!vector)
+            return;
+    }
+
+    if (array->length > length)
+        array->length = length;
+    array->capacity = length;
+    array->vector = vector;
+}
+# 1107 "jsxml.cpp"
+static const char js_ignoreComments_str[] = "ignoreComments";
+static const char js_ignoreProcessingInstructions_str[]
+                                            = "ignoreProcessingInstructions";
+static const char js_ignoreWhitespace_str[] = "ignoreWhitespace";
+static const char js_prettyPrinting_str[] = "prettyPrinting";
+static const char js_prettyIndent_str[] = "prettyIndent";
+
+
+
+
+
+
+static JSPropertySpec xml_static_props[] = {
+    {js_ignoreComments_str, 0, 0x04, __null, __null},
+    {js_ignoreProcessingInstructions_str, 0, 0x04, __null, __null},
+    {js_ignoreWhitespace_str, 0, 0x04, __null, __null},
+    {js_prettyPrinting_str, 0, 0x04, __null, __null},
+    {js_prettyIndent_str, 0, 0x04, __null, __null},
+    {0,0,0,0,0}
+};
+# 1150 "jsxml.cpp"
+static const char xml_namespace_str[] = "http://www.w3.org/XML/1998/namespace";
+static const char xmlns_namespace_str[] = "http://www.w3.org/2000/xmlns/";
+
+static JSObject *
+ParseNodeToQName(Parser *parser, JSParseNode *pn,
+                 JSXMLArray *inScopeNSes, JSBool isAttributeName)
+{
+    JSContext *cx = parser->context;
+    JSLinearString *str, *uri, *prefix, *localName;
+    size_t length, offset;
+    const jschar *start, *limit, *colon;
+    uint32 n;
+    JSObject *ns;
+    JSLinearString *nsprefix;
+
+    ((void) 0);
+    str = pn->pn_u.name.atom;
+    start = str->chars();
+    length = str->length();
+    ((void) 0);
+    ((void) 0);
+
+    uri = cx->runtime->emptyString;
+    limit = start + length;
+    colon = js_strchr_limit(start, ':', limit);
+    if (colon) {
+        offset = colon - start;
+        prefix = js_NewDependentString(cx, str, 0, offset);
+        if (!prefix)
+            return __null;
+
+        if ((offset >= 3 && (((jschar) (((js_A[js_Y[(js_X[(uint16)((start)[0])>>6]<<6)|(((start)[0])&0x3F)]]) & 0x00200000) ? ((start)[0]) + ((int32)(js_A[js_Y[(js_X[(uint16)((start)[0])>>6]<<6)|(((start)[0])&0x3F)]]) >> 22) : ((start)[0]))) == 'x' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((start)[1])>>6]<<6)|(((start)[1])&0x3F)]]) & 0x00200000) ? ((start)[1]) + ((int32)(js_A[js_Y[(js_X[(uint16)((start)[1])>>6]<<6)|(((start)[1])&0x3F)]]) >> 22) : ((start)[1]))) == 'm' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((start)[2])>>6]<<6)|(((start)[2])&0x3F)]]) & 0x00200000) ? ((start)[2]) + ((int32)(js_A[js_Y[(js_X[(uint16)((start)[2])>>6]<<6)|(((start)[2])&0x3F)]]) >> 22) : ((start)[2]))) == 'l'))) {
+            if (offset == 3) {
+                uri = JS_ASSERT_STRING_IS_FLAT(JS_InternString(cx, xml_namespace_str));
+                if (!uri)
+                    return __null;
+            } else if (offset == 5 && (((jschar) (((js_A[js_Y[(js_X[(uint16)((start)[3])>>6]<<6)|(((start)[3])&0x3F)]]) & 0x00200000) ? ((start)[3]) + ((int32)(js_A[js_Y[(js_X[(uint16)((start)[3])>>6]<<6)|(((start)[3])&0x3F)]]) >> 22) : ((start)[3]))) == 'n' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((start)[4])>>6]<<6)|(((start)[4])&0x3F)]]) & 0x00200000) ? ((start)[4]) + ((int32)(js_A[js_Y[(js_X[(uint16)((start)[4])>>6]<<6)|(((start)[4])&0x3F)]]) >> 22) : ((start)[4]))) == 's')) {
+                uri = JS_ASSERT_STRING_IS_FLAT(JS_InternString(cx, xmlns_namespace_str));
+                if (!uri)
+                    return __null;
+            } else {
+                uri = __null;
+            }
+        } else {
+            uri = __null;
+            n = inScopeNSes->length;
+            while (n != 0) {
+                --n;
+                ns = (((n) < (inScopeNSes)->length) ? (JSObject *) (inScopeNSes)->vector[n] : __null);
+                nsprefix = ns->getNamePrefix();
+                if (nsprefix && EqualStrings(nsprefix, prefix)) {
+                    uri = ns->getNameURI();
+                    break;
+                }
+            }
+        }
+
+        if (!uri) {
+            Value v = StringValue(prefix);
+            JSAutoByteString bytes;
+            if (js_ValueToPrintable(parser->context, v, &bytes)) {
+                ReportCompileErrorNumber(parser->context, &parser->tokenStream, pn,
+                                         0x0, JSMSG_BAD_XML_NAMESPACE, bytes.ptr());
+            }
+            return __null;
+        }
+
+        localName = js_NewStringCopyN(parser->context, colon + 1, length - (offset + 1));
+        if (!localName)
+            return __null;
+    } else {
+        if (isAttributeName) {
+
+
+
+
+            prefix = uri;
+        } else {
+
+
+
+
+            n = inScopeNSes->length;
+            while (n != 0) {
+                --n;
+                ns = (((n) < (inScopeNSes)->length) ? (JSObject *) (inScopeNSes)->vector[n] : __null);
+                nsprefix = ns->getNamePrefix();
+                if (!nsprefix || nsprefix->empty()) {
+                    uri = ns->getNameURI();
+                    break;
+                }
+            }
+            prefix = uri->empty() ? parser->context->runtime->emptyString : __null;
+        }
+        localName = str;
+    }
+
+    return NewXMLQName(parser->context, uri, prefix, localName);
+}
+
+static JSString *
+ChompXMLWhitespace(JSContext *cx, JSString *str)
+{
+    size_t length, newlength, offset;
+    const jschar *cp, *start, *end;
+    jschar c;
+
+    length = str->length();
+    start = str->getChars(cx);
+    if (!start)
+        return __null;
+
+    for (cp = start, end = cp + length; cp < end; cp++) {
+        c = *cp;
+        if (!((c) == ' ' || (c) == '\t' || (c) == '\r' || (c) == '\n'))
+            break;
+    }
+    while (end > cp) {
+        c = end[-1];
+        if (!((c) == ' ' || (c) == '\t' || (c) == '\r' || (c) == '\n'))
+            break;
+        --end;
+    }
+    newlength = end - cp;
+    if (newlength == length)
+        return str;
+    offset = cp - start;
+    return js_NewDependentString(cx, str, offset, newlength);
+}
+
+static JSXML *
+ParseNodeToXML(Parser *parser, JSParseNode *pn,
+               JSXMLArray *inScopeNSes, uintN flags)
+{
+    JSContext *cx = parser->context;
+    JSXML *xml, *kid, *attr, *attrj;
+    JSLinearString *str;
+    uint32 length, n, i, j;
+    JSParseNode *pn2, *pn3, *head, **pnp;
+    JSObject *ns;
+    JSObject *qn, *attrjqn;
+    JSXMLClass xml_class;
+    int stackDummy;
+
+    if (!((jsuword)(&stackDummy) > cx->stackLimit)) {
+        ReportCompileErrorNumber(cx, &parser->tokenStream, pn, 0x0,
+                                 JSMSG_OVER_RECURSED);
+        return __null;
+    }
+# 1307 "jsxml.cpp"
+    xml = __null;
+    if (!js_EnterLocalRootScope(cx))
+        return __null;
+    switch (pn->pn_type) {
+      case TOK_XMLELEM:
+        length = inScopeNSes->length;
+        pn2 = pn->pn_u.list.head;
+        xml = ParseNodeToXML(parser, pn2, inScopeNSes, flags);
+        if (!xml)
+            goto fail;
+
+        n = pn->pn_u.list.count;
+        ((void) 0);
+        n -= 2;
+        if (!xml->u.list.kids.setCapacity(cx, n))
+            goto fail;
+
+        i = 0;
+        while ((pn2 = pn2->pn_next) != __null) {
+            if (!pn2->pn_next) {
+
+                ((void) 0);
+                break;
+            }
+
+            if ((flags & ((JSUint32)1 << (2))) &&
+                n > 1 && pn2->pn_type == TOK_XMLSPACE) {
+                --n;
+                continue;
+            }
+
+            kid = ParseNodeToXML(parser, pn2, inScopeNSes, flags);
+            if (kid == ((JSXML *) 1)) {
+                --n;
+                continue;
+            }
+
+            if (!kid)
+                goto fail;
+
+
+            do { if ((&xml->u.list.kids)->length <= (i)) (&xml->u.list.kids)->length = (i) + 1; ((&xml->u.list.kids)->vector[i] = (void *)(kid)); } while (0);
+            kid->parent = xml;
+            ++i;
+
+
+            if ((flags & ((JSUint32)1 << (2))) &&
+                n > 1 && kid->xml_class == JSXML_CLASS_TEXT) {
+                JSString *str = ChompXMLWhitespace(cx, kid->u.value);
+                if (!str)
+                    goto fail;
+                kid->u.value = str;
+            }
+        }
+
+        ((void) 0);
+        if (n < pn->pn_u.list.count - 2)
+            xml->u.list.kids.trim();
+        XMLArrayTruncate(cx, inScopeNSes, length);
+        break;
+
+      case TOK_XMLLIST:
+        xml = js_NewXML(cx, JSXML_CLASS_LIST);
+        if (!xml)
+            goto fail;
+
+        n = pn->pn_u.list.count;
+        if (!xml->u.list.kids.setCapacity(cx, n))
+            goto fail;
+
+        i = 0;
+        for (pn2 = pn->pn_u.list.head; pn2; pn2 = pn2->pn_next) {
+
+
+
+
+
+            if (pn2->pn_type == TOK_XMLSPACE) {
+                --n;
+                continue;
+            }
+
+            kid = ParseNodeToXML(parser, pn2, inScopeNSes, flags);
+            if (kid == ((JSXML *) 1)) {
+                --n;
+                continue;
+            }
+
+            if (!kid)
+                goto fail;
+
+            do { if ((&xml->u.list.kids)->length <= (i)) (&xml->u.list.kids)->length = (i) + 1; ((&xml->u.list.kids)->vector[i] = (void *)(kid)); } while (0);
+            ++i;
+        }
+
+        if (n < pn->pn_u.list.count)
+            xml->u.list.kids.trim();
+        break;
+
+      case TOK_XMLSTAGO:
+      case TOK_XMLPTAGC:
+        length = inScopeNSes->length;
+        pn2 = pn->pn_u.list.head;
+        ((void) 0);
+        if (pn2->pn_arity == PN_LIST)
+            goto syntax;
+
+        xml = js_NewXML(cx, JSXML_CLASS_ELEMENT);
+        if (!xml)
+            goto fail;
+
+
+        ((void) 0);
+        n = pn->pn_u.list.count - 1;
+        pnp = &pn2->pn_next;
+        head = *pnp;
+        while ((pn2 = *pnp) != __null) {
+            size_t length;
+            const jschar *chars;
+
+            if (pn2->pn_type != TOK_XMLNAME || pn2->pn_arity != PN_NULLARY)
+                goto syntax;
+
+
+            for (pn3 = head; pn3 != pn2; pn3 = pn3->pn_next->pn_next) {
+                if (pn3->pn_u.name.atom == pn2->pn_u.name.atom) {
+                    Value v = StringValue((pn2->pn_u.name.atom));
+                    JSAutoByteString bytes;
+                    if (js_ValueToPrintable(cx, v, &bytes)) {
+                        ReportCompileErrorNumber(cx, &parser->tokenStream, pn2,
+                                                 0x0, JSMSG_DUPLICATE_XML_ATTR,
+                                                 bytes.ptr());
+                    }
+                    goto fail;
+                }
+            }
+
+            JSAtom *atom = pn2->pn_u.name.atom;
+            pn2 = pn2->pn_next;
+            ((void) 0);
+            if (pn2->pn_type != TOK_XMLATTR)
+                goto syntax;
+
+            chars = atom->chars();
+            length = atom->length();
+            if (length >= 5 &&
+                ((((jschar) (((js_A[js_Y[(js_X[(uint16)((chars)[0])>>6]<<6)|(((chars)[0])&0x3F)]]) & 0x00200000) ? ((chars)[0]) + ((int32)(js_A[js_Y[(js_X[(uint16)((chars)[0])>>6]<<6)|(((chars)[0])&0x3F)]]) >> 22) : ((chars)[0]))) == 'x' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((chars)[1])>>6]<<6)|(((chars)[1])&0x3F)]]) & 0x00200000) ? ((chars)[1]) + ((int32)(js_A[js_Y[(js_X[(uint16)((chars)[1])>>6]<<6)|(((chars)[1])&0x3F)]]) >> 22) : ((chars)[1]))) == 'm' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((chars)[2])>>6]<<6)|(((chars)[2])&0x3F)]]) & 0x00200000) ? ((chars)[2]) + ((int32)(js_A[js_Y[(js_X[(uint16)((chars)[2])>>6]<<6)|(((chars)[2])&0x3F)]]) >> 22) : ((chars)[2]))) == 'l') && (((jschar) (((js_A[js_Y[(js_X[(uint16)((chars)[3])>>6]<<6)|(((chars)[3])&0x3F)]]) & 0x00200000) ? ((chars)[3]) + ((int32)(js_A[js_Y[(js_X[(uint16)((chars)[3])>>6]<<6)|(((chars)[3])&0x3F)]]) >> 22) : ((chars)[3]))) == 'n' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((chars)[4])>>6]<<6)|(((chars)[4])&0x3F)]]) & 0x00200000) ? ((chars)[4]) + ((int32)(js_A[js_Y[(js_X[(uint16)((chars)[4])>>6]<<6)|(((chars)[4])&0x3F)]]) >> 22) : ((chars)[4]))) == 's')) &&
+                (length == 5 || chars[5] == ':')) {
+                JSLinearString *uri, *prefix;
+
+                uri = (pn2->pn_u.name.atom);
+                if (length == 5) {
+
+                    prefix = cx->runtime->emptyString;
+                } else {
+                    prefix = js_NewStringCopyN(cx, chars + 6, length - 6);
+                    if (!prefix)
+                        goto fail;
+                }
+
+
+
+
+
+
+
+                ns = NewXMLNamespace(cx, prefix, uri, (JSIntn)1);
+                if (!ns)
+                    goto fail;
+# 1484 "jsxml.cpp"
+                if (!(XMLArrayFindMember(inScopeNSes, (void *)(ns), namespace_identity) != ((uint32) -1))) {
+                    if (!XMLArrayAddMember(cx, inScopeNSes, (inScopeNSes)->length, (void *)((ns))) ||
+                        !XMLArrayAddMember(cx, &xml->u.elem.namespaces, (&xml->u.elem.namespaces)->length, (void *)((ns)))) {
+                        goto fail;
+                    }
+                }
+
+                ((void) 0);
+                n -= 2;
+                *pnp = pn2->pn_next;
+
+                continue;
+            }
+
+            pnp = &pn2->pn_next;
+        }
+
+        xml->u.elem.namespaces.trim();
+
+
+        pn2 = pn->pn_u.list.head;
+        qn = ParseNodeToQName(parser, pn2, inScopeNSes, (JSIntn)0);
+        if (!qn)
+            goto fail;
+        xml->name = qn;
+
+        ((void) 0);
+        n >>= 1;
+        if (!xml->u.elem.attrs.setCapacity(cx, n))
+            goto fail;
+
+        for (i = 0; (pn2 = pn2->pn_next) != __null; i++) {
+            qn = ParseNodeToQName(parser, pn2, inScopeNSes, (JSIntn)1);
+            if (!qn) {
+                xml->u.elem.attrs.length = i;
+                goto fail;
+            }
+
+
+
+
+
+            for (j = 0; j < i; j++) {
+                attrj = (((j) < (&xml->u.elem.attrs)->length) ? (JSXML *) (&xml->u.elem.attrs)->vector[j] : __null);
+                attrjqn = attrj->name;
+                if (EqualStrings(attrjqn->getNameURI(), qn->getNameURI()) &&
+                    EqualStrings(attrjqn->getQNameLocalName(), qn->getQNameLocalName())) {
+                    Value v = StringValue((pn2->pn_u.name.atom));
+                    JSAutoByteString bytes;
+                    if (js_ValueToPrintable(cx, v, &bytes)) {
+                        ReportCompileErrorNumber(cx, &parser->tokenStream, pn2,
+                                                 0x0, JSMSG_DUPLICATE_XML_ATTR,
+                                                 bytes.ptr());
+                    }
+                    goto fail;
+                }
+            }
+
+            pn2 = pn2->pn_next;
+            ((void) 0);
+            ((void) 0);
+
+            attr = js_NewXML(cx, JSXML_CLASS_ATTRIBUTE);
+            if (!attr)
+                goto fail;
+
+            do { if ((&xml->u.elem.attrs)->length <= (i)) (&xml->u.elem.attrs)->length = (i) + 1; ((&xml->u.elem.attrs)->vector[i] = (void *)(attr)); } while (0);
+            attr->parent = xml;
+            attr->name = qn;
+            attr->u.value = (pn2->pn_u.name.atom);
+        }
+
+
+        if (pn->pn_type == TOK_XMLPTAGC)
+            XMLArrayTruncate(cx, inScopeNSes, length);
+        break;
+
+      case TOK_XMLSPACE:
+      case TOK_XMLTEXT:
+      case TOK_XMLCDATA:
+      case TOK_XMLCOMMENT:
+      case TOK_XMLPI:
+        str = (pn->pn_u.name.atom);
+        qn = __null;
+        if (pn->pn_type == TOK_XMLCOMMENT) {
+            if (flags & ((JSUint32)1 << (0)))
+                goto skip_child;
+            xml_class = JSXML_CLASS_COMMENT;
+        } else if (pn->pn_type == TOK_XMLPI) {
+            if ((str->length() == 3 && (((jschar) (((js_A[js_Y[(js_X[(uint16)((str->chars())[0])>>6]<<6)|(((str->chars())[0])&0x3F)]]) & 0x00200000) ? ((str->chars())[0]) + ((int32)(js_A[js_Y[(js_X[(uint16)((str->chars())[0])>>6]<<6)|(((str->chars())[0])&0x3F)]]) >> 22) : ((str->chars())[0]))) == 'x' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((str->chars())[1])>>6]<<6)|(((str->chars())[1])&0x3F)]]) & 0x00200000) ? ((str->chars())[1]) + ((int32)(js_A[js_Y[(js_X[(uint16)((str->chars())[1])>>6]<<6)|(((str->chars())[1])&0x3F)]]) >> 22) : ((str->chars())[1]))) == 'm' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((str->chars())[2])>>6]<<6)|(((str->chars())[2])&0x3F)]]) & 0x00200000) ? ((str->chars())[2]) + ((int32)(js_A[js_Y[(js_X[(uint16)((str->chars())[2])>>6]<<6)|(((str->chars())[2])&0x3F)]]) >> 22) : ((str->chars())[2]))) == 'l'))) {
+                Value v = StringValue(str);
+                JSAutoByteString bytes;
+                if (js_ValueToPrintable(cx, v, &bytes)) {
+                    ReportCompileErrorNumber(cx, &parser->tokenStream, pn,
+                                             0x0, JSMSG_RESERVED_ID, bytes.ptr());
+                }
+                goto fail;
+            }
+
+            if (flags & ((JSUint32)1 << (1)))
+                goto skip_child;
+
+            qn = ParseNodeToQName(parser, pn, inScopeNSes, (JSIntn)0);
+            if (!qn)
+                goto fail;
+
+            str = pn->pn_u.apair.atom2
+                  ? (pn->pn_u.apair.atom2)
+                  : cx->runtime->emptyString;
+            xml_class = JSXML_CLASS_PROCESSING_INSTRUCTION;
+        } else {
+
+            xml_class = JSXML_CLASS_TEXT;
+        }
+
+        xml = js_NewXML(cx, xml_class);
+        if (!xml)
+            goto fail;
+        xml->name = qn;
+        if (pn->pn_type == TOK_XMLSPACE)
+            xml->xml_flags |= 0x1;
+        xml->u.value = str;
+        break;
+
+      default:
+        goto syntax;
+    }
+
+    js_LeaveLocalRootScopeWithResult(cx, xml);
+    return xml;
+
+skip_child:
+    js_LeaveLocalRootScope(cx);
+    return ((JSXML *) 1);
+
+
+
+syntax:
+    ReportCompileErrorNumber(cx, &parser->tokenStream, pn, 0x0, JSMSG_BAD_XML_MARKUP);
+fail:
+    js_LeaveLocalRootScope(cx);
+    return __null;
+}
+
+
+
+
+
+static JSBool
+GetXMLSetting(JSContext *cx, const char *name, jsval *vp)
+{
+    jsval v;
+
+    if (!js_FindClassObject(cx, __null, JSProto_XML, Valueify(&v)))
+        return (JSIntn)0;
+    if (!(!JSVAL_IS_PRIMITIVE(v) && JSVAL_TO_OBJECT(v)->isFunction())) {
+        *vp = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+        return (JSIntn)1;
+    }
+    return JS_GetProperty(cx, JSVAL_TO_OBJECT(v), name, vp);
+}
+
+static JSBool
+GetBooleanXMLSetting(JSContext *cx, const char *name, JSBool *bp)
+{
+    jsval v;
+
+    return GetXMLSetting(cx, name, &v) && JS_ValueToBoolean(cx, v, bp);
+}
+
+static JSBool
+GetUint32XMLSetting(JSContext *cx, const char *name, uint32 *uip)
+{
+    jsval v;
+
+    return GetXMLSetting(cx, name, &v) && JS_ValueToECMAUint32(cx, v, uip);
+}
+
+static JSBool
+GetXMLSettingFlags(JSContext *cx, uintN *flagsp)
+{
+    JSBool flag[4];
+
+    if (!GetBooleanXMLSetting(cx, js_ignoreComments_str, &flag[0]) ||
+        !GetBooleanXMLSetting(cx, js_ignoreProcessingInstructions_str, &flag[1]) ||
+        !GetBooleanXMLSetting(cx, js_ignoreWhitespace_str, &flag[2]) ||
+        !GetBooleanXMLSetting(cx, js_prettyPrinting_str, &flag[3])) {
+        return false;
+    }
+
+    *flagsp = 0;
+    for (size_t n = 0; n < 4; ++n)
+        if (flag[n])
+            *flagsp |= ((JSUint32)1 << (n));
+    return true;
+}
+
+static JSXML *
+ParseXMLSource(JSContext *cx, JSString *src)
+{
+    jsval nsval;
+    JSLinearString *uri;
+    size_t urilen, srclen, length, offset, dstlen;
+    jschar *chars;
+    const jschar *srcp, *endp;
+    JSXML *xml;
+    const char *filename;
+    uintN lineno;
+    JSOp op;
+
+    static const char prefix[] = "<parent xmlns=\"";
+    static const char middle[] = "\">";
+    static const char suffix[] = "</parent>";
+
+
+
+    if (!js_GetDefaultXMLNamespace(cx, &nsval))
+        return __null;
+    uri = JSVAL_TO_OBJECT(nsval)->getNameURI();
+    uri = js_EscapeAttributeValue(cx, uri, (JSIntn)0);
+    if (!uri)
+        return __null;
+
+    urilen = uri->length();
+    srclen = src->length();
+    length = (sizeof(prefix) - 1) + urilen + (sizeof(middle) - 1) + srclen +
+             (sizeof(suffix) - 1);
+
+    chars = (jschar *) cx->malloc((length + 1) * sizeof(jschar));
+    if (!chars)
+        return __null;
+
+    dstlen = length;
+    js_InflateStringToBuffer(cx, prefix, (sizeof(prefix) - 1), chars, &dstlen);
+    offset = dstlen;
+    memcpy((chars + offset), (uri->chars()), (urilen) * sizeof(jschar));
+    offset += urilen;
+    dstlen = length - offset + 1;
+    js_InflateStringToBuffer(cx, middle, (sizeof(middle) - 1), chars + offset,
+                             &dstlen);
+    offset += dstlen;
+    srcp = src->getChars(cx);
+    if (!srcp) {
+        cx->free(chars);
+        return __null;
+    }
+    memcpy((chars + offset), (srcp), (srclen) * sizeof(jschar));
+    offset += srclen;
+    dstlen = length - offset + 1;
+    js_InflateStringToBuffer(cx, suffix, (sizeof(suffix) - 1), chars + offset,
+                             &dstlen);
+    chars [offset + dstlen] = 0;
+
+    LeaveTrace(cx);
+    xml = __null;
+    FrameRegsIter i(cx);
+    for (; !i.done() && !i.pc(); ++i)
+        ((void) 0);
+    filename = __null;
+    lineno = 1;
+    if (!i.done()) {
+        JSStackFrame *fp = i.fp();
+        op = (JSOp) *i.pc();
+        if (op == JSOP_TOXML || op == JSOP_TOXMLLIST) {
+            filename = fp->script()->filename;
+            lineno = js_FramePCToLineNumber(cx, fp);
+            for (endp = srcp + srclen; srcp < endp; srcp++) {
+                if (*srcp == '\n')
+                    --lineno;
+            }
+        }
+    }
+
+    {
+        Parser parser(cx);
+        if (parser.init(chars, length, filename, lineno, cx->findVersion())) {
+            JSObject *scopeChain = GetScopeChain(cx);
+            if (!scopeChain) {
+                cx->free(chars);
+                return __null;
+            }
+            JSParseNode *pn = parser.parseXMLText(scopeChain, false);
+            uintN flags;
+            if (pn && GetXMLSettingFlags(cx, &flags)) {
+                AutoNamespaceArray namespaces(cx);
+                if (namespaces.array.setCapacity(cx, 1))
+                    xml = ParseNodeToXML(&parser, pn, &namespaces.array, flags);
+            }
+        }
+    }
+
+    cx->free(chars);
+    return xml;
+
+
+}
+# 1800 "jsxml.cpp"
+static JSXML *
+OrphanXMLChild(JSContext *cx, JSXML *xml, uint32 i)
+{
+    JSObject *ns;
+
+    ns = (((0) < (&xml->u.elem.namespaces)->length) ? (JSObject *) (&xml->u.elem.namespaces)->vector[0] : __null);
+    xml = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+    if (!ns || !xml)
+        return xml;
+    if (xml->xml_class == JSXML_CLASS_ELEMENT) {
+        if (!XMLArrayAddMember(cx, &xml->u.elem.namespaces, (&xml->u.elem.namespaces)->length, (void *)((ns))))
+            return __null;
+        ns->setNamespaceDeclared(((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0)));
+    }
+    xml->parent = __null;
+    return xml;
+}
+
+static JSObject *
+ToXML(JSContext *cx, jsval v)
+{
+    JSObject *obj;
+    JSXML *xml;
+    Class *clasp;
+    JSString *str;
+    uint32 length;
+
+    if (JSVAL_IS_PRIMITIVE(v)) {
+        if (JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v))
+            goto bad;
+    } else {
+        obj = JSVAL_TO_OBJECT(v);
+        if (obj->isXML()) {
+            xml = (JSXML *) obj->getPrivate();
+            if (xml->xml_class == JSXML_CLASS_LIST) {
+                if (xml->u.list.kids.length != 1)
+                    goto bad;
+                xml = (((0) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[0] : __null);
+                if (xml) {
+                    ((void) 0);
+                    return js_GetXMLObject(cx, xml);
+                }
+            }
+            return obj;
+        }
+
+        clasp = obj->getClass();
+        if (clasp->flags & (1<<7)) {
+            ((void) 0);
+        }
+
+        if (clasp != &js_StringClass &&
+            clasp != &js_NumberClass &&
+            clasp != &js_BooleanClass) {
+            goto bad;
+        }
+    }
+
+    str = js_ValueToString(cx, Valueify(v));
+    if (!str)
+        return __null;
+    if (str->empty()) {
+        length = 0;
+
+        xml = __null;
+
+    } else {
+        xml = ParseXMLSource(cx, str);
+        if (!xml)
+            return __null;
+        length = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0);
+    }
+
+    if (length == 0) {
+        obj = js_NewXMLObject(cx, JSXML_CLASS_TEXT);
+        if (!obj)
+            return __null;
+    } else if (length == 1) {
+        xml = OrphanXMLChild(cx, xml, 0);
+        if (!xml)
+            return __null;
+        obj = js_GetXMLObject(cx, xml);
+        if (!obj)
+            return __null;
+    } else {
+        JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_SYNTAX_ERROR);
+        return __null;
+    }
+    return obj;
+
+bad:
+    ((void)js_ReportValueErrorFlags(cx, 0x0, JSMSG_BAD_XML_CONVERSION, 0, Valueify(v), __null, __null, __null))
+                                                              ;
+    return __null;
+}
+
+static JSBool
+Append(JSContext *cx, JSXML *list, JSXML *kid);
+
+static JSObject *
+ToXMLList(JSContext *cx, jsval v)
+{
+    JSObject *obj, *listobj;
+    JSXML *xml, *list, *kid;
+    Class *clasp;
+    JSString *str;
+    uint32 i, length;
+
+    if (JSVAL_IS_PRIMITIVE(v)) {
+        if (JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v))
+            goto bad;
+    } else {
+        obj = JSVAL_TO_OBJECT(v);
+        if (obj->isXML()) {
+            xml = (JSXML *) obj->getPrivate();
+            if (xml->xml_class != JSXML_CLASS_LIST) {
+                listobj = js_NewXMLObject(cx, JSXML_CLASS_LIST);
+                if (!listobj)
+                    return __null;
+                list = (JSXML *) listobj->getPrivate();
+                if (!Append(cx, list, xml))
+                    return __null;
+                return listobj;
+            }
+            return obj;
+        }
+
+        clasp = obj->getClass();
+        if (clasp->flags & (1<<7)) {
+            ((void) 0);
+        }
+
+        if (clasp != &js_StringClass &&
+            clasp != &js_NumberClass &&
+            clasp != &js_BooleanClass) {
+            goto bad;
+        }
+    }
+
+    str = js_ValueToString(cx, Valueify(v));
+    if (!str)
+        return __null;
+    if (str->empty()) {
+        xml = __null;
+        length = 0;
+    } else {
+        if (!js_EnterLocalRootScope(cx))
+            return __null;
+        xml = ParseXMLSource(cx, str);
+        if (!xml) {
+            js_LeaveLocalRootScope(cx);
+            return __null;
+        }
+        length = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0);
+    }
+
+    listobj = js_NewXMLObject(cx, JSXML_CLASS_LIST);
+    if (listobj) {
+        list = (JSXML *) listobj->getPrivate();
+        for (i = 0; i < length; i++) {
+            kid = OrphanXMLChild(cx, xml, i);
+            if (!kid || !Append(cx, list, kid)) {
+                listobj = __null;
+                break;
+            }
+        }
+    }
+
+    if (xml)
+        js_LeaveLocalRootScopeWithResult(cx, listobj);
+    return listobj;
+
+bad:
+    ((void)js_ReportValueErrorFlags(cx, 0x0, JSMSG_BAD_XMLLIST_CONVERSION, 0, Valueify(v), __null, __null, __null))
+                                                              ;
+    return __null;
+}
+# 1986 "jsxml.cpp"
+static JSFlatString *
+MakeXMLSpecialString(JSContext *cx, StringBuffer &sb,
+                     JSString *str, JSString *str2,
+                     const jschar *prefix, size_t prefixlength,
+                     const jschar *suffix, size_t suffixlength)
+{
+    if (!sb.append(prefix, prefixlength) || !sb.append(str))
+        return __null;
+    if (str2 && !str2->empty()) {
+        if (!sb.append(' ') || !sb.append(str2))
+            return __null;
+    }
+    if (!sb.append(suffix, suffixlength))
+        return __null;
+
+    return sb.finishString();
+}
+
+static JSFlatString *
+MakeXMLCDATAString(JSContext *cx, StringBuffer &sb, JSString *str)
+{
+    static const jschar cdata_prefix_ucNstr[] = {'<', '!', '[',
+                                                 'C', 'D', 'A', 'T', 'A',
+                                                 '['};
+    static const jschar cdata_suffix_ucNstr[] = {']', ']', '>'};
+
+    return MakeXMLSpecialString(cx, sb, str, __null,
+                                cdata_prefix_ucNstr, 9,
+                                cdata_suffix_ucNstr, 3);
+}
+
+static JSFlatString *
+MakeXMLCommentString(JSContext *cx, StringBuffer &sb, JSString *str)
+{
+    static const jschar comment_prefix_ucNstr[] = {'<', '!', '-', '-'};
+    static const jschar comment_suffix_ucNstr[] = {'-', '-', '>'};
+
+    return MakeXMLSpecialString(cx, sb, str, __null,
+                                comment_prefix_ucNstr, 4,
+                                comment_suffix_ucNstr, 3);
+}
+
+static JSFlatString *
+MakeXMLPIString(JSContext *cx, StringBuffer &sb, JSString *name,
+                JSString *value)
+{
+    static const jschar pi_prefix_ucNstr[] = {'<', '?'};
+    static const jschar pi_suffix_ucNstr[] = {'?', '>'};
+
+    return MakeXMLSpecialString(cx, sb, name, value,
+                                pi_prefix_ucNstr, 2,
+                                pi_suffix_ucNstr, 2);
+}
+
+
+
+
+
+static
+
+# 2044 "jsxml.cpp"
+       bool
+AppendAttributeValue(JSContext *cx, StringBuffer &sb, JSString *valstr)
+{
+    if (!sb.append('='))
+        return false;
+    valstr = js_EscapeAttributeValue(cx, valstr, (JSIntn)1);
+    return valstr && sb.append(valstr);
+}
+
+
+
+
+
+
+static JSFlatString *
+EscapeElementValue(JSContext *cx, StringBuffer &sb, JSString *str, uint32 toSourceFlag)
+{
+    size_t length = str->length();
+    const jschar *start = str->getChars(cx);
+    if (!start)
+        return __null;
+
+    for (const jschar *cp = start, *end = start + length; cp != end; ++cp) {
+        jschar c = *cp;
+        switch (*cp) {
+          case '<':
+            if (!sb.append(js_lt_entity_str))
+                return __null;
+            break;
+          case '>':
+            if (!sb.append(js_gt_entity_str))
+                return __null;
+            break;
+          case '&':
+            if (!sb.append(js_amp_entity_str))
+                return __null;
+            break;
+          case '{':
+
+
+
+
+            if (toSourceFlag) {
+                if (!sb.append(js_leftcurly_entity_str))
+                    return __null;
+                break;
+            }
+
+          default:
+            if (!sb.append(c))
+                return __null;
+        }
+    }
+    return sb.finishString();
+}
+
+
+
+
+
+
+static JSFlatString *
+EscapeAttributeValue(JSContext *cx, StringBuffer &sb, JSString *str, JSBool quote)
+{
+    size_t length = str->length();
+    const jschar *start = str->getChars(cx);
+    if (!start)
+        return __null;
+
+    if (quote && !sb.append('"'))
+        return __null;
+
+    for (const jschar *cp = start, *end = start + length; cp != end; ++cp) {
+        jschar c = *cp;
+        switch (c) {
+          case '"':
+            if (!sb.append(js_quot_entity_str))
+                return __null;
+            break;
+          case '<':
+            if (!sb.append(js_lt_entity_str))
+                return __null;
+            break;
+          case '&':
+            if (!sb.append(js_amp_entity_str))
+                return __null;
+            break;
+          case '\n':
+            if (!sb.append("&#xA;"))
+                return __null;
+            break;
+          case '\r':
+            if (!sb.append("&#xD;"))
+                return __null;
+            break;
+          case '\t':
+            if (!sb.append("&#x9;"))
+                return __null;
+            break;
+          default:
+            if (!sb.append(c))
+                return __null;
+        }
+    }
+
+    if (quote && !sb.append('"'))
+        return __null;
+
+    return sb.finishString();
+}
+
+
+static JSObject *
+GetNamespace(JSContext *cx, JSObject *qn, const JSXMLArray *inScopeNSes)
+{
+    JSLinearString *uri, *prefix, *nsprefix;
+    JSObject *match, *ns;
+    uint32 i, n;
+    jsval argv[2];
+
+    uri = qn->getNameURI();
+    prefix = qn->getNamePrefix();
+    ((void) 0);
+    if (!uri) {
+        JSAutoByteString bytes;
+        const char *s = !prefix ?
+                        js_undefined_str
+                        : js_ValueToPrintable(cx, StringValue(prefix), &bytes);
+        if (s)
+            JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_BAD_XML_NAMESPACE, s);
+        return __null;
+    }
+
+
+    match = __null;
+    if (inScopeNSes) {
+        for (i = 0, n = inScopeNSes->length; i < n; i++) {
+            ns = (((i) < (inScopeNSes)->length) ? (JSObject *) (inScopeNSes)->vector[i] : __null);
+            if (!ns)
+                continue;
+# 2212 "jsxml.cpp"
+            if (EqualStrings(ns->getNameURI(), uri)) {
+                nsprefix = ns->getNamePrefix();
+                if (nsprefix == prefix ||
+                    ((nsprefix && prefix)
+                     ? EqualStrings(nsprefix, prefix)
+                     : (nsprefix ? nsprefix : prefix)->empty())) {
+                    match = ns;
+                    break;
+                }
+            }
+        }
+    }
+
+
+    if (!match) {
+        argv[0] = prefix ? STRING_TO_JSVAL(prefix) : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+        argv[1] = STRING_TO_JSVAL(uri);
+        ns = js_ConstructObject(cx, &js_NamespaceClass, __null, __null,
+                                2, Valueify(argv));
+        if (!ns)
+            return __null;
+        match = ns;
+    }
+    return match;
+}
+
+static JSLinearString *
+GeneratePrefix(JSContext *cx, JSLinearString *uri, JSXMLArray *decls)
+{
+    const jschar *cp, *start, *end;
+    size_t length, newlength, offset;
+    uint32 i, n, m, serial;
+    jschar *bp, *dp;
+    JSBool done;
+    JSObject *ns;
+    JSLinearString *nsprefix, *prefix;
+
+    ((void) 0);
+# 2262 "jsxml.cpp"
+    if (decls->length == 0)
+        return js_NewStringCopyZ(cx, "a");
+
+
+
+
+
+
+
+    start = uri->chars();
+    end = start + uri->length();
+    cp = end;
+    while (--cp > start) {
+        if (*cp == '.' || *cp == '/' || *cp == ':') {
+            ++cp;
+            length = end - cp;
+            if (IsXMLName(cp, length) && !(length >= 3 && (((jschar) (((js_A[js_Y[(js_X[(uint16)((cp)[0])>>6]<<6)|(((cp)[0])&0x3F)]]) & 0x00200000) ? ((cp)[0]) + ((int32)(js_A[js_Y[(js_X[(uint16)((cp)[0])>>6]<<6)|(((cp)[0])&0x3F)]]) >> 22) : ((cp)[0]))) == 'x' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((cp)[1])>>6]<<6)|(((cp)[1])&0x3F)]]) & 0x00200000) ? ((cp)[1]) + ((int32)(js_A[js_Y[(js_X[(uint16)((cp)[1])>>6]<<6)|(((cp)[1])&0x3F)]]) >> 22) : ((cp)[1]))) == 'm' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((cp)[2])>>6]<<6)|(((cp)[2])&0x3F)]]) & 0x00200000) ? ((cp)[2]) + ((int32)(js_A[js_Y[(js_X[(uint16)((cp)[2])>>6]<<6)|(((cp)[2])&0x3F)]]) >> 22) : ((cp)[2]))) == 'l')))
+                break;
+            end = --cp;
+        }
+    }
+    length = end - cp;
+# 2292 "jsxml.cpp"
+    bp = (jschar *) cp;
+    newlength = length;
+    if ((length >= 3 && (((jschar) (((js_A[js_Y[(js_X[(uint16)((cp)[0])>>6]<<6)|(((cp)[0])&0x3F)]]) & 0x00200000) ? ((cp)[0]) + ((int32)(js_A[js_Y[(js_X[(uint16)((cp)[0])>>6]<<6)|(((cp)[0])&0x3F)]]) >> 22) : ((cp)[0]))) == 'x' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((cp)[1])>>6]<<6)|(((cp)[1])&0x3F)]]) & 0x00200000) ? ((cp)[1]) + ((int32)(js_A[js_Y[(js_X[(uint16)((cp)[1])>>6]<<6)|(((cp)[1])&0x3F)]]) >> 22) : ((cp)[1]))) == 'm' && ((jschar) (((js_A[js_Y[(js_X[(uint16)((cp)[2])>>6]<<6)|(((cp)[2])&0x3F)]]) & 0x00200000) ? ((cp)[2]) + ((int32)(js_A[js_Y[(js_X[(uint16)((cp)[2])>>6]<<6)|(((cp)[2])&0x3F)]]) >> 22) : ((cp)[2]))) == 'l')) || !IsXMLName(cp, length)) {
+        newlength = length + 2 + (size_t) log10((double) decls->length);
+        bp = (jschar *)
+             cx->malloc((newlength + 1) * sizeof(jschar));
+        if (!bp)
+            return __null;
+
+        bp[newlength] = 0;
+        for (i = 0; i < newlength; i++)
+             bp[i] = 'a';
+    }
+
+
+
+
+
+    serial = 0;
+    do {
+        done = (JSIntn)1;
+        for (i = 0, n = decls->length; i < n; i++) {
+            ns = (((i) < (decls)->length) ? (JSObject *) (decls)->vector[i] : __null);
+            if (ns && (nsprefix = ns->getNamePrefix()) &&
+                nsprefix->length() == newlength &&
+                !memcmp(nsprefix->chars(), bp,
+                        newlength * sizeof(jschar))) {
+                if (bp == cp) {
+                    newlength = length + 2 + (size_t) log10((double) n);
+                    bp = (jschar *)
+                         cx->malloc((newlength + 1) * sizeof(jschar));
+                    if (!bp)
+                        return __null;
+                    memcpy((bp), (cp), (length) * sizeof(jschar));
+                }
+
+                ++serial;
+                ((void) 0);
+                dp = bp + length + 2 + (size_t) log10((double) serial);
+                *dp = 0;
+                for (m = serial; m != 0; m /= 10)
+                    *--dp = (jschar)('0' + m % 10);
+                *--dp = '-';
+                ((void) 0);
+
+                done = (JSIntn)0;
+                break;
+            }
+        }
+    } while (!done);
+
+    if (bp == cp) {
+        offset = cp - start;
+        prefix = js_NewDependentString(cx, uri, offset, length);
+    } else {
+        prefix = js_NewString(cx, bp, newlength);
+        if (!prefix)
+            cx->free(bp);
+    }
+    return prefix;
+}
+
+static JSBool
+namespace_match(const void *a, const void *b)
+{
+    const JSObject *nsa = (const JSObject *) a;
+    const JSObject *nsb = (const JSObject *) b;
+    JSLinearString *prefixa, *prefixb = nsb->getNamePrefix();
+
+    if (prefixb) {
+        prefixa = nsa->getNamePrefix();
+        return prefixa && EqualStrings(prefixa, prefixb);
+    }
+    return EqualStrings(nsa->getNameURI(), nsb->getNameURI());
+}
+
+
+
+
+static JSString *
+XMLToXMLString(JSContext *cx, JSXML *xml, const JSXMLArray *ancestorNSes,
+               uint32 indentLevel)
+{
+    JSBool pretty, indentKids;
+    StringBuffer sb(cx);
+    JSString *str;
+    JSLinearString *prefix, *nsuri;
+    uint32 i, n, nextIndentLevel;
+    JSObject *ns, *ns2;
+    AutoNamespaceArray empty(cx), decls(cx), ancdecls(cx);
+
+    if (!GetBooleanXMLSetting(cx, js_prettyPrinting_str, &pretty))
+        return __null;
+
+    if (pretty) {
+        if (!sb.appendN(' ', indentLevel & ~0x80000000))
+            return __null;
+    }
+
+    str = __null;
+
+    switch (xml->xml_class) {
+      case JSXML_CLASS_TEXT:
+
+        if (pretty) {
+            str = ChompXMLWhitespace(cx, xml->u.value);
+            if (!str)
+                return __null;
+        } else {
+            str = xml->u.value;
+        }
+        return EscapeElementValue(cx, sb, str, indentLevel & 0x80000000);
+
+      case JSXML_CLASS_ATTRIBUTE:
+
+        return EscapeAttributeValue(cx, sb, xml->u.value,
+                                    (indentLevel & 0x80000000) != 0);
+
+      case JSXML_CLASS_COMMENT:
+
+        return MakeXMLCommentString(cx, sb, xml->u.value);
+
+      case JSXML_CLASS_PROCESSING_INSTRUCTION:
+
+        return MakeXMLPIString(cx, sb, xml->name->getQNameLocalName(),
+                               xml->u.value);
+
+      case JSXML_CLASS_LIST:
+
+        {
+            JSXMLArrayCursor cursor(&xml->u.list.kids);
+            i = 0;
+            while (JSXML *kid = (JSXML *) cursor.getNext()) {
+                if (pretty && i != 0) {
+                    if (!sb.append('\n'))
+                        return __null;
+                }
+
+                JSString *kidstr = XMLToXMLString(cx, kid, ancestorNSes, indentLevel);
+                if (!kidstr || !sb.append(kidstr))
+                    return __null;
+                ++i;
+            }
+        }
+
+        if (sb.empty())
+            return cx->runtime->emptyString;
+        return sb.finishString();
+
+      default:;
+    }
+
+
+    if (!js_EnterLocalRootScope(cx))
+        return __null;
+
+
+    if (!ancestorNSes)
+        ancestorNSes = &empty.array;
+
+
+    {
+        JSXMLArrayCursor cursor(&xml->u.elem.namespaces);
+        while ((ns = (JSObject *) cursor.getNext()) != __null) {
+            if (!IsDeclared(ns))
+                continue;
+            if (!(XMLArrayFindMember(ancestorNSes, (void *)(ns), namespace_identity) != ((uint32) -1))) {
+
+                ns2 = NewXMLNamespace(cx, ns->getNamePrefix(), ns->getNameURI(), (JSIntn)1);
+                if (!ns2 || !XMLArrayAddMember(cx, &decls.array, (&decls.array)->length, (void *)((ns2))))
+                    goto out;
+            }
+        }
+    }
+
+
+
+
+
+
+
+    if (!ancdecls.array.setCapacity(cx, ancestorNSes->length + decls.length()))
+        goto out;
+    for (i = 0, n = ancestorNSes->length; i < n; i++) {
+        ns2 = (((i) < (ancestorNSes)->length) ? (JSObject *) (ancestorNSes)->vector[i] : __null);
+        if (!ns2)
+            continue;
+        ((void) 0);
+        if (!XMLArrayAddMember(cx, &ancdecls.array, (&ancdecls.array)->length, (void *)((ns2))))
+            goto out;
+    }
+    for (i = 0, n = decls.length(); i < n; i++) {
+        ns2 = (((i) < (&decls.array)->length) ? (JSObject *) (&decls.array)->vector[i] : __null);
+        if (!ns2)
+            continue;
+        ((void) 0);
+        if (!XMLArrayAddMember(cx, &ancdecls.array, (&ancdecls.array)->length, (void *)((ns2))))
+            goto out;
+    }
+
+
+    ns = GetNamespace(cx, xml->name, &ancdecls.array);
+    if (!ns)
+        goto out;
+
+
+    prefix = ns->getNamePrefix();
+    if (!prefix) {
+# 2514 "jsxml.cpp"
+        nsuri = ns->getNameURI();
+        if (!xml->name->getNamePrefix()) {
+            prefix = cx->runtime->emptyString;
+        } else {
+            prefix = GeneratePrefix(cx, nsuri, &ancdecls.array);
+            if (!prefix)
+                goto out;
+        }
+        ns = NewXMLNamespace(cx, prefix, nsuri, (JSIntn)1);
+        if (!ns)
+            goto out;
+# 2539 "jsxml.cpp"
+        if (prefix->empty()) {
+            i = XMLArrayFindMember(&decls.array, ns, namespace_match);
+            if (i != ((uint32) -1))
+                XMLArrayDelete(cx, &decls.array, i, (JSIntn)1);
+        }
+# 2552 "jsxml.cpp"
+        if (!XMLArrayAddMember(cx, &ancdecls.array, (&ancdecls.array)->length, (void *)((ns))) ||
+            !XMLArrayAddMember(cx, &decls.array, (&decls.array)->length, (void *)((ns)))) {
+            goto out;
+        }
+    }
+
+
+    if (!sb.append('<'))
+        goto out;
+
+    if (!prefix->empty()) {
+        if (!sb.append(prefix) || !sb.append(':'))
+            goto out;
+    }
+    if (!sb.append(xml->name->getQNameLocalName()))
+        goto out;
+# 2576 "jsxml.cpp"
+    {
+        JSXMLArrayCursor cursor(&xml->u.elem.attrs);
+        while (JSXML *attr = (JSXML *) cursor.getNext()) {
+            if (!sb.append(' '))
+                goto out;
+            ns2 = GetNamespace(cx, attr->name, &ancdecls.array);
+            if (!ns2)
+                goto out;
+
+
+            prefix = ns2->getNamePrefix();
+            if (!prefix) {
+                prefix = GeneratePrefix(cx, ns2->getNameURI(), &ancdecls.array);
+                if (!prefix)
+                    goto out;
+
+
+                ns2 = NewXMLNamespace(cx, prefix, ns2->getNameURI(), (JSIntn)1);
+                if (!ns2)
+                    goto out;
+# 2604 "jsxml.cpp"
+                if (!XMLArrayAddMember(cx, &ancdecls.array, (&ancdecls.array)->length, (void *)((ns2))) ||
+                    !XMLArrayAddMember(cx, &decls.array, (&decls.array)->length, (void *)((ns2)))) {
+                    goto out;
+                }
+            }
+
+
+            if (!prefix->empty()) {
+                if (!sb.append(prefix) || !sb.append(':'))
+                    goto out;
+            }
+
+
+            if (!sb.append(attr->name->getQNameLocalName()))
+                goto out;
+
+
+            if (!AppendAttributeValue(cx, sb, attr->u.value))
+                goto out;
+        }
+    }
+
+
+    {
+        JSXMLArrayCursor cursor(&decls.array);
+        while (JSObject *ns3 = (JSObject *) cursor.getNext()) {
+            ((void) 0);
+
+            if (!sb.append(" xmlns"))
+                goto out;
+
+
+            prefix = ns3->getNamePrefix();
+            if (!prefix) {
+                prefix = GeneratePrefix(cx, ns3->getNameURI(), &ancdecls.array);
+                if (!prefix)
+                    goto out;
+                ns3->setNamePrefix(prefix);
+            }
+
+
+            if (!prefix->empty()) {
+                if (!sb.append(':') || !sb.append(prefix))
+                    goto out;
+            }
+
+
+            if (!AppendAttributeValue(cx, sb, ns3->getNameURI()))
+                goto out;
+        }
+    }
+
+
+    n = xml->u.list.kids.length;
+    if (n == 0) {
+        if (!sb.append("/>"))
+            goto out;
+    } else {
+
+        if (!sb.append('>'))
+            goto out;
+        {
+            JSXML *kid;
+            indentKids = n > 1 ||
+                         (n == 1 &&
+                          (kid = (((0) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[0] : __null)) &&
+                          kid->xml_class != JSXML_CLASS_TEXT);
+        }
+
+        if (pretty && indentKids) {
+            if (!GetUint32XMLSetting(cx, js_prettyIndent_str, &i))
+                goto out;
+            nextIndentLevel = indentLevel + i;
+        } else {
+            nextIndentLevel = indentLevel & 0x80000000;
+        }
+
+        {
+            JSXMLArrayCursor cursor(&xml->u.list.kids);
+            while (JSXML *kid = (JSXML *) cursor.getNext()) {
+                if (pretty && indentKids) {
+                    if (!sb.append('\n'))
+                        goto out;
+                }
+
+                JSString *kidstr = XMLToXMLString(cx, kid, &ancdecls.array, nextIndentLevel);
+                if (!kidstr)
+                    goto out;
+
+                if (!sb.append(kidstr))
+                    goto out;
+            }
+        }
+
+        if (pretty && indentKids) {
+            if (!sb.append('\n') ||
+                !sb.appendN(' ', indentLevel & ~0x80000000))
+                goto out;
+        }
+        if (!sb.append("</"))
+            goto out;
+
+
+        prefix = ns->getNamePrefix();
+        if (prefix && !prefix->empty()) {
+            if (!sb.append(prefix) || !sb.append(':'))
+                goto out;
+        }
+
+
+        if (!sb.append(xml->name->getQNameLocalName()) || !sb.append('>'))
+            goto out;
+    }
+
+    str = sb.finishString();
+out:
+    js_LeaveLocalRootScopeWithResult(cx, str);
+    return str;
+}
+
+
+static JSString *
+ToXMLString(JSContext *cx, jsval v, uint32 toSourceFlag)
+{
+    JSObject *obj;
+    JSString *str;
+    JSXML *xml;
+
+    if (JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v)) {
+        JS_ReportErrorNumber(cx, js_GetErrorMessage, __null,
+                             JSMSG_BAD_XML_CONVERSION,
+                             JSVAL_IS_NULL(v) ? js_null_str : js_undefined_str);
+        return __null;
+    }
+
+    if (JSVAL_IS_BOOLEAN(v) || JSVAL_IS_NUMBER(v))
+        return js_ValueToString(cx, Valueify(v));
+
+    if (JSVAL_IS_STRING(v)) {
+        StringBuffer sb(cx);
+        return EscapeElementValue(cx, sb, JSVAL_TO_STRING(v), toSourceFlag);
+    }
+
+    obj = JSVAL_TO_OBJECT(v);
+    if (!obj->isXML()) {
+        if (!DefaultValue(cx, obj, JSTYPE_STRING, Valueify(&v)))
+            return __null;
+        str = js_ValueToString(cx, Valueify(v));
+        if (!str)
+            return __null;
+        StringBuffer sb(cx);
+        return EscapeElementValue(cx, sb, str, toSourceFlag);
+    }
+
+
+    xml = (JSXML *) obj->getPrivate();
+    return XMLToXMLString(cx, xml, __null, toSourceFlag | 0);
+}
+
+static JSObject *
+ToAttributeName(JSContext *cx, jsval v)
+{
+    JSLinearString *name, *uri, *prefix;
+    JSObject *obj;
+    Class *clasp;
+    JSObject *qn;
+
+    if (JSVAL_IS_STRING(v)) {
+        name = JSVAL_TO_STRING(v)->ensureLinear(cx);
+        if (!name)
+            return __null;
+        uri = prefix = cx->runtime->emptyString;
+    } else {
+        if (JSVAL_IS_PRIMITIVE(v)) {
+            ((void)js_ReportValueErrorFlags(cx, 0x0, JSMSG_BAD_XML_ATTR_NAME, 0, Valueify(v), __null, __null, __null))
+                                                                      ;
+            return __null;
+        }
+
+        obj = JSVAL_TO_OBJECT(v);
+        clasp = obj->getClass();
+        if (clasp == &js_AttributeNameClass)
+            return obj;
+
+        if (clasp == &js_QNameClass) {
+            qn = obj;
+            uri = qn->getNameURI();
+            prefix = qn->getNamePrefix();
+            name = qn->getQNameLocalName();
+        } else {
+            if (clasp == &js_AnyNameClass) {
+                name = (cx->runtime->atomState.starAtom);
+            } else {
+                JSString *str = js_ValueToString(cx, Valueify(v));
+                if (!str)
+                    return __null;
+                name = str->ensureLinear(cx);
+                if (!name)
+                    return __null;
+            }
+            uri = prefix = cx->runtime->emptyString;
+        }
+    }
+
+    qn = NewXMLAttributeName(cx, uri, prefix, name);
+    if (!qn)
+        return __null;
+    return qn;
+}
+
+static void
+ReportBadXMLName(JSContext *cx, const Value &idval)
+{
+    ((void)js_ReportValueErrorFlags(cx, 0x0, JSMSG_BAD_XML_NAME, 0, idval, __null, __null, __null));
+}
+
+static JSBool
+IsFunctionQName(JSContext *cx, JSObject *qn, jsid *funidp)
+{
+    JSAtom *atom;
+    JSLinearString *uri;
+
+    atom = cx->runtime->atomState.functionNamespaceURIAtom;
+    uri = qn->getNameURI();
+    if (uri &&
+        (uri == (atom) ||
+         EqualStrings(uri, (atom)))) {
+        return JS_ValueToId(cx, STRING_TO_JSVAL(qn->getQNameLocalName()), funidp);
+    }
+    *funidp = ((jsid)0x2);
+    return (JSIntn)1;
+}
+
+JSBool
+js_IsFunctionQName(JSContext *cx, JSObject *obj, jsid *funidp)
+{
+    if (obj->getClass() == &js_QNameClass)
+        return IsFunctionQName(cx, obj, funidp);
+    *funidp = ((jsid)0x2);
+    return (JSIntn)1;
+}
+
+static JSObject *
+ToXMLName(JSContext *cx, jsval v, jsid *funidp)
+{
+    JSAtom *atomizedName;
+    JSString *name;
+    JSObject *obj;
+    Class *clasp;
+    uint32 index;
+
+    if (JSVAL_IS_STRING(v)) {
+        name = JSVAL_TO_STRING(v);
+    } else {
+        if (JSVAL_IS_PRIMITIVE(v)) {
+            ReportBadXMLName(cx, Valueify(v));
+            return __null;
+        }
+
+        obj = JSVAL_TO_OBJECT(v);
+        clasp = obj->getClass();
+        if (clasp == &js_AttributeNameClass || clasp == &js_QNameClass)
+            goto out;
+        if (clasp == &js_AnyNameClass) {
+            name = (cx->runtime->atomState.starAtom);
+            goto construct;
+        }
+        name = js_ValueToString(cx, Valueify(v));
+        if (!name)
+            return __null;
+    }
+
+    atomizedName = js_AtomizeString(cx, name, 0);
+    if (!atomizedName)
+        return __null;
+# 2893 "jsxml.cpp"
+    if (js_IdIsIndex(ATOM_TO_JSID(atomizedName), &index))
+        goto bad;
+
+    if (*atomizedName->chars() == '@') {
+        name = js_NewDependentString(cx, name, 1, name->length() - 1);
+        if (!name)
+            return __null;
+        *funidp = ((jsid)0x2);
+        return ToAttributeName(cx, STRING_TO_JSVAL(name));
+    }
+
+construct:
+    v = STRING_TO_JSVAL(name);
+    obj = js_ConstructObject(cx, &js_QNameClass, __null, __null, 1, Valueify(&v));
+    if (!obj)
+        return __null;
+
+out:
+    if (!IsFunctionQName(cx, obj, funidp))
+        return __null;
+    return obj;
+
+bad:
+    JSAutoByteString bytes;
+    if (js_ValueToPrintable(cx, StringValue(name), &bytes))
+        JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_BAD_XML_NAME, bytes.ptr());
+    return __null;
+}
+
+
+static JSBool
+AddInScopeNamespace(JSContext *cx, JSXML *xml, JSObject *ns)
+{
+    JSLinearString *prefix, *prefix2;
+    JSObject *match, *ns2;
+    uint32 i, n, m;
+
+    if (xml->xml_class != JSXML_CLASS_ELEMENT)
+        return (JSIntn)1;
+
+
+    prefix = ns->getNamePrefix();
+    if (!prefix) {
+        match = __null;
+        for (i = 0, n = xml->u.elem.namespaces.length; i < n; i++) {
+            ns2 = (((i) < (&xml->u.elem.namespaces)->length) ? (JSObject *) (&xml->u.elem.namespaces)->vector[i] : __null);
+            if (ns2 && EqualStrings(ns2->getNameURI(), ns->getNameURI())) {
+                match = ns2;
+                break;
+            }
+        }
+        if (!match && !XMLArrayAddMember(cx, &xml->u.elem.namespaces, n, (void *)(ns)))
+            return (JSIntn)0;
+    } else {
+        if (prefix->empty() && xml->name->getNameURI()->empty())
+            return (JSIntn)1;
+        match = __null;
+
+        m = ((uint32) -1);
+
+        for (i = 0, n = xml->u.elem.namespaces.length; i < n; i++) {
+            ns2 = (((i) < (&xml->u.elem.namespaces)->length) ? (JSObject *) (&xml->u.elem.namespaces)->vector[i] : __null);
+            if (ns2 && (prefix2 = ns2->getNamePrefix()) &&
+                EqualStrings(prefix2, prefix)) {
+                match = ns2;
+                m = i;
+                break;
+            }
+        }
+        if (match && !EqualStrings(match->getNameURI(), ns->getNameURI())) {
+            ns2 = ((JSObject *) XMLArrayDelete(cx, &xml->u.elem.namespaces, m, (JSIntn)1))
+                                           ;
+            ((void) 0);
+            match->clearNamePrefix();
+            if (!AddInScopeNamespace(cx, xml, match))
+                return (JSIntn)0;
+        }
+        if (!XMLArrayAddMember(cx, &xml->u.elem.namespaces, (&xml->u.elem.namespaces)->length, (void *)((ns))))
+            return (JSIntn)0;
+    }
+
+
+    return (JSIntn)1;
+}
+
+
+static JSBool
+Append(JSContext *cx, JSXML *list, JSXML *xml)
+{
+    uint32 i, j, k, n;
+    JSXML *kid;
+
+    ((void) 0);
+    i = list->u.list.kids.length;
+    n = 1;
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        list->u.list.target = xml->u.list.target;
+        list->u.list.targetprop = xml->u.list.targetprop;
+        n = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0);
+        k = i + n;
+        if (!list->u.list.kids.setCapacity(cx, k))
+            return (JSIntn)0;
+        for (j = 0; j < n; j++) {
+            kid = (((j) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[j] : __null);
+            if (kid)
+                do { if ((&list->u.list.kids)->length <= (i + j)) (&list->u.list.kids)->length = (i + j) + 1; ((&list->u.list.kids)->vector[i + j] = (void *)(kid)); } while (0);
+        }
+        return (JSIntn)1;
+    }
+
+    list->u.list.target = xml->parent;
+    if (xml->xml_class == JSXML_CLASS_PROCESSING_INSTRUCTION)
+        list->u.list.targetprop = __null;
+    else
+        list->u.list.targetprop = xml->name;
+    if (!XMLArrayAddMember(cx, &list->u.list.kids, i, (void *)(xml)))
+        return (JSIntn)0;
+    return (JSIntn)1;
+}
+
+
+static JSXML *
+DeepCopyInLRS(JSContext *cx, JSXML *xml, uintN flags);
+
+static JSXML *
+DeepCopy(JSContext *cx, JSXML *xml, JSObject *obj, uintN flags)
+{
+    JSXML *copy;
+
+
+    if (!js_EnterLocalRootScope(cx))
+        return __null;
+    copy = DeepCopyInLRS(cx, xml, flags);
+    if (copy) {
+        if (obj) {
+
+            obj->setPrivate(copy);
+            copy->object = obj;
+        } else if (!js_GetXMLObject(cx, copy)) {
+            copy = __null;
+        }
+    }
+    js_LeaveLocalRootScopeWithResult(cx, copy);
+    return copy;
+}
+
+
+
+
+
+
+static JSBool
+DeepCopySetInLRS(JSContext *cx, JSXMLArray *from, JSXMLArray *to, JSXML *parent,
+                 uintN flags)
+{
+    uint32 j, n;
+    JSXML *kid2;
+    JSString *str;
+
+    n = from->length;
+    if (!to->setCapacity(cx, n))
+        return (JSIntn)0;
+
+    JSXMLArrayCursor cursor(from);
+    j = 0;
+    while (JSXML *kid = (JSXML *) cursor.getNext()) {
+        if ((flags & ((JSUint32)1 << (0))) &&
+            kid->xml_class == JSXML_CLASS_COMMENT) {
+            continue;
+        }
+        if ((flags & ((JSUint32)1 << (1))) &&
+            kid->xml_class == JSXML_CLASS_PROCESSING_INSTRUCTION) {
+            continue;
+        }
+        if ((flags & ((JSUint32)1 << (2))) &&
+            (kid->xml_flags & 0x1)) {
+            continue;
+        }
+        kid2 = DeepCopyInLRS(cx, kid, flags);
+        if (!kid2) {
+            to->length = j;
+            return (JSIntn)0;
+        }
+
+        if ((flags & ((JSUint32)1 << (2))) &&
+            n > 1 && kid2->xml_class == JSXML_CLASS_TEXT) {
+            str = ChompXMLWhitespace(cx, kid2->u.value);
+            if (!str) {
+                to->length = j;
+                return (JSIntn)0;
+            }
+            kid2->u.value = str;
+        }
+
+        do { if ((to)->length <= (j)) (to)->length = (j) + 1; ((to)->vector[j] = (void *)(kid2)); } while (0);
+        ++j;
+        if (parent->xml_class != JSXML_CLASS_LIST)
+            kid2->parent = parent;
+    }
+
+    if (j < n)
+        to->trim();
+    return (JSIntn)1;
+}
+
+static JSXML *
+DeepCopyInLRS(JSContext *cx, JSXML *xml, uintN flags)
+{
+    JSXML *copy;
+    JSObject *qn;
+    JSBool ok;
+    uint32 i, n;
+    JSObject *ns, *ns2;
+
+    do { int stackDummy_; if (!((jsuword)(&stackDummy_) > cx->stackLimit)) { js_ReportOverRecursed(cx); return __null; } } while (0);
+
+    copy = js_NewXML(cx, JSXMLClass(xml->xml_class));
+    if (!copy)
+        return __null;
+    qn = xml->name;
+    if (qn) {
+        qn = NewXMLQName(cx, qn->getNameURI(), qn->getNamePrefix(), qn->getQNameLocalName());
+        if (!qn) {
+            ok = (JSIntn)0;
+            goto out;
+        }
+    }
+    copy->name = qn;
+    copy->xml_flags = xml->xml_flags;
+
+    if ((((xml)->xml_class) >= JSXML_CLASS_ATTRIBUTE)) {
+        copy->u.value = xml->u.value;
+        ok = (JSIntn)1;
+    } else {
+        ok = DeepCopySetInLRS(cx, &xml->u.list.kids, &copy->u.list.kids, copy, flags);
+        if (!ok)
+            goto out;
+
+        if (xml->xml_class == JSXML_CLASS_LIST) {
+            copy->u.list.target = xml->u.list.target;
+            copy->u.list.targetprop = xml->u.list.targetprop;
+        } else {
+            n = xml->u.elem.namespaces.length;
+            ok = copy->u.elem.namespaces.setCapacity(cx, n);
+            if (!ok)
+                goto out;
+            for (i = 0; i < n; i++) {
+                ns = (((i) < (&xml->u.elem.namespaces)->length) ? (JSObject *) (&xml->u.elem.namespaces)->vector[i] : __null);
+                if (!ns)
+                    continue;
+                ns2 = NewXMLNamespace(cx, ns->getNamePrefix(), ns->getNameURI(),
+                                      IsDeclared(ns));
+                if (!ns2) {
+                    copy->u.elem.namespaces.length = i;
+                    ok = (JSIntn)0;
+                    goto out;
+                }
+                do { if ((&copy->u.elem.namespaces)->length <= (i)) (&copy->u.elem.namespaces)->length = (i) + 1; ((&copy->u.elem.namespaces)->vector[i] = (void *)(ns2)); } while (0);
+            }
+
+            ok = DeepCopySetInLRS(cx, &xml->u.elem.attrs, &copy->u.elem.attrs, copy,
+                                  0);
+            if (!ok)
+                goto out;
+        }
+    }
+
+out:
+    if (!ok)
+        return __null;
+    return copy;
+}
+
+
+static void
+DeleteByIndex(JSContext *cx, JSXML *xml, uint32 index)
+{
+    JSXML *kid;
+
+    if ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) && index < xml->u.list.kids.length) {
+        kid = (((index) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[index] : __null);
+        if (kid)
+            kid->parent = __null;
+        XMLArrayDelete(cx, &xml->u.list.kids, index, (JSIntn)1);
+    }
+}
+
+typedef JSBool (*JSXMLNameMatcher)(JSObject *nameqn, JSXML *xml);
+
+static JSBool
+MatchAttrName(JSObject *nameqn, JSXML *attr)
+{
+    JSObject *attrqn = attr->name;
+    JSLinearString *localName = nameqn->getQNameLocalName();
+    JSLinearString *uri;
+
+    return (((localName)->length() == 1 && *(localName)->chars() == '*') ||
+            EqualStrings(attrqn->getQNameLocalName(), localName)) &&
+           (!(uri = nameqn->getNameURI()) ||
+            EqualStrings(attrqn->getNameURI(), uri));
+}
+
+static JSBool
+MatchElemName(JSObject *nameqn, JSXML *elem)
+{
+    JSLinearString *localName = nameqn->getQNameLocalName();
+    JSLinearString *uri;
+
+    return (((localName)->length() == 1 && *(localName)->chars() == '*') ||
+            (elem->xml_class == JSXML_CLASS_ELEMENT &&
+             EqualStrings(elem->name->getQNameLocalName(), localName))) &&
+           (!(uri = nameqn->getNameURI()) ||
+            (elem->xml_class == JSXML_CLASS_ELEMENT &&
+             EqualStrings(elem->name->getNameURI(), uri)));
+}
+
+
+static JSBool
+DescendantsHelper(JSContext *cx, JSXML *xml, JSObject *nameqn, JSXML *list)
+{
+    uint32 i, n;
+    JSXML *attr, *kid;
+
+    do { int stackDummy_; if (!((jsuword)(&stackDummy_) > cx->stackLimit)) { js_ReportOverRecursed(cx); return (JSIntn)0; } } while (0);
+
+    if (xml->xml_class == JSXML_CLASS_ELEMENT &&
+        nameqn->getClass() == &js_AttributeNameClass) {
+        for (i = 0, n = xml->u.elem.attrs.length; i < n; i++) {
+            attr = (((i) < (&xml->u.elem.attrs)->length) ? (JSXML *) (&xml->u.elem.attrs)->vector[i] : __null);
+            if (attr && MatchAttrName(nameqn, attr)) {
+                if (!Append(cx, list, attr))
+                    return (JSIntn)0;
+            }
+        }
+    }
+
+    for (i = 0, n = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0); i < n; i++) {
+        kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+        if (!kid)
+            continue;
+        if (nameqn->getClass() != &js_AttributeNameClass &&
+            MatchElemName(nameqn, kid)) {
+            if (!Append(cx, list, kid))
+                return (JSIntn)0;
+        }
+        if (!DescendantsHelper(cx, kid, nameqn, list))
+            return (JSIntn)0;
+    }
+    return (JSIntn)1;
+}
+
+static JSXML *
+Descendants(JSContext *cx, JSXML *xml, jsval id)
+{
+    jsid funid;
+    JSObject *nameqn;
+    JSObject *listobj;
+    JSXML *list, *kid;
+    uint32 i, n;
+    JSBool ok;
+
+    nameqn = ToXMLName(cx, id, &funid);
+    if (!nameqn)
+        return __null;
+
+    listobj = js_NewXMLObject(cx, JSXML_CLASS_LIST);
+    if (!listobj)
+        return __null;
+    list = (JSXML *) listobj->getPrivate();
+    if (!JSID_IS_VOID(funid))
+        return list;
+
+
+
+
+
+
+
+    list->name = nameqn;
+    if (!js_EnterLocalRootScope(cx))
+        return __null;
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        ok = (JSIntn)1;
+        for (i = 0, n = xml->u.list.kids.length; i < n; i++) {
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_ELEMENT) {
+                ok = DescendantsHelper(cx, kid, nameqn, list);
+                if (!ok)
+                    break;
+            }
+        }
+    } else {
+        ok = DescendantsHelper(cx, xml, nameqn, list);
+    }
+    js_LeaveLocalRootScopeWithResult(cx, list);
+    if (!ok)
+        return __null;
+    list->name = __null;
+    return list;
+}
+
+
+static JSBool
+XMLEquals(JSContext *cx, JSXML *xml, JSXML *vxml, JSBool *bp)
+{
+    JSObject *qn, *vqn;
+    uint32 i, j, n;
+    JSXML *kid, *vkid, *attr, *vattr;
+    JSObject *xobj, *vobj;
+
+retry:
+    if (xml->xml_class != vxml->xml_class) {
+        if (xml->xml_class == JSXML_CLASS_LIST && xml->u.list.kids.length == 1) {
+            xml = (((0) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[0] : __null);
+            if (xml)
+                goto retry;
+        }
+        if (vxml->xml_class == JSXML_CLASS_LIST && vxml->u.list.kids.length == 1) {
+            vxml = (((0) < (&vxml->u.list.kids)->length) ? (JSXML *) (&vxml->u.list.kids)->vector[0] : __null);
+            if (vxml)
+                goto retry;
+        }
+        *bp = (JSIntn)0;
+        return (JSIntn)1;
+    }
+
+    qn = xml->name;
+    vqn = vxml->name;
+    if (qn) {
+        *bp = vqn &&
+              EqualStrings(qn->getQNameLocalName(), vqn->getQNameLocalName()) &&
+              EqualStrings(qn->getNameURI(), vqn->getNameURI());
+    } else {
+        *bp = vqn == __null;
+    }
+    if (!*bp)
+        return (JSIntn)1;
+
+    if ((((xml)->xml_class) >= JSXML_CLASS_ATTRIBUTE)) {
+        if (!EqualStrings(cx, xml->u.value, vxml->u.value, bp))
+            return (JSIntn)0;
+    } else if (xml->u.list.kids.length != vxml->u.list.kids.length) {
+        *bp = (JSIntn)0;
+    } else {
+        {
+            JSXMLArrayCursor cursor(&xml->u.list.kids);
+            JSXMLArrayCursor vcursor(&vxml->u.list.kids);
+            for (;;) {
+                kid = (JSXML *) cursor.getNext();
+                vkid = (JSXML *) vcursor.getNext();
+                if (!kid || !vkid) {
+                    *bp = !kid && !vkid;
+                    break;
+                }
+                xobj = js_GetXMLObject(cx, kid);
+                vobj = js_GetXMLObject(cx, vkid);
+                if (!xobj || !vobj ||
+                    !js_TestXMLEquality(cx, ObjectValue(*xobj), ObjectValue(*vobj), bp))
+                    return (JSIntn)0;
+                if (!*bp)
+                    break;
+            }
+        }
+
+        if (*bp && xml->xml_class == JSXML_CLASS_ELEMENT) {
+            n = xml->u.elem.attrs.length;
+            if (n != vxml->u.elem.attrs.length)
+                *bp = (JSIntn)0;
+            for (i = 0; *bp && i < n; i++) {
+                attr = (((i) < (&xml->u.elem.attrs)->length) ? (JSXML *) (&xml->u.elem.attrs)->vector[i] : __null);
+                if (!attr)
+                    continue;
+                j = XMLArrayFindMember(&vxml->u.elem.attrs, (void *)(attr), attr_identity);
+                if (j == ((uint32) -1)) {
+                    *bp = (JSIntn)0;
+                    break;
+                }
+                vattr = (((j) < (&vxml->u.elem.attrs)->length) ? (JSXML *) (&vxml->u.elem.attrs)->vector[j] : __null);
+                if (!vattr)
+                    continue;
+                if (!EqualStrings(cx, attr->u.value, vattr->u.value, bp))
+                    return (JSIntn)0;
+            }
+        }
+    }
+
+    return (JSIntn)1;
+}
+
+
+static JSBool
+Equals(JSContext *cx, JSXML *xml, jsval v, JSBool *bp)
+{
+    JSObject *vobj;
+    JSXML *vxml;
+
+    if (JSVAL_IS_PRIMITIVE(v)) {
+        *bp = (JSIntn)0;
+        if (xml->xml_class == JSXML_CLASS_LIST) {
+            if (xml->u.list.kids.length == 1) {
+                vxml = (((0) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[0] : __null);
+                if (!vxml)
+                    return (JSIntn)1;
+                vobj = js_GetXMLObject(cx, vxml);
+                if (!vobj)
+                    return (JSIntn)0;
+                return js_TestXMLEquality(cx, ObjectValue(*vobj), Valueify(v), bp);
+            }
+            if (JSVAL_IS_VOID(v) && xml->u.list.kids.length == 0)
+                *bp = (JSIntn)1;
+        }
+    } else {
+        vobj = JSVAL_TO_OBJECT(v);
+        if (!vobj->isXML()) {
+            *bp = (JSIntn)0;
+        } else {
+            vxml = (JSXML *) vobj->getPrivate();
+            if (!XMLEquals(cx, xml, vxml, bp))
+                return (JSIntn)0;
+        }
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+CheckCycle(JSContext *cx, JSXML *xml, JSXML *kid)
+{
+    ((void) 0);
+
+    do {
+        if (xml == kid) {
+            JS_ReportErrorNumber(cx, js_GetErrorMessage, __null,
+                                 JSMSG_CYCLIC_VALUE, js_XML_str);
+            return (JSIntn)0;
+        }
+    } while ((xml = xml->parent) != __null);
+
+    return (JSIntn)1;
+}
+
+
+static JSBool
+Insert(JSContext *cx, JSXML *xml, uint32 i, jsval v)
+{
+    uint32 j, n;
+    JSXML *vxml, *kid;
+    JSObject *vobj;
+    JSString *str;
+
+    if (!(((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE))
+        return (JSIntn)1;
+
+    n = 1;
+    vxml = __null;
+    if (!JSVAL_IS_PRIMITIVE(v)) {
+        vobj = JSVAL_TO_OBJECT(v);
+        if (vobj->isXML()) {
+            vxml = (JSXML *) vobj->getPrivate();
+            if (vxml->xml_class == JSXML_CLASS_LIST) {
+                n = vxml->u.list.kids.length;
+                if (n == 0)
+                    return (JSIntn)1;
+                for (j = 0; j < n; j++) {
+                    kid = (((j) < (&vxml->u.list.kids)->length) ? (JSXML *) (&vxml->u.list.kids)->vector[j] : __null);
+                    if (!kid)
+                        continue;
+                    if (!CheckCycle(cx, xml, kid))
+                        return (JSIntn)0;
+                }
+            } else if (vxml->xml_class == JSXML_CLASS_ELEMENT) {
+
+                if (!CheckCycle(cx, xml, vxml))
+                    return (JSIntn)0;
+            }
+        }
+    }
+    if (!vxml) {
+        str = js_ValueToString(cx, Valueify(v));
+        if (!str)
+            return (JSIntn)0;
+
+        vxml = js_NewXML(cx, JSXML_CLASS_TEXT);
+        if (!vxml)
+            return (JSIntn)0;
+        vxml->u.value = str;
+    }
+
+    if (i > xml->u.list.kids.length)
+        i = xml->u.list.kids.length;
+
+    if (!XMLArrayInsert(cx, &xml->u.list.kids, i, n))
+        return (JSIntn)0;
+
+    if (vxml->xml_class == JSXML_CLASS_LIST) {
+        for (j = 0; j < n; j++) {
+            kid = (((j) < (&vxml->u.list.kids)->length) ? (JSXML *) (&vxml->u.list.kids)->vector[j] : __null);
+            if (!kid)
+                continue;
+            kid->parent = xml;
+            do { if ((&xml->u.list.kids)->length <= (i + j)) (&xml->u.list.kids)->length = (i + j) + 1; ((&xml->u.list.kids)->vector[i + j] = (void *)(kid)); } while (0);
+
+
+        }
+    } else {
+        vxml->parent = xml;
+        do { if ((&xml->u.list.kids)->length <= (i)) (&xml->u.list.kids)->length = (i) + 1; ((&xml->u.list.kids)->vector[i] = (void *)(vxml)); } while (0);
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+IndexToId(JSContext *cx, uint32 index, jsid *idp)
+{
+    JSAtom *atom;
+    JSString *str;
+
+    if (index <= ((1 << 30) - 1)) {
+        *idp = INT_TO_JSID(index);
+    } else {
+        str = js_NumberToString(cx, (jsdouble) index);
+        if (!str)
+            return (JSIntn)0;
+        atom = js_AtomizeString(cx, str, 0);
+        if (!atom)
+            return (JSIntn)0;
+        *idp = ATOM_TO_JSID(atom);
+    }
+    return (JSIntn)1;
+}
+
+
+static JSBool
+Replace(JSContext *cx, JSXML *xml, uint32 i, jsval v)
+{
+    uint32 n;
+    JSXML *vxml, *kid;
+    JSObject *vobj;
+    JSString *str;
+
+    if (!(((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE))
+        return (JSIntn)1;
+
+
+
+
+
+
+    n = xml->u.list.kids.length;
+    if (i > n)
+        i = n;
+
+    vxml = __null;
+    if (!JSVAL_IS_PRIMITIVE(v)) {
+        vobj = JSVAL_TO_OBJECT(v);
+        if (vobj->isXML())
+            vxml = (JSXML *) vobj->getPrivate();
+    }
+
+    switch (vxml ? JSXMLClass(vxml->xml_class) : JSXML_CLASS_LIMIT) {
+      case JSXML_CLASS_ELEMENT:
+
+        if (!CheckCycle(cx, xml, vxml))
+            return (JSIntn)0;
+      case JSXML_CLASS_COMMENT:
+      case JSXML_CLASS_PROCESSING_INSTRUCTION:
+      case JSXML_CLASS_TEXT:
+        goto do_replace;
+
+      case JSXML_CLASS_LIST:
+        if (i < n)
+            DeleteByIndex(cx, xml, i);
+        if (!Insert(cx, xml, i, v))
+            return (JSIntn)0;
+        break;
+
+      default:
+        str = js_ValueToString(cx, Valueify(v));
+        if (!str)
+            return (JSIntn)0;
+
+        vxml = js_NewXML(cx, JSXML_CLASS_TEXT);
+        if (!vxml)
+            return (JSIntn)0;
+        vxml->u.value = str;
+
+      do_replace:
+        vxml->parent = xml;
+        if (i < n) {
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid)
+                kid->parent = __null;
+        }
+        if (!XMLArrayAddMember(cx, &xml->u.list.kids, i, (void *)(vxml)))
+            return (JSIntn)0;
+        break;
+    }
+
+    return (JSIntn)1;
+}
+
+
+static void
+DeleteNamedProperty(JSContext *cx, JSXML *xml, JSObject *nameqn,
+                    JSBool attributes)
+{
+    JSXMLArray *array;
+    uint32 index, deleteCount;
+    JSXML *kid;
+    JSXMLNameMatcher matcher;
+
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        array = &xml->u.list.kids;
+        for (index = 0; index < array->length; index++) {
+            kid = (((index) < (array)->length) ? (JSXML *) (array)->vector[index] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_ELEMENT)
+                DeleteNamedProperty(cx, kid, nameqn, attributes);
+        }
+    } else if (xml->xml_class == JSXML_CLASS_ELEMENT) {
+        if (attributes) {
+            array = &xml->u.elem.attrs;
+            matcher = MatchAttrName;
+        } else {
+            array = &xml->u.list.kids;
+            matcher = MatchElemName;
+        }
+        deleteCount = 0;
+        for (index = 0; index < array->length; index++) {
+            kid = (((index) < (array)->length) ? (JSXML *) (array)->vector[index] : __null);
+            if (kid && matcher(nameqn, kid)) {
+                kid->parent = __null;
+                XMLArrayDelete(cx, array, index, (JSIntn)0);
+                ++deleteCount;
+            } else if (deleteCount != 0) {
+                do { if ((array)->length <= (index - deleteCount)) (array)->length = (index - deleteCount) + 1; ((array)->vector[index - deleteCount] = (void *)(array->vector[index])); } while (0)
+
+                                                         ;
+            }
+        }
+        array->length -= deleteCount;
+    }
+}
+
+
+static void
+DeleteListElement(JSContext *cx, JSXML *xml, uint32 index)
+{
+    JSXML *kid, *parent;
+    uint32 kidIndex;
+
+    ((void) 0);
+
+    if (index < xml->u.list.kids.length) {
+        kid = (((index) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[index] : __null);
+        if (kid) {
+            parent = kid->parent;
+            if (parent) {
+                ((void) 0);
+                ((void) 0);
+
+                if (kid->xml_class == JSXML_CLASS_ATTRIBUTE) {
+                    DeleteNamedProperty(cx, parent, kid->name, (JSIntn)1);
+                } else {
+                    kidIndex = XMLArrayFindMember(&parent->u.list.kids, (void *)(kid), __null)
+                                                         ;
+                    ((void) 0);
+                    DeleteByIndex(cx, parent, kidIndex);
+                }
+            }
+            XMLArrayDelete(cx, &xml->u.list.kids, index, (JSIntn)1);
+        }
+    }
+}
+
+static JSBool
+SyncInScopeNamespaces(JSContext *cx, JSXML *xml)
+{
+    JSXMLArray *nsarray;
+    uint32 i, n;
+    JSObject *ns;
+
+    nsarray = &xml->u.elem.namespaces;
+    while ((xml = xml->parent) != __null) {
+        for (i = 0, n = xml->u.elem.namespaces.length; i < n; i++) {
+            ns = (((i) < (&xml->u.elem.namespaces)->length) ? (JSObject *) (&xml->u.elem.namespaces)->vector[i] : __null);
+            if (ns && !(XMLArrayFindMember(nsarray, (void *)(ns), namespace_identity) != ((uint32) -1))) {
+                if (!XMLArrayAddMember(cx, nsarray, (nsarray)->length, (void *)((ns))))
+                    return (JSIntn)0;
+            }
+        }
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+GetNamedProperty(JSContext *cx, JSXML *xml, JSObject* nameqn, JSXML *list)
+{
+    JSXMLArray *array;
+    JSXMLNameMatcher matcher;
+    JSBool attrs;
+
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        JSXMLArrayCursor cursor(&xml->u.list.kids);
+        while (JSXML *kid = (JSXML *) cursor.getNext()) {
+            if (kid->xml_class == JSXML_CLASS_ELEMENT &&
+                !GetNamedProperty(cx, kid, nameqn, list)) {
+                return (JSIntn)0;
+            }
+        }
+    } else if (xml->xml_class == JSXML_CLASS_ELEMENT) {
+        attrs = (nameqn->getClass() == &js_AttributeNameClass);
+        if (attrs) {
+            array = &xml->u.elem.attrs;
+            matcher = MatchAttrName;
+        } else {
+            array = &xml->u.list.kids;
+            matcher = MatchElemName;
+        }
+
+        JSXMLArrayCursor cursor(array);
+        while (JSXML *kid = (JSXML *) cursor.getNext()) {
+            if (matcher(nameqn, kid)) {
+                if (!attrs &&
+                    kid->xml_class == JSXML_CLASS_ELEMENT &&
+                    !SyncInScopeNamespaces(cx, kid)) {
+                    return (JSIntn)0;
+                }
+                if (!Append(cx, list, kid))
+                    return (JSIntn)0;
+            }
+        }
+    }
+
+    return (JSIntn)1;
+}
+
+
+static JSBool
+GetProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
+{
+    JSXML *xml, *list, *kid;
+    uint32 index;
+    JSObject *kidobj, *listobj;
+    JSObject *nameqn;
+    jsid funid;
+
+    xml = (JSXML *) GetInstancePrivate(cx, obj, &js_XMLClass, __null);
+    if (!xml)
+        return true;
+
+    if (js_IdIsIndex(id, &index)) {
+        if (!(((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE)) {
+            *vp = (index == 0) ? OBJECT_TO_JSVAL(obj) : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+        } else {
+
+
+
+
+
+
+
+            if (index < xml->u.list.kids.length) {
+                kid = (((index) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[index] : __null);
+                if (!kid) {
+                    *vp = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+                    return true;
+                }
+                kidobj = js_GetXMLObject(cx, kid);
+                if (!kidobj)
+                    return false;
+
+                *vp = OBJECT_TO_JSVAL(kidobj);
+            } else {
+                *vp = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+            }
+        }
+        return true;
+    }
+
+
+
+
+    nameqn = ToXMLName(cx, IdToJsval(id), &funid);
+    if (!nameqn)
+        return false;
+    if (!JSID_IS_VOID(funid))
+        return GetXMLFunction(cx, obj, funid, vp);
+
+    jsval roots[2] = { OBJECT_TO_JSVAL(nameqn), ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0)) };
+    AutoArrayRooter tvr(cx, (sizeof (roots) / sizeof (roots)[0]), Valueify(roots));
+
+    listobj = js_NewXMLObject(cx, JSXML_CLASS_LIST);
+    if (!listobj)
+        return false;
+
+    roots[1] = OBJECT_TO_JSVAL(listobj);
+
+    list = (JSXML *) listobj->getPrivate();
+    if (!GetNamedProperty(cx, xml, nameqn, list))
+        return false;
+# 3800 "jsxml.cpp"
+    list->u.list.target = xml;
+    list->u.list.targetprop = nameqn;
+    *vp = OBJECT_TO_JSVAL(listobj);
+    return true;
+}
+
+static JSXML *
+CopyOnWrite(JSContext *cx, JSXML *xml, JSObject *obj)
+{
+    ((void) 0);
+
+    xml = DeepCopy(cx, xml, obj, 0);
+    if (!xml)
+        return __null;
+
+    ((void) 0);
+    return xml;
+}
+
+
+
+
+static JSString *
+KidToString(JSContext *cx, JSXML *xml, uint32 index)
+{
+    JSXML *kid;
+    JSObject *kidobj;
+
+    kid = (((index) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[index] : __null);
+    if (!kid)
+        return cx->runtime->emptyString;
+    kidobj = js_GetXMLObject(cx, kid);
+    if (!kidobj)
+        return __null;
+    return js_ValueToString(cx, ObjectValue(*kidobj));
+}
+
+
+static JSBool
+ResolveValue(JSContext *cx, JSXML *list, JSXML **result);
+
+
+static JSBool
+PutProperty(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp)
+{
+    JSBool ok, primitiveAssign;
+    enum { OBJ_ROOT, ID_ROOT, VAL_ROOT };
+    JSXML *xml, *vxml, *rxml, *kid, *attr, *parent, *copy, *kid2, *match;
+    JSObject *vobj, *nameobj, *attrobj, *parentobj, *kidobj, *copyobj;
+    JSObject *targetprop, *nameqn, *attrqn;
+    uint32 index, i, j, k, n, q, matchIndex;
+    jsval attrval, nsval;
+    jsid funid;
+    JSObject *ns;
+
+    xml = (JSXML *) GetInstancePrivate(cx, obj, &js_XMLClass, __null);
+    if (!xml)
+        return (JSIntn)1;
+
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+
+
+    vxml = __null;
+    if (!JSVAL_IS_PRIMITIVE(*vp)) {
+        vobj = JSVAL_TO_OBJECT(*vp);
+        if (vobj->isXML())
+            vxml = (JSXML *) vobj->getPrivate();
+    }
+
+    ok = js_EnterLocalRootScope(cx);
+    if (!ok)
+        return (JSIntn)0;
+
+    ((void) 0);
+    jsval roots[3];
+    roots[OBJ_ROOT] = OBJECT_TO_JSVAL(obj);
+    roots[ID_ROOT] = IdToJsval(id);
+    roots[VAL_ROOT] = *vp;
+    AutoArrayRooter tvr(cx, (sizeof (roots) / sizeof (roots)[0]), Valueify(roots));
+
+    if (js_IdIsIndex(id, &index)) {
+        if (xml->xml_class != JSXML_CLASS_LIST) {
+
+            ReportBadXMLName(cx, IdToValue(id));
+            goto bad;
+        }
+
+
+
+
+        i = index;
+
+
+        if (xml->u.list.target) {
+            ok = ResolveValue(cx, xml->u.list.target, &rxml);
+            if (!ok)
+                goto out;
+            if (!rxml)
+                goto out;
+            ((void) 0);
+        } else {
+            rxml = __null;
+        }
+
+
+        if (index >= xml->u.list.kids.length) {
+
+            if (rxml) {
+                if (rxml->xml_class == JSXML_CLASS_LIST) {
+                    if (rxml->u.list.kids.length != 1)
+                        goto out;
+                    rxml = (((0) < (&rxml->u.list.kids)->length) ? (JSXML *) (&rxml->u.list.kids)->vector[0] : __null);
+                    if (!rxml)
+                        goto out;
+                    ok = js_GetXMLObject(cx, rxml) != __null;
+                    if (!ok)
+                        goto out;
+                }
+# 3936 "jsxml.cpp"
+                if (!(((rxml)->xml_class) < JSXML_CLASS_ATTRIBUTE))
+                    goto out;
+            }
+
+
+            targetprop = xml->u.list.targetprop;
+            if (!targetprop || ((targetprop->getQNameLocalName())->length() == 1 && *(targetprop->getQNameLocalName())->chars() == '*')) {
+
+                kid = js_NewXML(cx, JSXML_CLASS_TEXT);
+                if (!kid)
+                    goto bad;
+            } else {
+                nameobj = targetprop;
+                if (nameobj->getClass() == &js_AttributeNameClass) {
+
+
+
+
+
+                    ok = GetProperty(cx, rxml->object, id, &attrval);
+                    if (!ok)
+                        goto out;
+                    if (JSVAL_IS_PRIMITIVE(attrval))
+                        goto out;
+                    attrobj = JSVAL_TO_OBJECT(attrval);
+                    attr = (JSXML *) attrobj->getPrivate();
+                    if (((((attr)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (attr)->u.list.kids.length : 0) != 0)
+                        goto out;
+
+                    kid = js_NewXML(cx, JSXML_CLASS_ATTRIBUTE);
+                } else {
+
+                    kid = js_NewXML(cx, JSXML_CLASS_ELEMENT);
+                }
+                if (!kid)
+                    goto bad;
+
+
+                kid->name = targetprop;
+            }
+
+
+            kid->parent = rxml;
+
+
+            i = xml->u.list.kids.length;
+            if (kid->xml_class != JSXML_CLASS_ATTRIBUTE) {
+
+
+
+
+
+
+                if (rxml) {
+                    ((void) 0);
+                    n = rxml->u.list.kids.length;
+                    j = n - 1;
+                    if (n != 0 && i != 0) {
+                        for (n = j, j = 0; j < n; j++) {
+                            if (rxml->u.list.kids.vector[j] ==
+                                xml->u.list.kids.vector[i-1]) {
+                                break;
+                            }
+                        }
+                    }
+
+                    kidobj = js_GetXMLObject(cx, kid);
+                    if (!kidobj)
+                        goto bad;
+                    ok = Insert(cx, rxml, j + 1, OBJECT_TO_JSVAL(kidobj));
+                    if (!ok)
+                        goto out;
+                }
+
+
+
+
+
+
+                if (vxml) {
+                    kid->name = (vxml->xml_class == JSXML_CLASS_LIST)
+                        ? vxml->u.list.targetprop
+                        : vxml->name;
+                }
+            }
+
+
+            ok = Append(cx, xml, kid);
+            if (!ok)
+                goto out;
+        }
+
+
+        if (!vxml ||
+            vxml->xml_class == JSXML_CLASS_TEXT ||
+            vxml->xml_class == JSXML_CLASS_ATTRIBUTE) {
+            ok = JS_ConvertValue(cx, *vp, JSTYPE_STRING, vp);
+            if (!ok)
+                goto out;
+            roots[VAL_ROOT] = *vp;
+        }
+
+
+        kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+        if (!kid)
+            goto out;
+        parent = kid->parent;
+        if (kid->xml_class == JSXML_CLASS_ATTRIBUTE) {
+            nameobj = kid->name;
+            if (nameobj->getClass() != &js_AttributeNameClass) {
+                nameobj = NewXMLAttributeName(cx, nameobj->getNameURI(), nameobj->getNamePrefix(),
+                                              nameobj->getQNameLocalName());
+                if (!nameobj)
+                    goto bad;
+            }
+            id = OBJECT_TO_JSID(nameobj);
+
+            if (parent) {
+
+                parentobj = js_GetXMLObject(cx, parent);
+                if (!parentobj)
+                    goto bad;
+                ok = PutProperty(cx, parentobj, id, strict, vp);
+                if (!ok)
+                    goto out;
+
+
+                ok = GetProperty(cx, parentobj, id, vp);
+                if (!ok)
+                    goto out;
+                attr = (JSXML *) JSVAL_TO_OBJECT(*vp)->getPrivate();
+
+
+                if (attr->u.list.kids.length != 0)
+                    xml->u.list.kids.vector[i] = attr->u.list.kids.vector[0];
+            }
+        }
+
+
+        else if (vxml && vxml->xml_class == JSXML_CLASS_LIST) {
+# 4085 "jsxml.cpp"
+            copy = DeepCopyInLRS(cx, vxml, 0);
+            if (!copy)
+                goto bad;
+            copyobj = js_GetXMLObject(cx, copy);
+            if (!copyobj)
+                goto bad;
+
+            ((void) 0);
+            if (parent) {
+                q = XMLArrayFindMember(&parent->u.list.kids, (void *)(kid), __null);
+                ((void) 0);
+                ok = Replace(cx, parent, q, OBJECT_TO_JSVAL(copyobj));
+                if (!ok)
+                    goto out;
+# 4108 "jsxml.cpp"
+            }
+
+
+
+
+
+
+            n = copy->u.list.kids.length;
+            if (n == 0) {
+                XMLArrayDelete(cx, &xml->u.list.kids, i, (JSIntn)1);
+            } else {
+                ok = XMLArrayInsert(cx, &xml->u.list.kids, i + 1, n - 1);
+                if (!ok)
+                    goto out;
+
+                for (j = 0; j < n; j++)
+                    xml->u.list.kids.vector[i + j] = copy->u.list.kids.vector[j];
+            }
+        }
+
+
+        else if (vxml || (((kid)->xml_class) >= JSXML_CLASS_ATTRIBUTE)) {
+            if (parent) {
+                q = XMLArrayFindMember(&parent->u.list.kids, (void *)(kid), __null);
+                ((void) 0);
+                ok = Replace(cx, parent, q, *vp);
+                if (!ok)
+                    goto out;
+
+                vxml = (((q) < (&parent->u.list.kids)->length) ? (JSXML *) (&parent->u.list.kids)->vector[q] : __null);
+                if (!vxml)
+                    goto out;
+                roots[VAL_ROOT] = *vp = OBJECT_TO_JSVAL(vxml->object);
+            }
+# 4153 "jsxml.cpp"
+            if (!vxml) {
+                ((void) 0);
+                vobj = ToXML(cx, *vp);
+                if (!vobj)
+                    goto bad;
+                roots[VAL_ROOT] = *vp = OBJECT_TO_JSVAL(vobj);
+                vxml = (JSXML *) vobj->getPrivate();
+            }
+            do { if ((&xml->u.list.kids)->length <= (i)) (&xml->u.list.kids)->length = (i) + 1; ((&xml->u.list.kids)->vector[i] = (void *)(vxml)); } while (0);
+        }
+
+
+        else {
+            kidobj = js_GetXMLObject(cx, kid);
+            if (!kidobj)
+                goto bad;
+            id = ATOM_TO_JSID(cx->runtime->atomState.starAtom);
+            ok = PutProperty(cx, kidobj, id, strict, vp);
+            if (!ok)
+                goto out;
+        }
+    } else {
+
+
+
+        nameqn = ToXMLName(cx, IdToJsval(id), &funid);
+        if (!nameqn)
+            goto bad;
+        if (!JSID_IS_VOID(funid)) {
+            ok = js_SetProperty(cx, obj, funid, Valueify(vp), false);
+            goto out;
+        }
+        nameobj = nameqn;
+        roots[ID_ROOT] = OBJECT_TO_JSVAL(nameobj);
+
+        if (xml->xml_class == JSXML_CLASS_LIST) {
+
+
+
+
+
+            n = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0);
+            if (n > 1)
+                goto type_error;
+            if (n == 0) {
+                ok = ResolveValue(cx, xml, &rxml);
+                if (!ok)
+                    goto out;
+                if (!rxml || ((((rxml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (rxml)->u.list.kids.length : 0) != 1)
+                    goto type_error;
+                ok = Append(cx, xml, rxml);
+                if (!ok)
+                    goto out;
+            }
+            ((void) 0);
+            xml = (((0) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[0] : __null);
+            if (!xml)
+                goto out;
+            ((void) 0);
+            obj = js_GetXMLObject(cx, xml);
+            if (!obj)
+                goto bad;
+            roots[OBJ_ROOT] = OBJECT_TO_JSVAL(obj);
+
+
+        }
+
+
+
+
+
+
+
+        if ((((xml)->xml_class) >= JSXML_CLASS_ATTRIBUTE))
+            goto out;
+
+        if (!vxml ||
+            vxml->xml_class == JSXML_CLASS_TEXT ||
+            vxml->xml_class == JSXML_CLASS_ATTRIBUTE) {
+            ok = JS_ConvertValue(cx, *vp, JSTYPE_STRING, vp);
+            if (!ok)
+                goto out;
+        } else {
+            rxml = DeepCopyInLRS(cx, vxml, 0);
+            if (!rxml || !js_GetXMLObject(cx, rxml))
+                goto bad;
+            vxml = rxml;
+            *vp = OBJECT_TO_JSVAL(vxml->object);
+        }
+        roots[VAL_ROOT] = *vp;
+
+
+
+
+
+        ok = js_GetDefaultXMLNamespace(cx, &nsval);
+        if (!ok)
+            goto out;
+
+        if (nameobj->getClass() == &js_AttributeNameClass) {
+
+            if (!js_IsXMLName(cx, OBJECT_TO_JSVAL(nameobj)))
+                goto out;
+
+
+            if (vxml && vxml->xml_class == JSXML_CLASS_LIST) {
+                n = vxml->u.list.kids.length;
+                if (n == 0) {
+                    *vp = STRING_TO_JSVAL(cx->runtime->emptyString);
+                } else {
+                    JSString *left = KidToString(cx, vxml, 0);
+                    if (!left)
+                        goto bad;
+
+                    JSString *space = cx->runtime->atomState.spaceAtom;
+                    for (i = 1; i < n; i++) {
+                        left = js_ConcatStrings(cx, left, space);
+                        if (!left)
+                            goto bad;
+                        JSString *right = KidToString(cx, vxml, i);
+                        if (!right)
+                            goto bad;
+                        left = js_ConcatStrings(cx, left, right);
+                        if (!left)
+                            goto bad;
+                    }
+
+                    roots[VAL_ROOT] = *vp = STRING_TO_JSVAL(left);
+                }
+            } else {
+                ok = JS_ConvertValue(cx, *vp, JSTYPE_STRING, vp);
+                if (!ok)
+                    goto out;
+                roots[VAL_ROOT] = *vp;
+            }
+
+
+            match = __null;
+            for (i = 0, n = xml->u.elem.attrs.length; i < n; i++) {
+                attr = (((i) < (&xml->u.elem.attrs)->length) ? (JSXML *) (&xml->u.elem.attrs)->vector[i] : __null);
+                if (!attr)
+                    continue;
+                attrqn = attr->name;
+                if (EqualStrings(attrqn->getQNameLocalName(), nameqn->getQNameLocalName())) {
+                    JSLinearString *uri = nameqn->getNameURI();
+                    if (!uri || EqualStrings(attrqn->getNameURI(), uri)) {
+                        if (!match) {
+                            match = attr;
+                        } else {
+                            DeleteNamedProperty(cx, xml, attrqn, (JSIntn)1);
+                            --i;
+                        }
+                    }
+                }
+            }
+
+
+            attr = match;
+            if (!attr) {
+
+                JSLinearString *uri = nameqn->getNameURI();
+                JSLinearString *left, *right;
+                if (!uri) {
+                    left = right = cx->runtime->emptyString;
+                } else {
+                    left = uri;
+                    right = nameqn->getNamePrefix();
+                }
+                nameqn = NewXMLQName(cx, left, right, nameqn->getQNameLocalName());
+                if (!nameqn)
+                    goto bad;
+
+
+                attr = js_NewXML(cx, JSXML_CLASS_ATTRIBUTE);
+                if (!attr)
+                    goto bad;
+                attr->parent = xml;
+                attr->name = nameqn;
+
+
+                ok = XMLArrayAddMember(cx, &xml->u.elem.attrs, n, (void *)(attr));
+                if (!ok)
+                    goto out;
+
+
+                ns = GetNamespace(cx, nameqn, __null);
+                if (!ns)
+                    goto bad;
+                ok = AddInScopeNamespace(cx, xml, ns);
+                if (!ok)
+                    goto out;
+            }
+
+
+            attr->u.value = JSVAL_TO_STRING(*vp);
+            goto out;
+        }
+
+
+        if (!js_IsXMLName(cx, OBJECT_TO_JSVAL(nameobj)) &&
+            !((nameqn->getQNameLocalName())->length() == 1 && *(nameqn->getQNameLocalName())->chars() == '*')) {
+            goto out;
+        }
+
+
+        id = ((jsid)0x2);
+        primitiveAssign = !vxml && !((nameqn->getQNameLocalName())->length() == 1 && *(nameqn->getQNameLocalName())->chars() == '*');
+
+
+        k = n = xml->u.list.kids.length;
+        matchIndex = ((uint32) -1);
+        kid2 = __null;
+        while (k != 0) {
+            --k;
+            kid = (((k) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[k] : __null);
+            if (kid && MatchElemName(nameqn, kid)) {
+                if (matchIndex != ((uint32) -1))
+                    DeleteByIndex(cx, xml, matchIndex);
+                matchIndex = k;
+                kid2 = kid;
+            }
+        }
+# 4392 "jsxml.cpp"
+        if (kid2) {
+            ((void) 0);
+            if (!kid2->parent)
+                kid2->parent = xml;
+        }
+
+
+        if (matchIndex == ((uint32) -1)) {
+
+            matchIndex = n;
+
+
+            if (primitiveAssign) {
+                JSLinearString *uri = nameqn->getNameURI();
+                JSLinearString *left, *right;
+                if (!uri) {
+                    ns = JSVAL_TO_OBJECT(nsval);
+                    left = ns->getNameURI();
+                    right = ns->getNamePrefix();
+                } else {
+                    left = uri;
+                    right = nameqn->getNamePrefix();
+                }
+                nameqn = NewXMLQName(cx, left, right, nameqn->getQNameLocalName());
+                if (!nameqn)
+                    goto bad;
+
+
+                vobj = js_NewXMLObject(cx, JSXML_CLASS_ELEMENT);
+                if (!vobj)
+                    goto bad;
+                vxml = (JSXML *) vobj->getPrivate();
+                vxml->parent = xml;
+                vxml->name = nameqn;
+
+
+                ns = GetNamespace(cx, nameqn, __null);
+                if (!ns)
+                    goto bad;
+                ok = Replace(cx, xml, matchIndex, OBJECT_TO_JSVAL(vobj));
+                if (!ok)
+                    goto out;
+                ok = AddInScopeNamespace(cx, vxml, ns);
+                if (!ok)
+                    goto out;
+            }
+        }
+
+
+        if (primitiveAssign) {
+            JSXMLArrayCursor cursor(&xml->u.list.kids);
+            cursor.index = matchIndex;
+            kid = (JSXML *) cursor.getCurrent();
+            if ((((kid)->xml_class) < JSXML_CLASS_ATTRIBUTE)) {
+                kid->u.list.kids.finish(cx);
+                kid->u.list.kids.init();
+                ok = kid->u.list.kids.setCapacity(cx, 1);
+            }
+
+
+
+            if (ok) {
+                ok = JS_ConvertValue(cx, *vp, JSTYPE_STRING, vp);
+                if (ok && !JSVAL_TO_STRING(*vp)->empty()) {
+                    roots[VAL_ROOT] = *vp;
+                    if ((JSXML *) cursor.getCurrent() == kid)
+                        ok = Replace(cx, kid, 0, *vp);
+                }
+            }
+        } else {
+
+            ok = Replace(cx, xml, matchIndex, *vp);
+        }
+    }
+
+out:
+    js_LeaveLocalRootScope(cx);
+    return ok;
+
+type_error:
+    {
+        JSAutoByteString bytes;
+        if (js_ValueToPrintable(cx, IdToValue(id), &bytes))
+            JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_BAD_XMLLIST_PUT, bytes.ptr());
+    }
+bad:
+    ok = (JSIntn)0;
+    goto out;
+}
+
+
+static JSBool
+ResolveValue(JSContext *cx, JSXML *list, JSXML **result)
+{
+    JSXML *target, *base;
+    JSObject *targetprop;
+    jsid id;
+    jsval tv;
+
+    if (list->xml_class != JSXML_CLASS_LIST || list->u.list.kids.length != 0) {
+        if (!js_GetXMLObject(cx, list))
+            return (JSIntn)0;
+        *result = list;
+        return (JSIntn)1;
+    }
+
+    target = list->u.list.target;
+    targetprop = list->u.list.targetprop;
+    if (!target || !targetprop || ((targetprop->getQNameLocalName())->length() == 1 && *(targetprop->getQNameLocalName())->chars() == '*')) {
+        *result = __null;
+        return (JSIntn)1;
+    }
+
+    if (targetprop->getClass() == &js_AttributeNameClass) {
+        *result = __null;
+        return (JSIntn)1;
+    }
+
+    if (!ResolveValue(cx, target, &base))
+        return (JSIntn)0;
+    if (!base) {
+        *result = __null;
+        return (JSIntn)1;
+    }
+    if (!js_GetXMLObject(cx, base))
+        return (JSIntn)0;
+
+    id = OBJECT_TO_JSID(targetprop);
+    if (!GetProperty(cx, base->object, id, &tv))
+        return (JSIntn)0;
+    target = (JSXML *) JSVAL_TO_OBJECT(tv)->getPrivate();
+
+    if (((((target)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (target)->u.list.kids.length : 0) == 0) {
+        if (base->xml_class == JSXML_CLASS_LIST && ((((base)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (base)->u.list.kids.length : 0) > 1) {
+            *result = __null;
+            return (JSIntn)1;
+        }
+        tv = STRING_TO_JSVAL(cx->runtime->emptyString);
+        if (!PutProperty(cx, base->object, id, false, &tv))
+            return (JSIntn)0;
+        if (!GetProperty(cx, base->object, id, &tv))
+            return (JSIntn)0;
+        target = (JSXML *) JSVAL_TO_OBJECT(tv)->getPrivate();
+    }
+
+    *result = target;
+    return (JSIntn)1;
+}
+
+static JSBool
+HasNamedProperty(JSXML *xml, JSObject *nameqn)
+{
+    JSBool found;
+    JSXMLArray *array;
+    JSXMLNameMatcher matcher;
+    uint32 i, n;
+
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        found = (JSIntn)0;
+        JSXMLArrayCursor cursor(&xml->u.list.kids);
+        while (JSXML *kid = (JSXML *) cursor.getNext()) {
+            found = HasNamedProperty(kid, nameqn);
+            if (found)
+                break;
+        }
+        return found;
+    }
+
+    if (xml->xml_class == JSXML_CLASS_ELEMENT) {
+        if (nameqn->getClass() == &js_AttributeNameClass) {
+            array = &xml->u.elem.attrs;
+            matcher = MatchAttrName;
+        } else {
+            array = &xml->u.list.kids;
+            matcher = MatchElemName;
+        }
+        for (i = 0, n = array->length; i < n; i++) {
+            JSXML *kid = (((i) < (array)->length) ? (JSXML *) (array)->vector[i] : __null);
+            if (kid && matcher(nameqn, kid))
+                return (JSIntn)1;
+        }
+    }
+
+    return (JSIntn)0;
+}
+
+static JSBool
+HasIndexedProperty(JSXML *xml, uint32 i)
+{
+    if (xml->xml_class == JSXML_CLASS_LIST)
+        return i < ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0);
+
+    if (xml->xml_class == JSXML_CLASS_ELEMENT)
+        return i == 0;
+
+    return (JSIntn)0;
+}
+
+static JSBool
+HasSimpleContent(JSXML *xml);
+
+static JSBool
+HasFunctionProperty(JSContext *cx, JSObject *obj, jsid funid, JSBool *found)
+{
+    JSObject *pobj;
+    JSProperty *prop;
+    JSXML *xml;
+
+    ((void) 0);
+
+    if (!js_LookupProperty(cx, obj, funid, &pobj, &prop))
+        return false;
+    if (!prop) {
+        xml = (JSXML *) obj->getPrivate();
+        if (HasSimpleContent(xml)) {
+            AutoObjectRooter tvr(cx);
+
+
+
+
+
+            if (!js_GetClassPrototype(cx, __null, JSProto_String, tvr.addr()))
+                return false;
+
+            ((void) 0);
+            if (!js_LookupProperty(cx, tvr.object(), funid, &pobj, &prop))
+                return false;
+        }
+    }
+    *found = (prop != __null);
+    return true;
+}
+
+
+static JSBool
+HasProperty(JSContext *cx, JSObject *obj, jsval id, JSBool *found)
+{
+    JSXML *xml;
+    bool isIndex;
+    uint32 i;
+    JSObject *qn;
+    jsid funid;
+
+    xml = (JSXML *) obj->getPrivate();
+    if (!js_IdValIsIndex(cx, id, &i, &isIndex))
+        return (JSIntn)0;
+
+    if (isIndex) {
+        *found = HasIndexedProperty(xml, i);
+    } else {
+        qn = ToXMLName(cx, id, &funid);
+        if (!qn)
+            return (JSIntn)0;
+        if (!JSID_IS_VOID(funid)) {
+            if (!HasFunctionProperty(cx, obj, funid, found))
+                return (JSIntn)0;
+        } else {
+            *found = HasNamedProperty(xml, qn);
+        }
+    }
+    return (JSIntn)1;
+}
+
+static void
+xml_finalize(JSContext *cx, JSObject *obj)
+{
+    JSXML *xml = (JSXML *) obj->getPrivate();
+    if (!xml)
+        return;
+    if (xml->object == obj)
+        xml->object = __null;
+}
+
+static void
+xml_trace_vector(JSTracer *trc, JSXML **vec, uint32 len)
+{
+    uint32 i;
+    JSXML *xml;
+
+    for (i = 0; i < len; i++) {
+        xml = vec[i];
+        if (xml) {
+            do { } while (0);
+            Mark(trc, xml);
+        }
+    }
+}
+# 4703 "jsxml.cpp"
+static JSBool
+xml_lookupProperty(JSContext *cx, JSObject *obj, jsid id, JSObject **objp,
+                   JSProperty **propp)
+{
+    JSBool found;
+    JSXML *xml;
+    uint32 i;
+    JSObject *qn;
+    jsid funid;
+
+    xml = (JSXML *) obj->getPrivate();
+    if (js_IdIsIndex(id, &i)) {
+        found = HasIndexedProperty(xml, i);
+    } else {
+        qn = ToXMLName(cx, IdToJsval(id), &funid);
+        if (!qn)
+            return (JSIntn)0;
+        if (!JSID_IS_VOID(funid))
+            return js_LookupProperty(cx, obj, funid, objp, propp);
+        found = HasNamedProperty(xml, qn);
+    }
+    if (!found) {
+        *objp = __null;
+        *propp = __null;
+    } else {
+        const Shape *shape =
+            js_AddNativeProperty(cx, obj, id,
+                                 Valueify(GetProperty), Valueify(PutProperty),
+                                 0xffffffff, 0x01,
+                                 0, 0);
+        if (!shape)
+            return (JSIntn)0;
+
+        *objp = obj;
+        *propp = (JSProperty *) shape;
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_defineProperty(JSContext *cx, JSObject *obj, jsid id, const Value *v,
+                   PropertyOp getter, StrictPropertyOp setter, uintN attrs)
+{
+    if (IsFunctionObject(*v) || getter || setter ||
+        (attrs & 0x01) == 0 ||
+        (attrs & (0x02 | 0x04 | 0x40))) {
+        return js_DefineProperty(cx, obj, id, v, getter, setter, attrs);
+    }
+
+    jsval tmp = Jsvalify(*v);
+    return PutProperty(cx, obj, id, false, &tmp);
+}
+
+static JSBool
+xml_getProperty(JSContext *cx, JSObject *obj, JSObject *receiver, jsid id, Value *vp)
+{
+    if (JSID_IS_DEFAULT_XML_NAMESPACE(id)) {
+        vp->setUndefined();
+        return (JSIntn)1;
+    }
+
+    return GetProperty(cx, obj, id, Jsvalify(vp));
+}
+
+static JSBool
+xml_setProperty(JSContext *cx, JSObject *obj, jsid id, Value *vp, JSBool strict)
+{
+    return PutProperty(cx, obj, id, strict, Jsvalify(vp));
+}
+
+static JSBool
+xml_getAttributes(JSContext *cx, JSObject *obj, jsid id, uintN *attrsp)
+{
+    JSBool found;
+    if (!HasProperty(cx, obj, IdToJsval(id), &found))
+        return false;
+
+    *attrsp = found ? 0x01 : 0;
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_setAttributes(JSContext *cx, JSObject *obj, jsid id, uintN *attrsp)
+{
+    JSBool found;
+    if (!HasProperty(cx, obj, IdToJsval(id), &found))
+        return false;
+
+    if (found) {
+        JS_ReportErrorNumber(cx, js_GetErrorMessage, __null,
+                             JSMSG_CANT_SET_XML_ATTRS);
+        return false;
+    }
+    return true;
+}
+
+static JSBool
+xml_deleteProperty(JSContext *cx, JSObject *obj, jsid id, Value *rval, JSBool strict)
+{
+    JSXML *xml;
+    jsval idval;
+    uint32 index;
+    JSObject *nameqn;
+    jsid funid;
+
+    idval = IdToJsval(id);
+    xml = (JSXML *) obj->getPrivate();
+    if (js_IdIsIndex(id, &index)) {
+        if (xml->xml_class != JSXML_CLASS_LIST) {
+
+            ReportBadXMLName(cx, IdToValue(id));
+            return false;
+        }
+
+
+        DeleteListElement(cx, xml, index);
+    } else {
+        nameqn = ToXMLName(cx, idval, &funid);
+        if (!nameqn)
+            return false;
+        if (!JSID_IS_VOID(funid))
+            return js_DeleteProperty(cx, obj, funid, rval, false);
+
+        DeleteNamedProperty(cx, xml, nameqn,
+                            nameqn->getClass() == &js_AttributeNameClass);
+    }
+# 4837 "jsxml.cpp"
+    if (!obj->nativeEmpty() && !js_DeleteProperty(cx, obj, id, rval, false))
+        return false;
+
+    rval->setBoolean(true);
+    return true;
+}
+
+JSBool
+xml_convert(JSContext *cx, JSObject *obj, JSType type, Value *rval)
+{
+    return js_TryMethod(cx, obj, cx->runtime->atomState.toStringAtom, 0, __null, rval);
+}
+
+static JSBool
+xml_enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op, Value *statep, jsid *idp)
+{
+    JSXML *xml;
+    uint32 length, index;
+    JSXMLArrayCursor *cursor;
+
+    xml = (JSXML *)obj->getPrivate();
+    length = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0);
+
+    switch (enum_op) {
+      case JSENUMERATE_INIT:
+      case JSENUMERATE_INIT_ALL:
+        if (length == 0) {
+            statep->setInt32(0);
+        } else {
+            cursor = cx->create<JSXMLArrayCursor>(&xml->u.list.kids);
+            if (!cursor)
+                return (JSIntn)0;
+            statep->setPrivate(cursor);
+        }
+        if (idp)
+            *idp = INT_TO_JSID(length);
+        break;
+
+      case JSENUMERATE_NEXT:
+        if (statep->isInt32(0)) {
+            statep->setNull();
+            break;
+        }
+        cursor = (JSXMLArrayCursor *) statep->toPrivate();
+        if (cursor && cursor->array && (index = cursor->index) < length) {
+            *idp = INT_TO_JSID(index);
+            cursor->index = index + 1;
+            break;
+        }
+
+
+      case JSENUMERATE_DESTROY:
+        if (!statep->isInt32(0)) {
+            cursor = (JSXMLArrayCursor *) statep->toPrivate();
+            if (cursor)
+                cx->destroy(cursor);
+        }
+        statep->setNull();
+        break;
+    }
+    return (JSIntn)1;
+}
+
+static JSType
+xml_typeOf(JSContext *cx, JSObject *obj)
+{
+    return JSTYPE_XML;
+}
+
+static JSBool
+xml_hasInstance(JSContext *cx, JSObject *obj, const Value *, JSBool *bp)
+{
+    return (JSIntn)1;
+}
+
+static void
+xml_trace(JSTracer *trc, JSObject *obj)
+{
+    JSXML *xml = (JSXML *) obj->getPrivate();
+    if (xml)
+        do { do { } while (0); JS_CallTracer((trc), (xml), (2)); } while (0);
+}
+
+static JSBool
+xml_fix(JSContext *cx, JSObject *obj, bool *success, AutoIdVector *props)
+{
+    ((void) 0);
+    *success = false;
+    return true;
+}
+
+static void
+xml_clear(JSContext *cx, JSObject *obj)
+{
+}
+
+static JSBool
+HasSimpleContent(JSXML *xml)
+{
+    JSXML *kid;
+    JSBool simple;
+    uint32 i, n;
+
+again:
+    switch (xml->xml_class) {
+      case JSXML_CLASS_COMMENT:
+      case JSXML_CLASS_PROCESSING_INSTRUCTION:
+        return (JSIntn)0;
+      case JSXML_CLASS_LIST:
+        if (xml->u.list.kids.length == 0)
+            return (JSIntn)1;
+        if (xml->u.list.kids.length == 1) {
+            kid = (((0) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[0] : __null);
+            if (kid) {
+                xml = kid;
+                goto again;
+            }
+        }
+
+      default:
+        simple = (JSIntn)1;
+        for (i = 0, n = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0); i < n; i++) {
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_ELEMENT) {
+                simple = (JSIntn)0;
+                break;
+            }
+        }
+        return simple;
+    }
+}
+
+
+
+
+JSBool
+js_GetXMLMethod(JSContext *cx, JSObject *obj, jsid id, Value *vp)
+{
+    ((void) 0);
+
+    if (JSID_IS_OBJECT(id)) {
+        jsid funid;
+
+        if (!js_IsFunctionQName(cx, JSID_TO_OBJECT(id), &funid))
+            return (JSIntn)0;
+        if (!JSID_IS_VOID(funid))
+            id = funid;
+    }
+
+
+
+
+
+    AutoValueRooter tvr(cx);
+    JSBool ok = GetXMLFunction(cx, obj, id, Jsvalify(tvr.addr()));
+    *vp = tvr.value();
+    return ok;
+}
+
+JSBool
+js_TestXMLEquality(JSContext *cx, const Value &v1, const Value &v2, JSBool *bp)
+{
+    JSXML *xml, *vxml;
+    JSObject *vobj;
+    JSBool ok;
+    JSString *str, *vstr;
+    jsdouble d, d2;
+
+    JSObject *obj;
+    jsval v;
+    if (v1.isObject() && v1.toObject().isXML()) {
+        obj = &v1.toObject();
+        v = Jsvalify(v2);
+    } else {
+        v = Jsvalify(v1);
+        obj = &v2.toObject();
+    }
+
+    ((void) 0);
+
+    xml = (JSXML *) obj->getPrivate();
+    vxml = __null;
+    if (!JSVAL_IS_PRIMITIVE(v)) {
+        vobj = JSVAL_TO_OBJECT(v);
+        if (vobj->isXML())
+            vxml = (JSXML *) vobj->getPrivate();
+    }
+
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        ok = Equals(cx, xml, v, bp);
+    } else if (vxml) {
+        if (vxml->xml_class == JSXML_CLASS_LIST) {
+            ok = Equals(cx, vxml, OBJECT_TO_JSVAL(obj), bp);
+        } else {
+            if (((xml->xml_class == JSXML_CLASS_TEXT ||
+                  xml->xml_class == JSXML_CLASS_ATTRIBUTE) &&
+                 HasSimpleContent(vxml)) ||
+                ((vxml->xml_class == JSXML_CLASS_TEXT ||
+                  vxml->xml_class == JSXML_CLASS_ATTRIBUTE) &&
+                 HasSimpleContent(xml))) {
+                ok = js_EnterLocalRootScope(cx);
+                if (ok) {
+                    ok = (str = js_ValueToString(cx, ObjectValue(*obj))) &&
+                         (vstr = js_ValueToString(cx, Valueify(v)));
+                    if (ok)
+                        ok = EqualStrings(cx, str, vstr, bp);
+                    js_LeaveLocalRootScope(cx);
+                }
+            } else {
+                ok = XMLEquals(cx, xml, vxml, bp);
+            }
+        }
+    } else {
+        ok = js_EnterLocalRootScope(cx);
+        if (ok) {
+            if (HasSimpleContent(xml)) {
+                ok = (str = js_ValueToString(cx, ObjectValue(*obj))) &&
+                     (vstr = js_ValueToString(cx, Valueify(v)));
+                if (ok)
+                    ok = EqualStrings(cx, str, vstr, bp);
+            } else if (JSVAL_IS_STRING(v) || JSVAL_IS_NUMBER(v)) {
+                str = js_ValueToString(cx, ObjectValue(*obj));
+                if (!str) {
+                    ok = (JSIntn)0;
+                } else if (JSVAL_IS_STRING(v)) {
+                    ok = EqualStrings(cx, str, JSVAL_TO_STRING(v), bp);
+                } else {
+                    ok = JS_ValueToNumber(cx, STRING_TO_JSVAL(str), &d);
+                    if (ok) {
+                        d2 = JSVAL_IS_INT(v) ? JSVAL_TO_INT(v)
+                                             : JSVAL_TO_DOUBLE(v);
+                        *bp = ((d) == (d2));
+                    }
+                }
+            } else {
+                *bp = (JSIntn)0;
+            }
+            js_LeaveLocalRootScope(cx);
+        }
+    }
+    return ok;
+}
+
+JSBool
+js_ConcatenateXML(JSContext *cx, JSObject *obj, JSObject *robj, Value *vp)
+{
+    JSBool ok;
+    JSObject *listobj;
+    JSXML *list, *lxml, *rxml;
+
+    ((void) 0);
+    ok = js_EnterLocalRootScope(cx);
+    if (!ok)
+        return (JSIntn)0;
+
+    listobj = js_NewXMLObject(cx, JSXML_CLASS_LIST);
+    if (!listobj) {
+        ok = (JSIntn)0;
+        goto out;
+    }
+
+    list = (JSXML *) listobj->getPrivate();
+    lxml = (JSXML *) obj->getPrivate();
+    ok = Append(cx, list, lxml);
+    if (!ok)
+        goto out;
+
+    ((void) 0);
+    rxml = (JSXML *) robj->getPrivate();
+    ok = Append(cx, list, rxml);
+    if (!ok)
+        goto out;
+
+    vp->setObject(*listobj);
+out:
+    js_LeaveLocalRootScopeWithResult(cx, *vp);
+    return ok;
+}
+
+__attribute__((visibility ("default"))) Class js_XMLClass = {
+    js_XML_str,
+    (1<<0) | (1<<((8 + 8)+3)) |
+    ((JSProto_XML) << ((8 + 8) + 8)),
+    PropertyStub,
+    PropertyStub,
+    PropertyStub,
+    StrictPropertyStub,
+    EnumerateStub,
+    ResolveStub,
+    xml_convert,
+    xml_finalize,
+    __null,
+    __null,
+    __null,
+    __null,
+    __null,
+    xml_hasInstance,
+    ((JSMarkOp)(xml_trace)),
+    {__null,__null,__null,__null,__null},
+    {
+        xml_lookupProperty,
+        xml_defineProperty,
+        xml_getProperty,
+        xml_setProperty,
+        xml_getAttributes,
+        xml_setAttributes,
+        xml_deleteProperty,
+        xml_enumerate,
+        xml_typeOf,
+        __null,
+        xml_fix,
+        __null,
+        xml_clear
+    }
+};
+
+static JSXML *
+StartNonListXMLMethod(JSContext *cx, jsval *vp, JSObject **objp)
+{
+    JSXML *xml;
+    JSFunction *fun;
+    char numBuf[12];
+
+    ((void) 0);
+
+    *objp = ToObject(cx, Valueify(&vp[1]));
+    if (!*objp)
+        return __null;
+    xml = (JSXML *) GetInstancePrivate(cx, *objp, &js_XMLClass, Valueify(vp + 2));
+    if (!xml || xml->xml_class != JSXML_CLASS_LIST)
+        return xml;
+
+    if (xml->u.list.kids.length == 1) {
+        xml = (((0) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[0] : __null);
+        if (xml) {
+            *objp = js_GetXMLObject(cx, xml);
+            if (!*objp)
+                return __null;
+            vp[1] = OBJECT_TO_JSVAL(*objp);
+            return xml;
+        }
+    }
+
+    fun = (((void) 0), (JSFunction *) (JSVAL_TO_OBJECT(*vp))->getPrivate());
+    JS_snprintf(numBuf, sizeof numBuf, "%u", xml->u.list.kids.length);
+    JSAutoByteString funNameBytes;
+    if (const char *funName = GetFunctionNameBytes(cx, fun, &funNameBytes)) {
+        JS_ReportErrorNumber(cx, js_GetErrorMessage, __null, JSMSG_NON_LIST_XML_METHOD,
+                             funName, numBuf);
+    }
+    return __null;
+}
+# 5206 "jsxml.cpp"
+static JSBool
+xml_addNamespace(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *ns;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    if (xml->xml_class != JSXML_CLASS_ELEMENT)
+        goto done;
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+
+    if (!NamespaceHelper(cx, __null, argc == 0 ? -1 : 1, vp + 2, vp))
+        return (JSIntn)0;
+    ((void) 0);
+
+    ns = JSVAL_TO_OBJECT(*vp);
+    if (!AddInScopeNamespace(cx, xml, ns))
+        return (JSIntn)0;
+    ns->setNamespaceDeclared(((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)1)));
+
+  done:
+    *vp = OBJECT_TO_JSVAL(obj);
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_appendChild(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval v;
+    JSObject *vobj;
+    JSXML *vxml;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+
+    jsid name;
+    if (!js_GetAnyName(cx, &name))
+        return (JSIntn)0;
+
+    if (!GetProperty(cx, obj, name, &v))
+        return (JSIntn)0;
+
+    ((void) 0);
+    vobj = JSVAL_TO_OBJECT(v);
+    ((void) 0);
+    vxml = (JSXML *) vobj->getPrivate();
+    ((void) 0);
+
+    if (!IndexToId(cx, vxml->u.list.kids.length, &name))
+        return (JSIntn)0;
+    *vp = (argc != 0) ? vp[2] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+
+    if (!PutProperty(cx, JSVAL_TO_OBJECT(v), name, false, vp))
+        return (JSIntn)0;
+
+    *vp = OBJECT_TO_JSVAL(obj);
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_attribute(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *qn;
+
+    if (argc == 0) {
+        js_ReportMissingArg(cx, Valueify(*vp), 0);
+        return (JSIntn)0;
+    }
+
+    qn = ToAttributeName(cx, vp[2]);
+    if (!qn)
+        return (JSIntn)0;
+    vp[2] = OBJECT_TO_JSVAL(qn);
+
+    jsid id = OBJECT_TO_JSID(qn);
+    JSObject *obj = ToObject(cx, Valueify(&vp[1]));
+    if (!obj)
+        return (JSIntn)0;
+    return GetProperty(cx, obj, id, vp);
+}
+
+
+static JSBool
+xml_attributes(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval name = STRING_TO_JSVAL((cx->runtime->atomState.starAtom));
+    JSObject *qn = ToAttributeName(cx, name);
+    if (!qn)
+        return (JSIntn)0;
+
+    AutoObjectRooter tvr(cx, qn);
+    jsid id = OBJECT_TO_JSID(qn);
+    JSObject *obj = ToObject(cx, Valueify(&vp[1]));
+    if (!obj)
+        return (JSIntn)0;
+    return GetProperty(cx, obj, id, vp);
+}
+
+static JSXML *
+xml_list_helper(JSContext *cx, JSXML *xml, jsval *rval)
+{
+    JSObject *listobj;
+    JSXML *list;
+
+    listobj = js_NewXMLObject(cx, JSXML_CLASS_LIST);
+    if (!listobj)
+        return __null;
+
+    *rval = OBJECT_TO_JSVAL(listobj);
+    list = (JSXML *) listobj->getPrivate();
+    list->u.list.target = xml;
+    return list;
+}
+
+static JSBool
+ValueToId(JSContext *cx, jsval v, AutoIdRooter *idr)
+{
+    if (JSVAL_IS_INT(v)) {
+        jsint i = JSVAL_TO_INT(v);
+        if (INT_FITS_IN_JSID(i))
+            *idr->addr() = INT_TO_JSID(i);
+        else if (!js_ValueToStringId(cx, Valueify(v), idr->addr()))
+            return (JSIntn)0;
+    } else if (JSVAL_IS_STRING(v)) {
+        JSAtom *atom = js_AtomizeString(cx, JSVAL_TO_STRING(v), 0);
+        if (!atom)
+            return (JSIntn)0;
+        *idr->addr() = ATOM_TO_JSID(atom);
+    } else if (!JSVAL_IS_PRIMITIVE(v)) {
+        *idr->addr() = OBJECT_TO_JSID(JSVAL_TO_OBJECT(v));
+    } else {
+        ReportBadXMLName(cx, Valueify(v));
+        return (JSIntn)0;
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_child_helper(JSContext *cx, JSObject *obj, JSXML *xml, jsval name,
+                 jsval *rval)
+{
+    bool isIndex;
+    uint32 index;
+    JSXML *kid;
+    JSObject *kidobj;
+
+
+    ((void) 0);
+
+    if (!js_IdValIsIndex(cx, name, &index, &isIndex))
+        return (JSIntn)0;
+
+    if (isIndex) {
+        if (index >= ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0)) {
+            *rval = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+        } else {
+            kid = (((index) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[index] : __null);
+            if (!kid) {
+                *rval = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+            } else {
+                kidobj = js_GetXMLObject(cx, kid);
+                if (!kidobj)
+                    return (JSIntn)0;
+                *rval = OBJECT_TO_JSVAL(kidobj);
+            }
+        }
+        return (JSIntn)1;
+    }
+
+    AutoIdRooter idr(cx);
+    if (!ValueToId(cx, name, &idr))
+        return (JSIntn)0;
+
+    return GetProperty(cx, obj, idr.id(), rval);
+}
+
+
+static JSBool
+xml_child(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval v;
+    JSXML *list, *vxml;
+    JSObject *kidobj;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    jsval name = argc != 0 ? vp[2] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+
+        list = xml_list_helper(cx, xml, vp);
+        if (!list)
+            return (JSIntn)0;
+
+        JSXMLArrayCursor cursor(&xml->u.list.kids);
+        while (JSXML *kid = (JSXML *) cursor.getNext()) {
+            kidobj = js_GetXMLObject(cx, kid);
+            if (!kidobj)
+                return (JSIntn)0;
+            if (!xml_child_helper(cx, kidobj, kid, name, &v))
+                return (JSIntn)0;
+            if (JSVAL_IS_VOID(v)) {
+
+                continue;
+            }
+
+            ((void) 0);
+            vxml = (JSXML *) JSVAL_TO_OBJECT(v)->getPrivate();
+            if ((!(((vxml)->xml_class) < JSXML_CLASS_ATTRIBUTE) || vxml->u.list.kids.length != 0) &&
+                !Append(cx, list, vxml)) {
+                return (JSIntn)0;
+            }
+        }
+        return (JSIntn)1;
+    }
+
+
+    if (!xml_child_helper(cx, obj, xml, name, vp))
+        return (JSIntn)0;
+    if (JSVAL_IS_VOID(*vp) && !xml_list_helper(cx, xml, vp))
+        return (JSIntn)0;
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_childIndex(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSXML *parent;
+    uint32 i, n;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    parent = xml->parent;
+    if (!parent || xml->xml_class == JSXML_CLASS_ATTRIBUTE) {
+        *vp = DOUBLE_TO_JSVAL(js_NaN);
+        return (JSIntn)1;
+    }
+    for (i = 0, n = ((((parent)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (parent)->u.list.kids.length : 0); i < n; i++) {
+        if ((((i) < (&parent->u.list.kids)->length) ? (JSXML *) (&parent->u.list.kids)->vector[i] : __null) == xml)
+            break;
+    }
+    ((void) 0);
+    if (i <= ((jsint)0x7fffffff))
+        *vp = INT_TO_JSVAL(i);
+    else
+        *vp = DOUBLE_TO_JSVAL(i);
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_children(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj = ToObject(cx, Valueify(&vp[1]));
+    if (!obj)
+        return false;
+    jsid name = ATOM_TO_JSID(cx->runtime->atomState.starAtom);
+    return GetProperty(cx, obj, name, vp);
+}
+
+
+static JSBool
+xml_comments_helper(JSContext *cx, JSObject *obj, JSXML *xml, jsval *vp)
+{
+    JSXML *list, *kid, *vxml;
+    JSBool ok;
+    uint32 i, n;
+    JSObject *kidobj;
+    jsval v;
+
+    list = xml_list_helper(cx, xml, vp);
+    if (!list)
+        return (JSIntn)0;
+
+    ok = (JSIntn)1;
+
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+
+        for (i = 0, n = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0); i < n; i++) {
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_ELEMENT) {
+                ok = js_EnterLocalRootScope(cx);
+                if (!ok)
+                    break;
+                kidobj = js_GetXMLObject(cx, kid);
+                if (kidobj) {
+                    ok = xml_comments_helper(cx, kidobj, kid, &v);
+                } else {
+                    ok = (JSIntn)0;
+                    v = ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+                }
+                js_LeaveLocalRootScopeWithResult(cx, Valueify(v));
+                if (!ok)
+                    break;
+                vxml = (JSXML *) JSVAL_TO_OBJECT(v)->getPrivate();
+                if (((((vxml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (vxml)->u.list.kids.length : 0) != 0) {
+                    ok = Append(cx, list, vxml);
+                    if (!ok)
+                        break;
+                }
+            }
+        }
+    } else {
+
+        for (i = 0, n = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0); i < n; i++) {
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_COMMENT) {
+                ok = Append(cx, list, kid);
+                if (!ok)
+                    break;
+            }
+        }
+    }
+
+    return ok;
+}
+
+static JSBool
+xml_comments(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    return xml_comments_helper(cx, obj, xml, vp);
+}
+
+
+static JSBool
+xml_contains(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval value;
+    JSBool eq;
+    JSObject *kidobj;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    value = argc != 0 ? vp[2] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        eq = (JSIntn)0;
+        JSXMLArrayCursor cursor(&xml->u.list.kids);
+        while (JSXML *kid = (JSXML *) cursor.getNext()) {
+            kidobj = js_GetXMLObject(cx, kid);
+            if (!kidobj || !js_TestXMLEquality(cx, ObjectValue(*kidobj), Valueify(value), &eq))
+                return (JSIntn)0;
+            if (eq)
+                break;
+        }
+    } else {
+        if (!js_TestXMLEquality(cx, ObjectValue(*obj), Valueify(value), &eq))
+            return (JSIntn)0;
+    }
+    *vp = BOOLEAN_TO_JSVAL(eq);
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_copy(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSXML *copy;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    copy = DeepCopy(cx, xml, __null, 0);
+    if (!copy)
+        return (JSIntn)0;
+    *vp = OBJECT_TO_JSVAL(copy->object);
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_descendants(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval name;
+    JSXML *list;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    name = argc == 0 ? STRING_TO_JSVAL((cx->runtime->atomState.starAtom)) : vp[2];
+    list = Descendants(cx, xml, name);
+    if (!list)
+        return (JSIntn)0;
+    *vp = OBJECT_TO_JSVAL(list->object);
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_elements_helper(JSContext *cx, JSObject *obj, JSXML *xml,
+                    JSObject *nameqn, jsval *vp)
+{
+    JSXML *list, *vxml;
+    jsval v;
+    JSBool ok;
+    JSObject *kidobj;
+    uint32 i, n;
+
+    list = xml_list_helper(cx, xml, vp);
+    if (!list)
+        return (JSIntn)0;
+
+    list->u.list.targetprop = nameqn;
+    ok = (JSIntn)1;
+
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+
+        JSXMLArrayCursor cursor(&xml->u.list.kids);
+        while (JSXML *kid = (JSXML *) cursor.getNext()) {
+            if (kid->xml_class == JSXML_CLASS_ELEMENT) {
+                ok = js_EnterLocalRootScope(cx);
+                if (!ok)
+                    break;
+                kidobj = js_GetXMLObject(cx, kid);
+                if (kidobj) {
+                    ok = xml_elements_helper(cx, kidobj, kid, nameqn, &v);
+                } else {
+                    ok = (JSIntn)0;
+                    v = ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+                }
+                js_LeaveLocalRootScopeWithResult(cx, Valueify(v));
+                if (!ok)
+                    break;
+                vxml = (JSXML *) JSVAL_TO_OBJECT(v)->getPrivate();
+                if (((((vxml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (vxml)->u.list.kids.length : 0) != 0) {
+                    ok = Append(cx, list, vxml);
+                    if (!ok)
+                        break;
+                }
+            }
+        }
+    } else {
+        for (i = 0, n = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0); i < n; i++) {
+            JSXML *kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_ELEMENT &&
+                MatchElemName(nameqn, kid)) {
+                ok = Append(cx, list, kid);
+                if (!ok)
+                    break;
+            }
+        }
+    }
+
+    return ok;
+}
+
+static JSBool
+xml_elements(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval name;
+    JSObject *nameqn;
+    jsid funid;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+
+    name = (argc == 0) ? STRING_TO_JSVAL((cx->runtime->atomState.starAtom)) : vp[2];
+    nameqn = ToXMLName(cx, name, &funid);
+    if (!nameqn)
+        return (JSIntn)0;
+
+    if (!JSID_IS_VOID(funid))
+        return xml_list_helper(cx, xml, vp) != __null;
+
+    return xml_elements_helper(cx, obj, xml, nameqn, vp);
+}
+
+
+static JSBool
+xml_hasOwnProperty(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval name;
+    JSBool found;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1]));
+    if (!obj)
+        return (JSIntn)0;
+    if (!InstanceOf(cx, obj, &js_XMLClass, Valueify(vp + 2)))
+        return (JSIntn)0;
+
+    name = argc != 0 ? vp[2] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+    if (!HasProperty(cx, obj, name, &found))
+        return (JSIntn)0;
+    if (found) {
+        *vp = ((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)1));
+        return (JSIntn)1;
+    }
+    return js_HasOwnPropertyHelper(cx, js_LookupProperty, argc, Valueify(vp));
+}
+
+
+static JSBool
+xml_hasComplexContent(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSXML *kid;
+    JSObject *kidobj;
+    uint32 i, n;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+again:
+    switch (xml->xml_class) {
+      case JSXML_CLASS_ATTRIBUTE:
+      case JSXML_CLASS_COMMENT:
+      case JSXML_CLASS_PROCESSING_INSTRUCTION:
+      case JSXML_CLASS_TEXT:
+        *vp = ((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)0));
+        break;
+      case JSXML_CLASS_LIST:
+        if (xml->u.list.kids.length == 0) {
+            *vp = ((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)1));
+        } else if (xml->u.list.kids.length == 1) {
+            kid = (((0) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[0] : __null);
+            if (kid) {
+                kidobj = js_GetXMLObject(cx, kid);
+                if (!kidobj)
+                    return (JSIntn)0;
+                obj = kidobj;
+                xml = (JSXML *) obj->getPrivate();
+                goto again;
+            }
+        }
+
+      default:
+        *vp = ((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)0));
+        for (i = 0, n = xml->u.list.kids.length; i < n; i++) {
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_ELEMENT) {
+                *vp = ((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)1));
+                break;
+            }
+        }
+        break;
+    }
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_hasSimpleContent(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    *vp = BOOLEAN_TO_JSVAL(HasSimpleContent(xml));
+    return (JSIntn)1;
+}
+
+static JSBool
+FindInScopeNamespaces(JSContext *cx, JSXML *xml, JSXMLArray *nsarray)
+{
+    uint32 length, i, j, n;
+    JSObject *ns, *ns2;
+    JSLinearString *prefix, *prefix2;
+
+    length = nsarray->length;
+    do {
+        if (xml->xml_class != JSXML_CLASS_ELEMENT)
+            continue;
+        for (i = 0, n = xml->u.elem.namespaces.length; i < n; i++) {
+            ns = (((i) < (&xml->u.elem.namespaces)->length) ? (JSObject *) (&xml->u.elem.namespaces)->vector[i] : __null);
+            if (!ns)
+                continue;
+
+            prefix = ns->getNamePrefix();
+            for (j = 0; j < length; j++) {
+                ns2 = (((j) < (nsarray)->length) ? (JSObject *) (nsarray)->vector[j] : __null);
+                if (ns2) {
+                    prefix2 = ns2->getNamePrefix();
+                    if ((prefix2 && prefix)
+                        ? EqualStrings(prefix2, prefix)
+                        : EqualStrings(ns2->getNameURI(), ns->getNameURI())) {
+                        break;
+                    }
+                }
+            }
+
+            if (j == length) {
+                if (!XMLArrayAddMember(cx, nsarray, (nsarray)->length, (void *)((ns))))
+                    return (JSIntn)0;
+                ++length;
+            }
+        }
+    } while ((xml = xml->parent) != __null);
+    ((void) 0);
+
+    return (JSIntn)1;
+}
+
+
+
+
+
+static
+
+# 5791 "jsxml.cpp"
+       bool
+NamespacesToJSArray(JSContext *cx, JSXMLArray *array, jsval *rval)
+{
+    JSObject *arrayobj = NewDenseEmptyArray(cx);
+    if (!arrayobj)
+        return false;
+    *rval = OBJECT_TO_JSVAL(arrayobj);
+
+    AutoValueRooter tvr(cx);
+    for (uint32 i = 0, n = array->length; i < n; i++) {
+        JSObject *ns = (((i) < (array)->length) ? (JSObject *) (array)->vector[i] : __null);
+        if (!ns)
+            continue;
+        tvr.set(ObjectValue(*ns));
+        if (!arrayobj->setProperty(cx, INT_TO_JSID(i), tvr.addr(), false))
+            return false;
+    }
+    return true;
+}
+
+static JSBool
+xml_inScopeNamespaces(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+
+    AutoNamespaceArray namespaces(cx);
+    return FindInScopeNamespaces(cx, xml, &namespaces.array) &&
+           NamespacesToJSArray(cx, &namespaces.array, vp);
+}
+
+static JSBool
+xml_insertChildAfter(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval arg;
+    JSXML *kid;
+    uint32 i;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    *vp = OBJECT_TO_JSVAL(obj);
+    if (!(((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) || argc == 0)
+        return (JSIntn)1;
+
+    arg = vp[2];
+    if (JSVAL_IS_NULL(arg)) {
+        kid = __null;
+        i = 0;
+    } else {
+        if (!(!JSVAL_IS_PRIMITIVE(arg) && JSVAL_TO_OBJECT(arg)->isXML()))
+            return (JSIntn)1;
+        kid = (JSXML *) JSVAL_TO_OBJECT(arg)->getPrivate();
+        i = XMLArrayFindMember(&xml->u.list.kids, (void *)(kid), __null);
+        if (i == ((uint32) -1))
+            return (JSIntn)1;
+        ++i;
+    }
+
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+    return Insert(cx, xml, i, argc >= 2 ? vp[3] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0)));
+}
+
+static JSBool
+xml_insertChildBefore(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval arg;
+    JSXML *kid;
+    uint32 i;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    *vp = OBJECT_TO_JSVAL(obj);
+    if (!(((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) || argc == 0)
+        return (JSIntn)1;
+
+    arg = vp[2];
+    if (JSVAL_IS_NULL(arg)) {
+        kid = __null;
+        i = xml->u.list.kids.length;
+    } else {
+        if (!(!JSVAL_IS_PRIMITIVE(arg) && JSVAL_TO_OBJECT(arg)->isXML()))
+            return (JSIntn)1;
+        kid = (JSXML *) JSVAL_TO_OBJECT(arg)->getPrivate();
+        i = XMLArrayFindMember(&xml->u.list.kids, (void *)(kid), __null);
+        if (i == ((uint32) -1))
+            return (JSIntn)1;
+    }
+
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+    return Insert(cx, xml, i, argc >= 2 ? vp[3] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0)));
+}
+
+
+static JSBool
+xml_length(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    if (xml->xml_class != JSXML_CLASS_LIST) {
+        *vp = ((((uint64)(uint32)(JSVAL_TAG_INT32)) << 47) | (1));
+    } else {
+        uint32 l = xml->u.list.kids.length;
+        if (l <= ((jsint)0x7fffffff))
+            *vp = INT_TO_JSVAL(l);
+        else
+            *vp = DOUBLE_TO_JSVAL(l);
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_localName(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    *vp = xml->name ? xml->name->getQNameLocalNameVal() : ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_name(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    *vp = OBJECT_TO_JSVAL(xml->name);
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_namespace(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSLinearString *prefix, *nsprefix;
+    jsuint i, length;
+    JSObject *ns;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    if (argc == 0 && !((uintN)(((xml)->xml_class) - JSXML_CLASS_ELEMENT) <= (uintN)(JSXML_CLASS_PROCESSING_INSTRUCTION - JSXML_CLASS_ELEMENT))) {
+        *vp = ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+        return true;
+    }
+
+    if (argc == 0) {
+        prefix = __null;
+    } else {
+        JSString *str = js_ValueToString(cx, Valueify(vp[2]));
+        if (!str)
+            return false;
+        prefix = str->ensureLinear(cx);
+        if (!prefix)
+            return false;
+        vp[2] = STRING_TO_JSVAL(prefix);
+    }
+
+    AutoNamespaceArray inScopeNSes(cx);
+    if (!FindInScopeNamespaces(cx, xml, &inScopeNSes.array))
+        return false;
+
+    if (!prefix) {
+        ns = GetNamespace(cx, xml->name, &inScopeNSes.array);
+        if (!ns)
+            return false;
+    } else {
+        ns = __null;
+        for (i = 0, length = inScopeNSes.array.length; i < length; i++) {
+            ns = (((i) < (&inScopeNSes.array)->length) ? (JSObject *) (&inScopeNSes.array)->vector[i] : __null);
+            if (ns) {
+                nsprefix = ns->getNamePrefix();
+                if (nsprefix && EqualStrings(nsprefix, prefix))
+                    break;
+                ns = __null;
+            }
+        }
+    }
+
+    *vp = (!ns) ? ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0)) : OBJECT_TO_JSVAL(ns);
+    return true;
+}
+
+static JSBool
+xml_namespaceDeclarations(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    if ((((xml)->xml_class) >= JSXML_CLASS_ATTRIBUTE))
+        return true;
+
+    AutoNamespaceArray ancestors(cx);
+    AutoNamespaceArray declared(cx);
+
+    JSXML *yml = xml;
+    while ((yml = yml->parent) != __null) {
+        ((void) 0);
+        for (uint32 i = 0, n = yml->u.elem.namespaces.length; i < n; i++) {
+            JSObject *ns = (((i) < (&yml->u.elem.namespaces)->length) ? (JSObject *) (&yml->u.elem.namespaces)->vector[i] : __null);
+            if (ns && !(XMLArrayFindMember(&ancestors.array, (void *)(ns), namespace_match) != ((uint32) -1))) {
+                if (!XMLArrayAddMember(cx, &ancestors.array, (&ancestors.array)->length, (void *)((ns))))
+                    return false;
+            }
+        }
+    }
+
+    for (uint32 i = 0, n = xml->u.elem.namespaces.length; i < n; i++) {
+        JSObject *ns = (((i) < (&xml->u.elem.namespaces)->length) ? (JSObject *) (&xml->u.elem.namespaces)->vector[i] : __null);
+        if (!ns)
+            continue;
+        if (!IsDeclared(ns))
+            continue;
+        if (!(XMLArrayFindMember(&ancestors.array, (void *)(ns), namespace_match) != ((uint32) -1))) {
+            if (!XMLArrayAddMember(cx, &declared.array, (&declared.array)->length, (void *)((ns))))
+                return false;
+        }
+    }
+
+    return NamespacesToJSArray(cx, &declared.array, vp);
+}
+
+static const char js_attribute_str[] = "attribute";
+static const char js_text_str[] = "text";
+
+
+const char *js_xml_class_str[] = {
+    "list",
+    "element",
+    js_attribute_str,
+    "processing-instruction",
+    js_text_str,
+    "comment"
+};
+
+static JSBool
+xml_nodeKind(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSString *str;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    str = JS_InternString(cx, js_xml_class_str[xml->xml_class]);
+    if (!str)
+        return (JSIntn)0;
+    *vp = STRING_TO_JSVAL(str);
+    return (JSIntn)1;
+}
+
+static void
+NormalizingDelete(JSContext *cx, JSXML *xml, uint32 index)
+{
+    if (xml->xml_class == JSXML_CLASS_LIST)
+        DeleteListElement(cx, xml, index);
+    else
+        DeleteByIndex(cx, xml, index);
+}
+
+
+static JSBool
+xml_normalize_helper(JSContext *cx, JSObject *obj, JSXML *xml)
+{
+    JSXML *kid, *kid2;
+    uint32 i, n;
+    JSObject *kidobj;
+    JSString *str;
+
+    if (!(((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE))
+        return (JSIntn)1;
+
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+
+    for (i = 0, n = xml->u.list.kids.length; i < n; i++) {
+        kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+        if (!kid)
+            continue;
+        if (kid->xml_class == JSXML_CLASS_ELEMENT) {
+            kidobj = js_GetXMLObject(cx, kid);
+            if (!kidobj || !xml_normalize_helper(cx, kidobj, kid))
+                return (JSIntn)0;
+        } else if (kid->xml_class == JSXML_CLASS_TEXT) {
+            while (i + 1 < n &&
+                   (kid2 = (((i + 1) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i + 1] : __null)) &&
+                   kid2->xml_class == JSXML_CLASS_TEXT) {
+                str = js_ConcatStrings(cx, kid->u.value, kid2->u.value);
+                if (!str)
+                    return (JSIntn)0;
+                NormalizingDelete(cx, xml, i + 1);
+                n = xml->u.list.kids.length;
+                kid->u.value = str;
+            }
+            if (kid->u.value->empty()) {
+                NormalizingDelete(cx, xml, i);
+                n = xml->u.list.kids.length;
+                --i;
+            }
+        }
+    }
+
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_normalize(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    *vp = OBJECT_TO_JSVAL(obj);
+    return xml_normalize_helper(cx, obj, xml);
+}
+
+
+static JSBool
+xml_parent(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSXML *parent, *kid;
+    uint32 i, n;
+    JSObject *parentobj;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    parent = xml->parent;
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        *vp = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+        n = xml->u.list.kids.length;
+        if (n == 0)
+            return (JSIntn)1;
+
+        kid = (((0) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[0] : __null);
+        if (!kid)
+            return (JSIntn)1;
+        parent = kid->parent;
+        for (i = 1; i < n; i++) {
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->parent != parent)
+                return (JSIntn)1;
+        }
+    }
+
+    if (!parent) {
+        *vp = ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+        return (JSIntn)1;
+    }
+
+    parentobj = js_GetXMLObject(cx, parent);
+    if (!parentobj)
+        return (JSIntn)0;
+    *vp = OBJECT_TO_JSVAL(parentobj);
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_processingInstructions_helper(JSContext *cx, JSObject *obj, JSXML *xml,
+                                  JSObject *nameqn, jsval *vp)
+{
+    JSXML *list, *vxml;
+    JSBool ok;
+    JSObject *kidobj;
+    jsval v;
+    uint32 i, n;
+
+    list = xml_list_helper(cx, xml, vp);
+    if (!list)
+        return (JSIntn)0;
+
+    list->u.list.targetprop = nameqn;
+    ok = (JSIntn)1;
+
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+
+        JSXMLArrayCursor cursor(&xml->u.list.kids);
+        while (JSXML *kid = (JSXML *) cursor.getNext()) {
+            if (kid->xml_class == JSXML_CLASS_ELEMENT) {
+                ok = js_EnterLocalRootScope(cx);
+                if (!ok)
+                    break;
+                kidobj = js_GetXMLObject(cx, kid);
+                if (kidobj) {
+                    ok = xml_processingInstructions_helper(cx, kidobj, kid,
+                                                           nameqn, &v);
+                } else {
+                    ok = (JSIntn)0;
+                    v = ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+                }
+                js_LeaveLocalRootScopeWithResult(cx, Valueify(v));
+                if (!ok)
+                    break;
+                vxml = (JSXML *) JSVAL_TO_OBJECT(v)->getPrivate();
+                if (((((vxml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (vxml)->u.list.kids.length : 0) != 0) {
+                    ok = Append(cx, list, vxml);
+                    if (!ok)
+                        break;
+                }
+            }
+        }
+    } else {
+
+        for (i = 0, n = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0); i < n; i++) {
+            JSXML *kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_PROCESSING_INSTRUCTION) {
+                JSLinearString *localName = nameqn->getQNameLocalName();
+                if (((localName)->length() == 1 && *(localName)->chars() == '*') ||
+                    EqualStrings(localName, kid->name->getQNameLocalName())) {
+                    ok = Append(cx, list, kid);
+                    if (!ok)
+                        break;
+                }
+            }
+        }
+    }
+
+    return ok;
+}
+
+static JSBool
+xml_processingInstructions(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval name;
+    JSObject *nameqn;
+    jsid funid;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+
+    name = (argc == 0) ? STRING_TO_JSVAL((cx->runtime->atomState.starAtom)) : vp[2];
+    nameqn = ToXMLName(cx, name, &funid);
+    if (!nameqn)
+        return (JSIntn)0;
+    vp[2] = OBJECT_TO_JSVAL(nameqn);
+
+    if (!JSID_IS_VOID(funid))
+        return xml_list_helper(cx, xml, vp) != __null;
+
+    return xml_processingInstructions_helper(cx, obj, xml, nameqn, vp);
+}
+
+static JSBool
+xml_prependChild(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+    *vp = OBJECT_TO_JSVAL(obj);
+    return Insert(cx, xml, 0, argc != 0 ? vp[2] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0)));
+}
+
+
+static JSBool
+xml_propertyIsEnumerable(JSContext *cx, uintN argc, jsval *vp)
+{
+    bool isIndex;
+    uint32 index;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    *vp = ((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)0));
+    if (argc != 0) {
+        if (!js_IdValIsIndex(cx, vp[2], &index, &isIndex))
+            return (JSIntn)0;
+
+        if (isIndex) {
+            if (xml->xml_class == JSXML_CLASS_LIST) {
+
+                *vp = BOOLEAN_TO_JSVAL(index < xml->u.list.kids.length);
+            } else {
+
+                *vp = BOOLEAN_TO_JSVAL(index == 0);
+            }
+        }
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+namespace_full_match(const void *a, const void *b)
+{
+    const JSObject *nsa = (const JSObject *) a;
+    const JSObject *nsb = (const JSObject *) b;
+    JSLinearString *prefixa = nsa->getNamePrefix();
+    JSLinearString *prefixb;
+
+    if (prefixa) {
+        prefixb = nsb->getNamePrefix();
+        if (prefixb && !EqualStrings(prefixa, prefixb))
+            return (JSIntn)0;
+    }
+    return EqualStrings(nsa->getNameURI(), nsb->getNameURI());
+}
+
+static JSBool
+xml_removeNamespace_helper(JSContext *cx, JSXML *xml, JSObject *ns)
+{
+    JSObject *thisns, *attrns;
+    uint32 i, n;
+    JSXML *attr, *kid;
+
+    thisns = GetNamespace(cx, xml->name, &xml->u.elem.namespaces);
+    ((void) 0);
+    if (thisns == ns)
+        return (JSIntn)1;
+
+    for (i = 0, n = xml->u.elem.attrs.length; i < n; i++) {
+        attr = (((i) < (&xml->u.elem.attrs)->length) ? (JSXML *) (&xml->u.elem.attrs)->vector[i] : __null);
+        if (!attr)
+            continue;
+        attrns = GetNamespace(cx, attr->name, &xml->u.elem.namespaces);
+        ((void) 0);
+        if (attrns == ns)
+            return (JSIntn)1;
+    }
+
+    i = XMLArrayFindMember(&xml->u.elem.namespaces, (void *)(ns), namespace_full_match);
+    if (i != ((uint32) -1))
+        XMLArrayDelete(cx, &xml->u.elem.namespaces, i, (JSIntn)1);
+
+    for (i = 0, n = xml->u.list.kids.length; i < n; i++) {
+        kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+        if (kid && kid->xml_class == JSXML_CLASS_ELEMENT) {
+            if (!xml_removeNamespace_helper(cx, kid, ns))
+                return (JSIntn)0;
+        }
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_removeNamespace(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *ns;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    if (xml->xml_class != JSXML_CLASS_ELEMENT)
+        goto done;
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+
+    if (!NamespaceHelper(cx, __null, argc == 0 ? -1 : 1, vp + 2, vp))
+        return (JSIntn)0;
+    ((void) 0);
+    ns = JSVAL_TO_OBJECT(*vp);
+
+
+    if (!xml_removeNamespace_helper(cx, xml, ns))
+        return (JSIntn)0;
+  done:
+    *vp = OBJECT_TO_JSVAL(obj);
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_replace(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval value;
+    JSXML *vxml, *kid;
+    uint32 index, i;
+    JSObject *nameqn;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    if (xml->xml_class != JSXML_CLASS_ELEMENT)
+        goto done;
+
+    if (argc <= 1) {
+        value = STRING_TO_JSVAL((cx->runtime->atomState.typeAtoms[JSTYPE_VOID]));
+    } else {
+        value = vp[3];
+        vxml = (!JSVAL_IS_PRIMITIVE(value) && JSVAL_TO_OBJECT(value)->isXML())
+               ? (JSXML *) JSVAL_TO_OBJECT(value)->getPrivate()
+               : __null;
+        if (!vxml) {
+            if (!JS_ConvertValue(cx, value, JSTYPE_STRING, &vp[3]))
+                return (JSIntn)0;
+            value = vp[3];
+        } else {
+            vxml = DeepCopy(cx, vxml, __null, 0);
+            if (!vxml)
+                return (JSIntn)0;
+            value = vp[3] = OBJECT_TO_JSVAL(vxml->object);
+        }
+    }
+
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+
+    bool haveIndex;
+    if (argc == 0) {
+        haveIndex = false;
+    } else {
+        if (!js_IdValIsIndex(cx, vp[2], &index, &haveIndex))
+            return (JSIntn)0;
+    }
+
+    if (!haveIndex) {
+
+
+
+
+        if (!QNameHelper(cx, __null, argc == 0 ? -1 : 1, vp + 2, vp))
+            return (JSIntn)0;
+        ((void) 0);
+        nameqn = JSVAL_TO_OBJECT(*vp);
+
+        i = xml->u.list.kids.length;
+        index = ((uint32) -1);
+        while (i != 0) {
+            --i;
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && MatchElemName(nameqn, kid)) {
+                if (i != ((uint32) -1))
+                    DeleteByIndex(cx, xml, i);
+                index = i;
+            }
+        }
+
+        if (index == ((uint32) -1))
+            goto done;
+    }
+
+    if (!Replace(cx, xml, index, value))
+        return (JSIntn)0;
+
+  done:
+    *vp = OBJECT_TO_JSVAL(obj);
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_setChildren(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj;
+
+    if (!StartNonListXMLMethod(cx, vp, &obj))
+        return (JSIntn)0;
+
+    *vp = argc != 0 ? vp[2] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+    if (!PutProperty(cx, obj, ATOM_TO_JSID(cx->runtime->atomState.starAtom), false, vp))
+        return (JSIntn)0;
+
+    *vp = OBJECT_TO_JSVAL(obj);
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_setLocalName(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval name;
+    JSObject *nameqn;
+    JSLinearString *namestr;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    if (!((uintN)(((xml)->xml_class) - JSXML_CLASS_ELEMENT) <= (uintN)(JSXML_CLASS_PROCESSING_INSTRUCTION - JSXML_CLASS_ELEMENT)))
+        return (JSIntn)1;
+
+    if (argc == 0) {
+        namestr = (cx->runtime->atomState.typeAtoms[JSTYPE_VOID]);
+    } else {
+        name = vp[2];
+        if (!JSVAL_IS_PRIMITIVE(name) &&
+            JSVAL_TO_OBJECT(name)->getClass() == &js_QNameClass) {
+            nameqn = JSVAL_TO_OBJECT(name);
+            namestr = nameqn->getQNameLocalName();
+        } else {
+            if (!JS_ConvertValue(cx, name, JSTYPE_STRING, &vp[2]))
+                return (JSIntn)0;
+            name = vp[2];
+            namestr = JSVAL_TO_STRING(name)->ensureLinear(cx);
+            if (!namestr)
+                return (JSIntn)0;
+        }
+    }
+
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+    if (namestr)
+        xml->name->setQNameLocalName(namestr);
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_setName(JSContext *cx, uintN argc, jsval *vp)
+{
+    jsval name;
+    JSObject *nameqn;
+    JSXML *nsowner;
+    JSXMLArray *nsarray;
+    uint32 i, n;
+    JSObject *ns;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    if (!((uintN)(((xml)->xml_class) - JSXML_CLASS_ELEMENT) <= (uintN)(JSXML_CLASS_PROCESSING_INSTRUCTION - JSXML_CLASS_ELEMENT)))
+        return (JSIntn)1;
+
+    if (argc == 0) {
+        name = STRING_TO_JSVAL((cx->runtime->atomState.typeAtoms[JSTYPE_VOID]));
+    } else {
+        name = vp[2];
+        if (!JSVAL_IS_PRIMITIVE(name) &&
+            JSVAL_TO_OBJECT(name)->getClass() == &js_QNameClass &&
+            !(nameqn = JSVAL_TO_OBJECT(name))->getNameURI()) {
+            name = vp[2] = nameqn->getQNameLocalNameVal();
+        }
+    }
+
+    nameqn = js_ConstructObject(cx, &js_QNameClass, __null, __null, 1, Valueify(&name));
+    if (!nameqn)
+        return (JSIntn)0;
+
+
+    if (xml->xml_class == JSXML_CLASS_PROCESSING_INSTRUCTION)
+        nameqn->setNameURI(cx->runtime->emptyString);
+
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+    xml->name = nameqn;
+# 6506 "jsxml.cpp"
+    if (xml->xml_class == JSXML_CLASS_ELEMENT) {
+        nsowner = xml;
+    } else {
+        if (!xml->parent || xml->parent->xml_class != JSXML_CLASS_ELEMENT)
+            return (JSIntn)1;
+        nsowner = xml->parent;
+    }
+
+    if (nameqn->getNamePrefix()) {
+# 6525 "jsxml.cpp"
+        ns = GetNamespace(cx, nameqn, &nsowner->u.elem.namespaces);
+        if (!ns)
+            return (JSIntn)0;
+
+
+        if ((XMLArrayFindMember(&nsowner->u.elem.namespaces, (void *)(ns), __null) != ((uint32) -1)))
+            return (JSIntn)1;
+    } else {
+# 6547 "jsxml.cpp"
+        ((void) 0);
+
+        nsarray = &nsowner->u.elem.namespaces;
+        for (i = 0, n = nsarray->length; i < n; i++) {
+            ns = (((i) < (nsarray)->length) ? (JSObject *) (nsarray)->vector[i] : __null);
+            if (ns && EqualStrings(ns->getNameURI(), nameqn->getNameURI())) {
+                nameqn->setNamePrefix(ns->getNamePrefix());
+                return (JSIntn)1;
+            }
+        }
+
+        ns = NewXMLNamespace(cx, __null, nameqn->getNameURI(), (JSIntn)1);
+        if (!ns)
+            return (JSIntn)0;
+    }
+
+    if (!AddInScopeNamespace(cx, nsowner, ns))
+        return (JSIntn)0;
+    vp[0] = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_setNamespace(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *qn;
+    JSObject *ns;
+    jsval qnargv[2];
+    JSXML *nsowner;
+
+    JSObject *obj; JSXML *xml = StartNonListXMLMethod(cx, vp, &obj); if (!xml) return (JSIntn)0; ((void) 0);
+    if (!((uintN)(((xml)->xml_class) - JSXML_CLASS_ELEMENT) <= (uintN)(JSXML_CLASS_PROCESSING_INSTRUCTION - JSXML_CLASS_ELEMENT)))
+        return (JSIntn)1;
+
+    xml = (xml->object == obj ? xml : CopyOnWrite(cx, xml, obj));
+    if (!xml)
+        return (JSIntn)0;
+
+    ns = js_ConstructObject(cx, &js_NamespaceClass, __null, obj,
+                            argc == 0 ? 0 : 1, Valueify(vp + 2));
+    if (!ns)
+        return (JSIntn)0;
+    vp[0] = OBJECT_TO_JSVAL(ns);
+    ns->setNamespaceDeclared(((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)1)));
+
+    qnargv[0] = OBJECT_TO_JSVAL(ns);
+    qnargv[1] = OBJECT_TO_JSVAL(xml->name);
+    qn = js_ConstructObject(cx, &js_QNameClass, __null, __null, 2, Valueify(qnargv));
+    if (!qn)
+        return (JSIntn)0;
+
+    xml->name = qn;
+
+
+
+
+
+    if (xml->xml_class == JSXML_CLASS_ELEMENT) {
+        nsowner = xml;
+    } else {
+        if (!xml->parent || xml->parent->xml_class != JSXML_CLASS_ELEMENT)
+            return (JSIntn)1;
+        nsowner = xml->parent;
+    }
+    if (!AddInScopeNamespace(cx, nsowner, ns))
+        return (JSIntn)0;
+    vp[0] = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_text_helper(JSContext *cx, JSObject *obj, JSXML *xml, jsval *vp)
+{
+    JSXML *list, *kid, *vxml;
+    uint32 i, n;
+    JSBool ok;
+    JSObject *kidobj;
+    jsval v;
+
+    list = xml_list_helper(cx, xml, vp);
+    if (!list)
+        return (JSIntn)0;
+
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        ok = (JSIntn)1;
+        for (i = 0, n = xml->u.list.kids.length; i < n; i++) {
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_ELEMENT) {
+                ok = js_EnterLocalRootScope(cx);
+                if (!ok)
+                    break;
+                kidobj = js_GetXMLObject(cx, kid);
+                if (kidobj) {
+                    ok = xml_text_helper(cx, kidobj, kid, &v);
+                } else {
+                    ok = (JSIntn)0;
+                    v = ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+                }
+                js_LeaveLocalRootScopeWithResult(cx, Valueify(v));
+                if (!ok)
+                    return (JSIntn)0;
+                vxml = (JSXML *) JSVAL_TO_OBJECT(v)->getPrivate();
+                if (((((vxml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (vxml)->u.list.kids.length : 0) != 0 && !Append(cx, list, vxml))
+                    return (JSIntn)0;
+            }
+        }
+    } else {
+        for (i = 0, n = ((((xml)->xml_class) < JSXML_CLASS_ATTRIBUTE) ? (xml)->u.list.kids.length : 0); i < n; i++) {
+            kid = (((i) < (&xml->u.list.kids)->length) ? (JSXML *) (&xml->u.list.kids)->vector[i] : __null);
+            if (kid && kid->xml_class == JSXML_CLASS_TEXT) {
+                if (!Append(cx, list, kid))
+                    return (JSIntn)0;
+            }
+        }
+    }
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_text(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    return xml_text_helper(cx, obj, xml, vp);
+}
+
+
+static JSString *
+xml_toString_helper(JSContext *cx, JSXML *xml)
+{
+    JSString *str, *kidstr;
+
+    if (xml->xml_class == JSXML_CLASS_ATTRIBUTE ||
+        xml->xml_class == JSXML_CLASS_TEXT) {
+        return xml->u.value;
+    }
+
+    if (!HasSimpleContent(xml))
+        return ToXMLString(cx, OBJECT_TO_JSVAL(xml->object), 0);
+
+    str = cx->runtime->emptyString;
+    if (!js_EnterLocalRootScope(cx))
+        return __null;
+    JSXMLArrayCursor cursor(&xml->u.list.kids);
+    while (JSXML *kid = (JSXML *) cursor.getNext()) {
+        if (kid->xml_class != JSXML_CLASS_COMMENT &&
+            kid->xml_class != JSXML_CLASS_PROCESSING_INSTRUCTION) {
+            kidstr = xml_toString_helper(cx, kid);
+            if (!kidstr) {
+                str = __null;
+                break;
+            }
+            str = js_ConcatStrings(cx, str, kidstr);
+            if (!str)
+                break;
+        }
+    }
+    js_LeaveLocalRootScopeWithResult(cx, str);
+    return str;
+}
+
+static JSBool
+xml_toSource(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj = ToObject(cx, Valueify(&vp[1]));
+    if (!obj)
+        return (JSIntn)0;
+    JSString *str = ToXMLString(cx, OBJECT_TO_JSVAL(obj), 0x80000000);
+    if (!str)
+        return (JSIntn)0;
+    *vp = STRING_TO_JSVAL(str);
+    return (JSIntn)1;
+}
+
+static JSBool
+xml_toString(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSString *str;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1])); if (!obj) return (JSIntn)0; JSXML *xml = (JSXML *)GetInstancePrivate(cx, obj, &js_XMLClass, Valueify(vp+2)); if (!xml) return (JSIntn)0;
+    str = xml_toString_helper(cx, xml);
+    if (!str)
+        return (JSIntn)0;
+    *vp = STRING_TO_JSVAL(str);
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_toXMLString(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj = ToObject(cx, Valueify(&vp[1]));
+    if (!obj)
+        return (JSIntn)0;
+    JSString *str = ToXMLString(cx, OBJECT_TO_JSVAL(obj), 0);
+    if (!str)
+        return (JSIntn)0;
+    *vp = STRING_TO_JSVAL(str);
+    return (JSIntn)1;
+}
+
+
+static JSBool
+xml_valueOf(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *obj = ToObject(cx, Valueify(&vp[1]));
+    if (!obj)
+        return false;
+    *vp = OBJECT_TO_JSVAL(obj);
+    return true;
+}
+
+static JSFunctionSpec xml_methods[] = {
+    {"addNamespace", ((JSNative)(xml_addNamespace)), 1, (0) | 0x1000},
+    {"appendChild", ((JSNative)(xml_appendChild)), 1, (0) | 0x1000},
+    {js_attribute_str, ((JSNative)(xml_attribute)), 1, (0) | 0x1000},
+    {"attributes", ((JSNative)(xml_attributes)), 0, (0) | 0x1000},
+    {"child", ((JSNative)(xml_child)), 1, (0) | 0x1000},
+    {"childIndex", ((JSNative)(xml_childIndex)), 0, (0) | 0x1000},
+    {"children", ((JSNative)(xml_children)), 0, (0) | 0x1000},
+    {"comments", ((JSNative)(xml_comments)), 0, (0) | 0x1000},
+    {"contains", ((JSNative)(xml_contains)), 1, (0) | 0x1000},
+    {"copy", ((JSNative)(xml_copy)), 0, (0) | 0x1000},
+    {"descendants", ((JSNative)(xml_descendants)), 1, (0) | 0x1000},
+    {"elements", ((JSNative)(xml_elements)), 1, (0) | 0x1000},
+    {"hasOwnProperty", ((JSNative)(xml_hasOwnProperty)), 1, (0) | 0x1000},
+    {"hasComplexContent", ((JSNative)(xml_hasComplexContent)), 1, (0) | 0x1000},
+    {"hasSimpleContent", ((JSNative)(xml_hasSimpleContent)), 1, (0) | 0x1000},
+    {"inScopeNamespaces", ((JSNative)(xml_inScopeNamespaces)), 0, (0) | 0x1000},
+    {"insertChildAfter", ((JSNative)(xml_insertChildAfter)), 2, (0) | 0x1000},
+    {"insertChildBefore", ((JSNative)(xml_insertChildBefore)), 2, (0) | 0x1000},
+    {js_length_str, ((JSNative)(xml_length)), 0, (0) | 0x1000},
+    {js_localName_str, ((JSNative)(xml_localName)), 0, (0) | 0x1000},
+    {js_name_str, ((JSNative)(xml_name)), 0, (0) | 0x1000},
+    {js_namespace_str, ((JSNative)(xml_namespace)), 1, (0) | 0x1000},
+    {"namespaceDeclarations", ((JSNative)(xml_namespaceDeclarations)), 0, (0) | 0x1000},
+    {"nodeKind", ((JSNative)(xml_nodeKind)), 0, (0) | 0x1000},
+    {"normalize", ((JSNative)(xml_normalize)), 0, (0) | 0x1000},
+    {js_xml_parent_str, ((JSNative)(xml_parent)), 0, (0) | 0x1000},
+    {"processingInstructions", ((JSNative)(xml_processingInstructions)), 1, (0) | 0x1000},
+    {"prependChild", ((JSNative)(xml_prependChild)), 1, (0) | 0x1000},
+    {"propertyIsEnumerable", ((JSNative)(xml_propertyIsEnumerable)), 1, (0) | 0x1000},
+    {"removeNamespace", ((JSNative)(xml_removeNamespace)), 1, (0) | 0x1000},
+    {"replace", ((JSNative)(xml_replace)), 2, (0) | 0x1000},
+    {"setChildren", ((JSNative)(xml_setChildren)), 1, (0) | 0x1000},
+    {"setLocalName", ((JSNative)(xml_setLocalName)), 1, (0) | 0x1000},
+    {"setName", ((JSNative)(xml_setName)), 1, (0) | 0x1000},
+    {"setNamespace", ((JSNative)(xml_setNamespace)), 1, (0) | 0x1000},
+    {js_text_str, ((JSNative)(xml_text)), 0, (0) | 0x1000},
+    {js_toSource_str, ((JSNative)(xml_toSource)), 0, (0) | 0x1000},
+    {js_toString_str, ((JSNative)(xml_toString)), 0, (0) | 0x1000},
+    {js_toXMLString_str, ((JSNative)(xml_toXMLString)), 0, (0) | 0x1000},
+    {js_valueOf_str, ((JSNative)(xml_valueOf)), 0, (0) | 0x1000},
+    {__null, __null, 0, 0}
+};
+
+static JSBool
+CopyXMLSettings(JSContext *cx, JSObject *from, JSObject *to)
+{
+    int i;
+    const char *name;
+    jsval v;
+
+
+    for (i = 0; xml_static_props[i].name; i++) {
+        name = xml_static_props[i].name;
+        if (!JS_GetProperty(cx, from, name, &v))
+            return false;
+        if (name == js_prettyIndent_str) {
+            if (!JSVAL_IS_NUMBER(v))
+                continue;
+        } else {
+            if (!JSVAL_IS_BOOLEAN(v))
+                continue;
+        }
+        if (!JS_SetProperty(cx, to, name, &v))
+            return false;
+    }
+
+    return true;
+}
+
+static JSBool
+SetDefaultXMLSettings(JSContext *cx, JSObject *obj)
+{
+    int i;
+    jsval v;
+
+
+    for (i = 0; xml_static_props[i].name; i++) {
+        v = (xml_static_props[i].name != js_prettyIndent_str)
+            ? ((((uint64)(uint32)(JSVAL_TAG_BOOLEAN)) << 47) | ((JSIntn)1)) : INT_TO_JSVAL(2);
+        if (!JS_SetProperty(cx, obj, xml_static_props[i].name, &v))
+            return (JSIntn)0;
+    }
+    return true;
+}
+
+static JSBool
+xml_settings(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *settings = JS_NewObject(cx, __null, __null, __null);
+    if (!settings)
+        return false;
+    *vp = OBJECT_TO_JSVAL(settings);
+    JSObject *obj = ToObject(cx, Valueify(&vp[1]));
+    if (!obj)
+        return false;
+    return CopyXMLSettings(cx, obj, settings);
+}
+
+static JSBool
+xml_setSettings(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *settings;
+    jsval v;
+    JSBool ok;
+
+    JSObject *obj = ToObject(cx, Valueify(&vp[1]));
+    if (!obj)
+        return (JSIntn)0;
+    v = (argc == 0) ? ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0)) : vp[2];
+    if (JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v)) {
+        ok = SetDefaultXMLSettings(cx, obj);
+    } else {
+        if (JSVAL_IS_PRIMITIVE(v))
+            return (JSIntn)1;
+        settings = JSVAL_TO_OBJECT(v);
+        ok = CopyXMLSettings(cx, settings, obj);
+    }
+    return ok;
+}
+
+static JSBool
+xml_defaultSettings(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *settings;
+
+    settings = JS_NewObject(cx, __null, __null, __null);
+    if (!settings)
+        return (JSIntn)0;
+    *vp = OBJECT_TO_JSVAL(settings);
+    return SetDefaultXMLSettings(cx, settings);
+}
+
+static JSFunctionSpec xml_static_methods[] = {
+    {"settings", ((JSNative)(xml_settings)), 0, (0) | 0x1000},
+    {"setSettings", ((JSNative)(xml_setSettings)), 1, (0) | 0x1000},
+    {"defaultSettings", ((JSNative)(xml_defaultSettings)), 0, (0) | 0x1000},
+    {__null, __null, 0, 0}
+};
+
+static JSBool
+XML(JSContext *cx, uintN argc, Value *vp)
+{
+    JSXML *xml, *copy;
+    JSObject *xobj, *vobj;
+    Class *clasp;
+
+    jsval v = argc ? Jsvalify(vp[2]) : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+
+    if (JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v))
+        v = STRING_TO_JSVAL(cx->runtime->emptyString);
+
+    xobj = ToXML(cx, v);
+    if (!xobj)
+        return (JSIntn)0;
+    xml = (JSXML *) xobj->getPrivate();
+
+    if (IsConstructing(vp) && !JSVAL_IS_PRIMITIVE(v)) {
+        vobj = JSVAL_TO_OBJECT(v);
+        clasp = vobj->getClass();
+        if (clasp == &js_XMLClass ||
+            (clasp->flags & (1<<7))) {
+            copy = DeepCopy(cx, xml, __null, 0);
+            if (!copy)
+                return (JSIntn)0;
+            vp->setObject(*copy->object);
+            return (JSIntn)1;
+        }
+    }
+
+    vp->setObject(*xobj);
+    return (JSIntn)1;
+}
+
+static JSBool
+XMLList(JSContext *cx, uintN argc, jsval *vp)
+{
+    JSObject *vobj, *listobj;
+    JSXML *xml, *list;
+
+    jsval v = argc ? vp[2] : ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+
+    if (JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v))
+        v = STRING_TO_JSVAL(cx->runtime->emptyString);
+
+    if (IsConstructing(Valueify(vp)) && !JSVAL_IS_PRIMITIVE(v)) {
+        vobj = JSVAL_TO_OBJECT(v);
+        if (vobj->isXML()) {
+            xml = (JSXML *) vobj->getPrivate();
+            if (xml->xml_class == JSXML_CLASS_LIST) {
+                listobj = js_NewXMLObject(cx, JSXML_CLASS_LIST);
+                if (!listobj)
+                    return (JSIntn)0;
+                *vp = OBJECT_TO_JSVAL(listobj);
+
+                list = (JSXML *) listobj->getPrivate();
+                if (!Append(cx, list, xml))
+                    return (JSIntn)0;
+                return (JSIntn)1;
+            }
+        }
+    }
+
+
+    listobj = ToXMLList(cx, v);
+    if (!listobj)
+        return (JSIntn)0;
+
+    *vp = OBJECT_TO_JSVAL(listobj);
+    return (JSIntn)1;
+}
+
+
+
+
+
+
+JSXML *
+js_NewXML(JSContext *cx, JSXMLClass xml_class)
+{
+    JSXML *xml = js_NewGCXML(cx);
+    if (!xml)
+        return __null;
+
+    xml->object = __null;
+    xml->domnode = __null;
+    xml->parent = __null;
+    xml->name = __null;
+    xml->xml_class = xml_class;
+    xml->xml_flags = 0;
+    if (((xml_class) >= JSXML_CLASS_ATTRIBUTE)) {
+        xml->u.value = cx->runtime->emptyString;
+    } else {
+        xml->u.list.kids.init();
+        if (xml_class == JSXML_CLASS_LIST) {
+            xml->u.list.target = __null;
+            xml->u.list.targetprop = __null;
+        } else {
+            xml->u.elem.namespaces.init();
+            xml->u.elem.attrs.init();
+        }
+    }
+
+
+
+
+
+    ;
+    return xml;
+}
+
+void
+js_TraceXML(JSTracer *trc, JSXML *xml)
+{
+    if (xml->object)
+        MarkObject(trc, *xml->object, "object");
+    if (xml->name)
+        MarkObject(trc, *xml->name, "name");
+    if (xml->parent)
+        do { do { } while (0); JS_CallTracer((trc), (xml->parent), (2)); } while (0);
+
+    if ((((xml)->xml_class) >= JSXML_CLASS_ATTRIBUTE)) {
+        if (xml->u.value)
+            MarkString(trc, xml->u.value, "value");
+        return;
+    }
+
+    xml_trace_vector(trc,
+                     (JSXML **) xml->u.list.kids.vector,
+                     xml->u.list.kids.length);
+    XMLArrayCursorTrace(trc, xml->u.list.kids.cursors);
+    if (((trc)->callback == __null))
+        xml->u.list.kids.trim();
+
+    if (xml->xml_class == JSXML_CLASS_LIST) {
+        if (xml->u.list.target)
+            do { do { } while (0); JS_CallTracer((trc), (xml->u.list.target), (2)); } while (0);
+        if (xml->u.list.targetprop)
+            MarkObject(trc, *xml->u.list.targetprop, "targetprop");
+    } else {
+        MarkObjectRange(trc, xml->u.elem.namespaces.length,
+                        (JSObject **) xml->u.elem.namespaces.vector,
+                        "xml_namespaces");
+        XMLArrayCursorTrace(trc, xml->u.elem.namespaces.cursors);
+        if (((trc)->callback == __null))
+            xml->u.elem.namespaces.trim();
+
+        xml_trace_vector(trc,
+                         (JSXML **) xml->u.elem.attrs.vector,
+                         xml->u.elem.attrs.length);
+        XMLArrayCursorTrace(trc, xml->u.elem.attrs.cursors);
+        if (((trc)->callback == __null))
+            xml->u.elem.attrs.trim();
+    }
+}
+
+JSObject *
+js_NewXMLObject(JSContext *cx, JSXMLClass xml_class)
+{
+    JSXML *xml = js_NewXML(cx, xml_class);
+    if (!xml)
+        return __null;
+
+    AutoXMLRooter root(cx, xml);
+    return js_GetXMLObject(cx, xml);
+}
+
+static JSObject *
+NewXMLObject(JSContext *cx, JSXML *xml)
+{
+    JSObject *obj;
+
+    obj = NewNonFunction<WithProto::Class>(cx, &js_XMLClass, __null, __null);
+    if (!obj)
+        return __null;
+    obj->setPrivate(xml);
+    ;
+    return obj;
+}
+
+JSObject *
+js_GetXMLObject(JSContext *cx, JSXML *xml)
+{
+    JSObject *obj;
+
+    obj = xml->object;
+    if (obj) {
+        ((void) 0);
+        return obj;
+    }
+
+    obj = NewXMLObject(cx, xml);
+    if (!obj)
+        return __null;
+    xml->object = obj;
+    return obj;
+}
+
+JSObject *
+js_InitNamespaceClass(JSContext *cx, JSObject *obj)
+{
+    return js_InitClass(cx, obj, __null, &js_NamespaceClass, Namespace, 2,
+                        namespace_props, namespace_methods, __null, __null);
+}
+
+JSObject *
+js_InitQNameClass(JSContext *cx, JSObject *obj)
+{
+    return js_InitClass(cx, obj, __null, &js_QNameClass, QName, 2,
+                        qname_props, qname_methods, __null, __null);
+}
+
+JSObject *
+js_InitXMLClass(JSContext *cx, JSObject *obj)
+{
+    JSObject *proto, *pobj;
+    JSFunction *fun;
+    JSXML *xml;
+    JSProperty *prop;
+    Shape *shape;
+    jsval cval, vp[3];
+
+
+    if (!JS_DefineFunction(cx, obj, js_isXMLName_str, xml_isXMLName, 1, 0))
+        return __null;
+
+
+    proto = js_InitClass(cx, obj, __null, &js_XMLClass, XML, 1,
+                         __null, xml_methods,
+                         xml_static_props, xml_static_methods);
+    if (!proto)
+        return __null;
+
+    xml = js_NewXML(cx, JSXML_CLASS_TEXT);
+    if (!xml)
+        return __null;
+    proto->setPrivate(xml);
+    xml->object = proto;
+    ;
+
+
+
+
+
+
+
+    if (!js_LookupProperty(cx, proto,
+                           ATOM_TO_JSID(cx->runtime->atomState.constructorAtom),
+                           &pobj, &prop)) {
+        return __null;
+    }
+    ((void) 0);
+    shape = (Shape *) prop;
+    cval = Jsvalify(pobj->nativeGetSlot(shape->slot));
+    ((void) 0);
+
+
+    vp[0] = ((((uint64)(uint32)(JSVAL_TAG_NULL)) << 47) | (0));
+    vp[1] = cval;
+    vp[2] = ((((uint64)(uint32)(JSVAL_TAG_UNDEFINED)) << 47) | (0));
+    if (!xml_setSettings(cx, 1, vp))
+        return __null;
+
+
+    fun = JS_DefineFunction(cx, obj, js_XMLList_str, XMLList, 1, 0x0200);
+    if (!fun)
+        return __null;
+    if (!js_SetClassPrototype(cx, (static_cast<JSObject *>(fun)), proto,
+                              0x02 | 0x04)) {
+        return __null;
+    }
+    return proto;
+}
+
+JSObject *
+js_InitXMLClasses(JSContext *cx, JSObject *obj)
+{
+    if (!js_InitNamespaceClass(cx, obj))
+        return __null;
+    if (!js_InitQNameClass(cx, obj))
+        return __null;
+    return js_InitXMLClass(cx, obj);
+}
+
+JSBool
+js_GetFunctionNamespace(JSContext *cx, Value *vp)
+{
+    JSObject *global = cx->hasfp() ? cx->fp()->scopeChain().getGlobal() : cx->globalObject;
+
+    *vp = global->getReservedSlot(((((JSProto_LIMIT * 3) + 1) + 1) + 1));
+    if (vp->isUndefined()) {
+        JSRuntime *rt = cx->runtime;
+        JSLinearString *prefix = rt->atomState.typeAtoms[JSTYPE_FUNCTION];
+        JSLinearString *uri = rt->atomState.functionNamespaceURIAtom;
+        JSObject *obj = NewXMLNamespace(cx, prefix, uri, (JSIntn)0);
+        if (!obj)
+            return false;
+# 7204 "jsxml.cpp"
+        obj->clearProto();
+
+        vp->setObject(*obj);
+        if (!js_SetReservedSlot(cx, global, ((((JSProto_LIMIT * 3) + 1) + 1) + 1), *vp))
+            return false;
+    }
+
+    return true;
+}
+# 7229 "jsxml.cpp"
+JSBool
+js_GetDefaultXMLNamespace(JSContext *cx, jsval *vp)
+{
+    JSObject *ns, *obj, *tmp;
+    jsval v;
+
+    JSObject *scopeChain = GetScopeChain(cx);
+
+    obj = __null;
+    for (tmp = scopeChain; tmp; tmp = tmp->getParent()) {
+        Class *clasp = tmp->getClass();
+        if (clasp == &js_BlockClass || clasp == &js_WithClass)
+            continue;
+        if (!tmp->getProperty(cx, ((jsid)0x6), Valueify(&v)))
+            return (JSIntn)0;
+        if (!JSVAL_IS_PRIMITIVE(v)) {
+            *vp = v;
+            return (JSIntn)1;
+        }
+        obj = tmp;
+    }
+
+    ns = js_ConstructObject(cx, &js_NamespaceClass, __null, obj, 0, __null);
+    if (!ns)
+        return (JSIntn)0;
+    v = OBJECT_TO_JSVAL(ns);
+    if (!obj->defineProperty(cx, ((jsid)0x6), Valueify(v),
+                             PropertyStub, StrictPropertyStub, 0x04)) {
+        return (JSIntn)0;
+    }
+    *vp = v;
+    return (JSIntn)1;
+}
+
+JSBool
+js_SetDefaultXMLNamespace(JSContext *cx, const Value &v)
+{
+    Value argv[2];
+    argv[0].setString(cx->runtime->emptyString);
+    argv[1] = v;
+    JSObject *ns = js_ConstructObject(cx, &js_NamespaceClass, __null, __null, 2, argv);
+    if (!ns)
+        return (JSIntn)0;
+
+    JSStackFrame *fp = js_GetTopStackFrame(cx);
+    JSObject &varobj = fp->varobj(cx);
+    if (!varobj.defineProperty(cx, ((jsid)0x6), ObjectValue(*ns),
+                               PropertyStub, StrictPropertyStub, 0x04)) {
+        return (JSIntn)0;
+    }
+    return (JSIntn)1;
+}
+
+JSBool
+js_ToAttributeName(JSContext *cx, Value *vp)
+{
+    JSObject *qn;
+
+    qn = ToAttributeName(cx, Jsvalify(*vp));
+    if (!qn)
+        return (JSIntn)0;
+    vp->setObject(*qn);
+    return (JSIntn)1;
+}
+
+JSFlatString *
+js_EscapeAttributeValue(JSContext *cx, JSString *str, JSBool quote)
+{
+    StringBuffer sb(cx);
+    return EscapeAttributeValue(cx, sb, str, quote);
+}
+
+JSString *
+js_AddAttributePart(JSContext *cx, JSBool isName, JSString *str, JSString *str2)
+{
+    size_t len = str->length();
+    const jschar *chars = str->getChars(cx);
+    if (!chars)
+        return __null;
+
+    size_t len2 = str2->length();
+    const jschar *chars2 = str2->getChars(cx);
+    if (!chars2)
+        return __null;
+
+    size_t newlen = (isName) ? len + 1 + len2 : len + 2 + len2 + 1;
+    jschar *newchars = (jschar *) cx->malloc((newlen+1) * sizeof(jschar));
+    if (!newchars)
+        return __null;
+
+    memcpy((newchars), (chars), (len) * sizeof(jschar));
+    newchars += len;
+    if (isName) {
+        *newchars++ = ' ';
+        memcpy((newchars), (chars2), (len2) * sizeof(jschar));
+        newchars += len2;
+    } else {
+        *newchars++ = '=';
+        *newchars++ = '"';
+        memcpy((newchars), (chars2), (len2) * sizeof(jschar));
+        newchars += len2;
+        *newchars++ = '"';
+    }
+    *newchars = 0;
+    return js_NewString(cx, newchars - newlen, newlen);
+}
+
+JSFlatString *
+js_EscapeElementValue(JSContext *cx, JSString *str)
+{
+    StringBuffer sb(cx);
+    return EscapeElementValue(cx, sb, str, 0);
+}
+
+JSString *
+js_ValueToXMLString(JSContext *cx, const Value &v)
+{
+    return ToXMLString(cx, Jsvalify(v), 0);
+}
+
+JSBool
+js_GetAnyName(JSContext *cx, jsid *idp)
+{
+    JSObject *global = cx->hasfp() ? cx->fp()->scopeChain().getGlobal() : cx->globalObject;
+    Value v = global->getReservedSlot(JSProto_AnyName);
+    if (v.isUndefined()) {
+        JSObject *obj = NewNonFunction<WithProto::Given>(cx, &js_AnyNameClass, __null, global);
+        if (!obj)
+            return false;
+
+        ((void) 0);
+
+        JSRuntime *rt = cx->runtime;
+        InitXMLQName(obj, rt->emptyString, rt->emptyString,
+                     (rt->atomState.starAtom));
+        ;
+
+        v.setObject(*obj);
+        if (!js_SetReservedSlot(cx, global, JSProto_AnyName, v))
+            return false;
+    }
+    *idp = OBJECT_TO_JSID(&v.toObject());
+    return true;
+}
+
+JSBool
+js_FindXMLProperty(JSContext *cx, const Value &nameval, JSObject **objp, jsid *idp)
+{
+    JSObject *nameobj;
+    jsval v;
+    JSObject *qn;
+    jsid funid;
+    JSObject *obj, *target, *proto, *pobj;
+    JSXML *xml;
+    JSBool found;
+    JSProperty *prop;
+
+    ((void) 0);
+    nameobj = &nameval.toObject();
+    if (nameobj->getClass() == &js_AnyNameClass) {
+        v = STRING_TO_JSVAL((cx->runtime->atomState.starAtom));
+        nameobj = js_ConstructObject(cx, &js_QNameClass, __null, __null, 1,
+                                     Valueify(&v));
+        if (!nameobj)
+            return (JSIntn)0;
+    } else {
+        ((void) 0)
+                                                        ;
+    }
+
+    qn = nameobj;
+    if (!IsFunctionQName(cx, qn, &funid))
+        return (JSIntn)0;
+
+    obj = &js_GetTopStackFrame(cx)->scopeChain();
+    do {
+
+        target = obj;
+        while (target->getClass() == &js_WithClass) {
+             proto = target->getProto();
+             if (!proto)
+                 break;
+             target = proto;
+        }
+
+        if (target->isXML()) {
+            if (JSID_IS_VOID(funid)) {
+                xml = (JSXML *) target->getPrivate();
+                found = HasNamedProperty(xml, qn);
+            } else {
+                if (!HasFunctionProperty(cx, target, funid, &found))
+                    return (JSIntn)0;
+            }
+            if (found) {
+                *idp = OBJECT_TO_JSID(nameobj);
+                *objp = target;
+                return (JSIntn)1;
+            }
+        } else if (!JSID_IS_VOID(funid)) {
+            if (!target->lookupProperty(cx, funid, &pobj, &prop))
+                return (JSIntn)0;
+            if (prop) {
+                *idp = funid;
+                *objp = target;
+                return (JSIntn)1;
+            }
+        }
+    } while ((obj = obj->getParent()) != __null);
+
+    JSAutoByteString printable;
+    JSString *str = ConvertQNameToString(cx, nameobj);
+    if (str && js_ValueToPrintable(cx, StringValue(str), &printable)) {
+        JS_ReportErrorFlagsAndNumber(cx, 0x0, js_GetErrorMessage, __null,
+                                     JSMSG_UNDEFINED_XML_NAME, printable.ptr());
+    }
+    return (JSIntn)0;
+}
+
+static JSBool
+GetXMLFunction(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
+{
+    ((void) 0);
+
+
+
+
+
+    JSObject *target = obj;
+    AutoObjectRooter tvr(cx);
+    for (;;) {
+        if (!js_GetProperty(cx, target, id, Valueify(vp)))
+            return false;
+        if ((!JSVAL_IS_PRIMITIVE(*vp) && JSVAL_TO_OBJECT(*vp)->isFunction()))
+            return true;
+        target = target->getProto();
+        if (target == __null || !target->isNative())
+            break;
+        tvr.setObject(target);
+    }
+
+    JSXML *xml = (JSXML *) obj->getPrivate();
+    if (!HasSimpleContent(xml))
+        return true;
+
+
+    if (!js_GetClassPrototype(cx, __null, JSProto_String, tvr.addr()))
+        return false;
+
+    ((void) 0);
+    return tvr.object()->getProperty(cx, id, Valueify(vp));
+}
+
+static JSXML *
+GetPrivate(JSContext *cx, JSObject *obj, const char *method)
+{
+    JSXML *xml;
+
+    xml = (JSXML *) GetInstancePrivate(cx, obj, &js_XMLClass, __null);
+    if (!xml) {
+        JS_ReportErrorNumber(cx, js_GetErrorMessage, __null,
+                             JSMSG_INCOMPATIBLE_METHOD,
+                             js_XML_str, method, obj->getClass()->name);
+    }
+    return xml;
+}
+
+JSBool
+js_GetXMLDescendants(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+{
+    JSXML *xml, *list;
+
+    xml = GetPrivate(cx, obj, "descendants internal method");
+    if (!xml)
+        return (JSIntn)0;
+
+    list = Descendants(cx, xml, id);
+    if (!list)
+        return (JSIntn)0;
+    *vp = OBJECT_TO_JSVAL(list->object);
+    return (JSIntn)1;
+}
+
+JSBool
+js_DeleteXMLListElements(JSContext *cx, JSObject *listobj)
+{
+    JSXML *list;
+    uint32 n;
+
+    list = (JSXML *) listobj->getPrivate();
+    for (n = list->u.list.kids.length; n != 0; --n)
+        DeleteListElement(cx, list, 0);
+
+    return (JSIntn)1;
+}
+
+struct JSXMLFilter
+{
+    JSXML *list;
+    JSXML *result;
+    JSXML *kid;
+    JSXMLArrayCursor cursor;
+
+    JSXMLFilter(JSXML *list, JSXMLArray *array)
+      : list(list), result(__null), kid(__null), cursor(array) {}
+
+    ~JSXMLFilter() {}
+};
+
+static void
+xmlfilter_trace(JSTracer *trc, JSObject *obj)
+{
+    JSXMLFilter *filter = (JSXMLFilter *) obj->getPrivate();
+    if (!filter)
+        return;
+
+    ((void) 0);
+    do { do { } while (0); JS_CallTracer((trc), (filter->list), (2)); } while (0);
+    if (filter->result)
+        do { do { } while (0); JS_CallTracer((trc), (filter->result), (2)); } while (0);
+    if (filter->kid)
+        do { do { } while (0); JS_CallTracer((trc), (filter->kid), (2)); } while (0);
+
+
+
+
+
+}
+
+static void
+xmlfilter_finalize(JSContext *cx, JSObject *obj)
+{
+    JSXMLFilter *filter = (JSXMLFilter *) obj->getPrivate();
+    if (!filter)
+        return;
+
+    cx->destroy(filter);
+}
+
+Class js_XMLFilterClass = {
+    "XMLFilter",
+    (1<<0) | (1<<((8 + 8)+1)) | (1<<((8 + 8)+3)),
+    PropertyStub,
+    PropertyStub,
+    PropertyStub,
+    StrictPropertyStub,
+    EnumerateStub,
+    ResolveStub,
+    ConvertStub,
+    xmlfilter_finalize,
+    __null,
+    __null,
+    __null,
+    __null,
+    __null,
+    __null,
+    ((JSMarkOp)(xmlfilter_trace))
+};
+
+JSBool
+js_StepXMLListFilter(JSContext *cx, JSBool initialized)
+{
+    jsval *sp;
+    JSObject *obj, *filterobj, *resobj, *kidobj;
+    JSXML *xml, *list;
+    JSXMLFilter *filter;
+
+    LeaveTrace(cx);
+    sp = Jsvalify(cx->regs->sp);
+    if (!initialized) {
+
+
+
+
+        if (!(!JSVAL_IS_PRIMITIVE(sp[-2]) && JSVAL_TO_OBJECT(sp[-2])->isXML())) {
+            ((void)js_ReportValueErrorFlags(cx, 0x0, JSMSG_NON_XML_FILTER, -2, Valueify(sp[-2]), __null, __null, __null));
+            return (JSIntn)0;
+        }
+        obj = JSVAL_TO_OBJECT(sp[-2]);
+        xml = (JSXML *) obj->getPrivate();
+
+        if (xml->xml_class == JSXML_CLASS_LIST) {
+            list = xml;
+        } else {
+            obj = js_NewXMLObject(cx, JSXML_CLASS_LIST);
+            if (!obj)
+                return (JSIntn)0;
+
+
+
+
+
+            sp[-1] = OBJECT_TO_JSVAL(obj);
+            list = (JSXML *) obj->getPrivate();
+            if (!Append(cx, list, xml))
+                return (JSIntn)0;
+        }
+
+        filterobj = NewNonFunction<WithProto::Given>(cx, &js_XMLFilterClass, __null, __null);
+        if (!filterobj)
+            return (JSIntn)0;
+
+
+
+
+
+        filter = cx->create<JSXMLFilter>(list, &list->u.list.kids);
+        if (!filter)
+            return (JSIntn)0;
+        filterobj->setPrivate(filter);
+
+
+        sp[-2] = OBJECT_TO_JSVAL(filterobj);
+
+        resobj = js_NewXMLObject(cx, JSXML_CLASS_LIST);
+        if (!resobj)
+            return (JSIntn)0;
+
+
+        filter->result = (JSXML *) resobj->getPrivate();
+    } else {
+
+        ((void) 0);
+        ((void) 0);
+        filter = (JSXMLFilter *) JSVAL_TO_OBJECT(sp[-2])->getPrivate();
+        ((void) 0);
+
+
+        if (js_ValueToBoolean(Valueify(sp[-1])) &&
+            !Append(cx, filter->result, filter->kid)) {
+            return (JSIntn)0;
+        }
+    }
+
+
+    filter->kid = (JSXML *) filter->cursor.getNext();
+    if (!filter->kid) {
+
+
+
+
+        filter->cursor.disconnect();
+        ((void) 0);
+        sp[-2] = OBJECT_TO_JSVAL(filter->result->object);
+        kidobj = __null;
+    } else {
+        kidobj = js_GetXMLObject(cx, filter->kid);
+        if (!kidobj)
+            return (JSIntn)0;
+    }
+
+
+    sp[-1] = OBJECT_TO_JSVAL(kidobj);
+    return (JSIntn)1;
+}
+
+JSObject *
+js_ValueToXMLObject(JSContext *cx, const Value &v)
+{
+    return ToXML(cx, Jsvalify(v));
+}
+
+JSObject *
+js_ValueToXMLListObject(JSContext *cx, const Value &v)
+{
+    return ToXMLList(cx, Jsvalify(v));
+}
+
+JSObject *
+js_NewXMLSpecialObject(JSContext *cx, JSXMLClass xml_class, JSString *name,
+                       JSString *value)
+{
+    uintN flags;
+    JSObject *obj;
+    JSXML *xml;
+    JSObject *qn;
+
+    if (!GetXMLSettingFlags(cx, &flags))
+        return __null;
+
+    if ((xml_class == JSXML_CLASS_COMMENT &&
+         (flags & ((JSUint32)1 << (0)))) ||
+        (xml_class == JSXML_CLASS_PROCESSING_INSTRUCTION &&
+         (flags & ((JSUint32)1 << (1))))) {
+        return js_NewXMLObject(cx, JSXML_CLASS_TEXT);
+    }
+
+    obj = js_NewXMLObject(cx, xml_class);
+    if (!obj)
+        return __null;
+    xml = (JSXML *) obj->getPrivate();
+    if (name) {
+        JSLinearString *linearName = name->ensureLinear(cx);
+        if (!linearName)
+            return __null;
+        qn = NewXMLQName(cx, cx->runtime->emptyString, __null, linearName);
+        if (!qn)
+            return __null;
+        xml->name = qn;
+    }
+    xml->u.value = value;
+    return obj;
+}
+
+JSString *
+js_MakeXMLCDATAString(JSContext *cx, JSString *str)
+{
+    StringBuffer sb(cx);
+    return MakeXMLCDATAString(cx, sb, str);
+}
+
+JSString *
+js_MakeXMLCommentString(JSContext *cx, JSString *str)
+{
+    StringBuffer sb(cx);
+    return MakeXMLCommentString(cx, sb, str);
+}
+
+JSString *
+js_MakeXMLPIString(JSContext *cx, JSString *name, JSString *str)
+{
+    StringBuffer sb(cx);
+    return MakeXMLPIString(cx, sb, name, str);
+}