~vcs-imports/gawk/master

« back to all changes in this revision

Viewing changes to array.c

  • Committer: Arnold D. Robbins
  • Date: 2016-10-23 09:12:50 UTC
  • mto: (408.31.25)
  • mto: This revision was merged to the branch mainline in revision 714.
  • Revision ID: git-v1:3055361c2a022c9ac9ae42ac88c00e3055498a0d
Remove trailing whitespace everywhere. Fix Unicode into ASCII.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 * array.c - routines for awk arrays.
3
3
 */
4
4
 
5
 
/* 
 
5
/*
6
6
 * Copyright (C) 1986, 1988, 1989, 1991-2014, 2016,
7
7
 * the Free Software Foundation, Inc.
8
 
 * 
 
8
 *
9
9
 * This file is part of GAWK, the GNU implementation of the
10
10
 * AWK Programming Language.
11
 
 * 
 
11
 *
12
12
 * GAWK is free software; you can redistribute it and/or modify
13
13
 * it under the terms of the GNU General Public License as published by
14
14
 * the Free Software Foundation; either version 3 of the License, or
15
15
 * (at your option) any later version.
16
 
 * 
 
16
 *
17
17
 * GAWK is distributed in the hope that it will be useful,
18
18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
20
 * GNU General Public License for more details.
21
 
 * 
 
21
 *
22
22
 * You should have received a copy of the GNU General Public License
23
23
 * along with this program; if not, write to the Free Software
24
24
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
102
102
        /* vname, flags, and parent_array not set here */
103
103
 
104
104
        return array;
105
 
}               
 
105
}
106
106
 
107
107
 
108
108
/* null_array --- force symbol to be an empty typeless array */
150
150
        return symbol->alookup(symbol, subs);
151
151
}
152
152
 
153
 
/* null_length --- default function for array length interface */ 
 
153
/* null_length --- default function for array length interface */
154
154
 
155
155
NODE **
156
156
null_length(NODE *symbol, NODE *subs ATTRIBUTE_UNUSED)
198
198
void
199
199
assoc_dump(NODE *symbol, NODE *ndump)
200
200
{
201
 
        if (symbol->adump)      
 
201
        if (symbol->adump)
202
202
                (void) symbol->adump(symbol, ndump);
203
203
}
204
204
 
229
229
                        max_alen = alen + SLEN;
230
230
                        emalloc(aname, char *, (max_alen + 1) * sizeof(char *), "make_aname");
231
231
                } else if (alen > max_alen) {
232
 
                        max_alen = alen + SLEN; 
 
232
                        max_alen = alen + SLEN;
233
233
                        erealloc(aname, char *, (max_alen + 1) * sizeof(char *), "make_aname");
234
234
                }
235
235
                memcpy(aname, symbol->vname, alen + 1);
258
258
        const NODE *save_symbol = symbol;
259
259
        const char *from = _("from %s");
260
260
        const char *aname;
261
 
        
 
261
 
262
262
        if (symbol->type != Node_array_ref
263
263
                        || symbol->orig_array->type != Node_var_array
264
264
        ) {
265
 
                if (symbol->type != Node_var_array || symbol->parent_array == NULL)     
 
265
                if (symbol->type != Node_var_array || symbol->parent_array == NULL)
266
266
                        return symbol->vname;
267
267
                return make_aname(symbol);
268
268
        }
373
373
 
374
374
 
375
375
/* set_SUBSEP --- update SUBSEP related variables when SUBSEP assigned to */
376
 
                                
 
376
 
377
377
void
378
378
set_SUBSEP()
379
379
{
396
396
        size_t subseplen = 0;
397
397
        int i;
398
398
        extern NODE **args_array;
399
 
        
 
399
 
400
400
        if (nargs == 1)
401
401
                return POP_STRING();
402
402
 
498
498
                         * But excludes cases like (nsubs = 0):
499
499
                         *
500
500
                         *   function f(c, d) { delete c; ..}
501
 
                         *   BEGIN { a[0][0] = 1; f(a[0], a[0]); ...}  
 
501
                         *   BEGIN { a[0][0] = 1; f(a[0], a[0]); ...}
502
502
                         */
503
503
 
504
504
                        null_array(r);
505
505
                        r->parent_array = NULL;
506
506
                        continue;
507
 
                }                       
 
507
                }
508
508
 
509
509
                /* Case 2 */
510
510
                for (n = n->parent_array; n != NULL; n = n->parent_array) {
648
648
        efree(list);
649
649
 
650
650
        /* blast the array in one shot */
651
 
        adjust_fcall_stack(symbol, 0);  
 
651
        adjust_fcall_stack(symbol, 0);
652
652
        assoc_clear(symbol);
653
653
}
654
654
 
703
703
 
704
704
        if ((n->flags & (STRING|STRCUR)) == STRCUR) {
705
705
                fprintf(output_fp, "][");
706
 
                fprintf(output_fp, "stfmt=%d, ", n->stfmt);     
 
706
                fprintf(output_fp, "stfmt=%d, ", n->stfmt);
707
707
                /*
708
708
                 * If not STFMT_UNUSED, could be CONVFMT or OFMT if last
709
709
                 * used in a print statement. If immutable, could be that it
1054
1054
 
1055
1055
        ret = cmp_numbers(t1, t2);
1056
1056
        if (ret != 0)
1057
 
                return ret; 
 
1057
                return ret;
1058
1058
 
1059
1059
        /* break a tie with the index string itself */
1060
1060
        t1 = force_string((NODE *) t1);
1241
1241
}
1242
1242
 
1243
1243
 
1244
 
/* assoc_list -- construct, and optionally sort, a list of array elements */  
 
1244
/* assoc_list -- construct, and optionally sort, a list of array elements */
1245
1245
 
1246
1246
NODE **
1247
1247
assoc_list(NODE *symbol, const char *sort_str, sort_context_t sort_ctxt)
1280
1280
        extern int currule;
1281
1281
        int save_rule = 0;
1282
1282
        assoc_kind_t assoc_kind = ANONE;
1283
 
        
 
1283
 
1284
1284
        elem_size = 1;
1285
1285
 
1286
1286
        for (qi = 0, j = sizeof(sort_funcs)/sizeof(sort_funcs[0]); qi < j; qi++) {
1304
1304
 
1305
1305
        } else {        /* unrecognized */
1306
1306
                NODE *f;
1307
 
                const char *sp; 
 
1307
                const char *sp;
1308
1308
 
1309
1309
                for (sp = sort_str; *sp != '\0' && ! isspace((unsigned char) *sp); sp++)
1310
1310
                        continue;
1328
1328
                code->func_body = f;
1329
1329
                code->func_name = NULL;         /* not needed, func_body already assigned */
1330
1330
                (code + 1)->expr_count = 4;     /* function takes 4 arguments */
1331
 
                code->nexti = bcalloc(Op_stop, 1, 0);   
 
1331
                code->nexti = bcalloc(Op_stop, 1, 0);
1332
1332
 
1333
1333
                /*
1334
1334
                 * make non-redirected getline, exit, `next' and `nextfile' fatal in
1355
1355
 
1356
1356
        if (cmp_func == sort_user_func) {
1357
1357
                code = POP_CODE();
1358
 
                currule = save_rule;            /* restore current rule */ 
 
1358
                currule = save_rule;            /* restore current rule */
1359
1359
                bcfree(code->nexti);            /* Op_stop */
1360
1360
                bcfree(code);                   /* Op_func_call */
1361
1361
        }