Class: Lisp::PrimSystem
Class Method Summary collapse
- .error_impl(args, env) ⇒ Object
- .on_error_impl(args, env) ⇒ Object
- .register ⇒ Object
- .sleep_impl(args, env) ⇒ Object
- .time_impl(args, env) ⇒ Object
Class Method Details
.error_impl(args, env) ⇒ Object
29 30 31 32 |
# File 'lib/rubylisp/prim_system.rb', line 29 def self.error_impl(args, env) #puts "error #{args.car.print_string}" Lisp::Debug.process_error(args.car.to_s, env) end |
.on_error_impl(args, env) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/rubylisp/prim_system.rb', line 35 def self.on_error_impl(args, env) #puts "on-error ===> #{args.car.body.print_string}" begin result = args.car.evaluate(env) rescue => e handler = args.cadr.evaluate(env) return Lisp::Debug.process_error("on-error needs a function as it's second argument", env) unless handler.function? #puts "ERROR: #{e}" err_string = Lisp::String.with_value("#{e}") handler.apply_to(Lisp::ConsCell.array_to_list([err_string]), env) else if args.length == 3 handler = args.caddr.evaluate(env) return Lisp::Debug.process_error("on-error needs a function as it's third argument", env) unless handler.function? handler.apply_to(nil, env) end end end |
.register ⇒ Object
5 6 7 8 9 10 11 |
# File 'lib/rubylisp/prim_system.rb', line 5 def self.register Primitive.register("sleep", "1") {|args, env| Lisp::PrimSystem.sleep_impl(args, env) } Primitive.register("time", "1", "", true) {|args, env| Lisp::PrimSystem.time_impl(args, env) } Primitive.register("quit", "0") {|args, env| exit() } Primitive.register("error", "1") {|args, env| Lisp::PrimSystem.error_impl(args, env) } Primitive.register("on-error", "2|3", "", true) {|args, env| Lisp::PrimSystem.on_error_impl(args, env) } end |
.sleep_impl(args, env) ⇒ Object
14 15 16 17 18 |
# File 'lib/rubylisp/prim_system.rb', line 14 def self.sleep_impl(args, env) arg = args.car return Lisp::Debug.process_error("sleep needs a numeric argument", env) unless arg.number? sleep(arg.value) end |
.time_impl(args, env) ⇒ Object
21 22 23 24 25 26 |
# File 'lib/rubylisp/prim_system.rb', line 21 def self.time_impl(args, env) start_time = Time.now args.car.evaluate(env) end_time = Time.now Lisp::Number.with_value(end_time - start_time) end |