Wider range possible in LocalVariableTable ?

Ulf Zibis Ulf.Zibis at gmx.de
Sat May 29 06:52:28 PDT 2010


Ah, I think I understand. What's about local variables, if I unfold the 
loop:

  1 void foo() {
  2     Boy peter = PETER;
  3     Girl next;
        ...
  5     next = girls[0];
        ...
10     peter.takes(next);
        ...
15     next = girls[1];
        ...
20     peter.takes(next);
        ...
25     next = girls[2];
        ...
20     peter.takes(next);
        ...
99 }

Is variable next assigned between lines 10...15 and 20...25, as it is 
not referenced in those ranges. ?

-Ulf


Am 28.05.2010 21:56, schrieb Neal Gafter:
> Local variables n and next are not definitely assigned on line 98, so 
> that is why they are not visible to the debugger.  Since local 
> variables don't have "default" values as fields do, they cannot be 
> exposed until they are definitely assigned.
>
> If you want to make these variables visible to the debugger, you'll 
> have to give them an initial value in their declarations.
>
> On Fri, May 28, 2010 at 10:57 AM, Ulf Zibis <Ulf.Zibis at gmx.de 
> <mailto:Ulf.Zibis at gmx.de>> wrote:
>
>     <--- See following code: --->
>
>      93    private static void parsePrefixes1() {
>      94        List<UName> sorted = UName.list.sort();
>      95        UName current = sorted.get(0), next;
>      96        Prefix prefix;
>      97        for (int i=1, j=2, m=2, n, pfKey=0; i<sorted.size();
>     current=next, m=n) {
>      98            n = matchingEntries(current, next =
>     sorted.get(i++)); // n and next are not visible to the debugger here
>      99            System.out.println("i="+i);
>     100            if (n > 2 ||
>     101                    n == 2 && i<sorted.size() &&
>     102             matchingEntries(current, sorted.get(i)) >= 2) {
>     103                if (pfKey == 0)
>     104                    pfKey = Prefix.newKey(current, n);
>     105                current.replaceByPrefix(pfKey);
>     106            } else if (pfKey != 0) {
>     107                current.replaceByPrefix(pfKey);
>     108                pfKey = 0;
>     109            }
>     110        }
>     111    }
>     <--------------->
>
>     Variable "next" is defined since bytecode index 78 and "n" since index 83.
>     Line 98 has index 61, therefore these variables are *not* defined yet.
>
>          LineNumberTable:
>            line 93: 0
>            line 94: 7
>            line 95: 27
>            line 97: 38
>            line 98: 61
>            line 99: 83
>            line 100: 109
>            line 103: 151
>            line 104: 156
>            line 105: 164
>            line 106: 173
>            line 107: 178
>            line 108: 184
>            line 97: 187
>            line 111: 196
>          LocalVariableTable:
>            Start  Length  Slot  Name   Signature
>              78     118     2   next   Lbuild/tools/generatecharacter/CharacterNamesGenerator6$UName;
>              41     155     4      i   I
>              44     152     5      j   I
>              47     149     6      m   I
>              83     113     7      n   I
>              50     146     8  pfKey   I
>               7     190     0  sorted   Ljava/util/List;
>              38     159     1  current   Lbuild/tools/generatecharacter/CharacterNamesGenerator6$UName;
>
>
>     Is it possible to define variables n and next since bytecode index
>     61, so they would be visible for debugger on line 98 at least
>     after 2nd entry in the for loop?
>     Additionally I'm wondering, why variable m is defined since
>     bytecode index 47, as it is never referenced later.
>
>     Additionally please refer to this discussion:
>     *Bug 186882* <http://netbeans.org/bugzilla/show_bug.cgi?id=186882>
>     - [69cat] Valid variables not displayed
>
>     Hoping for lively discussion,
>
>     -Ulf
>
>     <http://netbeans.org/bugzilla/show_bug.cgi?id=186882>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20100529/0be77135/attachment.html 


More information about the compiler-dev mailing list