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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +3 -3
- data/lib/mittens/version.rb +1 -1
- data/vendor/snowball/.github/workflows/ci.yml +216 -0
- data/vendor/snowball/CONTRIBUTING.rst +111 -62
- data/vendor/snowball/GNUmakefile +194 -136
- data/vendor/snowball/NEWS +798 -3
- data/vendor/snowball/README.rst +50 -1
- data/vendor/snowball/ada/src/stemmer.adb +25 -13
- data/vendor/snowball/ada/src/stemmer.ads +9 -9
- data/vendor/snowball/ada/stemmer_config.gpr +7 -7
- data/vendor/snowball/algorithms/basque.sbl +4 -19
- data/vendor/snowball/algorithms/catalan.sbl +2 -9
- data/vendor/snowball/algorithms/danish.sbl +1 -1
- data/vendor/snowball/algorithms/dutch.sbl +284 -122
- data/vendor/snowball/algorithms/dutch_porter.sbl +178 -0
- data/vendor/snowball/algorithms/english.sbl +52 -37
- data/vendor/snowball/algorithms/esperanto.sbl +157 -0
- data/vendor/snowball/algorithms/estonian.sbl +269 -0
- data/vendor/snowball/algorithms/finnish.sbl +2 -3
- data/vendor/snowball/algorithms/french.sbl +42 -16
- data/vendor/snowball/algorithms/german.sbl +35 -14
- data/vendor/snowball/algorithms/greek.sbl +76 -76
- data/vendor/snowball/algorithms/hungarian.sbl +8 -6
- data/vendor/snowball/algorithms/indonesian.sbl +14 -8
- data/vendor/snowball/algorithms/italian.sbl +11 -21
- data/vendor/snowball/algorithms/lithuanian.sbl +36 -37
- data/vendor/snowball/algorithms/lovins.sbl +0 -1
- data/vendor/snowball/algorithms/nepali.sbl +138 -37
- data/vendor/snowball/algorithms/norwegian.sbl +19 -5
- data/vendor/snowball/algorithms/porter.sbl +2 -2
- data/vendor/snowball/algorithms/portuguese.sbl +9 -13
- data/vendor/snowball/algorithms/romanian.sbl +17 -4
- data/vendor/snowball/algorithms/serbian.sbl +467 -468
- data/vendor/snowball/algorithms/spanish.sbl +5 -7
- data/vendor/snowball/algorithms/swedish.sbl +60 -6
- data/vendor/snowball/algorithms/tamil.sbl +207 -176
- data/vendor/snowball/algorithms/turkish.sbl +461 -445
- data/vendor/snowball/algorithms/yiddish.sbl +36 -38
- data/vendor/snowball/compiler/analyser.c +445 -192
- data/vendor/snowball/compiler/driver.c +109 -101
- data/vendor/snowball/compiler/generator.c +853 -464
- data/vendor/snowball/compiler/generator_ada.c +404 -366
- data/vendor/snowball/compiler/generator_csharp.c +297 -260
- data/vendor/snowball/compiler/generator_go.c +323 -254
- data/vendor/snowball/compiler/generator_java.c +326 -252
- data/vendor/snowball/compiler/generator_js.c +362 -252
- data/vendor/snowball/compiler/generator_pascal.c +349 -197
- data/vendor/snowball/compiler/generator_python.c +257 -240
- data/vendor/snowball/compiler/generator_rust.c +423 -251
- data/vendor/snowball/compiler/header.h +117 -71
- data/vendor/snowball/compiler/space.c +137 -68
- data/vendor/snowball/compiler/syswords.h +2 -2
- data/vendor/snowball/compiler/tokeniser.c +125 -107
- data/vendor/snowball/csharp/Snowball/Among.cs +14 -14
- data/vendor/snowball/csharp/Snowball/AssemblyInfo.cs +7 -7
- data/vendor/snowball/csharp/Snowball/Stemmer.cs +57 -37
- data/vendor/snowball/csharp/Stemwords/App.config +2 -2
- data/vendor/snowball/csharp/Stemwords/Program.cs +16 -12
- data/vendor/snowball/doc/libstemmer_c_README +7 -4
- data/vendor/snowball/doc/libstemmer_csharp_README +4 -1
- data/vendor/snowball/doc/libstemmer_java_README +12 -1
- data/vendor/snowball/doc/libstemmer_js_README +6 -4
- data/vendor/snowball/doc/libstemmer_python_README +9 -4
- data/vendor/snowball/examples/stemwords.c +12 -12
- data/vendor/snowball/go/env.go +107 -31
- data/vendor/snowball/go/util.go +0 -4
- data/vendor/snowball/include/libstemmer.h +4 -0
- data/vendor/snowball/java/org/tartarus/snowball/Among.java +32 -15
- data/vendor/snowball/java/org/tartarus/snowball/SnowballProgram.java +347 -261
- data/vendor/snowball/java/org/tartarus/snowball/SnowballStemmer.java +3 -0
- data/vendor/snowball/java/org/tartarus/snowball/TestApp.java +52 -37
- data/vendor/snowball/javascript/base-stemmer.js +186 -2
- data/vendor/snowball/javascript/stemwords.js +3 -6
- data/vendor/snowball/libstemmer/libstemmer_c.in +1 -1
- data/vendor/snowball/libstemmer/mkalgorithms.pl +6 -6
- data/vendor/snowball/libstemmer/mkmodules.pl +2 -2
- data/vendor/snowball/libstemmer/modules.txt +13 -10
- data/vendor/snowball/libstemmer/test.c +1 -1
- data/vendor/snowball/pascal/SnowballProgram.pas +84 -2
- data/vendor/snowball/pascal/generate.pl +13 -13
- data/vendor/snowball/python/create_init.py +4 -1
- data/vendor/snowball/python/setup.cfg +0 -3
- data/vendor/snowball/python/setup.py +8 -3
- data/vendor/snowball/python/snowballstemmer/basestemmer.py +20 -54
- data/vendor/snowball/python/stemwords.py +8 -12
- data/vendor/snowball/runtime/api.c +10 -5
- data/vendor/snowball/runtime/header.h +10 -9
- data/vendor/snowball/runtime/utilities.c +9 -9
- data/vendor/snowball/rust/build.rs +1 -1
- data/vendor/snowball/rust/src/snowball/snowball_env.rs +83 -5
- data/vendor/snowball/tests/stemtest.c +7 -4
- metadata +7 -7
- data/vendor/snowball/.travis.yml +0 -112
- data/vendor/snowball/algorithms/german2.sbl +0 -145
- data/vendor/snowball/algorithms/kraaij_pohlmann.sbl +0 -240
- data/vendor/snowball/compiler/syswords2.h +0 -13
@@ -1,6 +1,6 @@
|
|
1
1
|
#include <stdio.h>
|
2
2
|
|
3
|
-
#define SNOWBALL_VERSION "
|
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 *
|
24
|
-
extern symbol *
|
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 *
|
28
|
-
extern symbol *
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
77
|
+
byte * p;
|
69
78
|
int c;
|
70
79
|
char * file;
|
71
|
-
|
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
|
-
|
90
|
+
byte * s;
|
80
91
|
|
81
92
|
};
|
82
93
|
|
83
94
|
enum token_codes {
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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
|
-
|
146
|
+
byte * p;
|
110
147
|
int c;
|
111
148
|
char * file;
|
112
|
-
|
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
|
-
|
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
|
141
|
-
extern struct tokeniser * create_tokeniser(
|
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(
|
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
|
-
|
157
|
-
|
158
|
-
|
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
|
-
|
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
|
-
|
225
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
/*
|
305
|
-
|
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;
|
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
|
-
|
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 (
|
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
|
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);
|