Now uses.py works much better, and the test cases are more complete.
authorDavid Anderson <davea42@earthlink.net>
Sun, 3 Jun 2012 21:35:08 +0000 (14:35 -0700)
committerDavid Anderson <davea42@earthlink.net>
Sun, 3 Jun 2012 21:35:08 +0000 (14:35 -0700)
It now recognizes a comment as such, which helps in checking
the real .tex files. And it skips the newcommand command in tex,
again helping avoid pointless warnings.

dwarf5/tools/Makefile
dwarf5/tools/uses.base
dwarf5/tools/uses.in
dwarf5/tools/uses.py
dwarf5/tools/usesb.base
dwarf5/tools/usesc.base [new file with mode: 0644]
dwarf5/tools/usesc.in [new file with mode: 0644]

index 3933d57..7307770 100644 (file)
@@ -62,5 +62,7 @@ test:
        #
        python uses.py uses.in >uses.in.out 
        diff uses.in.out uses.base
+       python uses.py usesc.in >usesc.in.out
+       diff usesc.in.out usesc.base
 
      
index ba33668..b4d849c 100644 (file)
@@ -1,7 +1,3 @@
-ERROR insufficient tokens on line for pattern  i { i } { i } { * }  line  6  file  uses.in
-ERROR insufficient tokens on line for pattern  i { i } { i } { * }  line  17  file  uses.in
-ERROR insufficient tokens on line for pattern  i { i } { i } { * }  line  18  file  uses.in
-ERROR insufficient tokens on line for pattern  i { i } { i } { * }  line  21  file  uses.in
 ERROR line  expected }  got  ['t', 'o'] pattern i { i } { i }  line  27  file  uses.in
 ERROR line  expected }  got  ['n', 'o', 't'] pattern i { i } { i }  line  30  file  uses.in
 ERROR line  expected }  got  ['n', 'o', 't'] pattern i { i } { i } { * }  line  31  file  uses.in
@@ -14,3 +10,11 @@ ERROR line  expected }  got  ['l', 'i', 'n', 'k', 'e', 'd'] pattern i { i } { i
 ERROR line  expected }  got  ['l', 'i', 'n', 'k', 'e', 'd'] pattern i { i } { i }  line  54  file  uses.in
 ERROR line  expected }  got  ['l', 'i', 'n', 'k', 'e', 'd'] pattern i { i } { i }  line  55  file  uses.in
 ERROR line  expected }  got  ['{'] pattern i { i } { i }  line  67  file  uses.in
+Duplicate definitions count:  4
+Duplicated Labels duplicatedlabel uses.in 75 ,  uses.in 76 
+Duplicated Links multdefa uses.in 13 ,  uses.in 14 
+Duplicated Links multdefb uses.in 17 ,  uses.in 18 
+Duplicated Links multdefc uses.in 20 ,  uses.in 21 
+Unresolved DW string: DW
+Unresolved DW string: DW\_TAG\_fooe
+Unresolved DW string: DW_TAG_mystuffprobablyoversight
index a78c8ec..fbdc672 100644 (file)
@@ -72,5 +72,8 @@ Following are targs with two links or labels
 # Should be legal.
 \livetargi{chap:address}{address}{address class}
 
+\label{duplicatedlabel}
+\label{duplicatedlabel}
+
 
 
index ef8e4b5..7d8cfff 100644 (file)
@@ -78,6 +78,10 @@ def isbrace(tok,brace):
      return "y"
   return "n"
 
+def toknamestring(t):
+  """ Turn a token into its string as a string """
+  return ''.join(t._tex)
+
 
 def pickup(linetoks,tnumin,pattern,myfile,linenum):
   """ The token pattern characters are
@@ -96,7 +100,6 @@ def pickup(linetoks,tnumin,pattern,myfile,linenum):
   inlen = len(linetoks) 
   curnum = tnumin
   curtok = linetoks[curnum]
-  outtoks += [curtok]
   patterncharnum = -1
   for c in pattern:
     patterncharnum = patterncharnum + 1
@@ -159,7 +162,7 @@ def pickup(linetoks,tnumin,pattern,myfile,linenum):
   return outtoks,numabsorbed
 
 def reftodict(d,k,v):
-  keystring = ''.join(k._token._tex)
+  keystring = toknamestring(k._token)
   if d.has_key(keystring) == 0:
      d[keystring] =  [v]
   else:
@@ -169,7 +172,7 @@ def reftodict(d,k,v):
 
 def deftodict(d,k,v):
   global dupdefcount
-  keystring = ''.join(k._token._tex)
+  keystring = toknamestring(k._token)
   if d.has_key(keystring) == 0:
      d[keystring] =  [v]
   else:
@@ -314,9 +317,53 @@ def read_file_args(targlist):
     filelist += [v]
     cur = int(cur) + 1
   process_files(filelist)
+
+def sort_tokmlist(mylist):
+   aux = [ (''.join(x._token._tex),x) for x in mylist ]
+   aux.sort()
+   return[ (x[1]) for x in aux]
   
+def printdups(d,name):
+  lablist = d.keys()
+  if len(lablist) < 1:
+    return
+  lablist.sort()
+  for k in lablist:
+     tokmlist = d[k]
+     stokmlist = sort_tokmlist(tokmlist)
+     if len(stokmlist) > 1:
+       print name,k,
+       for i in range (len(stokmlist)):
+         t = stokmlist[i]
+         if i == 0:
+           print t._file._name, t._line,
+         else:
+           print ", ",t._file._name, t._line,
+       print ""
+
+def print_stats():
+  global linkdefinitionsdict
+  global linkusesdict
+  global labeldefinitionsdict
+  global labelusesdict
+  global ignorethesedict
+  global indexsetdict
+  global dupdefcount
+  global unresolveddwdict
+  if dupdefcount > 0:
+    print "Duplicate definitions count: ",dupdefcount
+
+  printdups(labeldefinitionsdict,"Duplicated Labels")
+  printdups(linkdefinitionsdict,"Duplicated Links")
 
+  lablist = unresolveddwdict.keys()
+  if len(lablist) >0:
+    lablist.sort()
+    for k in lablist:
+      print "Unresolved DW string:",k
 
+  #FIXME More reporting needed.
 
 def read_all_args():
   filelist = []
@@ -331,6 +378,7 @@ def read_all_args():
     printlegals()
     sys.exit(1)
   process_files(filelist)
+  print_stats()
 
 #  anylink [-t <class>] ... [file] ...
 
index 0a04273..89e0c4d 100644 (file)
@@ -4,3 +4,5 @@ ERROR line ended surprisingly, pattern  i { i } { i }   line  4  file  usesb.in
 ERROR line ended surprisingly, pattern  i { i }   line  5  file  usesb.in
 ERROR line  expected }  got  ['{'] pattern i { i } { i }  line  6  file  usesb.in
 ERROR line  expected {  got  ['}']  pattern  i { i } { i }  line  7  file  usesb.in
+Duplicate definitions count:  2
+Duplicated Links x usesb.in 1 ,  usesb.in 6 ,  usesb.in 7 
diff --git a/dwarf5/tools/usesc.base b/dwarf5/tools/usesc.base
new file mode 100644 (file)
index 0000000..9a364e1
--- /dev/null
@@ -0,0 +1,2 @@
+Unresolved DW string: DW\-\_TAG\-\_foog
+Unresolved DW string: DW_TAG_foox
diff --git a/dwarf5/tools/usesc.in b/dwarf5/tools/usesc.in
new file mode 100644 (file)
index 0000000..05ef80f
--- /dev/null
@@ -0,0 +1,17 @@
+
+\livetarg{chap:DWTAGfoo}{DW\_TAG\_fool}
+\livetarg{chap:DWTAGfooj}{DW\-\_TAG\-\_foolj}
+\livelink{chap:DWTAGfoo}{DW\_TAG\_fool}
+\livelink{chap:DWTAGfooj}{DW\-\_TAG\-\_foolj}
+\livelink{chap:DWTAGfook}{DW\-\_TAG\-\_foolk}
+
+\livetarg{chap:DWTAGfooe}{DW\_TAG\_fooe}
+\livetarg{chap:DWTAGfoog}{DW\-\_TAG\-\_foog}
+\livelink{chap:DWTAGfooe}{DW\_TAG\_fooe}
+\livelink{chap:DWTAGfoog}{DW\-\_TAG\-\_foog}
+Following will generate warnings.
+DW\-\_TAG\-\_foog
+DW_TAG_foox
+
+
+