Skip to content

Commit

Permalink
Replace dynamic_cast with parser::cast_node for consistency (#405)
Browse files Browse the repository at this point in the history
  • Loading branch information
st0012 authored Feb 6, 2025
1 parent f5bf435 commit 90cf47b
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions parser/prism/Translator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ unique_ptr<parser::Node> Translator::translate(pm_node_t *node) {
// parameters. So we need to extract the args vector from the Args node, and insert the locals at the end of
// it.
auto sorbetArgsNode = translate(up_cast(paramsNode->parameters));
auto argsNode = dynamic_cast<parser::Args *>(sorbetArgsNode.get());
auto argsNode = parser::cast_node<parser::Args>(sorbetArgsNode.get());
auto sorbetShadowArgs = translateMulti(paramsNode->locals);
// Sorbet's legacy parser inserts locals (Shadowargs) at the end of the the block's Args node
argsNode->args.insert(argsNode->args.end(), std::make_move_iterator(sorbetShadowArgs.begin()),
Expand Down Expand Up @@ -301,7 +301,7 @@ unique_ptr<parser::Node> Translator::translate(pm_node_t *node) {
// Handle `~[Integer]`, like `~42`
// Unlike `-[Integer]`, Prism treats `~[Integer]` as a method call
// But Sorbet's legacy parser treats both `~[Integer]` and `-[Integer]` as integer literals
if (name == "~" && dynamic_cast<parser::Integer *>(receiver.get())) {
if (name == "~" && parser::cast_node<parser::Integer>(receiver.get())) {
std::string valueString(reinterpret_cast<const char *>(callNode->base.location.start),
callNode->base.location.end - callNode->base.location.start);

Expand Down Expand Up @@ -525,11 +525,11 @@ unique_ptr<parser::Node> Translator::translate(pm_node_t *node) {
// If that's the case, we need to check if the body contains an ensure or rescue clause, and if so,
// we need to elevate that node to the top level of the method definition, without the Kwbegin node to
// match the behavior of Sorbet's legacy parser.
auto kwbeginNode = dynamic_cast<parser::Kwbegin *>(body.get());
auto kwbeginNode = parser::cast_node<parser::Kwbegin>(body.get());

if (kwbeginNode != nullptr && kwbeginNode->stmts[0] != nullptr &&
(dynamic_cast<parser::Rescue *>(kwbeginNode->stmts[0].get()) != nullptr ||
dynamic_cast<parser::Ensure *>(kwbeginNode->stmts[0].get()) != nullptr)) {
(parser::cast_node<parser::Rescue>(kwbeginNode->stmts[0].get()) ||
parser::cast_node<parser::Ensure>(kwbeginNode->stmts[0].get()))) {
if (kwbeginNode->stmts.size() == 1) {
body = move(kwbeginNode->stmts[0]);
} else {
Expand Down Expand Up @@ -1770,7 +1770,7 @@ unique_ptr<parser::Node> Translator::translateCallWithBlock(pm_node_t *prismBloc
body = translate(prismLambdaNode->body);
}

if (dynamic_cast<parser::NumParams *>(parametersNode.get())) {
if (parser::cast_node<parser::NumParams>(parametersNode.get())) {
return make_unique<parser::NumBlock>(sendNode->loc, move(sendNode), move(parametersNode), move(body));
} else {
return make_unique<parser::Block>(sendNode->loc, move(sendNode), move(parametersNode), move(body));
Expand Down

0 comments on commit 90cf47b

Please sign in to comment.