Sha256: bdc4c98e08fbbc9ff35ae5cdad7022a4f232deee6594beb5c693e5fe9d2e23a6

Contents?: true

Size: 1.01 KB

Versions: 1

Compression:

Stored size: 1.01 KB

Contents

module Liquidscript
  module Compiler
    class ICR < Base
      module Functions

        def compile_property(prop)
          shift :prop

          ref = if prop.type == :identifier
            ref(prop)
          else
            prop
          end

          property = action do |ident|
            code :property, ref, ident
          end

          code = expect :identifier => property

          expect :lparen => action { compile_call(code)       },
                 :equal  => action { compile_assignment(code) },
                 :prop   => action { compile_property(code)   },
                 :_      => action { code                     }
        end

        def compile_call(subject)
          shift :lparen
          arguments = []

          loop do
            expect :comma  => action.shift,
                   :rparen => action.end_loop,
                   :_      => action { arguments << compile_expression }
          end

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
liquidscript-0.0.1 lib/liquidscript/compiler/icr/functions.rb