kenhuuu commented on code in PR #2297:
URL: https://github.com/apache/tinkerpop/pull/2297#discussion_r1367387230
##########
gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/GremlinGroovysh.groovy:
##########
@@ -140,4 +171,48 @@ class GremlinGroovysh extends Groovysh {
maybeRecordResult(result)
}
+
+ private Object evaluateWithStoredBoundVars(String importsSpec,
List<String> current) {
+ Object result
+ String variableBlocks = null
+ // To make groovysh behave more like an interpreter, we need to
retrieve all bound
+ // vars at the end of script execution, and then update them into the
groovysh Binding context.
+ Set<String> boundVars =
ScriptVariableAnalyzer.getBoundVars(importsSpec + Parser.NEWLINE +
current.join(Parser.NEWLINE), interp.classLoader)
+ if (boundVars) {
+ variableBlocks = "$COLLECTED_BOUND_VARS_MAP_VARNAME = new
HashMap();"
+ boundVars.each({ String varname ->
+ // bound vars can be in global or some local scope.
+ // We discard locally scoped vars by ignoring
MissingPropertyException
+ variableBlocks += """
+try {$COLLECTED_BOUND_VARS_MAP_VARNAME[\"$varname\"] = $varname;
+} catch (MissingPropertyException e){}"""
+ })
+ }
+ // Evaluate the current buffer w/imports and dummy statement
+ List<String> buff
+ if (variableBlocks) {
+ buff = [importsSpec] + ['try {', 'true'] + current + ['} finally
{' + variableBlocks + '}']
+ } else {
+ buff = [importsSpec] + ['true'] + current
+ }
+ setLastResult(result = interp.evaluate(buff))
Review Comment:
I'm a bit concerned here that we just do setLastResult() to whatever is in
the buffer here. Notice how for remote console we normally do this with
something like `mediator.currentRemote().submit([script])`. Have you checked to
see if this is a problem?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]