/[jscoverage]/trunk/js/jsoplengen.cpp
ViewVC logotype

Annotation of /trunk/js/jsoplengen.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 507 - (hide annotations)
Sun Jan 10 07:23:34 2010 UTC (10 years, 1 month ago) by siliconforks
File size: 4058 byte(s)
Update SpiderMonkey from Firefox 3.6rc1.

1 siliconforks 507 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 siliconforks 332 * vim: set sw=4 ts=8 et tw=80:
3     *
4     * ***** BEGIN LICENSE BLOCK *****
5     * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6     *
7     * The contents of this file are subject to the Mozilla Public License Version
8     * 1.1 (the "License"); you may not use this file except in compliance with
9     * the License. You may obtain a copy of the License at
10     * http://www.mozilla.org/MPL/
11     *
12     * Software distributed under the License is distributed on an "AS IS" basis,
13     * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14     * for the specific language governing rights and limitations under the
15     * License.
16     *
17     * The Original Code is String Switch Generator for JavaScript Keywords,
18     * released 2005-12-09.
19     *
20     * The Initial Developer of the Original Code is
21     * Igor Bukanov.
22     * Portions created by the Initial Developer are Copyright (C) 2005-2006
23     * the Initial Developer. All Rights Reserved.
24     *
25     * Contributor(s):
26     *
27     * Alternatively, the contents of this file may be used under the terms of
28     * either of the GNU General Public License Version 2 or later (the "GPL"),
29     * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30     * in which case the provisions of the GPL or the LGPL are applicable instead
31     * of those above. If you wish to allow use of your version of this file only
32     * under the terms of either the GPL or the LGPL, and not to allow others to
33     * use your version of this file under the terms of the MPL, indicate your
34     * decision by deleting the provisions above and replace them with the notice
35     * and other provisions required by the GPL or the LGPL. If you do not delete
36     * the provisions above, a recipient may use your version of this file under
37     * the terms of any one of the MPL, the GPL or the LGPL.
38     *
39     * ***** END LICENSE BLOCK ***** */
40    
41     #include <stdio.h>
42     #include <stdlib.h>
43     #include <string.h>
44    
45     static const struct {
46     const char *name;
47     int length;
48     } pairs[] = {
49     #define OPDEF(op,val,name,token,length,nuses,ndefs,prec,format) \
50     { #op, length } ,
51     #include "jsopcode.tbl"
52     #undef OPDEF
53     };
54    
55     int
56     main(int argc, char **argv)
57     {
58     FILE *fp;
59     size_t maxNameWidth, i, nameWidth, tabStop;
60     int lengthGap;
61    
62     static const char prefix[] = "#define ";
63     static const char suffix[] = "_LENGTH";
64     static const size_t tabWidth = 8;
65     static const size_t prefixWidth = sizeof(prefix) - 1;
66     static const size_t suffixWidth = sizeof(suffix) - 1;
67    
68     if (argc != 2) {
69     fputs("Bad usage\n", stderr);
70     return EXIT_FAILURE;
71     }
72    
73     fp = fopen(argv[1], "w");
74     if (!fp) {
75     perror("fopen");
76     return EXIT_FAILURE;
77     }
78     fputs("/*\n"
79     " * Automatically generated header with JS opcode length constants.\n"
80     " *\n"
81     " * Do not edit it, alter jsopcode.tbl instead.\n"
82     " */\n",
83     fp);
84    
85     /*
86     * Print
87     *
88     * #define name_LENGTH length
89     *
90     * with all length values aligned on the same column. The column is at the
91     * second character position after a tab-stop with the first position
92     * reserved for the minus sign of variable-length opcodes.
93     */
94     maxNameWidth = 0;
95     for (i = 0; i != sizeof pairs / sizeof pairs[0]; ++i) {
96     nameWidth = strlen(pairs[i].name);
97     if (maxNameWidth < nameWidth)
98     maxNameWidth = nameWidth;
99     }
100    
101     tabStop = prefixWidth + maxNameWidth + suffixWidth + 1;
102     tabStop = (tabStop + tabWidth - 1) / tabWidth * tabWidth;
103     for (i = 0; i != sizeof pairs / sizeof pairs[0]; ++i) {
104     lengthGap = (int) (tabStop - prefixWidth - strlen(pairs[i].name) -
105     suffixWidth);
106     fprintf(fp, "%s%s%s%*c%2d\n",
107     prefix, pairs[i].name, suffix, lengthGap, ' ',
108     pairs[i].length);
109     if (ferror(fp)) {
110     perror("fclose");
111     exit(EXIT_FAILURE);
112     }
113     }
114    
115     if (fclose(fp)) {
116     perror("fclose");
117     return EXIT_FAILURE;
118     }
119    
120     return EXIT_SUCCESS;
121     }

  ViewVC Help
Powered by ViewVC 1.1.24