Sha256: 75427eb45caf98440471d5570e797253a07807421289076caea9ea79333d46e3

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

module Jsrb
  class Base
    def initialize
      @context = JSStatementContext.new
    end

    def generate_code
      generator = self.class.code_generator_class.new
      generator.call type: 'Program',
                     sourceType: 'script',
                     body: @context.stacks.first
    end

    def var!(id = nil)
      id ||= @context.gen_var_name!
      if block_given?
        raw_expr = yield
        val = raw_expr.is_a?(ExprChain) ? raw_expr : expr(@context.ruby_to_js_ast(raw_expr))
        val.as_variable_declaration!(id)
      else
        expr.as_variable_declaration!(id)
      end
      expr.member!(id)
    end

    def if!(cond_expr, &block)
      CondChain.new(@context, false).elsif(cond_expr, &block)
    end

    def if(cond_expr, &block)
      CondChain.new(@context, true).elsif(cond_expr, &block)
    end

    def expr(object = nil)
      @context.new_expression(object)
    end

    class << self
      def code_generator_class
        @code_generator_class ||= Object.const_get(code_generator)
      end

      def code_generator
        @code_generator || 'Jsrb::NotFastGenerator'
      end

      attr_writer :code_generator
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jsrb-0.2.0 lib/jsrb/base.rb
jsrb-0.1.0 lib/jsrb/base.rb