// Path: src/com/iconmaster/source/compile/DataType.java
// public class DataType {
// 	public TypeDef type;
// 	public boolean weak;
// 	public DataType[] params = new DataType[0];
// 
// 	@Override
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder();
// 		sb.append("");
// 		sb.append(type);
// 		sb.append(weak?"?":"");
// 		if (params.length!=0) {
// 			sb.append("[");
// 			for (DataType param : params) {
// 				sb.append(param);
// 				sb.append(",");
// 			}
// 			sb.deleteCharAt(sb.length()-1);
// 			sb.append("]");
// 		}
// 		return sb.toString();
// 	}
// 
// 	public DataType() {
// 		this(TypeDef.UNKNOWN,false);
// 	}
// 	
// 	public DataType(TypeDef def) {
// 		this(def,false);
// 	}
// 	
// 	public DataType(boolean def) {
// 		this(TypeDef.UNKNOWN,def);
// 	}
// 	
// 	public DataType(TypeDef def, boolean w) {
// 		type = def;
// 		weak = w;
// 	}
// 	
// 	public static DataType getNewType(DataType thisType, DataType other) {
// 		if (thisType==null) {
// 			return other;
// 		}
// 		if (other==null) {
// 			other = new DataType(true);
// 		}
// 		if (!thisType.weak) {
// 			return thisType;
// 		}
// 		return commonType(thisType, other);
// 	}
// 	
// 	public static DataType commonType(DataType type1, DataType type2) {
// 		if (type1==null) {
// 			type1 = new DataType(true);
// 		}
// 		if (type2==null) {
// 			type2 = new DataType(true);
// 		}
// 		return new DataType(TypeDef.getCommonParent(type1.type, type2.type),true);
// 	}
// 	
// 	public static boolean canCastTo(DataType thisType, DataType other) {
// 		if (thisType==null) {
// 			thisType = new DataType(true);
// 		}
// 		if (other==null) {
// 			other = new DataType(true);
// 		}
// 		if (thisType.type instanceof ParamTypeDef) {
// 			thisType = new DataType(thisType.type.parent);
// 		}
// 		if (other.type instanceof ParamTypeDef) {
// 			other = new DataType(other.type.parent);
// 		}
// 		if (thisType.weak) {
// 			return TypeDef.getCommonParent(thisType.type, other.type)!=null;
// 		} else {
// 			return TypeDef.getCommonParent(thisType.type, other.type)==thisType.type;
// 		}
// 	}
// 	
// 	public DataType cloneType() {
// 		DataType dt = new DataType(type, weak);
// 		dt.params = Arrays.copyOf(dt.params, dt.params.length);
// 		return dt;
// 	}
// }


import com.iconmaster.source.compile.DataType;
import java.util.ArrayList;
package com.iconmaster.source.prototype;


/**
 *
 * @author iconmaster
 */
public class FunctionCall {
	public String name;
	public ArrayList<DataType> args;
	public DataType ret;
	public ArrayList<String> dirs;
	public boolean dirsMatter = true;
	
	public boolean isIter = false;
// Path: src/com/iconmaster/source/compile/DataType.java
// public class DataType {
// 	public TypeDef type;
// 	public boolean weak;
// 	public DataType[] params = new DataType[0];
// 
// 	@Override
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder();
// 		sb.append("");
// 		sb.append(type);
// 		sb.append(weak?"?":"");
// 		if (params.length!=0) {
// 			sb.append("[");
// 			for (DataType param : params) {
// 				sb.append(param);
// 				sb.append(",");
// 			}
// 			sb.deleteCharAt(sb.length()-1);
// 			sb.append("]");
// 		}
// 		return sb.toString();
// 	}
// 
// 	public DataType() {
// 		this(TypeDef.UNKNOWN,false);
// 	}
// 	
// 	public DataType(TypeDef def) {
// 		this(def,false);
// 	}
// 	
// 	public DataType(boolean def) {
// 		this(TypeDef.UNKNOWN,def);
// 	}
// 	
// 	public DataType(TypeDef def, boolean w) {
// 		type = def;
// 		weak = w;
// 	}
// 	
// 	public static DataType getNewType(DataType thisType, DataType other) {
// 		if (thisType==null) {
// 			return other;
// 		}
// 		if (other==null) {
// 			other = new DataType(true);
// 		}
// 		if (!thisType.weak) {
// 			return thisType;
// 		}
// 		return commonType(thisType, other);
// 	}
// 	
// 	public static DataType commonType(DataType type1, DataType type2) {
// 		if (type1==null) {
// 			type1 = new DataType(true);
// 		}
// 		if (type2==null) {
// 			type2 = new DataType(true);
// 		}
// 		return new DataType(TypeDef.getCommonParent(type1.type, type2.type),true);
// 	}
// 	
// 	public static boolean canCastTo(DataType thisType, DataType other) {
// 		if (thisType==null) {
// 			thisType = new DataType(true);
// 		}
// 		if (other==null) {
// 			other = new DataType(true);
// 		}
// 		if (thisType.type instanceof ParamTypeDef) {
// 			thisType = new DataType(thisType.type.parent);
// 		}
// 		if (other.type instanceof ParamTypeDef) {
// 			other = new DataType(other.type.parent);
// 		}
// 		if (thisType.weak) {
// 			return TypeDef.getCommonParent(thisType.type, other.type)!=null;
// 		} else {
// 			return TypeDef.getCommonParent(thisType.type, other.type)==thisType.type;
// 		}
// 	}
// 	
// 	public DataType cloneType() {
// 		DataType dt = new DataType(type, weak);
// 		dt.params = Arrays.copyOf(dt.params, dt.params.length);
// 		return dt;
// 	}
// }


// Path: src/com/iconmaster/source/prototype/FunctionCall.java
import com.iconmaster.source.compile.DataType;
import java.util.ArrayList;

package com.iconmaster.source.prototype;


/**
 *
 * @author iconmaster
 */
public class FunctionCall {
	public String name;
	public ArrayList<DataType> args;
	public DataType ret;
	public ArrayList<String> dirs;
	public boolean dirsMatter = true;
	
	public boolean isIter = false;
	public ArrayList<DataType> rets;