Sha256: 2090c0c05c0bdcd71c9b28f216627448cb51d9afda8a803cc054d13c2c796061

Contents?: true

Size: 1.02 KB

Versions: 36

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

require_relative '../error'

module Loxxy
  module BackEnd
    # A Lox unary operator
    class UnaryOperator
      # @return [String] text representation of the operator
      attr_reader :name

      # @return [Array<Class>]
      attr_reader :signatures

      # @param aName [String] "name" of operator
      # @param theSignatures [Array<Class>] allowed signatures
      def initialize(aName, theSignatures)
        @name = aName
        @signatures = theSignatures
      end

      def validate_operand(operand1)
        compliant = signatures.find { |some_type| operand1.kind_of?(some_type) }

        unless compliant
          err = Loxxy::RuntimeError
          # if signatures.size == 1
          raise err, "Operand must be a #{datatype_name(signatures[0])}."
          # end
        end
      end

      private

      def datatype_name(aClass)
        # (?:(?:[^:](?!:|(?<=LX))))+$
        aClass.name.sub(/^.+(?=::)::(?:LX)?/, '').downcase
      end
    end # class
  end # module
end # module

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
loxxy-0.4.09 lib/loxxy/back_end/unary_operator.rb
loxxy-0.4.08 lib/loxxy/back_end/unary_operator.rb
loxxy-0.4.07 lib/loxxy/back_end/unary_operator.rb
loxxy-0.4.06 lib/loxxy/back_end/unary_operator.rb
loxxy-0.4.05 lib/loxxy/back_end/unary_operator.rb
loxxy-0.4.04 lib/loxxy/back_end/unary_operator.rb
loxxy-0.4.03 lib/loxxy/back_end/unary_operator.rb
loxxy-0.4.02 lib/loxxy/back_end/unary_operator.rb
loxxy-0.4.01 lib/loxxy/back_end/unary_operator.rb
loxxy-0.4.00 lib/loxxy/back_end/unary_operator.rb
loxxy-0.3.03 lib/loxxy/back_end/unary_operator.rb
loxxy-0.3.02 lib/loxxy/back_end/unary_operator.rb
loxxy-0.3.01 lib/loxxy/back_end/unary_operator.rb
loxxy-0.3.00 lib/loxxy/back_end/unary_operator.rb
loxxy-0.2.06 lib/loxxy/back_end/unary_operator.rb
loxxy-0.2.05 lib/loxxy/back_end/unary_operator.rb
loxxy-0.2.04 lib/loxxy/back_end/unary_operator.rb
loxxy-0.2.03 lib/loxxy/back_end/unary_operator.rb
loxxy-0.2.02 lib/loxxy/back_end/unary_operator.rb
loxxy-0.2.01 lib/loxxy/back_end/unary_operator.rb