From d582b1f00dfc8e01e45dfa467fd6275a09005673 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Tue, 9 Sep 2025 18:03:26 -0500 Subject: [PATCH 1/2] CLJ-2919 Use KEYWORD_CALLSITES = null to signal no registration --- src/jvm/clojure/lang/Compiler.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 28d3ab9e8f..bc771e867e 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -211,7 +211,7 @@ public class Compiler implements Opcodes{ static final public Var CONSTANT_IDS = Var.create().setDynamic(); //vector -static final public Var KEYWORD_CALLSITES = Var.create().setDynamic(); +static final public Var KEYWORD_CALLSITES = Var.create(null).setDynamic(); //vector static final public Var PROTOCOL_CALLSITES = Var.create().setDynamic(); @@ -4389,7 +4389,7 @@ static public Expr parse(C context, ISeq form) { } } - if(fexpr instanceof KeywordExpr && RT.count(form) == 2 && KEYWORD_CALLSITES.isBound()) + if(fexpr instanceof KeywordExpr && RT.count(form) == 2 && KEYWORD_CALLSITES.deref() != null) { // fexpr = new ConstantExpr(new KeywordCallSite(((KeywordExpr)fexpr).k)); Expr target = analyze(context, RT.second(form)); @@ -7800,9 +7800,6 @@ private static KeywordExpr registerKeyword(Keyword keyword){ } private static int registerKeywordCallsite(Keyword keyword){ - if(!KEYWORD_CALLSITES.isBound()) - throw new IllegalAccessError("KEYWORD_CALLSITES is not bound"); - IPersistentVector keywordCallsites = (IPersistentVector) KEYWORD_CALLSITES.deref(); keywordCallsites = keywordCallsites.cons(keyword); @@ -8348,6 +8345,7 @@ public static Object compile(Reader rdr, String sourcePath, String sourceName) t COLUMN_AFTER, pushbackReader.getColumnNumber(), CONSTANTS, PersistentVector.EMPTY, CONSTANT_IDS, new IdentityHashMap(), + KEYWORD_CALLSITES, null, KEYWORDS, PersistentHashMap.EMPTY, VARS, PersistentHashMap.EMPTY ,RT.UNCHECKED_MATH, RT.UNCHECKED_MATH.deref() From d94e490fec94fa9a8466a9fb6f50c6ab3782ed0e Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Fri, 12 Sep 2025 17:09:43 -0500 Subject: [PATCH 2/2] Revert "CLJ-2919 Use KEYWORD_CALLSITES = null to signal no registration" This reverts commit d582b1f00dfc8e01e45dfa467fd6275a09005673. --- src/jvm/clojure/lang/Compiler.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index bc771e867e..28d3ab9e8f 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -211,7 +211,7 @@ public class Compiler implements Opcodes{ static final public Var CONSTANT_IDS = Var.create().setDynamic(); //vector -static final public Var KEYWORD_CALLSITES = Var.create(null).setDynamic(); +static final public Var KEYWORD_CALLSITES = Var.create().setDynamic(); //vector static final public Var PROTOCOL_CALLSITES = Var.create().setDynamic(); @@ -4389,7 +4389,7 @@ static public Expr parse(C context, ISeq form) { } } - if(fexpr instanceof KeywordExpr && RT.count(form) == 2 && KEYWORD_CALLSITES.deref() != null) + if(fexpr instanceof KeywordExpr && RT.count(form) == 2 && KEYWORD_CALLSITES.isBound()) { // fexpr = new ConstantExpr(new KeywordCallSite(((KeywordExpr)fexpr).k)); Expr target = analyze(context, RT.second(form)); @@ -7800,6 +7800,9 @@ private static KeywordExpr registerKeyword(Keyword keyword){ } private static int registerKeywordCallsite(Keyword keyword){ + if(!KEYWORD_CALLSITES.isBound()) + throw new IllegalAccessError("KEYWORD_CALLSITES is not bound"); + IPersistentVector keywordCallsites = (IPersistentVector) KEYWORD_CALLSITES.deref(); keywordCallsites = keywordCallsites.cons(keyword); @@ -8345,7 +8348,6 @@ public static Object compile(Reader rdr, String sourcePath, String sourceName) t COLUMN_AFTER, pushbackReader.getColumnNumber(), CONSTANTS, PersistentVector.EMPTY, CONSTANT_IDS, new IdentityHashMap(), - KEYWORD_CALLSITES, null, KEYWORDS, PersistentHashMap.EMPTY, VARS, PersistentHashMap.EMPTY ,RT.UNCHECKED_MATH, RT.UNCHECKED_MATH.deref()