Class: Kumi::Core::Analyzer::Passes::Codegen::Js::Emitter

Inherits:
Object
  • Object
show all
Defined in:
lib/kumi/core/analyzer/passes/codegen/js/emitter.rb

Defined Under Namespace

Classes: BindsInfo, KernelInfo

Instance Method Summary collapse

Constructor Details

#initialize(kernels_data, binds_data) ⇒ Emitter

Returns a new instance of Emitter.



13
14
15
16
17
18
19
20
# File 'lib/kumi/core/analyzer/passes/codegen/js/emitter.rb', line 13

def initialize(kernels_data, binds_data)
  @kernels = kernels_data.map { |k| KernelInfo.new(**k.slice("id", "fn_id", "impl", "attrs").transform_keys(&:to_sym)) }
                         .to_h { |k| [k.fn_id, k] }

  @binds = binds_data.map { |b| BindsInfo.new(**b.slice("op_result_reg", "fn_id").transform_keys(&:to_sym)) }
                     .to_h { |b| [b.op_result_reg, b] }
  @buffer = OutputBuffer.new
end

Instance Method Details

#emit(declarations, schema_digest:) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/kumi/core/analyzer/passes/codegen/js/emitter.rb', line 22

def emit(declarations, schema_digest:)
  @buffer.reset!
  # @buffer.emit_header(schema_digest)
  # @buffer.emit_class_methods(declarations.keys)
  emit_private_helpers
  # @buffer.emit_footer

  declarations.each do |name, payload|
    emit_declaration(name, Array(payload[:operations]))
  end

  @buffer.to_s
end