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