// Path: src/pers/xia/jpython/ast/modType.java
// public abstract class modType{
// }
// 
// Path: src/pers/xia/jpython/object/PyCodeObject.java
// public class PyCodeObject extends PyObject
// {
// 
// }
// 
// Path: src/pers/xia/jpython/object/PyList.java
// public class PyList extends PySequence
// {
//     private ArrayList<PyObject> list;
//     
//     public PyList(int n)
//     {
//         this.list = new ArrayList<PyObject>(n);
//     }
//     
//     public PyList(ArrayList<PyObject> list)
//     {
//         this.list = list;
//     }
// 
// 	public boolean append(PyObject newitem) 
// 	{
// 		// TODO Auto-generated method stub
// 	    list.add(newitem);
// 		return true;
// 	}
// 	
// 	public boolean extend(PyObject newitems)
// 	{
// 	    PyList items = (PyList)newitems;
// 	    for(int i = 0; i < items.getSize(); i++)
// 	    {
// 	        this.append(items.getItem(i));
// 	    }
// 	    return true;
// 	}
// 
// 	public int getSize() 
// 	{
// 		// TODO Auto-generated method stub
// 		return list.size();
// 	}
// 
// 	public void setSlice(int ilow, int ihigh, PyObject v) 
// 	{
// 		// F complete follow
// 	    if(v == null)
// 		{
// 		    ArrayList<PyObject> l = new ArrayList<PyObject>(this.list.subList(0, ilow));
// 		    ArrayList<PyObject> l2 = new ArrayList<PyObject>(this.list.subList(ihigh, this.getSize()));
// 		    this.list = l;
// 		    this.list.addAll(l2);
// 		}
// 	    else
// 	    {
//     		PyList l = (PyList)v;
//     		PyList l1 = new PyList(new ArrayList<PyObject>(this.list.subList(ihigh, this.getSize())));
//     		this.list = (ArrayList<PyObject>) this.list.subList(0, ilow);
//     		this.extend(l);
//     		this.extend(l1);;
// 	    }
// 	}
// 	
// 	public PyList getSlice(int ilow, int ihigh)
// 	{
// 	    ArrayList<PyObject> newList = new ArrayList<PyObject>(this.list.subList(ilow, ihigh));
// 	    return new PyList(newList);
// 	}
// 
// 	public PyObject getItem(int l) 
// 	{
// 		// TODO Auto-generated method stub
// 		return list.get(l);
// 	}
// }
// 
// Path: src/pers/xia/jpython/object/PyObject.java
// public class PyObject
// {
// 
// }
// 
// Path: src/pers/xia/jpython/object/PyUnicode.java
// public class PyUnicode extends PyObject
// {
//     String str;
// 
//     public PyUnicode(byte[] b, String encode)
//     {
//         try
//         {
//             this.str = new String(b, encode);
//         }
//         catch (UnsupportedEncodingException e)
//         {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//             throw new PyExceptions(ErrorType.SYSTEM_ERROR,
//                     "Can't convert bytes to str implicitly");
//         }
//     }
// 
//     public static PyUnicode internFromString(String str)
//     {
//         return internFromString(str, false);
//     }
// 
//     public static PyUnicode internFromString(String str, boolean rawmode)
//     {
//         return new PyUnicode(str, rawmode);
//     }
// 
//     private PyUnicode(String str, boolean rawmode)
//     {
//         this.str = str;
//         if(!rawmode)
//         {
//             // FIXME should use faster and more complete method
//             this.str.replace("\\n", "\n");
//             this.str.replace("\\t", "\t");
//             this.str.replace("\\\\", "\\");
//         }
//     }
// 
//     private PyUnicode(PyObject obj)
//     {
//         // TODO
//     }
// 
//     public static PyUnicode concat(PyObject left, PyObject right)
//     {
//         if(!(left instanceof PyUnicode))
//         {
//             throw new PyExceptions(ErrorType.SYSTEM_ERROR, "transform error",
//                     left);
//         }
// 
//         return ((PyUnicode) left).concat(right);
//     }
// 
//     public PyUnicode concat(PyObject obj)
//     {
//         if(!(obj instanceof PyUnicode))
//         {
//             throw new PyExceptions(ErrorType.SYSTEM_ERROR, "transform error",
//                     obj);
//         }
// 
//         String newStr = this.str + ((PyUnicode) obj).str;
//         return internFromString(newStr);
// 
//     }
// 
// }


import pers.xia.jpython.ast.modType;
import pers.xia.jpython.object.PyCodeObject;
import pers.xia.jpython.object.PyList;
import pers.xia.jpython.object.PyObject;
import pers.xia.jpython.object.PyUnicode;
        int nlen = ident.length();
        int plen = privateStr.length();
        
        if(ident.charAt(nlen - 1) == '_' && ident.charAt(nlen - 2) == '_' ||
                ident.indexOf('.') < 0)
        {
            return PyUnicode.internFromString(ident);
        }
        
        int ipriv = 0;
        while(ipriv < plen && privateStr.charAt(ipriv) == '_') ipriv++;
        if(ipriv == plen)
        {
            return PyUnicode.internFromString(ident);
        }
        
        return PyUnicode.internFromString(privateStr.substring(ipriv) + ident);
    }

    public PyCodeObject mod(modType mod)
    {
        return null;
    }

    public static PyCodeObject compile(modType mod, String fileName)
    {
        PyObject fileNameObj = PyUnicode.internFromString(fileName);
        return compileObject(mod, fileNameObj, -1);
    }

// Path: src/pers/xia/jpython/ast/modType.java
// public abstract class modType{
// }
// 
// Path: src/pers/xia/jpython/object/PyCodeObject.java
// public class PyCodeObject extends PyObject
// {
// 
// }
// 
// Path: src/pers/xia/jpython/object/PyList.java
// public class PyList extends PySequence
// {
//     private ArrayList<PyObject> list;
//     
//     public PyList(int n)
//     {
//         this.list = new ArrayList<PyObject>(n);
//     }
//     
//     public PyList(ArrayList<PyObject> list)
//     {
//         this.list = list;
//     }
// 
// 	public boolean append(PyObject newitem) 
// 	{
// 		// TODO Auto-generated method stub
// 	    list.add(newitem);
// 		return true;
// 	}
// 	
// 	public boolean extend(PyObject newitems)
// 	{
// 	    PyList items = (PyList)newitems;
// 	    for(int i = 0; i < items.getSize(); i++)
// 	    {
// 	        this.append(items.getItem(i));
// 	    }
// 	    return true;
// 	}
// 
// 	public int getSize() 
// 	{
// 		// TODO Auto-generated method stub
// 		return list.size();
// 	}
// 
// 	public void setSlice(int ilow, int ihigh, PyObject v) 
// 	{
// 		// F complete follow
// 	    if(v == null)
// 		{
// 		    ArrayList<PyObject> l = new ArrayList<PyObject>(this.list.subList(0, ilow));
// 		    ArrayList<PyObject> l2 = new ArrayList<PyObject>(this.list.subList(ihigh, this.getSize()));
// 		    this.list = l;
// 		    this.list.addAll(l2);
// 		}
// 	    else
// 	    {
//     		PyList l = (PyList)v;
//     		PyList l1 = new PyList(new ArrayList<PyObject>(this.list.subList(ihigh, this.getSize())));
//     		this.list = (ArrayList<PyObject>) this.list.subList(0, ilow);
//     		this.extend(l);
//     		this.extend(l1);;
// 	    }
// 	}
// 	
// 	public PyList getSlice(int ilow, int ihigh)
// 	{
// 	    ArrayList<PyObject> newList = new ArrayList<PyObject>(this.list.subList(ilow, ihigh));
// 	    return new PyList(newList);
// 	}
// 
// 	public PyObject getItem(int l) 
// 	{
// 		// TODO Auto-generated method stub
// 		return list.get(l);
// 	}
// }
// 
// Path: src/pers/xia/jpython/object/PyObject.java
// public class PyObject
// {
// 
// }
// 
// Path: src/pers/xia/jpython/object/PyUnicode.java
// public class PyUnicode extends PyObject
// {
//     String str;
// 
//     public PyUnicode(byte[] b, String encode)
//     {
//         try
//         {
//             this.str = new String(b, encode);
//         }
//         catch (UnsupportedEncodingException e)
//         {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//             throw new PyExceptions(ErrorType.SYSTEM_ERROR,
//                     "Can't convert bytes to str implicitly");
//         }
//     }
// 
//     public static PyUnicode internFromString(String str)
//     {
//         return internFromString(str, false);
//     }
// 
//     public static PyUnicode internFromString(String str, boolean rawmode)
//     {
//         return new PyUnicode(str, rawmode);
//     }
// 
//     private PyUnicode(String str, boolean rawmode)
//     {
//         this.str = str;
//         if(!rawmode)
//         {
//             // FIXME should use faster and more complete method
//             this.str.replace("\\n", "\n");
//             this.str.replace("\\t", "\t");
//             this.str.replace("\\\\", "\\");
//         }
//     }
// 
//     private PyUnicode(PyObject obj)
//     {
//         // TODO
//     }
// 
//     public static PyUnicode concat(PyObject left, PyObject right)
//     {
//         if(!(left instanceof PyUnicode))
//         {
//             throw new PyExceptions(ErrorType.SYSTEM_ERROR, "transform error",
//                     left);
//         }
// 
//         return ((PyUnicode) left).concat(right);
//     }
// 
//     public PyUnicode concat(PyObject obj)
//     {
//         if(!(obj instanceof PyUnicode))
//         {
//             throw new PyExceptions(ErrorType.SYSTEM_ERROR, "transform error",
//                     obj);
//         }
// 
//         String newStr = this.str + ((PyUnicode) obj).str;
//         return internFromString(newStr);
// 
//     }
// 
// }


// Path: src/pers/xia/jpython/compiler/Compiler.java
import pers.xia.jpython.ast.modType;
import pers.xia.jpython.object.PyCodeObject;
import pers.xia.jpython.object.PyList;
import pers.xia.jpython.object.PyObject;
import pers.xia.jpython.object.PyUnicode;

        int nlen = ident.length();
        int plen = privateStr.length();
        
        if(ident.charAt(nlen - 1) == '_' && ident.charAt(nlen - 2) == '_' ||
                ident.indexOf('.') < 0)
        {
            return PyUnicode.internFromString(ident);
        }
        
        int ipriv = 0;
        while(ipriv < plen && privateStr.charAt(ipriv) == '_') ipriv++;
        if(ipriv == plen)
        {
            return PyUnicode.internFromString(ident);
        }
        
        return PyUnicode.internFromString(privateStr.substring(ipriv) + ident);
    }

    public PyCodeObject mod(modType mod)
    {
        return null;
    }

    public static PyCodeObject compile(modType mod, String fileName)
    {
        PyObject fileNameObj = PyUnicode.internFromString(fileName);
        return compileObject(mod, fileNameObj, -1);
    }

    public static PyCodeObject compileObject(modType mod, PyObject fileName,