perl 4.0 patch 31: patch #20, continued
[p5sagit/p5-mst-13.2.git] / str.h
CommitLineData
de3bb511 1/* $RCSfile: str.h,v $$Revision: 4.0.1.3 $$Date: 91/11/05 18:41:47 $
a687059c 2 *
d48672a2 3 * Copyright (c) 1991, Larry Wall
a687059c 4 *
d48672a2 5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
8d063cd8 7 *
8 * $Log: str.h,v $
de3bb511 9 * Revision 4.0.1.3 91/11/05 18:41:47 lwall
10 * patch11: random cleanup
11 * patch11: solitary subroutine references no longer trigger typo warnings
12 *
d48672a2 13 * Revision 4.0.1.2 91/06/07 11:58:33 lwall
14 * patch4: new copyright notice
15 *
35c8bce7 16 * Revision 4.0.1.1 91/04/12 09:16:12 lwall
17 * patch1: you may now use "die" and "caller" in a signal handler
18 *
fe14fcc3 19 * Revision 4.0 91/03/20 01:40:04 lwall
20 * 4.0 baseline.
8d063cd8 21 *
22 */
23
24struct string {
25 char * str_ptr; /* pointer to malloced string */
e929a76b 26 STRLEN str_len; /* allocated size */
a687059c 27 union {
28 double str_nval; /* numeric value, if any */
29 STAB *str_stab; /* magic stab for magic "key" string */
30 long str_useful; /* is this search optimization effective? */
31 ARG *str_args; /* list of args for interpreted string */
32 HASH *str_hash; /* string represents an assoc array (stab?) */
33 ARRAY *str_array; /* string represents an array */
395c3793 34 CMD *str_cmd; /* command for this source line */
a687059c 35 } str_u;
e929a76b 36 STRLEN str_cur; /* length of str_ptr as a C string */
37 STR *str_magic; /* while free, link to next free str */
a687059c 38 /* while in use, ptr to "key" for magic items */
de3bb511 39 unsigned char str_pok; /* state of str_ptr */
40 unsigned char str_nok; /* state of str_nval */
a687059c 41 unsigned char str_rare; /* used by search strings */
42 unsigned char str_state; /* one of SS_* below */
43 /* also used by search strings for backoff */
44#ifdef TAINT
45 bool str_tainted; /* 1 if possibly under control of $< */
46#endif
47};
48
49struct stab { /* should be identical, except for str_ptr */
50 STBP * str_ptr; /* pointer to malloced string */
e929a76b 51 STRLEN str_len; /* allocated size */
8d063cd8 52 union {
a687059c 53 double str_nval; /* numeric value, if any */
54 STAB *str_stab; /* magic stab for magic "key" string */
55 long str_useful; /* is this search optimization effective? */
56 ARG *str_args; /* list of args for interpreted string */
57 HASH *str_hash; /* string represents an assoc array (stab?) */
58 ARRAY *str_array; /* string represents an array */
395c3793 59 CMD *str_cmd; /* command for this source line */
a687059c 60 } str_u;
e929a76b 61 STRLEN str_cur; /* length of str_ptr as a C string */
62 STR *str_magic; /* while free, link to next free str */
a687059c 63 /* while in use, ptr to "key" for magic items */
de3bb511 64 unsigned char str_pok; /* state of str_ptr */
65 unsigned char str_nok; /* state of str_nval */
a687059c 66 unsigned char str_rare; /* used by search strings */
67 unsigned char str_state; /* one of SS_* below */
68 /* also used by search strings for backoff */
69#ifdef TAINT
70 bool str_tainted; /* 1 if possibly under control of $< */
71#endif
72};
73
74/* some extra info tacked to some lvalue strings */
75
76struct lstring {
77 struct string lstr;
e929a76b 78 STRLEN lstr_offset;
79 STRLEN lstr_len;
8d063cd8 80};
81
a687059c 82/* These are the values of str_pok: */
83#define SP_VALID 1 /* str_ptr is valid */
84#define SP_FBM 2 /* string was compiled for fbm search */
85#define SP_STUDIED 4 /* string was studied */
86#define SP_CASEFOLD 8 /* case insensitive fbm search */
87#define SP_INTRP 16 /* string was compiled for interping */
88#define SP_TAIL 32 /* fbm string is tail anchored: /foo$/ */
89#define SP_MULTI 64 /* symbol table entry probably isn't a typo */
34de22dd 90#define SP_TEMP 128 /* string slated to die, so can be plundered */
a687059c 91
8d063cd8 92#define Nullstr Null(STR*)
93
a687059c 94/* These are the values of str_state: */
95#define SS_NORM 0 /* normal string */
96#define SS_INCR 1 /* normal string, incremented ptr */
97#define SS_SARY 2 /* array on save stack */
98#define SS_SHASH 3 /* associative array on save stack */
99#define SS_SINT 4 /* integer on save stack */
100#define SS_SLONG 5 /* long on save stack */
101#define SS_SSTRP 6 /* STR* on save stack */
102#define SS_SHPTR 7 /* HASH* on save stack */
103#define SS_SNSTAB 8 /* non-stab on save stack */
395c3793 104#define SS_SCSV 9 /* callsave structure on save stack */
35c8bce7 105#define SS_SAPTR 10 /* ARRAY* on save stack */
a687059c 106#define SS_HASH 253 /* carrying an hash */
107#define SS_ARY 254 /* carrying an array */
108#define SS_FREE 255 /* in free list */
109/* str_state may have any value 0-255 when used to hold fbm pattern, in which */
110/* case it indicates offset to rarest character in screaminstr key */
111
8d063cd8 112/* the following macro updates any magic values this str is associated with */
113
a687059c 114#ifdef TAINT
115#define STABSET(x) \
116 (x)->str_tainted |= tainted; \
117 if ((x)->str_magic) \
118 stabset((x)->str_magic,(x))
119#else
120#define STABSET(x) \
121 if ((x)->str_magic) \
122 stabset((x)->str_magic,(x))
123#endif
124
125#define STR_SSET(dst,src) if (dst != src) str_sset(dst,src)
8d063cd8 126
127EXT STR **tmps_list;
378cc40b 128EXT int tmps_max INIT(-1);
129EXT int tmps_base INIT(-1);
8d063cd8 130
131char *str_2ptr();
132double str_2num();
fe14fcc3 133STR *str_mortal();
134STR *str_2mortal();
8d063cd8 135STR *str_make();
136STR *str_nmake();
a687059c 137STR *str_smake();
138int str_cmp();
139int str_eq();
140void str_magic();
141void str_insert();
e929a76b 142STRLEN str_len();
de3bb511 143
144#define MULTI (3)