PageRenderTime 34ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/js/lib/Socket.IO-node/support/expresso/deps/jscoverage/js/jsoplengen.cpp

http://github.com/onedayitwillmake/RealtimeMultiplayerNodeJs
C++ | 121 lines | 63 code | 10 blank | 48 comment | 10 complexity | 32c1efed3b1aed9467b1dd340d16ca9e MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, BSD-3-Clause
  1. /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2. * 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. #include <stdio.h>
  41. #include <stdlib.h>
  42. #include <string.h>
  43. static const struct {
  44. const char *name;
  45. int length;
  46. } pairs[] = {
  47. #define OPDEF(op,val,name,token,length,nuses,ndefs,prec,format) \
  48. { #op, length } ,
  49. #include "jsopcode.tbl"
  50. #undef OPDEF
  51. };
  52. int
  53. main(int argc, char **argv)
  54. {
  55. FILE *fp;
  56. size_t maxNameWidth, i, nameWidth, tabStop;
  57. int lengthGap;
  58. static const char prefix[] = "#define ";
  59. static const char suffix[] = "_LENGTH";
  60. static const size_t tabWidth = 8;
  61. static const size_t prefixWidth = sizeof(prefix) - 1;
  62. static const size_t suffixWidth = sizeof(suffix) - 1;
  63. if (argc != 2) {
  64. fputs("Bad usage\n", stderr);
  65. return EXIT_FAILURE;
  66. }
  67. fp = fopen(argv[1], "w");
  68. if (!fp) {
  69. perror("fopen");
  70. return EXIT_FAILURE;
  71. }
  72. fputs("/*\n"
  73. " * Automatically generated header with JS opcode length constants.\n"
  74. " *\n"
  75. " * Do not edit it, alter jsopcode.tbl instead.\n"
  76. " */\n",
  77. fp);
  78. /*
  79. * Print
  80. *
  81. * #define name_LENGTH length
  82. *
  83. * with all length values aligned on the same column. The column is at the
  84. * second character position after a tab-stop with the first position
  85. * reserved for the minus sign of variable-length opcodes.
  86. */
  87. maxNameWidth = 0;
  88. for (i = 0; i != sizeof pairs / sizeof pairs[0]; ++i) {
  89. nameWidth = strlen(pairs[i].name);
  90. if (maxNameWidth < nameWidth)
  91. maxNameWidth = nameWidth;
  92. }
  93. tabStop = prefixWidth + maxNameWidth + suffixWidth + 1;
  94. tabStop = (tabStop + tabWidth - 1) / tabWidth * tabWidth;
  95. for (i = 0; i != sizeof pairs / sizeof pairs[0]; ++i) {
  96. lengthGap = (int) (tabStop - prefixWidth - strlen(pairs[i].name) -
  97. suffixWidth);
  98. fprintf(fp, "%s%s%s%*c%2d\n",
  99. prefix, pairs[i].name, suffix, lengthGap, ' ',
  100. pairs[i].length);
  101. if (ferror(fp)) {
  102. perror("fclose");
  103. exit(EXIT_FAILURE);
  104. }
  105. }
  106. if (fclose(fp)) {
  107. perror("fclose");
  108. return EXIT_FAILURE;
  109. }
  110. return EXIT_SUCCESS;
  111. }