myst-lang / myst

A structured, dynamic, general-purpose language.
http://myst-lang.org
MIT License
119 stars 17 forks source link

`SimpleAssign`s target should be `StaticAssignable`, not `Node` #195

Open faultyserver opened 6 years ago

faultyserver commented 6 years ago

I'm pretty sure that SimpleAssign is only created when the left-hand side is a StaticAssignable (e.g., Var, Const, or Underscore). If the target is a pattern, then it becomes a MatchAssign, and if it is some method chain (e.g. x.y = 2), then it is converted into a Call to the y= method with x as the receiver.

With that, I think that the target property of SimpleAssign nodes can be restricted from Node to StaticAssignable. That guarantee is helpful when doing semantic analysis (i.e., myst-typecheck :) and avoids the need to downcast it whenever it is referenced.