charmxi: add -count-tokens command line option
authorAaron Becker <akbecker@gmail.com>
Thu, 21 Jun 2012 20:40:43 +0000 (15:40 -0500)
committerAaron Becker <akbecker@gmail.com>
Thu, 21 Jun 2012 20:40:43 +0000 (15:40 -0500)
charmc gets a new option -count-tokens which just reports the number of
tokens in an interface file and returns. It's a no-op for non-interface
files. This is used to compare program lengths in a more meaningful way
than lines of code.

src/scripts/charmc
src/xlat-i/xi-main.C

index 630e0370c37589286d369b1b4b90b9acc3c13fa9..c87ddc56f4b350bcdd72ddfa2818fd09e22e69bb 100755 (executable)
@@ -79,6 +79,7 @@ USE_RELIABLE_CC=""
 USE_FASTEST_CC=""
 PROG_EXT=""
 GENDEPENDS="no"
 USE_FASTEST_CC=""
 PROG_EXT=""
 GENDEPENDS="no"
+COUNTTOKENS="no"
 
 COPY_CHARMRUN=true
 USE_BUILD_OPTIONS=0
 
 COPY_CHARMRUN=true
 USE_BUILD_OPTIONS=0
@@ -632,10 +633,15 @@ do
                OPTS="$OPTS $arg"
                ;;
        "-M")
                OPTS="$OPTS $arg"
                ;;
        "-M")
+        PREPROCESS="no"
                SKIPLINK="yes"
                OPTS="$OPTS $arg"
                GENDEPENDS="yes"
                ;;
                SKIPLINK="yes"
                OPTS="$OPTS $arg"
                GENDEPENDS="yes"
                ;;
+    "-count-tokens")
+               OPTS="$OPTS $arg"
+        COUNTTOKENS="yes"
+        ;;
        "-default-to-aout")
                if [ "$EXPLICIT_OBJECT $EXPLICIT_COMPILATION" = "no no" ]
                then
        "-default-to-aout")
                if [ "$EXPLICIT_OBJECT $EXPLICIT_COMPILATION" = "no no" ]
                then
@@ -1048,6 +1054,11 @@ then
     CMK_XIOPTS="$CMK_XIOPTS -M"
 fi
 
     CMK_XIOPTS="$CMK_XIOPTS -M"
 fi
 
+if [ "$COUNTTOKENS" = "yes" ]
+then
+    CMK_XIOPTS="$CMK_XIOPTS -count-tokens"
+fi
+
 if test "$CMK_WITH_TAU" = "true"
 then
   echo "include $TAU_MAKEFILE" > _make.tau.tmp
 if test "$CMK_WITH_TAU" = "true"
 then
   echo "include $TAU_MAKEFILE" > _make.tau.tmp
index 4c8cb4d7e0b180752bf2e2964d1d5cc1d6cb04af..53bb2a26e7175d8c5dfda2cc770a10ed5386f2cb 100644 (file)
@@ -11,6 +11,7 @@ extern FILE *yyin;
 extern void yyrestart ( FILE *input_file );
 extern int yyparse (void);
 extern int yyerror(char *);
 extern void yyrestart ( FILE *input_file );
 extern int yyparse (void);
 extern int yyerror(char *);
+extern int yylex(void);
 
 extern xi::ModuleList *modlist;
 
 
 extern xi::ModuleList *modlist;
 
@@ -119,6 +120,13 @@ ModuleList *Parse(FILE *fp)
   return modlist;
 }
 
   return modlist;
 }
 
+int count_tokens(FILE* fp)
+{
+    yyin = fp;
+    int count = 0;
+    while (yylex()) count++;
+    return count;
+}
 
 void abortxi(char *name)
 {
 
 void abortxi(char *name)
 {
@@ -136,6 +144,7 @@ int main(int argc, char *argv[])
   fortranMode = 0;
   internalMode = 0;
   bool dependsMode = false;
   fortranMode = 0;
   internalMode = 0;
   bool dependsMode = false;
+  bool countTokens = false;
 
   for (int i=1; i<argc; i++) {
     if (*argv[i]=='-') {
 
   for (int i=1; i<argc; i++) {
     if (*argv[i]=='-') {
@@ -144,6 +153,7 @@ int main(int argc, char *argv[])
       else if (strcmp(argv[i],"-intrinsic")==0)  internalMode = 1;
       else if (strncmp(argv[i],"-D", 2)==0)  macros.append(new MacroDefinition(argv[i]+2));
       else if (strncmp(argv[i], "-M", 2)==0) dependsMode = true;
       else if (strcmp(argv[i],"-intrinsic")==0)  internalMode = 1;
       else if (strncmp(argv[i],"-D", 2)==0)  macros.append(new MacroDefinition(argv[i]+2));
       else if (strncmp(argv[i], "-M", 2)==0) dependsMode = true;
+      else if (strcmp(argv[i], "-count-tokens")==0) countTokens = true;
       else abortxi(argv[0]);
     }
     else
       else abortxi(argv[0]);
     }
     else
@@ -151,6 +161,11 @@ int main(int argc, char *argv[])
   }
   //if (fname==NULL) abortxi(argv[0]);
 
   }
   //if (fname==NULL) abortxi(argv[0]);
 
+  if (countTokens) {
+      cout << count_tokens(openFile(fname)) << endl;
+      return 0;
+  }
+
   ModuleList *m = Parse(openFile(fname)) ;
   if (!m) return 0;
   m->preprocess();
   ModuleList *m = Parse(openFile(fname)) ;
   if (!m) return 0;
   m->preprocess();