Crystal::Macros::MacroId
Inherits Crystal::Macros::ASTNode
A fictitious node representing an identifier like, foo, Bar or something_else.
The parser doesn't create these nodes. Instead, you create them by invoking id
on some nodes. For example, invoking id on a StringLiteral returns a MacroId
for the string's content. Similarly, invoking ID on a SymbolLiteral, Call, Var and Path
returns a MacroId for the node's content.
This allows you to treat strings, symbols, variables and calls uniformly. For example:
macro getter(name)
def {{name.id}}
@{{name.id}}
end
end
getter unicorns
getter :unicorns
getter "unicorns"
All of the above macro calls work because we invoked id, and the generated code
looks like this:
def unicorns
@unicorns
end
If we hadn't used id, the generated code would have been this:
def unicorns
@unicorns
end
def :unicorns
@:unicorns
end
def "unicorns"
@"unicorns"
end
The last two definitions are invalid and so will give a compile-time error.
Instance methods
Similar to String#gsub(pattern, options, &).
NOTE: The special variables $~ and $1, $2, ... are not supported.
Matches the given regex against this string and returns a capture hash, or
nil if a match cannot be found.
The capture hash has the same form as Regex::MatchData#to_h.
Returns an array of capture hashes for each match of regex in this string.
Capture hashes have the same form as Regex::MatchData#to_h.
Similar to String#starts_with?.
Returns an expression that evaluates to a slice literal containing the
UTF-16 code units of this string, plus an extra trailing null character.
This null character is not part of the slice, but ensures that calling
#to_unsafe always results in a properly null-terminated C string.
(::Slice(::UInt16).literal(97_u16, 98_u16, 99_u16, 55357_u16, 56834_u16, 0_u16))[0, 5] # => ::Slice(::UInt16).literal(97, 98, 99, 55357, 56834, 0)[0, 5]
WARNING: The return value is not necessarily a literal node.