1
0
mirror of https://github.com/decatur/j2js-compiler.git synced 2025-01-18 12:25:42 +01:00
2011-10-04 22:27:20 +02:00

110 lines
2.6 KiB
Java

package com.j2js;
import org.apache.bcel.generic.Type;
/**
* @author wolfgang
*/
public class Form {
public static int CATEGORY1 = 1;
public static int CATEGORY2 = 2;
public static class Value {
public String type;
public String name;
public Value(String theType, String theName) {
type = theType;
name = theName;
}
public int getCategory() {
return type.equals("cat2") || type.equals("long") || type.equals("double")?CATEGORY2:CATEGORY1;
}
}
private int index;
private Form.Value[] ins;
private Form.Value[] outs;
private Form.Value[] operands;
private Type type;
/**
* @return Returns the ins.
*/
public Form.Value[] getIns() {
return ins;
}
/**
* @param theIns The ins to set.
*/
public void setIns(Form.Value[] theIns) {
ins = theIns;
}
/**
* @return Returns the operands.
*/
public Form.Value[] getOperands() {
return operands;
}
/**
* @param theOperands The operands to set.
*/
public void setOperands(Form.Value[] theOperands) {
operands = theOperands;
}
/**
* @return Returns the outs.
*/
public Form.Value[] getOuts() {
return outs;
}
/**
* @param theOuts The outs to set.
*/
public void setOuts(Form.Value[] theOuts) {
outs = theOuts;
if (theOuts.length != 1) return;
String s = theOuts[0].type;
if (s.equals("object")) type = Type.OBJECT;
else if (s.equals("int")) type = Type.INT;
else if (s.equals("short")) type = Type.SHORT;
else if (s.equals("byte")) type = Type.SHORT;
else if (s.equals("long")) type = Type.LONG;
else if (s.equals("float")) type = Type.FLOAT;
else if (s.equals("double")) type = Type.DOUBLE;
else if (!s.equals("cat1") && !s.equals("returnAddress") && !s.equals(""))
throw new RuntimeException("Unhandled type: " + s);
}
public int getOpStackDelta() {
return getOuts().length - getIns().length;
}
public Type getResultType() {
if (type == null) throw new RuntimeException("Result type is not available for " + this);
return type;
}
/**
* @return Returns the index.
*/
public int getIndex() {
return index;
}
/**
* @param theIndex The index to set.
*/
public void setIndex(int theIndex) {
index = theIndex;
}
}