1/*	$NetBSD: scanflags.c,v 1.3 2017/01/02 17:45:27 christos Exp $	*/
2
3/* scanflags - flags used by scanning. */
4
5/*  Copyright (c) 1990 The Regents of the University of California. */
6/*  All rights reserved. */
7
8/*  This code is derived from software contributed to Berkeley by */
9/*  Vern Paxson. */
10
11/*  The United States Government has rights in this work pursuant */
12/*  to contract no. DE-AC03-76SF00098 between the United States */
13/*  Department of Energy and the University of California. */
14
15/*  This file is part of flex. */
16
17/*  Redistribution and use in source and binary forms, with or without */
18/*  modification, are permitted provided that the following conditions */
19/*  are met: */
20
21/*  1. Redistributions of source code must retain the above copyright */
22/*     notice, this list of conditions and the following disclaimer. */
23/*  2. Redistributions in binary form must reproduce the above copyright */
24/*     notice, this list of conditions and the following disclaimer in the */
25/*     documentation and/or other materials provided with the distribution. */
26
27/*  Neither the name of the University nor the names of its contributors */
28/*  may be used to endorse or promote products derived from this software */
29/*  without specific prior written permission. */
30
31/*  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
32/*  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
33/*  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
34/*  PURPOSE. */
35#include "flexdef.h"
36__RCSID("$NetBSD: scanflags.c,v 1.3 2017/01/02 17:45:27 christos Exp $");
37
38scanflags_t* _sf_stk = NULL;
39size_t _sf_top_ix=0, _sf_max=0;
40
41void
42sf_push (void)
43{
44    if (_sf_top_ix + 1 >= _sf_max) {
45        _sf_max += 32;
46        _sf_stk = realloc(_sf_stk, sizeof(scanflags_t) * _sf_max);
47    }
48
49    // copy the top element
50    _sf_stk[_sf_top_ix + 1] = _sf_stk[_sf_top_ix];
51    ++_sf_top_ix;
52}
53
54void
55sf_pop (void)
56{
57    assert(_sf_top_ix > 0);
58    --_sf_top_ix;
59}
60
61/* one-time initialization. Should be called before any sf_ functions. */
62void
63sf_init (void)
64{
65    assert(_sf_stk == NULL);
66    _sf_max = 32;
67    _sf_stk = malloc(sizeof(scanflags_t) * _sf_max);
68    if (!_sf_stk)
69        lerr_fatal(_("Unable to allocate %zu of stack"), sizeof(scanflags_t));
70    _sf_stk[_sf_top_ix] = 0;
71}
72
73/* vim:set expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */
74