def node_power(self, node):
        jsvars = self.jsvars.copy()
        childs = node.children.__iter__()
        left = self.dispatch(childs.next())
        if isinstance(node.children[1], Leaf):
            if node.children[1].value == '**':
                assert len(node.children) == 3
                jsvars.update(
                    left=self.dispatch(node.children[0]),
                    right=self.dispatch(node.children[2]),
                )
                return "%(builtin)s['op_pow'](%(left)s, %(right)s)" % jsvars
        elif isinstance(node.children[1], Node):
            attrs = []
            lineno = self.track_lineno(node)
            for child in node.children[1:]:
                if isinstance(child, Leaf) and \
                   child.value == '**':
                    assert child is node.children[-2]
                    jsvars.update(
                        left=left,
                        right=self.dispatch(node.children[-1]),
                    )
                    return "%(builtin)s['op_pow'](%(left)s, %(right)s)" % jsvars
                trailer = self.dispatch(child)
                if isinstance(trailer, Attribute):
                    assert not isinstance(left, __Pyjamas__.__Pyjamas__), node
                    attrs.append(trailer.name)
                elif isinstance(trailer, Slice):
                    assert not isinstance(left, __Pyjamas__.__Pyjamas__), node
                    assign = self.assign_state is not False and \
                             child is node.children[-1]
                    if assign is False:
                        method = "'getslice'"
                    else:
                        method = "'setslice'"
                    if len(trailer.items) == 1:
                        if assign is False:
                            method = jsvars % '%(getitem)s'
                        else:
                            method = "'setitem'" % jsvars
                        args = trailer.items[0]
                    elif len(trailer.items) == 2:
                        args = list(trailer.items)
                        if args[0] == None:
                            args[0] = self.add_const_int(0)
                        if args[1] == None:
                            args[1] = self.add_const_int(2147483647)
                        args = "[%s]" % ', '.join(str(i) for i in args)
                    else:
                        args = []
                        for a in trailer.items:
                            if a is None:
                                args.append(jsvars['None'])
                            else:
                                args.append(a)
                        args = ', '.join(args)
                        jsvars.update(args=args)
                        args = "%(fcall)s(%(module)s, null, %(builtin)s['slice'], null, %(args)s)" % jsvars
                    if attrs:
                        attrs = ', '.join(attrs)
                        jsvars.update(attrs=attrs, left=left)
                        left = """\
%(getattr)s(%(left)s, [%(attrs)s])""" % jsvars
                        attrs = []
                    jsvars.update(locals())
                    if self.assign_state is False:
                        left = """\
%(builtin)s[%(method)s](%(left)s, %(args)s)""" % jsvars
                    else:
                        jsvars['what'] = self.assign_state
                        left = """\
%(builtin)s[%(method)s](%(left)s, %(args)s, %(what)s)""" % jsvars
                elif isinstance(trailer, Parameters):

                    params = trailer
                    args = ''
                    if params.args:
                        args += ', ' + ', '.join([str(a) for a in params.args])
                    star_args = params.star_args
                    dstar_args = params.dstar_args
                    named_args = params.named_args
                    extended = False
                    if star_args or dstar_args or named_args:
                        extended = True
                        if star_args is None:
                            star_args = 'null'
                        if dstar_args is None:
                            dstar_args = 'null'
                        if named_args is None:
                            named_args = 'null'
                        else:
                            named_args = ', '.join([
                                '%r: %s' % (k, v) for k,v in named_args.iteritems()
                            ])
                            named_args = "{%s}" % named_args
                    if isinstance(left, __Pyjamas__.__Pyjamas__):
                        if params.named_args is None:
                            left = Code(left.js(self, *params.args), self.get_lineno(node))
                        else:
                            left = Code(left.js(self, *params.args, **params.named_args), self.get_lineno(node))
                    elif not attrs:
                        jsvars.update(locals())
                        if star_args is None:
                            left = """\
%(fcall)s(%(module)s, %(lineno)s, %(left)s, null%(args)s)""" % jsvars
                        else:
                            left = """\
%(fcallext)s(%(module)s, %(lineno)s, %(left)s, null%(args)s, %(star_args)s, %(dstar_args)s, %(named_args)s)""" % jsvars
                    else:
                        attrs = ', '.join(attrs)
                        jsvars.update(locals())
                        if star_args is None:
                            left = """\
%(mcall)s(%(module)s, %(lineno)s, %(left)s, [%(attrs)s]%(args)s)""" % jsvars
                        else:
                            left = """\
%(mcallext)s(%(module)s, %(lineno)s, %(left)s, [%(attrs)s]%(args)s, %(star_args)s, %(dstar_args)s, %(named_args)s)""" % jsvars
                    attrs = []
            if attrs:
                attrs = ', '.join(attrs)
                if self.assign_state is False:
                    jsvars.update(locals())
                    return Code("""\
%(getattr)s(%(left)s, [%(attrs)s])""" % jsvars, self.get_lineno(node))
                else:
                    value = self.assign_state
                    jsvars.update(locals())
                    return Code("""\
%(setattr)s(%(left)s, [%(attrs)s], %(value)s)""" % jsvars, self.get_lineno(node))
            return Code(left, self.get_lineno(node))

        self.not_implemented(node)
dataset/ETHPy150Open anandology/pyjamas/pyjs/src/pyjs/translator_dict.py/Translator.node_power/swapped operands of `%`