You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
My second attempt (using computed member access) works but not as expected:
operator>>=left19=(left,right)=>{letr=right.name.token.value;// string representation of an identifierletdummy= #`dummy`.get(0);return #`${left} [${fromStringLiteral(dummy,r)}]`;};
I deliberately give my >>= operator precedence 19, which is the same precedence as javascript's member access operator (see JS operator precedence).
Based on the given precedence i would expect this to be possible:
varobj={foo: function(){// return a promise}};obj>>=foo.then(res=>{console.log(res);})
However, this does not compile. For some reason the right argument of my >>= operator is a call expression (i.e. foo.then(...)).
So, based on the given precedence i would expect obj>>=foo.then(...) to be equivalent to (obj>>=foo).then(...), however it seems to be interpreted as obj>>=(foo.then(...)).
If i manually add the parentheses as follows (obj>>=foo).then(...), then it works.
The text was updated successfully, but these errors were encountered:
Yeah this is expected. All the forms that MDN calls precedence 19 (static/computed member access, new, call) are not really operators in the sense that Sweet understands. This is because they all have grammar restrictions that make them more specialized than a normal binary/unary operator and so expand "below" the level of Sweet's operator precedence rules.
I want to define an operator
>>=
which performs member access (i.e. is equivalent to.
).My first attempt does not compile:
My second attempt (using computed member access) works but not as expected:
I deliberately give my
>>=
operator precedence 19, which is the same precedence as javascript's member access operator (see JS operator precedence).Based on the given precedence i would expect this to be possible:
However, this does not compile. For some reason the
right
argument of my>>=
operator is a call expression (i.e.foo.then(...)
).So, based on the given precedence i would expect
obj>>=foo.then(...)
to be equivalent to(obj>>=foo).then(...)
, however it seems to be interpreted asobj>>=(foo.then(...))
.If i manually add the parentheses as follows
(obj>>=foo).then(...)
, then it works.The text was updated successfully, but these errors were encountered: