summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/python_api/section/TestSectionAPI.py
diff options
context:
space:
mode:
authorSimon Tatham <simon.tatham@arm.com>2020-01-14 09:10:18 +0000
committerSimon Tatham <simon.tatham@arm.com>2020-01-14 10:19:53 +0000
commit3388b0f59dcc7813278c753f96b66229f290cc59 (patch)
treed64f8dcbead51b2deb74e75afe7f86b4516bb5e5 /lldb/packages/Python/lldbsuite/test/python_api/section/TestSectionAPI.py
parent45924eb4671692b3fa9fd52fe39c81ec0647a848 (diff)
downloadbcm5719-llvm-3388b0f59dcc7813278c753f96b66229f290cc59.tar.gz
bcm5719-llvm-3388b0f59dcc7813278c753f96b66229f290cc59.zip
[TableGen] Introduce a `defvar` statement.
Summary: This allows you to define a global or local variable to an arbitrary value, and refer to it in subsequent definitions. The main use I anticipate for this is if you have to compute some difficult function of the parameters of a multiclass, and then use it many times. For example: multiclass Foo<int i, string s> { defvar op = !cast<BaseClass>("whatnot_" # s # "_" # i); def myRecord { dag a = (op this, (op that, the other), (op x, y, z)); int b = op.subfield; } def myOtherRecord<"template params including", op>; } There are a couple of ways to do this already, but they're not really satisfactory. You can replace `defvar x = y` with a loop over a singleton list, `foreach x = [y] in { ... }` - but that's unintuitive to someone who hasn't seen that workaround idiom before, and requires an extra pair of braces that you often didn't really want. Or you can define a nested pair of multiclasses, with the inner one taking `x` as a template parameter, and the outer one instantiating it just once with the desired value of `x` computed from its other parameters - but that makes it awkward to sequentially compute each value based on the previous ones. I think `defvar` makes things considerably easier. You can also use `defvar` at the top level, where it inserts globals into the same map used by `defset`. That allows you to define global constants without having to make a dummy record for them to live in: defvar MAX_BUFSIZE = 512; // previously: // def Dummy { int MAX_BUFSIZE = 512; } // and then refer to Dummy.MAX_BUFSIZE everywhere Reviewers: nhaehnle, hfinkel Reviewed By: hfinkel Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D71407
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/python_api/section/TestSectionAPI.py')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud