Sha256: 1e8d12153bbe27bfc3e3d43cc956ba9670201d694e95ca3707fc0ee3939bca80

Contents?: true

Size: 1.34 KB

Versions: 6

Compression:

Stored size: 1.34 KB

Contents

module Liquidscript
  module Compiler
    class ICR
      module Classes

        def compile_class
          shift :class
          name = shift :identifier
          set name
          body = _compile_class_body(false)

          code :class, name, body
        end

        def compile_module
          shift :module
          name = shift :identifier
          set name
          body = _compile_class_body(true)

          code :module, name, body
        end

        def _compile_class_body(mod = false)
          shift :lbrack

          components = []

          compile_object = action do
            components << [
              _compile_class_body_key(mod),
              compile_vexpression
            ]
          end

          loop do
            expect :newline, :rbrack => action.end_loop,
            :comma         => action.shift,
            :module        => action { components << compile_module },
            :class         => action { components << compile_class  },
            [:identifier, :dstring] => compile_object
          end

          components
        end

        def _compile_class_body_key(mod)
          item = shift :identifier, :dstring

          item = compile_property(item) if item.type == :identifier &&
            peek?(:prop) && !mod

          shift :colon
          item
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
liquidscript-0.4.1 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.4.0 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.3.1 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.3.0 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.2.1 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.2.0 lib/liquidscript/compiler/icr/classes.rb