Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RuntimeError from XPath union expression #8

Open
uogbuji opened this issue Sep 21, 2011 · 0 comments
Open

RuntimeError from XPath union expression #8

uogbuji opened this issue Sep 21, 2011 · 0 comments

Comments

@uogbuji
Copy link
Contributor

uogbuji commented Sep 21, 2011

Pretty simple. I tried to do the following:

import amara 

RDFA11_EXAMPLE = """\
<div vocab="http://schema.org/"
     typeof="Person">
  <span property="name">Manu Sporny</span>
  <img rel="image" src="manu.jpg" />

  <span property="jobTitle">CEO</span>

  <div rel="address">
    <span property="streetAddress">
     1700 Kraft Drive, Suite 2408
    </span>
    ...
  </div>

  <a rel="url"
     href="http://manu.sporny.org/">
       manu.sporny.org
  </a>
</div>
"""

doc = amara.parse(RDFA11_EXAMPLE)
doc.xml_select(u'//*[@property|@resource|@rel]')

Throws the following exception:

Traceback (most recent call last):
  File "/tmp/foo.py", line 26, in <module>
    doc.xml_select(u'//*[@property|@resource|@rel]')
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/util.py", line 52, in simple_evaluate
    return ctx.evaluate(expr)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/__init__.py", line 224, in evaluate
    return parsed.evaluate(self)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/__init__.py", line 65, in evaluate
    return self.evaluate(context)
  File "<ast-0>", line 0, in evaluate
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 161, in _boolean
    if expr.evaluate_as_boolean(context):
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/__init__.py", line 70, in evaluate_as_boolean
    self.compile_as_boolean(compiler)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/nodesets.py", line 155, in compile_as_boolean
    path.compile_as_boolean(compiler)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/nodesets.py", line 78, in compile_as_boolean
    return self._make_loop(compiler, found, empty)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/nodesets.py", line 44, in _make_loop
    for block in self._make_block(compiler):
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/nodesets.py", line 24, in _make_block
    'LOAD_ATTR', 'size',
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/compiler/assembler.py", line 41, in emit
    for opname in instructions:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 159, in _boolean
    for node in nodes:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 161, in _boolean
    if expr.evaluate_as_boolean(context):
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/__init__.py", line 70, in evaluate_as_boolean
    self.compile_as_boolean(compiler)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/nodesets.py", line 155, in compile_as_boolean
    path.compile_as_boolean(compiler)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/nodesets.py", line 78, in compile_as_boolean
    return self._make_loop(compiler, found, empty)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/nodesets.py", line 44, in _make_loop
    for block in self._make_block(compiler):
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/nodesets.py", line 24, in _make_block
    'LOAD_ATTR', 'size',
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/compiler/assembler.py", line 41, in emit
    for opname in instructions:
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/locationpaths/predicates.py", line 161, in _boolean
    if expr.evaluate_as_boolean(context):
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/expressions/__init__.py", line 72, in evaluate_as_boolean
    docstring=unicode(self))
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/compiler/__init__.py", line 45, in compile
    firstlineno)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/compiler/assembler.py", line 60, in assemble
    stacksize = self._compute_stack_size()
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/compiler/assembler.py", line 202, in _compute_stack_size
    return walk(self.entry, 0, 0)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/compiler/assembler.py", line 192, in walk
    maxsize = walk(instr.target, size, maxsize)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/compiler/assembler.py", line 198, in walk
    maxsize = walk(block.next, size, maxsize)
  File "/Users/uche/.local/lib/python2.7/site-packages/amara/xpath/compiler/assembler.py", line 187, in walk
    raise RuntimeError("unhandled instruction: %r" % instr)
RuntimeError: unhandled instruction: <instr at 0x10b236940: opname='<block 1, offset 0>', oparg=None, target=None>

This only seems to happen when the union expression is used. You can do any of the following without the error:

  • doc.xml_select(u'//*[@property]')
  • doc.xml_select(u'//*[@resource]')
  • doc.xml_select(u'//*[@rel]')

But any combination of 2 of the attributes in a union expression does trigger the exception.

@lmorillas lmorillas mentioned this issue Jun 24, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant