Sha256: 2bb7ea22e906f645cf1697a038e9f28b3c50ed0eeb60df93828ca29564ea64d9

Contents?: true

Size: 1.74 KB

Versions: 6

Compression:

Stored size: 1.74 KB

Contents

module Liquidscript
  module Compiler
    class ICR < Base
      module Functions

        def compile_property(prop)
          shift :prop

          property = action do |ident|
            code :property, prop, (ident.value || ident.type)
          end

          # Just in case there is a property named 'class' or 'module'
          v = expect [:identifier, :class, :module] => property

          v
        end

        def compile_access(body)
          shift :lbrack
          key = compile_vexpression
          shift :rbrack

          v = code :access, body, key

          v
        end

        def compile_call(subject)
          shift :lparen

          if subject.type == :identifier
            ref(subject)
          end

          arguments = collect_compiles :expression, :rparen,
            :comma => action.shift

          call = code :call, subject, *arguments
          call
        end


        def compile_function_with_parameters(parameters)
          shift :arrow

          expressions = _build_set(parameters)

          if peek?(:lbrace)
            shift :lbrace
            collect_compiles(:rbrace) do
              expressions << compile_expression
            end
          else
            expressions << compile_expression
          end

          code :function, @set.pop
        end

        private

        def _build_set(parameters)
          expressions = Liquidscript::ICR::Set.new
          expressions.context = Liquidscript::ICR::Context.new
          expressions.context.parent = top.context
          expressions[:arguments] = parameters
          @set << expressions

          parameters.each do |parameter|
            set(parameter).parameter!
          end

          expressions
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
liquidscript-0.9.2 lib/liquidscript/compiler/icr/functions.rb
liquidscript-0.9.1 lib/liquidscript/compiler/icr/functions.rb
liquidscript-0.9.0 lib/liquidscript/compiler/icr/functions.rb
liquidscript-0.8.2 lib/liquidscript/compiler/icr/functions.rb
liquidscript-0.8.1 lib/liquidscript/compiler/icr/functions.rb
liquidscript-0.8.0 lib/liquidscript/compiler/icr/functions.rb