Mapping

When considering the previous CRuby parser versus prism, this document should be helpful to understand how various concepts are mapped.

Nodes

The following table shows how the various CRuby nodes are mapped to prism nodes.

CRuby prism
‘NODE_SCOPE`
‘NODE_BLOCK`
‘NODE_IF` ‘PM_IF_NODE`
‘NODE_UNLESS` ‘PM_UNLESS_NODE`
‘NODE_CASE` ‘PM_CASE_NODE`
‘NODE_CASE2` ‘PM_CASE_NODE` (with a null predicate)
‘NODE_CASE3`
‘NODE_WHEN` ‘PM_WHEN_NODE`
‘NODE_IN` ‘PM_IN_NODE`
‘NODE_WHILE` ‘PM_WHILE_NODE`
‘NODE_UNTIL` ‘PM_UNTIL_NODE`
‘NODE_ITER` ‘PM_CALL_NODE` (with a non-null block)
‘NODE_FOR` ‘PM_FOR_NODE`
‘NODE_FOR_MASGN` ‘PM_FOR_NODE` (with a multi-write node as the index)
‘NODE_BREAK` ‘PM_BREAK_NODE`
‘NODE_NEXT` ‘PM_NEXT_NODE`
‘NODE_REDO` ‘PM_REDO_NODE`
‘NODE_RETRY` ‘PM_RETRY_NODE`
‘NODE_BEGIN` ‘PM_BEGIN_NODE`
‘NODE_RESCUE` ‘PM_RESCUE_NODE`
‘NODE_RESBODY`
‘NODE_ENSURE` ‘PM_ENSURE_NODE`
‘NODE_AND` ‘PM_AND_NODE`
‘NODE_OR` ‘PM_OR_NODE`
‘NODE_MASGN` ‘PM_MULTI_WRITE_NODE`
‘NODE_LASGN` ‘PM_LOCAL_VARIABLE_WRITE_NODE`
‘NODE_DASGN` ‘PM_LOCAL_VARIABLE_WRITE_NODE`
‘NODE_GASGN` ‘PM_GLOBAL_VARIABLE_WRITE_NODE`
‘NODE_IASGN` ‘PM_INSTANCE_VARIABLE_WRITE_NODE`
‘NODE_CDECL` ‘PM_CONSTANT_PATH_WRITE_NODE`
‘NODE_CVASGN` ‘PM_CLASS_VARIABLE_WRITE_NODE`
‘NODE_OP_ASGN1`
‘NODE_OP_ASGN2`
‘NODE_OP_ASGN_AND` ‘PM_OPERATOR_AND_ASSIGNMENT_NODE`
‘NODE_OP_ASGN_OR` ‘PM_OPERATOR_OR_ASSIGNMENT_NODE`
‘NODE_OP_CDECL`
‘NODE_CALL` ‘PM_CALL_NODE`
‘NODE_OPCALL` ‘PM_CALL_NODE` (with an operator as the method)
‘NODE_FCALL` ‘PM_CALL_NODE` (with a null receiver and parentheses)
‘NODE_VCALL` ‘PM_CALL_NODE` (with a null receiver and parentheses or arguments)
‘NODE_QCALL` ‘PM_CALL_NODE` (with a &. operator)
‘NODE_SUPER` ‘PM_SUPER_NODE`
‘NODE_ZSUPER` ‘PM_FORWARDING_SUPER_NODE`
‘NODE_LIST` ‘PM_ARRAY_NODE`
‘NODE_ZLIST` ‘PM_ARRAY_NODE` (with no child elements)
‘NODE_VALUES` ‘PM_ARGUMENTS_NODE`
‘NODE_HASH` ‘PM_HASH_NODE`
‘NODE_RETURN` ‘PM_RETURN_NODE`
‘NODE_YIELD` ‘PM_YIELD_NODE`
‘NODE_LVAR` ‘PM_LOCAL_VARIABLE_READ_NODE`
‘NODE_DVAR` ‘PM_LOCAL_VARIABLE_READ_NODE`
‘NODE_GVAR` ‘PM_GLOBAL_VARIABLE_READ_NODE`
‘NODE_IVAR` ‘PM_INSTANCE_VARIABLE_READ_NODE`
‘NODE_CONST` ‘PM_CONSTANT_PATH_READ_NODE`
‘NODE_CVAR` ‘PM_CLASS_VARIABLE_READ_NODE`
‘NODE_NTH_REF` ‘PM_NUMBERED_REFERENCE_READ_NODE`
‘NODE_BACK_REF` ‘PM_BACK_REFERENCE_READ_NODE`
‘NODE_MATCH`
‘NODE_MATCH2` ‘PM_CALL_NODE` (with regular expression as receiver)
‘NODE_MATCH3` ‘PM_CALL_NODE` (with regular expression as only argument)
‘NODE_LIT`
‘NODE_STR` ‘PM_STRING_NODE`
‘NODE_DSTR` ‘PM_INTERPOLATED_STRING_NODE`
‘NODE_XSTR` ‘PM_X_STRING_NODE`
‘NODE_DXSTR` ‘PM_INTERPOLATED_X_STRING_NODE`
‘NODE_EVSTR` ‘PM_STRING_INTERPOLATED_NODE`
‘NODE_DREGX` ‘PM_INTERPOLATED_REGULAR_EXPRESSION_NODE`
‘NODE_ONCE`
‘NODE_ARGS` ‘PM_PARAMETERS_NODE`
‘NODE_ARGS_AUX`
‘NODE_OPT_ARG` ‘PM_OPTIONAL_PARAMETER_NODE`
‘NODE_KW_ARG` ‘PM_KEYWORD_PARAMETER_NODE`
‘NODE_POSTARG` ‘PM_REQUIRED_PARAMETER_NODE`
‘NODE_ARGSCAT`
‘NODE_ARGSPUSH`
‘NODE_SPLAT` ‘PM_SPLAT_NODE`
‘NODE_BLOCK_PASS` ‘PM_BLOCK_ARGUMENT_NODE`
‘NODE_DEFN` ‘PM_DEF_NODE` (with a null receiver)
‘NODE_DEFS` ‘PM_DEF_NODE` (with a non-null receiver)
‘NODE_ALIAS` ‘PM_ALIAS_NODE`
‘NODE_VALIAS` ‘PM_ALIAS_NODE` (with a global variable first argument)
‘NODE_UNDEF` ‘PM_UNDEF_NODE`
‘NODE_CLASS` ‘PM_CLASS_NODE`
‘NODE_MODULE` ‘PM_MODULE_NODE`
‘NODE_SCLASS` ‘PM_S_CLASS_NODE`
‘NODE_COLON2` ‘PM_CONSTANT_PATH_NODE`
‘NODE_COLON3` ‘PM_CONSTANT_PATH_NODE` (with a null receiver)
‘NODE_DOT2` ‘PM_RANGE_NODE` (with a .. operator)
‘NODE_DOT3` ‘PM_RANGE_NODE` (with a … operator)
‘NODE_FLIP2` ‘PM_RANGE_NODE` (with a .. operator)
‘NODE_FLIP3` ‘PM_RANGE_NODE` (with a … operator)
‘NODE_SELF` ‘PM_SELF_NODE`
‘NODE_NIL` ‘PM_NIL_NODE`
‘NODE_TRUE` ‘PM_TRUE_NODE`
‘NODE_FALSE` ‘PM_FALSE_NODE`
‘NODE_ERRINFO`
‘NODE_DEFINED` ‘PM_DEFINED_NODE`
‘NODE_POSTEXE` ‘PM_POST_EXECUTION_NODE`
‘NODE_DSYM` ‘PM_INTERPOLATED_SYMBOL_NODE`
‘NODE_ATTRASGN` ‘PM_CALL_NODE` (with a message that ends with =)
‘NODE_LAMBDA` ‘PM_LAMBDA_NODE`
‘NODE_ARYPTN` ‘PM_ARRAY_PATTERN_NODE`
‘NODE_HSHPTN` ‘PM_HASH_PATTERN_NODE`
‘NODE_FNDPTN` ‘PM_FIND_PATTERN_NODE`
‘NODE_ERROR` ‘PM_MISSING_NODE`
‘NODE_LAST`
“‘