Ignore:
Timestamp:
05/29/11 22:51:30 (3 years ago)
Author:
xi
Message:

Clear cyclic references in the parser and the emitter to avoid extra GC calls.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pyyaml/trunk/lib/yaml/__init__.py

    r360 r377  
    2222    """ 
    2323    loader = Loader(stream) 
    24     while loader.check_token(): 
    25         yield loader.get_token() 
     24    try: 
     25        while loader.check_token(): 
     26            yield loader.get_token() 
     27    finally: 
     28        loader.dispose() 
    2629 
    2730def parse(stream, Loader=Loader): 
     
    3033    """ 
    3134    loader = Loader(stream) 
    32     while loader.check_event(): 
    33         yield loader.get_event() 
     35    try: 
     36        while loader.check_event(): 
     37            yield loader.get_event() 
     38    finally: 
     39        loader.dispose() 
    3440 
    3541def compose(stream, Loader=Loader): 
     
    3945    """ 
    4046    loader = Loader(stream) 
    41     return loader.get_single_node() 
     47    try: 
     48        return loader.get_single_node() 
     49    finally: 
     50        loader.dispose() 
    4251 
    4352def compose_all(stream, Loader=Loader): 
     
    4756    """ 
    4857    loader = Loader(stream) 
    49     while loader.check_node(): 
    50         yield loader.get_node() 
     58    try: 
     59        while loader.check_node(): 
     60            yield loader.get_node() 
     61    finally: 
     62        loader.dispose() 
    5163 
    5264def load(stream, Loader=Loader): 
     
    5668    """ 
    5769    loader = Loader(stream) 
    58     return loader.get_single_data() 
     70    try: 
     71        return loader.get_single_data() 
     72    finally: 
     73        loader.dispose() 
    5974 
    6075def load_all(stream, Loader=Loader): 
     
    6479    """ 
    6580    loader = Loader(stream) 
    66     while loader.check_data(): 
    67         yield loader.get_data() 
     81    try: 
     82        while loader.check_data(): 
     83            yield loader.get_data() 
     84    finally: 
     85        loader.dispose() 
    6886 
    6987def safe_load(stream): 
     
    97115    dumper = Dumper(stream, canonical=canonical, indent=indent, width=width, 
    98116            allow_unicode=allow_unicode, line_break=line_break) 
    99     for event in events: 
    100         dumper.emit(event) 
     117    try: 
     118        for event in events: 
     119            dumper.emit(event) 
     120    finally: 
     121        dumper.dispose() 
    101122    if getvalue: 
    102123        return getvalue() 
     
    123144            encoding=encoding, version=version, tags=tags, 
    124145            explicit_start=explicit_start, explicit_end=explicit_end) 
    125     dumper.open() 
    126     for node in nodes: 
    127         dumper.serialize(node) 
    128     dumper.close() 
     146    try: 
     147        dumper.open() 
     148        for node in nodes: 
     149            dumper.serialize(node) 
     150        dumper.close() 
     151    finally: 
     152        dumper.dispose() 
    129153    if getvalue: 
    130154        return getvalue() 
     
    161185            encoding=encoding, version=version, tags=tags, 
    162186            explicit_start=explicit_start, explicit_end=explicit_end) 
    163     dumper.open() 
    164     for data in documents: 
    165         dumper.represent(data) 
    166     dumper.close() 
     187    try: 
     188        dumper.open() 
     189        for data in documents: 
     190            dumper.represent(data) 
     191        dumper.close() 
     192    finally: 
     193        dumper.dispose() 
    167194    if getvalue: 
    168195        return getvalue() 
Note: See TracChangeset for help on using the changeset viewer.