Class: RubyLess::RubyLessProcessor
- Inherits:
-
SexpProcessor
- Object
- SexpProcessor
- RubyLess::RubyLessProcessor
- Defined in:
- lib/processor.rb
Constant Summary collapse
- INFIX_OPERATOR =
['<=>', '==', '<', '>', '<=', '>=', '-', '+', '*', '/', '%']
- PREFIX_OPERATOR =
['-@']
Instance Attribute Summary collapse
-
#ruby ⇒ Object
readonly
Returns the value of attribute ruby.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(helper) ⇒ RubyLessProcessor
constructor
A new instance of RubyLessProcessor.
-
#process_and(exp) ⇒ Object
def process(exp) return nil if exp.nil? method = exp.shift send(“process_#method”, exp) end.
- #process_arglist(exp) ⇒ Object
- #process_array(exp) ⇒ Object
- #process_call(exp) ⇒ Object
- #process_dstr(exp) ⇒ Object
- #process_evstr(exp) ⇒ Object
- #process_fcall(exp) ⇒ Object
- #process_if(exp) ⇒ Object
- #process_lit(exp) ⇒ Object
- #process_not(exp) ⇒ Object
- #process_or(exp) ⇒ Object
- #process_str(exp) ⇒ Object
- #process_vcall(exp) ⇒ Object
Constructor Details
#initialize(helper) ⇒ RubyLessProcessor
Returns a new instance of RubyLessProcessor.
21 22 23 24 25 26 27 28 |
# File 'lib/processor.rb', line 21 def initialize(helper) super() @helper = helper @indent = " " self.auto_shift_type = true self.strict = true self.expected = TypedString end |
Instance Attribute Details
#ruby ⇒ Object (readonly)
Returns the value of attribute ruby.
11 12 13 |
# File 'lib/processor.rb', line 11 def ruby @ruby end |
Class Method Details
.translate(string, helper) ⇒ Object
16 17 18 19 |
# File 'lib/processor.rb', line 16 def self.translate(string, helper) sexp = RubyParser.new.parse(string) self.new(helper).process(sexp) end |
Instance Method Details
#process_and(exp) ⇒ Object
def process(exp)
return nil if exp.nil?
method = exp.shift
send("process_#{method}", exp)
end
36 37 38 |
# File 'lib/processor.rb', line 36 def process_and(exp) t "(#{process(exp.shift)} and #{process(exp.shift)})", Boolean end |
#process_arglist(exp) ⇒ Object
77 78 79 80 81 82 83 |
# File 'lib/processor.rb', line 77 def process_arglist(exp) code = t("") until exp.empty? do code.append_argument(process(exp.shift)) end code end |
#process_array(exp) ⇒ Object
85 86 87 88 |
# File 'lib/processor.rb', line 85 def process_array(exp) res = process_arglist(exp) exp.size > 1 ? t("[#{res}]", res.opts) : res end |
#process_call(exp) ⇒ Object
63 64 65 66 67 68 69 70 71 |
# File 'lib/processor.rb', line 63 def process_call(exp) receiver_node_type = exp.first.nil? ? nil : exp.first.first receiver = process exp.shift # receiver = t("(#{receiver})", receiver.klass) if # Ruby2Ruby::ASSIGN_NODES.include? receiver_node_type method_call(receiver, exp) end |
#process_dstr(exp) ⇒ Object
108 109 110 |
# File 'lib/processor.rb', line 108 def process_dstr(exp) t "\"#{parse_dstr(exp)}\"", String end |
#process_evstr(exp) ⇒ Object
112 113 114 |
# File 'lib/processor.rb', line 112 def process_evstr(exp) exp.empty? ? t('', String) : process(exp.shift) end |
#process_fcall(exp) ⇒ Object
73 74 75 |
# File 'lib/processor.rb', line 73 def process_fcall(exp) method_call(nil, exp) end |
#process_if(exp) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/processor.rb', line 48 def process_if(exp) cond = process(exp.shift) true_res = process(exp.shift) false_res = process(exp.shift) if true_res && false_res && true_res.klass != false_res.klass raise "Error in conditional expression: '#{true_res}' and '#{false_res}' do not return results of same type (#{true_res.klass} != #{false_res.klass})." end raise "Error in conditional expression." unless true_res || false_res opts = {} opts[:nil] = true_res.nil? || true_res.could_be_nil? || false_res.nil? || false_res.could_be_nil? opts[:class] = true_res ? true_res.klass : false_res.klass t "#{cond} ? #{true_res || 'nil'} : #{false_res || 'nil'}", opts end |
#process_lit(exp) ⇒ Object
99 100 101 102 |
# File 'lib/processor.rb', line 99 def process_lit(exp) lit = exp.shift t lit.inspect, lit.class == Symbol ? Symbol : Number end |
#process_not(exp) ⇒ Object
44 45 46 |
# File 'lib/processor.rb', line 44 def process_not(exp) t "not #{process(exp.shift)}", Boolean end |
#process_or(exp) ⇒ Object
40 41 42 |
# File 'lib/processor.rb', line 40 def process_or(exp) t "(#{process(exp.shift)} or #{process(exp.shift)})", Boolean end |
#process_str(exp) ⇒ Object
104 105 106 |
# File 'lib/processor.rb', line 104 def process_str(exp) t exp.shift.inspect, String end |
#process_vcall(exp) ⇒ Object
90 91 92 93 94 95 96 97 |
# File 'lib/processor.rb', line 90 def process_vcall(exp) var_name = exp.shift unless opts = get_method([var_name], @helper, false) raise "Unknown variable or method '#{var_name}'." end method = opts[:method] t method, opts end |