Skip to content

Commit 63ac902

Browse files
Add NumberLiteral#zero? (#10248)
Co-authored-by: Johannes Müller <[email protected]>
1 parent fc1a02c commit 63ac902

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

spec/compiler/macro/macro_methods_spec.cr

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,14 @@ module Crystal
409409
assert_macro %({{'a'.ord}}), %(97)
410410
assert_macro %({{'龍'.ord}}), %(40845)
411411
end
412+
413+
it "executes zero?" do
414+
assert_macro "{{0.zero?}}", "true"
415+
assert_macro "{{1.zero?}}", "false"
416+
417+
assert_macro "{{0.0.zero?}}", "true"
418+
assert_macro "{{0.1.zero?}}", "false"
419+
end
412420
end
413421

414422
describe "string methods" do

src/compiler/crystal/macros.cr

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,10 @@ module Crystal::Macros
540540

541541
# Any number literal.
542542
class NumberLiteral < ASTNode
543+
# Returns `true` if value is 0, `false` otherwise.
544+
def zero? : BoolLiteral
545+
end
546+
543547
# Compares this node's value to another node's value.
544548
def <(other : NumberLiteral) : BoolLiteral
545549
end

src/compiler/crystal/macros/methods.cr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,8 @@ module Crystal
548548
interpret_check_args { SymbolLiteral.new(kind.to_s) }
549549
when "to_number"
550550
interpret_check_args { MacroId.new(to_number.to_s) }
551+
when "zero?"
552+
interpret_check_args { BoolLiteral.new(to_number.zero?) }
551553
else
552554
super
553555
end

0 commit comments

Comments
 (0)