[svn:parrot] r44649 - in trunk: . compilers/imcc compilers/pirc/src config/auto config/auto/warnings config/gen config/gen/makefiles config/init config/init/hints config/inter lib/Parrot/Configure lib/Parrot/Configure/Step lib/Parrot/Docs lib/Parrot/Docs/Section src src/call src/dynpmc src/gc src/pmc src/runcore src/string t/configure t/steps/auto t/steps/gen tools/build

tene at svn.parrot.org tene at svn.parrot.org
Fri Mar 5 16:20:10 UTC 2010


Author: tene
Date: Fri Mar  5 16:20:00 2010
New Revision: 44649
URL: https://trac.parrot.org/parrot/changeset/44649

Log:
Merge branch 'rm_cflags'

Added:
   trunk/compilers/imcc/Rules.in
      - copied, changed from r44637, trunk/compilers/imcc/Rules.mak
Deleted:
   trunk/compilers/imcc/Rules.mak
   trunk/config/gen/makefiles/CFLAGS.in
   trunk/tools/build/cc_flags.pl
Modified:
   trunk/MANIFEST
   trunk/MANIFEST.SKIP
   trunk/compilers/imcc/imcc.l
   trunk/compilers/imcc/imcc.y
   trunk/compilers/imcc/imclexer.c
   trunk/compilers/imcc/imcparser.c
   trunk/compilers/imcc/instructions.c
   trunk/compilers/imcc/instructions.h
   trunk/compilers/imcc/main.c
   trunk/compilers/imcc/pbc.c
   trunk/compilers/imcc/pbc.h
   trunk/compilers/imcc/reg_alloc.c
   trunk/compilers/imcc/symreg.c
   trunk/compilers/pirc/src/pircapi.c
   trunk/config/auto/cgoto.pm
   trunk/config/auto/gcc.pm
   trunk/config/auto/icu.pm
   trunk/config/auto/perldoc.pm
   trunk/config/auto/pmc.pm
   trunk/config/auto/warnings.pm
   trunk/config/auto/warnings/test_c.in
   trunk/config/gen/makefiles.pm
   trunk/config/gen/makefiles/dynoplibs.in
   trunk/config/gen/makefiles/dynpmc.in
   trunk/config/gen/makefiles/root.in
   trunk/config/init/hints/darwin.pm
   trunk/config/init/hints/mswin32.pm
   trunk/config/init/optimize.pm
   trunk/config/inter/charset.pm
   trunk/config/inter/encoding.pm
   trunk/config/inter/libparrot.pm
   trunk/lib/Parrot/Configure/Compiler.pm
   trunk/lib/Parrot/Configure/Step/List.pm
   trunk/lib/Parrot/Docs/File.pm
   trunk/lib/Parrot/Docs/Section/Tools.pm
   trunk/src/call/args.c
   trunk/src/debug.c
   trunk/src/dynpmc/rational.pmc
   trunk/src/embed.c
   trunk/src/frame_builder.c
   trunk/src/gc/mark_sweep.c
   trunk/src/multidispatch.c
   trunk/src/packfile.c
   trunk/src/parrot_debugger.c
   trunk/src/pbc_merge.c
   trunk/src/pmc.c
   trunk/src/pmc/callcontext.pmc
   trunk/src/pmc/null.pmc
   trunk/src/pmc/orderedhash.pmc
   trunk/src/runcore/main.c
   trunk/src/string/api.c
   trunk/t/configure/034-step.t
   trunk/t/steps/auto/cgoto-01.t
   trunk/t/steps/auto/warnings-01.t
   trunk/t/steps/gen/makefiles-01.t

Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/MANIFEST	Fri Mar  5 16:20:00 2010	(r44649)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Fri Feb 26 18:33:15 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Wed Mar  3 19:59:01 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -34,7 +34,7 @@
 compilers/data_json/data_json/grammar.pg                    [data_json]
 compilers/data_json/data_json/pge2pir.tg                    [data_json]
 compilers/imcc/Defines.mak                                  [imcc]
-compilers/imcc/Rules.mak                                    [imcc]
+compilers/imcc/Rules.in                                     [imcc]
 compilers/imcc/cfg.c                                        [imcc]
 compilers/imcc/cfg.h                                        [imcc]
 compilers/imcc/debug.c                                      [imcc]
@@ -317,7 +317,6 @@
 config/gen/crypto/digest_pmc.in                             []
 config/gen/crypto/digest_t.in                               []
 config/gen/makefiles.pm                                     []
-config/gen/makefiles/CFLAGS.in                              []
 config/gen/makefiles/docs.in                                []
 config/gen/makefiles/dynoplibs.in                           []
 config/gen/makefiles/dynpmc.in                              []
@@ -2132,7 +2131,6 @@
 t/tools/testdata                                            [test]
 tools/build/addopstags.pl                                   []
 tools/build/c2str.pl                                        []
-tools/build/cc_flags.pl                                     []
 tools/build/fixup_gen_file.pl                               []
 tools/build/h2inc.pl                                        []
 tools/build/headerizer.pl                                   []

Modified: trunk/MANIFEST.SKIP
==============================================================================
--- trunk/MANIFEST.SKIP	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/MANIFEST.SKIP	Fri Mar  5 16:20:00 2010	(r44649)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Thu Mar  4 09:57:17 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu Mar  4 20:45:33 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -174,6 +174,8 @@
 ^compilers/imcc/.*\.tmp/
 ^compilers/imcc/CFLAGS$
 ^compilers/imcc/CFLAGS/
+^compilers/imcc/Rules\.mak$
+^compilers/imcc/Rules\.mak/
 ^compilers/imcc/imcc$
 ^compilers/imcc/imcc/
 ^compilers/imcc/imclexer\.c$

Copied and modified: trunk/compilers/imcc/Rules.in (from r44637, trunk/compilers/imcc/Rules.mak)
==============================================================================
--- trunk/compilers/imcc/Rules.mak	Fri Mar  5 05:16:10 2010	(r44637, copy source)
+++ trunk/compilers/imcc/Rules.in	Fri Mar  5 16:20:00 2010	(r44649)
@@ -90,7 +90,9 @@
     $(INC_DIR)/oplib/ops.h \
     $(PARROT_H_HEADERS)
 
+## SUFFIX OVERRIDE - Warnings (This is generated code)
 compilers/imcc/imclexer$(O) : \
+    compilers/imcc/imclexer.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -102,8 +104,11 @@
     compilers/imcc/unit.h \
     $(INC_DIR)/oplib/ops.h \
     $(PARROT_H_HEADERS)
+	$(CC) $(CFLAGS) @optimize::compilers/imcc/imclexer.c@ @ccwarn::compilers/imcc/imclexer.c@ @cc_shared@ -I$(@D) @cc_o_out@ $@ -c compilers/imcc/imclexer.c
 
+## SUFFIX OVERRIDE - Warnings (This is generated code)
 compilers/imcc/imcparser$(O) : \
+    compilers/imcc/imcparser.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -118,6 +123,7 @@
     $(INC_DIR)/dynext.h \
     $(INC_DIR)/oplib/ops.h \
     $(PARROT_H_HEADERS)
+	$(CC) $(CFLAGS) @optimize::compilers/imcc/imcparser.c@ @ccwarn::compilers/imcc/imcparser.c@ @cc_shared@ -I$(@D) @cc_o_out@ $@ -c compilers/imcc/imcparser.c
 
 compilers/imcc/main$(O) : \
     compilers/imcc/cfg.h \
@@ -136,7 +142,9 @@
     $(INC_DIR)/runcore_api.h \
     $(PARROT_H_HEADERS)
 
+## SUFFIX OVERRIDE - Warnings (This is generated code)
 compilers/imcc/optimizer$(O) : \
+    compilers/imcc/optimizer.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -148,6 +156,7 @@
     compilers/imcc/unit.h \
     $(INC_DIR)/oplib/ops.h \
     $(PARROT_H_HEADERS)
+	$(CC) $(CFLAGS) @optimize::compilers/imcc/optimizer.c@ @ccwarn::compilers/imcc/optimizer.c@ @cc_shared@ -I$(@D) @cc_o_out@ $@ -c compilers/imcc/optimizer.c
 
 compilers/imcc/reg_alloc$(O) : \
     compilers/imcc/cfg.h \

Deleted: trunk/compilers/imcc/Rules.mak
==============================================================================
--- trunk/compilers/imcc/Rules.mak	Fri Mar  5 16:20:00 2010	(r44648)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,201 +0,0 @@
-compilers/imcc/pcc$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/instructions$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/pbc$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS) \
-    include/pmc/pmc_sub.h
-
-compilers/imcc/parser_util$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/dynext.h \
-    $(INC_DIR)/embed.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS) \
-    include/pmc/pmc_sub.h
-
-compilers/imcc/imc$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/cfg$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/debug$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/imclexer$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/imcparser$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/dynext.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/main$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/embed.h \
-    $(INC_DIR)/imcc.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(INC_DIR)/runcore_api.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/optimizer$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/reg_alloc$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/sets$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/symreg$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-# imcc file dependencies
-#
-# The .flag files are needed because we keep some derived files in SVN,
-# which does not keep accurate timestamps on the files, relative to each other.
-# Note that YACC or LEX may be null commands, so we must `touch` all the
-# target files, instead of just the .flag files.
-
-compilers/imcc/imcc.y.flag compilers/imcc/imcparser.c compilers/imcc/imcparser.h : compilers/imcc/imcc.y
-	$(YACC) compilers/imcc/imcc.y -d -o compilers/imcc/imcparser.c
-	$(PERL) $(BUILD_TOOLS_DIR)/fixup_gen_file.pl -noheaderizer compilers/imcc/imcparser.c compilers/imcc/imcc.y
-	$(PERL) $(BUILD_TOOLS_DIR)/fixup_gen_file.pl -noheaderizer compilers/imcc/imcparser.h compilers/imcc/imcc.y
-	$(TOUCH) compilers/imcc/imcc.y.flag compilers/imcc/imcparser.c compilers/imcc/imcparser.h
-
-compilers/imcc/imcc.l.flag compilers/imcc/imclexer.c : compilers/imcc/imcc.l
-	$(LEX) -ocompilers/imcc/imclexer.c compilers/imcc/imcc.l
-	$(TOUCH) compilers/imcc/imcc.l.flag compilers/imcc/imclexer.c

Modified: trunk/compilers/imcc/imcc.l
==============================================================================
--- trunk/compilers/imcc/imcc.l	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/imcc.l	Fri Mar  5 16:20:00 2010	(r44649)
@@ -1019,7 +1019,6 @@
     }
 
     while (c != ENDM) {
-        char *old_s = valp->s;
         int   elem_len;
 
         if (c <= 0) {

Modified: trunk/compilers/imcc/imcc.y
==============================================================================
--- trunk/compilers/imcc/imcc.y	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/imcc.y	Fri Mar  5 16:20:00 2010	(r44649)
@@ -5,7 +5,7 @@
  * Intermediate Code Compiler for Parrot.
  *
  * Copyright (C) 2002 Melvin Smith <melvin.smith at mindspring.com>
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  *
  * Grammar of the PIR language parser.
  *
@@ -28,7 +28,7 @@
 
 /* prevent declarations of malloc() and free() in the generated parser. */
 #define YYMALLOC
-#define YYFREE
+#define YYFREE(Ptr) do { /* empty */; } while (YYID (0))
 
 #ifndef YYENABLE_NLS
 #  define YYENABLE_NLS 0

Modified: trunk/compilers/imcc/imclexer.c
==============================================================================
--- trunk/compilers/imcc/imclexer.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/imclexer.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -5441,7 +5441,6 @@
     }
 
     while (c != ENDM) {
-        char *old_s = valp->s;
         int   elem_len;
 
         if (c <= 0) {

Modified: trunk/compilers/imcc/imcparser.c
==============================================================================
--- trunk/compilers/imcc/imcparser.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/imcparser.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -87,7 +87,7 @@
  * Intermediate Code Compiler for Parrot.
  *
  * Copyright (C) 2002 Melvin Smith <melvin.smith at mindspring.com>
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  *
  * Grammar of the PIR language parser.
  *
@@ -110,7 +110,7 @@
 
 /* prevent declarations of malloc() and free() in the generated parser. */
 #define YYMALLOC
-#define YYFREE
+#define YYFREE(Ptr) do { /* empty */; } while (YYID (0))
 
 #ifndef YYENABLE_NLS
 #  define YYENABLE_NLS 0

Modified: trunk/compilers/imcc/instructions.c
==============================================================================
--- trunk/compilers/imcc/instructions.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/instructions.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  */
 
 #include <stdlib.h>
@@ -50,7 +50,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(4);
 
-static int e_file_open(PARROT_INTERP, ARGIN(void *param))
+static int e_file_open(PARROT_INTERP, ARGIN(const char *file))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -785,7 +785,7 @@
 
 /*
 
-=item C<static int e_file_open(PARROT_INTERP, void *param)>
+=item C<static int e_file_open(PARROT_INTERP, const char *file)>
 
 Prints a message to STDOUT.
 
@@ -794,19 +794,19 @@
 */
 
 static int
-e_file_open(PARROT_INTERP, ARGIN(void *param))
+e_file_open(PARROT_INTERP, ARGIN(const char *param))
 {
     ASSERT_ARGS(e_file_open)
-    char * const file = (char *) param;
+    DECL_CONST_CAST;
 
-    if (!STREQ(file, "-")) {
-        FILE *newfile = freopen(file, "w", stdout);
+    if (!STREQ(param, "-")) {
+        FILE *newfile = freopen(param, "w", stdout);
         if (!newfile)
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
                 "Cannot reopen stdout: %s'\n", strerror(errno));
     }
 
-    output = file;
+    output = PARROT_const_cast(char *, param);
     Parrot_io_printf(interp, "# IMCC does produce b0rken PASM files\n");
     Parrot_io_printf(interp, "# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392\n");
     return 1;
@@ -862,7 +862,7 @@
 
 /*
 
-=item C<int emit_open(PARROT_INTERP, int type, void *param)>
+=item C<int emit_open(PARROT_INTERP, int type, const char *param)>
 
 Opens the emitter function C<open> of the given C<type>. Passes
 the C<param> to the open function.
@@ -873,7 +873,7 @@
 
 PARROT_EXPORT
 int
-emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(void *param))
+emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
 {
     ASSERT_ARGS(emit_open)
     IMCC_INFO(interp)->emitter       = type;

Modified: trunk/compilers/imcc/instructions.h
==============================================================================
--- trunk/compilers/imcc/instructions.h	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/instructions.h	Fri Mar  5 16:20:00 2010	(r44649)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  */
 
 #ifndef PARROT_IMCC_INSTRUCTIONS_H_GUARD
@@ -79,7 +79,7 @@
 /* Globals */
 
 typedef struct _emittert {
-    int (*open)(PARROT_INTERP, void *param);
+    int (*open)(PARROT_INTERP, const char *param);
     int (*emit)(PARROT_INTERP, void *param, const IMC_Unit *, const Instruction *ins);
     int (*new_sub)(PARROT_INTERP, void *param, IMC_Unit *);
     int (*end_sub)(PARROT_INTERP, void *param, IMC_Unit *);
@@ -103,7 +103,7 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(void *param))
+int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
         __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT

Modified: trunk/compilers/imcc/main.c
==============================================================================
--- trunk/compilers/imcc/main.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/main.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -646,7 +646,7 @@
     IMCC_push_parser_state(interp);
     IMCC_INFO(interp)->state->file = mem_sys_strdup(sourcefile);
 
-    emit_open(interp, per_pbc, per_pbc ? NULL : (void*)output_file);
+    emit_open(interp, per_pbc, per_pbc ? NULL : output_file);
 
     IMCC_info(interp, 1, "Starting parse...\n");
 

Modified: trunk/compilers/imcc/pbc.c
==============================================================================
--- trunk/compilers/imcc/pbc.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/pbc.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -420,7 +420,7 @@
 
 /*
 
-=item C<int e_pbc_open(PARROT_INTERP, void *param)>
+=item C<int e_pbc_open(PARROT_INTERP, const char *param)>
 
 Opens a compilation unit to emit PBC.
 
@@ -429,7 +429,7 @@
 */
 
 int
-e_pbc_open(PARROT_INTERP, SHIM(void *param))
+e_pbc_open(PARROT_INTERP, SHIM(const char *param))
 {
     ASSERT_ARGS(e_pbc_open)
     code_segment_t * const cs = mem_gc_allocate_zeroed_typed(interp, code_segment_t);

Modified: trunk/compilers/imcc/pbc.h
==============================================================================
--- trunk/compilers/imcc/pbc.h	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/pbc.h	Fri Mar  5 16:20:00 2010	(r44649)
@@ -28,7 +28,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-int e_pbc_open(PARROT_INTERP, SHIM(void *param))
+int e_pbc_open(PARROT_INTERP, SHIM(const char *param))
         __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT

Modified: trunk/compilers/imcc/reg_alloc.c
==============================================================================
--- trunk/compilers/imcc/reg_alloc.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/reg_alloc.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -613,8 +613,8 @@
 reg_sort_f(ARGIN(const void *a), ARGIN(const void *b))
 {
     ASSERT_ARGS(reg_sort_f)
-    const SymReg * const ra = *(SymReg**)a;
-    const SymReg * const rb = *(SymReg**)b;
+    const SymReg * const ra = *(const SymReg * const *)a;
+    const SymReg * const rb = *(const SymReg * const *)b;
 
     if (ra->first_ins->index < rb->first_ins->index)
         return -1;

Modified: trunk/compilers/imcc/symreg.c
==============================================================================
--- trunk/compilers/imcc/symreg.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/imcc/symreg.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  * $Id$
  */
 
@@ -1004,7 +1004,7 @@
         const char * const sub_name = (uniq == U_add_uniq_sub)
                        /* remember to free this name; add_ns malloc()s it */
                        ? (aux_name = add_ns(interp, name))
-                       : (char *)name;
+                       : name;
 
         r = _get_sym(hsh, sub_name);
 

Modified: trunk/compilers/pirc/src/pircapi.c
==============================================================================
--- trunk/compilers/pirc/src/pircapi.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/compilers/pirc/src/pircapi.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -180,6 +180,7 @@
 parse_string(PARROT_INTERP, ARGIN(char *pirstring), int flags, int pasminput,
     unsigned macro_size)
 {
+    ASSERT_ARGS(parse_string)
     yyscan_t            yyscanner;
     lexer_state        *lexer = NULL;
     char                name[64];

Modified: trunk/config/auto/cgoto.pm
==============================================================================
--- trunk/config/auto/cgoto.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/auto/cgoto.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -22,10 +22,10 @@
 
 sub _init {
     my $self = shift;
-    my %data;
-    $data{description} = q{Does your compiler support computed goto};
-    $data{result}      = q{};
-    return \%data;
+    return {
+        'description' => 'Does your compiler support computed goto',
+        'result'      => '',
+    };
 }
 
 sub runstep {
@@ -58,29 +58,6 @@
     my $verbose = $conf->options->get('verbose');
     if ($test) {
         $conf->data->set(
-            TEMP_cg_h => '$(INC_DIR)/oplib/core_ops_cg.h $(INC_DIR)/oplib/core_ops_cgp.h',
-            TEMP_cg_c => <<'EOF',
-# generated by config/auto/cgoto.pm
-
-src/ops/core_ops_cg$(O): $(GENERAL_H_FILES) src/ops/core_ops_cg.c \
-	include/pmc/pmc_parrotlibrary.h
-src/ops/core_ops_cgp$(O): $(GENERAL_H_FILES) src/ops/core_ops_cgp.c \
-	include/pmc/pmc_parrotlibrary.h
-src/runcore/cores.c: $(INC_DIR)/oplib/core_ops_cgp.h
-
-$(INC_DIR)/oplib/core_ops_cg.h: src/ops/core_ops_cg.c
-
-src/ops/core_ops_cg.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGoto.pm lib/Parrot/OpLib/core.pm
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --core
-
-$(INC_DIR)/oplib/core_ops_cgp.h: src/ops/core_ops_cgp.c
-
-src/ops/core_ops_cgp.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGP.pm lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CPrederef.pm
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --core
-EOF
-            TEMP_cg_o => 'src/ops/core_ops_cg$(O) src/ops/core_ops_cgp$(O)',
-            TEMP_cg_r => '$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c \
-                    $(INC_DIR)/oplib/core_ops_cgp.h src/ops/core_ops_cgp.c',
             cg_flag => '-DHAVE_COMPUTED_GOTO'
         );
         print " (yes) " if $verbose;
@@ -88,10 +65,6 @@
     }
     else {
         $conf->data->set(
-            TEMP_cg_h => '',
-            TEMP_cg_c => '',
-            TEMP_cg_o => '',
-            TEMP_cg_r => '',
             cg_flag   => ''
         );
         print " (no) " if $verbose;

Modified: trunk/config/auto/gcc.pm
==============================================================================
--- trunk/config/auto/gcc.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/auto/gcc.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -85,14 +85,15 @@
     $gccversion .= ".$minor" if defined $minor;
     $self->set_result("yes, $gccversion");
 
-    my $ccwarn = $conf->data->get('ccwarn');
-
     $conf->data->set( sym_export => '__attribute__ ((visibility("default")))' )
         if $gccversion >= 4.0 && !$conf->data->get('sym_export');
 
+    # sneaky check for g++
+    my $gpp = (index($conf->data->get('cc'), '++') > 0) ? 1 : 0;
+
     $conf->data->set(
-        ccwarn              => "$ccwarn",
-        gccversion          => $gccversion,
+        gccversion => $gccversion,
+        'g++'      => $gpp,
     );
     return 1;
 }

Modified: trunk/config/auto/icu.pm
==============================================================================
--- trunk/config/auto/icu.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/auto/icu.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -339,8 +339,7 @@
         if (! -d $icuheaders) {
             $without = 1;
         }
-        my $slash = $conf->data->get('slash');
-        $icuheaders .= "${slash}include";
+        $icuheaders .= "/include";
         if (! -d $icuheaders) {
             $without = 1;
         }

Modified: trunk/config/auto/perldoc.pm
==============================================================================
--- trunk/config/auto/perldoc.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/auto/perldoc.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -59,7 +59,6 @@
     my $TEMP_pod = join q{ } =>
         map { my $t = $_; $t =~ s/\.ops$/.pod/; "ops/$t" } @ops;
 
-    my $slash       = $conf->data->get('slash');
     my $new_perldoc = $conf->data->get('new_perldoc');
 
     foreach my $ops (@ops) {
@@ -67,17 +66,17 @@
         $pod =~ s/\.ops$/.pod/;
         if ( $new_perldoc ) {
             $TEMP_pod_build .= <<"END"
-ops$slash$pod: ..${slash}src${slash}ops${slash}$ops
-\t\$(PERLDOC_BIN) -ud ops${slash}$pod ..${slash}src${slash}ops${slash}$ops
-\t\$(CHMOD) 0644 ops${slash}$pod
+ops/$pod: ../src/ops/$ops
+\t\$(PERLDOC_BIN) -ud ops/$pod ../src/ops/$ops
+\t\$(CHMOD) 0644 ops/$pod
 
 END
         }
         else {
             $TEMP_pod_build .= <<"END"
-ops$slash$pod: ..${slash}src${slash}ops${slash}$ops
-\t\$(PERLDOC_BIN) -u ..${slash}ops${slash}$ops > ops${slash}$pod
-\t\$(CHMOD) 0644 ..${slash}ops${slash}$pod
+ops/$pod: ../src/ops/$ops
+\t\$(PERLDOC_BIN) -u ../ops/$ops > ops/$pod
+\t\$(CHMOD) 0644 ../ops/$pod
 
 END
         }

Modified: trunk/config/auto/pmc.pm
==============================================================================
--- trunk/config/auto/pmc.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/auto/pmc.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -90,6 +90,10 @@
             }
         }
         my $include_headers = get_includes($pmc_fname);
+        my $cc_shared = $conf->data->get('cc_shared');
+        my $cc_o_out  = $conf->data->get('cc_o_out');
+        my $warnings  = $conf->data->get('ccwarn');
+        my $optimize  = $conf->data->get('optimize');
 
         $TEMP_pmc_build .= <<END
 src/pmc/$pmc.c : src/pmc/$pmc.dump
@@ -100,20 +104,21 @@
 
 include/pmc/pmc_$pmc.h: src/pmc/$pmc.c
 
-src/pmc/$pmc\$(O): include/pmc/pmc_${pmc}.h src/pmc/$pmc.str \$(NONGEN_HEADERS) \\
+## SUFFIX OVERRIDE -Warnings
+src/pmc/$pmc\$(O): include/pmc/pmc_$pmc.h src/pmc/$pmc.str \$(NONGEN_HEADERS) \\
     $parent_headers $include_headers include/pmc/pmc_continuation.h \\
-    include/pmc/pmc_callcontext.h include/pmc/pmc_fixedintegerarray.h
+    include/pmc/pmc_callcontext.h include/pmc/pmc_fixedintegerarray.h \\
+    src/pmc/$pmc.c
+\t\$(CC) \$(CFLAGS) $optimize $cc_shared $warnings -I\$(\@D) $cc_o_out \$@ -c src/pmc/$pmc.c
 
 END
     }
 
-    # src/pmc/$pmc\$(O): \$(NONGEN_HEADERS) $parent_headers include/pmc/pmc_$pmc.h
 
     # build list of libraries for link line in Makefile
-    my $slash = $conf->data->get('slash');
-    ( my $TEMP_pmc_classes_o   = $TEMP_pmc_o )   =~ s/^| / src${slash}pmc${slash}/g;
-    ( my $TEMP_pmc_classes_str = $TEMP_pmc_str ) =~ s/^| / src${slash}pmc${slash}/g;
-    ( my $TEMP_pmc_classes_pmc = $pmc_list )     =~ s/^| / src${slash}pmc${slash}/g;
+    ( my $TEMP_pmc_classes_o   = $TEMP_pmc_o )   =~ s{^| }{ src/pmc/}g;
+    ( my $TEMP_pmc_classes_str = $TEMP_pmc_str ) =~ s{^| }{ src/pmc/}g;
+    ( my $TEMP_pmc_classes_pmc = $pmc_list )     =~ s{^| }{ src/pmc/}g;
 
     # Gather the actual names (with MixedCase) of all of the non-abstract
     # built-in PMCs in rough hierarchical order.

Modified: trunk/config/auto/warnings.pm
==============================================================================
--- trunk/config/auto/warnings.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/auto/warnings.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -1,17 +1,14 @@
-# Copyright (C) 2007-2008, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
 
-config/auto/warnings.pm - Warning flags detection
+config/auto/warnings.pm - Warning flags probing.
 
 =head1 DESCRIPTION
 
-Automagically detect what warning flags, like -Wall, -Wextra,
--Wchar-subscripts, etc., that the compiler can support.  Directly hacked
-from F<config/auto/attributes.pm>.
-
-=head1 SUBROUTINES
+Given a list of potential warnings available for a certain type of
+compiler, probe to see which of those are valid for this particular version.
 
 =over 4
 
@@ -22,21 +19,86 @@
 use strict;
 use warnings;
 
-
 use base qw(Parrot::Configure::Step);
 
 use Parrot::Configure::Utils ();
 use Parrot::BuildUtil;
 
+=item C<_init>
+
+Declare potential warnings for various compilers.  Note that the compiler
+key used here doesn't really exist in a unified way in Configure - would
+be nice if it did so we could simplify our checks in runstep().
+
+We create a data structure here that breaks out the warnings by compiler,
+using this structure:
+
+warnings:
+  gcc:
+    basic:
+      - -Warning1
+      - -Warning2
+    cage:
+      - -Warning3
+      - -Warning4
+    only:
+      - -Warning5:
+        - foo.c
+        - bar.c
+    never:
+      - -Warning6:
+        - baz.c
+        - frob.c
+    todo:
+      - -Warning7:
+        - cow.c
+        - pig.c
+  g++:
+    ...
+
+'basic' warnings are always used.
+
+'cage' warnings are added only if --cage is specified during
+Configure. This can be used to hold warnings that aren't ready to be
+added to the default run yet.
+
+'only' should be used as we add new warnings to the build, it will let
+us insure that files we know are clean for a new warning stay clean.
+
+'never' should be used when a particular file contains generated code
+(e.g. imcc) and we cannot update it to conform to the standards.
+
+'todo' functions just like never does, but it indicates that these
+files are expected to eventually be free of this warning.
+
+Note that there is no actual requirement that the 'file' be a full path
+to a .c file; the file could be "PMCS" or "OPS" or some other identifier;
+whatever the value, it will generate a Config entry prefixed with
+C<ccwarn::>, which will probably be used via @@ expansion in a makefile.
+
+It is tempting to put this into a config file, but having it in
+perl gives us the ability to dynamically setup certain warnings based
+on any criteria already discovered via Config.
+
+Order is important - some warnings are invalid unless they are specified
+after other warnings.
+
+=cut
+
 sub _init {
     my $self = shift;
-    my %data;
-    $data{description} = q{Detect supported compiler warnings};
-    $data{result}      = q{};
-
-    # Please keep these sorted by flag name, such that "-Wno-foo" is
-    # sorted as "-Wfoo", so we can turn off/on as needed.
-    my @potential_warnings = qw(
+
+    my $data = {
+        description => 'Detect supported compiler warnings',
+        result      => '',
+        validated   => [],
+    };
+
+    # begin gcc/g++
+    my $gcc = {};
+    my $gpp = {};
+
+    my @gcc_or_gpp = qw(
         -falign-functions=16
         -fvisibility=hidden
         -funit-at-a-time
@@ -49,6 +111,7 @@
         -Wchar-subscripts
         -Wcomment
         -Wdisabled-optimization
+        -Wdiv-by-zero
         -Wendif-labels
         -Wextra
         -Wformat
@@ -79,13 +142,17 @@
         -Wswitch-default
         -Wtrigraphs
         -Wundef
-        -Wunknown-pragmas
         -Wno-unused
+        -Wunknown-pragmas
         -Wvariadic-macros
         -Wwrite-strings
-        -Wnot-a-real-warning
     );
-    my @potential_warnings_no_cpp = qw(
+
+    $gcc->{'basic'} = [ @gcc_or_gpp ];
+    $gpp->{'basic'} = [ @gcc_or_gpp ];
+
+    # Add some gcc only warnings that would break g++
+    push @{$gcc->{'basic'}}, qw(
         -Wbad-function-cast
         -Wc++-compat
         -Wdeclaration-after-statement
@@ -101,7 +168,7 @@
         -Wstrict-prototypes
     );
 
-    my @cage_warnings = qw(
+    my $gcc_or_gpp_cage = [ qw(
         -std=c89
         -Werror-implicit-function-declaration
         -Wformat=2
@@ -109,41 +176,53 @@
         -Wlong-long
         -Wmissing-format-attribute
         -Wdeprecated-declarations
-        -Wdiv-by-zero
         -Wno-format-extra-args
         -Wno-import
         -Wno-multichar
         -Wno-pointer-sign
-        -Wold-style-definition
         -Wunreachable-code
+        -Wunused
         -Wunused-function
         -Wunused-label
         -Wunused-value
         -Wunused-variable
-    );
+    ) ];
 
-    my @may_not_even_be_interesting = qw(
-        -Wpadded
-        -Wredundant-decls
-        -Wswitch-enum
-        -Wsystem-headers
-    );
+    $gcc->{'cage'} = $gcc_or_gpp_cage;
+    $gpp->{'cage'} = $gcc_or_gpp_cage;
 
-    my @nice_to_have_but_too_noisy_for_now = qw(
-        -pedantic
-        -Wconversion
-        -Wint-to-pointer-cast
-        -Wmissing-noreturn
-        -Wshadow
-        -Wunused-macros
-        -Wunused-parameter
-    );
+    $gcc->{'todo'} = $gpp->{'todo'} = {
+        '-Wformat-nonliteral' => [
+            'src/spf_render.c',
+            'compilers/imcc/optimizer.c',
+        ],
+        '-Wstrict-prototypes' => [
+            'src/nci/extra_thunks.c',
+            'src/extra_nci_thunks.c',
+        ],
+    };
+
+    $gcc->{'never'} = $gpp->{'never'} = {
+        '-Wformat-nonliteral' => [
+            'compilers/imcc/imclexer.c',
+        ],
+        '-Wswitch-default' => [
+            'compilers/imcc/imclexer.c',
+        ],
+        '-Wcast-qual' => [
+            'compilers/imcc/imcparser.c',
+        ],
+        '-Wlogical-op' => [
+            'compilers/imcc/imcparser.c',
+        ],
+    };
+
+    $data->{'warnings'}{'gcc'} = $gcc;
+    $data->{'warnings'}{'g++'} = $gpp;
 
-    $data{potential_warnings}        = \@potential_warnings;
-    $data{potential_warnings_no_cpp} = \@potential_warnings_no_cpp;
-    $data{cage_warnings}             = \@cage_warnings;
+    ## end gcc/g++
 
-    return \%data;
+    return $data;
 }
 
 sub runstep {
@@ -151,53 +230,64 @@
 
     my $verbose = $conf->options->get('verbose');
     print "\n" if $verbose;
+
+    my $compiler = '';
     if ( defined $conf->data->get('gccversion') ) {
+        $compiler = $conf->data->get('g++') ? 'g++' : 'gcc';
+    }
 
-        # Dirty way of checking if compiling with c++
-        my $nocpp = index($conf->data->get('cc'), '++') < 0;
+    if ($compiler eq '') {
+        print "We do not (yet) probe for warnings for your compiler\n"
+            if $verbose;
+        $self->set_result('skipped');
+        return 1;
+    }
 
-        # add on some extra warnings if requested
-        $self->_add_cage_warnings($conf);
-        $self->_add_maintainer_warnings($conf);
-
-        # now try out our warnings
-        for my $maybe_warning (@{ $self->{potential_warnings} }) {
-            $self->try_warning( $conf, $maybe_warning, $verbose );
-        }
-        if ($nocpp) {
-            for my $maybe_warning (@{ $self->{potential_warnings_no_cpp} }) {
-                $self->try_warning( $conf, $maybe_warning, $verbose );
+    # standard warnings.
+    my @warnings = grep {$self->valid_warning($conf, $_)}
+        @{$self->{'warnings'}{$compiler}{'basic'}};
+
+    # --cage?
+    if ($conf->options->get('cage')) {
+        push @warnings, grep {$self->valid_warning($conf, $_)}
+            @{$self->{'warnings'}{$compiler}{'cage'}}
+    }
+
+    # -- only?
+    my %per_file;
+    if (exists $self->{'warnings'}{$compiler}{'only'}) {
+        my %only = %{$self->{'warnings'}{$compiler}{'only'}};
+        foreach my $warning (keys %only) {
+            next unless $self->valid_warning($conf, $warning);
+            foreach my $file (@{$only{$warning}}) {
+                $per_file{$file} = [ @warnings ] unless exists $per_file{$file};
+                push @{$per_file{$file}}, $warning;
             }
         }
+    }
 
-        if ($nocpp) {
-           $self->set_result("set for gcc");
-        }
-        else {
-           $self->set_result("set for g++");
+    foreach my $key (qw/todo never/) {
+        if (exists $self->{'warnings'}{$compiler}{$key}) {
+            my %dont = %{$self->{'warnings'}{$compiler}{$key}};
+            foreach my $warning (keys %dont) {
+                foreach my $file (@{$dont{$warning}}) {
+                    $per_file{$file} = [ @warnings ] unless exists $per_file{$file};
+                    @{$per_file{$file}} = grep {$warning ne $_} @{$per_file{$file}};
+                }
+            }
         }
     }
-    else {
-        print "Currently we only set warnings if using gcc as C compiler\n"
-            if $verbose;
-        $self->set_result("skipped");
-    }
-    return 1;
-}
 
-sub _add_cage_warnings {
-    my ($self, $conf) = @_;
-    push @{ $self->{potential_warnings} }, @{ $self->{cage_warnings} }
-        if $conf->options->get('cage');
-}
+    $conf->data->set('ccwarn', join(' ', @warnings));
+    foreach my $file (keys %per_file) {
+        $conf->data->set("ccwarn::$file", join(' ', @{$per_file{$file}}));
+    }
 
-sub _add_maintainer_warnings {
-    my ($self, $conf) = @_;
-    push @{ $self->{potential_warnings} }, '-Wlarger-than-4096'
-        if $conf->options->get('maintainer');
+    $self->set_result('done');
+    return 1;
 }
 
-=item C<try_warning>
+=item C<valid_warning>
 
 Try a given warning to see if it is supported by the compiler.  The compiler
 is determined by the C<cc> value of the C<Parrot::Configure> object passed
@@ -207,11 +297,17 @@
 Returns true if the warning flag is recognized by the compiler and undef
 otherwise.
 
+Use the running set of known valid options, since some options may depend
+on previous options.
+
 =cut
 
-sub try_warning {
-    my ( $self, $conf, $warning, $verbose ) = @_;
+sub valid_warning {
+    my ( $self, $conf, $warning ) = @_;
+
+    my $verbose = $conf->options->get('verbose');
 
+    # This should be using a temp file name.
     my $output_file = 'test.cco';
 
     $verbose and print "trying attribute '$warning'\n";
@@ -220,17 +316,18 @@
     $conf->cc_gen('config/auto/warnings/test_c.in');
 
     my $ccflags  = $conf->data->get('ccflags');
-    my $tryflags = "$ccflags $warning";
+    my $warnings = join(' ', @{$self->{'validated'}});
+    my $tryflags = "$ccflags $warnings $warning";
 
     my $command_line = Parrot::Configure::Utils::_build_compile_command( $cc, $tryflags );
-    $verbose and print "  ", $command_line, "\n";
+    $verbose and print '  ', $command_line, "\n";
 
     # Don't use cc_build, because failure is expected.
     my $exit_code = Parrot::Configure::Utils::_run_command(
         $command_line, $output_file, $output_file
     );
-    _set_warning($conf, $warning, $exit_code, $verbose);
 
+    # Cleanup any remnants of the test compilation
     $conf->cc_clean();
 
     if ($exit_code) {
@@ -240,35 +337,22 @@
 
     my $output = Parrot::BuildUtil::slurp_file($output_file);
     unlink $output_file or die "Unable to unlink $output_file: $!";
-    return _set_ccflags($conf, $output, $tryflags, $verbose);
-}
-
-sub _set_warning {
-    my ($conf, $warning, $exit_code, $verbose) = @_;
-    $verbose and print "  exit code: $exit_code\n";
-    $conf->data->set( $warning => !$exit_code || 0 );
-}
 
-sub _set_ccflags {
-    my ($conf, $output, $tryflags, $verbose) = @_;
     $verbose and print "  output: $output\n";
 
     if ( $output !~ /error|warning|not supported/i ) {
-        $conf->data->set( ccflags => $tryflags );
-        $verbose and print "  ccflags: ", $conf->data->get("ccflags"), "\n";
+        push @{$self->{'validated'}}, $warning;
+        $verbose and print "    valid warning: '$warning'\n";
         return 1;
     }
     else {
+        $verbose and print "  invalid warning: '$warning'\n";
         return 0;
     }
 }
 
 =back
 
-=head1 AUTHOR
-
-Paul Cochrane <paultcochrane at gmail dot com>
-
 =cut
 
 1;

Modified: trunk/config/auto/warnings/test_c.in
==============================================================================
--- trunk/config/auto/warnings/test_c.in	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/auto/warnings/test_c.in	Fri Mar  5 16:20:00 2010	(r44649)
@@ -6,11 +6,10 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include "parrot/compiler.h"
 
 /* as long as the file compiles, everything is okay */
 int
-main()
+main(void)
 {
     return EXIT_SUCCESS;
 }

Modified: trunk/config/gen/makefiles.pm
==============================================================================
--- trunk/config/gen/makefiles.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/gen/makefiles.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -27,12 +27,18 @@
     $data{description} = q{Generate makefiles and other build files};
     $data{result}      = q{};
     $data{makefiles}   = {
-        'Makefile' => { SOURCE => 'config/gen/makefiles/root.in' },
-        'ext/Makefile' => { SOURCE => 'config/gen/makefiles/ext.in', },
+        'Makefile' => {
+            SOURCE => 'config/gen/makefiles/root.in',
+        },
+        'ext/Makefile' => {
+            SOURCE => 'config/gen/makefiles/ext.in',
+        },
+        'compilers/imcc/Rules.mak' => {
+             SOURCE => 'compilers/imcc/Rules.in',
+        },
 
         'ext/Parrot-Embed/Makefile.PL' => {
             SOURCE            => 'config/gen/makefiles/parrot_embed_pl.in',
-            replace_slashes   => 0,
             conditioned_lines => 1,
         },
 
@@ -48,7 +54,6 @@
         'parrot.pc'     => { SOURCE => 'config/gen/makefiles/parrot_pc.in' },
         'docs/Makefile' => { SOURCE => 'config/gen/makefiles/docs.in' },
     };
-    $data{CFLAGS_source} = 'config/gen/makefiles/CFLAGS.in';
     return \%data;
 }
 
@@ -56,36 +61,10 @@
     my ( $self, $conf ) = @_;
 
     $self->makefiles($conf);
-    $self->cflags($conf);
 
     return 1;
 }
 
-sub cflags {
-    my ( $self, $conf ) = @_;
-
-    $conf->genfile( $self->{CFLAGS_source} => 'CFLAGS',
-        comment_type                     => '#'
-    );
-
-    open( my $CFLAGS, ">>", "CFLAGS" ) or die "open >> CFLAGS: $!";
-
-    # Why is this here?  I'd think this information belongs
-    # in the CFLAGS.in file. -- A.D.  March 12, 2004
-    if ( $conf->data->get('cpuarch') =~ /sun4|sparc64/ ) {
-
-        # CFLAGS entries must be left-aligned.
-        print {$CFLAGS} <<"EOF";
-src/jit_cpu.c -{-Wcast-align}        # lots of noise!
-src/nci.c     -{-Wstrict-prototypes} # lots of noise!
-EOF
-    }
-
-    close $CFLAGS;
-
-    return;
-}
-
 sub makefiles {
     my ( $self, $conf ) = @_;
 
@@ -96,7 +75,6 @@
         : keys %{ $self->{makefiles} };
 
     foreach my $target (@targets) {
-        $target =~ s/\\/\//g if $^O eq 'MSWin32';
         my $args   = $self->{makefiles}->{$target};
         my $source = delete $args->{SOURCE};
 

Deleted: trunk/config/gen/makefiles/CFLAGS.in
==============================================================================
--- trunk/config/gen/makefiles/CFLAGS.in	Fri Mar  5 16:20:00 2010	(r44648)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,36 +0,0 @@
-# [ filename | {regex} ] -{removed options} +{added options} s/// ...
-#
-# Avoid using non-configure controlled +{} directly in this file, as
-# it'll most likely break on other platforms.
-#
-# Note, empty regex/options are just ignored.
-#
-src/platform.c      -{-Wcast-qual}          # noisy
-src/spf_render.c    -{-Wformat-nonliteral}  # noisy
-
-# The src/ops/core_ops*.c files are challenging to optimize.
-# gcc can usually handle it, but don't assume any other compilers can,
-# until there is specific evidence otherwise.
-#UNLESS(gccversion):src/ops/core_ops_cg.c      -{@optimize@}
-#UNLESS(gccversion):src/ops/core_ops_cgp.c     -{@optimize@}
-#UNLESS(gccversion):src/ops/core_ops_switch.c  -{@optimize@}
-
-#IF(cpuarch==amd64):src/gc/system.c  -{@optimize@}              # TT #405 amd64 --optimize problem
-
-# io should be -Wunused clean
-{^src/io/}              s/-Wno-unused/-Wunused/
-
-# files which make their way into dynamically loaded files should be compiled
-# with shared library options
-src/extend.c        +{@cc_shared@}
-src/nci_test.c      +{@cc_shared@}
-
-# imcc file settings
-{^compilers/imcc/}            -{-Wwrite-strings -Wcast-qual}
-{^compilers/imcc/(?!imclexer)}      s/-Wno-unused/-Wunused/
-compilers/imcc/instructions.c -{-Wformat-nonliteral} # noisy
-compilers/imcc/debug.c        -{-Wformat-nonliteral} # noisy
-compilers/imcc/optimizer.c    -{-Wformat-nonliteral} # noisy
-compilers/imcc/parser_util.c  -{-Wformat-nonliteral} # noisy
-compilers/imcc/imclexer.c     -{-Wunused}  # noisy
-compilers/imcc/imclexer.c     -{-Wswitch-default}  # occurs in generated code

Modified: trunk/config/gen/makefiles/dynoplibs.in
==============================================================================
--- trunk/config/gen/makefiles/dynoplibs.in	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/gen/makefiles/dynoplibs.in	Fri Mar  5 16:20:00 2010	(r44649)
@@ -14,12 +14,12 @@
 LD            = @ld@
 LDFLAGS       = @ldflags@ @ld_debug@ @rpath_blib@ @linkflags@
 LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
+CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@ @optimize@
 LIBPARROT     = @libparrot_ldflags@
 
-BUILD_TOOLS_DIR = $(BUILD_DIR)@slash at tools@slash at build
-OPS2C           = $(PERL) -I$(BUILD_DIR)@slash at lib $(BUILD_TOOLS_DIR)@slash at ops2c.pl
-INCLUDES        = -I$(BUILD_DIR)@slash at include -I at build_dir@@slash at src@slash at pmc
+BUILD_TOOLS_DIR = $(BUILD_DIR)/tools/build
+OPS2C           = $(PERL) -I$(BUILD_DIR)/lib $(BUILD_TOOLS_DIR)/ops2c.pl
+INCLUDES        = -I$(BUILD_DIR)/include -I at build_dir@/src/pmc
 LINKARGS        = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @icu_shared@ @libs@
 
 OPS_TARGETS = \

Modified: trunk/config/gen/makefiles/dynpmc.in
==============================================================================
--- trunk/config/gen/makefiles/dynpmc.in	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/gen/makefiles/dynpmc.in	Fri Mar  5 16:20:00 2010	(r44649)
@@ -8,19 +8,19 @@
 LOAD_EXT      = @load_ext@
 BUILD_DIR     = @build_dir@
 RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
-INSTALL_DIR   = $(BUILD_DIR)@slash at runtime@slash at parrot@slash at dynext
+INSTALL_DIR   = $(BUILD_DIR)/runtime/parrot/dynext
 O             = @o@
 CC            = @cc@
 LD            = @ld@
 LDFLAGS       = @ldflags@ @ld_debug@ @rpath_blib@
 LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
+CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@ @optimize@
 LIBPARROT     = @libparrot_ldflags@
 
-BUILD_TOOLS_DIR = $(BUILD_DIR)@slash at tools@slash at build
-BUILD_LIB_DIR   = $(BUILD_DIR)@slash at blib@slash at lib
-PMC2C           = $(PERL) $(BUILD_TOOLS_DIR)@slash at pmc2c.pl
-INCLUDES        = -I$(BUILD_DIR)@slash at include -I at build_dir@@slash at include@slash at pmc
+BUILD_TOOLS_DIR = $(BUILD_DIR)/tools/build
+BUILD_LIB_DIR   = $(BUILD_DIR)/blib/lib
+PMC2C           = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl
+INCLUDES        = -I$(BUILD_DIR)/include -I at build_dir@/include/pmc
 LINKARGS        = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @icu_shared@ @libs@
 
 PMC2CD = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl --dump

Modified: trunk/config/gen/makefiles/root.in
==============================================================================
--- trunk/config/gen/makefiles/root.in	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/gen/makefiles/root.in	Fri Mar  5 16:20:00 2010	(r44649)
@@ -82,7 +82,9 @@
 CC_INC           = @cc_inc@
 C_LIBS           = @libs@
 CC_SHARED        = @cc_shared@
-CFLAGS           = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @ccwarn@ @cg_flag@ @gc_flag@ @clock_best@ $(CC_SHARED)
+CC_O_OUT         = @cc_o_out@
+CC_WARN          = @ccwarn@
+CFLAGS           = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @cg_flag@ @gc_flag@ @clock_best@ $(CC_SHARED)
 LINK_DYNAMIC     = @link_dynamic@
 LINK             = @link@
 LINKFLAGS        = @linkflags@ @link_debug@ @ld_debug@
@@ -140,7 +142,8 @@
     editor/Makefile \
     ext/Makefile \
     src/dynoplibs/Makefile \
-    src/dynpmc/Makefile
+    src/dynpmc/Makefile \
+    compilers/imcc/Rules.mak
 
 GEN_CONFIGS = \
     $(INC_DIR)/config.h \
@@ -177,8 +180,6 @@
 #IF(has_crypto):    t/dynpmc/sha1.t \
 #IF(has_crypto):    t/dynpmc/sha256.t \
 #IF(has_crypto):    t/dynpmc/sha512.t \
-    CFLAGS \
-    compilers/imcc/CFLAGS \
     config_lib.pasm \
     parrot.pc \
     compilers/imcc/imcc.y.flag \
@@ -407,7 +408,9 @@
         include/pmc/pmc_parrotinterpreter.h
 
 # generated list of header files
-GENERAL_H_FILES   = $(NONGEN_HEADERS) $(GEN_HEADERS) @TEMP_cg_h@
+GENERAL_H_FILES   = $(NONGEN_HEADERS) $(GEN_HEADERS) \
+#IF(cg_flag): $(INC_DIR)/oplib/core_ops_cg.h $(INC_DIR)/oplib/core_ops_cgp.h
+
 
 CHARSET_O_FILES   = @TEMP_charset_o@
 CLASS_PMC_FILES   = @TEMP_pmc_classes_pmc@
@@ -493,13 +496,12 @@
     src/utils$(O) \
     src/vtables$(O) \
     src/warnings$(O) \
-    \
     src/packfile/pf_items$(O) \
-    \
-    @TEMP_cg_o@ \
     @TEMP_atomic_o@ \
     @TEMP_gc_o@ \
 #IF(platform_asm):    src/platform_asm$(O) \
+#IF(cg_flag):     src/ops/core_ops_cg$(O) src/ops/core_ops_cgp$(O) \
+
 
 OPS_FILES = @ops@ $(GEN_OPSFILES)
 
@@ -510,27 +512,27 @@
 ###############################################################################
 
 # Executables
-PARROT              = ./@test_prog@$(EXE)
-MINIPARROT          = ./miniparrot$(EXE)
-DIS                 = ./pbc_disassemble$(EXE)
-PDUMP               = ./pbc_dump$(EXE)
-PBC_MERGE           = ./pbc_merge$(EXE)
-PDB                 = ./parrot_debugger$(EXE)
-PBC_TO_EXE          = ./pbc_to_exe$(EXE)
-PARROT_CONFIG       = ./parrot_config$(EXE)
-PIRC                = ./pirc$(EXE)
-NQP_RX              = ./parrot-nqp$(EXE)
+PARROT              = . at slash@@test_prog@$(EXE)
+MINIPARROT          = . at slash@miniparrot$(EXE)
+DIS                 = . at slash@pbc_disassemble$(EXE)
+PDUMP               = . at slash@pbc_dump$(EXE)
+PBC_MERGE           = . at slash@pbc_merge$(EXE)
+PDB                 = . at slash@parrot_debugger$(EXE)
+PBC_TO_EXE          = . at slash@pbc_to_exe$(EXE)
+PARROT_CONFIG       = . at slash@parrot_config$(EXE)
+PIRC                = . at slash@pirc$(EXE)
+NQP_RX              = . at slash@parrot-nqp$(EXE)
 NCI_THUNK_GEN       = ./parrot_nci_thunk_gen$(EXE)
 
 # Installable executables
-INSTALLABLEPARROT    = ./installable_parrot$(EXE)
-INSTALLABLEDIS       = ./installable_pbc_disassemble$(EXE)
-INSTALLABLEPDUMP     = ./installable_pbc_dump$(EXE)
-INSTALLABLEPBC_MERGE = ./installable_pbc_merge$(EXE)
-INSTALLABLEPBCTOEXE  = ./installable_pbc_to_exe$(EXE)
-INSTALLABLEPDB       = ./installable_parrot_debugger$(EXE)
-INSTALLABLECONFIG    = ./installable_parrot_config$(EXE)
-INSTALLABLENQP       = ./installable_parrot-nqp$(EXE)
+INSTALLABLEPARROT    = . at slash@installable_parrot$(EXE)
+INSTALLABLEDIS       = . at slash@installable_pbc_disassemble$(EXE)
+INSTALLABLEPDUMP     = . at slash@installable_pbc_dump$(EXE)
+INSTALLABLEPBC_MERGE = . at slash@installable_pbc_merge$(EXE)
+INSTALLABLEPBCTOEXE  = . at slash@installable_pbc_to_exe$(EXE)
+INSTALLABLEPDB       = . at slash@installable_parrot_debugger$(EXE)
+INSTALLABLECONFIG    = . at slash@installable_parrot_config$(EXE)
+INSTALLABLENQP       = . at slash@installable_parrot-nqp$(EXE)
 INSTALLABLENCITHUNKGEN = ./installable_parrot_nci_thunk_gen$(EXE)
 
 # Libraries
@@ -569,24 +571,27 @@
 
 .SUFFIXES : .c .S .s .pmc .dump $(O) .str .pir .pbc
 
-# Passing an empty argument in @ARGV to cc_flags.pl to indicate where extra -Is
-# (etc) should go. Otherwise it will insert them after the first space, which
-# makes life go horribly wrong if $(CC) contains spaces but can't have -I
-# arguments (etc) injected in the middle.
-# There is probably a better way to do this, but I can't work it out right now.
 .c$(O) : # suffix rule (limited support)
-	@$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
-
-# XXX probably should detect assembler, but right now this is only used on Sparc
+	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
 .s$(O) : # suffix rule (limited support)
-	@$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
+	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 #UNLESS(win32).S$(O) : # suffix rule (limited support)
-#UNLESS(win32)	@$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
+#UNLESS(win32)	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
 .pir.pbc : # suffix rule (limited support)
 	$(PARROT) -o $@ $<
 
+# Note: Several rules in this makefile are tagged with a "SUFFIX OVERRIDE"
+# comment; this indicates that we have an explicit compilation rule for
+# that particular C file; this is done so that we override various
+# options for that file - to change optimization levels, or twiddle
+# warnings. Each of those overrides should use the most specific settings
+# possible for that file. When file-specific overrides are added during
+# Configure, the override must be allowed for in this file.
+# These will eventually be automatically generated.
+
+
 ###############################################################################
 #
 # USER TARGETS:
@@ -615,7 +620,6 @@
     $(NQP_LIB_PBCS)
 
 corevm : \
-    flags_dummy \
 	$(GEN_PM_INCLUDES) \
     PARROT_LIBS \
     $(PARROT) \
@@ -805,17 +809,13 @@
 installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN)
 
 
-flags_dummy :
-	@echo "Compiling with:"
-	@$(PERL) tools/build/cc_flags.pl ./CFLAGS echo $(CC) $(CFLAGS) -I$(@D) @cc_o_out@ xx$(O) -c xx.c
-
 runtime/parrot/include/parrotlib.pbc: runtime/parrot/library/parrotlib.pir $(PARROT) $(GEN_PASM_INCLUDES)
 	$(PARROT) -o $@ runtime/parrot/library/parrotlib.pir
 
 runtime/parrot/include/config.fpmc : myconfig config_lib.pasm $(MINIPARROT)
 	$(MINIPARROT) config_lib.pasm > $@
 
-$(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) CFLAGS \
+$(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
     lib/Parrot/OpLib/core.pm src/parrot_config$(O) \
     $(MINIPARROT)
 	$(LINK) @ld_out@$@ \
@@ -1148,7 +1148,7 @@
 
 # hello
 hello: test_prep examples/pasm/hello$(EXE)
-	./examples/pasm/hello$(EXE) "from your friendly makefile"
+	. at slash@examples at slash@pasm at slash@hello$(EXE) "from your friendly makefile"
 
 examples/pasm/hello.pbc: examples/pasm/hello.pasm
 	$(PARROT) -o examples/pasm/hello.pbc examples/pasm/hello.pasm
@@ -1253,8 +1253,10 @@
         include/pmc/pmc_sub.h \
 	include/pmc/pmc_parrotinterpreter.h
 
+## SUFFIX OVERRIDE - dynloaded files need cc_shared
 src/extend$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/extend.h \
-	include/pmc/pmc_sub.h $(INC_DIR)/extend_vtable.h
+    include/pmc/pmc_sub.h $(INC_DIR)/extend_vtable.h src/extend.c
+	$(CC) $(CFLAGS) @optimize::src/extend.c@ @ccwarn::src/extend.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extend.c
 
 src/runcore/main$(O) : \
 	src/runcore/main.str \
@@ -1394,10 +1396,13 @@
         include/pmc/pmc_unmanagedstruct.h \
         include/pmc/pmc_nci.h
 
+## SUFFIX OVERRIDE
 src/nci/extra_thunks$(O) : src/nci/extra_thunks.str \
-        $(PARROT_H_HEADERS) \
-        include/pmc/pmc_unmanagedstruct.h \
-        include/pmc/pmc_nci.h
+    $(PARROT_H_HEADERS) \
+    include/pmc/pmc_unmanagedstruct.h \
+    include/pmc/pmc_nci.h \
+    src/nci/extra_thunks.c
+	$(CC) $(CFLAGS) @optimize::src/nci/extra_thunks.c@ @ccwarn::src/nci/extra_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@ $@ -c src/nci/extra_thunks.c
 
 src/frame_builder$(O) : $(PARROT_H_HEADERS) src/frame_builder.h \
         include/pmc/pmc_fixedintegerarray.h \
@@ -1407,7 +1412,10 @@
 
 src/vtables$(O) : $(PARROT_H_HEADERS)
 
+## SUFFIX OVERRIDE
 src/gc/system$(O) : $(PARROT_H_HEADERS)  src/gc/gc_private.h
+	$(CC) $(CFLAGS) @optimize::src/gc/system.c@ @ccwarn::src/gc/system.c@ @cc_shared@ -I$(@D) @cc_o_out@ $@ -c src/gc/system.c
+
 src/gc/gc_private.h : $(INC_DIR)/settings.h
 
 src/warnings$(O) : $(PARROT_H_HEADERS)
@@ -1416,7 +1424,9 @@
 
 src/utils$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_nci.h
 
+## SUFFIX OVERRIDE
 src/spf_render$(O) : $(PARROT_H_HEADERS) src/spf_render.str
+	$(CC) $(CFLAGS) @optimize::src/spf_render.c@ @ccwarn::src/spf_render.c@ @cc_shared@ -I$(@D) @cc_o_out@ $@ -c src/spf_render.c
 
 src/spf_vtable$(O) : $(PARROT_H_HEADERS) src/spf_vtable.str
 
@@ -1449,15 +1459,14 @@
 
 src/atomic/gcc_x86$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic/gcc_x86.h
 
-src/ops/core_ops$(O) : src/ops/core_ops.c \
-	include/pmc/pmc_callcontext.h \
-	include/pmc/pmc_continuation.h \
-        include/pmc/pmc_parrotlibrary.h \
-        src/io/io_private.h $(INC_DIR)/dynext.h $(INC_DIR)/embed.h \
-        $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h
-
 # core_ops depends upon config.h so that it gets updated along with
 # updates to config.h's version numbers
+src/ops/core_ops$(O) : src/ops/core_ops.c \
+    include/pmc/pmc_callcontext.h \
+    include/pmc/pmc_continuation.h \
+    include/pmc/pmc_parrotlibrary.h \
+    src/io/io_private.h $(INC_DIR)/dynext.h $(INC_DIR)/embed.h \
+    $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h
 
 # .h files are built along with .c
 $(INC_DIR)/oplib/core_ops.h: src/ops/core_ops.c
@@ -1468,8 +1477,10 @@
 	include/pmc/pmc_continuation.h
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --core @no_lines_flag@
 
+## SUFFIX OVERRIDE
 src/ops/core_ops_switch$(O) : $(GENERAL_H_FILES) src/ops/core_ops_switch.c \
 	include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_switch.c@ @ccwarn::src/ops/core_ops_switch.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_switch.c
 
 $(INC_DIR)/oplib/core_ops_switch.h : src/ops/core_ops_switch.c
 
@@ -1479,7 +1490,27 @@
 	lib/Parrot/OpTrans/CPrederef.pm
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --core @no_lines_flag@
 
- at TEMP_cg_c@
+## SUFFIX OVERRIDE
+src/ops/core_ops_cg$(O): $(GENERAL_H_FILES) src/ops/core_ops_cg.c \
+        include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cg.c@ @ccwarn::src/ops/core_ops_cg.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cg.c
+
+## SUFFIX OVERRIDE
+src/ops/core_ops_cgp$(O): $(GENERAL_H_FILES) src/ops/core_ops_cgp.c \
+        include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cgp.c@ @ccwarn::src/ops/core_ops_cgp.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cgp.c
+
+src/runcore/cores.c: $(INC_DIR)/oplib/core_ops_cgp.h
+
+$(INC_DIR)/oplib/core_ops_cg.h: src/ops/core_ops_cg.c
+
+src/ops/core_ops_cg.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGoto.pm lib/Parrot/OpLib/core.pm
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --core
+
+$(INC_DIR)/oplib/core_ops_cgp.h: src/ops/core_ops_cgp.c
+
+src/ops/core_ops_cgp.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGP.pm lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CPrederef.pm
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --core
 
 @TEMP_gc_c@
 
@@ -1810,7 +1841,8 @@
     ext-clean \
 #UNLESS(win32):    cover-clean \
     editor-clean
-	@TEMP_cg_r@
+	$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c \
+    $(INC_DIR)/oplib/core_ops_cgp.h src/ops/core_ops_cgp.c
 	$(RM_F) chartypes "*.s" "*~"
 	$(RM_F) $(FLUID_FILES_1)
 	$(RM_F) $(FLUID_FILES_2)
@@ -2411,7 +2443,9 @@
 ###### OS depend targets ##########
 
 # for use by t/pmc/nci.t
-src/nci_test$(O): $(PARROT_H_HEADERS)
+## SUFFIX OVERRIDE - dynloaded files need cc_shared
+src/nci_test$(O): $(PARROT_H_HEADERS) src/nci_test.c
+	$(CC) $(CFLAGS) @optimize::src/nci_test.c@ @ccwarn::src/nci_test.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci_test.c
 
 $(LIBNCI_TEST_SO): src/nci_test$(O) $(LIBPARROT)
 	$(LD) $(LD_LOAD_FLAGS) @ncilib_link_extra@ $(LDFLAGS) \
@@ -2438,7 +2472,9 @@
 	$(NCI_THUNK_GEN) --dynext --no-warn-dups \
 	    --output=src/extra_nci_thunks.c <src/nci/extra_thunks.nci
 
-src/extra_nci_thunks$(O) : $(GENERAL_H_FILES)
+## SUFFIX OVERRIDE
+src/extra_nci_thunks$(O) : $(GENERAL_H_FILES) src/extra_nci_thunks.c
+	$(CC) $(CFLAGS) @optimize::src/extra_nci_thunks.c@ @ccwarn::src/extra_nci_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@ $@ -c src/extra_nci_thunks.c
 
 $(EXTRANCITHUNKS_SO) : $(LIBPARROT) src/extra_nci_thunks$(O)
 	$(LD) $(LD_LOAD_FLAGS) $(LDFLAGS) \

Modified: trunk/config/init/hints/darwin.pm
==============================================================================
--- trunk/config/init/hints/darwin.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/init/hints/darwin.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -90,8 +90,7 @@
         rpath                  => "-L",
         libparrot_soname       => "-install_name "
             . $lib_dir
-            . $conf->data->get('slash')
-            . "libparrot"
+            . '/libparrot'
             . $conf->data->get('share_ext')
     );
 }

Modified: trunk/config/init/hints/mswin32.pm
==============================================================================
--- trunk/config/init/hints/mswin32.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/init/hints/mswin32.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -101,7 +101,6 @@
             ar_flags            => '',
             ar_out              => '-out:',
             slash               => '\\',
-            blib_dir            => 'blib\\lib',
             ccflags             => $ccflags,
             ccwarn              => $ccwarn,
             has_dynamic_linking => 1,
@@ -153,7 +152,6 @@
             ar_flags            => '',
             ar_out              => '-out:',
             slash               => '\\',
-            blib_dir            => 'blib\\lib',
             ccflags             => $ccflags,
             ccwarn              => '',
             has_dynamic_linking => 1
@@ -200,7 +198,6 @@
             ar_out   => '',
             ar_extra => '',
             slash    => '\\',
-            blib_dir => 'blib\\lib',
             make_and => "\n\t",
         );
     }
@@ -261,7 +258,6 @@
             sym_export          => '__declspec(dllexport)',
             sym_import          => '__declspec(dllimport)',
             slash               => '\\',
-            blib_dir            => 'blib\\lib',
         );
     }
 }

Modified: trunk/config/init/optimize.pm
==============================================================================
--- trunk/config/init/optimize.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/init/optimize.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2005, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -21,10 +21,10 @@
 
 sub _init {
     my $self = shift;
-    my %data;
-    $data{description} = q{Enable optimization};
-    $data{result}      = q{};
-    return \%data;
+    return {
+        'description', 'Enable optimization',
+        'result',      '',
+    };
 }
 
 our $verbose;
@@ -41,41 +41,53 @@
     # A plain --optimize means use perl5's $Config{optimize}.  If an argument
     # is given, however, use that instead.
     my $optimize = $conf->options->get('optimize');
-    if ( defined $optimize ) {
-        $self->set_result('yes');
 
-        # disable debug flags
-        $conf->data->set( cc_debug => '' );
-        $conf->data->add( ' ', ccflags => "-DDISABLE_GC_DEBUG=1 -DNDEBUG" );
-        if ( $optimize eq "1" ) {
-
-            # use perl5's value
-            # gcc 4.1 doesn't like -mcpu=xx, i.e. it's deprecated
-            my $opts = $conf->data->get('optimize_provisional');
-            my $gccversion = $conf->data->get( 'gccversion' );
-            my $arch_opt = 'cpu';
-            if ( defined $gccversion and $gccversion > 3.3 ) {
-                $arch_opt = 'arch';
-            }
-            $opts =~ s/-mcpu=/-m$arch_opt=/;
-            $conf->data->add( ' ', ccflags => $opts );
-            print "opts: ", $opts, "\n" if $verbose;
-
-            # record what optimization was enabled
-            $conf->data->set( optimize => $opts );
-        }
-        else {
+    if (! defined $optimize) {
+        $self->set_result('no');
+        print "(none requested) " if $conf->options->get('verbose');
+        return 1;
+    }
 
-            # use what was passed to --optimize on the CLI
-            $conf->data->add( ' ', ccflags => $optimize );
+    $self->set_result('yes');
+    my $gccversion = $conf->data->get( 'gccversion' );
 
-            # record what optimization was enabled
-            $conf->data->set( optimize => $optimize );
+    my $options;
+    if ( $optimize eq "1" ) {
+        # start with perl5's flags ...
+        $options = $conf->data->get('optimize_provisional');
+
+        # ... but gcc 4.1 doesn't like -mcpu=xx, i.e. it's deprecated
+        if ( defined $gccversion and $gccversion > 3.3 ) {
+            $options =~ s/-mcpu=/-march=/;
         }
     }
     else {
-        $self->set_result('no');
-        print "(none requested) " if $conf->options->get('verbose');
+        # use the command line verbatim
+        $options = $optimize;
+    }
+
+    # save the options, however we got them.
+    $conf->data->set( optimize => $options );
+    print "optimize options: ", $options, "\n" if $verbose;
+
+    # disable debug flags.
+    $conf->data->set( cc_debug => '' );
+    $conf->data->add( ' ', ccflags => "-DDISABLE_GC_DEBUG=1 -DNDEBUG" );
+
+    # per file overrides - not every compiler can optimize every file.
+
+    # The src/ops/core_ops*.c files are challenging to optimize.
+    # gcc can usually handle it, but don't assume any other compilers can,
+    # until there is specific evidence otherwise.
+    if ( ! defined($gccversion)) {
+        $conf->data->set('optimize::src/ops/core_ops_cg.c','');
+        $conf->data->set('optimize::src/ops/core_ops_cgp.c','');
+        $conf->data->set('optimize::src/ops/core_ops_switch.c','');
+    }
+
+    # TT #405
+    if ($conf->data->get('cpuarch') eq 'amd64') {
+        $conf->data->set('optimize::src/gc/system.c','');
     }
 
     return 1;

Modified: trunk/config/inter/charset.pm
==============================================================================
--- trunk/config/inter/charset.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/inter/charset.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -75,8 +75,7 @@
     }
 
     # build list of libraries for link line in Makefile
-    my $slash = $conf->data->get('slash');
-    $TEMP_charset_o =~ s/^| / src${slash}string${slash}charset${slash}/g;
+    $TEMP_charset_o =~ s{^| }{ src/string/charset/}g;
 
     $conf->data->set(
         charset            => $charset_list,

Modified: trunk/config/inter/encoding.pm
==============================================================================
--- trunk/config/inter/encoding.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/inter/encoding.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -75,8 +75,7 @@
     }
 
     # build list of libraries for link line in Makefile
-    my $slash = $conf->data->get('slash');
-    $TEMP_encoding_o =~ s/^| / src${slash}string${slash}encoding${slash}/g;
+    $TEMP_encoding_o =~ s{^| }{ src/string/encoding/}g;
 
     $conf->data->set(
         encoding            => $encoding_list,

Modified: trunk/config/inter/libparrot.pm
==============================================================================
--- trunk/config/inter/libparrot.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/config/inter/libparrot.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -105,7 +105,7 @@
                                      && $conf->data->get('rpath') )
         ? $conf->data->get('rpath')
             . $conf->data->get('build_dir')
-            . $conf->data->get('slash')
+            . '/'
             . $conf->data->get('blib_dir')
         : ''
     );
@@ -144,7 +144,7 @@
         $conf->data->set(libparrot_linkflags =>
         '-L'
         . $conf->data->get('build_dir')
-        . $conf->data->get('slash')
+        . '/'
         . $conf->data->get('blib_dir')
         . ' -lparrot'
         );

Modified: trunk/lib/Parrot/Configure/Compiler.pm
==============================================================================
--- trunk/lib/Parrot/Configure/Compiler.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/lib/Parrot/Configure/Compiler.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -197,10 +197,15 @@
 
     $conf->genfile($source, $target, %options);
 
-Takes the specified source file, replacing entries like C<@FOO@> with
-C<FOO>'s value from the configuration system's data, and writes the results
+Takes the specified source file, replacing entries like C<@key@> with
+C<key>'s value from the configuration system's data, and writes the results
 to specified target file.
 
+If a C<::> is present in the C<@key@>, the replaced value will first try to
+use the full key, but if that is not present, the key up to the C<::> is used.
+For example, if C<@cc_warn::src/embed.c@> is used, and that key doesn't
+exist, the fallback key would be C<@cc_warn@>.
+
 Respects the following options when manipulating files (Note: most of the
 replacement syntax assumes the source text is on a single line.)
 
@@ -210,8 +215,8 @@
 
 If set to a C<makefile>, C<c> or C<perl> value, C<comment_type> will be set
 to corresponding value.
-Moreover, when set to a C<makefile> value, it will set C<replace_slashes> to
-enabled, and C<conditioned_lines> to enabled.
+Moreover, when set to a C<makefile> value, it will enable
+C<conditioned_lines>.
 
 Its value will be detected automatically by target file name unless you set
 it to a special value C<none>.
@@ -270,11 +275,6 @@
 
 will be used on "win32" and if "glut" is defined, but not on "cygwin".
 
-B<Legacy Syntax:>
-
-The old syntax #CONDITIONED_LINE(var): and
-#INVERSE_CONDITIONED_LINE(var): is still supported, but is deprecated.
-
 =item comment_type
 
 This option takes has two possible values, C<#> or C</*>. If present and
@@ -294,12 +294,6 @@
 this evaluation occurs, any substitution of @@ values is performed on the
 original text.
 
-=item replace_slashes
-
-If set to a true value, this causes any C</>s in the file to automatically
-be replaced with an architecture appropriate slash. C</> or C<\>. This is
-a very helpful option when writing Makefiles.
-
 =item expand_gmake_syntax
 
 If set to a true value, then certain types of I<gmake> syntax will be expanded
@@ -350,7 +344,7 @@
     open my $out, '>', "$target.tmp" or die "Can't open $target.tmp: $!";
 
     if ( !exists $options{file_type}) {
-        if ( $target =~ m/makefile$/i ) {
+        if ( $target =~ m/makefile$/i || $target =~ m/\.mak/) {
             $options{file_type} = 'makefile';
         }
         elsif ($target =~ m/\.p[lm]$/i ) {
@@ -378,7 +372,6 @@
                 $file_types_info{$options{file_type}}{comment_type};
         }
         if ( $options{file_type} eq 'makefile' ) {
-            $options{replace_slashes}   = 1;
             $options{conditioned_lines} = 1;
         }
     }
@@ -461,16 +454,6 @@
                 next LINE if $former_truth;
                 $line = $1;
             }
-            # Legacy, DEPRECATED.
-            elsif (($expr,$rest)=($line =~ m/^#CONDITIONED_LINE\(([^)]+)\):(.*)/s)) {
-                next LINE unless cond_eval($conf, $expr);
-                $line = $rest;
-            }
-            elsif (($expr,$rest)=($line =~ m/^#INVERSE_CONDITIONED_LINE\(([^)]+)\):(.*)/s )) {
-                next LINE if cond_eval($conf, $expr);
-                $line = $rest;
-            }
-
             else { # reset
                 $former_truth = -1; # ELSE must immediately follow a conditional.
             }
@@ -539,29 +522,29 @@
         # interpolate @foo@ values
         $line =~ s{ \@ (\w+) \@ }{
             if(defined(my $val=$conf->data->get($1))) {
-                #use Data::Dumper;warn Dumper("val for $1 is ",$val);
                 $val;
             }
             else {
-                warn "value for '$1' in $source is undef";
+                warn "value for '\@$1\@' in $source is undef";
                 '';
             }
         }egx;
 
-        if ( $options{replace_slashes} ) {
-            if ( $line =~ m{/$} ) {
-                croak "$source:$.: line ends in a slash\n";
+        # interpolate @foo::bar@ values
+        $line =~ s{ \@ (\w+) :: ([^\@]+) \@ }{
+            my $full = $1 . '::' . $2;
+            my $base = $1;
+            if(defined(my $val=$conf->data->get($full))) {
+                $val;
             }
-
-            $line =~ s{(/+)}{
-                my $len = length $1;
-                my $slash = $conf->data->get('slash');
-                '/' x ($len/2) . ($len%2 ? $slash : '');
-            }eg;
-
-            # replace \* with \\*, so make will not eat the \
-            $line =~ s{(\\\*)}{\\$1}g;
-        }
+            elsif(defined($val=$conf->data->get($base))) {
+                $val;
+            }
+            else {
+                warn "value for '\@$full\@' in $source is undef, no fallback";
+                '';
+            }
+        }egx;
 
         print $out $line;
     }

Modified: trunk/lib/Parrot/Configure/Step/List.pm
==============================================================================
--- trunk/lib/Parrot/Configure/Step/List.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/lib/Parrot/Configure/Step/List.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 package Parrot::Configure::Step::List;
 use strict;
@@ -23,6 +23,8 @@
     auto::msvc
     auto::attributes
     auto::warnings
+    auto::arch
+    auto::cpu
     init::optimize
     inter::shlibs
     inter::libparrot
@@ -37,10 +39,8 @@
     auto::va_ptr
     auto::format
     auto::isreg
-    auto::arch
     auto::jit
     auto::frames
-    auto::cpu
     auto::cgoto
     auto::inline
     auto::gc

Modified: trunk/lib/Parrot/Docs/File.pm
==============================================================================
--- trunk/lib/Parrot/Docs/File.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/lib/Parrot/Docs/File.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -109,7 +109,6 @@
 my %type_for_name = (
     'Artistic'             => 'Licence file',
     'BUGS'                 => 'Project info',
-    'CFLAGS'               => 'CFLAGS file',
     'ChangeLog'            => 'Project info',
     'Changes'              => 'Project info',
     'CREDITS'              => 'Project info',

Modified: trunk/lib/Parrot/Docs/Section/Tools.pm
==============================================================================
--- trunk/lib/Parrot/Docs/Section/Tools.pm	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/lib/Parrot/Docs/Section/Tools.pm	Fri Mar  5 16:20:00 2010	(r44649)
@@ -45,7 +45,6 @@
             'Configuration',
             '',
             $self->new_item( '', 'tools/dev/as2c.pl' ),
-            $self->new_item( '', 'tools/build/cc_flags.pl' ),
             $self->new_item( '', 'tools/build/vtable_h.pl' ),
             $self->new_item( '', 'tools/build/vtable_extend.pl' ),
         ),

Modified: trunk/src/call/args.c
==============================================================================
--- trunk/src/call/args.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/call/args.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -794,7 +794,6 @@
     PMC            *call_object;
     INTVAL         *int_array;
     PMC            * const ctx  = CURRENT_CONTEXT(interp);
-    INTVAL          returns_pos = 0;
     INTVAL          arg_index;
     INTVAL          arg_count;
 
@@ -820,7 +819,6 @@
     GETATTR_FixedIntegerArray_int_array(interp, raw_sig, int_array);
 
     for (arg_index = 0; arg_index < arg_count; arg_index++) {
-        STRING * const signature = CONST_STRING(interp, "signature");
         const INTVAL arg_flags = int_array[arg_index];
         const INTVAL raw_index = raw_args[arg_index + 2];
 
@@ -881,7 +879,6 @@
         ARGIN(const char *sig), va_list args)
 {
     ASSERT_ARGS(Parrot_pcc_build_sig_object_from_varargs)
-    PMC         *type_tuple         = PMCNULL;
     PMC         *arg_flags     = PMCNULL;
     PMC         *return_flags  = PMCNULL;
     PMC         * const call_object = Parrot_pmc_new(interp, enum_class_CallContext);
@@ -902,7 +899,6 @@
         const INTVAL type = sig[i];
 
         if (in_return_sig) {
-            STRING * const signature = CONST_STRING(interp, "signature");
             /* Returns store the original passed-in pointer so they can pass
              * the result back to the caller. */
             switch (type) {
@@ -1587,13 +1583,11 @@
     INTVAL *return_array       = NULL;
     INTVAL *result_array       = NULL;
     PMC    *result_sig         = NULL;
-    PMC    * const ctx         = CURRENT_CONTEXT(interp);
     PMC    *named_used_list    = PMCNULL;
     PMC    *named_return_list  = PMCNULL;
     INTVAL  return_index       = 0;
     INTVAL  return_subindex    = 0;
     INTVAL  result_index       = 0;
-    INTVAL  positional_index   = 0;
     INTVAL  named_count        = 0;
     INTVAL  err_check          = 0;
     INTVAL  positional_returns = 0; /* initialized by a loop later */
@@ -2740,6 +2734,7 @@
 intval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
 {
     ASSERT_ARGS(intval_constant_from_varargs)
+    UNUSED(index);
     PARROT_ASSERT(!"Wrong call");
     return 0;
 }
@@ -2748,6 +2743,7 @@
 numval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
 {
     ASSERT_ARGS(numval_constant_from_varargs)
+    UNUSED(index);
     PARROT_ASSERT(!"Wrong call");
     return 0.0;
 }
@@ -2757,6 +2753,7 @@
 string_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
 {
     ASSERT_ARGS(string_constant_from_varargs)
+    UNUSED(index);
     PARROT_ASSERT(!"Wrong call");
     return NULL;
 }
@@ -2766,6 +2763,7 @@
 pmc_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
 {
     ASSERT_ARGS(pmc_constant_from_varargs)
+    UNUSED(index);
     PARROT_ASSERT(!"Wrong call");
     return PMCNULL;
 }
@@ -3133,7 +3131,6 @@
     INTVAL  int_type;
 
     Parrot_String return_flags_name = Parrot_str_new_constant(interp, "return_flags");
-    Parrot_String sig_name          = Parrot_str_new_constant(interp, "signature");
 
     full_sig = VTABLE_get_string(interp, sig_object);
     /* Append ->[T] */

Modified: trunk/src/debug.c
==============================================================================
--- trunk/src/debug.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/debug.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -111,45 +111,11 @@
 static void list_breakpoints(ARGIN(PDB_t *pdb))
         __attribute__nonnull__(1);
 
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char * nextarg(ARGIN_NULLOK(const char *command));
-
 static void no_such_register(PARROT_INTERP,
     char register_type,
     UINTVAL register_num)
         __attribute__nonnull__(1);
 
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char * parse_int(ARGIN(const char *str), ARGOUT(int *intP))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*intP);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char* parse_key(PARROT_INTERP,
-    ARGIN(const char *str),
-    ARGOUT(PMC **keyP))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*keyP);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char * parse_string(PARROT_INTERP,
-    ARGIN(const char *str),
-    ARGOUT(STRING **strP))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*strP);
-
-PARROT_CANNOT_RETURN_NULL
-static const char * skip_command(ARGIN(const char *str))
-        __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
@@ -178,22 +144,8 @@
        PARROT_ASSERT_ARG(cmd))
 #define ASSERT_ARGS_list_breakpoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pdb))
-#define ASSERT_ARGS_nextarg __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_no_such_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_parse_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(str) \
-    , PARROT_ASSERT_ARG(intP))
-#define ASSERT_ARGS_parse_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(str) \
-    , PARROT_ASSERT_ARG(keyP))
-#define ASSERT_ARGS_parse_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(str) \
-    , PARROT_ASSERT_ARG(strP))
-#define ASSERT_ARGS_skip_command __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(str))
 #define ASSERT_ARGS_skip_whitespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(cmd))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -750,193 +702,6 @@
 
 /*
 
-=item C<static const char * nextarg(const char *command)>
-
-Returns the position just past the current argument in the PASM instruction
-C<command>. This is not the same as C<skip_command()>, which is intended for
-debugger commands. This function is used for C<eval>.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char *
-nextarg(ARGIN_NULLOK(const char *command))
-{
-    ASSERT_ARGS(nextarg)
-    /* as long as the character pointed to by command is not NULL,
-     * and it is either alphanumeric, a comma or a closing bracket,
-     * continue looking for the next argument.
-     */
-    if (command) {
-        while (isalnum((unsigned char) *command) || *command == ',' || *command == ']')
-            command++;
-
-        /* eat as much space as possible */
-        command = skip_whitespace(command);
-    }
-
-    return command;
-}
-
-/*
-
-=item C<static const char * skip_command(const char *str)>
-
-Returns the pointer past the current debugger command. (This is an
-alternative to the C<skip_command()> macro above.)
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static const char *
-skip_command(ARGIN(const char *str))
-{
-    ASSERT_ARGS(skip_command)
-    /* while str is not null and it contains a command (no spaces),
-     * skip the character
-     */
-    while (*str && !isspace((unsigned char) *str))
-        str++;
-
-    /* eat all space after that */
-    return skip_whitespace(str);
-}
-
-/*
-
-=item C<static const char * parse_int(const char *str, int *intP)>
-
-Parse an C<int> out of a string and return a pointer to just after the C<int>.
-The output parameter C<intP> contains the parsed value.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char *
-parse_int(ARGIN(const char *str), ARGOUT(int *intP))
-{
-    ASSERT_ARGS(parse_int)
-    char *end;
-
-    *intP = strtol(str, &end, 0);
-
-    return end;
-}
-
-/*
-
-=item C<static const char * parse_string(PARROT_INTERP, const char *str, STRING
-**strP)>
-
-Parse a double-quoted string out of a C string and return a pointer to
-just after the string. The parsed string is converted to a Parrot
-C<STRING> and placed in the output parameter C<strP>.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char *
-parse_string(PARROT_INTERP, ARGIN(const char *str), ARGOUT(STRING **strP))
-{
-    ASSERT_ARGS(parse_string)
-    const char *string_start;
-
-    /* if this is not a quoted string, there's nothing to parse */
-    if (*str != '"')
-        return NULL;
-
-    /* skip the quote */
-    str++;
-
-    string_start = str;
-
-    /* parse while there's no closing quote */
-    while (*str && *str != '"') {
-        /* skip any potentially escaped quotes */
-        if (*str == '\\' && str[1])
-            str += 2;
-        else
-            str++;
-    }
-
-    /* create the output STRING */
-    *strP = string_make(interp, string_start, (UINTVAL)(str - string_start),
-        NULL, 0);
-
-    /* skip the closing quote */
-    if (*str)
-        str++;
-
-    return str;
-}
-
-/*
-
-=item C<static const char* parse_key(PARROT_INTERP, const char *str, PMC
-**keyP)>
-
-Parse an aggregate key out of a string and return a pointer to just
-after the key. Currently only string and integer keys are allowed.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char*
-parse_key(PARROT_INTERP, ARGIN(const char *str), ARGOUT(PMC **keyP))
-{
-    ASSERT_ARGS(parse_key)
-    /* clear output parameter */
-    *keyP = NULL;
-
-    /* make sure it's a key */
-    if (*str != '[')
-        return NULL;
-
-    /* Skip [ */
-    str++;
-
-    /* if this is a string key, create a Parrot STRING */
-    if (*str == '"') {
-        STRING *parrot_string;
-        str   = parse_string(interp, str, &parrot_string);
-        *keyP = key_new_string(interp, parrot_string);
-    }
-    /* if this is a numeric key */
-    else if (isdigit((unsigned char) *str)) {
-        int value;
-        str   = parse_int(str, &value);
-        *keyP = key_new_integer(interp, (INTVAL) value);
-    }
-    /* unsupported case; neither a string nor a numeric key */
-    else {
-        return NULL;
-    }
-
-    /* hm, but if this doesn't match, it's probably an error */
-    /* XXX str can be NULL from parse_string() */
-    if (*str != ']')
-        return NULL;
-
-    /* skip the closing brace on the key */
-    return ++str;
-}
-
-/*
-
 =item C<static void debugger_cmdline(PARROT_INTERP)>
 
 Debugger command line.
@@ -1800,10 +1565,7 @@
     /* Allocate the new break point */
     newbreak = mem_gc_allocate_zeroed_typed(interp, PDB_breakpoint_t);
 
-    if (command) {
-        /*command = skip_command(command);*/
-    }
-    else {
+    if (! command) {
         Parrot_ex_throw_from_c_args(interp, NULL, 1,
             "NULL command passed to PDB_set_break");
     }
@@ -3328,7 +3090,6 @@
 {
     ASSERT_ARGS(PDB_eval)
 
-    PDB_t         *pdb = interp->pdb;
     Interp *warninterp = (interp->pdb && interp->pdb->debugger) ?
         interp->pdb->debugger : interp;
     TRACEDEB_MSG("PDB_eval");

Modified: trunk/src/dynpmc/rational.pmc
==============================================================================
--- trunk/src/dynpmc/rational.pmc	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/dynpmc/rational.pmc	Fri Mar  5 16:20:00 2010	(r44649)
@@ -193,34 +193,6 @@
 
 /*
 
-=item * static void rat_power_int(PARROT_INTERP, PMC *self, int value)
-
-Calculates the power of a Rational-PMC to an exponent value in-place.
-
-=cut
-
-*/
-static void rat_power_int(PARROT_INTERP, PMC *self, int value) {
-  #ifdef PARROT_HAS_GMP
-    mpz_t num, den;
-
-    mpq_get_num(num, RT(self));
-    mpq_get_den(den, RT(self));
-
-    mpz_pow_ui(num, num, (unsigned int) value);
-    mpq_set_num(RT(self), num);
-    mpz_clear(num);
-
-    mpz_pow_ui(den, den, (unsigned int) value);
-    mpq_set_den(RT(self), den);
-    mpz_clear(den);
-  #else
-    RAISE_EXCEPTION
-  #endif
-}
-
-/*
-
 =back
 
 =cut

Modified: trunk/src/embed.c
==============================================================================
--- trunk/src/embed.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/embed.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -32,11 +32,6 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-PARROT_OBSERVER
-static const char * op_name(PARROT_INTERP, int k)
-        __attribute__nonnull__(1);
-
 static void print_constant_table(PARROT_INTERP, ARGIN(PMC *output))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -53,8 +48,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-#define ASSERT_ARGS_op_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_print_constant_table __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(output))
@@ -669,26 +662,6 @@
 
 /*
 
-=item C<static const char * op_name(PARROT_INTERP, int k)>
-
-Returns the name of the opcode.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_OBSERVER
-static const char *
-op_name(PARROT_INTERP, int k)
-{
-    ASSERT_ARGS(op_name)
-    return interp->op_info_table[k].full_name;
-}
-
-
-/*
-
 =item C<static void print_debug(PARROT_INTERP, int status, void *p)>
 
 Prints GC info.

Modified: trunk/src/frame_builder.c
==============================================================================
--- trunk/src/frame_builder.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/frame_builder.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -39,7 +39,7 @@
 */
 
 void
-Parrot_jit_free_buffer(PARROT_INTERP, void *ptr, void *priv)
+Parrot_jit_free_buffer(SHIM_INTERP, void *ptr, void *priv)
 {
     const struct jit_buffer_private_data * const jit = (struct jit_buffer_private_data*)priv;
     mem_free_executable(ptr, jit->size);
@@ -312,6 +312,8 @@
     int temp_calls_offset  = args_offset - 16;
     int total_stack_needed = -temp_calls_offset;
 
+    UNUSED(pmc_nci);
+
     /*
      * ESP
      * 0-15, 16 bytes for utility calls

Modified: trunk/src/gc/mark_sweep.c
==============================================================================
--- trunk/src/gc/mark_sweep.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/gc/mark_sweep.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -41,12 +41,6 @@
         FUNC_MODIFIES(*pool)
         FUNC_MODIFIES(*b);
 
-static void free_buffer_malloc(SHIM_INTERP,
-    SHIM(Fixed_Size_Pool *pool),
-    ARGMOD(Buffer *b))
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*b);
-
 static void free_pmc_in_pool(PARROT_INTERP,
     ARGIN(Memory_Pools *mem_pools),
     SHIM(Fixed_Size_Pool *pool),
@@ -98,8 +92,6 @@
        PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_free_buffer_malloc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_free_pmc_in_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -287,8 +279,6 @@
     gc_object_fn_type   gc_object   = pool->gc_object;
     UINTVAL             total_used  = 0;
     const UINTVAL       object_size = pool->object_size;
-    UINTVAL             i;
-
 
     /* Run through all the PObj header pools and mark */
     for (cur_arena = pool->last_Arena; cur_arena; cur_arena = cur_arena->prev) {
@@ -472,7 +462,6 @@
         ARGMOD(Fixed_Size_Arena *arena))
 {
     ASSERT_ARGS(Parrot_add_to_free_list)
-    UINTVAL  i;
     void    *object;
     const UINTVAL num_objects = pool->objects_per_alloc;
 
@@ -708,42 +697,6 @@
 
 /*
 
-=item C<static void free_buffer_malloc(PARROT_INTERP, Fixed_Size_Pool *pool,
-Buffer *b)>
-
-Frees the given buffer, returning the storage space to the operating system
-and removing it from Parrot's memory management system. If the buffer is COW,
-The buffer is not freed if the reference count is greater then 1.
-
-=cut
-
-*/
-
-static void
-free_buffer_malloc(SHIM_INTERP, SHIM(Fixed_Size_Pool *pool),
-        ARGMOD(Buffer *b))
-{
-    ASSERT_ARGS(free_buffer_malloc)
-    /* free allocated space at (int *)bufstart - 1, but not if it used COW or is
-     * external */
-    Buffer_buflen(b) = 0;
-
-    if (!Buffer_bufstart(b) || PObj_is_external_or_free_TESTALL(b))
-        return;
-
-    if (PObj_COW_TEST(b)) {
-        INTVAL * const refcount = Buffer_bufrefcountptr(b);
-
-        if (--(*refcount) == 0) {
-            mem_sys_free(refcount); /* the actual bufstart */
-        }
-    }
-    else
-        mem_sys_free(Buffer_bufrefcountptr(b));
-}
-
-/*
-
 =item C<static void free_buffer(PARROT_INTERP, Memory_Pools *mem_pools,
 Fixed_Size_Pool *pool, Buffer *b)>
 
@@ -1035,9 +988,8 @@
 Parrot_gc_allocate_new_attributes_arena(PARROT_INTERP, ARGMOD(PMC_Attribute_Pool *pool))
 {
     ASSERT_ARGS(Parrot_gc_allocate_new_attributes_arena)
-    PMC_Attribute_Free_List *list, *next, *first;
+    PMC_Attribute_Free_List *next;
 
-    size_t       i;
     const size_t num_items  = pool->objects_per_alloc;
     const size_t item_size  = pool->attr_size;
     const size_t item_space = item_size * num_items;

Modified: trunk/src/multidispatch.c
==============================================================================
--- trunk/src/multidispatch.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/multidispatch.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -51,7 +51,6 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static INTVAL distance_cmp(SHIM_INTERP, INTVAL a, INTVAL b);
 static void mmd_add_multi_global(PARROT_INTERP,
     ARGIN(STRING *sub_name),
     ARGIN(PMC *sub_obj))
@@ -129,13 +128,6 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-static int mmd_search_local(PARROT_INTERP,
-    ARGIN(STRING *name),
-    ARGIN(PMC *candidates))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static PMC * Parrot_mmd_get_cached_multi_sig(PARROT_INTERP,
@@ -151,12 +143,6 @@
         __attribute__nonnull__(3);
 
 PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static PMC* Parrot_mmd_search_scopes(PARROT_INTERP, ARGIN(STRING *meth))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
 static PMC * Parrot_mmd_sort_candidates(PARROT_INTERP,
     ARGIN(PMC *arg_tuple),
     ARGIN(PMC *cl))
@@ -164,7 +150,6 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-#define ASSERT_ARGS_distance_cmp __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_mmd_add_multi_global __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub_name) \
@@ -206,10 +191,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(cl))
-#define ASSERT_ARGS_mmd_search_local __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(name) \
-    , PARROT_ASSERT_ARG(candidates))
 #define ASSERT_ARGS_Parrot_mmd_get_cached_multi_sig \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -218,9 +199,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc) \
     , PARROT_ASSERT_ARG(cl))
-#define ASSERT_ARGS_Parrot_mmd_search_scopes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(meth))
 #define ASSERT_ARGS_Parrot_mmd_sort_candidates __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(arg_tuple) \
@@ -389,41 +367,6 @@
         VTABLE_get_pmc(interp, invoke_sig), candidates);
 }
 
-
-
-/*
-
-=item C<static INTVAL distance_cmp(PARROT_INTERP, INTVAL a, INTVAL b)>
-
-Compare distance values C<a> and C<b>. Return 1 if C<a> is larger, -1 if
-C<b> is.
-
-=cut
-
-*/
-
-static INTVAL
-distance_cmp(SHIM_INTERP, INTVAL a, INTVAL b)
-{
-    ASSERT_ARGS(distance_cmp)
-    short da = (short)(a & 0xffff);
-    short db = (short)(b & 0xffff);
-
-    /* sort first by distance */
-    if (da > db)
-        return 1;
-
-    if (da < db)
-        return -1;
-
-    /* end then by index in candidate list */
-    da = (short)(a >> 16);
-    db = (short)(b >> 16);
-
-    return da > db ? 1 : da < db ? -1 : 0;
-}
-
-
 /*
 
 =item C<static PMC* mmd_build_type_tuple_from_type_list(PARROT_INTERP, PMC
@@ -515,7 +458,6 @@
     ASSERT_ARGS(Parrot_mmd_build_type_tuple_from_sig_obj)
     PMC * const  type_tuple = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
     STRING      *string_sig = VTABLE_get_string(interp, sig_obj);
-    INTVAL       tuple_size = 0;
     INTVAL       args_ended = 0;
     INTVAL       i, seen_invocant = 0;
     INTVAL       sig_len;
@@ -884,33 +826,6 @@
 
 /*
 
-=item C<static PMC* Parrot_mmd_search_scopes(PARROT_INTERP, STRING *meth)>
-
-Search all scopes for MMD candidates matching the arguments given in
-C<arg_tuple>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static PMC*
-Parrot_mmd_search_scopes(PARROT_INTERP, ARGIN(STRING *meth))
-{
-    ASSERT_ARGS(Parrot_mmd_search_scopes)
-    PMC * const candidates = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-    const int stop         = mmd_search_local(interp, meth, candidates);
-
-    if (!stop)
-        mmd_search_global(interp, meth, candidates);
-
-    return candidates;
-}
-
-
-/*
-
 =item C<static int Parrot_mmd_maybe_candidate(PARROT_INTERP, PMC *pmc, PMC *cl)>
 
 If the candidate C<pmc> is a Sub PMC, push it on the candidate list and
@@ -956,28 +871,6 @@
 
 /*
 
-=item C<static int mmd_search_local(PARROT_INTERP, STRING *name, PMC
-*candidates)>
-
-Search the current package namespace for matching candidates. Return
-TRUE if the MMD search should stop.
-
-=cut
-
-*/
-
-static int
-mmd_search_local(PARROT_INTERP, ARGIN(STRING *name), ARGIN(PMC *candidates))
-{
-    ASSERT_ARGS(mmd_search_local)
-    PMC * const multi_sub = Parrot_find_global_cur(interp, name);
-
-    return multi_sub && Parrot_mmd_maybe_candidate(interp, multi_sub, candidates);
-}
-
-
-/*
-
 =item C<static void mmd_search_by_sig_obj(PARROT_INTERP, STRING *name, PMC
 *sig_obj, PMC *candidates)>
 

Modified: trunk/src/packfile.c
==============================================================================
--- trunk/src/packfile.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/packfile.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -2826,7 +2826,6 @@
     const PackFile_Debug * const debug = (const PackFile_Debug *)self;
 
     opcode_t i;
-    size_t   j;
 
     default_dump_header(interp, self);
 

Modified: trunk/src/parrot_debugger.c
==============================================================================
--- trunk/src/parrot_debugger.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/parrot_debugger.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -249,7 +249,7 @@
         STRING *compiler = Parrot_str_new_constant(interp, "PIR");
         STRING *errstr = NULL;
         const char source []= ".sub aux :main\nexit 0\n.end\n";
-        PMC *code = Parrot_compile_string(interp, compiler, source, &errstr);
+        Parrot_compile_string(interp, compiler, source, &errstr);
 
         if (!STRING_is_null(interp, errstr))
             Parrot_io_eprintf(interp, "%Ss\n", errstr);

Modified: trunk/src/pbc_merge.c
==============================================================================
--- trunk/src/pbc_merge.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/pbc_merge.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -724,7 +724,6 @@
     ASSERT_ARGS(pbc_merge_begin)
     PackFile_ByteCode   *bc;
     PackFile_ConstTable *ct;
-    opcode_t             const_count = 0;
     int                  i;
 
     /* Create a new empty packfile. */

Modified: trunk/src/pmc.c
==============================================================================
--- trunk/src/pmc.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/pmc.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -252,7 +252,7 @@
 
     ASSERT_ARGS(Parrot_pmc_reuse_noinit)
     VTABLE *new_vtable;
-    INTVAL  has_ext, new_flags = 0;
+    INTVAL  new_flags = 0;
 
     if (pmc->vtable->base_type == new_type)
         return pmc;

Modified: trunk/src/pmc/callcontext.pmc
==============================================================================
--- trunk/src/pmc/callcontext.pmc	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/pmc/callcontext.pmc	Fri Mar  5 16:20:00 2010	(r44649)
@@ -49,18 +49,6 @@
 #define STRINGCELL 2
 #define PMCCELL    3
 
-#define SET_CELL_INT(c) \
-        INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | INTCELL)
-
-#define SET_CELL_FLOAT(c) \
-        INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | FLOATCELL)
-
-#define SET_CELL_STRING(c) \
-        INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | STRINGCELL)
-
-#define SET_CELL_PMC(c) \
-        INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | PMCCELL)
-
 #define ALLOC_CELL(i) \
     (Pcc_cell *)Parrot_gc_allocate_fixed_size_storage((i), sizeof (Pcc_cell))
 
@@ -1133,8 +1121,6 @@
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_INT(cell);
 
         CELL_INT(cell) = value;
     }
@@ -1148,8 +1134,6 @@
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_FLOAT(cell);
 
         CELL_FLOAT(cell) = value;
     }
@@ -1163,8 +1147,6 @@
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_STRING(cell);
 
         CELL_STRING(cell) = value;
     }
@@ -1178,8 +1160,6 @@
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_PMC(cell);
 
         CELL_PMC(cell) = value;
     }
@@ -1194,8 +1174,6 @@
             parrot_hash_put(INTERP, hash, k, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_INT(cell);
 
         CELL_INT(cell) = value;
     }
@@ -1210,8 +1188,6 @@
             parrot_hash_put(INTERP, hash, k, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_FLOAT(cell);
 
         CELL_FLOAT(cell) = value;
     }
@@ -1226,8 +1202,6 @@
             parrot_hash_put(INTERP, hash, k, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_STRING(cell);
 
         CELL_STRING(cell) = value;
     }
@@ -1242,8 +1216,6 @@
             parrot_hash_put(INTERP, hash, k, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_PMC(cell);
 
         CELL_PMC(cell) = value;
     }

Modified: trunk/src/pmc/null.pmc
==============================================================================
--- trunk/src/pmc/null.pmc	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/pmc/null.pmc	Fri Mar  5 16:20:00 2010	(r44649)
@@ -41,17 +41,21 @@
 */
 
     VTABLE void init() {
+        UNUSED(interp)
     }
 
     VTABLE void *get_pointer() {
+        UNUSED(interp)
         return PMCNULL;
     }
 
     VTABLE void set_pointer(void *p) {
+        UNUSED(interp)
         PMCNULL = (PMC *)p;
     }
 
     VTABLE INTVAL does(STRING *what) {
+        UNUSED(interp)
         UNUSED(what)
         /* XXX maybe a hack to get TGE running again */
         return 0;

Modified: trunk/src/pmc/orderedhash.pmc
==============================================================================
--- trunk/src/pmc/orderedhash.pmc	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/pmc/orderedhash.pmc	Fri Mar  5 16:20:00 2010	(r44649)
@@ -77,17 +77,6 @@
 
 */
 
-/* Create new stored item. FixedPMCArray of (key, value, prev, next). */
-static PMC*
-create_item(PARROT_INTERP, ARGIN(PMC *key), ARGIN(PMC *value)) {
-    PMC *ret = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
-    VTABLE_set_integer_native(interp, ret, ORDERED_HASH_ITEM_MAX);
-
-    VTABLE_set_pmc_keyed_int(interp, ret, ORDERED_HASH_ITEM_KEY, key);
-    VTABLE_set_pmc_keyed_int(interp, ret, ORDERED_HASH_ITEM_VALUE, value);
-    return ret;
-}
-
 /* Get list_item by index */
 static PMC*
 get_list_item(PARROT_INTERP, ARGIN(PMC *self), INTVAL idx) {

Modified: trunk/src/runcore/main.c
==============================================================================
--- trunk/src/runcore/main.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/runcore/main.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -585,15 +585,14 @@
     const size_t n_tot    = n_old + n_new;
     op_func_t   *ops_addr = NULL;
     op_lib_t    *cg_lib   = init_func(interp, 1);
-    op_lib_t    *new_lib;
 
 #if 0
     /* related to CG and CGP ops issue below */
+    op_lib_t    *new_lib;
     STRING *op_variant;
-#endif
-
     oplib_init_f new_init_func;
     PMC *lib_variant;
+#endif
 
     if (cg_lib->flags & OP_FUNC_IS_ALLOCATED) {
         ops_addr = mem_gc_realloc_n_typed_zeroed(interp,

Modified: trunk/src/string/api.c
==============================================================================
--- trunk/src/string/api.c	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/src/string/api.c	Fri Mar  5 16:20:00 2010	(r44649)
@@ -2822,9 +2822,6 @@
     const CHARSET  *charset;
     const ENCODING *encoding = NULL;
 
-    /* the default encoding is ascii */
-    const char     *enc_name = enc_char ? enc_char : "ascii";
-
     /* does the encoding have a character set? */
     const char     *p        = enc_char ? strchr(enc_char, ':') : NULL;
     size_t          clength  = strlen(cstring);

Modified: trunk/t/configure/034-step.t
==============================================================================
--- trunk/t/configure/034-step.t	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/t/configure/034-step.t	Fri Mar  5 16:20:00 2010	(r44649)
@@ -114,7 +114,7 @@
         \$stderr
     );
     ok($rv, "genfile() returned true when warning expected" );
-    like( $stderr, qr/value for 'foobar'/, "got expected warning" );
+    like( $stderr, qr/value for '\@foobar\@'/, "got expected warning" );
 
     unlink $dummy or croak "Unable to delete file after testing";
     chdir $cwd    or croak "Unable to change back to starting directory";

Modified: trunk/t/steps/auto/cgoto-01.t
==============================================================================
--- trunk/t/steps/auto/cgoto-01.t	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/t/steps/auto/cgoto-01.t	Fri Mar  5 16:20:00 2010	(r44649)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests =>  45;
+use Test::More tests =>  25;
 use Carp;
 use lib qw( lib t/configure/testlib );
 use_ok('config::auto::cgoto');
@@ -37,10 +37,6 @@
 my $ret = $step->runstep($conf);
 ok( $ret, "runstep() returned true value" );
 ok(defined($step->result()), "A result was defined");
-ok(defined($conf->data->get('TEMP_cg_h')), "An attribute has been defined");
-ok(defined($conf->data->get('TEMP_cg_c')), "An attribute has been defined");
-ok(defined($conf->data->get('TEMP_cg_o')), "An attribute has been defined");
-ok(defined($conf->data->get('TEMP_cg_r')), "An attribute has been defined");
 ok(defined($conf->data->get('cg_flag')), "An attribute has been defined");
 
 $conf->replenish($serialized);
@@ -68,18 +64,10 @@
 ########### _evaluate_cgoto() ###########
 
 $step->_evaluate_cgoto($conf, 1);
-ok($conf->data->get('TEMP_cg_h'), "An attribute was set to true value");
-ok($conf->data->get('TEMP_cg_c'), "An attribute was set to true value");
-ok($conf->data->get('TEMP_cg_o'), "An attribute was set to true value");
-ok($conf->data->get('TEMP_cg_r'), "An attribute was set to true value");
 ok($conf->data->get('cg_flag'), "An attribute was set to true value");
 is($step->result(), q{yes}, "Expected result was set");
 
 $step->_evaluate_cgoto($conf, 0);
-is($conf->data->get('TEMP_cg_h'), q{}, "An attribute was set to empty string");
-is($conf->data->get('TEMP_cg_c'), q{}, "An attribute was set to empty string");
-is($conf->data->get('TEMP_cg_o'), q{}, "An attribute was set to empty string");
-is($conf->data->get('TEMP_cg_r'), q{}, "An attribute was set to empty string");
 is($conf->data->get('cg_flag'), q{}, "An attribute was set to empty string");
 is($step->result(), q{no}, "Expected result was set");
 
@@ -99,10 +87,6 @@
         sub { $step->_evaluate_cgoto($conf, 1) },
         \$stdout
     );
-    ok($conf->data->get('TEMP_cg_h'), "An attribute was set to true value");
-    ok($conf->data->get('TEMP_cg_c'), "An attribute was set to true value");
-    ok($conf->data->get('TEMP_cg_o'), "An attribute was set to true value");
-    ok($conf->data->get('TEMP_cg_r'), "An attribute was set to true value");
     ok($conf->data->get('cg_flag'), "An attribute was set to true value");
     is($step->result(), q{yes}, "Expected result was set");
 }
@@ -113,14 +97,6 @@
         sub { $step->_evaluate_cgoto($conf, 0) },
         \$stdout
     );
-    is($conf->data->get('TEMP_cg_h'), q{},
-        "An attribute was set to empty string");
-    is($conf->data->get('TEMP_cg_c'), q{},
-        "An attribute was set to empty string");
-    is($conf->data->get('TEMP_cg_o'), q{},
-        "An attribute was set to empty string");
-    is($conf->data->get('TEMP_cg_r'), q{},
-        "An attribute was set to empty string");
     is($conf->data->get('cg_flag'), q{},
         "An attribute was set to empty string");
     is($step->result(), q{no}, "Expected result was set");

Modified: trunk/t/steps/auto/warnings-01.t
==============================================================================
--- trunk/t/steps/auto/warnings-01.t	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/t/steps/auto/warnings-01.t	Fri Mar  5 16:20:00 2010	(r44649)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests =>  41;
+use Test::More qw(no_plan); # tests =>  26;
 use Carp;
 use lib qw( lib t/configure/testlib );
 use_ok('config::auto::warnings');
@@ -31,111 +31,59 @@
 $conf->add_steps($pkg);
 
 my $serialized = $conf->pcfreeze();
+my $step;
 
-$conf->options->set( %{$args} );
 SKIP: {
     skip 'Tests not yet passing on Sun/Solaris',
-    39
+    23
     if $^O =~ m/sun|solaris/i;
 
-my $step = test_step_constructor_and_description($conf);
-
-my %potential_warnings_seen;
-$conf->options->set(cage => 1);
-$step->_add_cage_warnings($conf);
-%potential_warnings_seen = map { $_, 1 } @{ $step->{potential_warnings} };
-ok($potential_warnings_seen{'-std=c89'}, "Cage warning added");
-
-$conf->replenish($serialized);
+# Simulate the  case where C compiler is not gcc.
 $conf->options->set( %{$args} );
 $step = test_step_constructor_and_description($conf);
-$conf->options->set(maintainer => 1);
-$step->_add_maintainer_warnings($conf);
-%potential_warnings_seen = map { $_, 1 } @{ $step->{potential_warnings} };
-ok($potential_warnings_seen{'-Wlarger-than-4096'}, "Maintainer warning added");
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my $warning = q{-Wphony_warning};
-auto::warnings::_set_warning($conf, $warning, 1, undef);
-ok(! $conf->data->get($warning),
-    "Got expected setting for warning");
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-{
-    my $warning = q{-Wphony_warning};
-    my $stdout;
-    capture(
-        sub { auto::warnings::_set_warning($conf, $warning, 1, 1); },
-        \$stdout,
-    );
-    ok(! $conf->data->get($warning),
-        "Got expected setting for warning");
-    like($stdout, qr/exit code:\s+1/, "Got expected verbose output");
-}
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my $output = q{some string};
-my $tryflags = q{some flag};
-my $rv = auto::warnings::_set_ccflags($conf, $output, $tryflags, undef);
-is($rv, 1, "_set_ccflags() returned 1 as expected");
-is($conf->data->get("ccflags"), $tryflags, "ccflags changed as expected");
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-{
-    my $output = q{some string};
-    my $tryflags = q{some flag};
-    my ($rv, $stdout);
-    capture(
-        sub { $rv = auto::warnings::_set_ccflags($conf, $output, $tryflags, 1); },
-        \$stdout,
-    );
-    is($rv, 1, "_set_ccflags() returned 1 as expected");
-    is($conf->data->get("ccflags"), $tryflags, "ccflags changed as expected");
-    like($stdout, qr/ccflags:\s+$tryflags/, "Got expected verbose output");
-}
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-# Mock case where C compiler is not gcc.
 $conf->data->set( gccversion => undef );
 ok($step->runstep($conf), "runstep() returned true value");
 is($step->result(), q{skipped}, "Got expected result");
 
+$step->set_result( undef );
 $conf->replenish($serialized);
 
-$conf->options->set( %{$args} );
+# Simulate the case where C compiler is not gcc:  verbose
+$conf->options->set( verbose => 1 );
 $step = test_step_constructor_and_description($conf);
+$conf->data->set( gccversion => undef );
 {
-    my ($stdout, $rv);
-    # Mock case where C compiler is not gcc.
-    $conf->data->set( gccversion => undef );
-    $conf->options->set( verbose => 1 );
+    my ($stdout, $stderr, $rv);
     capture(
         sub { $rv = $step->runstep($conf); },
         \$stdout,
+        \$stderr,
     );
     ok($rv, "runstep() returned true value");
     is($step->result(), q{skipped}, "Got expected result");
-    like($stdout,
-        qr/Currently we only set warnings/,
-        "Got expected verbose output"
-    );
+    like($stdout, qr/We do not \(yet\) probe for warnings for your compiler/s,
+        "Got expected verbose output: compiler with warnings not yet supported" );
 }
 
+$step->set_result( undef );
+$conf->replenish($serialized);
+
+# Simulate case where --cage warnings are requested
+$conf->options->set( verbose => undef );
+$step = test_step_constructor_and_description($conf);
+$conf->data->set( gccversion => 'defined' );
+$conf->data->set( 'g++' => undef );
+$conf->options->set( cage => 1 );
+ok($step->runstep($conf), "runstep() returned true value");
+
+# This test is fragile, as it depends on the current state of --cage,
+# which changes over time, and on the compiler, which may not support
+# this option.
+like($conf->data->get( 'ccwarn' ),
+    qr/-Wunreachable-code/,
+    "'cage' warning set as expected"
+);
+
 } # End SKIP block for Sun/Solaris
 
 $conf->cc_clean();

Modified: trunk/t/steps/gen/makefiles-01.t
==============================================================================
--- trunk/t/steps/gen/makefiles-01.t	Fri Mar  5 15:05:42 2010	(r44648)
+++ trunk/t/steps/gen/makefiles-01.t	Fri Mar  5 16:20:00 2010	(r44649)
@@ -68,16 +68,10 @@
        #["IF(value == xx)",                 0], # invalid op error
        #["IF(value = xx)",                  0], # invalid op error
        ["IF(value=xx)",                     0], # also invalid, no warning. checks for key value=xx
-
-       # Legacy syntax                 true or false
-       ["CONDITIONED_LINE(true)",           1],
-       ["INVERSE_CONDITIONED_LINE(true)",   0],
-       ["CONDITIONED_LINE(false)",          0],
-       ["INVERSE_CONDITIONED_LINE(false)",  1],
       );
 }
 
-use Test::More tests => (8 + @cond_tests);
+use Test::More tests => (7 + @cond_tests);
 use Carp;
 use lib qw( . lib );
 
@@ -114,7 +108,6 @@
 }
 
 is($missing_SOURCE, 0, "No Makefile source file missing");
-ok(-f $step->{CFLAGS_source}, "CFLAGS source file located");
 
 my $index = undef;
 sub result {

Deleted: trunk/tools/build/cc_flags.pl
==============================================================================
--- trunk/tools/build/cc_flags.pl	Fri Mar  5 16:20:00 2010	(r44648)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,131 +0,0 @@
-#! perl
-################################################################################
-# Copyright (C) 2001-2003, Parrot Foundation.
-# $Id$
-################################################################################
-
-=head1 NAME
-
-tools/build/cc_flags.pl - Process compiler flags
-
-=head1 SYNOPSIS
-
-    % perl tools/build/cc_flags.pl transform compiler flags
-
-=head1 DESCRIPTION
-
-This script is used in a F<Makefile> to process the flags to pass to the
-compiler for each C file.
-
-See F<config/gen/makefiles/CFLAGS.in> for the transformation file format.
-
-=cut
-
-################################################################################
-
-use strict;
-use warnings;
-
-my $cflags = shift;
-
-open my $F, '<', $cflags or die "open $cflags: $!\n";
-
-my @options;
-
-while (<$F>) {
-    chomp;
-    s/#.*//;
-    next unless /\S/;
-
-    my $regex;
-    if (s/^\{(.*?)\}\s*//) {
-        next unless $1;
-        $regex = qr/$1/;
-    }
-    elsif (s/^(\S+)\s*//) {
-        $regex = qr/^\Q$1\E$/;
-    }
-    else {
-        die "syntax error in $cflags: line $., $_\n";
-    }
-
-    for ( ; ; ) {
-        if (s/^([-+])\{(.*?)\}\s*//) {
-            next unless $2;
-            my ( $sign, $options ) = ( $1, $2 );
-            foreach my $option ( split ' ', $options ) {
-                push @options, [ $regex, $sign, $option ];
-            }
-        }
-        elsif (s{s(.)(.*?)\1(.*?)\1([imsx]*)\s*}{}) {
-            my $mod = "";
-            $mod = "(?$4)" if $4;
-
-            push @options, [ $regex, 's', "$mod$2", $3 ];
-        }
-        elsif (/\S/) {
-            die "syntax error in $cflags: line $., $_\n";
-        }
-        else {
-            last;
-        }
-    }
-}
-
-my ($cfile) = grep /\.c$/, @ARGV;
-
-my ( $inject_point, $where );
-
-foreach (@ARGV) {
-    last if $_ eq '';
-    ++$where;
-}
-if ($where) {
-
-    # Found a "" - remove it
-    splice @ARGV, $where, 1;
-    $inject_point = $where;
-}
-else {
-    $inject_point = 1;
-}
-
-if ($cfile) {
-    foreach my $option (@options) {
-        if ( $cfile =~ $option->[0] ) {
-            if ( $option->[1] eq '+' ) {
-                splice @ARGV, $inject_point, 0, $option->[2];
-            }
-            elsif ( $option->[1] eq '-' ) {
-                @ARGV = grep { $_ ne $option->[2] } @ARGV;
-            }
-            else {
-                foreach my $arg (@ARGV) {
-                    $arg =~ s/$option->[2]/$option->[3]/;
-                }
-            }
-        }
-    }
-
-    # Visual C++ already prints the source file name...
-    if ( $ARGV[0] =~ /cl(?:\.exe)?/i ) {
-
-        # ...but only the file name, so we print the path
-        # to the directory first
-        if ( $cfile =~ /(.*[\/\\])/ ) {
-            print $1;
-        }
-    }
-    else {
-        print "$cfile\n";
-    }
-}
-
-exit system(@ARGV) / 256;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:


More information about the parrot-commits mailing list