Skip to content
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