kuilpd wrote:

> > single interface to traverse the AST tree:
> 
> That's the part that would change in this setup. Instead of one API, we'd 
> have two: `EvaluateValueNode()` and `EvaluateScalarNode()`, and we'd have two 
> node hierarchies: ValueNode and ScalarNode. MemberOfNode would be a ValueNode 
> because it produces a value object. AddNode would be a ScalarNode because it 
> produces a number. ArraySubscriptNode would be a ValueNode (the result is a 
> value), but its `index` member would be a ScalarNode, because we need to use 
> it for indexing.
> 
> The correct types would be ensured when parsing, possibly with the addition 
> of the "rvalue" nodes. `a[1]` would be parsed as `Subscript(Identifier(a), 
> Scalar(1))`, while `a[b]` would turn into `Subscript(Identifier(a), 
> RValue(Identifier(b)))`. `a[b+1]` would be something like 
> `Subscript(Identifier(a), Add(RValue(Identifier(b)), Scalar(1)))`. The 
> evaluator would have access to the right types, so it could invoke the right 
> function. This has nothing to do with the types of the variables, its about 
> the types (kinds) of AST nodes.
> 
> I'm not saying you have to do this, but I find the idea of not constantly 
> wrapping and unwrapping scalars appealing.

I don't know about this... wouldn't this `RValue(ValueNode)` function be pretty 
much the same process of unwrapping Scalar from ValueObject? We will still need 
to wrap/unwrap Scalar from ValueObject whenever they interact, so this will 
only cut down the wraps when Scalar/Scalar interact, which is pretty much just 
arithmetics with constant literals and subscript with a constant index. 

I think for now it's better to implement a clean interface in ValueObject to 
create it from a Scalar, and we can optimize the arithmetics the way you 
suggested later, if this ends up being a performance bottleneck.

https://github.com/llvm/llvm-project/pull/147064
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to