package synthesijer.ast.type; import synthesijer.ast.SynthesijerAstTypeVisitor; import synthesijer.ast.Type; public enum PrimitiveTypeKind implements Type{ BOOLEAN, BYTE(8), CHAR(16), INT(32), LONG(64), SHORT(16), VOID, OTHER, DECLARED, ARRAY, DOUBLE(64), ERROR, EXECUTABLE, FLOAT(32), NONE, NULL, PACKAGE, TYPEVAR, WILDCARD, UNDEFINED; private final int width; private PrimitiveTypeKind(int w){ this.width = w; } private PrimitiveTypeKind(){ this.width = -1; } public void accept(SynthesijerAstTypeVisitor v){ v.visitPrimitiveTypeKind(this); } public boolean isInteger(){ switch(this){ case BYTE: case CHAR: case INT: case LONG: case SHORT: return true; default: return false; } } public boolean isFloating(){ switch(this){ case FLOAT: case DOUBLE: return true; default: return false; } } public int getWidth(){ return width; } public boolean isCastAllowed(){ if(isInteger() || isFloating()){ return true; }else{ return false; } } }