Sha256: e2a00bc5a32e9c83ef69f4e4b25e72f330766c1f5a4ab083d67872bc7042a8e2

Contents?: true

Size: 1.16 KB

Versions: 6

Compression:

Stored size: 1.16 KB

Contents

module Pione
  module Lang
    # Message represents method callers in PIONE language.
    class Message < Expr
      member :name
      member :receiver
      member :arguments

      # Return PIONE model type of the message result according to type interface.
      def pione_type(env)
        if pione_method = receiver.pione_type.find_method(env, name, receiver, arguments)
          pione_method.get_output_type(receiver)
        else
          raise MethodNotFound.new(name.to_s, receiver, arguments)
        end
      end

      # Evaluate the application expression and returns application result.
      def eval(env)
        # evaluate the receiver in the environment
        _receiver = receiver.eval(env)
        if _receiver.is_a?(Variable)
          _receiver = _receiver.eval(env)
        end

        # send a message to it
        _receiver.call_pione_method(env, name, arguments)
      end

      def eval!(env)
        eval(env).eval!(env)
      end

      # Convert to text string.
      def textize
        args = arguments.map {|arg| arg.textize}
        "#%s{name: %s, receiver: %s, arguments: %s}" % [Message, name, receiver.textize, args]
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
pione-0.4.2 lib/pione/lang/message.rb
pione-0.4.1 lib/pione/lang/message.rb
pione-0.4.0 lib/pione/lang/message.rb
pione-0.3.2 lib/pione/lang/message.rb
pione-0.3.1 lib/pione/lang/message.rb
pione-0.3.0 lib/pione/lang/message.rb