function parse_literal (expression) {
  var value = expression.value;
  if (Array.isArray(value)) return new IRArrayType(new IRAnyType());
  else if (value === null) return new IRNullType();
  else return new IRExactValueType(value);
}
/**
 * @param {object} expression An esprima Literal type
 * @returns {IRType} The IRType that can be deduced from the Literal esprima expression
 */
@param {object} expression An esprima Literal type
@returns {IRType} The IRType that can be deduced from the Literal esprima expression
@param { object } expression An esprima Literal type @returns { IRType } The IRType that can be deduced from the Literal esprima expression
function parse_literal (expression) {
  var value = expression.value;
  if (Array.isArray(value)) return new IRArrayType(new IRAnyType());
  else if (value === null) return new IRNullType();
  else return new IRExactValueType(value);
}
function parse_literal ( expression ) { var value = expression . value ; if ( Array . isArray ( value ) ) return new IRArrayType ( new IRAnyType ( ) ) ; else if ( value === null ) return new IRNullType ( ) ; else return new IRExactValueType ( value ) ; }
@param {object} expression An esprima Literal type
 @returns {IRType} The IRType that can be deduced from the Literal esprima expression
@param { object } expression An esprima Literal type @returns { IRType } The IRType that can be deduced from the Literal esprima expression