const AST *ast_cat(const AST *a1, const AST *a2)
{
    if (!a1) return a2;
    if (!a2) return a1;
    AST *ast = new AST(a1->loc, AST::CAT);
    ast->cat.ast1 = a1;
    ast->cat.ast2 = a2;
    return ast;
}
const AST *ast_cat(const AST *a1, const AST *a2)
{
    if (!a1) return a2;
    if (!a2) return a1;
    AST *ast = new AST(a1->loc, AST::CAT);
    ast->cat.ast1 = a1;
    ast->cat.ast2 = a2;
    return ast;
}