mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2025-02-11 22:30:42 +00:00
Check for unique variable names
This commit is contained in:
parent
c8e57055fb
commit
0dddd3c32e
@ -36,6 +36,7 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
private final Map<Integer, List<Integer>> gotoLines = new TreeMap<> ();
|
private final Map<Integer, List<Integer>> gotoLines = new TreeMap<> ();
|
||||||
private final Map<Integer, List<Integer>> gosubLines = new TreeMap<> ();
|
private final Map<Integer, List<Integer>> gosubLines = new TreeMap<> ();
|
||||||
private final Map<String, List<Integer>> symbolLines = new TreeMap<> ();
|
private final Map<String, List<Integer>> symbolLines = new TreeMap<> ();
|
||||||
|
private final Map<String, List<String>> uniqueSymbols = new TreeMap<> ();
|
||||||
private final List<Integer> stringsLine = new ArrayList<> ();
|
private final List<Integer> stringsLine = new ArrayList<> ();
|
||||||
private final List<String> stringsText = new ArrayList<> ();
|
private final List<String> stringsText = new ArrayList<> ();
|
||||||
|
|
||||||
@ -285,6 +286,21 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
|
|
||||||
for (String symbol : symbolLines.keySet ())
|
for (String symbol : symbolLines.keySet ())
|
||||||
fullText.append (String.format ("%6s %s%n", symbol, symbolLines.get (symbol)));
|
fullText.append (String.format ("%6s %s%n", symbol, symbolLines.get (symbol)));
|
||||||
|
|
||||||
|
boolean headingShown = false;
|
||||||
|
for (String key : uniqueSymbols.keySet ())
|
||||||
|
{
|
||||||
|
List<String> usage = uniqueSymbols.get (key);
|
||||||
|
if (usage.size () > 1)
|
||||||
|
{
|
||||||
|
if (!headingShown)
|
||||||
|
{
|
||||||
|
headingShown = true;
|
||||||
|
fullText.append ("\nNon-unique Variable Names:\n");
|
||||||
|
}
|
||||||
|
fullText.append (String.format ("%6s %s%n", key, usage));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (basicPreferences.listStrings && stringsLine.size () > 0)
|
if (basicPreferences.listStrings && stringsLine.size () > 0)
|
||||||
@ -818,6 +834,7 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
if (lastLine != parent.lineNumber)
|
if (lastLine != parent.lineNumber)
|
||||||
lines.add (parent.lineNumber);
|
lines.add (parent.lineNumber);
|
||||||
}
|
}
|
||||||
|
checkUniqueName (var);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -890,6 +907,31 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String checkUniqueName (String symbol)
|
||||||
|
{
|
||||||
|
int ptr = symbol.length () - 1;
|
||||||
|
if (symbol.charAt (ptr) == ASCII_LEFT_BRACKET) // array
|
||||||
|
ptr--;
|
||||||
|
if (symbol.charAt (ptr) == ASCII_DOLLAR || symbol.charAt (ptr) == ASCII_PERCENT)
|
||||||
|
ptr--;
|
||||||
|
|
||||||
|
String unique =
|
||||||
|
(ptr <= 1) ? symbol : symbol.substring (0, 2) + symbol.substring (ptr + 1);
|
||||||
|
|
||||||
|
List<String> usage = uniqueSymbols.get (unique);
|
||||||
|
if (usage == null)
|
||||||
|
{
|
||||||
|
usage = new ArrayList<> ();
|
||||||
|
uniqueSymbols.put (unique, usage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!usage.contains (symbol))
|
||||||
|
usage.add (symbol);
|
||||||
|
|
||||||
|
// System.out.printf ("%8s %s%n", symbol, unique);
|
||||||
|
return unique;
|
||||||
|
}
|
||||||
|
|
||||||
private void doDigit ()
|
private void doDigit ()
|
||||||
{
|
{
|
||||||
int targetLine = getLineNumber (buffer, startPtr);
|
int targetLine = getLineNumber (buffer, startPtr);
|
||||||
|
@ -59,7 +59,9 @@ public abstract class BasicProgram extends AbstractFile
|
|||||||
return value >= 0x41 && value <= 0x5A;
|
return value >= 0x41 && value <= 0x5A;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
boolean isPossibleVariable (byte value)
|
boolean isPossibleVariable (byte value)
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
return isDigit (value) || isLetter (value) || value == ASCII_DOLLAR
|
return isDigit (value) || isLetter (value) || value == ASCII_DOLLAR
|
||||||
|| value == ASCII_PERCENT;
|
|| value == ASCII_PERCENT;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user