bulbazord added inline comments.

================
Comment at: 
lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp:1314-1324
+    if (line.startswith("return ")) {
+      llvm::StringRef return_val =
+          line.substr(llvm::StringRef("return ").size());
+      sstr.Printf("      __return_val = %s", return_val.data());
+    } else {
+      sstr.Printf("      %s", line.data());
+    }
----------------
bulbazord wrote:
> I feel like this is subtly wrong. For example, given the user provided 
> function:
> ```
> def func(frame, bp_loc, internal_dict):
>     if frame.name == "main":
>         return True
>     return False
> ```
> 
> This will be transformed into:
> ```
> def __user_callback():
>     nonlocal __return_val
>     if frame.name == "main":
>         __return_val = True
>     __return_val = False
> ```
> Assume frame.name == "main": In the first one, we will return True. In the 
> second one, `__return_val` will be False. 
> 
> Maybe we can insert the input into `__user_callback` as-is and do 
> `__return_val = __user_callback()`?
To be clear, I think this will work with `-F` because there's just one `return` 
statement inserted a few frames up.

This also may fail with `-o` if you concatenate multiple lines in one. For 
example, `-o "print('foo'); return frame.name == 'main'"`. This is one line, so 
we'll never set `__return_val` to `frame.name == 'main'`. You might need to do 
further processing on the input to break it into multiple lines.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144688/new/

https://reviews.llvm.org/D144688

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to