# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import
import sys, os.path

_importlist = "VisitorBase parse check".split()

_cd = os.path.join(os.path.dirname(__file__))
version_specific_path = None
common_path = os.path.join(_cd, 'common')

def _get_asdl_depending_on_version():
    '''Export names in the correct asdl.py depending on the python version.
    '''

    global version_specific_path
    major, minor = sys.version_info[0], sys.version_info[1]
    # Assumes that specific-path and common-path are a subdirectory
    # Build an absolute module path.
    prefix = __name__.rsplit('.', 1)
    # The else-case is for running tests in the current directory
    base = (prefix[0] + '.') if len(prefix) > 1 else ''
    dir = 'py%d_%d' % (major, minor)
    version_specific_path = os.path.join(_cd, dir)

    use_abs_import = 0

    modname = base + dir + '.asdl'
    try:
        # try to import from version specific directory
        mod = __import__(modname, fromlist=_importlist, level=use_abs_import)
    except ImportError:
        # fallback to import from common directory
        dir = 'common'
        modname = base + dir + '.asdl'
        mod = __import__(modname, fromlist=_importlist) #, level=use_rel_and_abs)
    for i in _importlist:
        globals()[i] = getattr(mod, i)

def load(filename):
    '''Load ASDL from the version_specific_path if exists,
    or from the generic_path.
    '''
    srcfile = os.path.join(version_specific_path, filename)
    if not os.path.exists(srcfile):
        srcfile = os.path.join(common_path, filename)
    asdl = parse(srcfile)
    assert check(asdl), "Invalid asdl %s" % srcfile
    return asdl

# initialize
_get_asdl_depending_on_version()