001: package net.sf.jdec.core;
002:
003: import net.sf.jdec.blocks.Loop;
004:
005: import java.util.*;
006:
007: /*
008: * GlobalVariableStore.java Copyright (c) 2006,07 Swaroop Belur
009: *
010: * This program is free software; you can redistribute it and/or
011: * modify it under the terms of the GNU General Public License
012: * as published by the Free Software Foundation; either version 2
013: * of the License, or (at your option) any later version.
014:
015: * This program is distributed in the hope that it will be useful,
016: * but WITHOUT ANY WARRANTY; without even the implied warranty of
017: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
018: * GNU General Public License for more details.
019:
020: * You should have received a copy of the GNU General Public License
021: * along with this program; if not, write to the Free Software
022: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
023: *
024: */
025: public class GlobalVariableStore {
026:
027: private static List dowhileloopmarkers = new ArrayList(); // loop starts
028: private static boolean athrowseen = false;
029: private static int athrowseenpos = -1;
030: private static boolean prevInstInvokeVirtual = false;
031: private static ArrayList problematicInvokes = new ArrayList();
032: private static Hashtable invokeStartEnd = new Hashtable();
033: private static ArrayList elsebreaksforifchain = new ArrayList();
034: private static HashMap skipWRTbooleanShortcutAssignFound = new HashMap();
035: private static boolean booleanAssignFound = false;
036: private static Loop this Loop;
037: private static boolean encounteredAndOrComp = false;
038: private static boolean initialBracketAdded = false;
039: private static boolean newfound = false;
040: private static StringBuffer methodsc = new StringBuffer("");
041: private static HashMap booleanAssignMap = new HashMap();
042: private static Hashtable retAtIfElseEnd = new Hashtable();
043: private static int currentMonitorEnterPos = -1; // gets set when every monitorenter is encountered
044: private static Map skipWRTClassLoadIf = new HashMap();
045: private static boolean elsehasbegun = false;
046: private static Map LABELS = new Hashtable();
047: private static List break_JumpOffsets = new ArrayList();
048: private static Hashtable labelAssociated = new Hashtable();
049: private static boolean isIfInScope = false;
050: private static Hashtable branchLabels = new Hashtable();
051: private static ArrayList elsestartadded = new ArrayList();
052: private static int elseCloseLineNo = -1;
053: private static ArrayList continue_JumpOffsets = new ArrayList();
054: private static ArrayList skipWRTClassLoadIfUpperLimits = new ArrayList();
055: private static ArrayList skipPrimitiveArrayStores = new ArrayList();
056: private static HashMap athrowmap = new HashMap();
057: private static List skipaastores = new ArrayList();
058: private static boolean multinewfound;
059: private static Hashtable variableDimAss = new Hashtable();
060: private static boolean dupnothandled = false;
061: private static boolean doNotPop = false;
062: private static boolean embeddedNewArrayCopy = false;
063: private static Stack newfoundstack = new Stack();
064: private static Stack arraytimesstack = new Stack();
065: private static int arraytimespush = 0;
066: private static boolean primitiveastore = false;
067: private static Hashtable pushTypes = new Hashtable();
068: private static ArrayList ternList = new ArrayList();
069: private static boolean embeddedANEWARRAYCopy = false;
070: private static boolean embeddedANEWARRAY = false;
071: private static boolean embeddedNEWARRAY = false;
072: private static boolean specialIASTORE = false;
073: private static boolean IfPartOfShortCutChain = false;
074: private static int[] skipsWRTPostIncr = new int[0];
075: private static HashMap returnsAtI = new HashMap();
076: private static ArrayList variablesatfront = new ArrayList();
077:
078: public static void reset() {
079: variablesatfront = new ArrayList();
080: returnsAtI = new HashMap();
081: skipsWRTPostIncr = new int[0];
082: IfPartOfShortCutChain = false;
083: specialIASTORE = false;
084: embeddedNEWARRAY = false;
085: embeddedANEWARRAY = false;
086: embeddedANEWARRAYCopy = false;
087: pushTypes = new Hashtable();
088: primitiveastore = false;
089: arraytimespush = 0;
090: arraytimesstack = new Stack();
091: newfoundstack = new Stack();
092: embeddedNewArrayCopy = false;
093: doNotPop = false;
094: dupnothandled = false;
095: variableDimAss = new Hashtable();
096: multinewfound = false;
097: skipaastores = new ArrayList();
098: athrowmap = new HashMap();
099: skipPrimitiveArrayStores = new ArrayList();
100: continue_JumpOffsets = new ArrayList();
101: elseCloseLineNo = -1;
102: elsestartadded = new ArrayList();
103: branchLabels = new Hashtable();
104: isIfInScope = false;
105: labelAssociated = new Hashtable();
106: break_JumpOffsets = new ArrayList();
107: LABELS = new Hashtable();
108: elsehasbegun = false;
109: skipWRTClassLoadIf = new HashMap();
110: currentMonitorEnterPos = -1;
111: retAtIfElseEnd = new Hashtable();
112: booleanAssignMap = new HashMap();
113: methodsc = new StringBuffer("");
114: newfound = false;
115: initialBracketAdded = false;
116: encounteredAndOrComp = false;
117: this Loop = null;
118: booleanAssignFound = false;
119: skipWRTbooleanShortcutAssignFound = new HashMap();
120: prevInstInvokeVirtual = false;
121: problematicInvokes = new ArrayList();
122: invokeStartEnd = new Hashtable();
123: elsebreaksforifchain = new ArrayList();
124: athrowseen = false;
125: dowhileloopmarkers = new ArrayList();
126: athrowseenpos = -1;
127: }
128:
129: public static List getDowhileloopmarkers() {
130: return dowhileloopmarkers;
131: }
132:
133: public static void setDowhileloopmarkers(List dowhileloopmarkers) {
134: GlobalVariableStore.dowhileloopmarkers = dowhileloopmarkers;
135: }
136:
137: public static HashMap getReturnsAtI() {
138: return returnsAtI;
139: }
140:
141: public static void setReturnsAtI(HashMap returnsAtI) {
142: GlobalVariableStore.returnsAtI = returnsAtI;
143: }
144:
145: public static List getSkipaastores() {
146: return skipaastores;
147: }
148:
149: public static void setSkipaastores(List skipaastores) {
150: GlobalVariableStore.skipaastores = skipaastores;
151: }
152:
153: public static boolean isDoNotPop() {
154: return doNotPop;
155: }
156:
157: public static void setDoNotPop(boolean doNotPop) {
158: GlobalVariableStore.doNotPop = doNotPop;
159: }
160:
161: public static boolean isEmbeddedNewArrayCopy() {
162: return embeddedNewArrayCopy;
163: }
164:
165: public static void setEmbeddedNewArrayCopy(
166: boolean embeddedNewArrayCopy) {
167: GlobalVariableStore.embeddedNewArrayCopy = embeddedNewArrayCopy;
168: }
169:
170: public static int getArraytimespush() {
171: return arraytimespush;
172: }
173:
174: public static void setArraytimespush(int arraytimespush) {
175: GlobalVariableStore.arraytimespush = arraytimespush;
176: }
177:
178: public static Stack getArraytimesstack() {
179: return arraytimesstack;
180: }
181:
182: public static void setArraytimesstack(Stack arraytimesstack) {
183: GlobalVariableStore.arraytimesstack = arraytimesstack;
184: }
185:
186: public static Stack getNewfoundstack() {
187: return newfoundstack;
188: }
189:
190: public static void setNewfoundstack(Stack newfoundstack) {
191: GlobalVariableStore.newfoundstack = newfoundstack;
192: }
193:
194: public static boolean isPrimitiveastore() {
195: return primitiveastore;
196: }
197:
198: public static void setPrimitiveastore(boolean primitiveastore) {
199: GlobalVariableStore.primitiveastore = primitiveastore;
200: }
201:
202: public static boolean isEmbeddedANEWARRAYCopy() {
203: return embeddedANEWARRAYCopy;
204: }
205:
206: public static void setEmbeddedANEWARRAYCopy(
207: boolean embeddedANEWARRAYCopy) {
208: GlobalVariableStore.embeddedANEWARRAYCopy = embeddedANEWARRAYCopy;
209: }
210:
211: public static boolean isEmbeddedANEWARRAY() {
212: return embeddedANEWARRAY;
213: }
214:
215: public static void setEmbeddedANEWARRAY(boolean embeddedANEWARRAY) {
216: GlobalVariableStore.embeddedANEWARRAY = embeddedANEWARRAY;
217: }
218:
219: public static boolean isEmbeddedNEWARRAY() {
220: return embeddedNEWARRAY;
221: }
222:
223: public static void setEmbeddedNEWARRAY(boolean embeddedNEWARRAY) {
224: GlobalVariableStore.embeddedNEWARRAY = embeddedNEWARRAY;
225: }
226:
227: public static int[] getSkipsWRTPostIncr() {
228: return skipsWRTPostIncr;
229: }
230:
231: public static void setSkipsWRTPostIncr(int[] skipsWRTPostIncr) {
232: GlobalVariableStore.skipsWRTPostIncr = skipsWRTPostIncr;
233: }
234:
235: public static boolean isMultinewfound() {
236: return multinewfound;
237: }
238:
239: public static void setMultinewfound(boolean multinewfound) {
240: GlobalVariableStore.multinewfound = multinewfound;
241: }
242:
243: public static ArrayList getVariablesatfront() {
244: return variablesatfront;
245: }
246:
247: public static void setVariablesatfront(ArrayList variablesatfront) {
248: GlobalVariableStore.variablesatfront = variablesatfront;
249: }
250:
251: public static ArrayList getTernList() {
252: return ternList;
253: }
254:
255: public static void setTernList(ArrayList ternList) {
256: GlobalVariableStore.ternList = ternList;
257: }
258:
259: public static boolean isDupnothandled() {
260: return dupnothandled;
261: }
262:
263: public static void setDupnothandled(boolean dupnothandled) {
264: GlobalVariableStore.dupnothandled = dupnothandled;
265: }
266:
267: public static Hashtable getVariableDimAss() {
268: return variableDimAss;
269: }
270:
271: public static void setVariableDimAss(Hashtable variableDimAss) {
272: GlobalVariableStore.variableDimAss = variableDimAss;
273: }
274:
275: public static HashMap getAthrowmap() {
276: return athrowmap;
277: }
278:
279: public static void setAthrowmap(HashMap athrowmap) {
280: GlobalVariableStore.athrowmap = athrowmap;
281: }
282:
283: public static ArrayList getSkipPrimitiveArrayStores() {
284: return skipPrimitiveArrayStores;
285: }
286:
287: public static void setSkipPrimitiveArrayStores(
288: ArrayList skipPrimitiveArrayStores) {
289: GlobalVariableStore.skipPrimitiveArrayStores = skipPrimitiveArrayStores;
290: }
291:
292: public static boolean isSpecialIASTORE() {
293: return specialIASTORE;
294: }
295:
296: public static void setSpecialIASTORE(boolean specialIASTORE) {
297: GlobalVariableStore.specialIASTORE = specialIASTORE;
298: }
299:
300: public static Hashtable getPushTypes() {
301: return pushTypes;
302: }
303:
304: public static void setPushTypes(Hashtable pushTypes) {
305: GlobalVariableStore.pushTypes = pushTypes;
306: }
307:
308: public static Map getSkipWRTClassLoadIf() {
309: return skipWRTClassLoadIf;
310: }
311:
312: public static void setSkipWRTClassLoadIf(Map skipWRTClassLoadIf) {
313: GlobalVariableStore.skipWRTClassLoadIf = skipWRTClassLoadIf;
314: }
315:
316: public static ArrayList getSkipWRTClassLoadIfUpperLimits() {
317: return skipWRTClassLoadIfUpperLimits;
318: }
319:
320: public static void setSkipWRTClassLoadIfUpperLimits(
321: ArrayList skipWRTClassLoadIfUpperLimits) {
322: GlobalVariableStore.skipWRTClassLoadIfUpperLimits = skipWRTClassLoadIfUpperLimits;
323: }
324:
325: public static boolean isIfInScope() {
326: return isIfInScope;
327: }
328:
329: public static void setIfInScope(boolean isIfInScope) {
330: GlobalVariableStore.isIfInScope = isIfInScope;
331: }
332:
333: public static int getElseCloseLineNo() {
334: return elseCloseLineNo;
335: }
336:
337: public static void setElseCloseLineNo(int elseCloseLineNo) {
338: GlobalVariableStore.elseCloseLineNo = elseCloseLineNo;
339: }
340:
341: public static ArrayList getContinue_JumpOffsets() {
342: return continue_JumpOffsets;
343: }
344:
345: public static void setContinue_JumpOffsets(
346: ArrayList continue_JumpOffsets) {
347: GlobalVariableStore.continue_JumpOffsets = continue_JumpOffsets;
348: }
349:
350: public static ArrayList getElsestartadded() {
351: return elsestartadded;
352: }
353:
354: public static void setElsestartadded(ArrayList elsestartadded) {
355: GlobalVariableStore.elsestartadded = elsestartadded;
356: }
357:
358: public static Hashtable getBranchLabels() {
359: return branchLabels;
360: }
361:
362: public static void setBranchLabels(Hashtable branchLabels) {
363: GlobalVariableStore.branchLabels = branchLabels;
364: }
365:
366: public static Hashtable getLabelAssociated() {
367: return labelAssociated;
368: }
369:
370: public static void setLabelAssociated(Hashtable labelAssociated) {
371: GlobalVariableStore.labelAssociated = labelAssociated;
372: }
373:
374: public static List getBreak_JumpOffsets() {
375: return break_JumpOffsets;
376: }
377:
378: public static void setBreak_JumpOffsets(List break_JumpOffsets) {
379: GlobalVariableStore.break_JumpOffsets = break_JumpOffsets;
380: }
381:
382: public static Map getLABELS() {
383: return LABELS;
384: }
385:
386: public static void setLABELS(Map labels) {
387: LABELS = labels;
388: }
389:
390: public static boolean isElsehasbegun() {
391: return elsehasbegun;
392: }
393:
394: public static void setElsehasbegun(boolean elsehasbegun) {
395: GlobalVariableStore.elsehasbegun = elsehasbegun;
396: }
397:
398: public static int getCurrentMonitorEnterPos() {
399: return currentMonitorEnterPos;
400: }
401:
402: public static void setCurrentMonitorEnterPos(
403: int currentMonitorEnterPos) {
404: GlobalVariableStore.currentMonitorEnterPos = currentMonitorEnterPos;
405: }
406:
407: public static boolean isNewfound() {
408: return newfound;
409: }
410:
411: public static void setNewfound(boolean newfound) {
412: GlobalVariableStore.newfound = newfound;
413: }
414:
415: public static Hashtable getRetAtIfElseEnd() {
416: return retAtIfElseEnd;
417: }
418:
419: public static void setRetAtIfElseEnd(Hashtable retAtIfElseEnd) {
420: GlobalVariableStore.retAtIfElseEnd = retAtIfElseEnd;
421: }
422:
423: public static HashMap getBooleanAssignMap() {
424: return booleanAssignMap;
425: }
426:
427: public static void setBooleanAssignMap(HashMap booleanAssignMap) {
428: GlobalVariableStore.booleanAssignMap = booleanAssignMap;
429: }
430:
431: public static StringBuffer getMethodsc() {
432: return methodsc;
433: }
434:
435: public static void setMethodsc(StringBuffer methodsc) {
436: GlobalVariableStore.methodsc = methodsc;
437: }
438:
439: public static boolean isBooleanAssignFound() {
440: return booleanAssignFound;
441: }
442:
443: public static void setBooleanAssignFound(boolean booleanAssignFound) {
444: GlobalVariableStore.booleanAssignFound = booleanAssignFound;
445: }
446:
447: public static boolean isIfPartOfShortCutChain() {
448: return IfPartOfShortCutChain;
449: }
450:
451: public static void setIfPartOfShortCutChain(
452: boolean ifPartOfShortCutChain) {
453: IfPartOfShortCutChain = ifPartOfShortCutChain;
454: }
455:
456: public static boolean isInitialBracketAdded() {
457: return initialBracketAdded;
458: }
459:
460: public static void setInitialBracketAdded(
461: boolean initialBracketAdded) {
462: GlobalVariableStore.initialBracketAdded = initialBracketAdded;
463: }
464:
465: public static boolean isEncounteredAndOrComp() {
466: return encounteredAndOrComp;
467: }
468:
469: public static void setEncounteredAndOrComp(
470: boolean encounteredAndOrComp) {
471: GlobalVariableStore.encounteredAndOrComp = encounteredAndOrComp;
472: }
473:
474: public static HashMap getSkipWRTbooleanShortcutAssignFound() {
475: return skipWRTbooleanShortcutAssignFound;
476: }
477:
478: public static void setSkipWRTbooleanShortcutAssignFound(
479: HashMap skipWRTbooleanShortcutAssignFound) {
480: GlobalVariableStore.skipWRTbooleanShortcutAssignFound = skipWRTbooleanShortcutAssignFound;
481: }
482:
483: public static Loop getThisLoop() {
484: return this Loop;
485: }
486:
487: public static void setThisLoop(Loop this Loop) {
488: GlobalVariableStore.this Loop = this Loop;
489: }
490:
491: public static ArrayList getElsebreaksforifchain() {
492: return elsebreaksforifchain;
493: }
494:
495: public static void setElsebreaksforifchain(
496: ArrayList elsebreaksforifchain) {
497: GlobalVariableStore.elsebreaksforifchain = elsebreaksforifchain;
498: }
499:
500: public static Hashtable getInvokeStartEnd() {
501: return invokeStartEnd;
502: }
503:
504: public static void setInvokeStartEnd(Hashtable invokeStartEnd) {
505: GlobalVariableStore.invokeStartEnd = invokeStartEnd;
506: }
507:
508: public static ArrayList getProblematicInvokes() {
509: return problematicInvokes;
510: }
511:
512: public static void setProblematicInvokes(
513: ArrayList problematicInvokes) {
514: GlobalVariableStore.problematicInvokes = problematicInvokes;
515: }
516:
517: public static boolean isPrevInstInvokeVirtual() {
518: return prevInstInvokeVirtual;
519: }
520:
521: public static void setPrevInstInvokeVirtual(
522: boolean prevInstInvokeVirtual) {
523: GlobalVariableStore.prevInstInvokeVirtual = prevInstInvokeVirtual;
524: }
525:
526: public static boolean isAthrowseen() {
527: return athrowseen;
528: }
529:
530: public static void setAthrowseen(boolean athrowseen) {
531: GlobalVariableStore.athrowseen = athrowseen;
532: }
533:
534: public static int getAthrowseenpos() {
535: return athrowseenpos;
536: }
537:
538: public static void setAthrowseenpos(int athrowseenpos) {
539: GlobalVariableStore.athrowseenpos = athrowseenpos;
540: }
541: }
|