[lldb][test] Modernize asserts (#82503)
This uses [teyit](https://pypi.org/project/teyit/) to modernize asserts, as recommended by the [unittest release notes](https://docs.python.org/3.12/whatsnew/3.12.html#id3). For example, `assertTrue(a == b)` is replaced with `assertEqual(a, b)`. This produces better error messages, e.g. `error: unexpectedly found 1 and 2 to be different` instead of `error: False`.
This commit is contained in:
@@ -369,7 +369,7 @@ class EventAPITestCase(TestBase):
|
||||
# Now create a breakpoint on main.c by name 'c'.
|
||||
bkpt1 = target.BreakpointCreateByName("c", "a.out")
|
||||
self.trace("breakpoint:", bkpt1)
|
||||
self.assertTrue(bkpt1.GetNumLocations() == 1, VALID_BREAKPOINT)
|
||||
self.assertEqual(bkpt1.GetNumLocations(), 1, VALID_BREAKPOINT)
|
||||
|
||||
self.primary_listener = lldb.SBListener("my listener")
|
||||
self.shadow_listener = lldb.SBListener("shadow listener")
|
||||
@@ -431,11 +431,11 @@ class EventAPITestCase(TestBase):
|
||||
|
||||
main_spec = lldb.SBFileSpec("main.c")
|
||||
bkpt2 = target.BreakpointCreateBySourceRegex("b.2. returns %d", main_spec)
|
||||
self.assertTrue(bkpt2.GetNumLocations() > 0, "BP2 worked")
|
||||
self.assertGreater(bkpt2.GetNumLocations(), 0, "BP2 worked")
|
||||
bkpt2.SetAutoContinue(True)
|
||||
|
||||
bkpt3 = target.BreakpointCreateBySourceRegex("a.3. returns %d", main_spec)
|
||||
self.assertTrue(bkpt3.GetNumLocations() > 0, "BP3 worked")
|
||||
self.assertGreater(bkpt3.GetNumLocations(), 0, "BP3 worked")
|
||||
|
||||
state = lldb.eStateStopped
|
||||
restarted = False
|
||||
|
||||
@@ -682,25 +682,25 @@ class FileHandleTestCase(lldbtest.TestBase):
|
||||
def test_identity(self):
|
||||
f = io.StringIO()
|
||||
sbf = lldb.SBFile(f)
|
||||
self.assertTrue(f is sbf.GetFile())
|
||||
self.assertIs(f, sbf.GetFile())
|
||||
sbf.Close()
|
||||
self.assertTrue(f.closed)
|
||||
|
||||
f = io.StringIO()
|
||||
sbf = lldb.SBFile.Create(f, borrow=True)
|
||||
self.assertTrue(f is sbf.GetFile())
|
||||
self.assertIs(f, sbf.GetFile())
|
||||
sbf.Close()
|
||||
self.assertFalse(f.closed)
|
||||
|
||||
with open(self.out_filename, "w") as f:
|
||||
sbf = lldb.SBFile(f)
|
||||
self.assertTrue(f is sbf.GetFile())
|
||||
self.assertIs(f, sbf.GetFile())
|
||||
sbf.Close()
|
||||
self.assertTrue(f.closed)
|
||||
|
||||
with open(self.out_filename, "w") as f:
|
||||
sbf = lldb.SBFile.Create(f, borrow=True)
|
||||
self.assertFalse(f is sbf.GetFile())
|
||||
self.assertIsNot(f, sbf.GetFile())
|
||||
sbf.Write(b"foobar\n")
|
||||
self.assertEqual(f.fileno(), sbf.GetFile().fileno())
|
||||
sbf.Close()
|
||||
@@ -711,7 +711,7 @@ class FileHandleTestCase(lldbtest.TestBase):
|
||||
|
||||
with open(self.out_filename, "wb") as f:
|
||||
sbf = lldb.SBFile.Create(f, borrow=True, force_io_methods=True)
|
||||
self.assertTrue(f is sbf.GetFile())
|
||||
self.assertIs(f, sbf.GetFile())
|
||||
sbf.Write(b"foobar\n")
|
||||
self.assertEqual(f.fileno(), sbf.GetFile().fileno())
|
||||
sbf.Close()
|
||||
@@ -722,7 +722,7 @@ class FileHandleTestCase(lldbtest.TestBase):
|
||||
|
||||
with open(self.out_filename, "wb") as f:
|
||||
sbf = lldb.SBFile.Create(f, force_io_methods=True)
|
||||
self.assertTrue(f is sbf.GetFile())
|
||||
self.assertIs(f, sbf.GetFile())
|
||||
sbf.Write(b"foobar\n")
|
||||
self.assertEqual(f.fileno(), sbf.GetFile().fileno())
|
||||
sbf.Close()
|
||||
|
||||
@@ -25,7 +25,7 @@ class SBFrameFindValueTestCase(TestBase):
|
||||
breakpoint = target.BreakpointCreateBySourceRegex(
|
||||
"Set breakpoint here", lldb.SBFileSpec("main.cpp")
|
||||
)
|
||||
self.assertTrue(breakpoint.GetNumLocations() > 0, VALID_BREAKPOINT)
|
||||
self.assertGreater(breakpoint.GetNumLocations(), 0, VALID_BREAKPOINT)
|
||||
|
||||
# Launch the process, and do not stop at the entry point.
|
||||
process = target.LaunchSimple(None, None, self.get_process_working_directory())
|
||||
|
||||
@@ -19,6 +19,6 @@ class FormatAPITestCase(TestBase):
|
||||
self.assertTrue(error.Fail())
|
||||
|
||||
format = lldb.SBFormat("${frame.index}", error)
|
||||
self.assertIs(error.GetCString(), None)
|
||||
self.assertIsNone(error.GetCString())
|
||||
self.assertTrue(format)
|
||||
self.assertTrue(error.Success())
|
||||
|
||||
@@ -192,7 +192,7 @@ class SBFormattersAPITestCase(TestBase):
|
||||
)
|
||||
self.assertTrue(foo_var.IsValid(), "could not find foo")
|
||||
|
||||
self.assertFalse(foo_var.GetNumChildren() == 2, "still seeing synthetic value")
|
||||
self.assertNotEqual(foo_var.GetNumChildren(), 2, "still seeing synthetic value")
|
||||
|
||||
filter = lldb.SBTypeFilter(0)
|
||||
filter.AppendExpressionPath("A")
|
||||
@@ -457,9 +457,8 @@ class SBFormattersAPITestCase(TestBase):
|
||||
"frame variable e2", substrs=["I am an empty Empty2 {}"], matching=False
|
||||
)
|
||||
|
||||
self.assertTrue(
|
||||
self.dbg.GetCategory(lldb.eLanguageTypeObjC) is not None,
|
||||
"ObjC category is None",
|
||||
self.assertIsNotNone(
|
||||
self.dbg.GetCategory(lldb.eLanguageTypeObjC), "ObjC category is None"
|
||||
)
|
||||
|
||||
def test_force_synth_off(self):
|
||||
@@ -518,8 +517,8 @@ class SBFormattersAPITestCase(TestBase):
|
||||
int_vector = frame.FindVariable("int_vector")
|
||||
if self.TraceOn():
|
||||
print(int_vector)
|
||||
self.assertFalse(
|
||||
int_vector.GetNumChildren() == 0, '"physical" vector is not empty'
|
||||
self.assertNotEqual(
|
||||
int_vector.GetNumChildren(), 0, '"physical" vector is not empty'
|
||||
)
|
||||
|
||||
self.runCmd("settings set target.enable-synthetic-value true")
|
||||
|
||||
@@ -56,9 +56,9 @@ class TestGetVariables(TestBase):
|
||||
breakpoint2 = target.BreakpointCreateByLocation(self.source, line2)
|
||||
breakpoint3 = target.BreakpointCreateByLocation(self.source, line3)
|
||||
|
||||
self.assertTrue(breakpoint1.GetNumLocations() >= 1, PROCESS_IS_VALID)
|
||||
self.assertTrue(breakpoint2.GetNumLocations() >= 1, PROCESS_IS_VALID)
|
||||
self.assertTrue(breakpoint3.GetNumLocations() >= 1, PROCESS_IS_VALID)
|
||||
self.assertGreaterEqual(breakpoint1.GetNumLocations(), 1, PROCESS_IS_VALID)
|
||||
self.assertGreaterEqual(breakpoint2.GetNumLocations(), 1, PROCESS_IS_VALID)
|
||||
self.assertGreaterEqual(breakpoint3.GetNumLocations(), 1, PROCESS_IS_VALID)
|
||||
|
||||
# Register our shared libraries for remote targets so they get
|
||||
# automatically uploaded
|
||||
|
||||
@@ -17,7 +17,7 @@ class ModuleAndSectionAPIsTestCase(TestBase):
|
||||
|
||||
target = self.dbg.CreateTarget(exe)
|
||||
self.assertTrue(target, VALID_TARGET)
|
||||
self.assertTrue(target.GetNumModules() > 0)
|
||||
self.assertGreater(target.GetNumModules(), 0)
|
||||
|
||||
# Hide stdout if not running with '-t' option.
|
||||
if not self.TraceOn():
|
||||
@@ -62,7 +62,7 @@ class ModuleAndSectionAPIsTestCase(TestBase):
|
||||
|
||||
target = self.dbg.CreateTarget(exe)
|
||||
self.assertTrue(target, VALID_TARGET)
|
||||
self.assertTrue(target.GetNumModules() > 0)
|
||||
self.assertGreater(target.GetNumModules(), 0)
|
||||
|
||||
# Hide stdout if not running with '-t' option.
|
||||
if not self.TraceOn():
|
||||
@@ -102,7 +102,7 @@ class ModuleAndSectionAPIsTestCase(TestBase):
|
||||
|
||||
target = self.dbg.CreateTarget(exe)
|
||||
self.assertTrue(target, VALID_TARGET)
|
||||
self.assertTrue(target.GetNumModules() > 0)
|
||||
self.assertGreater(target.GetNumModules(), 0)
|
||||
|
||||
# Hide stdout if not running with '-t' option.
|
||||
if not self.TraceOn():
|
||||
|
||||
@@ -324,7 +324,7 @@ class ProcessAPITestCase(TestBase):
|
||||
|
||||
if self.TraceOn():
|
||||
print("process state:", state_type_to_str(process.GetState()))
|
||||
self.assertTrue(process.GetState() != lldb.eStateConnected)
|
||||
self.assertNotEqual(process.GetState(), lldb.eStateConnected)
|
||||
|
||||
error = lldb.SBError()
|
||||
success = process.RemoteLaunch(
|
||||
|
||||
@@ -175,7 +175,7 @@ class ProcessIOTestCase(TestBase):
|
||||
self.breakpoint = self.target.BreakpointCreateBySourceRegex(
|
||||
"Set breakpoint here", lldb.SBFileSpec("main.c")
|
||||
)
|
||||
self.assertTrue(self.breakpoint.GetNumLocations() > 0, VALID_BREAKPOINT)
|
||||
self.assertGreater(self.breakpoint.GetNumLocations(), 0, VALID_BREAKPOINT)
|
||||
|
||||
# Launch the process, and do not stop at the entry point.
|
||||
error = lldb.SBError()
|
||||
@@ -223,11 +223,7 @@ class ProcessIOTestCase(TestBase):
|
||||
|
||||
for line in self.lines:
|
||||
check_line = "input line to stdout: %s" % (line)
|
||||
self.assertTrue(
|
||||
check_line in output, "verify stdout line shows up in STDOUT"
|
||||
)
|
||||
self.assertIn(check_line, output, "verify stdout line shows up in STDOUT")
|
||||
for line in self.lines:
|
||||
check_line = "input line to stderr: %s" % (line)
|
||||
self.assertTrue(
|
||||
check_line in error, "verify stderr line shows up in STDERR"
|
||||
)
|
||||
self.assertIn(check_line, error, "verify stderr line shows up in STDERR")
|
||||
|
||||
@@ -90,8 +90,8 @@ class SBDataAPICase(TestBase):
|
||||
self.assertTrue(
|
||||
(low == 9 and high == 0) or (low == 0 and high == 9), "foo[0].b == 9"
|
||||
)
|
||||
self.assertTrue(
|
||||
fabs(data.GetFloat(error, offset) - 3.14) < 1, "foo[0].c == 3.14"
|
||||
self.assertLess(
|
||||
fabs(data.GetFloat(error, offset) - 3.14), 1, "foo[0].c == 3.14"
|
||||
)
|
||||
self.assertSuccess(error)
|
||||
offset += 4
|
||||
@@ -151,7 +151,7 @@ class SBDataAPICase(TestBase):
|
||||
self.assertEqual(data.uint32[0], 8, "then foo[1].a == 8")
|
||||
self.assertEqual(data.uint32[1], 7, "then foo[1].b == 7")
|
||||
# exploiting that sizeof(uint32) == sizeof(float)
|
||||
self.assertTrue(fabs(data.float[2] - 3.14) < 1, "foo[1].c == 3.14")
|
||||
self.assertLess(fabs(data.float[2] - 3.14), 1, "foo[1].c == 3.14")
|
||||
|
||||
self.runCmd("n")
|
||||
|
||||
@@ -160,8 +160,8 @@ class SBDataAPICase(TestBase):
|
||||
offset += 4
|
||||
self.assert_data(data.GetUnsignedInt32, offset, 7)
|
||||
offset += 4
|
||||
self.assertTrue(
|
||||
fabs(data.GetFloat(error, offset) - 3.14) < 1, "foo[1].c == 3.14"
|
||||
self.assertLess(
|
||||
fabs(data.GetFloat(error, offset) - 3.14), 1, "foo[1].c == 3.14"
|
||||
)
|
||||
self.assertSuccess(error)
|
||||
|
||||
@@ -172,8 +172,8 @@ class SBDataAPICase(TestBase):
|
||||
offset += 4
|
||||
self.assert_data(data.GetUnsignedInt32, offset, 7)
|
||||
offset += 4
|
||||
self.assertTrue(
|
||||
fabs(data.GetFloat(error, offset) - 6.28) < 1, "foo[1].c == 6.28"
|
||||
self.assertLess(
|
||||
fabs(data.GetFloat(error, offset) - 6.28), 1, "foo[1].c == 6.28"
|
||||
)
|
||||
self.assertSuccess(error)
|
||||
|
||||
@@ -187,14 +187,14 @@ class SBDataAPICase(TestBase):
|
||||
offset += 4
|
||||
self.assert_data(data.GetUnsignedInt32, offset, 2)
|
||||
offset += 4
|
||||
self.assertTrue(fabs(data.GetFloat(error, offset) - 3) < 1, "barfoo[0].c == 3")
|
||||
self.assertLess(fabs(data.GetFloat(error, offset) - 3), 1, "barfoo[0].c == 3")
|
||||
self.assertSuccess(error)
|
||||
offset += 4
|
||||
self.assert_data(data.GetUnsignedInt32, offset, 4)
|
||||
offset += 4
|
||||
self.assert_data(data.GetUnsignedInt32, offset, 5)
|
||||
offset += 4
|
||||
self.assertTrue(fabs(data.GetFloat(error, offset) - 6) < 1, "barfoo[1].c == 6")
|
||||
self.assertLess(fabs(data.GetFloat(error, offset) - 6), 1, "barfoo[1].c == 6")
|
||||
self.assertSuccess(error)
|
||||
|
||||
new_object = barfoo.CreateValueFromData(
|
||||
@@ -332,16 +332,16 @@ class SBDataAPICase(TestBase):
|
||||
data2 = lldb.SBData.CreateDataFromDoubleArray(
|
||||
process.GetByteOrder(), process.GetAddressByteSize(), [3.14, 6.28, 2.71]
|
||||
)
|
||||
self.assertTrue(
|
||||
fabs(data2.GetDouble(error, 0) - 3.14) < 0.5, "double data2[0] = 3.14"
|
||||
self.assertLess(
|
||||
fabs(data2.GetDouble(error, 0) - 3.14), 0.5, "double data2[0] = 3.14"
|
||||
)
|
||||
self.assertSuccess(error)
|
||||
self.assertTrue(
|
||||
fabs(data2.GetDouble(error, 8) - 6.28) < 0.5, "double data2[1] = 6.28"
|
||||
self.assertLess(
|
||||
fabs(data2.GetDouble(error, 8) - 6.28), 0.5, "double data2[1] = 6.28"
|
||||
)
|
||||
self.assertSuccess(error)
|
||||
self.assertTrue(
|
||||
fabs(data2.GetDouble(error, 16) - 2.71) < 0.5, "double data2[2] = 2.71"
|
||||
self.assertLess(
|
||||
fabs(data2.GetDouble(error, 16) - 2.71), 0.5, "double data2[2] = 2.71"
|
||||
)
|
||||
self.assertSuccess(error)
|
||||
|
||||
@@ -380,8 +380,9 @@ class SBDataAPICase(TestBase):
|
||||
data2.uint64[4], 5, "read_data_helper failure: set data2[4] = 5"
|
||||
)
|
||||
|
||||
self.assertTrue(
|
||||
data2.uint64[0:2] == [1, 2],
|
||||
self.assertEqual(
|
||||
data2.uint64[0:2],
|
||||
[1, 2],
|
||||
"read_data_helper failure: set data2[0:2] = [1,2]",
|
||||
)
|
||||
|
||||
@@ -417,26 +418,29 @@ class SBDataAPICase(TestBase):
|
||||
)
|
||||
|
||||
data2.SetDataFromDoubleArray([3.14, 6.28, 2.71])
|
||||
self.assertTrue(
|
||||
fabs(data2.GetDouble(error, 0) - 3.14) < 0.5, "set double data2[0] = 3.14"
|
||||
self.assertLess(
|
||||
fabs(data2.GetDouble(error, 0) - 3.14), 0.5, "set double data2[0] = 3.14"
|
||||
)
|
||||
self.assertTrue(
|
||||
fabs(data2.GetDouble(error, 8) - 6.28) < 0.5, "set double data2[1] = 6.28"
|
||||
self.assertLess(
|
||||
fabs(data2.GetDouble(error, 8) - 6.28), 0.5, "set double data2[1] = 6.28"
|
||||
)
|
||||
self.assertTrue(
|
||||
fabs(data2.GetDouble(error, 16) - 2.71) < 0.5, "set double data2[2] = 2.71"
|
||||
self.assertLess(
|
||||
fabs(data2.GetDouble(error, 16) - 2.71), 0.5, "set double data2[2] = 2.71"
|
||||
)
|
||||
|
||||
self.assertTrue(
|
||||
fabs(data2.double[0] - 3.14) < 0.5,
|
||||
self.assertLess(
|
||||
fabs(data2.double[0] - 3.14),
|
||||
0.5,
|
||||
"read_data_helper failure: set double data2[0] = 3.14",
|
||||
)
|
||||
self.assertTrue(
|
||||
fabs(data2.double[1] - 6.28) < 0.5,
|
||||
self.assertLess(
|
||||
fabs(data2.double[1] - 6.28),
|
||||
0.5,
|
||||
"read_data_helper failure: set double data2[1] = 6.28",
|
||||
)
|
||||
self.assertTrue(
|
||||
fabs(data2.double[2] - 2.71) < 0.5,
|
||||
self.assertLess(
|
||||
fabs(data2.double[2] - 2.71),
|
||||
0.5,
|
||||
"read_data_helper failure: set double data2[2] = 2.71",
|
||||
)
|
||||
|
||||
@@ -452,7 +456,8 @@ class SBDataAPICase(TestBase):
|
||||
"%s(error, %s) did not succeed: %s"
|
||||
% (func.__name__, arg, stream.GetData()),
|
||||
)
|
||||
self.assertTrue(
|
||||
expected == result,
|
||||
self.assertEqual(
|
||||
expected,
|
||||
result,
|
||||
"%s(error, %s) == %s != %s" % (func.__name__, arg, result, expected),
|
||||
)
|
||||
|
||||
@@ -51,7 +51,7 @@ class SBModuleAPICase(TestBase):
|
||||
)
|
||||
self.assertTrue(error.Success() and process, PROCESS_IS_VALID)
|
||||
main_module = target.FindModule(lldb.SBFileSpec("a.out"))
|
||||
self.assertTrue(main_module is not None)
|
||||
self.assertIsNotNone(main_module)
|
||||
self.assertFalse(
|
||||
main_module.IsFileBacked(),
|
||||
"The module should not be backed by a file on disk.",
|
||||
|
||||
@@ -112,7 +112,7 @@ class TargetAPITestCase(TestBase):
|
||||
target = self.create_simple_target("b.out")
|
||||
|
||||
abi_pre_launch = target.GetABIName()
|
||||
self.assertTrue(len(abi_pre_launch) != 0, "Got an ABI string")
|
||||
self.assertNotEqual(len(abi_pre_launch), 0, "Got an ABI string")
|
||||
|
||||
breakpoint = target.BreakpointCreateByLocation("main.c", self.line_main)
|
||||
self.assertTrue(breakpoint, VALID_BREAKPOINT)
|
||||
|
||||
@@ -54,7 +54,7 @@ class TypeAndTypeListTestCase(TestBase):
|
||||
% type_list.GetSize()
|
||||
)
|
||||
# a second Task make be scared up by the Objective-C runtime
|
||||
self.assertTrue(len(type_list) >= 1)
|
||||
self.assertGreaterEqual(len(type_list), 1)
|
||||
for type in type_list:
|
||||
self.assertTrue(type)
|
||||
self.DebugSBType(type)
|
||||
@@ -133,7 +133,7 @@ class TypeAndTypeListTestCase(TestBase):
|
||||
self.DebugSBType(union_type)
|
||||
|
||||
# Check that we don't find indirectly nested types
|
||||
self.assertTrue(enum_type.size == 1)
|
||||
self.assertEqual(enum_type.size, 1)
|
||||
|
||||
invalid_type = task_type.FindDirectNestedType("E2")
|
||||
self.assertFalse(invalid_type)
|
||||
|
||||
@@ -128,7 +128,7 @@ class ChangeValueAPITestCase(TestBase):
|
||||
"Val - 12345 Mine - 55, 98765, 55555555. Ptr - 66, 98765, 66666666"
|
||||
)
|
||||
stdout = process.GetSTDOUT(1000)
|
||||
self.assertTrue(expected_value in stdout, "STDOUT showed changed values.")
|
||||
self.assertIn(expected_value, stdout, "STDOUT showed changed values.")
|
||||
|
||||
# Finally, change the stack pointer to 0, and we should not make it to
|
||||
# our end breakpoint.
|
||||
@@ -150,8 +150,8 @@ class ChangeValueAPITestCase(TestBase):
|
||||
|
||||
self.assertState(process.GetState(), lldb.eStateStopped)
|
||||
thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint)
|
||||
self.assertTrue(
|
||||
thread is None,
|
||||
self.assertIsNone(
|
||||
thread,
|
||||
"We should not have managed to hit our second breakpoint with sp == 1",
|
||||
)
|
||||
|
||||
|
||||
@@ -47,4 +47,4 @@ class LibcxxChangeValueTestCase(TestBase):
|
||||
result = inner_val.SetValueFromCString("42")
|
||||
self.assertTrue(result, "Setting val returned True.")
|
||||
result = inner_val.GetValueAsUnsigned()
|
||||
self.assertTrue(result == 42, "Got correct value (42)")
|
||||
self.assertEqual(result, 42, "Got correct value (42)")
|
||||
|
||||
@@ -44,10 +44,10 @@ class LibcxxChangeValueTestCase(TestBase):
|
||||
self.assertTrue(val_value.IsValid(), "Got the SBValue for val")
|
||||
pair0 = val_value.GetChildMemberWithName("[0]")
|
||||
self.assertTrue(pair0.IsValid(), "Got the SBValue for [0]")
|
||||
self.assertTrue(pair0.GetNumChildren() == 2, "Got 2 children")
|
||||
self.assertEqual(pair0.GetNumChildren(), 2, "Got 2 children")
|
||||
pair0_second = pair0.GetChildMemberWithName("second")
|
||||
self.assertTrue(pair0_second.IsValid(), "Got the SBValue for [0].second")
|
||||
result = pair0_second.SetValueFromCString("12345")
|
||||
self.assertTrue(result, "Setting val returned True.")
|
||||
result = pair0_second.GetValueAsUnsigned()
|
||||
self.assertTrue(result == 12345, "Got correct value (12345)")
|
||||
self.assertEqual(result, 12345, "Got correct value (12345)")
|
||||
|
||||
@@ -66,7 +66,7 @@ class WatchpointIteratorTestCase(TestBase):
|
||||
self.assertEqual(target.GetNumWatchpoints(), 1)
|
||||
self.assertTrue(watchpoint.IsEnabled())
|
||||
watch_id = watchpoint.GetID()
|
||||
self.assertTrue(watch_id != 0)
|
||||
self.assertNotEqual(watch_id, 0)
|
||||
|
||||
# Continue. Expect the program to stop due to the variable being
|
||||
# written to.
|
||||
|
||||
Reference in New Issue
Block a user