refactored so neg numbers are emitted as literal exp