mittens 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +3 -3
  4. data/lib/mittens/version.rb +1 -1
  5. data/vendor/snowball/.github/workflows/ci.yml +216 -0
  6. data/vendor/snowball/CONTRIBUTING.rst +111 -62
  7. data/vendor/snowball/GNUmakefile +194 -136
  8. data/vendor/snowball/NEWS +798 -3
  9. data/vendor/snowball/README.rst +50 -1
  10. data/vendor/snowball/ada/src/stemmer.adb +25 -13
  11. data/vendor/snowball/ada/src/stemmer.ads +9 -9
  12. data/vendor/snowball/ada/stemmer_config.gpr +7 -7
  13. data/vendor/snowball/algorithms/basque.sbl +4 -19
  14. data/vendor/snowball/algorithms/catalan.sbl +2 -9
  15. data/vendor/snowball/algorithms/danish.sbl +1 -1
  16. data/vendor/snowball/algorithms/dutch.sbl +284 -122
  17. data/vendor/snowball/algorithms/dutch_porter.sbl +178 -0
  18. data/vendor/snowball/algorithms/english.sbl +52 -37
  19. data/vendor/snowball/algorithms/esperanto.sbl +157 -0
  20. data/vendor/snowball/algorithms/estonian.sbl +269 -0
  21. data/vendor/snowball/algorithms/finnish.sbl +2 -3
  22. data/vendor/snowball/algorithms/french.sbl +42 -16
  23. data/vendor/snowball/algorithms/german.sbl +35 -14
  24. data/vendor/snowball/algorithms/greek.sbl +76 -76
  25. data/vendor/snowball/algorithms/hungarian.sbl +8 -6
  26. data/vendor/snowball/algorithms/indonesian.sbl +14 -8
  27. data/vendor/snowball/algorithms/italian.sbl +11 -21
  28. data/vendor/snowball/algorithms/lithuanian.sbl +36 -37
  29. data/vendor/snowball/algorithms/lovins.sbl +0 -1
  30. data/vendor/snowball/algorithms/nepali.sbl +138 -37
  31. data/vendor/snowball/algorithms/norwegian.sbl +19 -5
  32. data/vendor/snowball/algorithms/porter.sbl +2 -2
  33. data/vendor/snowball/algorithms/portuguese.sbl +9 -13
  34. data/vendor/snowball/algorithms/romanian.sbl +17 -4
  35. data/vendor/snowball/algorithms/serbian.sbl +467 -468
  36. data/vendor/snowball/algorithms/spanish.sbl +5 -7
  37. data/vendor/snowball/algorithms/swedish.sbl +60 -6
  38. data/vendor/snowball/algorithms/tamil.sbl +207 -176
  39. data/vendor/snowball/algorithms/turkish.sbl +461 -445
  40. data/vendor/snowball/algorithms/yiddish.sbl +36 -38
  41. data/vendor/snowball/compiler/analyser.c +445 -192
  42. data/vendor/snowball/compiler/driver.c +109 -101
  43. data/vendor/snowball/compiler/generator.c +853 -464
  44. data/vendor/snowball/compiler/generator_ada.c +404 -366
  45. data/vendor/snowball/compiler/generator_csharp.c +297 -260
  46. data/vendor/snowball/compiler/generator_go.c +323 -254
  47. data/vendor/snowball/compiler/generator_java.c +326 -252
  48. data/vendor/snowball/compiler/generator_js.c +362 -252
  49. data/vendor/snowball/compiler/generator_pascal.c +349 -197
  50. data/vendor/snowball/compiler/generator_python.c +257 -240
  51. data/vendor/snowball/compiler/generator_rust.c +423 -251
  52. data/vendor/snowball/compiler/header.h +117 -71
  53. data/vendor/snowball/compiler/space.c +137 -68
  54. data/vendor/snowball/compiler/syswords.h +2 -2
  55. data/vendor/snowball/compiler/tokeniser.c +125 -107
  56. data/vendor/snowball/csharp/Snowball/Among.cs +14 -14
  57. data/vendor/snowball/csharp/Snowball/AssemblyInfo.cs +7 -7
  58. data/vendor/snowball/csharp/Snowball/Stemmer.cs +57 -37
  59. data/vendor/snowball/csharp/Stemwords/App.config +2 -2
  60. data/vendor/snowball/csharp/Stemwords/Program.cs +16 -12
  61. data/vendor/snowball/doc/libstemmer_c_README +7 -4
  62. data/vendor/snowball/doc/libstemmer_csharp_README +4 -1
  63. data/vendor/snowball/doc/libstemmer_java_README +12 -1
  64. data/vendor/snowball/doc/libstemmer_js_README +6 -4
  65. data/vendor/snowball/doc/libstemmer_python_README +9 -4
  66. data/vendor/snowball/examples/stemwords.c +12 -12
  67. data/vendor/snowball/go/env.go +107 -31
  68. data/vendor/snowball/go/util.go +0 -4
  69. data/vendor/snowball/include/libstemmer.h +4 -0
  70. data/vendor/snowball/java/org/tartarus/snowball/Among.java +32 -15
  71. data/vendor/snowball/java/org/tartarus/snowball/SnowballProgram.java +347 -261
  72. data/vendor/snowball/java/org/tartarus/snowball/SnowballStemmer.java +3 -0
  73. data/vendor/snowball/java/org/tartarus/snowball/TestApp.java +52 -37
  74. data/vendor/snowball/javascript/base-stemmer.js +186 -2
  75. data/vendor/snowball/javascript/stemwords.js +3 -6
  76. data/vendor/snowball/libstemmer/libstemmer_c.in +1 -1
  77. data/vendor/snowball/libstemmer/mkalgorithms.pl +6 -6
  78. data/vendor/snowball/libstemmer/mkmodules.pl +2 -2
  79. data/vendor/snowball/libstemmer/modules.txt +13 -10
  80. data/vendor/snowball/libstemmer/test.c +1 -1
  81. data/vendor/snowball/pascal/SnowballProgram.pas +84 -2
  82. data/vendor/snowball/pascal/generate.pl +13 -13
  83. data/vendor/snowball/python/create_init.py +4 -1
  84. data/vendor/snowball/python/setup.cfg +0 -3
  85. data/vendor/snowball/python/setup.py +8 -3
  86. data/vendor/snowball/python/snowballstemmer/basestemmer.py +20 -54
  87. data/vendor/snowball/python/stemwords.py +8 -12
  88. data/vendor/snowball/runtime/api.c +10 -5
  89. data/vendor/snowball/runtime/header.h +10 -9
  90. data/vendor/snowball/runtime/utilities.c +9 -9
  91. data/vendor/snowball/rust/build.rs +1 -1
  92. data/vendor/snowball/rust/src/snowball/snowball_env.rs +83 -5
  93. data/vendor/snowball/tests/stemtest.c +7 -4
  94. metadata +7 -7
  95. data/vendor/snowball/.travis.yml +0 -112
  96. data/vendor/snowball/algorithms/german2.sbl +0 -145
  97. data/vendor/snowball/algorithms/kraaij_pohlmann.sbl +0 -240
  98. data/vendor/snowball/compiler/syswords2.h +0 -13
@@ -1,6 +1,6 @@
1
1
  #include <stdio.h>
2
2
 
3
- #define SNOWBALL_VERSION "2.2.0"
3
+ #define SNOWBALL_VERSION "3.0.1"
4
4
 
5
5
  typedef unsigned char byte;
6
6
  typedef unsigned short symbol;
@@ -20,15 +20,24 @@ typedef unsigned short symbol;
20
20
  extern symbol * create_b(int n);
21
21
  extern void report_b(FILE * out, const symbol * p);
22
22
  extern void lose_b(symbol * p);
23
- extern symbol * increase_capacity(symbol * p, int n);
24
- extern symbol * move_to_b(symbol * p, int n, const symbol * q);
25
- extern symbol * add_to_b(symbol * p, int n, const symbol * q);
23
+ extern symbol * increase_capacity_b(symbol * p, int n);
24
+ extern symbol * add_to_b(symbol * p, const symbol * q, int n);
26
25
  extern symbol * copy_b(const symbol * p);
27
- extern char * b_to_s(const symbol * p);
28
- extern symbol * add_s_to_b(symbol * p, const char * s);
29
-
30
- #define MOVE_TO_B(B, LIT) \
31
- move_to_b(B, sizeof(LIT) / sizeof(LIT[0]), LIT)
26
+ extern char * b_to_sz(const symbol * p);
27
+ extern symbol * add_symbol_to_b(symbol * p, symbol ch);
28
+
29
+ // These routines are like those above but work in byte instead of symbol.
30
+
31
+ extern byte * create_s(int n);
32
+ extern void report_s(FILE * out, const byte * p);
33
+ extern void lose_s(byte * p);
34
+ extern byte * increase_capacity_s(byte * p, int n);
35
+ extern byte * copy_s(const byte * p);
36
+ extern byte * add_s_to_s(byte * p, const char * s, int n);
37
+ extern byte * add_sz_to_s(byte * p, const char * s);
38
+ extern byte * add_char_to_s(byte * p, char ch);
39
+ // "" LIT is a trick to make compilation fail if LIT is not a string literal.
40
+ #define add_literal_to_s(P, LIT) add_s_to_s(P, "" LIT, sizeof(LIT) - 1)
32
41
 
33
42
  struct str; /* defined in space.c */
34
43
 
@@ -36,62 +45,91 @@ extern struct str * str_new(void);
36
45
  extern void str_delete(struct str * str);
37
46
  extern void str_append(struct str * str, const struct str * add);
38
47
  extern void str_append_ch(struct str * str, char add);
39
- extern void str_append_symbol(struct str * str, symbol add);
40
- extern void str_append_b(struct str * str, const symbol * q);
41
- extern void str_append_b_tail(struct str * str, const symbol * q, int skip);
48
+ extern void str_append_s(struct str * str, const byte * q);
42
49
  extern void str_append_string(struct str * str, const char * s);
43
50
  extern void str_append_int(struct str * str, int i);
51
+ extern void str_append_wchar_as_utf8(struct str * str, symbol ch);
44
52
  extern void str_clear(struct str * str);
45
53
  extern void str_assign(struct str * str, const char * s);
46
54
  extern struct str * str_copy(const struct str * old);
47
- extern symbol * str_data(const struct str * str);
55
+ extern byte * str_data(const struct str * str);
48
56
  extern int str_len(const struct str * str);
49
57
  extern int str_back(const struct str *str);
58
+ extern void str_pop(const struct str *str);
59
+ extern void output_str(FILE * outfile, struct str * str);
60
+
50
61
  extern int get_utf8(const symbol * p, int * slot);
51
62
  extern int put_utf8(int ch, symbol * p);
52
- extern void output_str(FILE * outfile, struct str * str);
53
63
 
54
64
  typedef enum { ENC_SINGLEBYTE, ENC_UTF8, ENC_WIDECHARS } enc;
55
65
 
66
+ /* stringdef name and value */
56
67
  struct m_pair {
57
-
58
68
  struct m_pair * next;
59
- symbol * name;
69
+ byte * name;
60
70
  symbol * value;
61
71
 
62
72
  };
63
73
 
64
74
  /* struct input must be a prefix of struct tokeniser. */
65
75
  struct input {
66
-
67
76
  struct input * next;
68
- symbol * p;
77
+ byte * p;
69
78
  int c;
70
79
  char * file;
71
- int file_needs_freeing;
80
+ // -1 : Release file with: lose_s((byte *)file)
81
+ // 0 : We don't own file.
82
+ // 1 : Release file with: free(file)
83
+ int file_owned;
72
84
  int line_number;
73
85
 
74
86
  };
75
87
 
76
88
  struct include {
77
-
78
89
  struct include * next;
79
- symbol * b;
90
+ byte * s;
80
91
 
81
92
  };
82
93
 
83
94
  enum token_codes {
84
-
85
- #include "syswords2.h"
86
-
87
- c_mathassign,
95
+ /* The relational operator token values are chosen such that we can
96
+ * invert the relation with a simple xor with 1.
97
+ */
98
+ c_gt = 0, c_le,
99
+ c_ge, c_lt,
100
+ c_eq, c_ne,
101
+
102
+ /* Other token values just need to be unique. */
103
+ c_among, c_and, c_as, c_assign, c_assignto, c_atleast,
104
+ c_atlimit, c_atmark, c_attach, c_backwardmode, c_backwards,
105
+ c_booleans, c_bra, c_comment1, c_comment2, c_cursor, c_debug,
106
+ c_decimal, c_define, c_delete, c_divide, c_divideassign, c_do,
107
+ c_dollar, c_externals, c_fail, c_false, c_for, c_get,
108
+ c_gopast, c_goto, c_groupings, c_hex, c_hop, c_insert,
109
+ c_integers, c_ket, c_leftslice, c_len, c_lenof, c_limit, c_loop,
110
+ c_maxint, c_minint, c_minus, c_minusassign, c_multiply,
111
+ c_multiplyassign, c_next, c_non, c_not, c_or, c_plus,
112
+ c_plusassign, c_repeat, c_reverse, c_rightslice, c_routines,
113
+ c_set, c_setlimit, c_setmark, c_size, c_sizeof, c_slicefrom,
114
+ c_sliceto, c_stringdef, c_stringescapes, c_strings, c_substring,
115
+ c_test, c_tolimit, c_tomark, c_true, c_try, c_unset,
116
+
117
+ /* These token values don't directly correspond to a keyword. */
88
118
  c_name,
89
119
  c_number,
90
120
  c_literalstring,
121
+
122
+ /* These token values are synthesised by the analyser. */
123
+ c_mathassign,
91
124
  c_neg,
92
125
  c_call,
93
126
  c_grouping,
94
127
  c_booltest,
128
+ c_functionend,
129
+ c_goto_grouping,
130
+ c_gopast_grouping,
131
+ c_goto_non,
132
+ c_gopast_non,
95
133
 
96
134
  NUM_TOKEN_CODES
97
135
  };
@@ -104,15 +142,20 @@ enum uplus_modes {
104
142
 
105
143
  /* struct input must be a prefix of struct tokeniser. */
106
144
  struct tokeniser {
107
-
108
145
  struct input * next;
109
- symbol * p;
146
+ byte * p;
110
147
  int c;
111
148
  char * file;
112
- int file_needs_freeing;
149
+ // -1 : Release file with: lose_s((byte *)file)
150
+ // 0 : We don't own file.
151
+ // 1 : Release file with: free(file)
152
+ int file_owned;
113
153
  int line_number;
154
+
155
+ // Used for c_literalstring values.
114
156
  symbol * b;
115
- symbol * b2;
157
+ // Used for c_name names.
158
+ byte * s;
116
159
  int number;
117
160
  int m_start;
118
161
  int m_end;
@@ -122,6 +165,7 @@ struct tokeniser {
122
165
  int token;
123
166
  int previous_token;
124
167
  byte token_held;
168
+ byte token_reported_as_unexpected;
125
169
  enc encoding;
126
170
 
127
171
  int omission;
@@ -137,48 +181,45 @@ struct tokeniser {
137
181
  char token_disabled[NUM_TOKEN_CODES];
138
182
  };
139
183
 
140
- extern symbol * get_input(const char * filename);
141
- extern struct tokeniser * create_tokeniser(symbol * b, char * file);
184
+ extern byte * get_input(const char * filename);
185
+ extern struct tokeniser * create_tokeniser(byte * b, char * file);
142
186
  extern int read_token(struct tokeniser * t);
187
+ extern int peek_token(struct tokeniser * t);
188
+ #define hold_token(T) ((T)->token_held = true)
143
189
  extern const char * name_of_token(int code);
144
190
  extern void disable_token(struct tokeniser * t, int code);
145
191
  extern void close_tokeniser(struct tokeniser * t);
146
192
 
147
193
  extern int space_count;
148
- extern void * check_malloc(int n);
194
+ extern void * check_malloc(size_t n);
149
195
  extern void check_free(void * p);
150
196
 
151
197
  struct node;
152
198
 
153
199
  struct name {
154
-
155
200
  struct name * next;
156
- symbol * b;
157
- int type; /* t_string etc */
158
- int mode; /* )_ for routines, externals */
159
- struct node * definition; /* ) */
160
- int count; /* 0, 1, 2 for each type */
161
- struct grouping * grouping; /* for grouping names */
201
+ byte * s;
202
+ byte type; /* t_string etc */
203
+ byte mode; /* for routines, externals (m_forward, etc) */
162
204
  byte referenced;
163
205
  byte used_in_among; /* Function used in among? */
164
206
  byte value_used; /* (For variables) is its value ever used? */
165
207
  byte initialised; /* (For variables) is it ever initialised? */
166
208
  byte used_in_definition; /* (grouping) used in grouping definition? */
209
+ struct node * definition; /* for routines, externals */
210
+ int count; /* 0, 1, 2 for each type */
211
+ struct grouping * grouping; /* for grouping names */
167
212
  struct node * used; /* First use, or NULL if not used */
168
213
  struct name * local_to; /* Local to one routine/external */
169
214
  int declaration_line_number;/* Line number of declaration */
170
-
171
215
  };
172
216
 
173
217
  struct literalstring {
174
-
175
218
  struct literalstring * next;
176
219
  symbol * b;
177
-
178
220
  };
179
221
 
180
222
  struct amongvec {
181
-
182
223
  symbol * b; /* the string giving the case */
183
224
  int size; /* - and its size */
184
225
  struct node * action; /* the corresponding action */
@@ -186,11 +227,9 @@ struct amongvec {
186
227
  int result; /* the numeric result for the case */
187
228
  int line_number; /* for diagnostics and stable sorting */
188
229
  struct name * function;
189
-
190
230
  };
191
231
 
192
232
  struct among {
193
-
194
233
  struct among * next;
195
234
  struct amongvec * b; /* pointer to the amongvec */
196
235
  int number; /* amongs are numbered 0, 1, 2 ... */
@@ -199,13 +238,14 @@ struct among {
199
238
  int nocommand_count; /* number of "no command" entries in this among */
200
239
  int function_count; /* in this among */
201
240
  int amongvar_needed; /* do we need to set among_var? */
202
- struct node * starter; /* i.e. among( (starter) 'string' ... ) */
241
+ int always_matches; /* will this among always match? */
242
+ int shortest_size; /* smallest non-zero string length in this among */
203
243
  struct node * substring; /* i.e. substring ... among ( ... ) */
204
244
  struct node ** commands; /* array with command_count entries */
245
+ struct node * node; /* pointer to the node for this among */
205
246
  };
206
247
 
207
248
  struct grouping {
208
-
209
249
  struct grouping * next;
210
250
  symbol * b; /* the characters of this group */
211
251
  int largest_ch; /* character with max code */
@@ -215,14 +255,19 @@ struct grouping {
215
255
  };
216
256
 
217
257
  struct node {
218
-
219
258
  struct node * next;
220
259
  struct node * left;
221
260
  struct node * aux; /* used in setlimit */
222
261
  struct among * among; /* used in among */
223
262
  struct node * right;
224
- int type;
225
- int mode;
263
+ byte type;
264
+ byte mode;
265
+ // We want to distinguish constant AEs which have the same value everywhere
266
+ // (e.g. 42, 2+2, lenof '{U+0246}') from constant AEs which can have a
267
+ // different value depending on platform and/or target language and/or
268
+ // Unicode mode (e.g. maxint, sizeof '{U+0246}') - some warnings which
269
+ // depend on a constant AEs value should only fire for the first set.
270
+ byte fixed_constant;
226
271
  struct node * AE;
227
272
  struct name * name;
228
273
  symbol * literalstring;
@@ -232,13 +277,12 @@ struct node {
232
277
  };
233
278
 
234
279
  enum name_types {
235
-
236
280
  t_size = 6,
237
281
 
238
282
  t_string = 0, t_boolean = 1, t_integer = 2, t_routine = 3, t_external = 4,
239
283
  t_grouping = 5
240
284
 
241
- /* If this list is extended, adjust wvn in generator.c */
285
+ /* If this list is extended, adjust write_varname in generator.c */
242
286
  };
243
287
 
244
288
  /* In name_count[i] below, remember that
@@ -253,12 +297,11 @@ enum name_types {
253
297
  */
254
298
 
255
299
  struct analyser {
256
-
257
300
  struct tokeniser * tokeniser;
258
301
  struct node * nodes;
259
302
  struct name * names;
260
303
  struct literalstring * literalstrings;
261
- int mode;
304
+ byte mode;
262
305
  byte modifyable; /* false inside reverse(...) */
263
306
  struct node * program;
264
307
  struct node * program_end;
@@ -267,6 +310,7 @@ struct analyser {
267
310
  struct among * amongs_end;
268
311
  int among_count;
269
312
  int amongvar_needed; /* used in reading routine definitions */
313
+ int among_with_function_count; /* number of amongs with functions */
270
314
  struct grouping * groupings;
271
315
  struct grouping * groupings_end;
272
316
  struct node * substring; /* pending 'substring' in current routine definition */
@@ -275,9 +319,11 @@ struct analyser {
275
319
  };
276
320
 
277
321
  enum analyser_modes {
278
-
279
- m_forward = 0, m_backward /*, m_integer */
280
-
322
+ // m_unknown is used as the initial value for struct node's mode member.
323
+ // When a routine (or external) is used or defined we check the mode
324
+ // member matches, but for the first use/definition we see we want to
325
+ // instead set it to the mode of that use/definition.
326
+ m_forward = 0, m_backward, m_unknown
281
327
  };
282
328
 
283
329
  extern void print_program(struct analyser * a);
@@ -287,7 +333,6 @@ extern void close_analyser(struct analyser * a);
287
333
  extern void read_program(struct analyser * a);
288
334
 
289
335
  struct generator {
290
-
291
336
  struct analyser * analyser;
292
337
  struct options * options;
293
338
  int unreachable; /* 0 if code can be reached, 1 if current code
@@ -301,21 +346,16 @@ struct generator {
301
346
  #endif
302
347
  int margin;
303
348
 
304
- /* if > 0, keep_count to restore in case of a failure;
305
- * if < 0, the negated keep_count for the limit to restore in case of
306
- * failure. */
307
- int failure_keep_count;
308
- #if !defined(DISABLE_JAVA) && !defined(DISABLE_JS) && !defined(DISABLE_PYTHON) && !defined(DISABLE_CSHARP)
309
- struct str * failure_str; /* This is used by some generators instead of failure_keep_count */
310
- #endif
349
+ /* Target language code to execute in case of failure. */
350
+ struct str * failure_str;
311
351
 
312
- int label_used; /* Keep track of whether the failure label is used. */
352
+ int label_used; /* Keep track of whether the failure label is used. */
313
353
  int failure_label;
314
354
  int debug_count;
315
355
  int copy_from_count; /* count of calls to copy_from() */
316
356
 
317
357
  const char * S[10]; /* strings */
318
- symbol * B[10]; /* blocks */
358
+ byte * B[10]; /* byte blocks */
319
359
  int I[10]; /* integers */
320
360
  struct name * V[5]; /* variables */
321
361
  symbol * L[5]; /* literals, used in formatted write */
@@ -325,7 +365,7 @@ struct generator {
325
365
  int literalstring_count;
326
366
  int keep_count; /* used to number keep/restore pairs to avoid compiler warnings
327
367
  about shadowed variables */
328
- int temporary_used; /* track if temporary variable used (for Pascal) */
368
+ int temporary_used; /* track if temporary variable used (Ada and Pascal) */
329
369
  };
330
370
 
331
371
  /* Special values for failure_label in struct generator. */
@@ -334,15 +374,14 @@ enum special_labels {
334
374
  };
335
375
 
336
376
  struct options {
337
-
338
377
  /* for the command line: */
339
-
340
378
  const char * output_file;
341
379
  char * name;
342
380
  FILE * output_src;
343
381
  FILE * output_h;
344
382
  byte syntax_tree;
345
383
  byte comments;
384
+ byte js_esm;
346
385
  enc encoding;
347
386
  enum { LANG_JAVA, LANG_C, LANG_CPLUSPLUS, LANG_CSHARP, LANG_PASCAL, LANG_PYTHON, LANG_JAVASCRIPT, LANG_RUST, LANG_GO, LANG_ADA } make_lang;
348
387
  const char * externals_prefix;
@@ -365,10 +404,13 @@ extern void close_generator(struct generator * g);
365
404
  extern void write_char(struct generator * g, int ch);
366
405
  extern void write_newline(struct generator * g);
367
406
  extern void write_string(struct generator * g, const char * s);
407
+ extern void write_wchar_as_utf8(struct generator * g, symbol ch);
368
408
  extern void write_int(struct generator * g, int i);
409
+ extern void write_hex4(struct generator * g, int ch);
369
410
  extern void write_symbol(struct generator * g, symbol s);
370
- extern void write_b(struct generator * g, symbol * b);
411
+ extern void write_s(struct generator * g, const byte * b);
371
412
  extern void write_str(struct generator * g, struct str * str);
413
+ extern void write_c_relop(struct generator * g, int relop);
372
414
 
373
415
  extern void write_comment_content(struct generator * g, struct node * p);
374
416
  extern void write_generated_comment_content(struct generator * g);
@@ -378,6 +420,10 @@ extern void write_start_comment(struct generator * g,
378
420
 
379
421
  extern int K_needed(struct generator * g, struct node * p);
380
422
  extern int repeat_restore(struct generator * g, struct node * p);
423
+ extern int check_possible_signals_list(struct generator * g,
424
+ struct node * p,
425
+ int type,
426
+ int call_depth);
381
427
 
382
428
  /* Generator for C code. */
383
429
  extern void generate_program_c(struct generator * g);