mirror of
https://github.com/AdaCore/langkit.git
synced 2026-02-12 12:28:12 -08:00
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
import sys
|
|
|
|
import libfoolang
|
|
|
|
|
|
ctx = libfoolang.AnalysisContext()
|
|
unit = ctx.get_from_buffer("foo.txt", b"example (example)")
|
|
|
|
# Make sure that the exact context wraper is re-used over and over
|
|
assert unit.context is ctx
|
|
|
|
if unit.diagnostics:
|
|
for d in unit.diagnostics:
|
|
print(d)
|
|
sys.exit(1)
|
|
|
|
root = unit.root
|
|
child = root[0]
|
|
|
|
# Make sure that the exact unit/node wrapper is re-used over and over
|
|
assert child.parent is root
|
|
assert root[0] is child
|
|
assert root.unit is unit
|
|
|
|
# Make sure trying to use a stale reference raises an error
|
|
print("Reparsing...")
|
|
unit.reparse(b"example (example) # reparsed")
|
|
for name, computation in [
|
|
(".parent", lambda n: n.parent),
|
|
("[0]", lambda n: n[0]),
|
|
("str()", lambda n: str(n)),
|
|
]:
|
|
print("Trying to compute: {}...".format(name))
|
|
try:
|
|
computation(root)
|
|
except libfoolang.StaleReferenceError:
|
|
print(" StaleReferenceError raised!")
|
|
else:
|
|
print(" No error raised...")
|
|
|
|
# ... however the equality/hashing methods should not, to allow stale
|
|
# references in dicts/sets to be free'd after the reparse.
|
|
assert isinstance(hash(root), int)
|
|
assert root == root
|
|
|
|
print("main.py: Done.")
|