From d9fc7b2af1fbb55f9635d33d7c50cd63838fe893 Mon Sep 17 00:00:00 2001 From: Michael Born Date: Fri, 5 Jan 2024 09:04:18 -0500 Subject: [PATCH] WIP: Refactor function invokations to use safe context for isNull arguments This is not currently working (yet), but the idea is to support safe referencing of non-existent variables. --- .../BoxFunctionInvocationTransformer.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/ortus/boxlang/transpiler/transformer/expression/BoxFunctionInvocationTransformer.java b/src/main/java/ortus/boxlang/transpiler/transformer/expression/BoxFunctionInvocationTransformer.java index 2a8fdff3d..752bc9629 100644 --- a/src/main/java/ortus/boxlang/transpiler/transformer/expression/BoxFunctionInvocationTransformer.java +++ b/src/main/java/ortus/boxlang/transpiler/transformer/expression/BoxFunctionInvocationTransformer.java @@ -35,19 +35,24 @@ public BoxFunctionInvocationTransformer( JavaTranspiler transpiler ) { @Override public Node transform( BoxNode node, TransformerContext context ) throws IllegalStateException { - BoxFunctionInvocation function = ( BoxFunctionInvocation ) node; - String side = context == TransformerContext.NONE ? "" : "(" + context.toString() + ") "; + BoxFunctionInvocation function = ( BoxFunctionInvocation ) node; + String methodName = function.getName().getName(); + boolean isSafeMethodCall = methodName.equalsIgnoreCase( "isnull" ); + TransformerContext safe = isSafeMethodCall ? TransformerContext.SAFE : context; + String side = safe == TransformerContext.NONE ? "" : "(" + safe.toString() + ") "; + logger.info( side + node.getSourceText() ); Map values = new HashMap<>() { { - put( "functionName", createKey( function.getName().getName() ).toString() ); + put( "functionName", createKey( methodName ).toString() ); put( "contextName", transpiler.peekContextName() ); } }; + for ( int i = 0; i < function.getArguments().size(); i++ ) { - Expression expr = ( Expression ) transpiler.transform( function.getArguments().get( i ) ); + Expression expr = ( Expression ) transpiler.transform( function.getArguments().get( i ), safe ); values.put( "arg" + i, expr.toString() ); } String template = getTemplate( function );