Annotation of freem/src/symtab_dispatch.c, revision 1.5

1.1       snw         1: /*
1.5     ! snw         2:  *   $Id: symtab_dispatch.c,v 1.4 2025/03/27 03:27:35 snw Exp $
1.1       snw         3:  *    symbol table dispatch module
                      4:  *
                      5:  *  
1.2       snw         6:  *   Author: Serena Willis <snw@coherent-logic.com>
1.1       snw         7:  *    Copyright (C) 1998 MUG Deutschland
1.3       snw         8:  *    Copyright (C) 2020, 2025 Coherent Logic Development LLC
1.1       snw         9:  *
                     10:  *
                     11:  *   This file is part of FreeM.
                     12:  *
                     13:  *   FreeM is free software: you can redistribute it and/or modify
                     14:  *   it under the terms of the GNU Affero Public License as published by
                     15:  *   the Free Software Foundation, either version 3 of the License, or
                     16:  *   (at your option) any later version.
                     17:  *
                     18:  *   FreeM is distributed in the hope that it will be useful,
                     19:  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
                     20:  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     21:  *   GNU Affero Public License for more details.
                     22:  *
                     23:  *   You should have received a copy of the GNU Affero Public License
                     24:  *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.
                     25:  *
1.4       snw        26:  *   $Log: symtab_dispatch.c,v $
1.5     ! snw        27:  *   Revision 1.4  2025/03/27 03:27:35  snw
        !            28:  *   Install init scripts to share/freem/examples/init and fix regression in method dispatch
        !            29:  *
1.4       snw        30:  *   Revision 1.3  2025/03/09 19:50:47  snw
                     31:  *   Second phase of REUSE compliance and header reformat
                     32:  *
1.3       snw        33:  *
                     34:  * SPDX-FileCopyrightText:  (C) 2025 Coherent Logic Development LLC
                     35:  * SPDX-License-Identifier: AGPL-3.0-or-later
1.1       snw        36:  **/
                     37: 
                     38: #include <string.h>
                     39: #include <ctype.h>
                     40: #include "mpsdef.h"
                     41: #include "mref.h"
                     42: #include "objects.h"
                     43: 
                     44: void symtab (short action, char *key, char *data)
                     45: {
                     46:     register int i;
                     47:     register int j;
                     48:     char ch;
                     49: 
                     50:     short res;
                     51:     char obj_class[255];
                     52:     char t_rou[255];
                     53:     char t_cls[255];
                     54:     
                     55:     freem_ref_t rv;
                     56:     freem_ref_t *r = &rv;
                     57: 
                     58:     mref_init (r, MREF_RT_LOCAL, "");
                     59:     internal_to_mref (r, key);
                     60: 
                     61:     res = obj_is_object (r->name);    
                     62: 
                     63:     if (res == TRUE) {
                     64:         res = obj_get_attribute (r->name, "CLASS", obj_class);
                     65:         stcpy (t_rou, rou_name);
                     66:         stcnv_m2c (t_rou);
                     67:         strcpy (t_cls, &(obj_class[1]));
                     68:         
                     69:         if ((strcmp (t_rou, t_cls) != 0) && (obj_is_field_private (key) == TRUE)) {
                     70:             merr_raise (OBJFLDACCV);
                     71:             return;
                     72:         }        
                     73: 
                     74:         if (r->subscript_count == 0 && action == kill_sym) {
                     75:             
1.5     ! snw        76:             if (destructor_ct < 10) {                
        !            77:                 snprintf (destructors[destructor_ct++], OBJ_DSTRSIZE - 1, "DESTROY^%%SYSOOP(\"%s\",.%s)", t_cls, r->name);
1.1       snw        78:             }
                     79:             
                     80:             obj_destroy (key);
                     81:             
                     82:         }
                     83:         
                     84:     }    
                     85:     
                     86:     if (action != fra_order && action != fra_query) {
                     87:         for (i = 0; i < r->subscript_count; i++) {
                     88:             
                     89:             if (strlen (r->subscripts[i]) < 1) {
                     90:                 merr_raise (SBSCR);
                     91:                 return;
                     92:             }
                     93:             
                     94:         }
                     95:     }
                     96: 
                     97:     if (rtn_dialect () == D_M77) {
                     98: 
                     99:         for (i = 0; i < r->subscript_count; i++) {
                    100:             for (j = 0; j < strlen (r->subscripts[i]); j++) {
                    101: 
                    102:                 ch = r->subscripts[i][j];
                    103: 
                    104:                 if (!isdigit (ch)) {
                    105:                     merr_raise (NOSTAND);
                    106:                     return;
                    107:                 }
                    108:                 
                    109:             }
                    110:         }
                    111: 
                    112:     }
                    113: 
                    114:     symtab_bltin (action, key, data);
                    115:     
                    116: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>