class RKelly::Visitors::ECMAVisitor
Public Class Methods
new()
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 6 def initialize @indent = 0 end
Public Instance Methods
function_params_and_body(o)
click to toggle source
Helper for all the various function nodes
# File lib/rkelly/visitors/ecma_visitor.rb, line 285 def function_params_and_body(o) "(#{o.arguments.map { |x| x.accept(self) }.join(', ')}) " << "#{o.function_body.accept(self)}" end
visit_ArgumentsNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 79 def visit_ArgumentsNode(o) o.value.map { |x| x.accept(self) }.join(', ') end
visit_ArrayNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 144 def visit_ArrayNode(o) "[#{o.value.map { |x| x ? x.accept(self) : '' }.join(', ')}]" end
visit_AssignExprNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 30 def visit_AssignExprNode(o) " = #{o.value.accept(self)}" end
visit_BitwiseNotNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 136 def visit_BitwiseNotNode(o) "~#{o.value.accept(self)}" end
visit_BlockNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 62 def visit_BlockNode(o) @indent += 1 "{\n#{o.value.accept(self)}\n#{@indent -=1; indent}}" end
visit_BracketAccessorNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 316 def visit_BracketAccessorNode(o) "#{o.value.accept(self)}[#{o.accessor.accept(self)}]" end
visit_BreakNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 104 def visit_BreakNode(o) +"break" << (o.value ? " #{o.value}" : '') << ';' end
visit_CaseBlockNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 228 def visit_CaseBlockNode(o) @indent += 1 +"{\n" << (o.value ? o.value.map { |x| x.accept(self) }.join('') : '') << "#{@indent -=1; indent}}" end
visit_CaseClauseNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 234 def visit_CaseClauseNode(o) if o.left case_code = "#{indent}case #{o.left.accept(self)}:\n" else case_code = "#{indent}default:\n" end @indent += 1 case_code << "#{o.value.accept(self)}\n" @indent -= 1 case_code end
visit_CommaNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 290 def visit_CommaNode(o) "#{o.left.accept(self)}, #{o.value.accept(self)}" end
visit_ConditionalNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 299 def visit_ConditionalNode(o) "#{o.conditions.accept(self)} ? #{o.value.accept(self)} : " << "#{o.else.accept(self)}" end
visit_ConstStatementNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 22 def visit_ConstStatementNode(o) "const #{o.value.map { |x| x.accept(self) }.join(', ')};" end
visit_ContinueNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 108 def visit_ContinueNode(o) +"continue" << (o.value ? " #{o.value}" : '') << ';' end
visit_DeleteNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 140 def visit_DeleteNode(o) "delete #{o.value.accept(self)}" end
visit_DoWhileNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 246 def visit_DoWhileNode(o) "do #{o.left.accept(self)} while(#{o.value.accept(self)});" end
visit_DotAccessorNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 128 def visit_DotAccessorNode(o) "#{o.value.accept(self)}.#{o.accessor}" end
visit_ElementNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 148 def visit_ElementNode(o) o.value.accept(self) end
visit_EmptyStatementNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 120 def visit_EmptyStatementNode(o) ';' end
visit_ExpressionStatementNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 67 def visit_ExpressionStatementNode(o) "#{o.value.accept(self)};" end
visit_FalseNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 116 def visit_FalseNode(o) "false" end
visit_ForInNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 304 def visit_ForInNode(o) var = o.left.is_a?(RKelly::Nodes::VarDeclNode) ? 'var ' : '' "for(#{var}#{o.left.accept(self)} in #{o.right.accept(self)}) " << "#{o.value.accept(self)}" end
visit_ForNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 38 def visit_ForNode(o) init = o.init ? o.init.accept(self) : ';' init << ';' unless init.end_with? ';' # make sure it has a ; test = o.test ? o.test.accept(self) : '' counter = o.counter ? o.counter.accept(self) : '' "for(#{init} #{test}; #{counter}) #{o.value.accept(self)}" end
visit_FunctionBodyNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 99 def visit_FunctionBodyNode(o) @indent += 1 "{\n#{o.value.accept(self)}\n#{@indent -=1; indent}}" end
visit_FunctionCallNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 75 def visit_FunctionCallNode(o) "#{o.value.accept(self)}(#{o.arguments.accept(self)})" end
visit_FunctionDeclNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 91 def visit_FunctionDeclNode(o) "#{indent}function #{o.value}" << function_params_and_body(o) end
visit_FunctionExprNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 279 def visit_FunctionExprNode(o) name = (o.value == 'function') ? '' : +' ' << o.value +"function" << name << function_params_and_body(o) end
visit_GetterPropertyNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 271 def visit_GetterPropertyNode(o) "get #{o.name}" << function_params_and_body(o.value) end
visit_IfNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 294 def visit_IfNode(o) "if(#{o.conditions.accept(self)}) #{o.value.accept(self)}" << (o.else ? " else #{o.else.accept(self)}" : '') end
visit_LabelNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 254 def visit_LabelNode(o) "#{o.name}: #{o.value.accept(self)}" end
visit_LessNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 46 def visit_LessNode(o) "#{o.left.accept(self)} < #{o.value.accept(self)}" end
visit_LogicalNotNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 152 def visit_LogicalNotNode(o) "!#{o.value.accept(self)}" end
visit_NewExprNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 320 def visit_NewExprNode(o) "new #{o.value.accept(self)}(#{o.arguments.accept(self)})" end
visit_NullNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 87 def visit_NullNode(o) "null" end
visit_NumberNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 34 def visit_NumberNode(o) o.value.to_s end
visit_ObjectLiteralNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 258 def visit_ObjectLiteralNode(o) @indent += 1 lit = +"{" << (o.value.length > 0 ? "\n" : ' ') << o.value.map { |x| "#{indent}#{x.accept(self)}" }.join(",\n") << (o.value.length > 0 ? "\n" : '') << '}' @indent -= 1 lit end
visit_OpEqualNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 71 def visit_OpEqualNode(o) "#{o.left.accept(self)} = #{o.value.accept(self)}" end
visit_ParameterNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 95 def visit_ParameterNode(o) o.value end
visit_ParentheticalNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 10 def visit_ParentheticalNode(o) "(#{o.value.accept(self)})" end
visit_PostfixNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 54 def visit_PostfixNode(o) "#{o.operand.accept(self)}#{o.value}" end
visit_PrefixNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 58 def visit_PrefixNode(o) "#{o.value}#{o.operand.accept(self)}" end
visit_PropertyNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 267 def visit_PropertyNode(o) "#{o.name}: #{o.value.accept(self)}" end
visit_RegexpNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 124 def visit_RegexpNode(o) o.value end
visit_ResolveNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 50 def visit_ResolveNode(o) o.value end
visit_ReturnNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 164 def visit_ReturnNode(o) +"return" << (o.value ? " #{o.value.accept(self)}" : '') << ';' end
visit_SetterPropertyNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 275 def visit_SetterPropertyNode(o) "set #{o.name}" << function_params_and_body(o.value) end
visit_SourceElementsNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 14 def visit_SourceElementsNode(o) o.value.map { |x| "#{indent}#{x.accept(self)}" }.join("\n") end
visit_StringNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 83 def visit_StringNode(o) o.value end
visit_SwitchNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 224 def visit_SwitchNode(o) "switch(#{o.left.accept(self)}) #{o.value.accept(self)}" end
visit_ThisNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 132 def visit_ThisNode(o) "this" end
visit_ThrowNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 168 def visit_ThrowNode(o) "throw #{o.value.accept(self)};" end
visit_TrueNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 112 def visit_TrueNode(o) "true" end
visit_TryNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 310 def visit_TryNode(o) "try #{o.value.accept(self)}" << (o.catch_block ? " catch(#{o.catch_var}) #{o.catch_block.accept(self)}" : '') << (o.finally_block ? " finally #{o.finally_block.accept(self)}" : '') end
visit_TypeOfNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 172 def visit_TypeOfNode(o) "typeof #{o.value.accept(self)}" end
visit_UnaryMinusNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 156 def visit_UnaryMinusNode(o) "-#{o.value.accept(self)}" end
visit_UnaryPlusNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 160 def visit_UnaryPlusNode(o) "+#{o.value.accept(self)}" end
visit_VarDeclNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 26 def visit_VarDeclNode(o) "#{o.name}#{o.value ? o.value.accept(self) : nil}" end
visit_VarStatementNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 18 def visit_VarStatementNode(o) "var #{o.value.map { |x| x.accept(self) }.join(', ')};" end
visit_VoidNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 176 def visit_VoidNode(o) "void(#{o.value.accept(self)})" end
visit_WhileNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 220 def visit_WhileNode(o) "while(#{o.left.accept(self)}) #{o.value.accept(self)}" end
visit_WithNode(o)
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 250 def visit_WithNode(o) "with(#{o.left.accept(self)}) #{o.value.accept(self)}" end
Private Instance Methods
indent()
click to toggle source
# File lib/rkelly/visitors/ecma_visitor.rb, line 325 def indent; ' ' * (@indent * 2); end