File: value/core/reference.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: Umu#6
  module: Value#8
  module: Core#10
has properties
function: make_reference / 1 #74
  class: Ref#12
inherits from
  Object ( Umu::Value::Core )
has properties
class method: meth_make_ref / 4 #18
attribute: mutable_val [R] #23
method: initialize / 1 #25
method: to_s #34
method: pretty_print / 1 #39
method: meth_peek / 3 #51
method: meth_poke / 4 #61

Class Hierarchy

Object ( Builtin-Module )
Top ( Umu::Value::Core )
Object ( Umu::Value::Core )
  Ref    #12

Code

   1  # coding: utf-8
   2  # frozen_string_literal: true
   3 
   4 
   5 
   6  module Umu
   7 
   8  module Value
   9 
  10  module Core
  11 
  12  class Ref < Object
  13      define_class_method(
  14          :meth_make_ref,
  15          :make, [],
  16          [VC::Top], self
  17      )
  18      def self.meth_make_ref(loc, env, _event, val)
  19          VC.make_reference val
  20      end
  21 
  22 
  23      attr_reader :mutable_val
  24 
  25      def initialize(val)
  26          ASSERT.kind_of val, VC::Top
  27 
  28          super()
  29 
  30          @mutable_val = val
  31      end
  32 
  33 
  34      def to_s
  35          format "#Ref<%s>", self.mutable_val.to_s
  36      end
  37 
  38 
  39      def pretty_print(q)
  40          PRT.group q, bb:'#Ref<', eb:'>' do
  41              q.pp self.mutable_val
  42          end
  43      end
  44 
  45 
  46      define_instance_method(
  47          :meth_peek,
  48          :'peek!', [],
  49          [], VC::Top
  50      )
  51      def meth_peek(loc, env, _event)
  52          self.mutable_val
  53      end
  54 
  55 
  56      define_instance_method(
  57          :meth_poke,
  58          :'poke!', [],
  59          [VC::Top], VC::Unit
  60      )
  61      def meth_poke(_loc, _env, _event, val)
  62          ASSERT.kind_of val, VC::Top
  63 
  64          @mutable_val = val
  65 
  66          VC.make_unit
  67      end
  68  end
  69  Ref.freeze
  70 
  71 
  72  module_function
  73 
  74      def make_reference(val)
  75          ASSERT.kind_of val, VC::Top
  76 
  77          Ref.new(val)   # Does NOT freeze!!
  78      end
  79 
  80  end # Umu::Value::Core
  81 
  82  end # Umu::Value
  83 
  84  end # Umu