Class: Rjq::SemanticAnalyzer

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

Constant Summary collapse

PUSH_OPS =
%i[
  load_input load_const string_interp format variable path optional binding array object branch try reduce foreach
  label unary binary assign call tail_call recurse scoped_def
].freeze
TRANSFORM_OPS =
%i[
  field index_const index_filter slice_const slice_filter each pipe append
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(program) ⇒ SemanticAnalyzer

Returns a new instance of SemanticAnalyzer.



13
14
15
# File 'lib/rjq/semantic_analyzer.rb', line 13

def initialize(program)
  @program = program
end

Instance Method Details

#validate!Object



17
18
19
20
21
22
# File 'lib/rjq/semantic_analyzer.rb', line 17

def validate!
  global_functions = @program.definitions.map { |definition| signature(definition) }.to_h { |item| [item, true] }
  @program.definitions.each { |definition| validate_definition(definition, global_functions, {}) }
  validate_instructions(@program.instructions, global_functions, {}, {})
  @program
end