$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r79672 - in trunk/tools/build/v2/engine: . modules
From: jurko.gospodnetic_at_[hidden]
Date: 2012-07-22 10:53:51
Author: jurko
Date: 2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
New Revision: 79672
URL: http://svn.boost.org/trac/boost/changeset/79672
Log:
Boost Jam cleanup - cleaned up some header includes, minor stylistic changes.
Added:
   trunk/tools/build/v2/engine/subst.h   (contents, props changed)
Text files modified: 
   trunk/tools/build/v2/engine/builtins.c      |     2                                         
   trunk/tools/build/v2/engine/compile.c       |     5 -                                       
   trunk/tools/build/v2/engine/compile.h       |    63 +++++++++-----------                    
   trunk/tools/build/v2/engine/hdrmacro.c      |    95 ++++++++++++++---------------           
   trunk/tools/build/v2/engine/hdrmacro.h      |     3                                         
   trunk/tools/build/v2/engine/headers.c       |   123 +++++++++++++++++---------------------- 
   trunk/tools/build/v2/engine/modules/regex.c |    11 +--                                     
   trunk/tools/build/v2/engine/subst.c         |    11 +--                                     
   8 files changed, 141 insertions(+), 172 deletions(-)
Modified: trunk/tools/build/v2/engine/builtins.c
==============================================================================
--- trunk/tools/build/v2/engine/builtins.c	(original)
+++ trunk/tools/build/v2/engine/builtins.c	2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
@@ -19,11 +19,11 @@
 #include "native.h"
 #include "object.h"
 #include "parse.h"
-#include "regexp.h"
 #include "rules.h"
 #include "pathsys.h"
 #include "pwd.h"
 #include "strings.h"
+#include "subst.h"
 #include "timestamp.h"
 #include "variable.h"
 
Modified: trunk/tools/build/v2/engine/compile.c
==============================================================================
--- trunk/tools/build/v2/engine/compile.c	(original)
+++ trunk/tools/build/v2/engine/compile.c	2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
@@ -45,10 +45,8 @@
 #include "constants.h"
 #include "hash.h"
 #include "hdrmacro.h"
-#include "lists.h"
 #include "make.h"
 #include "modules.h"
-#include "object.h"
 #include "parse.h"
 #include "rules.h"
 #include "search.h"
@@ -132,10 +130,9 @@
     if ( rule->actions )
     {
         TARGETS * t;
-        ACTION  * action;
 
         /* The action is associated with this instance of this rule. */
-        action = (ACTION *)BJAM_MALLOC( sizeof( ACTION ) );
+        ACTION * const action = (ACTION *)BJAM_MALLOC( sizeof( ACTION ) );
         memset( (char *)action, '\0', sizeof( *action ) );
 
         action->rule = rule;
Modified: trunk/tools/build/v2/engine/compile.h
==============================================================================
--- trunk/tools/build/v2/engine/compile.h	(original)
+++ trunk/tools/build/v2/engine/compile.h	2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
@@ -10,54 +10,49 @@
  *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
  */
 
-#ifndef COMPILE_DWA20011022_H
-# define COMPILE_DWA20011022_H
-
-# include "frames.h"
-# include "parse.h"
-# include "regexp.h"
-# include "object.h"
-
 /*
  * compile.h - compile parsed jam statements
  */
 
-void compile_builtins();
+#ifndef COMPILE_DWA20011022_H
+#define COMPILE_DWA20011022_H
+
+#include "frames.h"
+#include "lists.h"
+#include "object.h"
 
-LIST *evaluate_rule( OBJECT * rulename, FRAME * frame );
-LIST *call_rule( OBJECT * rulename, FRAME * caller_frame, ...);
+void compile_builtins();
 
-regexp* regex_compile( OBJECT * pattern );
+LIST * evaluate_rule( OBJECT * rulename, FRAME * );
+LIST * call_rule( OBJECT * rulename, FRAME * caller_frame, ... );
 
 /* Flags for compile_set(), etc */
 
-# define ASSIGN_SET 0x00    /* = assign variable */
-# define ASSIGN_APPEND  0x01    /* += append variable */
-# define ASSIGN_DEFAULT 0x02    /* set only if unset */
+#define ASSIGN_SET      0x00  /* = assign variable */
+#define ASSIGN_APPEND   0x01  /* += append variable */
+#define ASSIGN_DEFAULT  0x02  /* set only if unset */
 
 /* Flags for compile_setexec() */
 
-# define EXEC_UPDATED   0x01    /* executes updated */
-# define EXEC_TOGETHER  0x02    /* executes together */
-# define EXEC_IGNORE    0x04    /* executes ignore */
-# define EXEC_QUIETLY   0x08    /* executes quietly */
-# define EXEC_PIECEMEAL 0x10    /* executes piecemeal */
-# define EXEC_EXISTING  0x20    /* executes existing */
+#define EXEC_UPDATED    0x01  /* executes updated */
+#define EXEC_TOGETHER   0x02  /* executes together */
+#define EXEC_IGNORE     0x04  /* executes ignore */
+#define EXEC_QUIETLY    0x08  /* executes quietly */
+#define EXEC_PIECEMEAL  0x10  /* executes piecemeal */
+#define EXEC_EXISTING   0x20  /* executes existing */
 
 /* Conditions for compile_if() */
 
-# define EXPR_NOT   0   /* ! cond */
-# define EXPR_AND   1   /* cond && cond */
-# define EXPR_OR    2   /* cond || cond */
-
-# define EXPR_EXISTS    3   /* arg */
-# define EXPR_EQUALS    4   /* arg = arg */
-# define EXPR_NOTEQ 5   /* arg != arg */
-# define EXPR_LESS  6   /* arg < arg  */
-# define EXPR_LESSEQ    7   /* arg <= arg */
-# define EXPR_MORE  8   /* arg > arg  */
-# define EXPR_MOREEQ    9   /* arg >= arg */
-# define EXPR_IN    10  /* arg in arg */
+#define EXPR_NOT     0   /* ! cond */
+#define EXPR_AND     1   /* cond && cond */
+#define EXPR_OR      2   /* cond || cond */
+#define EXPR_EXISTS  3   /* arg */
+#define EXPR_EQUALS  4   /* arg = arg */
+#define EXPR_NOTEQ   5   /* arg != arg */
+#define EXPR_LESS    6   /* arg < arg  */
+#define EXPR_LESSEQ  7   /* arg <= arg */
+#define EXPR_MORE    8   /* arg > arg  */
+#define EXPR_MOREEQ  9   /* arg >= arg */
+#define EXPR_IN      10  /* arg in arg */
 
 #endif
-
Modified: trunk/tools/build/v2/engine/hdrmacro.c
==============================================================================
--- trunk/tools/build/v2/engine/hdrmacro.c	(original)
+++ trunk/tools/build/v2/engine/hdrmacro.c	2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
@@ -10,42 +10,37 @@
  *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
  */
 
-# include "jam.h"
-# include "lists.h"
-# include "parse.h"
-# include "compile.h"
-# include "rules.h"
-# include "variable.h"
-# include "regexp.h"
-# include "hdrmacro.h"
-# include "hash.h"
-# include "object.h"
-# include "strings.h"
-
 /*
- * hdrmacro.c - handle header files that define macros used in
- *              #include statements.
+ * hdrmacro.c - handle header files that define macros used in #include
+ *              statements.
  *
  *  we look for lines like "#define MACRO  <....>" or '#define MACRO  "    "'
- *  in the target file. When found, we
- *
- *  we then phony up a rule invocation like:
+ *  in the target file. When found, we then phony up a rule invocation like:
  *
  *  $(HDRRULE) <target> : <resolved included files> ;
  *
  * External routines:
- *    headers1() - scan a target for "#include MACRO" lines and try
- *                 to resolve them when needed
+ *    headers1() - scan a target for "#include MACRO" lines and try to resolve
+ *                 them when needed
  *
  * Internal routines:
  *    headers1() - using regexp, scan a file and build include LIST
- *
- * 04/13/94 (seiwald) - added shorthand L0 for null list pointer
- * 09/10/00 (seiwald) - replaced call to compile_rule with evaluate_rule,
- *      so that headers() doesn't have to mock up a parse structure
- *      just to invoke a rule.
  */
 
+#include "jam.h"
+#include "hdrmacro.h"
+
+#include "compile.h"
+#include "hash.h"
+#include "lists.h"
+#include "object.h"
+#include "parse.h"
+#include "rules.h"
+#include "strings.h"
+#include "subst.h"
+#include "variable.h"
+
+
 /* this type is used to store a dictionary of file header macros */
 typedef struct header_macro
 {
@@ -60,24 +55,24 @@
  * headers() - scan a target for include files and call HDRRULE
  */
 
-# define MAXINC 10
+#define MAXINC 10
 
-void
-macro_headers( TARGET * t )
+void macro_headers( TARGET * t )
 {
-    static regexp *re = 0;
-    FILE    *f;
-    char    buf[ 1024 ];
+    static regexp * re = 0;
+    FILE * f;
+    char buf[ 1024 ];
 
     if ( DEBUG_HEADER )
         printf( "macro header scan for %s\n", object_str( t->name ) );
 
-    /* this regexp is used to detect lines of the form       */
-    /* "#define  MACRO  <....>" or "#define  MACRO  "....."  */
-    /* in the header macro files..                           */
-    if ( re == 0 )
+    /* This regexp is used to detect lines of the form
+     * "#define  MACRO  <....>" or "#define  MACRO  "....."
+     * in the header macro files.
+     */
+    if ( !re )
     {
-        OBJECT * re_str = object_new(
+        OBJECT * const re_str = object_new(
             "^[     ]*#[    ]*define[   ]*([A-Za-z][A-Za-z0-9_]*)[  ]*"
             "[<\"]([^\">]*)[\">].*$" );
         re = regex_compile( re_str );
@@ -90,35 +85,36 @@
     while ( fgets( buf, sizeof( buf ), f ) )
     {
         HEADER_MACRO var;
-        HEADER_MACRO *v = &var;
+        HEADER_MACRO * v = &var;
 
-        if ( regexec( re, buf ) && re->startp[1] )
+        if ( regexec( re, buf ) && re->startp[ 1 ] )
         {
             OBJECT * symbol;
             int found;
             /* we detected a line that looks like "#define  MACRO  filename */
-            ((char *)re->endp[1])[0] = '\0';
-            ((char *)re->endp[2])[0] = '\0';
+            ( (char *)re->endp[ 1 ] )[ 0 ] = '\0';
+            ( (char *)re->endp[ 2 ] )[ 0 ] = '\0';
 
             if ( DEBUG_HEADER )
                 printf( "macro '%s' used to define filename '%s' in '%s'\n",
-                        re->startp[1], re->startp[2], object_str( t->boundname ) );
+                    re->startp[ 1 ], re->startp[ 2 ], object_str( t->boundname )
+                    );
 
             /* add macro definition to hash table */
             if ( !header_macros_hash )
-                header_macros_hash = hashinit( sizeof( HEADER_MACRO ), "hdrmacros" );
+                header_macros_hash = hashinit( sizeof( HEADER_MACRO ),
+                    "hdrmacros" );
 
-            symbol = object_new( re->startp[1] );
-            v = (HEADER_MACRO *)hash_insert( header_macros_hash, symbol, &found );
+            symbol = object_new( re->startp[ 1 ] );
+            v = (HEADER_MACRO *)hash_insert( header_macros_hash, symbol, &found
+                );
             if ( !found )
             {
                 v->symbol = symbol;
-                v->filename = object_new( re->startp[2] );  /* never freed */
+                v->filename = object_new( re->startp[ 2 ] );  /* never freed */
             }
             else
-            {
                 object_free( symbol );
-            }
             /* XXXX: FOR NOW, WE IGNORE MULTIPLE MACRO DEFINITIONS !! */
             /*       WE MIGHT AS WELL USE A LIST TO STORE THEM..      */
         }
@@ -131,11 +127,12 @@
 OBJECT * macro_header_get( OBJECT * macro_name )
 {
     HEADER_MACRO * v;
-
-    if ( header_macros_hash && ( v = (HEADER_MACRO *)hash_find( header_macros_hash, macro_name ) ) )
+    if ( header_macros_hash && ( v = (HEADER_MACRO *)hash_find(
+        header_macros_hash, macro_name ) ) )
     {
         if ( DEBUG_HEADER )
-            printf( "### macro '%s' evaluated to '%s'\n", object_str( macro_name ), object_str( v->filename ) );
+            printf( "### macro '%s' evaluated to '%s'\n", object_str( macro_name
+                ), object_str( v->filename ) );
         return v->filename;
     }
     return 0;
Modified: trunk/tools/build/v2/engine/hdrmacro.h
==============================================================================
--- trunk/tools/build/v2/engine/hdrmacro.h	(original)
+++ trunk/tools/build/v2/engine/hdrmacro.h	2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
@@ -15,8 +15,7 @@
 #include "object.h"
 #include "rules.h"
 
-void macro_headers( TARGET * t );
-
+void macro_headers( TARGET * );
 OBJECT * macro_header_get( OBJECT * macro_name );
 
 #endif
Modified: trunk/tools/build/v2/engine/headers.c
==============================================================================
--- trunk/tools/build/v2/engine/headers.c	(original)
+++ trunk/tools/build/v2/engine/headers.c	2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
@@ -9,64 +9,59 @@
  *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
  */
 
-# include "jam.h"
-# include "lists.h"
-# include "parse.h"
-# include "compile.h"
-# include "rules.h"
-# include "modules.h"
-# include "variable.h"
-# include "regexp.h"
-# include "headers.h"
-# include "hdrmacro.h"
-# include "object.h"
-
-#ifdef OPT_HEADER_CACHE_EXT
-# include "hcache.h"
-#endif
-
 /*
  * headers.c - handle #includes in source files
  *
- * Using regular expressions provided as the variable $(HDRSCAN),
- * headers() searches a file for #include files and phonies up a
- * rule invocation:
- *
- *  $(HDRRULE) <target> : <include files> ;
+ * Using regular expressions provided as the variable $(HDRSCAN), headers()
+ * searches a file for #include files and phonies up a rule invocation:
+ *    $(HDRRULE) <target> : <include files> ;
  *
  * External routines:
  *    headers() - scan a target for include files and call HDRRULE
  *
  * Internal routines:
  *    headers1() - using regexp, scan a file and build include LIST
- *
- * 04/13/94 (seiwald) - added shorthand L0 for null list pointer
- * 09/10/00 (seiwald) - replaced call to compile_rule with evaluate_rule,
- *      so that headers() doesn't have to mock up a parse structure
- *      just to invoke a rule.
  */
 
+#include "jam.h"
+#include "headers.h"
+
+#include "compile.h"
+#include "hdrmacro.h"
+#include "lists.h"
+#include "modules.h"
+#include "object.h"
+#include "parse.h"
+#include "rules.h"
+#include "subst.h"
+#include "variable.h"
+
+#ifdef OPT_HEADER_CACHE_EXT
+# include "hcache.h"
+#endif
+
 #ifndef OPT_HEADER_CACHE_EXT
-static LIST * headers1( LIST * l, OBJECT * file, int rec, regexp * re[]);
+static LIST * headers1( LIST *, OBJECT * file, int rec, regexp * re[] );
 #endif
 
+
 /*
  * headers() - scan a target for include files and call HDRRULE
  */
 
-# define MAXINC 10
+#define MAXINC 10
 
-void
-headers( TARGET * t )
+void headers( TARGET * t )
 {
     LIST   * hdrscan;
     LIST   * hdrrule;
-	#ifndef OPT_HEADER_CACHE_EXT
+    #ifndef OPT_HEADER_CACHE_EXT
     LIST   * headlist = L0;
-	#endif
+    #endif
     regexp * re[ MAXINC ];
     int rec = 0;
-    LISTITER iter, end;
+    LISTITER iter;
+    LISTITER end;
 
     hdrscan = var_get( root_module(), constant_HDRSCAN );
     if ( list_empty( hdrscan ) )
@@ -80,7 +75,8 @@
         printf( "header scan %s\n", object_str( t->name ) );
 
     /* Compile all regular expressions in HDRSCAN */
-    iter = list_begin( hdrscan ), end = list_end( hdrscan );
+    iter = list_begin( hdrscan );
+    end = list_end( hdrscan );
     for ( ; ( rec < MAXINC ) && iter != end; iter = list_next( iter ) )
     {
         re[ rec++ ] = regex_compile( list_item( iter ) );
@@ -89,7 +85,7 @@
     /* Doctor up call to HDRRULE rule */
     /* Call headers1() to get LIST of included files. */
     {
-        FRAME   frame[1];
+        FRAME frame[ 1 ];
         frame_init( frame );
         lol_add( frame->args, list_new( object_copy( t->name ) ) );
 #ifdef OPT_HEADER_CACHE_EXT
@@ -100,10 +96,8 @@
 
         if ( lol_get( frame->args, 1 ) )
         {
-            /* The third argument to HDRRULE is the bound name of
-             * $(<) */
+            /* The third argument to HDRRULE is the bound name of $(<). */
             lol_add( frame->args, list_new( object_copy( t->boundname ) ) );
-
             list_free( evaluate_rule( list_front( hdrrule ), frame ) );
         }
 
@@ -117,37 +111,32 @@
  * headers1() - using regexp, scan a file and build include LIST.
  */
 
-#ifdef OPT_HEADER_CACHE_EXT
-LIST *
-#else
-static LIST *
+#ifndef OPT_HEADER_CACHE_EXT
+static
 #endif
-headers1(
-    LIST    * l,
-    OBJECT  * file,
-    int rec,
-    regexp  * re[] )
+LIST * headers1( LIST * l, OBJECT * file, int rec, regexp * re[] )
 {
     FILE * f;
     char buf[ 1024 ];
-    int  i;
+    int i;
     static regexp * re_macros = 0;
 
 #ifdef OPT_IMPROVED_PATIENCE_EXT
     static int count = 0;
     ++count;
-    if ( ((count == 100) || !( count % 1000 )) && DEBUG_MAKE )
+    if ( ( ( count == 100 ) || !( count % 1000 ) ) && DEBUG_MAKE )
     {
-        printf("...patience...\n");
-        fflush(stdout);
+        printf( "...patience...\n" );
+        fflush( stdout );
     }
 #endif
 
-    /* the following regexp is used to detect cases where a  */
-    /* file is included through a line line "#include MACRO" */
+    /* The following regexp is used to detect cases where a file is included
+     * through a line line "#include MACRO".
+     */
     if ( re_macros == 0 )
     {
-        OBJECT * re_str = object_new(
+        OBJECT * const re_str = object_new(
             "^[     ]*#[    ]*include[  ]*([A-Za-z][A-Za-z0-9_]*).*$" );
         re_macros = regex_compile( re_str );
         object_free( re_str );
@@ -169,34 +158,33 @@
         }
 
         for ( i = 0; i < rec; ++i )
-            if ( regexec( re[i], buf ) && re[i]->startp[1] )
+            if ( regexec( re[ i ], buf ) && re[ i ]->startp[ 1 ] )
             {
-                ((char *)re[i]->endp[1])[0] = '\0';
-
+                ( (char *)re[ i ]->endp[ 1 ] )[ 0 ] = '\0';
                 if ( DEBUG_HEADER )
-                    printf( "header found: %s\n", re[i]->startp[1] );
-
-                l = list_push_back( l, object_new( re[i]->startp[1] ) );
+                    printf( "header found: %s\n", re[ i ]->startp[ 1 ] );
+                l = list_push_back( l, object_new( re[ i ]->startp[ 1 ] ) );
             }
 
         /* special treatment for #include MACRO */
-        if ( regexec( re_macros, buf ) && re_macros->startp[1] )
+        if ( regexec( re_macros, buf ) && re_macros->startp[ 1 ] )
         {
-            OBJECT *  header_filename;
+            OBJECT * header_filename;
             OBJECT * macro_name;
 
-            ((char *)re_macros->endp[1])[0] = '\0';
+            ( (char *)re_macros->endp[ 1 ] )[ 0 ] = '\0';
 
             if ( DEBUG_HEADER )
-                printf( "macro header found: %s", re_macros->startp[1] );
+                printf( "macro header found: %s", re_macros->startp[ 1 ] );
 
-            macro_name = object_new( re_macros->startp[1] );
+            macro_name = object_new( re_macros->startp[ 1 ] );
             header_filename = macro_header_get( macro_name );
             object_free( macro_name );
             if ( header_filename )
             {
                 if ( DEBUG_HEADER )
-                    printf( " resolved to '%s'\n", object_str( header_filename ) );
+                    printf( " resolved to '%s'\n", object_str( header_filename )
+                        );
                 l = list_push_back( l, object_copy( header_filename ) );
             }
             else
@@ -208,12 +196,11 @@
     }
 
     fclose( f );
-
     return l;
 }
 
 
-void regerror( const char * s )
+void regerror( char const * s )
 {
     printf( "re error %s\n", s );
 }
Modified: trunk/tools/build/v2/engine/modules/regex.c
==============================================================================
--- trunk/tools/build/v2/engine/modules/regex.c	(original)
+++ trunk/tools/build/v2/engine/modules/regex.c	2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
@@ -2,12 +2,10 @@
 /* Software License, Version 1.0. (See accompanying */
 /* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */
 
-#include "../compile.h"
 #include "../mem.h"
 #include "../native.h"
-#include "../object.h"
-#include "../regexp.h"
 #include "../strings.h"
+#include "../subst.h"
 
 
 /*
@@ -35,7 +33,7 @@
     int * indices = 0;
     int size;
     int * p;
-    LIST* result = L0;
+    LIST * result = L0;
 
     string buf[ 1 ];
     string_new( buf );
@@ -58,7 +56,7 @@
 
     {
         /* Result is cached and intentionally never freed */
-        regexp * re = regex_compile( list_front( pattern ) );
+        regexp * const re = regex_compile( list_front( pattern ) );
 
         LISTITER iter = list_begin( l );
         LISTITER const end = list_end( l );
@@ -69,7 +67,7 @@
                 int i = 0;
                 for ( ; i < size; ++i )
                 {
-                    int index = indices[ i ];
+                    int const index = indices[ i ];
                     /* Skip empty submatches. Not sure it is right in all cases,
                      * but surely is right for the case for which this routine
                      * is optimized -- header scanning.
@@ -89,7 +87,6 @@
     }
 
     BJAM_FREE( indices );
-
     return result;
 }
 
Modified: trunk/tools/build/v2/engine/subst.c
==============================================================================
--- trunk/tools/build/v2/engine/subst.c	(original)
+++ trunk/tools/build/v2/engine/subst.c	2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
@@ -1,22 +1,19 @@
 #include "jam.h"
+#include "subst.h"
 
 #include "builtins.h"
-#include "compile.h"
 #include "frames.h"
 #include "hash.h"
 #include "lists.h"
-#include "object.h"
-#include "regexp.h"
 
 #include <stddef.h>
 
 
-struct regex_entry
+typedef struct regex_entry
 {
     OBJECT * pattern;
     regexp * regex;
-};
-typedef struct regex_entry regex_entry;
+} regex_entry;
 
 static struct hash * regex_hash;
 
@@ -103,7 +100,7 @@
 
 static void free_regex( void * xregex, void * data )
 {
-    regex_entry * regex = (regex_entry *)xregex;
+    regex_entry * const regex = (regex_entry *)xregex;
     object_free( regex->pattern );
     BJAM_FREE( regex->regex );
 }
Added: trunk/tools/build/v2/engine/subst.h
==============================================================================
--- (empty file)
+++ trunk/tools/build/v2/engine/subst.h	2012-07-22 10:53:50 EDT (Sun, 22 Jul 2012)
@@ -0,0 +1,14 @@
+/*  Copyright 2001-2004 David Abrahams.
+ *  Distributed under the Boost Software License, Version 1.0.
+ *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef SUBST_JG20120722_H
+#define SUBST_JG20120722_H
+
+#include "object.h"
+#include "regexp.h"
+
+regexp * regex_compile( OBJECT * pattern );
+
+#endif