code: public static ValueExpression eval( CssFormatter formatter, Expression expr ) {
          expr = expr.unpack( formatter ); // unpack to increase the chance to find a ValueExpression
          if( expr.getClass() == ValueExpression.class ) {
              return (ValueExpression)expr;
          }
          ValueExpression valueEx = new ValueExpression( expr, expr.stringValue( formatter ) );
          valueEx.type = expr.getDataType( formatter );
          valueEx.unit = expr.unit( formatter );
          switch( valueEx.type ) {
              case STRING:
              case BOOLEAN:
                  break; //string is already set
              case LIST:
                  Operation op = valueEx.op = new Operation( expr, ' ' );
                  ArrayList<Expression> operants = expr.listValue( formatter ).getOperands();
                  for( int j = 0; j < operants.size(); j++ ) {
                      op.addOperand( ValueExpression.eval( formatter, operants.get( j ) ) );
                  }
                  break;
              default:
                  valueEx.value = expr.doubleValue( formatter );
          }
          return valueEx;
      }
docs: Create a value expression as parameter for a mixin which not change it value in a different context.
  @param formatter current formatter
  @param expr current expression
  @return a ValueExpression