@Override
	public Value evaluate(Value... operands) throws Exception {
		// we want only two operands
		if (operands.length != 2)
			throw new EvalException(this.name()
					+ " Error: wrong number of operands");

		// get operands
		Value l = operands[0];
		Value r = operands[1];

		// if types match
		if (l.getType().isNumeric() && r.getType().isNumeric()) {
				

			if (l.getType() == ValueType.LONG)
				return new Value(new Long(l.getLong() << r.getLong()));
                        return new Value(new Integer(l.getInt() << r.getInt()));

		}

		throw new EvalException(this.name() + " Operands error! Type mismatch!"+ l.getType()+r.getType()
                );
	}