Sha256: d70cb02e163002b6ebdaf3bf435a456a112ff82a673c5ed3f407eb909ceb4e61

Contents?: true

Size: 1.53 KB

Versions: 12

Compression:

Stored size: 1.53 KB

Contents

module Liquidscript
  module Compiler
    class ICR
      module Classes

        def compile_class
          shift :class
          name = shift :identifier
          inherit = nil
          set name
          # Inheritance ftw!
          if peek?(:colon)
            shift :colon
            inherit = shift :identifier
            ref inherit
          end

          body = _compile_class_body(false)

          code :class, name, inherit, 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 :lbrace

          components = []

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

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

          components
        end

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

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

          shift :colon
          item
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
liquidscript-0.7.5 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.7.4 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.7.3 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.7.2 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.7.1 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.7.0 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.6.5 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.6.4 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.6.3 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.6.2 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.6.1 lib/liquidscript/compiler/icr/classes.rb
liquidscript-0.6.0 lib/liquidscript/compiler/icr/classes.rb