-ast_expression *fold_op (fold_t *, const oper_info *, ast_expression**);
-
-int fold_cond (ir_value *, ast_function *, ast_ifthen *);
+ast_expression *fold_op (fold_t *, const oper_info *, ast_expression **);
+ast_expression *fold_intrin (fold_t *, const char *, ast_expression **);
+
+ast_expression *fold_binary (lex_ctx_t ctx, int, ast_expression *, ast_expression *);
+int fold_cond_ifthen (ir_value *, ast_function *, ast_ifthen *);
+int fold_cond_ternary (ir_value *, ast_function *, ast_ternary *);
+
+/* intrin.c */
+intrin_t *intrin_init (parser_t *parser);
+void intrin_cleanup (intrin_t *intrin);
+ast_expression *intrin_fold (intrin_t *intrin, ast_value *, ast_expression **);
+ast_expression *intrin_func (intrin_t *intrin, const char *name);
+ast_expression *intrin_debug_typestring(intrin_t *intrin);