Class: Rjq::ConstantEvaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/rjq/module_loader.rb

Class Method Summary collapse

Class Method Details

.evaluate(node) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/rjq/module_loader.rb', line 132

def evaluate(node)
  case node
  when AST::Literal
    Value.deep_copy(node.value)
  when AST::StringLiteral
    raise CompileError, 'Module metadata must be constant' unless node.value.is_a?(String)

    node.value
  when AST::ArrayLiteral
    expression = node.instance_variable_get(:@expression)
    expression ? evaluate_sequence(expression) : []
  when AST::ObjectLiteral
    evaluate_object_literal(node)
  when AST::UnaryOp
    evaluate_unary(node)
  else
    raise CompileError, 'Module metadata must be constant'
  end
end

.evaluate_object(node) ⇒ Object

Raises:



125
126
127
128
129
130
# File 'lib/rjq/module_loader.rb', line 125

def evaluate_object(node)
  value = evaluate(node)
  raise CompileError, 'Module metadata must be an object' unless value.is_a?(Hash)

  value
end