class Dhallish::Ast::RecordProjection

keys: ruby-list of keys to access (strings)

Attributes

keys[RW]
rec[RW]

Public Class Methods

new(rec, keys) click to toggle source
# File lib/ast.rb, line 466
def initialize(rec, keys)
        @rec = rec
        @keys = keys
end

Public Instance Methods

compute_type(ctx) click to toggle source
# File lib/ast.rb, line 471
def compute_type(ctx)
        rectype = @rec.compute_type ctx
        assert("`.` can only be used on records") { rectype.is_a? Types::Record }
        newrectype = {}
        @keys.each { |key|
                assert("missing key in projection: `#{key}`") { !rectype.types[key].nil? }
                newrectype[key] = rectype.types[key]
        }
        Types::Record.new(newrectype)
end
evaluate(ctx) click to toggle source
# File lib/ast.rb, line 482
def evaluate(ctx)
        rec = @rec.evaluate ctx
        newrecvals = {}
        @keys.each { |key|
                newrecvals[key] = rec[key]
        }
        newrecvals
end