added constant expression folding