Skip to content
Open
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion WALA
Submodule WALA updated 85 files
+9 −5 .github/workflows/continuous-integration.yml
+22 −0 .idea/dictionaries/project.xml
+4 −0 .settings/org.eclipse.jdt.core.prefs
+0 −4 CONTRIBUTING.md
+1 −1 README-Gradle.md
+4 −0 build-logic/.settings/org.eclipse.jdt.core.prefs
+1 −1 build-logic/build.gradle.kts
+8 −3 build-logic/settings.gradle.kts
+2 −3 build-logic/src/main/kotlin/com/ibm/wala/gradle/Exec-useCurrentJavaHome.kt
+2 −2 build-logic/src/main/kotlin/com/ibm/wala/gradle/NullAway.gradle.kts
+4 −8 build-logic/src/main/kotlin/com/ibm/wala/gradle/eclipse-maven-central.gradle.kts
+9 −17 build-logic/src/main/kotlin/com/ibm/wala/gradle/java.gradle.kts
+3 −0 build-logic/src/main/kotlin/com/ibm/wala/gradle/javadoc.gradle.kts
+3 −5 build-logic/src/main/kotlin/com/ibm/wala/gradle/maven-eclipse-jsdt.gradle.kts
+2 −2 build-logic/src/main/kotlin/com/ibm/wala/gradle/project.gradle.kts
+6 −9 build-logic/src/main/kotlin/com/ibm/wala/gradle/publishing.gradle.kts
+53 −0 build-logic/src/main/kotlin/com/ibm/wala/gradle/version-catalog.kt
+1 −1 build-logic/src/main/kotlin/com/ibm/wala/gradle/xml-apis-ext.gradle.kts
+9 −4 build.gradle.kts
+3 −3 cast/java/ecj/.settings/org.eclipse.jdt.core.prefs
+4 −6 cast/java/ecj/build.gradle.kts
+7 −7 cast/java/ecj/src/main/java/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java
+10 −7 cast/java/src/testFixtures/java/com/ibm/wala/cast/java/test/IRTests.java
+2 −2 cast/java/src/testFixtures/java/com/ibm/wala/cast/java/test/JavaIRTests.java
+5 −3 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/AbstractFieldBasedTest.java
+10 −9 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/FieldBasedCGGamesTest.java
+2 −1 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/FieldBasedComparisonTest.java
+2 −1 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/FieldBasedJQueryTest.java
+19 −18 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/TestBoundedFieldBasedCG.java
+50 −60 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/TestFieldBasedCG.java
+12 −6 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/test/TestCallGraph2JSON.java
+5 −5 cast/js/rhino/src/testFixtures/java/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java
+8 −8 cast/js/src/test/resources/pages/crawl.html
+17 −17 cast/js/src/test/resources/tests/portal-example-simple.html
+3 −2 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestAjaxsltCallGraphShape.java
+8 −7 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestArgumentSensitivity.java
+65 −57 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestForInLoopHack.java
+33 −33 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestLexicalModRef.java
+2 −1 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestMediawikiCallGraphShape.java
+2 −1 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestPrototypeCallGraphShape.java
+375 −456 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java
+208 −247 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShape.java
+5 −3 cast/src/test/java/com/ibm/wala/cast/test/TestCAstPattern.java
+0 −248 cast/src/test/java/com/ibm/wala/cast/test/TestCAstTranslator.java
+63 −27 cast/src/testFixtures/java/com/ibm/wala/cast/util/test/TestCallGraphShape.java
+4 −0 code-coverage-report/.settings/org.eclipse.jdt.core.prefs
+1 −1 core/build.gradle.kts
+1 −1 core/src/main/java/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java
+2 −0 core/src/main/java/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java
+4 −4 core/src/main/java/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java
+1 −2 core/src/main/java/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java
+6 −6 core/src/main/java/com/ibm/wala/ipa/slicer/PDG.java
+1 −1 core/src/main/java/com/ibm/wala/ipa/slicer/thin/CISlicer.java
+14 −42 core/src/test/java/com/ibm/wala/core/tests/basic/PrimitivesTest.java
+4 −12 core/src/test/java/com/ibm/wala/core/tests/callGraph/CHACallGraphTest.java
+18 −32 core/src/test/java/com/ibm/wala/core/tests/callGraph/CallGraphTest.java
+20 −24 core/src/test/java/com/ibm/wala/core/tests/callGraph/ReflectionTest.java
+17 −12 core/src/test/java/com/ibm/wala/core/tests/cfg/exc/inter/NullPointerExceptionInterTest.java
+8 −6 core/src/test/java/com/ibm/wala/core/tests/cfg/exc/intra/NullPointerExceptionIntraTest.java
+4 −20 core/src/test/java/com/ibm/wala/core/tests/ir/CFGTest.java
+9 −25 core/src/test/java/com/ibm/wala/core/tests/ir/DeterministicIRTest.java
+1 −1 core/src/test/java/com/ibm/wala/core/tests/slicer/SlicerTest.java
+52 −48 core/src/test/java/com/ibm/wala/examples/analysis/dataflow/DataflowTest.java
+1 −1 dalvik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/AndroidModel.java
+6 −6 ...k/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/AndroidModelParameterManager.java
+2 −2 ...k/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java
+3 −2 dalvik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/IInstantiationBehavior.java
+1 −1 ...ik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java
+1 −1 dalvik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/ReuseParameters.java
+9 −9 dalvik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/structure/AbstractAndroidModel.java
+2 −2 dalvik/src/main/java/com/ibm/wala/dalvik/util/AndroidEntryPointManager.java
+11 −11 gradle/libs.versions.toml
+3 −3 ide/.settings/org.eclipse.jdt.core.prefs
+3 −3 ide/jdt/.settings/org.eclipse.jdt.core.prefs
+3 −3 ide/jsdt/.settings/org.eclipse.jdt.core.prefs
+7 −9 ide/jsdt/build.gradle.kts
+3 −3 ide/jsdt/tests/.settings/org.eclipse.jdt.core.prefs
+4 −6 ide/jsdt/tests/build.gradle.kts
+3 −3 ide/tests/.settings/org.eclipse.jdt.core.prefs
+8 −4 settings.gradle.kts
+9 −9 shrike/src/main/java/com/ibm/wala/shrike/shrikeBT/analysis/ClassHierarchy.java
+11 −11 shrike/src/main/java/com/ibm/wala/shrike/shrikeCT/ClassWriter.java
+0 −11 util/build.gradle.kts
+4 −5 util/src/main/java/com/ibm/wala/util/heapTrace/HeapTracer.java
+3 −6 util/src/test/java/com/ibm/wala/util/test/BasicGraphTest.java
39 changes: 22 additions & 17 deletions core/com.ibm.wala.cast.python.test/data/match1.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,25 @@ def sunday():
print("Sunday")


day = 4

match day:
case 1:
monday()
case 2:
tuesday()
case 3:
wednesday()
case 4:
thursday()
case 5:
friday()
case 6:
saturday()
case 7:
sunday()
def otherDay():
print("other day??")


for day in [1, 2, 3, 4, 5, 6, 7, otherDay]:
match day:
case 1:
monday()
case 2:
tuesday()
case 3:
wednesday()
case 4:
thursday()
case 5:
friday()
case 6:
saturday()
case 7:
sunday()
case x:
x()
55 changes: 55 additions & 0 deletions core/com.ibm.wala.cast.python.test/data/match2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
def monday():
print("Monday")


def tuesday():
print("Tuesday")


def wednesday():
print("Wednesday")


def thursday():
print("Thursday")


def friday():
print("Friday")


def saturday():
print("Saturday")


def sunday():
print("Sunday")


def otherDay():
print("other day??")


def doit(month):
for day in [1, 2, 3, 4, 5, 6, 7, otherDay]:
match day:
case 1 if 1 <= month <= 12:
monday()
case 2 if 1 <= month <= 12:
tuesday()
case 3 if 1 <= month <= 12:
wednesday()
case 4 if 1 <= month <= 12:
thursday()
case 5 if 1 <= month <= 12:
friday()
case 6 if 1 <= month <= 12:
saturday()
case 7 if 1 <= month <= 12:
sunday()
case x if callable(x):
x()


doit(4)
doit(0)
31 changes: 31 additions & 0 deletions core/com.ibm.wala.cast.python.test/data/match3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
def weekday(day):
print("week day " + str(day))


def weekend(day):
print("week end " + str(day))


def otherDay():
print("other day??")


def somethingElse():
print("something else")


def doit(month):
for day in [1, 2, 3, 4, 5, 6, 7, otherDay]:
match day:
case 1 | 2 | 3 | 4 | 5 as day if 1 <= month <= 12:
weekday(day)
case 6 | 7 as day if 1 <= month <= 12:
weekend(day)
case x if callable(x):
x()
case _:
somethingElse()


doit(4)
doit(0)
41 changes: 41 additions & 0 deletions core/com.ibm.wala.cast.python.test/data/match4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
def weekday(day):
print("week day " + str(day))


def weekend(day):
print("week end " + str(day))


def otherDay():
print("other day??")


def somethingElse():
print("something else")


def mten():
return 10


def mseven():
return 10


def doit(dmf):
match dmf:
case [1 | 2 | 3 | 4 | 5 as day, month] if 1 <= month() <= 12:
weekday(day)
case [6 | 7 as day, month] if 1 <= month() <= 12:
weekend(day)
case x if callable(x):
x()
case _:
somethingElse()


doit((3, mseven))
doit([7, mten])
doit([8, mten])
doit(otherDay)
doit(0)
37 changes: 37 additions & 0 deletions core/com.ibm.wala.cast.python.test/data/match5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
class Nothing:
def act(self):
print("Nothing")


def id(x):
return x


class Something:
a = 0
b = 0

def __init__(self, a, b):
self.a = id(a)
self.b = id(b)

def act(self):
print(self.a + self.b)


def doit(x):
match x:
case Nothing():
x.act()
case Something(a=5, b=7):
x.act()
case Something():
print("unexpected something")
case _:
print("unexpected value")


doit(Nothing())
doit(Something(5, 7))
doit(Something(3, 4))
doit(10)
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
Expand Down Expand Up @@ -130,4 +131,12 @@ StringBuffer dump(CallGraph CG) {
}
return sb;
}

protected void verifyGraphAssertions(CallGraph CG, Object[][] data) {
List<GraphAssertion> asserts = new ArrayList<>();
for (int i = 0; i < data.length; i++) {
asserts.add(new GraphAssertion(data[i][0], (String[]) data[i][1]));
}
verifyGraphAssertions(CG, asserts);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.ibm.wala.cast.ir.ssa.AstGlobalRead;
import com.ibm.wala.cast.ir.ssa.AstInstructionFactory;
import com.ibm.wala.cast.ir.translator.AstTranslator;
import com.ibm.wala.cast.ir.translator.AstTranslator.WalkContext;
import com.ibm.wala.cast.loader.AstMethod.DebuggingInformation;
import com.ibm.wala.cast.loader.DynamicCallSiteReference;
import com.ibm.wala.cast.python.loader.DynamicAnnotatableEntity;
Expand Down Expand Up @@ -1232,4 +1233,28 @@ protected void leaveBlockStmt(CAstNode n, WalkContext c, CAstVisitor<WalkContext
// TODO Auto-generated method stub
super.leaveBlockStmt(n, c, visitor);
}

@Override
protected boolean visitInstanceOf(
CAstNode n, WalkContext context, CAstVisitor<WalkContext> visitor) {
int result = context.currentScope().allocateTempValue();
context.setValue(n, result);
return false;
}

@Override
protected void leaveInstanceOf(
CAstNode n, WalkContext context, CAstVisitor<WalkContext> visitor) {
int result = context.getValue(n);
TypeReference ref = (TypeReference) n.getChild(0).getValue();

context
.cfg()
.addInstruction(
insts.InstanceofInstruction(
context.cfg().getCurrentInstruction(),
result,
context.getValue(n.getChild(1)),
ref));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -228,14 +228,16 @@ protected TranslatorToIR initTranslator(Set<Pair<CAstEntity, ModuleEntry>> topLe
PythonTypes.comprehension.getName(), PythonTypes.CodeBody.getName(), this, null);
final CoreClass object =
new CoreClass(PythonTypes.object.getName(), PythonTypes.rootTypeName, this, null);
final CoreClass sequence =
new CoreClass(PythonTypes.sequence.getName(), PythonTypes.Root.getName(), this, null);
final CoreClass list =
new CoreClass(PythonTypes.list.getName(), PythonTypes.Root.getName(), this, null);
new CoreClass(PythonTypes.list.getName(), PythonTypes.sequence.getName(), this, null);
final CoreClass set =
new CoreClass(PythonTypes.set.getName(), PythonTypes.Root.getName(), this, null);
final CoreClass dict =
new CoreClass(PythonTypes.dict.getName(), PythonTypes.Root.getName(), this, null);
final CoreClass tuple =
new CoreClass(PythonTypes.tuple.getName(), PythonTypes.Root.getName(), this, null);
new CoreClass(PythonTypes.tuple.getName(), PythonTypes.sequence.getName(), this, null);
final CoreClass string =
new CoreClass(PythonTypes.string.getName(), PythonTypes.Root.getName(), this, null);
final CoreClass trampoline =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ public class PythonTypes extends AstTypeReference {
public static final TypeReference coroutine =
TypeReference.findOrCreate(pythonLoader, TypeName.findOrCreate("Lcoroutine"));

public static final TypeReference sequence =
TypeReference.findOrCreate(pythonLoader, TypeName.findOrCreate("Lsequence"));

/** https://docs.python.org/3/library/stdtypes.html#typeiter. */
public static final TypeReference iterator =
TypeReference.findOrCreate(pythonLoader, TypeName.findOrCreate("Literator"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<mapAttribute key="org.eclipse.debug.core.environmentVariables"/>
<mapAttribute key="org.eclipse.debug.core.preferred_launchers">
<mapEntry key="[run]" value="org.eclipse.jdt.junit.launchconfig"/>
</mapAttribute>
Expand All @@ -31,5 +32,5 @@
<listAttribute key="org.eclipse.jdt.launching.MODULEPATH"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.ibm.wala.cast.python.cpython"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea -Djava.library.path=/Users/dolby/miniforge3/envs/walajep/lib/python3.13/site-packages/jep"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea&#10;--enable-native-access=ALL-UNNAMED -Djava.library.path=${sitePackages}/jep/&#10;-Djava.util.logging.config.file=./logging.properties"/>
</launchConfiguration>
Loading