[code-reflection] RFR: Support storing the code that builds the code model [v18]
Maurizio Cimadamore
mcimadamore at openjdk.org
Thu Mar 13 15:04:23 UTC 2025
On Wed, 12 Mar 2025 18:00:05 GMT, Mourad Abbay <mabbay at openjdk.org> wrote:
>> In this PR we allow the user to decide how to store the code model. The first option is `TEXT`, if this is selected, we store the textual representation of the code model. The second option is `CODE_BUILDR`, if this is selected, we store the code that builds the code model. All work done here is around the second option, because the first option is already supported.
>
> Mourad Abbay has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 20 additional commits since the last revision:
>
> - Merge branch 'code-reflection' into code-model-storage-option
> - Load OpFactory and TypeElementFactory before invocation of opMethod only if the opMethod has there params.
> - Fix the remaining compiler tests failures
> - Fix some of the test failures (3 remains)
> - Fix the remaining test failures of SwitchExpressionTest2
> - Fix almost all test failures of SwitchExpressionTest2 (one remaining)
> - Pass arrayType instead of eleType in OpBuilder.buildArray
> - Ensure that block params are inserted in the correct order
> - Add missing imports
> - Merge branch 'code-reflection' into code-model-storage-option
> - ... and 10 more: https://git.openjdk.org/babylon/compare/1fa13c4a...966005ce
src/jdk.incubator.code/share/classes/jdk/incubator/code/internal/CodeModelToAST.java line 239:
> 237: }
> 238:
> 239: public static CoreOp.FuncOp addVarsWhenNecessary(CoreOp.FuncOp funcOp) {
Maybe I'm missing something obvious. But if you have something like:
func @"f" ()java.util.Map -> {
%0 : java.util.Map<java.lang.Integer, java.lang.Integer> = new @"func<java.util.HashMap>";
%1 : int = constant @"1";
%2 : int = constant @"2";
%3 : java.lang.Object = invoke %0 %1 %2 @"java.util.Map::put(java.lang.Object, java.lang.Object)java.lang.Object";
return %0;
}
Can't we translate as:
Map $0 = new HashMap();
int $1 = 1;
int $2 = 3;
Object $3 = $0.put($1, $2);
return $0;
Note how this translation is very 1-1 and direct, and doesn't require any adaptation step in the model. We just emit a new local variable for each op we see in the body -- and then refer to operands via their corresponding (locally declared) variable.
-------------
PR Review Comment: https://git.openjdk.org/babylon/pull/305#discussion_r1993725923
More information about the babylon-dev
mailing list