Sha256: e7b959f14a7a5cd63cd2e945c131480944f2dbde298c8ab8738e922c18abfa2c
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
module Dentaku module AST class FunctionRegistry < Hash def get(name) name = function_name(name) return self[name] if has_key?(name) return default[name] if default.has_key?(name) fail ParseError, "Undefined function #{ name }" end def register(name, type, implementation) function = Class.new(Function) do def self.implementation=(impl) @implementation = impl end def self.implementation @implementation end def self.type=(type) @type = type end def self.type @type end def value(context={}) args = @args.map { |a| a.value(context) } self.class.implementation.call(*args) end def type self.class.type end end function.implementation = implementation function.type = type self[function_name(name)] = function end def register_class(name, function_class) self[function_name(name)] = function_class end def default self.class.default end def self.default Dentaku::AST::Function.registry end private def function_name(name) name.to_s.downcase end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dentaku-2.0.11 | lib/dentaku/ast/function_registry.rb |