mirror of
https://github.com/intel/llvm.git
synced 2026-02-08 17:28:30 +08:00
[dexter] Add keyword argument 'on_line' to DexLabel
Add optional keyword argument 'on_line' to DexLabel to label the specifed line instead of the line the command is found on. This will be helpful when used alongside DexDeclareFile (D99651). Reviewed By: TWeaver Differential Revision: https://reviews.llvm.org/D101055
This commit is contained in:
@@ -205,14 +205,17 @@ large test cases that would normally take much longer to complete.
|
||||
|
||||
----
|
||||
## DexLabel
|
||||
DexLabel(name)
|
||||
DexLabel(name [, **on_line])
|
||||
|
||||
Args:
|
||||
name (str): A unique name for this line.
|
||||
|
||||
Keyword args:
|
||||
on_line (int): Specify a line number to label.
|
||||
|
||||
### Description
|
||||
Name the line this command is found on. Line names can be referenced by other
|
||||
commands expecting line number arguments.
|
||||
Name the line this command is found on or 'on_line' if it is provided. Line
|
||||
names can be referenced by other commands expecting line number arguments.
|
||||
For example, `DexExpectWatchValues(..., on_line='my_line_name')`.
|
||||
|
||||
### Heuristic
|
||||
|
||||
@@ -12,16 +12,27 @@ from dex.command.CommandBase import CommandBase
|
||||
|
||||
|
||||
class DexLabel(CommandBase):
|
||||
def __init__(self, label):
|
||||
def __init__(self, label, **kwargs):
|
||||
|
||||
if not isinstance(label, str):
|
||||
raise TypeError('invalid argument type')
|
||||
|
||||
try:
|
||||
self.on_line = kwargs.pop('on_line')
|
||||
except KeyError:
|
||||
# We cannot use self.lineno because it hasn't been set yet.
|
||||
pass
|
||||
if kwargs:
|
||||
raise TypeError(f'unexpected named args: {", ".join(kwargs)}')
|
||||
|
||||
self._label = label
|
||||
super(DexLabel, self).__init__()
|
||||
|
||||
def get_line(self):
|
||||
return getattr(self, 'on_line', self.lineno)
|
||||
|
||||
def get_as_pair(self):
|
||||
return (self._label, self.lineno)
|
||||
return (self._label, self.get_line())
|
||||
|
||||
@staticmethod
|
||||
def get_name():
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// Purpose:
|
||||
// Check that bad keyword args in \DexLabel are reported.
|
||||
// Use --binary switch to trick dexter into skipping the build step.
|
||||
//
|
||||
// RUN: not %dexter_base test --binary %s --debugger 'lldb' -- %s | FileCheck %s
|
||||
// CHECK: parser error:{{.*}}err_label_kwarg.cpp(8): unexpected named args: bad_arg
|
||||
|
||||
// DexLabel('test', bad_arg=0)
|
||||
@@ -0,0 +1,14 @@
|
||||
// Purpose:
|
||||
// Check that the optional keyword argument 'on_line' makes a \DexLabel label
|
||||
// that line instead of the line the command is found on.
|
||||
//
|
||||
// RUN: %dexter_regression_test -- %s | FileCheck %s
|
||||
// CHECK: label_another_line.cpp: (1.0000)
|
||||
|
||||
int main() {
|
||||
int result = 0;
|
||||
return result;
|
||||
}
|
||||
|
||||
// DexLabel('test', on_line=10)
|
||||
// DexExpectWatchValue('result', '0', on_line='test')
|
||||
Reference in New Issue
Block a user