From 52138ca4409ac336c4a4036af324a2a79b383d0c Mon Sep 17 00:00:00 2001 From: chibash Date: Mon, 10 Dec 2018 00:24:19 +0900 Subject: [PATCH 1/2] enables switch-case with string constants --- javassist.jar | Bin 766454 -> 767009 bytes src/main/javassist/compiler/CodeGen.java | 52 ++++++++++++++++++++++- src/test/javassist/JvstTest5.java | 31 ++++++++++++++ 3 files changed, 81 insertions(+), 2 deletions(-) diff --git a/javassist.jar b/javassist.jar index ce63f9d24a56c6eb97b7c6ee0c6148f02ae4c165..89913dc5cd5519b7a1aa676c4ba722c736fb2fa8 100644 GIT binary patch delta 38458 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 delta 38029 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 prevBreakList = breakList; breakList = new ArrayList(); @@ -565,6 +581,7 @@ private void atSwitchStmnt(Stmnt st) throws CompileError { bytecode.addGap(npairs * 8); long[] pairs = new long[npairs]; + ArrayList gotoDefaults = new ArrayList(); int ipairs = 0; int defaultPc = -1; for (ASTList list = body; list != null; list = list.tail()) { @@ -575,9 +592,18 @@ private void atSwitchStmnt(Stmnt st) throws CompileError { else if (op != CASE) fatal(); else { + int curPos = bytecode.currentPc(); + long caseLabel; + if (isString) { + // computeStringLabel() also adds bytecode as its side-effects. + caseLabel = (long)computeStringLabel(label.head(), tmpVar, gotoDefaults); + } + else + caseLabel = (long)computeLabel(label.head()); + pairs[ipairs++] - = ((long)computeLabel(label.head()) << 32) + - ((long)(bytecode.currentPc() - opcodePc) & 0xffffffff); + = (caseLabel << 32) + + ((long)(curPos - opcodePc) & 0xffffffff); } hasReturned = false; @@ -600,6 +626,8 @@ else if (op != CASE) defaultPc = endPc; bytecode.write32bit(opcodePc2, defaultPc - opcodePc); + for (int addr: gotoDefaults) + bytecode.write16bit(addr, defaultPc - addr + 1); patchGoto(breakList, endPc); breakList = prevBreakList; @@ -613,6 +641,26 @@ private int computeLabel(ASTree expr) throws CompileError { throw new CompileError("bad case label"); } + private int computeStringLabel(ASTree expr, int tmpVar, List gotoDefaults) + throws CompileError + { + doTypeCheck(expr); + expr = TypeChecker.stripPlusExpr(expr); + if (expr instanceof StringL) { + String label = ((StringL)expr).get(); + bytecode.addAload(tmpVar); + bytecode.addLdc(label); + bytecode.addInvokevirtual(TypeChecker.jvmJavaLangString, "equals", + "(Ljava/lang/Object;)Z"); + bytecode.addOpcode(IFEQ); + Integer pc = Integer.valueOf(bytecode.currentPc()); + bytecode.addIndex(0); + gotoDefaults.add(pc); + return (int)label.hashCode(); + } + throw new CompileError("bad case label"); + } + private void atBreakStmnt(Stmnt st, boolean notCont) throws CompileError { diff --git a/src/test/javassist/JvstTest5.java b/src/test/javassist/JvstTest5.java index c5eff4d1..1a9bd666 100644 --- a/src/test/javassist/JvstTest5.java +++ b/src/test/javassist/JvstTest5.java @@ -453,4 +453,35 @@ public void testNestHostAttributeCopy() throws Exception { cc.getClassFile().compact(); cc.toClass(test5.DefineClassCapability.class); } + + public void testSwitchCaseWithStringConstant() throws Exception { + CtClass cc = sloader.get("test5.SwitchCase"); + cc.addMethod(CtNewMethod.make( + "public int run() {" + + " String s = \"foobar\";\n" + + " switch (s) {\n" + + " case STR1: return 1;\n" + + " case \"foobar\": return 2;\n" + + " default: return 3; }\n" + + "}\n", cc)); + cc.writeFile(); + Object obj = make(cc.getName()); + assertEquals(2, invoke(obj, "run")); + } + + public void testSwitchCaseWithStringConstant2() throws Exception { + CtClass cc = sloader.makeClass("test5.SwitchCase2"); + cc.addMethod(CtNewMethod.make( + "public int run() {" + + " String s = \"foo\";\n" + + " switch (s) {\n" + + " case test5.SwitchCase.STR1: return 1;\n" + + " case \"foobar\": return 2;\n" + + " }\n" + + " return 3;\n" + + "}\n", cc)); + cc.writeFile(); + Object obj = make(cc.getName()); + assertEquals(1, invoke(obj, "run")); + } } From c9ab46552be189f81072302882552f401b143a7b Mon Sep 17 00:00:00 2001 From: chibash Date: Mon, 10 Dec 2018 00:32:16 +0900 Subject: [PATCH 2/2] updates Readme.html --- Readme.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Readme.html b/Readme.html index 793677d4..86b8d613 100644 --- a/Readme.html +++ b/Readme.html @@ -281,6 +281,11 @@

Hints

Changes

+

-version 3.25 +

    +
  • GitHub Issue #72. +
+

-version 3.24.1 on December 9, 2018

  • GitHub Issue #228, #229