/** Wrap primitive values (as indicated by type param) and nulls in the Primitive class. Values not primitive or null are left unchanged. Primitive values are represented by their wrapped values in param value. <p/> The value null is mapped to Primitive.NULL. Any value specified with type Void.TYPE is mapped to Primitive.VOID. */ public static Object wrap( Object value, Class type ) { if ( type == Void.TYPE ) return Primitive.VOID; if ( value == null ) return Primitive.NULL; if ( type.isPrimitive() ) return new Primitive( value ); return value; }
/** Create an interpreter for evaluation only. */ public Interpreter() { this( new StringReader(""), System.out, System.err, false, null ); evalOnly = true; setu( "bsh.evalOnly", new Primitive(true) ); }
public static Primitive shrinkWrap(Object number) { if (!(number instanceof Number)) throw new InterpreterError("Can only shrink wrap Number types"); Number value = (Number) number; if ( Types.isFloatingpoint(number) ) { if ( !Double.isInfinite(value.doubleValue()) ) return new Primitive(value.doubleValue()); return new Primitive((BigDecimal) number); } BigInteger bi = number instanceof BigInteger ? (BigInteger) number : BigInteger.valueOf(value.longValue()); if ( bi.compareTo(INTEGER_MIN) >= 0 && bi.compareTo(INTEGER_MAX) <= 0 ) return new Primitive(bi.intValue()); if ( bi.compareTo(LONG_MIN) >= 0 && bi.compareTo(LONG_MAX) <= 0 ) return new Primitive(bi.longValue()); return new Primitive(bi); }
public void set(String name, float value) throws EvalError { set(name, new Primitive(value)); } public void set(String name, boolean value) throws EvalError {
public void set(String name, long value) throws EvalError { set(name, new Primitive(value)); } public void set(String name, int value) throws EvalError {
public void set(String name, int value) throws EvalError { set(name, new Primitive(value)); } public void set(String name, double value) throws EvalError {
public void set(String name, long value) throws EvalError { set(name, new Primitive(value)); } public void set(String name, int value) throws EvalError {
public void set(String name, int value) throws EvalError { set(name, new Primitive(value)); } public void set(String name, double value) throws EvalError {
public void set(String name, double value) throws EvalError { set(name, new Primitive(value)); } public void set(String name, float value) throws EvalError {
public void set(String name, double value) throws EvalError { set(name, new Primitive(value)); } public void set(String name, float value) throws EvalError {
public void set(String name, float value) throws EvalError { set(name, new Primitive(value)); } public void set(String name, boolean value) throws EvalError {
public void charSetup(String str) { char ch = str.charAt(0); if(ch == '\\') { // get next character ch = str.charAt(1); if(Character.isDigit(ch)) ch = (char)Integer.parseInt(str.substring(1), 8); else ch = getEscapeChar(ch); } value = new Primitive(new Character(ch).charValue()); }
public void set(String name, boolean value) throws EvalError { set(name, new Primitive(value)); }
/** Get the appropriate default value per JLS 4.5.4 */ public static Primitive getDefaultValue( Class type ) { if ( type == null || !type.isPrimitive() ) return Primitive.NULL; if ( type == Boolean.TYPE ) return new Primitive( false ); // non boolean primitive, get appropriate flavor of zero try { return new Primitive((int)0).castToType( type, Types.CAST ); } catch ( UtilEvalError e ) { throw new InterpreterError( "bad cast" ); } }
Primitive parseIntegral(String s) throws NumberFormatException { int radix = getRadix(s); return new Primitive(new java.math.BigInteger(s.substring(getStartIdx(radix)), radix)); }
/** Wrap primitive values (as indicated by type param) and nulls in the Primitive class. Values not primitive or null are left unchanged. Primitive values are represented by their wrapped values in param value. <p/> The value null is mapped to Primitive.NULL. Any value specified with type Void.TYPE is mapped to Primitive.VOID. */ public static Object wrap( Object value, Class<?> type ) { if ( type == Void.TYPE ) return Primitive.VOID; if ( value == null ) return Primitive.NULL; if(value instanceof Boolean) return ((Boolean)value).booleanValue() ? Primitive.TRUE : Primitive.FALSE; if ( Types.isPrimitive(type) && isWrapperType( value.getClass() ) ) return new Primitive( value ); return value; }
public void charSetup(String str) { int len = str.toCharArray().length; if ( len == 0 || len > 4 || len > 1 && str.charAt(0) != '\\' ) { stringSetup(str); return; } try { char ch = str.charAt(0); if(ch == '\\') { // get next character ch = str.charAt(1); if(Character.isDigit(ch)) { if (255 < (ch = (char)Integer.parseInt(str.substring(1), 8))) { stringSetup(str); return; } } else ch = getEscapeChar(ch); } value = new Primitive(Character.valueOf(ch).charValue()); } catch (Exception e) { stringSetup(str); } }
/** Primitives compare equal with other Primitives containing an equal wrapped value. */ public boolean equals( Object obj ) { if ( !( obj instanceof Primitive ) ) if ( wrapperMap.containsKey(obj.getClass()) ) obj = new Primitive(obj); else return false; Primitive pobj = (Primitive) obj; if ( pobj.isNumber() && this.isNumber() ) { if ( this.getType() == BigDecimal.class ) return this.value.equals(castNumber(BigDecimal.class, pobj.numberValue())); if ( pobj.getType() == BigDecimal.class ) return pobj.value.equals(castNumber(BigDecimal.class, this.numberValue())); if (Types.isFloatingpoint(this.value) || Types.isFloatingpoint(pobj.value)) return this.numberValue().doubleValue() == pobj.numberValue().doubleValue(); if ( this.getType() == BigInteger.class ) return this.value.equals(castNumber(BigInteger.class, pobj.numberValue())); if ( pobj.getType() == BigInteger.class ) return pobj.value.equals(castNumber(BigInteger.class, this.numberValue())); return this.numberValue().longValue() == pobj.numberValue().longValue(); } return this.value.equals( pobj.value ); }
private void initRootSystemObject() { BshClassManager bcm = getClassManager(); // bsh setu("bsh", new NameSpace( bcm, "Bsh Object" ).getThis( this ) ); setu( "bsh.system", SYSTEM_OBJECT); setu( "bsh.shared", SYSTEM_OBJECT); // alias // bsh.help This helpText = new NameSpace(bcm, "Bsh Command Help Text" ).getThis( this ); setu( "bsh.help", helpText ); // bsh.cwd try { setu( "bsh.cwd", System.getProperty("user.dir") ); } catch ( SecurityException e ) { // applets can't see sys props setu( "bsh.cwd", "." ); } // bsh.interactive setu( "bsh.interactive", new Primitive(interactive) ); // bsh.evalOnly setu( "bsh.evalOnly", new Primitive(evalOnly) ); }
/** Helper class for type suffixes. */ public static class Suffix { private static final Map<String, Class<?>> m = Collections.unmodifiableMap(new HashMap<String, Class<?>>() { private static final long serialVersionUID = 1L; { put("O", Byte.TYPE); put("S", Short.TYPE); put("I", Integer.TYPE); put("L", Long.TYPE); put("W", BigInteger.class); put("w", BigDecimal.class); put("d", Double.TYPE); put("f", Float.TYPE); } }); private static String toUpperKey(Character key) { return key.toString().toUpperCase(); } private static String toLowerKey(Character key) { return key.toString().toLowerCase(); } public static boolean isIntegral(Character key) { return m.containsKey(toUpperKey(key)); } public static Class<?> getIntegralType(Character key) { return m.get(toUpperKey(key));