Class: Nydp::Builtin::Date

Inherits:
Object show all
Includes:
Base, Helper, Singleton
Defined in:
lib/nydp/builtin/date.rb

Instance Method Summary collapse

Methods included from Helper

#cons, #list, #literal?, #pair?, #sig, #sym, #sym?

Methods included from Converter

#n2r, #r2n

Methods included from Base

#handle_error, #inspect, #invoke, #invoke_1, #invoke_2, #invoke_3, #invoke_4, #name, #nydp_type, #to_s

Instance Method Details

#builtin_invoke(vm, args) ⇒ Object



4
5
6
7
8
9
10
11
# File 'lib/nydp/builtin/date.rb', line 4

def builtin_invoke vm, args
  case args.size
  when 0 ; builtin_invoke_1 vm
  when 1 ; builtin_invoke_2 vm, args.car
  when 2 ; builtin_invoke_3 vm, args.car, args.cdr.car
  when 3 ; builtin_invoke_4 vm, args.car, args.cdr.car, args.cdr.cdr.car
  end
end

#builtin_invoke_1(vm) ⇒ Object



13
14
15
# File 'lib/nydp/builtin/date.rb', line 13

def builtin_invoke_1 vm
  vm.push_arg(Nydp::Date.new Date.today)
end

#builtin_invoke_2(vm, arg) ⇒ Object

it’s a Time object (or any object that responds to #to_date)



18
19
20
21
22
23
24
25
# File 'lib/nydp/builtin/date.rb', line 18

def builtin_invoke_2 vm, arg
  arg = if arg.respond_to?(:to_date)
          arg.to_date
        elsif arg.is_a?(String)
          ::Date.parse(arg)
        end
  vm.push_arg(Nydp::Date.new arg)
end

#builtin_invoke_3(vm, a0, a1) ⇒ Object



27
28
29
# File 'lib/nydp/builtin/date.rb', line 27

def builtin_invoke_3 vm, a0, a1
  raise Nydp::Error.new "Date, got 2 args (#{a0} #{a1}), expected 0 or 1 or 3 args"
end

#builtin_invoke_4(vm, y, m, d) ⇒ Object



31
32
33
# File 'lib/nydp/builtin/date.rb', line 31

def builtin_invoke_4 vm, y, m, d
  vm.push_arg(Nydp::Date.new Date.new(y,m,d))
end