Use tuples for default arguments in DAP
authorTom Tromey <tromey@adacore.com>
Fri, 12 May 2023 14:28:28 +0000 (08:28 -0600)
committerTom Tromey <tromey@adacore.com>
Mon, 12 Jun 2023 18:09:28 +0000 (12:09 -0600)
My co-worker Kévin taught me that using a mutable object as a default
argument in Python is somewhat dangerous, because the object is
created a single time (when the function is defined), and so if it is
mutated in the body of the function, the changes will stick around.

This patch changes the cases like this in DAP to use () rather than []
as the default.  This patch is merely preventative, as no bugs like
this are in the code.

gdb/python/lib/gdb/dap/breakpoint.py
gdb/python/lib/gdb/dap/launch.py

index 877069f79a597f9ed29dcfff3bda943ee05295d5..8ffa18290311b6b66dffcbcb31ffc22459ec161e 100644 (file)
@@ -96,7 +96,7 @@ def _set_breakpoints(kind, specs):
 
 
 @request("setBreakpoints")
-def set_breakpoint(*, source, breakpoints=[], **args):
+def set_breakpoint(*, source, breakpoints=(), **args):
     if "path" not in source:
         result = []
     else:
@@ -188,7 +188,7 @@ def _set_exception_catchpoints(filter_options):
     "label": "Ada exceptions",
     "supportsCondition": True,
 }))
-def set_exception_breakpoints(*, filters, filterOptions=[], **args):
+def set_exception_breakpoints(*, filters, filterOptions=(), **args):
     # Convert the 'filters' to the filter-options style.
     options = [{"filterId": filter} for filter in filters]
     options.extend(filterOptions)
index a46be1dcca2534cb5cdb6d2e2faa4f17634aa154..dc4bf3c6d150c8659fa0b43466ca6d3ac3c41351 100644 (file)
@@ -36,7 +36,7 @@ def _set_args_env(args, env):
 # from implementations.  Any additions or changes here should be
 # documented in the gdb manual.
 @request("launch")
-def launch(*, program=None, args=[], env=None, **extra):
+def launch(*, program=None, args=(), env=None, **extra):
     if program is not None:
         global _program
         _program = program