/[jscoverage]/trunk/js/jsutil.h
ViewVC logotype

Annotation of /trunk/js/jsutil.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 460 - (hide annotations)
Sat Sep 26 23:15:22 2009 UTC (9 years, 10 months ago) by siliconforks
File MIME type: text/plain
File size: 5337 byte(s)
Upgrade to SpiderMonkey from Firefox 3.5.3.

1 siliconforks 332 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2     *
3     * ***** BEGIN LICENSE BLOCK *****
4     * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5     *
6     * The contents of this file are subject to the Mozilla Public License Version
7     * 1.1 (the "License"); you may not use this file except in compliance with
8     * the License. You may obtain a copy of the License at
9     * http://www.mozilla.org/MPL/
10     *
11     * Software distributed under the License is distributed on an "AS IS" basis,
12     * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13     * for the specific language governing rights and limitations under the
14     * License.
15     *
16     * The Original Code is Mozilla Communicator client code, released
17     * March 31, 1998.
18     *
19     * The Initial Developer of the Original Code is
20     * Netscape Communications Corporation.
21     * Portions created by the Initial Developer are Copyright (C) 1998
22     * the Initial Developer. All Rights Reserved.
23     *
24     * Contributor(s):
25     *
26     * Alternatively, the contents of this file may be used under the terms of
27     * either of the GNU General Public License Version 2 or later (the "GPL"),
28     * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29     * in which case the provisions of the GPL or the LGPL are applicable instead
30     * of those above. If you wish to allow use of your version of this file only
31     * under the terms of either the GPL or the LGPL, and not to allow others to
32     * use your version of this file under the terms of the MPL, indicate your
33     * decision by deleting the provisions above and replace them with the notice
34     * and other provisions required by the GPL or the LGPL. If you do not delete
35     * the provisions above, a recipient may use your version of this file under
36     * the terms of any one of the MPL, the GPL or the LGPL.
37     *
38     * ***** END LICENSE BLOCK ***** */
39    
40     /*
41     * PR assertion checker.
42     */
43    
44     #ifndef jsutil_h___
45     #define jsutil_h___
46    
47     JS_BEGIN_EXTERN_C
48    
49 siliconforks 460 /*
50     * JS_Assert is present even in release builds, for the benefit of applications
51     * that build DEBUG and link against a non-DEBUG SpiderMonkey library.
52     */
53 siliconforks 332 extern JS_PUBLIC_API(void)
54     JS_Assert(const char *s, const char *file, JSIntn ln);
55    
56 siliconforks 460 #ifdef DEBUG
57    
58 siliconforks 332 #define JS_ASSERT(expr) \
59     ((expr) ? (void)0 : JS_Assert(#expr, __FILE__, __LINE__))
60    
61     #define JS_ASSERT_IF(cond, expr) \
62     ((!(cond) || (expr)) ? (void)0 : JS_Assert(#expr, __FILE__, __LINE__))
63    
64     #define JS_NOT_REACHED(reason) \
65     JS_Assert(reason, __FILE__, __LINE__)
66    
67     #else
68    
69     #define JS_ASSERT(expr) ((void) 0)
70     #define JS_ASSERT_IF(cond,expr) ((void) 0)
71     #define JS_NOT_REACHED(reason)
72    
73     #endif /* defined(DEBUG) */
74    
75     /*
76     * Compile-time assert. "condition" must be a constant expression.
77     * The macro can be used only in places where an "extern" declaration is
78     * allowed.
79     */
80    
81     /*
82     * Sun Studio C++ compiler has a bug
83     * "sizeof expression not accepted as size of array parameter"
84     * The bug number is 6688515. It is not public yet.
85     * Turn off this assert for Sun Studio until this bug is fixed.
86     */
87     #ifdef __SUNPRO_CC
88     #define JS_STATIC_ASSERT(condition)
89     #else
90     #define JS_STATIC_ASSERT(condition) \
91     extern void js_static_assert(int arg[(condition) ? 1 : -1])
92     #endif
93    
94 siliconforks 460 #define JS_STATIC_ASSERT_IF(cond, expr) JS_STATIC_ASSERT(!(cond) || (expr))
95    
96 siliconforks 332 /*
97     * Abort the process in a non-graceful manner. This will cause a core file,
98     * call to the debugger or other moral equivalent as well as causing the
99     * entire process to stop.
100     */
101     extern JS_PUBLIC_API(void) JS_Abort(void);
102    
103     #if 0
104     # define JS_BASIC_STATS 1
105     # define JS_SCOPE_DEPTH_METER 1
106     #endif
107    
108     #if defined DEBUG && !defined JS_BASIC_STATS
109     # define JS_BASIC_STATS 1
110     #endif
111    
112     #ifdef JS_BASIC_STATS
113    
114     #include <stdio.h>
115    
116     typedef struct JSBasicStats {
117     uint32 num;
118     uint32 max;
119     double sum;
120     double sqsum;
121     uint32 logscale; /* logarithmic scale: 0 (linear), 2, 10 */
122     uint32 hist[11];
123     } JSBasicStats;
124    
125     #define JS_INIT_STATIC_BASIC_STATS {0,0,0,0,0,{0,0,0,0,0,0,0,0,0,0,0}}
126     #define JS_BASIC_STATS_INIT(bs) memset((bs), 0, sizeof(JSBasicStats))
127    
128     #define JS_BASIC_STATS_ACCUM(bs,val) \
129     JS_BasicStatsAccum(bs, val)
130    
131     #define JS_MeanAndStdDevBS(bs,sigma) \
132     JS_MeanAndStdDev((bs)->num, (bs)->sum, (bs)->sqsum, sigma)
133    
134     extern void
135     JS_BasicStatsAccum(JSBasicStats *bs, uint32 val);
136    
137     extern double
138     JS_MeanAndStdDev(uint32 num, double sum, double sqsum, double *sigma);
139    
140     extern void
141     JS_DumpBasicStats(JSBasicStats *bs, const char *title, FILE *fp);
142    
143     extern void
144     JS_DumpHistogram(JSBasicStats *bs, FILE *fp);
145    
146     #else
147    
148     #define JS_BASIC_STATS_ACCUM(bs,val) /* nothing */
149    
150     #endif /* JS_BASIC_STATS */
151    
152    
153 siliconforks 460 #if defined(DEBUG_notme) && defined(XP_UNIX)
154 siliconforks 332
155     typedef struct JSCallsite JSCallsite;
156    
157     struct JSCallsite {
158     uint32 pc;
159     char *name;
160     const char *library;
161     int offset;
162     JSCallsite *parent;
163     JSCallsite *siblings;
164     JSCallsite *kids;
165     void *handy;
166     };
167    
168 siliconforks 460 extern JS_FRIEND_API(JSCallsite *)
169     JS_Backtrace(int skip);
170 siliconforks 332
171 siliconforks 460 extern JS_FRIEND_API(void)
172     JS_DumpBacktrace(JSCallsite *trace);
173    
174 siliconforks 332 #endif
175    
176     JS_END_EXTERN_C
177    
178     #endif /* jsutil_h___ */

  ViewVC Help
Powered by ViewVC 1.1.24