// Path: src/com/iconmaster/source/link/platform/hppl/InlinedExpression.java
// public static class InlineOp {
// 	public Operation op;
// 	public Status status = null;
// 	public int refs = 0;
// 	public SpecialOp spec;
// 	public int matchingBlock = -1;
// 
// 	public InlineOp(Operation op) {
// 		this.op = op;
// 	}
// 		
// 	public InlineOp(Operation op, SpecialOp spec) {
// 		this.op = op;
// 		this.spec = spec;
// 	}
// 		
// 	public void addRef() {
// 		refs++;
// 	}
// 		
// 	public void setStatus() {
// 		if (!op.op.hasLVar()) {
// 			status = Status.NOT_APPLICABLE;
// 		} else if (refs==0) {
// 			status = Status.KEEP_NO_LVAL;
// 		} else if (refs==1 && op.op!=OpType.MOVA && op.op!=OpType.MOVL) {
// 			status = Status.INLINE;
// 		} else {
// 			status = Status.KEEP;
// 		}
// 	}
// 
// 	@Override
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder();
// 		sb.append("<");
// 		sb.append(refs);
// 		sb.append("-");
// 		sb.append(status);
// 		if (spec!=null) {
// 			sb.append(" ");
// 			sb.append(spec);
// 		}
// 		if (matchingBlock!=-1) {
// 			sb.append("(loop ");
// 			sb.append(matchingBlock);
// 			sb.append(")");
// 		}
// 		sb.append("> ");
// 		sb.append(op);
// 		return sb.toString();
// 	}
// }
// 
// Path: src/com/iconmaster/source/prototype/Field.java
// public class Field implements IDirectable {
// 	protected String name;
// 	public Element rawType;
// 	public Element rawValue;
// 	protected ArrayList<String> directives = new ArrayList<>();;
// 	
// 	protected boolean compiled;
// 	protected boolean library;
// 	protected Expression value;
// 	private DataType type;
// 	
// 	public String pkgName;
// 	
// 	/**
// 	 * A map used to store item information for the platform.
// 	 */
// 	public HashMap data = new HashMap<>();
// 
// 	public Field(String name) {
// 		this(name,null);
// 	}
// 
// 	public Field(String name, Element type) {
// 		this.name = name;
// 		this.rawType = type;
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder(name+"="+getType());
// 		if (value!=null) {
// 			sb.append(". CODE:");
// 			
// 			for (Operation op : value) {
// 				sb.append("\n\t");
// 				sb.append(op.toString());
// 			}
// 		}
// 		return sb.toString();
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 	
// 	public void setCompiled(Expression code) {
// 		this.compiled = true;
// 		this.value = code;
// 	}
// 
// 	public Element rawData() {
// 		return rawValue;
// 	}
// 
// 	public boolean isCompiled() {
// 		return compiled;
// 	}
// 
// 	public Expression getValue() {
// 		return value;
// 	}
// 	
// 	@Override
// 	public ArrayList<String> getDirectives() {
// 		return directives;
// 	}
// 	
// 	public boolean isLibrary() {
// 		return library;
// 	}
// 
// 	public Element getRawType() {
// 		return rawType;
// 	}
// 
// 	public DataType getType() {
// 		return type;
// 	}
// 
// 	public void setType(DataType type) {
// 		this.type = type;
// 	}
// 	
// 	public static Field libraryField(String name, TypeDef type) {
// 		Field f = new Field(name);
// 		if (type!=null) {
// 			f.setType(new DataType(type,false));
// 		}
// 		f.library = true;
// 		return f;
// 	}
// 	
// 	public static interface OnCompile {
// 		public String compile(SourcePackage pkg, boolean isGet, Object... args);
// 	}
// 	
// 	public static interface OnRun {
// 		public Object run(SourcePackage pkg, boolean isGet, Object... args);
// 	}
// }


import com.iconmaster.source.link.platform.hppl.InlinedExpression.InlineOp;
import com.iconmaster.source.prototype.Field;
package com.iconmaster.source.link.platform.hppl;


/**
 *
 * @author iconmaster
 */
public class HPPLField {
	public String compileName;
	public InlinedExpression expr;
	public Field f;

// Path: src/com/iconmaster/source/link/platform/hppl/InlinedExpression.java
// public static class InlineOp {
// 	public Operation op;
// 	public Status status = null;
// 	public int refs = 0;
// 	public SpecialOp spec;
// 	public int matchingBlock = -1;
// 
// 	public InlineOp(Operation op) {
// 		this.op = op;
// 	}
// 		
// 	public InlineOp(Operation op, SpecialOp spec) {
// 		this.op = op;
// 		this.spec = spec;
// 	}
// 		
// 	public void addRef() {
// 		refs++;
// 	}
// 		
// 	public void setStatus() {
// 		if (!op.op.hasLVar()) {
// 			status = Status.NOT_APPLICABLE;
// 		} else if (refs==0) {
// 			status = Status.KEEP_NO_LVAL;
// 		} else if (refs==1 && op.op!=OpType.MOVA && op.op!=OpType.MOVL) {
// 			status = Status.INLINE;
// 		} else {
// 			status = Status.KEEP;
// 		}
// 	}
// 
// 	@Override
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder();
// 		sb.append("<");
// 		sb.append(refs);
// 		sb.append("-");
// 		sb.append(status);
// 		if (spec!=null) {
// 			sb.append(" ");
// 			sb.append(spec);
// 		}
// 		if (matchingBlock!=-1) {
// 			sb.append("(loop ");
// 			sb.append(matchingBlock);
// 			sb.append(")");
// 		}
// 		sb.append("> ");
// 		sb.append(op);
// 		return sb.toString();
// 	}
// }
// 
// Path: src/com/iconmaster/source/prototype/Field.java
// public class Field implements IDirectable {
// 	protected String name;
// 	public Element rawType;
// 	public Element rawValue;
// 	protected ArrayList<String> directives = new ArrayList<>();;
// 	
// 	protected boolean compiled;
// 	protected boolean library;
// 	protected Expression value;
// 	private DataType type;
// 	
// 	public String pkgName;
// 	
// 	/**
// 	 * A map used to store item information for the platform.
// 	 */
// 	public HashMap data = new HashMap<>();
// 
// 	public Field(String name) {
// 		this(name,null);
// 	}
// 
// 	public Field(String name, Element type) {
// 		this.name = name;
// 		this.rawType = type;
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder(name+"="+getType());
// 		if (value!=null) {
// 			sb.append(". CODE:");
// 			
// 			for (Operation op : value) {
// 				sb.append("\n\t");
// 				sb.append(op.toString());
// 			}
// 		}
// 		return sb.toString();
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 	
// 	public void setCompiled(Expression code) {
// 		this.compiled = true;
// 		this.value = code;
// 	}
// 
// 	public Element rawData() {
// 		return rawValue;
// 	}
// 
// 	public boolean isCompiled() {
// 		return compiled;
// 	}
// 
// 	public Expression getValue() {
// 		return value;
// 	}
// 	
// 	@Override
// 	public ArrayList<String> getDirectives() {
// 		return directives;
// 	}
// 	
// 	public boolean isLibrary() {
// 		return library;
// 	}
// 
// 	public Element getRawType() {
// 		return rawType;
// 	}
// 
// 	public DataType getType() {
// 		return type;
// 	}
// 
// 	public void setType(DataType type) {
// 		this.type = type;
// 	}
// 	
// 	public static Field libraryField(String name, TypeDef type) {
// 		Field f = new Field(name);
// 		if (type!=null) {
// 			f.setType(new DataType(type,false));
// 		}
// 		f.library = true;
// 		return f;
// 	}
// 	
// 	public static interface OnCompile {
// 		public String compile(SourcePackage pkg, boolean isGet, Object... args);
// 	}
// 	
// 	public static interface OnRun {
// 		public Object run(SourcePackage pkg, boolean isGet, Object... args);
// 	}
// }


// Path: src/com/iconmaster/source/link/platform/hppl/HPPLField.java
import com.iconmaster.source.link.platform.hppl.InlinedExpression.InlineOp;
import com.iconmaster.source.prototype.Field;

package com.iconmaster.source.link.platform.hppl;


/**
 *
 * @author iconmaster
 */
public class HPPLField {
	public String compileName;
	public InlinedExpression expr;
	public Field f;

	public HPPLField(String compileName, InlinedExpression expr, Field f) {