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]

Reply via email to