xref: /netbsd-src/usr.bin/m4/expr.c (revision 67d9f38e0b687db1534bca8c1f255ec1b59d1a43)
1 /*	$NetBSD: expr.c,v 1.21 2019/03/26 23:31:45 kre Exp $	*/
2 /* $OpenBSD: expr.c,v 1.17 2006/01/20 23:10:19 espie Exp $ */
3 /*
4  * Copyright (c) 2004 Marc Espie <espie@cvs.openbsd.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 #if HAVE_NBTOOL_CONFIG_H
19 #include "nbtool_config.h"
20 #endif
21 #include <sys/cdefs.h>
22 __RCSID("$NetBSD: expr.c,v 1.21 2019/03/26 23:31:45 kre Exp $");
23 #include <stdint.h>
24 #include <stdio.h>
25 #include <stddef.h>
26 #include "mdef.h"
27 #include "extern.h"
28 
29 int32_t end_result;
30 const char *copy_toeval;
31 
32 extern void yy_scan_string(const char *);
33 extern int yyparse(void);
34 extern int yyerror(const char *);
35 
36 int
yyerror(const char * msg)37 yyerror(const char *msg)
38 {
39 	fprintf(stderr, "m4:%s:%lu: %s in expr %s\n", infile[ilevel].name,
40 	    infile[ilevel].lineno, msg, copy_toeval);
41 	return(0);
42 }
43 
44 int
expr(const char * toeval)45 expr(const char *toeval)
46 {
47 	copy_toeval = toeval;
48 	yy_scan_string(toeval);
49 	yyparse();
50 	return end_result;
51 }
52