labath wrote:
> > * The expression `foo["bar"]` tries:
> >
> > * `foo.GetChildWithName("bar")`
> > * `foo.GetChildWithName("[bar]")`
> > * The expression `foo[<expr>]` -- `expr` is evaluated and treated as
> > cases above. If the result of `expr` is not a number or a string -- produce
> > an error
>
>
> I think this is an interesting idea whose usefulness mainly depends on what
> kind of string operations we have in the language. If there's no way to
> construct strings, then I don't think it's very useful. You could write
> things like `some_variable[another_variable]`, but I don't think that's going
> to be useful because for static types (e.g. C structs) you're unlikely to
> have a variable with a value that contains the name of a field, and for types
> with synthetic children the names of the children are not going to have any
> relation to the way it's seen by the code (map<string, string> is still going
> to have a child called `[0]`).
>
> Overall I'd leave this out for the time being because it doesn't impact
> parsing or lexing, just how some (currently invalid) syntax trees can be
> interpreted.
Thinking about this further, I can think of one reason to allow this even
without sophisticated string operations -- because this allows you to access
identifiers with weird child names. This way we could have users write
`obj["a+b"]` for accessing the child `a+b` of object `obj` -- and we wouldn't
"use up" a quote character in the process. This is sort of like how you can
access global variables (even those with weird names) with
`globals()["my_var"]` in python.
I'd still try to avoid things like guessing whether the user forgot to add `[]`
to the name or not..
https://github.com/llvm/llvm-project/pull/123521
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits