Class: Mirah::AST::Unquote

Inherits:
Node
  • Object
show all
Defined in:
lib/mirah/ast/intrinsics.rb

Instance Attribute Summary

Attributes inherited from Node

#children, #inferred_type, #newline, #parent, #position

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Node

#<<, ===, #[], #[]=, #_set_parent, child, child_name, #child_nodes, #each, #empty?, #expr?, #inferred_type!, #initialize, #initialize_copy, #insert, #inspect, #inspect_children, #line_number, #log, #precompile, #resolve_if, #resolved!, #resolved?, #simple_name, #string_value, #temp, #to_s, #top_level?, #validate_child, #validate_children

Constructor Details

This class inherits a constructor from Mirah::AST::Node

Class Method Details

.__extractedObject



53
54
55
# File 'lib/mirah/ast/intrinsics.rb', line 53

def self.__extracted
  Thread.current[:'Mirah::AST::Unqote.extracted']
end

.__extracted=(value) ⇒ Object



57
58
59
# File 'lib/mirah/ast/intrinsics.rb', line 57

def self.__extracted=(value)
  Thread.current[:'Mirah::AST::Unqote.extracted'] = value
end

.__injectedObject



61
62
63
# File 'lib/mirah/ast/intrinsics.rb', line 61

def self.__injected
  Thread.current[:'Mirah::AST::Unqote.injected']
end

.__injected=(value) ⇒ Object



65
66
67
# File 'lib/mirah/ast/intrinsics.rb', line 65

def self.__injected=(value)
  Thread.current[:'Mirah::AST::Unqote.injected'] = value
end

._load(str) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/mirah/ast/intrinsics.rb', line 35

def self._load(str)
  if str =~ /^\d+$/
    # This just returns the exact node passed in.
    index = str.to_i
    Unquote.__injected[index].dup
  else
    position, index = Marshal.load(str)
    holder = UnquotedValue.new(nil, position)
    value = Unquote.__injected[index]
    begin
      holder << value.dup
    rescue TypeError
      holder << value
    end
    holder
  end
end

.extract_valuesObject



69
70
71
72
73
74
75
76
77
78
# File 'lib/mirah/ast/intrinsics.rb', line 69

def self.extract_values
  values = []
  saved, self.__extracted = self.__extracted, values
  begin
    yield
    return values
  ensure
    self.__extracted = saved
  end
end

.inject_values(values) ⇒ Object



80
81
82
83
84
85
86
87
# File 'lib/mirah/ast/intrinsics.rb', line 80

def self.inject_values(values)
  saved, self.__injected = self.__injected, values
  begin
    yield
  ensure
    self.__injected = saved
  end
end

Instance Method Details

#_dump(depth) ⇒ Object



27
28
29
30
31
32
# File 'lib/mirah/ast/intrinsics.rb', line 27

def _dump(depth)
  vals = Unquote.__extracted
  index = vals.size
  vals << value
  Marshal.dump([position, index])
end

#infer(typer, expression) ⇒ Object

Raises:



23
24
25
# File 'lib/mirah/ast/intrinsics.rb', line 23

def infer(typer, expression)
  raise Mirah::SyntaxError.new("Unquote used outside of macro", self)
end