metasploit-framework/lib/rkelly/visitors/function_visitor.rb

47 lines
1.9 KiB
Ruby

module RKelly
module Visitors
class FunctionVisitor < Visitor
attr_reader :scope_chain
def initialize(scope)
super()
@scope_chain = scope
end
def visit_SourceElementsNode(o)
o.value.each { |x| x.accept(self) }
end
def visit_FunctionDeclNode(o)
if o.value
scope_chain[o.value].value = RKelly::JS::Function.new(o.function_body, o.arguments)
end
end
%w{
AddNode ArgumentsNode ArrayNode AssignExprNode BitAndNode BitOrNode
BitXOrNode BitwiseNotNode BlockNode BracketAccessorNode BreakNode
CaseBlockNode CaseClauseNode CommaNode ConditionalNode
ConstStatementNode ContinueNode DeleteNode DivideNode
DoWhileNode DotAccessorNode ElementNode EmptyStatementNode EqualNode
ExpressionStatementNode FalseNode ForInNode ForNode FunctionBodyNode
FunctionExprNode GetterPropertyNode GreaterNode GreaterOrEqualNode
IfNode InNode InstanceOfNode LabelNode LeftShiftNode LessNode
LessOrEqualNode LogicalAndNode LogicalNotNode LogicalOrNode ModulusNode
MultiplyNode NewExprNode NotEqualNode NotStrictEqualNode NullNode
NumberNode ObjectLiteralNode OpAndEqualNode OpDivideEqualNode
OpEqualNode OpLShiftEqualNode OpMinusEqualNode OpModEqualNode
OpMultiplyEqualNode OpOrEqualNode OpPlusEqualNode OpRShiftEqualNode
OpURShiftEqualNode OpXOrEqualNode ParameterNode PostfixNode PrefixNode
PropertyNode RegexpNode ResolveNode ReturnNode RightShiftNode
SetterPropertyNode StrictEqualNode StringNode
SubtractNode SwitchNode ThisNode ThrowNode TrueNode TryNode TypeOfNode
UnaryMinusNode UnaryPlusNode UnsignedRightShiftNode VarDeclNode
VarStatementNode VoidNode WhileNode WithNode
}.each do |type|
define_method(:"visit_#{type}") do |o|
end
end
end
end
end