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/lib3/yaml/__init__.py

    r360 r377  
    2323    """ 
    2424    loader = Loader(stream) 
    25     while loader.check_token(): 
    26         yield loader.get_token() 
     25    try: 
     26        while loader.check_token(): 
     27            yield loader.get_token() 
     28    finally: 
     29        loader.dispose() 
    2730 
    2831def parse(stream, Loader=Loader): 
     
    3134    """ 
    3235    loader = Loader(stream) 
    33     while loader.check_event(): 
    34         yield loader.get_event() 
     36    try: 
     37        while loader.check_event(): 
     38            yield loader.get_event() 
     39    finally: 
     40        loader.dispose() 
    3541 
    3642def compose(stream, Loader=Loader): 
     
    4046    """ 
    4147    loader = Loader(stream) 
    42     return loader.get_single_node() 
     48    try: 
     49        return loader.get_single_node() 
     50    finally: 
     51        loader.dispose() 
    4352 
    4453def compose_all(stream, Loader=Loader): 
     
    4857    """ 
    4958    loader = Loader(stream) 
    50     while loader.check_node(): 
    51         yield loader.get_node() 
     59    try: 
     60        while loader.check_node(): 
     61            yield loader.get_node() 
     62    finally: 
     63        loader.dispose() 
    5264 
    5365def load(stream, Loader=Loader): 
     
    5769    """ 
    5870    loader = Loader(stream) 
    59     return loader.get_single_data() 
     71    try: 
     72        return loader.get_single_data() 
     73    finally: 
     74        loader.dispose() 
    6075 
    6176def load_all(stream, Loader=Loader): 
     
    6580    """ 
    6681    loader = Loader(stream) 
    67     while loader.check_data(): 
    68         yield loader.get_data() 
     82    try: 
     83        while loader.check_data(): 
     84            yield loader.get_data() 
     85    finally: 
     86        loader.dispose() 
    6987 
    7088def 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() 
     
    122143            encoding=encoding, version=version, tags=tags, 
    123144            explicit_start=explicit_start, explicit_end=explicit_end) 
    124     dumper.open() 
    125     for node in nodes: 
    126         dumper.serialize(node) 
    127     dumper.close() 
     145    try: 
     146        dumper.open() 
     147        for node in nodes: 
     148            dumper.serialize(node) 
     149        dumper.close() 
     150    finally: 
     151        dumper.dispose() 
    128152    if getvalue: 
    129153        return getvalue() 
     
    159183            encoding=encoding, version=version, tags=tags, 
    160184            explicit_start=explicit_start, explicit_end=explicit_end) 
    161     dumper.open() 
    162     for data in documents: 
    163         dumper.represent(data) 
    164     dumper.close() 
     185    try: 
     186        dumper.open() 
     187        for data in documents: 
     188            dumper.represent(data) 
     189        dumper.close() 
     190    finally: 
     191        dumper.dispose() 
    165192    if getvalue: 
    166193        return getvalue() 
Note: See TracChangeset for help on using the changeset viewer.