static bool
RenderConst(WasmRenderContext& c, AstConst& cst)
{
    if (!c.buffer.append('('))
        return false;
    if (!RenderValType(c, cst.val().type()))
        return false;
    if (!c.buffer.append(".const "))
        return false;

    switch (ToExprType(cst.val().type())) {
      case ExprType::I32:
        if (!RenderInt32(c, (uint32_t)cst.val().i32()))
            return false;
        break;
      case ExprType::I64:
        if (!RenderInt64(c, (uint32_t)cst.val().i64()))
            return false;
        break;
      case ExprType::F32:
        if (!RenderDouble(c, (double)cst.val().f32()))
            return false;
        break;
      case ExprType::F64:
        if (!RenderDouble(c, cst.val().f64()))
            return false;
        break;
      default:
        return false;
    }

    if (!c.buffer.append(")"))
        return false;
    return true;
}
static bool
RenderConst(WasmRenderContext& c, AstConst& cst)
{
    if (!RenderIndent(c))
        return false;

    MAP_AST_EXPR(c, cst);
    if (!RenderValType(c, cst.val().type()))
        return false;
    if (!c.buffer.append(".const "))
        return false;

    switch (ToExprType(cst.val().type())) {
      case ExprType::I32:
        return RenderInt32(c, (int32_t)cst.val().i32());
      case ExprType::I64:
        return RenderInt64(c, (int64_t)cst.val().i64());
      case ExprType::F32:
        return RenderFloat32(c, cst.val().f32());
      case ExprType::F64:
        return RenderDouble(c, cst.val().f64());
      default:
        break;
    }

    return false;
}