Sha256: 1f761cf4867551118e9e8b95f60abbd723caa63cac2a607be54d35f61ccc9f09

Contents?: true

Size: 719 Bytes

Versions: 9

Compression:

Stored size: 719 Bytes

Contents

module Finitio
  module Syntax
    module TypeDef
      include Node

      capture :type
      capture :type_name
      capture :vars

      def compile(system)
        if vars
          vs = vars.compile(system)
          overrides = Hash[vs.map{|v|
            [ v.to_s, ProxyType.new(v) ]
          }]
          t = type.compile(system.with_scope(overrides))
          t = HighOrderType.new(vs, t)
        else
          t = type.compile(system)
        end
        n = type_name && type_name.to_str
        m = metadata
        system.add_type(t, n, m)
        t
      end

      def to_ast
        [:type_def, type_name, type.to_ast]
      end

    end # module TypeDef
  end # module Syntax
end # module Finitio

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
finitio-0.12.0 lib/finitio/syntax/type/type_def.rb
finitio-0.11.4 lib/finitio/syntax/type/type_def.rb
finitio-0.11.3 lib/finitio/syntax/type/type_def.rb
finitio-0.11.2 lib/finitio/syntax/type/type_def.rb
finitio-0.11.1 lib/finitio/syntax/type/type_def.rb
finitio-0.10.0 lib/finitio/syntax/type/type_def.rb
finitio-0.9.1 lib/finitio/syntax/type/type_def.rb
finitio-0.9.0 lib/finitio/syntax/type/type_def.rb
finitio-0.8.0 lib/finitio/syntax/type/type_def.rb