]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
cobol: Confine all __int128/_Float128 references to libgcobol.
authorBob Dubner <rdubner@symas.com>
Fri, 28 Mar 2025 16:09:39 +0000 (12:09 -0400)
committerRobert Dubner <rdubner@symas.com>
Fri, 28 Mar 2025 16:21:05 +0000 (12:21 -0400)
These changes are part of the effort to make possible cross compilation for
hosts that don't support __int128 or _Float128.

gcc/cobol

* Make-lang.in: Eliminate libgcobol.h from gcc/cobol files.
* genapi.cc: Eliminate "#include libgcobol.h".
(parser_display_internal): Change comment.
* genmath.cc: Eliminate "#include libgcobol.h".
* genutil.cc: Likewise.
(get_power_of_ten): Change comment.
* structs.cc: Eliminate cblc_int128_type_node.
* structs.h: Likewise.
* symbols.h: Receive comment from libgcobol.h

libgcobol

* charmaps.cc:Eliminate "#include libgcobol.h".
Change comment about _Float128.
* common-defs.h: Change comment about _Float128. Receive
#defines from libgcobol.h.
* constants.cc: Eliminate #include libgcobol.h. Eliminate other
unneeded #includes.
* ec.h: Receive declarations from libgcobol.h.
* gcobolio.h: Likewise.
* gfileio.cc: (__gg__file_init): Use file_flag_none_e instead of
zero in assignment.  (__gg__file_reopen): Likewise.
(__io__file_open): Likewise.
* gfileio.h: Receive declarations from libgcobol.h.
* libgcobol.h: Numerous declarations moved elsewhere.

15 files changed:
gcc/cobol/Make-lang.in
gcc/cobol/genapi.cc
gcc/cobol/genmath.cc
gcc/cobol/genutil.cc
gcc/cobol/structs.cc
gcc/cobol/structs.h
gcc/cobol/symbols.h
libgcobol/charmaps.cc
libgcobol/common-defs.h
libgcobol/constants.cc
libgcobol/ec.h
libgcobol/gcobolio.h
libgcobol/gfileio.cc
libgcobol/gfileio.h
libgcobol/libgcobol.h

index 02c867ea22a1e4ae31ff59fc70ebafa01000fcd4..ee048b09d9de7509c7f3b1363225b5e781e1f6e2 100644 (file)
@@ -93,7 +93,6 @@ cobol/charmaps.cc: $(LIB_SOURCE)/charmaps.cc
        sed -i "s|\"common-defs[.]h\"|\"$(LIB_SOURCE)/common-defs.h\"|g" $@
        sed -i "s|\"io[.]h\"|\"$(LIB_SOURCE)/io.h\"|g" $@
        sed -i "s|\"gcobolio[.]h\"|\"$(LIB_SOURCE)/gcobolio.h\"|g" $@
-       sed -i "s|\"libgcobol[.]h\"|\"$(LIB_SOURCE)/libgcobol.h\"|g" $@
        sed -i "s|\"gfileio[.]h\"|\"$(LIB_SOURCE)/gfileio.h\"|g" $@
        sed -i "s|\"charmaps[.]h\"|\"$(LIB_SOURCE)/charmaps.h\"|g" $@
        sed -i "s|\"valconv[.]h\"|\"$(LIB_SOURCE)/valconv.h\"|g" $@
@@ -105,7 +104,6 @@ cobol/valconv.cc: $(LIB_SOURCE)/valconv.cc
        sed -i "s|\"common-defs[.]h\"|\"$(LIB_SOURCE)/common-defs.h\"|g" $@
        sed -i "s|\"io[.]h\"|\"$(LIB_SOURCE)/io.h\"|g" $@
        sed -i "s|\"gcobolio[.]h\"|\"$(LIB_SOURCE)/gcobolio.h\"|g" $@
-       sed -i "s|\"libgcobol[.]h\"|\"$(LIB_SOURCE)/libgcobol.h\"|g" $@
        sed -i "s|\"gfileio[.]h\"|\"$(LIB_SOURCE)/gfileio.h\"|g" $@
        sed -i "s|\"charmaps[.]h\"|\"$(LIB_SOURCE)/charmaps.h\"|g" $@
        sed -i "s|\"valconv[.]h\"|\"$(LIB_SOURCE)/valconv.h\"|g" $@
index 8adc07ec57fa187154111e5b3ff159e383b0dcf9..be463f26bdfd92991488c0d43d97f65591defe26 100644 (file)
@@ -48,7 +48,6 @@
 #include "genmath.h"
 #include "structs.h"
 #include "../../libgcobol/gcobolio.h"
-#include "../../libgcobol/libgcobol.h"
 #include "../../libgcobol/charmaps.h"
 #include "../../libgcobol/valconv.h"
 #include "show_parse.h"
@@ -4800,14 +4799,13 @@ parser_display_internal(tree file_descriptor,
   else if( refer.field->type == FldLiteralN )
     {
     // The parser found the string of digits from the source code and converted
-    // it to a _Float128.
+    // it to a 128-bit binary floating point number.
 
     // The bad news is that something like 555.55 can't be expressed exactly;
     // internally it is 555.5499999999....
 
-    // The good news is that we know any string of 33 or fewer digits is
-    // converted to _Float128 and then converted back again, you get the same
-    // string.
+    // The good news is that we know any string of 33 or fewer decimal digits
+    // can be converted to and from IEEE 754 binary128 without being changes
 
     // We make use of that here
 
index 56254e88cc6c57983482798920979caa009961d8..9725754eae154a6c29f34a72c2bd397c7d4515d3 100644 (file)
@@ -42,7 +42,6 @@
 #include "gengen.h"
 #include "structs.h"
 #include "../../libgcobol/gcobolio.h"
-#include "../../libgcobol/libgcobol.h"
 #include "show_parse.h"
 
 void
index 509f8d23f3c23770b6df3a4e5476d7de16226e51..d11e4644b21bfcac3bb71064ba76f6f44ca7968a 100644 (file)
@@ -42,7 +42,6 @@
 #include "genutil.h"
 #include "structs.h"
 #include "../../libgcobol/gcobolio.h"
-#include "../../libgcobol/libgcobol.h"
 #include "../../libgcobol/charmaps.h"
 #include "show_parse.h"
 #include "../../libgcobol/exceptl.h"
@@ -1463,7 +1462,7 @@ get_power_of_ten(int n)
   else
     {
     // 19 through 38 is handled in a second step, because when this was written,
-    // GCC couldn't handle __int128 constants:
+    // GCC couldn't handle 128-bit constants:
     retval = pos[n/2];
     retval *= retval;
     if( n & 1 )
index 1d2d9845fdf72e96183dea9f5575c6857d3bfc48..e6f38e6b048dfa027b65a89c8dd4d683bf7dcfc7 100644 (file)
@@ -157,7 +157,6 @@ tree cblc_field_pp_type_node;
 tree cblc_file_type_node;
 tree cblc_file_p_type_node;
 tree cblc_goto_type_node;
-tree cblc_int128_type_node;
 
 // The following functions return type_decl nodes for the various structures
 
@@ -286,34 +285,6 @@ typedef struct cblc_file_t
     return retval;
     }
 
-static tree
-create_cblc_int128_t()
-    {
-    /*
-    // GCC-13 can't initialize __int64 variables, which is something we need to
-    // be able to do.  So, I created this union.  The array can be initialized,
-    // and thus we do an end run around the problem.  Annoying, but not fatally
-    // so.
-
-    typedef union cblc_int128_t
-        {
-        unsigned char array16[16];
-        __uint128     uval128;
-        __int128      sval128;
-        } cblc_int128_t;
-    */
-    tree retval = NULL_TREE;
-    tree array_type = build_array_type_nelts(UCHAR, 16);
-    retval = gg_get_filelevel_union_type_decl(
-                "cblc_int128_t",
-                3,
-                array_type,   "array16"       ,
-                UINT128,      "uval128"  ,
-                INT128,       "sval128"  );
-    retval = TREE_TYPE(retval);
-    return retval;
-    }
-
 void
 create_our_type_nodes()
     {
@@ -326,7 +297,6 @@ create_our_type_nodes()
         cblc_field_pp_type_node           = build_pointer_type(cblc_field_p_type_node);
         cblc_file_type_node               = create_cblc_file_t();
         cblc_file_p_type_node             = build_pointer_type(cblc_file_type_node);
-        cblc_int128_type_node             = create_cblc_int128_t();
         }
     }
 
index 618d8f0780f46c4fbfd9cc59b779cb468ca889c1..47a78b45e9a81f78451797e98f5e54c8826fc382 100644 (file)
@@ -55,7 +55,6 @@ extern GTY(()) tree cblc_field_pp_type_node;
 extern GTY(()) tree cblc_file_type_node;
 extern GTY(()) tree cblc_file_p_type_node;
 extern GTY(()) tree cblc_goto_type_node;
-extern GTY(()) tree cblc_int128_type_node;
 
 extern void create_our_type_nodes();
 
index 91115b714e62e97e4556fe9db21361e09e401a6f..d5acf167a47b9e9792a6fb3a7746057295104edf 100644 (file)
@@ -477,6 +477,14 @@ struct cbl_subtable_t {
 
 bool is_elementary( enum cbl_field_type_t type );
 
+/*  In cbl_field_t:
+ *  'offset' is overloaded for FldAlphanumeric/temporary/intermediate variables
+ *  For such variables, offset is a copy of the initial capacity.  This is in
+ *  support of the FUNCTION TRIM function, which both needs to be able to
+ *  reduce the capacity of the target variable, and then to reset it back to
+ *  the original value
+ */
+
 struct cbl_field_t {
   size_t offset;
   enum cbl_field_type_t type, usage;
index f990e0ff6984534ae894e72e8bd32984c47cdb3c..d935b899f9eeeb501e0e2e92e7b427e8d867922e 100644 (file)
@@ -42,7 +42,6 @@
 #include "common-defs.h"
 #include "io.h"
 #include "gcobolio.h"
-#include "libgcobol.h"
 #include "charmaps.h"
 #include "valconv.h"
 
index d2138770470a5d66a24ed4e6b0465c0e65a42c98..f9d9c56a0d8d60e829d6759b322019acaa97ae01 100644 (file)
@@ -41,7 +41,7 @@
 // takes 127 bits.  By using a maximum of 37, that gives us an additional digit
 // of headroom in order to accomplish rounding.
 
-// You should keep in mind that the _Float128 binary floating point numbers that
+// You should keep in mind that the 128-bit binary floating point numbers that
 // we use can reliably reproduce numbers of 33 decimal digits when going to
 // binary and back.
 
 
 // In the __gg__move_literala() call, we piggyback this bit onto the
 // cbl_round_t parameter, just to cut down on the number of parameters passed
+
 #define REFER_ALL_BIT 0x80
 
+// Other bits for handling MOVE ALL and so on.
+#define REFER_T_ALL_FLAGS_MASK 0x0FF  // We allow for seven subscripts
+#define REFER_T_MOVE_ALL       0x100  // This is the move_all flag
+#define REFER_T_ADDRESS_OF     0x200  // This is the address_of flag
+
+#define MIN_FIELD_BLOCK_SIZE (16)
+
+#define A_ZILLION (1000000) // Absurdly large number for __gg__call_parameter_count
+
+// These bits are used for the "call flags" of arithmetic operations
+#define ON_SIZE_ERROR 0x01
+#define REMAINDER_PRESENT 0x02
+
+#define MINIMUM_ALLOCATION_SIZE 16
 
 /*
  * User-defined names in IBM COBOL can have at most 30 characters.
@@ -495,6 +510,11 @@ T enabled_exception_match( T beg, T end, ec_type_t type, size_t file ) {
   return output;
 }
 
-
+enum substitute_flags_t
+  {
+  substitute_anycase_e  = 1,
+  substitute_first_e    = 2,  // first and last are mutually exclusive
+  substitute_last_e     = 4,
+  };
 
 #endif
index 3b4d68a730be32c12ffd7bdfebd79a3ca3c56f13..026f919cacc34424f1aed69b4112f6354ed18fe0 100644 (file)
 #include "io.h"
 #include "common-defs.h"
 #include "gcobolio.h"
-#include "libgcobol.h"
-#include "gfileio.h"
-#include "charmaps.h"
-
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/types.h>
 
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wwrite-strings"
@@ -113,8 +106,6 @@ struct cblc_field_t __gg___2_##a = {    \
   .dummy          = 0 ,                 \
   };
 
-
-
 unsigned char __gg__data_space[1] = {' '};
 struct cblc_field_t __gg__space = {
   .data           = __gg__data_space ,
index 1e3f7cfa7ea5145caf8daa20a36a59adae3b641c..69d973113d3872f19965274a71573329ed2dfc22 100644 (file)
@@ -210,4 +210,64 @@ enum ec_type_t {
 };
 
 
+// The following declarations are used by both gcc/cobol code and the libgcobol
+// code
+
+struct cblc_declarative_t
+    {
+    int format;
+    int culprit;  //declarative_culprit_t
+    int nfiles;
+    };
+
+/*  According to the standard, the first digit of the file operation status
+    register is interpreted like this:
+
+    EC-I-O-AT-END               '1'
+    EC-I-O-INVALID-KEY          '2'
+    EC-I-O-PERMANENT-ERROR      '3'
+    EC-I-O-LOGIC-ERROR          '4'
+    EC-I-O-RECORD-OPERATION     '5'
+    EC-I-O-FILE-SHARING         '6'
+    EC-I-O-IMP                  '9'
+
+When the tens digit is '0', there are a number of conditions for
+successful completion.  See section 9.1.12.1
+
+    00      unqualified success
+    02      duplicate key detected
+    04      the data read were either too short or too long
+    05      the operator couldn't find the tape
+    07      somebody tried to rewind the card reader.
+
+For now, I am going to treat the io_status as an integer 00 through 99.  I
+anticipate mostly returning
+    00 for ordinary success,
+    04 for a mismatched record size
+    10 for an end-of-file
+
+*/
+
+// This global variable is constantly being updated with the yylineno.  This is
+// useful for creating error messages, and for handling EXCEPTION_CONDITIONS
+extern int         __gg__exception_code;
+extern int         __gg__exception_line_number;
+extern int         __gg__exception_file_status;
+extern const char *__gg__exception_file_name;
+extern const char *__gg__exception_statement;
+extern const char *__gg__exception_source_file;
+extern const char *__gg__exception_program_id;
+extern const char *__gg__exception_section;
+extern const char *__gg__exception_paragraph;
+
+extern "C" void __gg__set_exception_code( ec_type_t ec,
+                                          int from_raise_statement=0);
+
+#if 1
+  static inline
+  void exception_raise(ec_type_t ec_code) { __gg__set_exception_code(ec_code); }
+#else
+# define exception_raise(ec_code)do{__gg__set_exception_code(ec_code);}while(0);
+#endif
+
 #endif
index 061f24f309de11cf7de9794fc2b98a1682266cd8..f1a26a269e945c07f1175eb3653a6031464ed741 100644 (file)
 #include <unordered_map>
 #include <vector>
 
+// RUNTIME structures *must* match the ones created in structs.c and initialized
+// and used in genapi.c.  It's actually not all that important to emphasize that
+// fact, since the compiled executable will crash and burn quickly if they don't
+// match precisely.
+
+// Note that it must match the same structure in the GDB-COBOL debugger
+
 typedef struct cblc_field_t
     {
     // This structure must match the code in structs.cc
@@ -76,6 +83,15 @@ enum cblc_file_prior_op_t
 
 /* end implementation details */
 
+enum cblc_file_flags_t
+    {
+    file_flag_none_e          = 0x00000,
+    file_flag_optional_e      = 0x00001,
+    file_flag_existed_e       = 0x00002,
+    file_name_quoted_e        = 0x00004,
+    file_flag_initialized_e   = 0x00008,
+    };
+
 typedef struct cblc_file_t
     {
     // This structure must match the code in structs.cc
@@ -111,4 +127,26 @@ typedef struct cblc_file_t
     int                  dummy;
     } cblc_file_t;
 
+
+/*  In various arithmetic routines implemented in libgcobol, it is oftent the
+    case that complicates lists of variables need to be conveyed.  For example,
+    "ADD A B C D GIVING E" and "ADD A TO B C D" are valid instructions.
+    
+    These treeplets (triplets of trees) were created to handle that.  */
+
+extern cblc_field_t ** __gg__treeplet_1f;
+extern size_t       *  __gg__treeplet_1o;
+extern size_t       *  __gg__treeplet_1s;
+extern cblc_field_t ** __gg__treeplet_2f;
+extern size_t       *  __gg__treeplet_2o;
+extern size_t       *  __gg__treeplet_2s;
+extern cblc_field_t ** __gg__treeplet_3f;
+extern size_t       *  __gg__treeplet_3o;
+extern size_t       *  __gg__treeplet_3s;
+extern cblc_field_t ** __gg__treeplet_4f;
+extern size_t       *  __gg__treeplet_4o;
+extern size_t       *  __gg__treeplet_4s;
+
+extern int *        __gg__fourplet_flags;
+
 #endif
index 9852dbf0f35c72e820b108c25a616746b3b3a68a..0216c7b8275dc2a62492498f1e4256f3b69c2041 100644 (file)
@@ -334,8 +334,8 @@ __gg__file_init(
     file->errnum              = 0 ;
     file->io_status           = FsSuccess ;
     file->delimiter           = internal_newline ;
-    file->flags               = 0;
-        file->flags          |= (optional ? file_flag_optional_e : 0)
+    file->flags               = file_flag_none_e;
+        file->flags          |= (optional ? file_flag_optional_e : file_flag_none_e)
                                 + file_flag_initialized_e;
     file->record_area_min     = record_area_min;
     file->record_area_max     = record_area_max;
@@ -4138,7 +4138,7 @@ __gg__file_reopen(cblc_file_t *file, int mode_char)
   random_access_mode = (    file->access == file_access_rnd_e
                               || file->access == file_access_dyn_e);
   the_file_exists = access(trimmed_name, F_OK) == 0;
-  file->flags |= the_file_exists ? file_flag_existed_e : 0 ;
+  file->flags |= the_file_exists ? file_flag_existed_e : file_flag_none_e ;
 
   // We have four operations: INPUT (r) OUTPUT (w) I-O (+) and EXTEND (a)
   // INPUT and I-O and EXTEND have different results based on is_optional
@@ -4351,7 +4351,7 @@ __io__file_open(cblc_file_t *file,
     // file close time.
     file->filename = filename;
     file->flags &= ~file_name_quoted_e;
-    file->flags |= is_quoted ? file_name_quoted_e : 0;
+    file->flags |= is_quoted ? file_name_quoted_e : file_flag_none_e;
 
     __gg__file_reopen(file, mode_char);
     }
index e70d84fc91ec4f22a283ec753fc144979f778e44..d525500dffecfb2ca61c2b00e84c405285419718 100644 (file)
 #ifndef GFILEIO_H_
 #define GFILEIO_H_
 
+// For indexed files, there can be one or more indexes, one per key.
+// Each index is one or more fields.
+
+struct file_hole_t
+  {
+  long location;
+  size_t size;
+  };
+
+struct file_index_t
+    {
+    std::multimap<std::vector<unsigned char>, long> key_to_position;
+    std::multimap<std::vector<unsigned char>, long>::iterator current_iterator;
+    std::multimap<std::vector<unsigned char>, long>::iterator ending_iterator;
+    };
+
+class supplemental_t
+  {
+  public:
+    std::vector<file_hole_t>  holes;
+    std::vector<file_index_t> indexes;
+    std::vector<int>          uniques;
+  };
+
 extern "C"
 {
 void __gg__handle_error(const char *function, const char *msg);
index 513f34ab2b95445917a394454017728cea460e87..1fc7abc931a4aea0eff440cb9d3318b44e4280b5 100644 (file)
 #ifndef LIBGCOBOL_H_
 #define LIBGCOBOL_H_
 
-#include <stdio.h>
+/*  Many of the routines declared here are called from the gcc/cobol code by
+    means of explicit GENERIC calls, which is why they are defined as external
+    "C".  Because there is no mechanism for checking the definitions, the caller
+    and callee have to agree on parameter types and the types of returned
+    values.
 
-#include <map>
-#include <vector>
-
-#define MIN_FIELD_BLOCK_SIZE (16)
-
-// RUNTIME structures *must* match the ones created in structs.c and initialized
-// and used in genapi.c.  It's actually not all that important to emphasize that
-// fact, since the compiled executable will crash and burn quickly if they don't
-// match precisely.
-
-// Note that it must match the same structure in the GDB-COBOL debugger
-
-#define A_ZILLION (1000000) // Absurdly large number for __gg__call_parameter_count
-
-// These bits are used for the "call flags" of arithmetic operations
-#define ON_SIZE_ERROR 0x01
-#define REMAINDER_PRESENT 0x02
-
-/*  'offset' is overloaded for FldAlphanumeric/temporary/intermediate variables
- *  For such variables, offset is a copy of the initial capacity.  This is in
- *  support of the FUNCTION TRIM function, which both needs to be able to
- *  reduce the capacity of the target variable, and then to reset it back to
- *  the original value
- */
-
-enum substitute_flags_t
-  {
-  substitute_anycase_e  = 1,
-  substitute_first_e    = 2,  // first and last are mutually exclusive
-  substitute_last_e     = 4,
-  };
-
-enum cblc_file_flags_t
-    {
-    file_flag_optional_e      = 0x00001,
-    file_flag_existed_e       = 0x00002,
-    file_name_quoted_e        = 0x00004,
-    file_flag_initialized_e   = 0x00008,
-    };
-
-// For indexed files, there can be one or more indexes, one per key.
-// Each index is one or more fields.
-
-struct file_hole_t
-  {
-  long location;
-  size_t size;
-  };
-
-struct file_index_t
-    {
-    std::multimap<std::vector<unsigned char>, long> key_to_position;
-    std::multimap<std::vector<unsigned char>, long>::iterator current_iterator;
-    std::multimap<std::vector<unsigned char>, long>::iterator ending_iterator;
-    };
-
-class supplemental_t
-  {
-  public:
-    std::vector<file_hole_t>  holes;
-    std::vector<file_index_t> indexes;
-    std::vector<int>          uniques;
-  };
-
-struct cblc_subscript_t
-    {
-    cblc_field_t *field;    // That's what it usually is:
-    unsigned int type;      // When type is FldLiteralN, field is a pointer to __int128
-    };
-
-#define REFER_T_ALL_FLAGS_MASK 0x0FF  // We allow for seven subscripts
-#define REFER_T_MOVE_ALL       0x100  // This is the move_all flag
-#define REFER_T_ADDRESS_OF     0x200  // This is the address_of flag
-
-struct cblc_declarative_t
-    {
-    int format;
-    int culprit;  //declarative_culprit_t
-    int nfiles;
-    };
-
-/*  According to the standard, the first digit of the file operation status
-    register is interpreted like this:
-
-    EC-I-O-AT-END               '1'
-    EC-I-O-INVALID-KEY          '2'
-    EC-I-O-PERMANENT-ERROR      '3'
-    EC-I-O-LOGIC-ERROR          '4'
-    EC-I-O-RECORD-OPERATION     '5'
-    EC-I-O-FILE-SHARING         '6'
-    EC-I-O-IMP                  '9'
-
-When the tens digit is '0', there are a number of conditions for
-successful completion.  See section 9.1.12.1
-
-    00      unqualified success
-    02      duplicate key detected
-    04      the data read were either too short or too long
-    05      the operator couldn't find the tape
-    07      somebody tried to rewind the card reader.
-
-For now, I am going to treat the io_status as an integer 00 through 99.  I
-anticipate mostly returning
-    00 for ordinary success,
-    04 for a mismatched record size
-    10 for an end-of-file
-
-*/
-
-// This global variable is constantly being updated with the yylineno.  This is
-// useful for creating error messages, and for handling EXCEPTION_CONDITIONS
-extern int         __gg__exception_code;
-extern int         __gg__exception_line_number;
-extern int         __gg__exception_file_status;
-extern const char *__gg__exception_file_name;
-extern const char *__gg__exception_statement;
-extern const char *__gg__exception_source_file;
-extern const char *__gg__exception_program_id;
-extern const char *__gg__exception_section;
-extern const char *__gg__exception_paragraph;
-
-extern "C" void __gg__set_exception_code( ec_type_t ec,
-                                          int from_raise_statement=0);
-
-extern int *        __gg__fourplet_flags;
-
-extern cblc_field_t ** __gg__treeplet_1f;
-extern size_t       *  __gg__treeplet_1o;
-extern size_t       *  __gg__treeplet_1s;
-extern cblc_field_t ** __gg__treeplet_2f;
-extern size_t       *  __gg__treeplet_2o;
-extern size_t       *  __gg__treeplet_2s;
-extern cblc_field_t ** __gg__treeplet_3f;
-extern size_t       *  __gg__treeplet_3o;
-extern size_t       *  __gg__treeplet_3s;
-extern cblc_field_t ** __gg__treeplet_4f;
-extern size_t       *  __gg__treeplet_4o;
-extern size_t       *  __gg__treeplet_4s;
-
-#if 1
-  static inline
-  void exception_raise(ec_type_t ec_code) { __gg__set_exception_code(ec_code); }
-#else
-# define exception_raise(ec_code)do{__gg__set_exception_code(ec_code);}while(0);
-#endif
+    Some are also called between source code modules in libgcobol, hence the
+    need here for declarations. */
 
 extern "C" __int128 __gg__power_of_ten(int n);
 
@@ -188,6 +49,7 @@ extern "C" __int128 __gg__dirty_to_binary_internal( const char *dirty,
                                                     int *rdigits);
 extern "C" __int128 __gg__binary_value_from_field(  int *rdigits,
                                                     cblc_field_t *var);
+
 extern "C" int __gg__compare_2( cblc_field_t *left_side,
                                 unsigned char   *left_location,
                                 size_t  left_length,
@@ -234,7 +96,7 @@ extern "C" void __gg__clock_gettime(clockid_t clk_id, struct timespec *tp);
 extern "C" _Float128 __gg__float128_from_location(cblc_field_t *var,
                                                   unsigned char *location);
 extern "C" void __gg__adjust_dest_size(cblc_field_t *dest, size_t ncount);
-#define MINIMUM_ALLOCATION_SIZE 16
+
 extern "C" void __gg__realloc_if_necessary( char **dest,
                                             size_t *dest_size,
                                             size_t new_size);
@@ -252,5 +114,4 @@ extern "C"  __int128 __gg__integer_from_qualified_field(cblc_field_t *var,
                                                         size_t var_size);
 void __gg__abort(const char *msg);
 
-
 #endif