# File lib/declarative_authorization/development_support/analyzer.rb, line 201
        def process_call (exp)
          klass = exp.shift
          name = exp.shift
          case name
          when :role
            analyze_rules
            @has_permission = []
            s(:call, klass, name)
          when :has_permission_on
            arglist_line = exp[0].line
            arglist = process(exp.shift).shift
            context = arglist.shift
            args_hash = arglist.shift
            @has_permission << {
              :context => context,
              :rules => [],
              :privilege => args_hash && args_hash[:to],
              # a hack: call exp line seems to be wrong
              :line => arglist_line
            }
            s(:call, klass, name)
          when :to
            @has_permission.last[:privilege] = process(exp.shift).shift if @has_permission
            s(:call, klass, name)
          when :if_attribute
            rules = process(exp.shift).shift
            rules.unshift :if_attribute
            @has_permission.last[:rules] << rules if @has_permission
            s(:call, klass, name)
          when :if_permitted_to
            rules = process(exp.shift).shift
            rules.unshift :if_permitted_to
            @has_permission.last[:rules] << rules if @has_permission
            s(:call, klass, name)
          else
            s(:call, klass, name, process(exp.shift))
          end
        end