Module: Liquidscript::Compiler::ICR::Classes

Included in:
Liquidscript::Compiler::ICR
Defined in:
lib/liquidscript/compiler/icr/classes.rb

Instance Method Summary collapse

Instance Method Details

#_compile_class_body(mod = false) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/liquidscript/compiler/icr/classes.rb', line 32

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

#_compile_class_body_key(mod) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/liquidscript/compiler/icr/classes.rb', line 55

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

#compile_classObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/liquidscript/compiler/icr/classes.rb', line 6

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

#compile_moduleObject



23
24
25
26
27
28
29
30
# File 'lib/liquidscript/compiler/icr/classes.rb', line 23

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

  code :module, name, body
end