1/*
2 * NASM-compatible parser struct header file
3 *
4 *  Copyright (C) 2002-2007  Peter Johnson
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS''
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27#ifndef YASM_NASM_PARSER_STRUCT_H
28#define YASM_NASM_PARSER_STRUCT_H
29
30typedef union {
31    unsigned int int_info;
32    char *str_val;
33    yasm_intnum *intn;
34    yasm_floatnum *flt;
35    yasm_bytecode *bc;
36    uintptr_t arch_data;
37    struct {
38        char *contents;
39        size_t len;
40    } str;
41} nasm_yystype;
42
43typedef struct yasm_parser_nasm {
44    int tasm;
45    int masm;
46
47    /*@only@*/ yasm_object *object;
48
49    /* last "base" label for local (.) labels */
50    /*@null@*/ char *locallabel_base;
51    size_t locallabel_base_len;
52
53    /*@dependent@*/ yasm_preproc *preproc;
54    /*@dependent@*/ yasm_errwarns *errwarns;
55
56    /*@dependent@*/ yasm_linemap *linemap;
57
58    /*@null@*/ yasm_bytecode *prev_bc;
59
60    int save_input;
61
62    yasm_scanner s;
63    int state;
64
65    int token;          /* enum tokentype or any character */
66    nasm_yystype tokval;
67    char tokch;         /* first character of token */
68
69    /* one token of lookahead; used sparingly */
70    int peek_token;     /* NONE if none */
71    nasm_yystype peek_tokval;
72    char peek_tokch;
73
74    /* Starting point of the absolute section.  NULL if not in an absolute
75     * section.
76     */
77    /*@null@*/ yasm_expr *absstart;
78
79    /* Current location inside an absolute section (including the start).
80     * NULL if not in an absolute section.
81     */
82    /*@null@*/ yasm_expr *abspos;
83} yasm_parser_nasm;
84
85#endif
86