Adding the old tracker variable for debugging/testing purposes.
[jpf-core.git] / src / main / gov / nasa / jpf / vm / VariableAnnotationInfo.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18
19 package gov.nasa.jpf.vm;
20
21 /**
22  * type annotation for local vars and resource vars
23  */
24 public class VariableAnnotationInfo extends AbstractTypeAnnotationInfo {
25   
26   protected long[] scopeEntries;
27   
28   public VariableAnnotationInfo (AnnotationInfo base, int targetType, short[] typePath, long[] scopeEntries) {
29     super( base, targetType, typePath);
30     
31     this.scopeEntries = scopeEntries;
32   }
33   
34   public int getNumberOfScopeEntries(){
35     return scopeEntries.length;
36   }
37   
38   public int getStartPC (int idx){
39     return (int)(scopeEntries[idx] >> 32) & 0xffff;
40   }
41   
42   public int getLength (int idx){
43     return (int)(scopeEntries[idx] >> 16) & 0xffff;
44   }
45   
46   public int getEndPC (int idx){
47     long e = scopeEntries[idx];
48     
49     int startPC = (int)(e >> 32) & 0xffff;
50     int len = (int)(e >> 16) & 0xffff;
51     
52     return startPC + len;
53   }
54   
55   public int getSlotIndex (int idx){
56     return (int)scopeEntries[idx] & 0xffff;    
57   }
58   
59   
60   @Override
61   protected void addArgs(StringBuilder sb){
62     sb.append(",scope:");
63     for (int i=0; i<scopeEntries.length;i++){
64       long e = scopeEntries[i];
65       int slotIndex = (int)(e & 0xffff);
66       int length = (int)((e >> 16) & 0xffff);
67       int startPc = (int)((e >> 32) & 0xffff);
68       
69       if (i>0){
70         sb.append(',');
71       }
72       
73       sb.append('[');
74       sb.append( Integer.toString(startPc));
75       sb.append("..");
76       sb.append( Integer.toString(startPc + length-1));
77       sb.append("]#");
78       sb.append(slotIndex);
79     }
80   }
81   
82   // 2do - perhaps we should map to LocalVarInfos here (in case we have them), but
83   // this would probably belong to LocalVarInfo (turning them into full InfoObjects)
84 }