[Soot-list] Dava fails to decompile
David A Weiser
DWEISER at uwyo.edu
Tue Feb 27 15:11:55 EST 2007
I'm getting this error message: Exception in thread "main" java.lang.RuntimeException: Could not verify approximated Synchronized body
at soot.dava.toolkits.base.finders.SynchronizedBlockFinder.find(SynchronizedBlockFinder.java:163)
at soot.dava.DavaBody.<init>(DavaBody.java:307)
at soot.dava.Dava.newBody(Dava.java:84)
at soot.PackManager.runBodyPacks(PackManager.java:718)
at soot.PackManager.runBodyPacks(PackManager.java:396)
at soot.PackManager.runBodyPacks(PackManager.java:340)
at soot.PackManager.runPacks(PackManager.java:335)
at soot.Main.run(Main.java:203)
at soot.Main.main(Main.java:146)
when I try to run this code:
/*
* Copyright (C) 2000 by ETHZ/INF/CS
* All rights reserved
*
* @version $Id$
* @author Roger Karrer
*/
import java.lang.*;
import java.util.*;
import java.io.*;
// class of the shared control object
class Controls {
private Floor[] floors;
public Controls(int numFloors) {
floors = new Floor[numFloors+1];
for(int i = 0; i <= numFloors; i++) floors[i] = new Floor();
}
// this is called to inform the control object of a down call on floor
// onFloor
public void pushDown(int onFloor, int toFloor) {
synchronized(floors[onFloor]) {
System.out.println("*** Someone on floor " + onFloor +
" wants to go to " + toFloor);
floors[onFloor].downPeople.addElement(new Integer(toFloor));
if(floors[onFloor].downPeople.size() == 1)
floors[onFloor].downFlag = false;
}
}
// this is called to inform the control object of an up call on floor
// onFloor
public void pushUp(int onFloor, int toFloor) {
synchronized(floors[onFloor]) {
System.out.println("*** Someone on floor " + onFloor +
" wants to go to " + toFloor);
floors[onFloor].upPeople.addElement(new Integer(toFloor));
if(floors[onFloor].upPeople.size() == 1)
floors[onFloor].upFlag = false;
}
}
// An elevator calls this if it wants to claim an up call
// Sets the floor's upFlag to true if he has not already been set to true
// Returns true if the elevator has successfully claimed the call, and
// False if the call was already claimed (upFlag was already true)
public boolean claimUp(String lift, int floor) {
if(checkUp(floor)) {
synchronized(floors[floor]) {
if(!floors[floor].upFlag) {
floors[floor].upFlag = true;
return true;
}
}
}
return false;
}
// An elevator calls this if it wants to claim an down call
// Sets the floor's downFlag to true if he has not already been set to true
// Returns true if the elevator has successfully claimed the call, and
// False if the call was already claimed (downFlag was already true)
public boolean claimDown(String lift, int floor) {
if(checkDown(floor)) {
synchronized(floors[floor]) {
if(!floors[floor].downFlag) {
floors[floor].downFlag = true;
return true;
}
}
}
return false;
}
// An elevator calls this to see if an up call has occured on the given
// floor. If another elevator has already claimed the up call on the
// floor, checkUp() will return false. This prevents an elevator from
// wasting its time trying to claim a call that has already been claimed
public boolean checkUp(int floor) {
synchronized(floors[floor]) {
boolean ret = floors[floor].upPeople.size() != 0;
ret = ret && !floors[floor].upFlag;
return ret;
}
}
// An elevator calls this to see if a down call has occured on the given
// floor. If another elevator has already claimed the down call on the
// floor, checkUp() will return false. This prevents an elevator from
// wasting its time trying to claim a call that has already been claimed
public boolean checkDown(int floor) {
synchronized(floors[floor]) {
boolean ret = floors[floor].downPeople.size() != 0;
ret = ret && !floors[floor].downFlag;
return ret;
}
}
// An elevator calls this to get the people waiting to go up. The
// returned Vector contains Integer objects that represent the floors
// to which the people wish to travel. The floors vector and upFlag
// are reset.
public Vector getUpPeople(int floor) {
synchronized(floors[floor]) {
Vector temp = floors[floor].upPeople;
floors[floor].upPeople = new Vector();
floors[floor].upFlag = false;
return temp;
}
}
// An elevator calls this to get the people waiting to go down. The
// returned Vector contains Integer objects that represent the floors
// to which the people wish to travel. The floors vector and downFlag
// are reset.
public Vector getDownPeople(int floor) {
synchronized(floors[floor]) {
Vector temp = floors[floor].downPeople;
floors[floor].downPeople = new Vector();
floors[floor].downFlag = false;
return temp;
}
}
}
__________________________
I'm running SOOT 2.2.3. I can decompile other code like:
public void put(int value, int t, boolean s,boolean j) {
int i;
i = 0;
while (!available) {
try {
wait();
} catch (InterruptedException e) {
notify();
}
}
while ((available|s)&(s&j)) {
contents++;
try {
notify();
} catch (InterruptedException e) {
notify();
}
}
synchronized (this) {
contents = value;
value = t+3;
t=3;
available = true;
notify();
}
}
With no problems.
Am I missing a setting?
Thanks,
Dave
-----Original Message-----
From: soot-list-request at sable.mcgill.ca [mailto:soot-list-request at sable.mcgill.ca]
Sent: Thursday, February 22, 2007 10:00 AM
To: soot-list at sable.mcgill.ca
Subject: Soot-list Digest, Vol 22, Issue 21
Send Soot-list mailing list submissions to
soot-list at sable.mcgill.ca
To subscribe or unsubscribe via the World Wide Web, visit
http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
or, via email, send a message with subject or body 'help' to
soot-list-request at sable.mcgill.ca
You can reach the person managing the list at
soot-list-owner at sable.mcgill.ca
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Soot-list digest..."
Today's Topics:
1. LAST CALL - Soot goes Java 5 (Eric Bodden)
----------------------------------------------------------------------
Message: 1
Date: Thu, 22 Feb 2007 10:18:25 -0500
From: "Eric Bodden" <eric.bodden at mail.mcgill.ca>
Subject: [Soot-list] LAST CALL - Soot goes Java 5
To: "Soot list" <soot-list at sable.mcgill.ca>
Message-ID:
<804e3c660702220718l330c30acqe68545f26af0de92 at mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Hi all.
This is a last call to our users to raise any doubts about Soot moving
to a Java 5 code base. If I don't hear any "no go" from anybody by end
of next week, we will switch our build scripts to a source (and hence
also target) level of 1.5.
We *do* however intend to at least branch off a 1.4-based version for
maintenance purposes and probably we are even going to do another
release before the conversion.
Cheers,
Eric
--
Eric Bodden
Sable Research Group
McGill University, Montréal, Canada
------------------------------
_______________________________________________
Soot-list mailing list
Soot-list at sable.mcgill.ca
http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
End of Soot-list Digest, Vol 22, Issue 21
*****************************************
More information about the Soot-list
mailing list