scanflags.c revision 1.2
1/*	$NetBSD: scanflags.c,v 1.2 2016/01/09 17:38:57 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.2 2016/01/09 17:38:57 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_stk = (scanflags_t*) flex_realloc ( (void*) _sf_stk, sizeof(scanflags_t) * (_sf_max += 32));
46
47    // copy the top element
48    _sf_stk[_sf_top_ix + 1] = _sf_stk[_sf_top_ix];
49    ++_sf_top_ix;
50}
51
52void
53sf_pop (void)
54{
55    assert(_sf_top_ix > 0);
56    --_sf_top_ix;
57}
58
59/* one-time initialization. Should be called before any sf_ functions. */
60void
61sf_init (void)
62{
63    assert(_sf_stk == NULL);
64    _sf_stk = (scanflags_t*) flex_alloc ( sizeof(scanflags_t) * (_sf_max = 32));
65    if (!_sf_stk)
66        lerr_fatal(_("Unable to allocate %zu of stack"), sizeof(scanflags_t));
67    _sf_stk[_sf_top_ix] = 0;
68}
69
70/* vim:set expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */
71