I've updated my last patch and split it into three pieces.  It's all 
fairly trivial.  First, some simple POD fixups to core.ops.  Second,
a few minor code tweaks to silence a few compiler or lint warnings.
Third, a change to the makefile to turn on -Wall and (optionally)
-pedantic for gcc users.

Here they are (attached):

-- 
Josh Wilmes  ([EMAIL PROTECTED]) | http://www.hitchhiker.org


Index: Configure.pl
===================================================================
RCS file: /home/perlcvs/parrot/Configure.pl,v
retrieving revision 1.44
diff -u -r1.44 Configure.pl
--- Configure.pl	26 Dec 2001 05:12:25 -0000	1.44
+++ Configure.pl	30 Dec 2001 07:36:34 -0000
@@ -9,7 +9,7 @@
 use ExtUtils::Manifest qw(manicheck);
 use File::Copy;
 
-my($opt_debugging, $opt_defaults, $opt_version, $opt_help) = (0, 0, 0, 0);
+my($opt_debugging, $opt_defaults, $opt_version, $opt_help, $opt_pedantic) = (0, 0, 0, 0, 0);
 my(%opt_defines);
 my $result = GetOptions(
 	'debugging!' => \$opt_debugging,
@@ -17,6 +17,7 @@
 	'version'    => \$opt_version,
 	'help'       => \$opt_help,
 	'define=s'   => \%opt_defines,
+	'pedantic!'  => \$opt_pedantic,
 );
 
 if($opt_version) {
@@ -29,6 +30,7 @@
 $0 - Parrot Configure
 Options:
    --debugging          Enable debugging
+   --pedantic           Add "-ansi -pedantic" if using gcc
    --defaults           Accept all default values
    --define name=value  Defines value name as value
    --help               This text
@@ -93,9 +95,11 @@
 
 	cc =>			$Config{cc},
 	#ADD C COMPILER FLAGS HERE
+        cc_inc  =>              "-I./include",
 	ccflags =>		$Config{ccflags},
 	libs =>			$Config{libs},
 	cc_debug =>		'-g',
+	cc_warn =>		'',
 	o =>			'.o',		# object files extension
 	exe =>			$Config{_exe},
 
@@ -129,6 +133,15 @@
 	cp =>		'cp',
 	slash =>	'/',
 );
+
+
+# If using gcc, crank up its warnings as much as possible and make it behave
+# ansi-ish.
+if ($Config{ccname} eq "gcc") {
+   $c{cc_warn} = " -Wall";
+   $c{cc_warn} .= " -ansi -pedantic" if $opt_pedantic;
+}
+
 
 #copy the things from --define foo=bar
 @c{keys %opt_defines}=values %opt_defines;
Index: Makefile.in
===================================================================
RCS file: /home/perlcvs/parrot/Makefile.in,v
retrieving revision 1.85
diff -u -r1.85 Makefile.in
--- Makefile.in	27 Dec 2001 23:57:58 -0000	1.85
+++ Makefile.in	30 Dec 2001 07:36:34 -0000
@@ -24,7 +24,7 @@
 #DO NOT ADD C COMPILER FLAGS HERE
 #Add them in Configure.pl--look for the
 #comment 'ADD C COMPILER FLAGS HERE'
-CFLAGS = ${ccflags} ${cc_debug} -I./include
+CFLAGS = ${ccflags} ${cc_warn} ${cc_debug} ${cc_inc}
 
 C_LIBS = ${libs}
 
@@ -33,6 +33,8 @@
 PERL = ${perl}
 TEST_PROG = ${test_prog}
 PDUMP = pdump${exe}
+LINT = lclint
+LINTFLAGS = +showscan +posixlib -weak +longintegral +matchanyintegral -formattype
 # This is set to  MAKE=$make if your $make command doesn't
 # do it for you.
 ${make_set_make}
@@ -191,3 +193,6 @@
 update:
 	cvs -q update -dP
 
+lint: ${test_prog}
+	$(LINT) ${cc_inc} -Iclasses $(LINTFLAGS) `echo $(O_FILES) | sed 's/\.o/\.c/g'`
+	$(LINT) ${cc_inc} $(LINTFLAGS) test_main.c
Index: packfile.c
===================================================================
RCS file: /home/perlcvs/parrot/packfile.c,v
retrieving revision 1.16
diff -u -r1.16 packfile.c
--- packfile.c	6 Dec 2001 21:22:13 -0000	1.16
+++ packfile.c	30 Dec 2001 07:36:37 -0000
@@ -333,7 +333,7 @@
 
     if (segment_size % sizeof(opcode_t)) {
         fprintf(stderr, "PackFile_unpack: Illegal fixup table segment size %d (must be multiple of %d)!\n",
-            segment_size, sizeof(opcode_t));
+            (int)segment_size, sizeof(opcode_t));
         return 0;
     }
 
@@ -358,7 +358,7 @@
 
     if (segment_size % sizeof(opcode_t)) {
         fprintf(stderr, "PackFile_unpack: Illegal constant table segment size %d (must be multiple of %d)!\n",
-            segment_size, sizeof(opcode_t));
+            (int)segment_size, sizeof(opcode_t));
         return 0;
     }
 
@@ -1718,7 +1718,8 @@
                     (long) self->string->bufused);
             /* TODO: Won't do anything reasonable for most encodings */
             printf("        DATA     => '%.*s'\n",
-                    self->string->bufused, (char *) self->string->bufstart);
+                   (int)self->string->bufused,
+                   (char *) self->string->bufstart);
             printf("    } ],\n");
             break;
 
Index: pdump.c
===================================================================
RCS file: /home/perlcvs/parrot/pdump.c,v
retrieving revision 1.6
diff -u -r1.6 pdump.c
--- pdump.c	6 Dec 2001 17:48:58 -0000	1.6
+++ pdump.c	30 Dec 2001 07:36:37 -0000
@@ -62,7 +62,10 @@
 
     pf = PackFile_new();
 
-    PackFile_unpack(interpreter, pf, packed, packed_size);
+    if (!PackFile_unpack(interpreter, pf, packed, packed_size)) {
+        printf( "Can't unpack.\n" );
+        return 1;
+    }
     PackFile_dump(pf);
     PackFile_DELETE(pf);
 
Index: register.c
===================================================================
RCS file: /home/perlcvs/parrot/register.c,v
retrieving revision 1.13
diff -u -r1.13 register.c
--- register.c	29 Dec 2001 22:12:37 -0000	1.13
+++ register.c	30 Dec 2001 07:36:37 -0000
@@ -314,7 +314,7 @@
 Parrot_clear_n(struct Parrot_Interp *interpreter) {
     int i;
     for (i=0; i<NUM_REGISTERS; i++) {
-        interpreter->num_reg->registers[i] = 0;
+        interpreter->num_reg->registers[i] = 0.0;
     }
 }
 
Index: string.c
===================================================================
RCS file: /home/perlcvs/parrot/string.c,v
retrieving revision 1.27
diff -u -r1.27 string.c
--- string.c	29 Dec 2001 22:12:37 -0000	1.27
+++ string.c	30 Dec 2001 07:36:38 -0000
@@ -48,7 +48,7 @@
     s->encoding = encoding;
     s->buflen = s->bufused = buflen;
     s->flags = flags;
-    string_compute_strlen(s);
+    (void)string_compute_strlen(s);
     s->type = type;
 
     return s;
Index: include/parrot/key.h
===================================================================
RCS file: /home/perlcvs/parrot/include/parrot/key.h,v
retrieving revision 1.2
diff -u -r1.2 key.h
--- include/parrot/key.h	12 Dec 2001 02:12:15 -0000	1.2
+++ include/parrot/key.h	30 Dec 2001 07:36:38 -0000
@@ -46,6 +46,7 @@
 INTVAL key_size(struct Parrot_Interp *interpreter, KEY *key);
 void key_set_size(struct Parrot_Interp *interpreter, KEY *key, INTVAL size);
 void key_destroy(struct Parrot_Interp *interpreter, KEY *key);
+INTVAL key_element_type(struct Parrot_Interp *interpreter, KEY* key, INTVAL index);
 KEY_PAIR* key_element_value_i(struct Parrot_Interp *interpreter, KEY *key, INTVAL index);
 KEY_PAIR* key_element_value_s(struct Parrot_Interp *interpreter, KEY *key, STRING* index);
 void key_set_element_value_i(struct Parrot_Interp *interpreter, KEY *key, INTVAL index, KEY_PAIR* value);
Index: include/parrot/trace.h
===================================================================
RCS file: /home/perlcvs/parrot/include/parrot/trace.h,v
retrieving revision 1.2
diff -u -r1.2 trace.h
--- include/parrot/trace.h	13 Dec 2001 16:21:55 -0000	1.2
+++ include/parrot/trace.h	30 Dec 2001 07:36:38 -0000
@@ -19,6 +19,9 @@
 trace_op_dump(struct Parrot_Interp *interpreter, opcode_t *code_start, opcode_t *pc);
 
 void
+trace_op(struct Parrot_Interp *interpreter, opcode_t * code_start, opcode_t * code_end, opcode_t *pc);
+
+void
 trace_op_b0(struct Parrot_Interp *interpreter, opcode_t * code_start, opcode_t *pc);
 
 void
Index: platforms/generic.c
===================================================================
RCS file: /home/perlcvs/parrot/platforms/generic.c,v
retrieving revision 1.3
diff -u -r1.3 generic.c
--- platforms/generic.c	27 Dec 2001 17:08:48 -0000	1.3
+++ platforms/generic.c	30 Dec 2001 07:36:38 -0000
@@ -2,6 +2,7 @@
 ** platform.c [generic version]
 */
 
+#include <time.h>
 #include <sys/time.h>
 #include <dlfcn.h>
 
Index: core.ops
===================================================================
RCS file: /home/perlcvs/parrot/core.ops,v
retrieving revision 1.60
diff -u -r1.60 core.ops
--- core.ops	28 Dec 2001 21:20:19 -0000	1.60
+++ core.ops	30 Dec 2001 07:36:35 -0000
@@ -73,7 +73,7 @@
 
 ########################################
 
-=item close(i|ic)
+=item B<close>(i|ic)
 
 Close file opened on file descriptor $1.
 
@@ -87,11 +87,11 @@
 
 ########################################
 
-=item err(i)
+=item B<err>(i)
 
 Store the system error code in $1.
 
-=item err(s)
+=item B<err>(s)
 
 Store the system error message in $1.
 
@@ -329,15 +329,15 @@
 
 ########################################
 
-=item read(i, i|ic)
+=item B<read>(i, i|ic)
 
 Read an INTVAL from file descriptor $2 into $1.
 
-=item read(n, i|ic)
+=item B<read>(n, i|ic)
 
 Read a FLOATVAL from file descriptor $2 into $1.
 
-=item read(s, i|ic, i|ic)
+=item B<read>(s, i|ic, i|ic)
 
 Read $3 bytes from file descriptor $2 into string $1.
 
@@ -400,11 +400,11 @@
 
 ########################################
 
-=item write(i|ic, i|ic)
+=item B<write>(i|ic, i|ic)
 
-=item write(i|ic, n|nc)
+=item B<write>(i|ic, n|nc)
 
-=item write(i|ic, s|sc)
+=item B<write>(i|ic, s|sc)
 
 Write $2 to file descriptor $1.
 
@@ -1065,6 +1065,7 @@
 =over 4
 
 =cut
+
 ########################################
 
 =item B<abs>(i|n, i|ic|n|nc)
@@ -1130,22 +1131,23 @@
 NOTE: This "uncorrected mod" algorithm uses the C language's built-in
 mod operator (x % y), which is
 
-    ... the remainder when x is divided by y, and thus is zero when y
-    divides x exactly.
+    ... the remainder when x is divided by y, and thus is zero
+    when y divides x exactly.
     ...
-    The direction of truncation for / and the sign of the result for %
-    are machine-dependent for negative operands, as is the action taken
-    on overflow or underflow.
-                                                         -- [1], page 41
+    The direction of truncation for / and the sign of the result
+    for % are machine-dependent for negative operands, as is the
+    action taken on overflow or underflow.
+                                                     -- [1], page 41
 
 Also:
 
-    ... if the second operand is 0, the result is undefined. Otherwise, it
-    is always true that (a/b)*b + a%b is equal to z. If both operands are
-    non-negative, then the remainder is non-negative and smaller than the
-    divisor; if not, it is guaranteed only that the absolute value of the
-    remainder is smaller than the absolute value of the divisor.
-                                                         -- [1], page 205
+    ... if the second operand is 0, the result is undefined. 
+    Otherwise, it is always true that (a/b)*b + a%b is equal to z. If
+    both operands are non-negative, then the remainder is non-
+    negative and smaller than the divisor; if not, it is guaranteed
+    only that the absolute value of the remainder is smaller than
+    the absolute value of the divisor.
+                                                     -- [1], page 205
 
 This op is provided for those who need it (such as speed-sensitive
 applications with heavy use of mod, but using it only with positive
@@ -1176,15 +1178,15 @@
 NOTE: This "uncorrected mod" algorithm uses the built-in C math library's
 fmod() function, which computes
 
-    ... the remainder of dividing x by y. The return value is x - n * y,
-    where n is the quotient of x / y, rounded towards zero to an
-    integer.
-                                    -- fmod() manpage on RedHat Linux 7.0
+    ... the remainder of dividing x by y. The return value is
+    x - n * y, where n is the quotient of x / y, rounded towards
+    zero to an integer.
+                                -- fmod() manpage on RedHat Linux 7.0
 
 In addition, fmod() returns
 
-    the remainder, unless y is zero, when the function fails and errno
-    is set.
+    the remainder, unless y is zero, when the function fails and
+    errno is set.
 
 According to page 251 of [1], the result when y is zero is implementation-
 defined.
@@ -1497,6 +1499,8 @@
 
 These operations operate on STRINGs.
 
+=over 4
+
 =cut
 
 
@@ -2354,6 +2358,23 @@
 }
 
 
+########################################
+
+=item B<rotate_up>(i)
+
+=item B<rotate_up>(ic)
+
+Rotate the top $1 entries in the user stack so that the top entry
+becomes the bottom entry in that range.
+
+=cut
+
+inline op rotate_up(i|ic) {
+  rotate_entries(interpreter, interpreter->user_stack_base, interpreter->user_stack_top, $1);
+  goto NEXT();
+}
+
+
 =back
 
 =cut
@@ -2367,6 +2388,7 @@
 
 =over 4
 
+=cut
 
 ########################################
 
@@ -2422,6 +2444,20 @@
   goto OFFSET($1);
 }
 
+=back
+
+=cut
+
+###############################################################################
+
+=head2 Miscellaneous
+
+Opcodes which need to be sorted into better categories.
+
+=over 4
+
+=cut
+
 ########################################
 
 =item B<newinterp>(p, i|ic)
@@ -2492,27 +2528,6 @@
 
 ########################################
 
-=item B<rotate_up>(i)
-
-=item B<rotate_up>(ic)
-
-Rotate the top $1 entries in the user stack so that the top entry
-becomes the bottom entry in that range.
-
-=cut
-
-inline op rotate_up(i|ic) {
-  rotate_entries(interpreter, interpreter->user_stack_base, interpreter->user_stack_top, $1);
-  goto NEXT();
-}
-
-
-=back
-
-=cut
-
-########################################
-
 =item B<sleep>(i)
 
 =item B<sleep>(ic)
@@ -2596,6 +2611,10 @@
   $1 = interpreter->current_package;
   goto NEXT();
 }
+
+=back
+
+=cut
 
 ###############################################################################
 

Reply via email to