[llvm-commits] [llvm] r50615 - in /llvm/trunk: docs/CommandGuide/llvmc.pod tools/llvmc/CompilerDriver.cpp tools/llvmc/CompilerDriver.h tools/llvmc/ConfigLexer.cpp.cvs tools/llvmc/ConfigLexer.h tools/llvmc/ConfigLexer.l tools/llvmc/ConfigLexer.l.cvs tools/llvmc/Configuration.cpp tools/llvmc/Configuration.h tools/llvmc/LICENSE.TXT tools/llvmc/Makefile tools/llvmc/c tools/llvmc/cpp tools/llvmc/ll tools/llvmc/llvmc.cpp tools/llvmc/st

Anton Korobeynikov asl at math.spbu.ru
Sat May 3 23:19:55 PDT 2008


Author: asl
Date: Sun May  4 01:19:55 2008
New Revision: 50615

URL: http://llvm.org/viewvc/llvm-project?rev=50615&view=rev
Log:
Drop llvmc also, it will be replaced by shiny new llvmc2

Removed:
    llvm/trunk/docs/CommandGuide/llvmc.pod
    llvm/trunk/tools/llvmc/CompilerDriver.cpp
    llvm/trunk/tools/llvmc/CompilerDriver.h
    llvm/trunk/tools/llvmc/ConfigLexer.cpp.cvs
    llvm/trunk/tools/llvmc/ConfigLexer.h
    llvm/trunk/tools/llvmc/ConfigLexer.l
    llvm/trunk/tools/llvmc/ConfigLexer.l.cvs
    llvm/trunk/tools/llvmc/Configuration.cpp
    llvm/trunk/tools/llvmc/Configuration.h
    llvm/trunk/tools/llvmc/LICENSE.TXT
    llvm/trunk/tools/llvmc/Makefile
    llvm/trunk/tools/llvmc/c
    llvm/trunk/tools/llvmc/cpp
    llvm/trunk/tools/llvmc/ll
    llvm/trunk/tools/llvmc/llvmc.cpp
    llvm/trunk/tools/llvmc/st

Removed: llvm/trunk/docs/CommandGuide/llvmc.pod
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CommandGuide/llvmc.pod?rev=50614&view=auto

==============================================================================
--- llvm/trunk/docs/CommandGuide/llvmc.pod (original)
+++ llvm/trunk/docs/CommandGuide/llvmc.pod (removed)
@@ -1,431 +0,0 @@
-=pod
-
-=head1 NAME
-
-llvmc - The LLVM Compiler Driver (experimental)
-
-=head1 SYNOPSIS
-
-B<llvmc> [I<options>] [I<filenames>...]
-
-=head1 DESCRIPTION
-
-B<llvmc> is a configurable driver for invoking other LLVM (and non-LLVM) tools
-in order to compile, optimize and link software for multiple languages. For
-those familiar with FSF's B<gcc> tool, it is very similar.  Please note that
-B<llvmc> is considered an experimental tool.  B<llvmc> has the following goals:
-
-=over
-
-=item * provide a single point of access to the LLVM tool set,
-
-=item * hide the complexities of the LLVM tools through a single interface,
-
-=item * make integration of existing non-LLVM tools simple,
-
-=item * extend the capabilities of minimal front ends, and
-
-=item * make the interface for compiling consistent for all languages.
-
-=back
-
-The tool itself does nothing with a user's program. It merely invokes other
-tools to get the compilation tasks done.
-
-The options supported by B<llvmc> generalize the compilation process and
-provide a consistent and simple interface for multiple programming languages.
-This makes it easier for developers to get their software compiled with LLVM.
-Without B<llvmc>, developers would need to understand how to invoke the 
-front-end compiler, optimizer, assembler, and linker in order to compile their 
-programs. B<llvmc>'s sole mission is to trivialize that process.
-
-=head2 Basic Operation
-
-B<llvmc> always takes the following basic actions:
-
-=over
-
-=item * Command line options and filenames are collected.
-
-The command line options provide the marching orders to B<llvmc> on what actions
-it should perform. This is the I<request> the user is making of B<llvmc> and it
-is interpreted first.
-
-=item * Configuration files are read.
-
-Based on the options and the suffixes of the filenames presented, a set of 
-configuration files are read to configure the actions B<llvmc> will take. 
-Configuration files are provided by either LLVM or the front end compiler tools
-that B<llvmc> invokes. Users generally don't need to be concerned with the
-contents of the configuration files. 
-
-=item * Determine actions to take.
-
-The tool chain needed to complete the task is determined. This is the primary 
-work of B<llvmc>. It breaks the request specified by the command line options 
-into a set of basic actions to be done: 
-
-=over
-
-=item * Pre-processing: gathering/filtering compiler input (optional).
-
-=item * Translation: source language to bitcode conversion.
-
-=item * Assembly: bitcode to native code conversion.
-
-=item * Optimization: conversion of bitcode to something that runs faster.
-
-=item * Linking: combining multiple bitcode files to produce executable program.
-
-=back
-
-=item * Execute actions.
-
-The actions determined previously are executed sequentially and then
-B<llvmc> terminates.
-
-=back
-
-=head1 OPTIONS
-
-=head2 Control Options
-
-Control options tell B<llvmc> what to do at a high level. The 
-following control options are defined:
-
-=over
-
-=item B<-c> or B<--compile>
-
-This option specifies that the linking phase is not to be run. All
-previous phases, if applicable will run. This is generally how a given
-bitcode file is compiled and optimized for a source language module.
-
-=item B<-k> or B<--link> or default
-
-This option (or the lack of any control option) specifies that all stages
-of compilation, optimization, and linking should be attempted.  Source files
-specified on the command line will be compiled and linked with objects and
-libraries also specified. 
-
-=item B<-S>
-
-This option specifies that compilation should end in the creation of
-an LLVM assembly file that can be later converted to an LLVM object
-file.
-
-=item B<-E>
-
-This option specifies that no compilation or linking should be 
-performed. Only pre-processing, if applicable to the language being
-compiled, is performed. For languages that support it, this will
-result in the output containing the raw input to the compiler.
-
-=back
-
-=head2 Optimization Options
-
-Optimization with B<llvmc> is based on goals and specified with
-the following -O options. The specific details of which
-optimizations run is controlled by the configuration files because
-each source language will have different needs. 
-
-=over
-
-=item B<-O1> or B<-O0> (default, fast compilation)
-
-Only those optimizations that will hasten the compilation (mostly by reducing
-the output) are applied. In general these are extremely fast and simple 
-optimizations that reduce emitted code size. The goal here is not to make the 
-resulting program fast but to make the compilation fast.  If not specified, 
-this is the default level of optimization.
-
-=item B<-O2> (basic optimization)
-
-This level of optimization specifies a balance between generating good code 
-that will execute reasonably quickly and not spending too much time optimizing
-the code to get there. For example, this level of optimization may include 
-things like global common sub-expression elimination, aggressive dead code 
-elimination, and scalar replication.
-
-=item B<-O3> (aggressive optimization)
-
-This level of optimization aggressively optimizes each set of files compiled 
-together. However, no link-time inter-procedural optimization is performed.
-This level implies all the optimizations of the B<-O1> and B<-O2> optimization
-levels, and should also provide loop optimizations and compile time 
-inter-procedural optimizations. Essentially, this level tries to do as much
-as it can with the input it is given but doesn't do any link time IPO.
-
-=item B<-O4> (link time optimization)
-
-In addition to the previous three levels of optimization, this level of 
-optimization aggressively optimizes each program at link time. It employs
-basic analysis and basic link-time inter-procedural optimizations, 
-considering the program as a whole.
-
-=item B<-O5> (aggressive link time optimization)
-
-This is the same as B<-O4> except it employs aggressive analyses and
-aggressive inter-procedural optimization. 
-
-=item B<-O6> (profile guided optimization: not implemented)
-
-This is the same as B<-O5> except that it employs profile-guided
-re-optimization of the program after it has executed. Note that this implies
-a single level of re-optimization based on run time profile analysis. Once
-the re-optimization has completed, the profiling instrumentation is
-removed and final optimizations are employed.
-
-=item B<-O7> (lifelong optimization: not implemented)
-
-This is the same as B<-O5> and similar to B<-O6> except that re-optimization
-is performed through the life of the program. That is, each run will update
-the profile by which future re-optimizations are directed.
-
-=back
-
-=head2 Input Options
-
-=over
-
-=item B<-l> I<LIBRARY>
-
-This option instructs B<llvmc> to locate a library named I<LIBRARY> and search
-it for unresolved symbols when linking the program.
-
-=item B<-L> F<path>
-
-This option instructs B<llvmc> to add F<path> to the list of places in which
-the linker will
-
-=item B<-x> I<LANGUAGE>
-
-This option instructs B<llvmc> to regard the following input files as 
-containing programs in the language I<LANGUAGE>. Normally, input file languages
-are identified by their suffix but this option will override that default
-behavior. The B<-x> option stays in effect until the end of the options or
-a new B<-x> option is encountered.
-
-=back
-
-=head2 Output Options
-
-=over
-
-=item B<-m>I<arch>
-
-This option selects the back end code generator to use. The I<arch> portion
-of the option names the back end to use.
-
-=item B<--native>
-
-Normally, B<llvmc> produces bitcode files at most stages of compilation.
-With this option, B<llvmc> will arrange for native object files to be
-generated with the B<-c> option, native assembly files to be generated
-with the B<-S> option, and native executables to be generated with the
-B<--link> option. In the case of the B<-E> option, the output will not
-differ as there is no I<native> version of pre-processed output.
-
-=item B<-o> F<filename>
-
-Specify the output file name.  The contents of the file  depend on other 
-options. 
-
-=back
-
-=head2 Information Options
-
-=over
-
-=item B<-n> or B<--no-op>
-
-This option tells B<llvmc> to do everything but actually execute the
-resulting tools. In combination with the B<-v> option, this causes B<llvmc>
-to merely print out what it would have done.
-
-=item B<-v> or B<--verbose>
-
-This option will cause B<llvmc> to print out (on standard output) each of the 
-actions it takes to accomplish the objective. The output will immediately
-precede the invocation of other tools.
-
-=item B<--stats>
-
-Print all statistics gathered during the compilation to the standard error. 
-Note that this option is merely passed through to the sub-tools to do with 
-as they please.
-
-=item B<--time-passes>
-
-Record the amount of time needed for each optimization pass and print it 
-to standard error. Like B<--stats> this option is just passed through to
-the sub-tools to do with as they please.
-
-=item B<--time-programs>
-
-Record the amount of time each program (compilation tool) takes and print
-it to the standard error. 
-
-=back
-
-=head2 Language Specific Options
-
-=over
-
-=item B<-T,pre>=I<options>
-
-Pass an arbitrary option to the pre-processor.
-
-=item B<-T,opt>=I<options>
-
-Pass an arbitrary option to the optimizer.
-
-=item B<-T,lnk>=I<options>
-
-Pass an arbitrary option to the linker.
-
-=item B<-T,asm>=I<options>
-
-Pass an arbitrary option to the code generator.
-
-=back
-
-=head2 C/C++ Specific Options
-
-=over
-
-=item B<-I>F<path>
-
-This option is just passed through to a C or C++ front end compiler to tell it
-where include files can be found.
-
-=item B<-D>F<symbol>
-
-This option is just passed through to a C or C++ front end compiler to tell it
-to define a symbol.
-
-=back
-
-=head2 Miscellaneous Options
-
-=over
-
-=item B<--help>
-
-Print a summary of command line options.
-
-=item B<--version>
-
-This option will cause B<llvmc> to print out its version number and terminate.
-
-=back
-
-=head2 Advanced Options
-
-You better know what you're doing if you use these options. Improper use
-of these options can produce drastically wrong results.
-
-=over 
-
-=item B<--config-dir> F<dirname>
-
-This option tells B<llvmc> to read configuration data from the I<directory>
-named F<dirname>. Data from such directories will be read in the order
-specified on the command line after all other standard configuration files have
-been read. This allows users or groups of users to conveniently create 
-their own configuration directories in addition to the standard ones to which 
-they may not have write access.
-
-=back
-
-
-=head2 Unimplemented Options
-
-The options below are not currently implemented in B<llvmc> but will be
-eventually. They are documented here as "future design".
-
-=over
-
-=item B<--show-config> I<[suffixes...]>
-
-When this option is given, the only action taken by B<llvmc> is to show its
-final configuration state in the form of a configuration file. No compilation
-tasks will be conducted when this option is given; processing will stop once
-the configuration has been printed. The optional (comma separated) list of 
-suffixes controls what is printed. Without any suffixes, the configuration
-for all languages is printed. With suffixes, only the languages pertaining
-to those file suffixes will be printed. The configuration information is
-printed after all command line options and configuration files have been
-read and processed. This allows the user to verify that the correct
-configuration data has been read by B<llvmc>.
-
-=item B<--config> :I<section>:I<name>=I<value>
-
-This option instructs B<llvmc> to accept I<value> as the value for configuration
-item I<name> in the section named I<section>. This is a quick way to override
-a configuration item on the command line without resorting to changing the
-configuration files. 
-
-=item B<--config-only-from> F<dirname>
-
-This option tells B<llvmc> to skip the normal processing of configuration
-files and only configure from the contents of the F<dirname> directory. Multiple
-B<--config-only-from> options may be given in which case the directories are
-read in the order given on the command line.
-
-=item B<--emit-raw-code>
-
-No optimization is done whatsoever. The compilers invoked by B<llvmc> with 
-this option given will be instructed to produce raw, unoptimized code.  This 
-option is useful only to front end language developers and therefore does not 
-participate in the list of B<-O> options. This is distinctly different from
-the B<-O0> option (a synonym for B<-O1>) because those optimizations will
-reduce code size to make compilation faster. With B<--emit-raw-code>, only
-the full raw code produced by the compiler will be generated.
-
-=back
-
-
-=head1 EXIT STATUS
-
-If B<llvmc> succeeds, it will exit with 0.  Otherwise, if an error
-occurs, it will exit with a non-zero value and no compilation actions
-will be taken. If one of the compilation tools returns a non-zero 
-status, pending actions will be discarded and B<llvmc> will return the
-same result code as the failing compilation tool.
-
-=head1 DEFICIENCIES
-
-B<llvmc> is considered an experimental LLVM tool because it has these
-deficiencies: 
-
-=over
-
-=item Insufficient support for native linking
-
-Because B<llvm-ld> doesn't handle native linking, neither can B<llvmc>
-
-=item Poor configuration support
-
-The support for configuring new languages, etc. is weak. There are many
-command line configurations that cannot be achieved with the current
-support. Furthermore the grammar is cumbersome for configuration files.
-Please see L<http://llvm.org/PR686> for further details.
-
-=item Does not handle target specific configurations
-
-This is one of the major deficiencies, also addressed in 
-L<http://llvm.org/PR686>
-
-=back
-
-=head1 SEE ALSO
-
-L<llvm-as|llvm-as>, L<llvm-dis|llvm-dis>, L<llc|llc>, L<llvm-link|llvm-link>
-
-=head1 AUTHORS
-
-Maintained by the LLVM Team (L<http://llvm.org>).
-
-=cut

Removed: llvm/trunk/tools/llvmc/CompilerDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/CompilerDriver.cpp?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/CompilerDriver.cpp (original)
+++ llvm/trunk/tools/llvmc/CompilerDriver.cpp (removed)
@@ -1,1032 +0,0 @@
-//===- CompilerDriver.cpp - The LLVM Compiler Driver ------------*- C++ -*-===//
-//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the bulk of the LLVM Compiler Driver (llvmc).
-//
-//===----------------------------------------------------------------------===//
-
-#include "CompilerDriver.h"
-#include "ConfigLexer.h"
-#include "llvm/Module.h"
-#include "llvm/ModuleProvider.h"
-#include "llvm/Bitcode/ReaderWriter.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/Timer.h"
-#include "llvm/System/Signals.h"
-#include "llvm/ADT/SetVector.h"
-#include "llvm/ADT/StringExtras.h"
-#include "llvm/Config/alloca.h"
-#include <iostream>
-using namespace llvm;
-
-
-namespace {
-
-void WriteAction(CompilerDriver::Action* action ) {
-  std::cerr << action->program.c_str();
-  std::vector<std::string>::const_iterator I = action->args.begin();
-  while (I != action->args.end()) {
-    std::cerr << ' ' << *I;
-    ++I;
-  }
-  std::cerr << '\n';
-}
-
-void DumpAction(CompilerDriver::Action* action) {
-  std::cerr << "command = " << action->program.c_str();
-  std::vector<std::string>::const_iterator I = action->args.begin();
-  while (I != action->args.end()) {
-    std::cerr << ' ' << *I;
-    ++I;
-  }
-  std::cerr << '\n';
-  std::cerr << "flags = " << action->flags << '\n';
-}
-
-void DumpConfigData(CompilerDriver::ConfigData* cd, const std::string& type ){
-  std::cerr << "Configuration Data For '" << cd->langName << "' (" << type
-    << ")\n";
-  std::cerr << "PreProcessor: ";
-  DumpAction(&cd->PreProcessor);
-  std::cerr << "Translator: ";
-  DumpAction(&cd->Translator);
-  std::cerr << "Optimizer: ";
-  DumpAction(&cd->Optimizer);
-  std::cerr << "Assembler: ";
-  DumpAction(&cd->Assembler);
-  std::cerr << "Linker: ";
-  DumpAction(&cd->Linker);
-}
-
-static bool GetBitcodeDependentLibraries(const std::string &fname,
-                                         Module::LibraryListType& deplibs,
-                                         std::string* ErrMsg) {
-  ModuleProvider *MP = 0;
-  if (MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(fname)) {
-    MP = getBitcodeModuleProvider(Buffer);
-    if (MP == 0) delete Buffer;
-  }
-  if (!MP) {
-    deplibs.clear();
-    return true;
-  }
-  deplibs = MP->getModule()->getLibraries();
-  delete MP;
-  return false;
-}
-
-
-class CompilerDriverImpl : public CompilerDriver {
-/// @name Constructors
-/// @{
-public:
-  CompilerDriverImpl(ConfigDataProvider& confDatProv )
-    : cdp(&confDatProv)
-    , finalPhase(LINKING)
-    , optLevel(OPT_FAST_COMPILE)
-    , Flags(0)
-    , machine()
-    , LibraryPaths()
-    , TempDir()
-    , AdditionalArgs()
-  {
-    AdditionalArgs.reserve(NUM_PHASES);
-    StringVector emptyVec;
-    for (unsigned i = 0; i < NUM_PHASES; ++i)
-      AdditionalArgs.push_back(emptyVec);
-  }
-
-  virtual ~CompilerDriverImpl() {
-    cleanup();
-    cdp = 0;
-    LibraryPaths.clear();
-    IncludePaths.clear();
-    Defines.clear();
-    TempDir.clear();
-    AdditionalArgs.clear();
-    fOptions.clear();
-    MOptions.clear();
-    WOptions.clear();
-  }
-
-/// @}
-/// @name Methods
-/// @{
-public:
-  virtual void setFinalPhase(Phases phase) {
-    finalPhase = phase;
-  }
-
-  virtual void setOptimization(OptimizationLevels level) {
-    optLevel = level;
-  }
-
-  virtual void setDriverFlags(unsigned flags) {
-    Flags = flags & DRIVER_FLAGS_MASK;
-  }
-
-  virtual void setOutputMachine(const std::string& machineName) {
-    machine = machineName;
-  }
-
-  virtual void setPhaseArgs(Phases phase, const StringVector& opts) {
-    assert(phase <= LINKING && phase >= PREPROCESSING);
-    AdditionalArgs[phase] = opts;
-  }
-
-  virtual void setIncludePaths(const StringVector& paths) {
-    StringVector::const_iterator I = paths.begin();
-    StringVector::const_iterator E = paths.end();
-    while (I != E) {
-      sys::Path tmp;
-      tmp.set(*I);
-      IncludePaths.push_back(tmp);
-      ++I;
-    }
-  }
-
-  virtual void setSymbolDefines(const StringVector& defs) {
-    Defines = defs;
-  }
-
-  virtual void setLibraryPaths(const StringVector& paths) {
-    StringVector::const_iterator I = paths.begin();
-    StringVector::const_iterator E = paths.end();
-    while (I != E) {
-      sys::Path tmp;
-      tmp.set(*I);
-      LibraryPaths.push_back(tmp);
-      ++I;
-    }
-  }
-
-  virtual void addLibraryPath(const sys::Path& libPath) {
-    LibraryPaths.push_back(libPath);
-  }
-
-  virtual void addToolPath(const sys::Path& toolPath) {
-    ToolPaths.push_back(toolPath);
-  }
-
-  virtual void setfPassThrough(const StringVector& fOpts) {
-    fOptions = fOpts;
-  }
-
-  /// @brief Set the list of -M options to be passed through
-  virtual void setMPassThrough(const StringVector& MOpts) {
-    MOptions = MOpts;
-  }
-
-  /// @brief Set the list of -W options to be passed through
-  virtual void setWPassThrough(const StringVector& WOpts) {
-    WOptions = WOpts;
-  }
-
-/// @}
-/// @name Functions
-/// @{
-private:
-  bool isSet(DriverFlags flag) {
-    return 0 != ((flag & DRIVER_FLAGS_MASK) & Flags);
-  }
-
-  void cleanup() {
-    if (!isSet(KEEP_TEMPS_FLAG)) {
-      const sys::FileStatus *Status = TempDir.getFileStatus();
-      if (Status && Status->isDir)
-        TempDir.eraseFromDisk(/*remove_contents=*/true);
-    } else {
-      std::cout << "Temporary files are in " << TempDir << "\n";
-    }
-  }
-
-  sys::Path MakeTempFile(const std::string& basename,
-                         const std::string& suffix,
-                         std::string* ErrMsg) {
-    if (TempDir.isEmpty()) {
-      TempDir = sys::Path::GetTemporaryDirectory(ErrMsg);
-      if (TempDir.isEmpty())
-        return sys::Path();
-      sys::RemoveDirectoryOnSignal(TempDir);
-    }
-    sys::Path result(TempDir);
-    if (!result.appendComponent(basename)) {
-      if (ErrMsg)
-        *ErrMsg = basename + ": can't use this file name";
-      return sys::Path();
-    }
-    if (!result.appendSuffix(suffix)) {
-      if (ErrMsg)
-        *ErrMsg = suffix + ": can't use this file suffix";
-      return sys::Path();
-    }
-    return result;
-  }
-
-  Action* GetAction(ConfigData* cd,
-                    const sys::Path& input,
-                    const sys::Path& output,
-                    Phases phase)
-  {
-    Action* pat = 0; ///< The pattern/template for the action
-    Action* action = new Action; ///< The actual action to execute
-
-    // Get the action pattern
-    switch (phase) {
-      case PREPROCESSING: pat = &cd->PreProcessor; break;
-      case TRANSLATION:   pat = &cd->Translator; break;
-      case OPTIMIZATION:  pat = &cd->Optimizer; break;
-      case ASSEMBLY:      pat = &cd->Assembler; break;
-      case LINKING:       pat = &cd->Linker; break;
-      default:
-        assert(!"Invalid driver phase!");
-        break;
-    }
-    assert(pat != 0 && "Invalid command pattern");
-
-    // Copy over some pattern things that don't need to change
-    action->flags = pat->flags;
-
-    // See if program starts with wildcard...
-    std::string programName=pat->program.toString();
-    if (programName[0] == '%' && programName.length() >2) {
-      switch(programName[1]){
-      case 'b':
-        if (programName.substr(0,8) == "%bindir%") {
-          std::string tmp(LLVM_BINDIR);
-          tmp.append(programName.substr(8));
-          pat->program.set(tmp);
-        }
-        break;
-      case 'l':
-        if (programName.substr(0,12) == "%llvmgccdir%"){
-          std::string tmp(LLVMGCCDIR);
-          tmp.append(programName.substr(12));
-          pat->program.set(tmp);
-        }else if (programName.substr(0,13) == "%llvmgccarch%"){
-          std::string tmp(LLVMGCCARCH);
-          tmp.append(programName.substr(13));
-          pat->program.set(tmp);
-        }else if (programName.substr(0,9) == "%llvmgcc%"){
-          std::string tmp(LLVMGCC);
-          tmp.append(programName.substr(9));
-          pat->program.set(tmp);
-        }else if (programName.substr(0,9) == "%llvmgxx%"){
-          std::string tmp(LLVMGXX);
-          tmp.append(programName.substr(9));
-          pat->program.set(tmp);
-        }else if (programName.substr(0,9) == "%llvmcc1%"){
-          std::string tmp(LLVMCC1);
-          tmp.append(programName.substr(9));
-          pat->program.set(tmp);
-        }else if (programName.substr(0,13) == "%llvmcc1plus%"){
-          std::string tmp(LLVMCC1PLUS);
-          tmp.append(programName.substr(13));
-          pat->program.set(tmp);
-        }else if (programName.substr(0,8) == "%libdir%") {
-          std::string tmp(LLVM_LIBDIR);
-          tmp.append(programName.substr(8));
-          pat->program.set(tmp);
-        }
-        break;
-      }
-    }
-    action->program = pat->program;
-
-    // Do the substitutions from the pattern to the actual
-    StringVector::iterator PI = pat->args.begin();
-    StringVector::iterator PE = pat->args.end();
-    while (PI != PE) {
-      if ((*PI)[0] == '%' && PI->length() >2) {
-        bool found = true;
-        switch ((*PI)[1]) {
-          case 'a':
-            if (*PI == "%args%") {
-              if (AdditionalArgs.size() > unsigned(phase))
-                if (!AdditionalArgs[phase].empty()) {
-                  // Get specific options for each kind of action type
-                  StringVector& addargs = AdditionalArgs[phase];
-                  // Add specific options for each kind of action type
-                  action->args.insert(action->args.end(), addargs.begin(),
-                                      addargs.end());
-                }
-            } else
-              found = false;
-            break;
-          case 'b':
-            if (*PI == "%bindir%") {
-              std::string tmp(*PI);
-              tmp.replace(0,8,LLVM_BINDIR);
-              action->args.push_back(tmp);
-            } else
-              found = false;
-            break;
-          case 'd':
-            if (*PI == "%defs%") {
-              StringVector::iterator I = Defines.begin();
-              StringVector::iterator E = Defines.end();
-              while (I != E) {
-                action->args.push_back( std::string("-D") + *I);
-                ++I;
-              }
-            } else
-              found = false;
-            break;
-          case 'f':
-            if (*PI == "%fOpts%") {
-              if (!fOptions.empty())
-                action->args.insert(action->args.end(), fOptions.begin(),
-                                    fOptions.end());
-            } else
-              found = false;
-            break;
-          case 'i':
-            if (*PI == "%in%") {
-              action->args.push_back(input.toString());
-            } else if (*PI == "%incls%") {
-              PathVector::iterator I = IncludePaths.begin();
-              PathVector::iterator E = IncludePaths.end();
-              while (I != E) {
-                action->args.push_back( std::string("-I") + I->toString() );
-                ++I;
-              }
-            } else
-              found = false;
-            break;
-          case 'l':
-            if ((*PI)[1] == 'l') {
-              std::string tmp(*PI);
-              if (*PI == "%llvmgccdir%")
-                tmp.replace(0,12,LLVMGCCDIR);
-              else if (*PI == "%llvmgccarch%")
-                tmp.replace(0,13,LLVMGCCARCH);
-              else if (*PI == "%llvmgcc%")
-                tmp.replace(0,9,LLVMGCC);
-              else if (*PI == "%llvmgxx%")
-                tmp.replace(0,9,LLVMGXX);
-              else if (*PI == "%llvmcc1%")
-                tmp.replace(0,9,LLVMCC1);
-              else if (*PI == "%llvmcc1plus%")
-                tmp.replace(0,9,LLVMCC1);
-              else
-                found = false;
-              if (found)
-                action->args.push_back(tmp);
-            } else if (*PI == "%libs%") {
-              PathVector::iterator I = LibraryPaths.begin();
-              PathVector::iterator E = LibraryPaths.end();
-              while (I != E) {
-                action->args.push_back( std::string("-L") + I->toString() );
-                ++I;
-              }
-            } else if (*PI == "%libdir%") {
-              std::string tmp(*PI);
-              tmp.replace(0,8,LLVM_LIBDIR);
-              action->args.push_back(tmp);
-            } else
-              found = false;
-            break;
-          case 'o':
-            if (*PI == "%out%") {
-              action->args.push_back(output.toString());
-            } else if (*PI == "%opt%") {
-              if (!isSet(EMIT_RAW_FLAG)) {
-                if (cd->opts.size() > static_cast<unsigned>(optLevel) &&
-                    !cd->opts[optLevel].empty())
-                  action->args.insert(action->args.end(),
-                                      cd->opts[optLevel].begin(),
-                                      cd->opts[optLevel].end());
-                else
-                  throw std::string("Optimization options for level ") +
-                        utostr(unsigned(optLevel)) + " were not specified";
-              }
-            } else
-              found = false;
-            break;
-          case 's':
-            if (*PI == "%stats%") {
-              if (isSet(SHOW_STATS_FLAG))
-                action->args.push_back("-stats");
-            } else
-              found = false;
-            break;
-          case 't':
-            if (*PI == "%target%") {
-              action->args.push_back(std::string("-march=") + machine);
-            } else if (*PI == "%time%") {
-              if (isSet(TIME_PASSES_FLAG))
-                action->args.push_back("-time-passes");
-            } else
-              found = false;
-            break;
-          case 'v':
-            if (*PI == "%verbose%") {
-              if (isSet(VERBOSE_FLAG))
-                action->args.push_back("-v");
-            } else
-              found  = false;
-            break;
-          case 'M':
-            if (*PI == "%Mopts%") {
-              if (!MOptions.empty())
-                action->args.insert(action->args.end(), MOptions.begin(),
-                                    MOptions.end());
-            } else
-              found = false;
-            break;
-          case 'W':
-            if (*PI == "%Wopts%") {
-              for (StringVector::iterator I = WOptions.begin(),
-                   E = WOptions.end(); I != E ; ++I ) {
-                action->args.push_back(std::string("-W") + *I);
-              }
-            } else
-              found = false;
-            break;
-          default:
-            found = false;
-            break;
-        }
-        if (!found) {
-          // Did it even look like a substitution?
-          if (PI->length()>1 && (*PI)[0] == '%' &&
-              (*PI)[PI->length()-1] == '%') {
-            throw std::string("Invalid substitution token: '") + *PI +
-                  "' for command '" + pat->program.toString() + "'";
-          } else if (!PI->empty()) {
-            // It's not a legal substitution, just pass it through
-            action->args.push_back(*PI);
-          }
-        }
-      } else if (!PI->empty()) {
-        // Its not a substitution, just put it in the action
-        action->args.push_back(*PI);
-      }
-      PI++;
-    }
-
-    // Finally, we're done
-    return action;
-  }
-
-  int DoAction(Action*action, std::string& ErrMsg) {
-    assert(action != 0 && "Invalid Action!");
-    if (isSet(VERBOSE_FLAG))
-      WriteAction(action);
-    if (!isSet(DRY_RUN_FLAG)) {
-      sys::Path progpath = sys::Program::FindProgramByName(
-        action->program.toString());
-      if (progpath.isEmpty())
-        throw std::string("Can't find program '" +
-                          action->program.toString()+"'");
-      else if (progpath.canExecute())
-        action->program = progpath;
-      else
-        throw std::string("Program '"+action->program.toString()+
-                          "' is not executable.");
-
-      // Invoke the program
-      const char** Args = (const char**)
-        alloca(sizeof(const char*)*(action->args.size()+2));
-      Args[0] = action->program.toString().c_str();
-      for (unsigned i = 1; i <= action->args.size(); ++i)
-        Args[i] = action->args[i-1].c_str();
-      Args[action->args.size()+1] = 0;  // null terminate list.
-      if (isSet(TIME_ACTIONS_FLAG)) {
-        Timer timer(action->program.toString());
-        timer.startTimer();
-        int resultCode = 
-          sys::Program::ExecuteAndWait(action->program, Args,0,0,0,0, &ErrMsg);
-        timer.stopTimer();
-        timer.print(timer,std::cerr);
-        return resultCode;
-      }
-      else
-        return 
-          sys::Program::ExecuteAndWait(action->program, Args, 0,0,0,0, &ErrMsg);
-    }
-    return 0;
-  }
-
-  /// This method tries various variants of a linkage item's file
-  /// name to see if it can find an appropriate file to link with
-  /// in the directories of the LibraryPaths.
-  llvm::sys::Path GetPathForLinkageItem(const std::string& link_item,
-                                        bool native = false) {
-    sys::Path fullpath;
-    fullpath.set(link_item);
-    if (fullpath.canRead())
-      return fullpath;
-    for (PathVector::iterator PI = LibraryPaths.begin(),
-         PE = LibraryPaths.end(); PI != PE; ++PI) {
-      fullpath.set(PI->toString());
-      fullpath.appendComponent(link_item);
-      if (fullpath.canRead())
-        return fullpath;
-      if (native) {
-        fullpath.appendSuffix("a");
-      } else {
-        fullpath.appendSuffix("bc");
-        if (fullpath.canRead())
-          return fullpath;
-        fullpath.eraseSuffix();
-        fullpath.appendSuffix("o");
-        if (fullpath.canRead())
-          return fullpath;
-        fullpath = *PI;
-        fullpath.appendComponent(std::string("lib") + link_item);
-        fullpath.appendSuffix("a");
-        if (fullpath.canRead())
-          return fullpath;
-        fullpath.eraseSuffix();
-        fullpath.appendSuffix("so");
-        if (fullpath.canRead())
-          return fullpath;
-      }
-    }
-
-    // Didn't find one.
-    fullpath.clear();
-    return fullpath;
-  }
-
-  /// This method processes a linkage item. The item could be a
-  /// Bitcode file needing translation to native code and that is
-  /// dependent on other bitcode libraries, or a native code
-  /// library that should just be linked into the program.
-  bool ProcessLinkageItem(const llvm::sys::Path& link_item,
-                          SetVector<sys::Path>& set,
-                          std::string& err) {
-    // First, see if the unadorned file name is not readable. If so,
-    // we must track down the file in the lib search path.
-    sys::Path fullpath;
-    if (!link_item.canRead()) {
-      // look for the library using the -L arguments specified
-      // on the command line.
-      fullpath = GetPathForLinkageItem(link_item.toString());
-
-      // If we didn't find the file in any of the library search paths
-      // we have to bail. No where else to look.
-      if (fullpath.isEmpty()) {
-        err =
-          std::string("Can't find linkage item '") + link_item.toString() + "'";
-        return false;
-      }
-    } else {
-      fullpath = link_item;
-    }
-
-    // If we got here fullpath is the path to the file, and its readable.
-    set.insert(fullpath);
-
-    // If its an LLVM bitcode file ...
-    if (fullpath.isBitcodeFile()) {
-      // Process the dependent libraries recursively
-      Module::LibraryListType modlibs;
-      if (GetBitcodeDependentLibraries(fullpath.toString(),modlibs, &err)) {
-        // Traverse the dependent libraries list
-        Module::lib_iterator LI = modlibs.begin();
-        Module::lib_iterator LE = modlibs.end();
-        while ( LI != LE ) {
-          if (!ProcessLinkageItem(sys::Path(*LI),set,err)) {
-            if (err.empty()) {
-              err = std::string("Library '") + *LI +
-                    "' is not valid for linking but is required by file '" +
-                    fullpath.toString() + "'";
-            } else {
-              err += " which is required by file '" + fullpath.toString() + "'";
-            }
-            return false;
-          }
-          ++LI;
-        }
-      } else if (err.empty()) {
-        err = std::string(
-          "The dependent libraries could not be extracted from '") +
-          fullpath.toString();
-        return false;
-      } else 
-        return false;
-    }
-    return true;
-  }
-
-/// @}
-/// @name Methods
-/// @{
-public:
-  virtual int execute(const InputList& InpList, const sys::Path& Output, std::string& ErrMsg ) {
-    try {
-      // Echo the configuration of options if we're running verbose
-      if (isSet(DEBUG_FLAG)) {
-        std::cerr << "Compiler Driver Options:\n";
-        std::cerr << "DryRun = " << isSet(DRY_RUN_FLAG) << "\n";
-        std::cerr << "Verbose = " << isSet(VERBOSE_FLAG) << " \n";
-        std::cerr << "TimeActions = " << isSet(TIME_ACTIONS_FLAG) << "\n";
-        std::cerr << "TimePasses = " << isSet(TIME_PASSES_FLAG) << "\n";
-        std::cerr << "ShowStats = " << isSet(SHOW_STATS_FLAG) << "\n";
-        std::cerr << "EmitRawCode = " << isSet(EMIT_RAW_FLAG) << "\n";
-        std::cerr << "EmitNativeCode = " << isSet(EMIT_NATIVE_FLAG) << "\n";
-        std::cerr << "KeepTemps = " << isSet(KEEP_TEMPS_FLAG) << "\n";
-        std::cerr << "OutputMachine = " << machine << "\n";
-        InputList::const_iterator I = InpList.begin();
-        while ( I != InpList.end() ) {
-          std::cerr << "Input: " << I->first << "(" << I->second
-                    << ")\n";
-          ++I;
-        }
-        std::cerr << "Output: " << Output << "\n";
-      }
-
-      // If there's no input, we're done.
-      if (InpList.empty())
-        throw std::string("Nothing to compile.");
-
-      // If they are asking for linking and didn't provide an output
-      // file then its an error (no way for us to "make up" a meaningful
-      // file name based on the various linker input files).
-      if (finalPhase == LINKING && Output.isEmpty())
-        throw std::string(
-          "An output file name must be specified for linker output");
-
-      // If they are not asking for linking, provided an output file and
-      // there is more than one input file, its an error
-      if (finalPhase != LINKING && !Output.isEmpty() && InpList.size() > 1)
-        throw std::string("An output file name cannot be specified ") +
-          "with more than one input file name when not linking";
-
-      // This vector holds all the resulting actions of the following loop.
-      std::vector<Action*> actions;
-
-      /// PRE-PROCESSING / TRANSLATION / OPTIMIZATION / ASSEMBLY phases
-      // for each input item
-      SetVector<sys::Path> LinkageItems;
-      StringVector LibFiles;
-      InputList::const_iterator I = InpList.begin();
-      for (InputList::const_iterator I = InpList.begin(), E = InpList.end();
-           I != E; ++I ) {
-        // Get the suffix of the file name
-        const std::string& ftype = I->second;
-
-        // If its a library, bitcode file, or object file, save
-        // it for linking below and short circuit the
-        // pre-processing/translation/assembly phases
-        if (ftype.empty() ||  ftype == "o" || ftype == "bc" || ftype=="a") {
-          // We shouldn't get any of these types of files unless we're
-          // later going to link. Enforce this limit now.
-          if (finalPhase != LINKING) {
-            throw std::string(
-              "Pre-compiled objects found but linking not requested");
-          }
-          if (ftype.empty())
-            LibFiles.push_back(I->first.toString());
-          else
-            LinkageItems.insert(I->first);
-          continue; // short circuit remainder of loop
-        }
-
-        // At this point, we know its something we need to translate
-        // and/or optimize. See if we can get the configuration data
-        // for this kind of file.
-        ConfigData* cd = cdp->ProvideConfigData(I->second);
-        if (cd == 0)
-          throw std::string("Files of type '") + I->second +
-                "' are not recognized.";
-        if (isSet(DEBUG_FLAG))
-          DumpConfigData(cd,I->second);
-
-        // Add the config data's library paths to the end of the list
-        for (StringVector::iterator LPI = cd->libpaths.begin(),
-             LPE = cd->libpaths.end(); LPI != LPE; ++LPI){
-          LibraryPaths.push_back(sys::Path(*LPI));
-        }
-
-        // Initialize the input and output files
-        sys::Path InFile(I->first);
-        sys::Path OutFile(I->first.getBasename());
-
-        // PRE-PROCESSING PHASE
-        Action& action = cd->PreProcessor;
-
-        // Get the preprocessing action, if needed, or error if appropriate
-        if (!action.program.isEmpty()) {
-          if (action.isSet(REQUIRED_FLAG) || finalPhase == PREPROCESSING) {
-            if (finalPhase == PREPROCESSING) {
-              if (Output.isEmpty()) {
-                OutFile.appendSuffix("E");
-                actions.push_back(GetAction(cd,InFile,OutFile,PREPROCESSING));
-              } else {
-                actions.push_back(GetAction(cd,InFile,Output,PREPROCESSING));
-              }
-            } else {
-              sys::Path TempFile(
-                  MakeTempFile(I->first.getBasename(),"E",&ErrMsg));
-              if (TempFile.isEmpty())
-                return 1;
-              actions.push_back(GetAction(cd,InFile,TempFile,
-                PREPROCESSING));
-              InFile = TempFile;
-            }
-          }
-        } else if (finalPhase == PREPROCESSING) {
-          throw cd->langName + " does not support pre-processing";
-        } else if (action.isSet(REQUIRED_FLAG)) {
-          throw std::string("Don't know how to pre-process ") +
-                cd->langName + " files";
-        }
-
-        // Short-circuit remaining actions if all they want is
-        // pre-processing
-        if (finalPhase == PREPROCESSING) { continue; };
-
-        /// TRANSLATION PHASE
-        action = cd->Translator;
-
-        // Get the translation action, if needed, or error if appropriate
-        if (!action.program.isEmpty()) {
-          if (action.isSet(REQUIRED_FLAG) || finalPhase == TRANSLATION) {
-            if (finalPhase == TRANSLATION) {
-              if (Output.isEmpty()) {
-                OutFile.appendSuffix("o");
-                actions.push_back(GetAction(cd,InFile,OutFile,TRANSLATION));
-              } else {
-                actions.push_back(GetAction(cd,InFile,Output,TRANSLATION));
-              }
-            } else {
-              sys::Path TempFile(
-                  MakeTempFile(I->first.getBasename(),"trans", &ErrMsg));
-              if (TempFile.isEmpty())
-                return 1;
-              actions.push_back(GetAction(cd,InFile,TempFile,TRANSLATION));
-              InFile = TempFile;
-            }
-
-            // ll -> bc Helper
-            if (action.isSet(OUTPUT_IS_ASM_FLAG)) {
-              /// The output of the translator is an LLVM Assembly program
-              /// We need to translate it to bitcode
-              Action* action = new Action();
-              action->program.set("llvm-as");
-              action->args.push_back(InFile.toString());
-              action->args.push_back("-o");
-              InFile.appendSuffix("bc");
-              action->args.push_back(InFile.toString());
-              actions.push_back(action);
-            }
-          }
-        } else if (finalPhase == TRANSLATION) {
-          throw cd->langName + " does not support translation";
-        } else if (action.isSet(REQUIRED_FLAG)) {
-          throw std::string("Don't know how to translate ") +
-                cd->langName + " files";
-        }
-
-        // Short-circuit remaining actions if all they want is translation
-        if (finalPhase == TRANSLATION) { continue; }
-
-        /// OPTIMIZATION PHASE
-        action = cd->Optimizer;
-
-        // Get the optimization action, if needed, or error if appropriate
-        if (!isSet(EMIT_RAW_FLAG)) {
-          if (!action.program.isEmpty()) {
-            if (action.isSet(REQUIRED_FLAG) || finalPhase == OPTIMIZATION) {
-              if (finalPhase == OPTIMIZATION) {
-                if (Output.isEmpty()) {
-                  OutFile.appendSuffix("o");
-                  actions.push_back(GetAction(cd,InFile,OutFile,OPTIMIZATION));
-                } else {
-                  actions.push_back(GetAction(cd,InFile,Output,OPTIMIZATION));
-                }
-              } else {
-                sys::Path TempFile(
-                  MakeTempFile(I->first.getBasename(),"opt", &ErrMsg));
-                if (TempFile.isEmpty())
-                  return 1;
-                actions.push_back(GetAction(cd,InFile,TempFile,OPTIMIZATION));
-                InFile = TempFile;
-              }
-              // ll -> bc Helper
-              if (action.isSet(OUTPUT_IS_ASM_FLAG)) {
-                /// The output of the optimizer is an LLVM Assembly program
-                /// We need to translate it to bitcode with llvm-as
-                Action* action = new Action();
-                action->program.set("llvm-as");
-                action->args.push_back(InFile.toString());
-                action->args.push_back("-f");
-                action->args.push_back("-o");
-                InFile.appendSuffix("bc");
-                action->args.push_back(InFile.toString());
-                actions.push_back(action);
-              }
-            }
-          } else if (finalPhase == OPTIMIZATION) {
-            throw cd->langName + " does not support optimization";
-          } else if (action.isSet(REQUIRED_FLAG)) {
-            throw std::string("Don't know how to optimize ") +
-                cd->langName + " files";
-          }
-        }
-
-        // Short-circuit remaining actions if all they want is optimization
-        if (finalPhase == OPTIMIZATION) { continue; }
-
-        /// ASSEMBLY PHASE
-        action = cd->Assembler;
-
-        if (finalPhase == ASSEMBLY) {
-
-          // Build either a native compilation action or a disassembly action
-          Action* action = new Action();
-          if (isSet(EMIT_NATIVE_FLAG)) {
-            // Use llc to get the native assembly file
-            action->program.set("llc");
-            action->args.push_back(InFile.toString());
-            action->args.push_back("-f");
-            action->args.push_back("-o");
-            if (Output.isEmpty()) {
-              OutFile.appendSuffix("o");
-              action->args.push_back(OutFile.toString());
-            } else {
-              action->args.push_back(Output.toString());
-            }
-            actions.push_back(action);
-          } else {
-            // Just convert back to llvm assembly with llvm-dis
-            action->program.set("llvm-dis");
-            action->args.push_back(InFile.toString());
-            action->args.push_back("-f");
-            action->args.push_back("-o");
-            if (Output.isEmpty()) {
-              OutFile.appendSuffix("ll");
-              action->args.push_back(OutFile.toString());
-            } else {
-              action->args.push_back(Output.toString());
-            }
-          }
-
-          // Put the action on the list
-          actions.push_back(action);
-
-          // Short circuit the rest of the loop, we don't want to link
-          continue;
-        }
-
-        // Register the result of the actions as a link candidate
-        LinkageItems.insert(InFile);
-
-      } // end while loop over each input file
-
-      /// RUN THE COMPILATION ACTIONS
-      std::vector<Action*>::iterator AI = actions.begin();
-      std::vector<Action*>::iterator AE = actions.end();
-      while (AI != AE) {
-        int ActionResult = DoAction(*AI, ErrMsg);
-        if (ActionResult != 0)
-          return ActionResult;
-        AI++;
-      }
-
-      /// LINKING PHASE
-      if (finalPhase == LINKING) {
-
-        // Insert the platform-specific system libraries to the path list
-        std::vector<sys::Path> SysLibs;
-        sys::Path::GetSystemLibraryPaths(SysLibs);
-        LibraryPaths.insert(LibraryPaths.end(), SysLibs.begin(), SysLibs.end());
-
-        // Set up the linking action with llvm-ld
-        Action* link = new Action();
-        link->program.set("llvm-ld");
-
-        // Add in the optimization level requested
-        switch (optLevel) {
-          case OPT_FAST_COMPILE:
-            link->args.push_back("-O1");
-            break;
-          case OPT_SIMPLE:
-            link->args.push_back("-O2");
-            break;
-          case OPT_AGGRESSIVE:
-            link->args.push_back("-O3");
-            break;
-          case OPT_LINK_TIME:
-            link->args.push_back("-O4");
-            break;
-          case OPT_AGGRESSIVE_LINK_TIME:
-            link->args.push_back("-O5");
-            break;
-          case OPT_NONE:
-            break;
-        }
-
-        // Add in all the linkage items we generated. This includes the
-        // output from the translation/optimization phases as well as any
-        // -l arguments specified.
-        for (PathVector::const_iterator I=LinkageItems.begin(),
-             E=LinkageItems.end(); I != E; ++I )
-          link->args.push_back(I->toString());
-
-        // Add in all the libraries we found.
-        for (StringVector::const_iterator I=LibFiles.begin(),
-             E=LibFiles.end(); I != E; ++I )
-          link->args.push_back(std::string("-l")+*I);
-
-        // Add in all the library paths to the command line
-        for (PathVector::const_iterator I=LibraryPaths.begin(),
-             E=LibraryPaths.end(); I != E; ++I)
-          link->args.push_back( std::string("-L") + I->toString());
-
-        // Add in the additional linker arguments requested
-        for (StringVector::const_iterator I=AdditionalArgs[LINKING].begin(),
-             E=AdditionalArgs[LINKING].end(); I != E; ++I)
-          link->args.push_back( *I );
-
-        // Add in other optional flags
-        if (isSet(EMIT_NATIVE_FLAG))
-          link->args.push_back("-native");
-        if (isSet(VERBOSE_FLAG))
-          link->args.push_back("-v");
-        if (isSet(TIME_PASSES_FLAG))
-          link->args.push_back("-time-passes");
-        if (isSet(SHOW_STATS_FLAG))
-          link->args.push_back("-stats");
-        if (isSet(STRIP_OUTPUT_FLAG))
-          link->args.push_back("-s");
-        if (isSet(DEBUG_FLAG)) {
-          link->args.push_back("-debug");
-          link->args.push_back("-debug-pass=Details");
-        }
-
-        // Add in mandatory flags
-        link->args.push_back("-o");
-        link->args.push_back(Output.toString());
-
-        // Execute the link
-        int ActionResult = DoAction(link, ErrMsg);
-        if (ActionResult != 0)
-          return ActionResult;
-      }
-    } catch (std::string& msg) {
-      cleanup();
-      throw;
-    } catch (...) {
-      cleanup();
-      throw std::string("Unspecified error");
-    }
-    cleanup();
-    return 0;
-  }
-
-/// @}
-/// @name Data
-/// @{
-private:
-  ConfigDataProvider* cdp;      ///< Where we get configuration data from
-  Phases finalPhase;            ///< The final phase of compilation
-  OptimizationLevels optLevel;  ///< The optimization level to apply
-  unsigned Flags;               ///< The driver flags
-  std::string machine;          ///< Target machine name
-  PathVector LibraryPaths;      ///< -L options
-  PathVector IncludePaths;      ///< -I options
-  PathVector ToolPaths;         ///< -B options
-  StringVector Defines;         ///< -D options
-  sys::PathWithStatus TempDir;  ///< Name of the temporary directory.
-  StringTable AdditionalArgs;   ///< The -Txyz options
-  StringVector fOptions;        ///< -f options
-  StringVector MOptions;        ///< -M options
-  StringVector WOptions;        ///< -W options
-
-/// @}
-};
-}
-
-CompilerDriver::~CompilerDriver() {
-}
-
-CompilerDriver::ConfigDataProvider::~ConfigDataProvider() {}
-
-CompilerDriver*
-CompilerDriver::Get(ConfigDataProvider& CDP) {
-  return new CompilerDriverImpl(CDP);
-}
-
-CompilerDriver::ConfigData::ConfigData()
-  : langName()
-  , PreProcessor()
-  , Translator()
-  , Optimizer()
-  , Assembler()
-  , Linker()
-{
-  StringVector emptyVec;
-  for (unsigned i = 0; i < NUM_PHASES; ++i)
-    opts.push_back(emptyVec);
-}

Removed: llvm/trunk/tools/llvmc/CompilerDriver.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/CompilerDriver.h?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/CompilerDriver.h (original)
+++ llvm/trunk/tools/llvmc/CompilerDriver.h (removed)
@@ -1,206 +0,0 @@
-//===- CompilerDriver.h - Compiler Driver -----------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file declares the CompilerDriver class which implements the bulk of the
-// LLVM Compiler Driver program (llvmc).
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMC_COMPILERDRIVER_H
-#define LLVM_TOOLS_LLVMC_COMPILERDRIVER_H
-
-#include <string>
-#include <vector>
-#include "llvm/System/Program.h"
-
-namespace llvm {
-  /// This class provides the high level interface to the LLVM Compiler Driver.
-  /// The driver's purpose is to make it easier for compiler writers and users
-  /// of LLVM to utilize the compiler toolkits and LLVM toolset by learning only
-  /// the interface of one program (llvmc).
-  ///
-  /// @see llvmc.cpp
-  /// @brief The interface to the LLVM Compiler Driver.
-  class CompilerDriver {
-    /// @name Types
-    /// @{
-    public:
-      /// @brief A vector of strings, used for argument lists
-      typedef std::vector<std::string> StringVector;
-
-      /// @brief A vector of sys::Path, used for path lists
-      typedef std::vector<sys::Path> PathVector;
-
-      /// @brief A table of strings, indexed typically by Phases
-      typedef std::vector<StringVector> StringTable;
-
-      /// @brief The phases of processing that llvmc understands
-      enum Phases {
-        PREPROCESSING, ///< Source language combining, filtering, substitution
-        TRANSLATION,   ///< Translate source -> LLVM bitcode/assembly
-        OPTIMIZATION,  ///< Optimize translation result
-        ASSEMBLY,      ///< Convert program to executable
-        LINKING,       ///< Link bitcode and native code
-        NUM_PHASES     ///< Always last!
-      };
-
-      /// @brief The levels of optimization llvmc understands
-      enum OptimizationLevels {
-        OPT_FAST_COMPILE,         ///< Optimize to make >compile< go faster
-        OPT_SIMPLE,               ///< Standard/simple optimizations
-        OPT_AGGRESSIVE,           ///< Aggressive optimizations
-        OPT_LINK_TIME,            ///< Aggressive + LinkTime optimizations
-        OPT_AGGRESSIVE_LINK_TIME, ///< Make it go way fast!
-        OPT_NONE                  ///< No optimizations. Keep this at the end!
-      };
-
-      /// @brief Action specific flags
-      enum ConfigurationFlags {
-        REQUIRED_FLAG        = 0x0001, ///< Should the action always be run?
-        PREPROCESSES_FLAG    = 0x0002, ///< Does this action preprocess?
-        TRANSLATES_FLAG      = 0x0004, ///< Does this action translate?
-        OUTPUT_IS_ASM_FLAG   = 0x0008, ///< Action produces .ll files?
-        FLAGS_MASK           = 0x000F  ///< Union of all flags
-      };
-
-      /// This type is the input list to the CompilerDriver. It provides
-      /// a vector of pathname/filetype pairs. The filetype is used to look up
-      /// the configuration of the actions to be taken by the driver.
-      /// @brief The Input Data to the execute method
-      typedef std::vector<std::pair<sys::Path,std::string> > InputList;
-
-      /// This type is read from configuration files or otherwise provided to
-      /// the CompilerDriver through a "ConfigDataProvider". It serves as both
-      /// the template of what to do and the actual Action to be executed.
-      /// @brief A structure to hold the action data for a given source
-      /// language.
-      struct Action {
-        Action() : flags(0) {}
-        sys::Path program; ///< The program to execve
-        StringVector args; ///< Arguments to the program
-        unsigned flags;    ///< Action specific flags
-        void set(unsigned fl ) { flags |= fl; }
-        void clear(unsigned fl) { flags &= (FLAGS_MASK ^ fl); }
-        bool isSet(unsigned fl) { return (flags&fl) != 0; }
-      };
-
-      struct ConfigData {
-        ConfigData();
-        std::string version;    ///< The version number.
-        std::string langName;   ///< The name of the source language
-        StringTable opts;       ///< The o10n options for each level
-        StringVector libpaths;  ///< The library paths
-        Action PreProcessor;    ///< PreProcessor command line
-        Action Translator;      ///< Translator command line
-        Action Optimizer;       ///< Optimizer command line
-        Action Assembler;       ///< Assembler command line
-        Action Linker;          ///< Linker command line
-      };
-
-      /// This pure virtual interface class defines the interface between the
-      /// CompilerDriver and other software that provides ConfigData objects to
-      /// it. The CompilerDriver must be configured to use an object of this
-      /// type so it can obtain the configuration data.
-      /// @see setConfigDataProvider
-      /// @brief Configuration Data Provider interface
-      class ConfigDataProvider {
-      public:
-        virtual ~ConfigDataProvider();
-        virtual ConfigData* ProvideConfigData(const std::string& filetype) = 0;
-        virtual void setConfigDir(const sys::Path& dirName) = 0;
-      };
-
-      /// These flags control various actions of the compiler driver. They are
-      /// used by adding the needed flag values together and passing them to the
-      /// compiler driver's setDriverFlags method.
-      /// @see setDriverFlags
-      /// @brief Driver specific flags
-      enum DriverFlags {
-        DRY_RUN_FLAG         = 0x0001, ///< Do everything but execute actions
-        VERBOSE_FLAG         = 0x0002, ///< Print each action
-        DEBUG_FLAG           = 0x0004, ///< Print debug information
-        TIME_PASSES_FLAG     = 0x0008, ///< Time the passes as they execute
-        TIME_ACTIONS_FLAG    = 0x0010, ///< Time the actions as they execute
-        SHOW_STATS_FLAG      = 0x0020, ///< Show pass statistics
-        EMIT_NATIVE_FLAG     = 0x0040, ///< Emit native code instead of bc
-        EMIT_RAW_FLAG        = 0x0080, ///< Emit raw, unoptimized bitcode
-        KEEP_TEMPS_FLAG      = 0x0100, ///< Don't delete temporary files
-        STRIP_OUTPUT_FLAG    = 0x0200, ///< Strip symbols from linked output
-        DRIVER_FLAGS_MASK    = 0x03FF  ///< Union of the above flags
-      };
-
-    /// @}
-    /// @name Constructors
-    /// @{
-    public:
-      /// @brief Static Constructor
-      static CompilerDriver* Get(ConfigDataProvider& CDP);
-
-      /// @brief Virtual destructor
-      virtual ~CompilerDriver();
-
-    /// @}
-    /// @name Methods
-    /// @{
-    public:
-      /// @brief Execute the actions requested for the given input list.
-      virtual int execute(
-        const InputList& list, const sys::Path& output, std::string& ErrMsg) =0;
-
-      /// @brief Set the final phase at which compilation terminates
-      virtual void setFinalPhase(Phases phase) = 0;
-
-      /// @brief Set the optimization level for the compilation
-      virtual void setOptimization(OptimizationLevels level) = 0;
-
-      /// @brief Set the driver flags.
-      virtual void setDriverFlags(unsigned flags) = 0;
-
-      /// @brief Set the output machine name.
-      virtual void setOutputMachine(const std::string& machineName) = 0;
-
-      /// @brief Set the options for a given phase.
-      virtual void setPhaseArgs(Phases phase, const StringVector& opts) = 0;
-
-      /// @brief Set Library Paths
-      virtual void setIncludePaths(const StringVector& paths) = 0;
-
-      /// @brief Set Library Paths
-      virtual void setSymbolDefines(const StringVector& paths) = 0;
-
-      /// @brief Set Library Paths
-      virtual void setLibraryPaths(const StringVector& paths) = 0;
-
-      /// @brief Add a path to the list of library paths
-      virtual void addLibraryPath( const sys::Path& libPath )  = 0;
-
-      /// @brief Add a path to the list of paths in which to find tools
-      virtual void addToolPath( const sys::Path& toolPath) = 0;
-
-      /// @brief Set the list of -f options to be passed through
-      virtual void setfPassThrough(const StringVector& fOpts) = 0;
-
-      /// @brief Set the list of -M options to be passed through
-      virtual void setMPassThrough(const StringVector& fOpts) = 0;
-
-      /// @brief Set the list of -W options to be passed through
-      virtual void setWPassThrough(const StringVector& fOpts) = 0;
-
-      /// @brief Determine where a linkage file is located in the file system
-      virtual sys::Path GetPathForLinkageItem(
-        const std::string& link_item, ///< Item to be sought
-        bool native = false           ///< Looking for native?
-      ) = 0;
-
-    /// @}
-  };
-}
-
-// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab
-#endif

Removed: llvm/trunk/tools/llvmc/ConfigLexer.cpp.cvs
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/ConfigLexer.cpp.cvs?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/ConfigLexer.cpp.cvs (original)
+++ llvm/trunk/tools/llvmc/ConfigLexer.cpp.cvs (removed)
@@ -1,2900 +0,0 @@
-#line 2 "ConfigLexer.cpp"
-
-#line 4 "ConfigLexer.cpp"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-#if __STDC__
-
-#define YY_USE_CONST
-
-#endif	/* __STDC__ */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE Configrestart(Configin  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE (16384*64)
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-extern int Configleng;
-
-extern FILE *Configin, *Configout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    #define YY_LESS_LINENO(n)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up Configtext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		*yy_cp = (yy_hold_char); \
-		YY_RESTORE_YY_MORE_OFFSET \
-		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up Configtext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_size_t;
-#endif
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-	{
-	FILE *yy_input_file;
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	int yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via Configrestart()), so that the user can continue scanning by
-	 * just pointing Configin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-
-	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when Configtext is formed. */
-static char yy_hold_char;
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-int Configleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0;		/* whether we need to initialize */
-static int yy_start = 0;	/* start state number */
-
-/* Flag which is used to allow Configwrap()'s to do buffer switches
- * instead of setting up a fresh Configin.  A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void Configrestart (FILE *input_file  );
-void Config_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE Config_create_buffer (FILE *file,int size  );
-void Config_delete_buffer (YY_BUFFER_STATE b  );
-void Config_flush_buffer (YY_BUFFER_STATE b  );
-void Configpush_buffer_state (YY_BUFFER_STATE new_buffer  );
-void Configpop_buffer_state (void );
-
-static void Configensure_buffer_stack (void );
-static void Config_load_buffer_state (void );
-static void Config_init_buffer (YY_BUFFER_STATE b,FILE *file  );
-
-#define YY_FLUSH_BUFFER Config_flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE Config_scan_buffer (char *base,yy_size_t size  );
-YY_BUFFER_STATE Config_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE Config_scan_bytes (yyconst char *bytes,int len  );
-
-void *Configalloc (yy_size_t  );
-void *Configrealloc (void *,yy_size_t  );
-void Configfree (void *  );
-
-#define yy_new_buffer Config_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){ \
-        Configensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            Config_create_buffer(Configin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){\
-        Configensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            Config_create_buffer(Configin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-#define Configwrap(n) 1
-#define YY_SKIP_YYWRAP
-
-typedef unsigned char YY_CHAR;
-
-FILE *Configin = (FILE *) 0, *Configout = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int Configlineno;
-
-int Configlineno = 1;
-
-extern char *Configtext;
-#define yytext_ptr Configtext
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[]  );
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up Configtext.
- */
-#define YY_DO_BEFORE_ACTION \
-	(yytext_ptr) = yy_bp; \
-	Configleng = (size_t) (yy_cp - yy_bp); \
-	(yy_hold_char) = *yy_cp; \
-	*yy_cp = '\0'; \
-	(yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 55
-#define YY_END_OF_BUFFER 56
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-	{
-	flex_int32_t yy_verify;
-	flex_int32_t yy_nxt;
-	};
-static yyconst flex_int16_t yy_accept[408] =
-    {   0,
-        1,    1,   56,   55,    1,    4,   55,   55,   55,   52,
-       52,    6,    5,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,    1,    4,
-        0,   53,    0,    2,    0,   54,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   49,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   51,   52,   52,   50,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,    3,    0,   52,   52,   52,   52,   52,
-
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   48,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   29,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,    8,    9,   52,   52,   10,
-
-       11,   12,   13,   14,   15,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   39,   40,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   26,   52,   28,   52,
-       52,   52,   32,   52,   52,   52,   52,   43,   52,   52,
-       52,   52,   52,   52,   52,   25,   52,   21,   52,   52,
-
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   46,   47,   52,   45,   30,
-       52,   52,   52,   52,   41,   52,   52,   52,   52,   17,
-       52,   52,   52,   52,   52,   52,   52,   52,    7,   52,
-       52,   52,   52,   52,   27,   31,   52,   52,   52,   42,
-       52,   52,   52,   52,   52,   52,   52,   18,   52,   52,
-       52,   52,   52,   52,   37,   52,   35,   52,   52,   36,
-       44,   24,   22,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   52,   52,   52,   52,   23,   19,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-
-       52,   33,   20,   16,   38,   34,    0
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    1,    5,    6,    1,    7,    1,    1,    1,
-        1,    1,    8,    8,    8,    9,    8,    8,   10,   11,
-       12,   13,   14,    8,    8,    8,    8,    8,    1,    1,
-       15,    1,    1,   16,   17,   18,   19,   20,   21,   22,
-       23,   24,   25,   24,   26,   27,   28,   29,   30,   31,
-       32,   33,   34,   35,   36,   37,   38,   24,   39,   40,
-        1,   41,    1,    1,    8,    1,   42,   43,   44,   45,
-
-       46,   47,   48,   49,   50,   24,   51,   52,   53,   54,
-       55,   56,   57,   58,   59,   60,   61,   62,   24,   63,
-       64,   65,    1,    8,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-static yyconst flex_int32_t yy_meta[66] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    2,    3,    1,    3,
-        3,    3,    3,    3,    1,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3
-    } ;
-
-static yyconst flex_int16_t yy_base[412] =
-    {   0,
-        0,    0,  716, 3252,  713, 3252,  711,  708,   63,   61,
-        0, 3252, 3252,   36,   57,   50,   67,   68,   70,   93,
-       59,   73,   68,   93,  106,   75,  652,   46,  655,  667,
-       41,   86,   89,  650,  661,  648,  659,  658,  701, 3252,
-      697, 3252,   94, 3252,  698, 3252,    0,  148,  183,  218,
-      253,  305,  349,  389,  424,  472,  518,  573,  627,  671,
-      103,  641,    0,  664,  638,  669,  643,  668,  642,  664,
-      115,  638,   92,  663,    0,  637,  667,    0,  653,  651,
-      633,  616,  615,  653,  627,  640,  614,  115,   92,  637,
-      609,  632,  606, 3252,  661,   89,  603,  609,  609,  606,
-
-      114,  606,  611,  597,  596,  609,  597,  121,  595,  593,
-      711,  761,  811,  853,  901,  942,  992, 1030, 1067, 1123,
-     1177, 1231, 1267, 1319, 1366,    0,  630,  604,  630,  604,
-      619,  593,  611,  585,  619,  602,  606,  583,  571,  578,
-      607,  581,  159,  595,  164,  569,  593,  592,  586,  560,
-      591,  598,  564,  571,  582,  556,  567,  568,  558,  551,
-      561,  549,  556,  560,  190,  549,  548,  542,  548,  555,
-      541, 1418, 1472, 1526, 1579, 1618, 1671, 3252, 1725, 1771,
-     1824,  231,  242, 1871, 1925, 1967, 2007,  571,  545,  567,
-      541,  577,  551,  571,  545,    0,    0,  569,  542,    0,
-
-        0,    0,    0,    0,    0,  550,  541,  523,  514,  540,
-      514,  546,  513,  526,  499,  531,  500,  494,  491,  501,
-      491,  481,  468,  458,  452,  459,  448,  451, 2044, 2097,
-      263, 2150,  279, 2194, 2247, 2300,  289, 2344, 3252, 3252,
-     2386, 2439,  325, 2479,  473,  438,  457,  431,  445,  419,
-      438,  403,  430,  417,  399,  383,  409,  378,  396,  370,
-      400,  373,  386,  360,  370,  367,  357,  352,  359,  348,
-      352,  348,  346,  339,  337,  363, 3252, 2528, 3252,  373,
-      410, 2580, 3252, 2632, 2670,  434, 2727, 3252, 2781,  366,
-      340,  370,  342,  362,  327,    0,  329,    0,  303,  348,
-
-      320,  337,  308,  335,  301,  313,  286,  282,  285,  284,
-      263,  283,  280,  283,  270, 3252, 3252,  446, 3252, 3252,
-      456,  482, 2834, 2872, 3252,  492, 2929,  144,  121,    0,
-      302,  276,  293,  264,  289,  263,  272,  246,    0,  134,
-      252,  242,  240,  224, 3252, 3252,   74, 2969,  504, 3252,
-      528,  249,  223,  247,  220,  234,  203,    0,  158,  160,
-      199,  193,  187,  161, 3252,  185, 3252, 3008, 3060, 3252,
-     3252,    0,    0,  202,  176,  199,  194,  164,  164,  162,
-      161,  154,  150, 3104, 3142,  187,  163,    0,    0,  164,
-      146, 3194,  541,  158,  154,  127,  123,  107,   80,   81,
-
-      554, 3252,    0,    0, 3252, 3252, 3252, 3243, 3246, 3248,
-       83
-    } ;
-
-static yyconst flex_int16_t yy_def[412] =
-    {   0,
-      407,    1,  407,  407,  407,  407,  407,  408,  409,  410,
-      411,  407,  407,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  407,  407,
-      408,  407,  409,  407,  407,  407,  411,  410,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  407,  407,  411,  411,  411,  411,  411,
-
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  410,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  410,  410,  410,  410,  410,  410,  407,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  410,  410,
-      410,  410,  410,  410,  410,  410,  410,  410,  407,  407,
-      410,  410,  410,  410,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  410,  410,  407,  410,  407,  410,
-      410,  410,  407,  410,  410,  410,  410,  407,  410,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  411,  407,  407,  410,  407,  407,
-      410,  410,  410,  410,  407,  410,  410,  411,  411,  411,
-      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  407,  407,  411,  410,  410,  407,
-      410,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  411,  407,  411,  407,  410,  410,  407,
-      407,  411,  411,  411,  411,  411,  411,  411,  411,  411,
-      411,  411,  411,  410,  410,  411,  411,  411,  411,  411,
-      411,  410,  410,  411,  411,  411,  411,  411,  411,  411,
-
-      410,  407,  411,  411,  407,  407,    0,  407,  407,  407,
-      407
-    } ;
-
-static yyconst flex_int16_t yy_nxt[3318] =
-    {   0,
-        4,    5,    6,    7,    8,    9,   10,   11,   12,   11,
-       11,   11,   11,   11,   13,    4,   14,   15,   16,   11,
-       11,   17,   11,   11,   11,   11,   18,   11,   19,   20,
-       21,   11,   22,   11,   23,   11,   24,   11,   25,   11,
-       26,   27,   28,   29,   11,   11,   30,   11,   11,   11,
-       11,   31,   11,   32,   33,   34,   11,   35,   11,   36,
-       11,   37,   11,   38,   11,   44,   45,   46,   47,   61,
-       47,   47,   47,   47,   47,   63,   47,   94,   95,   66,
-      365,   64,  100,   68,   70,   47,   74,  405,   49,   63,
-      101,   84,   71,   86,   62,   97,   44,   45,   50,   75,
-
-       88,   47,   51,   52,   67,   53,   65,   54,   69,   72,
-       55,   76,   56,   90,   77,   57,   85,   73,   87,   58,
-       59,   78,   60,   79,   75,   89,   92,  102,   80,  366,
-      126,  151,  136,  153,  139,  103,  127,  404,   91,   81,
-       75,  126,   78,  137,  104,  140,   78,  157,   82,  105,
-      152,   93,  154,   83,   46,   47,  162,   47,   47,   47,
-       47,   47,  169,   47,  352,  403,  353,  163,  201,  202,
-      203,  204,  205,  201,  202,  203,  204,  205,  376,  361,
-      404,  170,  126,  206,  126,  403,  404,  377,   47,   46,
-       47,  403,   47,   47,   47,   47,   47,  126,   47,  201,
-
-      202,  203,  204,  205,  400,  378,  381,  394,  396,  398,
-      391,  389,  111,  208,  379,  382,  395,  397,  399,  388,
-      390,  389,  388,   47,   46,   47,  389,   47,   47,   47,
-       47,   47,  388,   47,  387,  386,  383,  239,   47,  223,
-       47,   47,   47,   47,   47,  380,   47,  112,  240,   47,
-      373,   47,   47,   47,   47,   47,  372,   47,   47,   46,
-       47,  375,   47,   47,   47,   47,   47,  374,   47,  277,
-       47,   47,   47,   47,   47,   47,   47,  373,   47,  373,
-      372,  372,   47,  364,  358,  279,   47,  363,   47,   47,
-       47,   47,   47,   47,   47,  283,   47,  362,   47,   47,
-
-       47,   47,   47,   47,   47,  360,  359,  358,  358,  357,
-      113,   46,   47,  356,   47,   47,   47,   47,   47,   47,
-       47,  355,  354,  339,  344,  343,  342,  341,  330,   47,
-       63,  288,   47,  340,   47,   47,   47,   47,   47,  339,
-       47,  339,  338,  316,   47,   47,   47,   47,   47,   47,
-       47,  337,   47,  336,  114,   46,   47,  335,   47,   47,
-       47,   47,   47,  334,   47,   47,  333,  332,  331,  317,
-       47,  330,   47,   47,   47,   47,   47,   47,   47,  319,
-       47,  330,   47,   47,   47,   47,   47,   63,   47,   47,
-       63,  329,  328,  315,  115,   46,   47,  314,   47,   47,
-
-       47,   47,   47,   47,   47,  313,  312,  298,  311,  296,
-      310,  309,  308,   47,  307,  306,  320,   47,  116,   47,
-       47,   47,   47,   47,  305,   47,  304,  303,  302,   47,
-       46,   47,  301,   47,   47,   47,   47,   47,  300,   47,
-      325,   47,  298,   47,   47,   47,   47,   47,  299,   47,
-       47,  298,  345,   47,  297,   47,   47,   47,   47,   47,
-      296,   47,  346,   47,   47,   47,   47,   47,   47,   47,
-      296,   47,  295,  294,   47,  293,  292,  117,   46,   47,
-      291,   47,   47,   47,   47,   47,   47,   47,   46,   47,
-      290,  347,   47,   47,   47,   47,   47,   47,  350,   47,
-
-      274,   47,   47,   47,   47,   47,  273,   47,  272,  271,
-      370,   47,   47,   47,   47,   47,   47,   47,  270,   47,
-      269,  118,   47,  119,   46,   47,  268,   47,   47,   47,
-       47,   47,   47,   47,  371,   47,   75,   47,   47,   47,
-       47,   47,  267,   47,   47,  266,  265,  402,   47,  264,
-       47,   47,   47,   47,   47,  263,   47,  262,   47,  261,
-      406,   47,  260,   47,   47,   47,   47,   47,   47,   47,
-      259,  258,  257,  120,  256,  255,  254,  253,  121,   46,
-       47,   47,   47,   47,   47,   47,   47,  252,   47,  251,
-       75,   75,  250,  249,   47,  248,  247,  246,  245,  228,
-
-       78,  227,  226,  225,  224,  200,  222,  197,  196,  221,
-      220,  219,  218,   47,  217,  216,   78,  215,   78,  214,
-      213,  212,  211,  210,  209,  207,  200,  200,  199,  197,
-      196,  198,  122,   46,   47,  197,   47,   47,   47,   47,
-       47,  196,   47,  195,  194,  193,  192,  191,  190,  189,
-      188,   78,  171,  168,  167,  166,  165,   75,  164,  161,
-      160,  159,  158,   94,   78,   78,  156,   47,  123,  155,
-      150,  149,  148,  147,  146,  145,  124,   46,   47,   75,
-       47,   47,   47,   47,   47,  144,   47,  143,   75,  142,
-      141,  138,  135,  134,  133,  132,  131,  130,  129,  128,
-
-       44,   42,   39,  110,  109,  108,  107,  106,   99,   98,
-       96,   47,   42,   40,   39,  407,  125,   46,   47,  407,
-       47,   47,   47,   47,   47,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,   47,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  172,   46,   47,  407,
-       47,   47,   47,   47,   47,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,   47,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  173,   46,   47,  407,
-       47,   47,   47,   47,   47,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,   47,  407,  407,  407,  407,  407,  407,  174,   46,
-       47,  407,   47,   47,   47,   47,   47,  407,   47,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,   47,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  175,   46,   47,  407,
-       47,   47,   47,   47,   47,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,   47,  407,  407,  407,  407,  407,  176,   46,   47,
-      407,   47,   47,   47,   47,   47,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  177,  178,   47,
-
-      407,   47,   47,   47,   47,   47,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,   47,  407,  407,  179,   46,   47,  407,   47,
-       47,   47,   47,   47,  407,   47,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-       47,  407,  180,   46,   47,  407,   47,   47,   47,   47,
-       47,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  181,   46,
-       47,  407,   47,   47,   47,   47,   47,  407,   47,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,   47,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  182,   46,   47,  407,   47,   47,   47,   47,
-       47,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  183,   46,   47,  407,
-       47,   47,   47,   47,   47,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,   47,  184,   46,   47,  407,   47,   47,   47,   47,
-       47,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  185,   46,   47,  407,   47,   47,
-       47,   47,   47,  407,   47,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,   47,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  186,   46,   47,  407,   47,   47,   47,   47,   47,
-      407,   47,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  187,   46,   47,  407,   47,   47,   47,
-       47,   47,  407,   47,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,   47,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  229,   46,   47,
-      407,   47,   47,   47,   47,   47,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  230,   46,   47,  407,   47,   47,   47,   47,   47,
-      407,   47,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  231,   46,   47,  407,   47,   47,
-       47,   47,   47,  407,   47,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,   47,
-      407,  407,  407,  232,   46,   47,  407,   47,   47,   47,
-       47,   47,  407,   47,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,   47,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  233,   46,   47,  407,
-       47,   47,   47,   47,   47,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,   47,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      234,   46,   47,  407,   47,   47,   47,   47,   47,  407,
-       47,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,   47,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  235,   46,   47,  407,
-       47,   47,   47,   47,   47,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,   47,  407,  407,  407,  236,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  237,
-       46,   47,  407,   47,   47,   47,   47,   47,  407,   47,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,   47,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  238,   46,   47,  407,
-       47,   47,   47,   47,   47,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,   47,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      241,   46,   47,  407,   47,   47,   47,   47,   47,  407,
-       47,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,   47,  407,  407,  407,  407,
-      407,  407,  242,   46,   47,  407,   47,   47,   47,   47,
-       47,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,   47,  407,  407,
-      407,  407,  243,   46,   47,  407,   47,   47,   47,   47,
-       47,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,   47,  407,  244,
-       46,   47,  407,   47,   47,   47,   47,   47,  407,   47,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,   47,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  275,   46,   47,  407,   47,   47,   47,   47,
-       47,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  276,   46,   47,  407,   47,
-       47,   47,   47,   47,  407,   47,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-       47,  407,  407,  407,  407,  407,  407,  407,  407,  278,
-
-       46,   47,  407,   47,   47,   47,   47,   47,  407,   47,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,   47,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  280,   46,   47,  407,   47,   47,   47,   47,
-       47,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  281,   46,   47,  407,   47,
-       47,   47,   47,   47,  407,   47,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-       47,  407,  407,  407,  407,  407,  407,  407,  407,  282,
-       46,   47,  407,   47,   47,   47,   47,   47,  407,   47,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,   47,  407,  407,  284,  407,  407,
-      407,  285,   46,   47,  407,   47,   47,   47,   47,   47,
-
-      407,   47,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,   47,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  286,   46,   47,  407,   47,   47,
-       47,   47,   47,  407,   47,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,   47,
-      407,  407,  407,  407,  287,   46,   47,  407,   47,   47,
-       47,   47,   47,  407,   47,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,   47,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  289,   46,   47,  407,   47,   47,   47,
-       47,   47,  407,   47,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,   47,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  318,   46,   47,  407,   47,
-       47,   47,   47,   47,  407,   47,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-       47,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  321,   46,   47,
-      407,   47,   47,   47,   47,   47,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,   47,  407,  407,  322,   46,   47,  407,   47,
-       47,   47,   47,   47,  407,   47,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-       47,  407,  407,  323,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  324,   46,   47,  407,   47,   47,   47,   47,
-       47,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  326,   46,   47,  407,
-       47,   47,   47,   47,   47,  407,   47,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,   47,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  327,
-       46,   47,  407,   47,   47,   47,   47,   47,  407,   47,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,   47,  407,  407,  348,   46,   47,
-      407,   47,   47,   47,   47,   47,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  349,   46,   47,  407,   47,   47,
-       47,   47,   47,  407,   47,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,   47,
-      407,  407,  407,  407,  351,  367,   47,  407,   47,   47,
-       47,   47,   47,  407,   47,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,   47,
-      368,  407,  407,  369,   46,   47,  407,   47,   47,   47,
-       47,   47,  407,   47,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,   47,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  384,   46,   47,  407,   47,
-       47,   47,   47,   47,  407,   47,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-       47,  407,  407,  407,  407,  407,  407,  407,  407,  385,
-       46,   47,  407,   47,   47,   47,   47,   47,  407,   47,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,   47,  407,  407,  392,   46,   47,
-      407,   47,   47,   47,   47,   47,  407,   47,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,   47,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  393,
-
-       46,   47,  407,   47,   47,   47,   47,   47,  407,   47,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,   47,  407,  407,  407,  407,  407,
-      407,  407,  401,   41,   41,   41,   43,   43,   43,   48,
-       48,    3,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407
-    } ;
-
-static yyconst flex_int16_t yy_chk[3318] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    9,    9,   10,   10,   14,
-       10,   10,   10,   10,   10,   15,   10,   26,   26,   16,
-      347,   15,   31,   17,   18,  411,   19,  400,   10,   28,
-       31,   21,   18,   22,   14,   28,   43,   43,   10,   19,
-
-       23,   10,   10,   10,   16,   10,   15,   10,   17,   18,
-       10,   19,   10,   24,   20,   10,   21,   18,   22,   10,
-       10,   20,   10,   20,   19,   23,   25,   32,   20,  347,
-       61,   88,   71,   89,   73,   33,   61,  399,   24,   20,
-       32,   96,   33,   71,   33,   73,   20,   96,   20,   33,
-       88,   25,   89,   20,   48,   48,  101,   48,   48,   48,
-       48,   48,  108,   48,  328,  398,  329,  101,  143,  143,
-      143,  143,  143,  145,  145,  145,  145,  145,  359,  340,
-      397,  108,  328,  143,  329,  396,  395,  359,   48,   49,
-       49,  394,   49,   49,   49,   49,   49,  340,   49,  165,
-
-      165,  165,  165,  165,  391,  360,  364,  386,  387,  390,
-      383,  382,   49,  145,  360,  364,  386,  387,  390,  381,
-      380,  379,  378,   49,   50,   50,  377,   50,   50,   50,
-       50,   50,  376,   50,  375,  374,  366,  182,  182,  165,
-      182,  182,  182,  182,  182,  363,  182,   50,  183,  183,
-      362,  183,  183,  183,  183,  183,  361,  183,   50,   51,
-       51,  357,   51,   51,   51,   51,   51,  356,   51,  231,
-      231,  182,  231,  231,  231,  231,  231,  355,  231,  354,
-      353,  352,  183,  344,  343,  233,  233,  342,  233,  233,
-      233,  233,  233,   51,  233,  237,  237,  341,  237,  237,
-
-      237,  237,  237,  231,  237,  338,  337,  336,  335,  334,
-       51,   52,   52,  333,   52,   52,   52,   52,   52,  233,
-       52,  332,  331,  315,  314,  313,  312,  311,  310,  237,
-      309,  243,  243,  308,  243,  243,  243,  243,  243,  307,
-      243,  306,  305,  275,  275,   52,  275,  275,  275,  275,
-      275,  304,  275,  303,   52,   53,   53,  302,   53,   53,
-       53,   53,   53,  301,   53,  243,  300,  299,  297,  276,
-      276,  295,  276,  276,  276,  276,  276,  275,  276,  280,
-      280,  294,  280,  280,  280,  280,  280,  293,  280,   53,
-      292,  291,  290,  274,   53,   54,   54,  273,   54,   54,
-
-       54,   54,   54,  276,   54,  272,  271,  270,  269,  268,
-      267,  266,  265,  280,  264,  263,  281,  281,   54,  281,
-      281,  281,  281,  281,  262,  281,  261,  260,  259,   54,
-       55,   55,  258,   55,   55,   55,   55,   55,  257,   55,
-      286,  286,  256,  286,  286,  286,  286,  286,  255,  286,
-      281,  254,  318,  318,  253,  318,  318,  318,  318,  318,
-      252,  318,  321,  321,   55,  321,  321,  321,  321,  321,
-      251,  321,  250,  249,  286,  248,  247,   55,   56,   56,
-      246,   56,   56,   56,   56,   56,  318,   56,  322,  322,
-      245,  322,  322,  322,  322,  322,  321,  322,  326,  326,
-
-      228,  326,  326,  326,  326,  326,  227,  326,  226,  225,
-      349,  349,   56,  349,  349,  349,  349,  349,  224,  349,
-      223,   56,  322,   56,   57,   57,  222,   57,   57,   57,
-       57,   57,  326,   57,  351,  351,  221,  351,  351,  351,
-      351,  351,  220,  351,  349,  219,  218,  393,  393,  217,
-      393,  393,  393,  393,  393,  216,  393,  215,   57,  214,
-      401,  401,  213,  401,  401,  401,  401,  401,  351,  401,
-      212,  211,  210,   57,  209,  208,  207,  206,   57,   58,
-       58,  393,   58,   58,   58,   58,   58,  199,   58,  198,
-      195,  194,  193,  192,  401,  191,  190,  189,  188,  171,
-
-      170,  169,  168,  167,  166,  164,  163,  162,  161,  160,
-      159,  158,  157,   58,  156,  155,  154,  153,  152,  151,
-      150,  149,  148,  147,  146,  144,  142,  141,  140,  139,
-      138,  137,   58,   59,   59,  136,   59,   59,   59,   59,
-       59,  135,   59,  134,  133,  132,  131,  130,  129,  128,
-      127,  110,  109,  107,  106,  105,  104,  103,  102,  100,
-       99,   98,   97,   95,   93,   92,   91,   59,   59,   90,
-       87,   86,   85,   84,   83,   82,   59,   60,   60,   81,
-       60,   60,   60,   60,   60,   80,   60,   79,   77,   76,
-       74,   72,   70,   69,   68,   67,   66,   65,   64,   62,
-
-       45,   41,   39,   38,   37,   36,   35,   34,   30,   29,
-       27,   60,    8,    7,    5,    3,   60,  111,  111,    0,
-      111,  111,  111,  111,  111,    0,  111,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  111,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  111,  112,  112,    0,
-      112,  112,  112,  112,  112,    0,  112,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,  112,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  112,  113,  113,    0,
-      113,  113,  113,  113,  113,    0,  113,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  113,    0,    0,    0,    0,    0,    0,  113,  114,
-      114,    0,  114,  114,  114,  114,  114,    0,  114,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  114,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,  114,  115,  115,    0,
-      115,  115,  115,  115,  115,    0,  115,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  115,    0,    0,    0,    0,    0,  115,  116,  116,
-        0,  116,  116,  116,  116,  116,    0,  116,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  116,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  116,  117,  117,
-
-        0,  117,  117,  117,  117,  117,    0,  117,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  117,    0,    0,  117,  118,  118,    0,  118,
-      118,  118,  118,  118,    0,  118,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      118,    0,  118,  119,  119,    0,  119,  119,  119,  119,
-      119,    0,  119,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,  119,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  119,  120,
-      120,    0,  120,  120,  120,  120,  120,    0,  120,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  120,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  120,  121,  121,    0,  121,  121,  121,  121,
-      121,    0,  121,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  121,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  121,  122,  122,    0,
-      122,  122,  122,  122,  122,    0,  122,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  122,  122,  123,  123,    0,  123,  123,  123,  123,
-      123,    0,  123,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,  123,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  123,  124,  124,    0,  124,  124,
-      124,  124,  124,    0,  124,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  124,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  124,  125,  125,    0,  125,  125,  125,  125,  125,
-        0,  125,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,  125,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  125,  172,  172,    0,  172,  172,  172,
-      172,  172,    0,  172,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  172,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  172,  173,  173,
-        0,  173,  173,  173,  173,  173,    0,  173,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  173,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  173,  174,  174,    0,  174,  174,  174,  174,  174,
-        0,  174,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  174,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  174,  175,  175,    0,  175,  175,
-      175,  175,  175,    0,  175,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  175,
-        0,    0,    0,  175,  176,  176,    0,  176,  176,  176,
-      176,  176,    0,  176,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  176,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  176,  177,  177,    0,
-      177,  177,  177,  177,  177,    0,  177,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  177,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      177,  179,  179,    0,  179,  179,  179,  179,  179,    0,
-      179,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  179,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  179,  180,  180,    0,
-      180,  180,  180,  180,  180,    0,  180,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  180,    0,    0,    0,  180,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  180,
-      181,  181,    0,  181,  181,  181,  181,  181,    0,  181,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  181,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  181,  184,  184,    0,
-      184,  184,  184,  184,  184,    0,  184,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  184,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      184,  185,  185,    0,  185,  185,  185,  185,  185,    0,
-      185,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  185,    0,    0,    0,    0,
-        0,    0,  185,  186,  186,    0,  186,  186,  186,  186,
-      186,    0,  186,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,  186,    0,    0,
-        0,    0,  186,  187,  187,    0,  187,  187,  187,  187,
-      187,    0,  187,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  187,    0,  187,
-      229,  229,    0,  229,  229,  229,  229,  229,    0,  229,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  229,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,  229,  230,  230,    0,  230,  230,  230,  230,
-      230,    0,  230,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  230,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  230,  232,  232,    0,  232,
-      232,  232,  232,  232,    0,  232,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      232,    0,    0,    0,    0,    0,    0,    0,    0,  232,
-
-      234,  234,    0,  234,  234,  234,  234,  234,    0,  234,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  234,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  234,  235,  235,    0,  235,  235,  235,  235,
-      235,    0,  235,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  235,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,  235,  236,  236,    0,  236,
-      236,  236,  236,  236,    0,  236,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      236,    0,    0,    0,    0,    0,    0,    0,    0,  236,
-      238,  238,    0,  238,  238,  238,  238,  238,    0,  238,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  238,    0,    0,  238,    0,    0,
-        0,  238,  241,  241,    0,  241,  241,  241,  241,  241,
-
-        0,  241,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  241,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  241,  242,  242,    0,  242,  242,
-      242,  242,  242,    0,  242,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  242,
-        0,    0,    0,    0,  242,  244,  244,    0,  244,  244,
-      244,  244,  244,    0,  244,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  244,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  244,  278,  278,    0,  278,  278,  278,
-      278,  278,    0,  278,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  278,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  278,  282,  282,    0,  282,
-      282,  282,  282,  282,    0,  282,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      282,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  282,  284,  284,
-        0,  284,  284,  284,  284,  284,    0,  284,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  284,    0,    0,  284,  285,  285,    0,  285,
-      285,  285,  285,  285,    0,  285,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      285,    0,    0,  285,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  285,  287,  287,    0,  287,  287,  287,  287,
-      287,    0,  287,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  287,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  287,  289,  289,    0,
-      289,  289,  289,  289,  289,    0,  289,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  289,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  289,
-      323,  323,    0,  323,  323,  323,  323,  323,    0,  323,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  323,    0,    0,  323,  324,  324,
-        0,  324,  324,  324,  324,  324,    0,  324,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  324,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  324,  327,  327,    0,  327,  327,
-      327,  327,  327,    0,  327,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  327,
-        0,    0,    0,    0,  327,  348,  348,    0,  348,  348,
-      348,  348,  348,    0,  348,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  348,
-      348,    0,    0,  348,  368,  368,    0,  368,  368,  368,
-      368,  368,    0,  368,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  368,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  368,  369,  369,    0,  369,
-      369,  369,  369,  369,    0,  369,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-      369,    0,    0,    0,    0,    0,    0,    0,    0,  369,
-      384,  384,    0,  384,  384,  384,  384,  384,    0,  384,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  384,    0,    0,  384,  385,  385,
-        0,  385,  385,  385,  385,  385,    0,  385,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  385,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  385,
-
-      392,  392,    0,  392,  392,  392,  392,  392,    0,  392,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  392,    0,    0,    0,    0,    0,
-        0,    0,  392,  408,  408,  408,  409,  409,  409,  410,
-      410,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-
-      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
-      407,  407,  407,  407,  407,  407,  407
-    } ;
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-extern int Config_flex_debug;
-int Config_flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *Configtext;
-#line 1 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-/*===- ConfigLexer.l - Scanner for CompilerDriver Config Files -*- C++ -*--===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file implements the flex scanner for configuration files for the
-// llvmc CompilerDriver.
-//
-//===----------------------------------------------------------------------===*/
-#line 29 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-
-#include "ConfigLexer.h"
-
-#define YY_INPUT(buf,result,max_size) \
-  { \
-    assert(ConfigLexerInput != 0 && "Oops"); \
-    result = ConfigLexerInput->read(buf,max_size); \
-    if (result == 0 ) result = YY_NULL; \
-  }
-
-#define YY_FATAL_ERROR(msg) \
-  { \
-    assert(ConfigLexerInput != 0 && "Oops"); \
-    ConfigLexerInput->error(msg); \
-  }
-
-#define YY_DECL ConfigLexerTokens llvm::Configlex()
-
-#define yyterminate() { return EOFTOK; }
-
-using namespace llvm;
-
-inline llvm::ConfigLexerTokens 
-handleNameContext(llvm::ConfigLexerTokens token) {
-  ConfigLexerState.StringVal = Configtext;
-  if (ConfigLexerState.in_value)
-    return OPTION;
-  return token;
-}
-
-inline llvm::ConfigLexerTokens 
-handleSubstitution(llvm::ConfigLexerTokens token) {
-  if (ConfigLexerState.in_value) {
-    ConfigLexerState.StringVal = Configtext;
-    return token;
-  }
-  YY_FATAL_ERROR("Substitition tokens not allowed in names" ); 
-  return ERRORTOK;
-}
-
-inline llvm::ConfigLexerTokens handleValueContext(llvm::ConfigLexerTokens token) {
-  ConfigLexerState.StringVal = Configtext;
-  if (ConfigLexerState.in_value)
-    return token;
-  return OPTION;
-}
-
-#line 1386 "ConfigLexer.cpp"
-
-#define INITIAL 0
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int Configwrap (void );
-#else
-extern int Configwrap (void );
-#endif
-#endif
-
-    static inline void yyunput (int c,char *buf_ptr  );
-    
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO (void) fwrite( Configtext, Configleng, 1, Configout )
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
-		{ \
-		int c = '*'; \
-		size_t n; \
-		for ( n = 0; n < max_size && \
-			     (c = getc( Configin )) != EOF && c != '\n'; ++n ) \
-			buf[n] = (char) c; \
-		if ( c == '\n' ) \
-			buf[n++] = (char) c; \
-		if ( c == EOF && ferror( Configin ) ) \
-			YY_FATAL_ERROR( "input in flex scanner failed" ); \
-		result = n; \
-		} \
-	else \
-		{ \
-		errno=0; \
-		while ( (result = fread(buf, 1, max_size, Configin))==0 && ferror(Configin)) \
-			{ \
-			if( errno != EINTR) \
-				{ \
-				YY_FATAL_ERROR( "input in flex scanner failed" ); \
-				break; \
-				} \
-			errno=0; \
-			clearerr(Configin); \
-			} \
-		}\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int Configlex (void);
-
-#define YY_DECL int Configlex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after Configtext and Configleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
-	YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
-    
-#line 114 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-
-
-#line 1542 "ConfigLexer.cpp"
-
-	if ( !(yy_init) )
-		{
-		(yy_init) = 1;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! (yy_start) )
-			(yy_start) = 1;	/* first start state */
-
-		if ( ! Configin )
-			Configin = stdin;
-
-		if ( ! Configout )
-			Configout = stdout;
-
-		if ( ! YY_CURRENT_BUFFER ) {
-			Configensure_buffer_stack ();
-			YY_CURRENT_BUFFER_LVALUE =
-				Config_create_buffer(Configin,YY_BUF_SIZE );
-		}
-
-		Config_load_buffer_state( );
-		}
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-		yy_cp = (yy_c_buf_p);
-
-		/* Support of Configtext. */
-		*yy_cp = (yy_hold_char);
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-		yy_current_state = (yy_start);
-yy_match:
-		do
-			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-			if ( yy_accept[yy_current_state] )
-				{
-				(yy_last_accepting_state) = yy_current_state;
-				(yy_last_accepting_cpos) = yy_cp;
-				}
-			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-				{
-				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 408 )
-					yy_c = yy_meta[(unsigned int) yy_c];
-				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-			++yy_cp;
-			}
-		while ( yy_current_state != 407 );
-		yy_cp = (yy_last_accepting_cpos);
-		yy_current_state = (yy_last_accepting_state);
-
-yy_find_action:
-		yy_act = yy_accept[yy_current_state];
-
-		YY_DO_BEFORE_ACTION;
-
-do_action:	/* This label is used only to access EOF actions. */
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-			case 0: /* must back up */
-			/* undo the effects of YY_DO_BEFORE_ACTION */
-			*yy_cp = (yy_hold_char);
-			yy_cp = (yy_last_accepting_cpos);
-			yy_current_state = (yy_last_accepting_state);
-			goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 116 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ if (ConfigLexerState.in_value) return SPACE; }
-	YY_BREAK
-case 2:
-/* rule 2 can match eol */
-YY_RULE_SETUP
-#line 118 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ /* Ignore comments */
-                  ConfigLexerState.in_value = false; 
-                  ConfigLexerState.lineNum++; 
-                  return EOLTOK; 
-                }
-	YY_BREAK
-case 3:
-/* rule 3 can match eol */
-YY_RULE_SETUP
-#line 124 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ ConfigLexerState.lineNum++; 
-                  /* Don't return EOLTOK! */
-                }
-	YY_BREAK
-case 4:
-/* rule 4 can match eol */
-YY_RULE_SETUP
-#line 128 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ ConfigLexerState.in_value = false; 
-                  ConfigLexerState.lineNum++; 
-                  return EOLTOK; 
-                }
-	YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 133 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ ConfigLexerState.in_value = true; 
-                  return EQUALS; 
-                }
-	YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 137 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return SEPARATOR; }
-	YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 139 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(VERSION_TOK); }
-	YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 141 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(LANG); }
-	YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 142 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(LIBS); }
-	YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 143 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(NAME); }
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 144 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(OPT1); }
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 145 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(OPT2); }
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 146 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(OPT3); }
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 147 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(OPT4); }
-	YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 148 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(OPT5); }
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 150 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(PREPROCESSOR); }
-	YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 151 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(COMMAND); }
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 152 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(REQUIRED); }
-	YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 154 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(TRANSLATOR); }
-	YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 155 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(PREPROCESSES); }
-	YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 156 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(OUTPUT); }
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 158 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(OPTIMIZER); }
-	YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 159 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(TRANSLATES); }
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 161 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(ASSEMBLER); }
-	YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 163 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleNameContext(LINKER); }
-	YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 165 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(ARGS_SUBST); }
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 166 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(BINDIR_SUBST); }      
-	YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 167 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(DEFS_SUBST); }
-	YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 168 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(IN_SUBST); }
-	YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 169 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(INCLS_SUBST); }
-	YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 170 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(LIBDIR_SUBST); }
-	YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 171 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(LIBS_SUBST); }
-	YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 172 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(LLVMGCCDIR_SUBST); }
-	YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 173 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(LLVMGCCARCH_SUBST); }
-	YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 174 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(LLVMGCC_SUBST); }
-	YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 175 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(LLVMGXX_SUBST); }
-	YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 176 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(LLVMCC1_SUBST); }
-	YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 177 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(LLVMCC1PLUS_SUBST); }
-	YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 178 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(OPT_SUBST); }
-	YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 179 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(OUT_SUBST); }
-	YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 180 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(STATS_SUBST); }
-	YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 181 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(TARGET_SUBST); }
-	YY_BREAK
-case 43:
-YY_RULE_SETUP
-#line 182 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(TIME_SUBST); }
-	YY_BREAK
-case 44:
-YY_RULE_SETUP
-#line 183 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(VERBOSE_SUBST); }
-	YY_BREAK
-case 45:
-YY_RULE_SETUP
-#line 184 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(FOPTS_SUBST); }
-	YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 185 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(MOPTS_SUBST); }
-	YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 186 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleSubstitution(WOPTS_SUBST); }
-	YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 188 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleValueContext(ASSEMBLY); }
-	YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 189 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleValueContext(BITCODE); }
-	YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 190 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleValueContext(TRUETOK); }
-	YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 191 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ return handleValueContext(FALSETOK); }
-	YY_BREAK
-case 52:
-YY_RULE_SETUP
-#line 193 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ ConfigLexerState.StringVal = Configtext; return OPTION; }
-	YY_BREAK
-case 53:
-/* rule 53 can match eol */
-YY_RULE_SETUP
-#line 194 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ ConfigLexerState.StringVal = Configtext+1;  // Nuke start quote
-                  ConfigLexerState.StringVal.erase(
-                  --ConfigLexerState.StringVal.end());
-                  return STRING;
-                }
-	YY_BREAK
-case 54:
-YY_RULE_SETUP
-#line 199 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-{ YY_FATAL_ERROR("Invalid substitution token"); }
-	YY_BREAK
-case 55:
-YY_RULE_SETUP
-#line 201 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-ECHO;
-	YY_BREAK
-#line 1915 "ConfigLexer.cpp"
-case YY_STATE_EOF(INITIAL):
-	yyterminate();
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = (yy_hold_char);
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed Configin at a new source and called
-			 * Configlex().  If so, then we have to assure
-			 * consistency between YY_CURRENT_BUFFER and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-			YY_CURRENT_BUFFER_LVALUE->yy_input_file = Configin;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state(  );
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++(yy_c_buf_p);
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-				yy_cp = (yy_last_accepting_cpos);
-				yy_current_state = (yy_last_accepting_state);
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer(  ) )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				(yy_did_buffer_switch_on_eof) = 0;
-
-				if ( Configwrap( ) )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * Configtext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				(yy_c_buf_p) =
-					(yytext_ptr) + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				(yy_c_buf_p) =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-} /* end of Configlex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-	else
-		{
-			int num_to_read =
-			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
-			int yy_c_buf_p_offset =
-				(int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				int new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					Configrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-						number_to_move - 1;
-
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), num_to_read );
-
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	if ( (yy_n_chars) == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			Configrestart(Configin  );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	(yy_n_chars) += number_to_move;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-	return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-    static yy_state_type yy_get_previous_state (void)
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-    
-	yy_current_state = (yy_start);
-
-	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-		{
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-		if ( yy_accept[yy_current_state] )
-			{
-			(yy_last_accepting_state) = yy_current_state;
-			(yy_last_accepting_cpos) = yy_cp;
-			}
-		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-			{
-			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 408 )
-				yy_c = yy_meta[(unsigned int) yy_c];
-			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-		}
-
-	return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
-{
-	register int yy_is_jam;
-    	register char *yy_cp = (yy_c_buf_p);
-
-	register YY_CHAR yy_c = 1;
-	if ( yy_accept[yy_current_state] )
-		{
-		(yy_last_accepting_state) = yy_current_state;
-		(yy_last_accepting_cpos) = yy_cp;
-		}
-	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-		{
-		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 408 )
-			yy_c = yy_meta[(unsigned int) yy_c];
-		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 407);
-
-	return yy_is_jam ? 0 : yy_current_state;
-}
-
-    static inline void yyunput (int c, register char * yy_bp )
-{
-	register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
-
-	/* undo effects of setting up Configtext */
-	*yy_cp = (yy_hold_char);
-
-	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register int number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-		register char *source =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
-		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
-		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-	(yytext_ptr) = yy_bp;
-	(yy_hold_char) = *yy_cp;
-	(yy_c_buf_p) = yy_cp;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-    static int yyinput (void)
-#else
-    static int input  (void)
-#endif
-
-{
-	int c;
-    
-	*(yy_c_buf_p) = (yy_hold_char);
-
-	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			/* This was really a NUL. */
-			*(yy_c_buf_p) = '\0';
-
-		else
-			{ /* need more input */
-			int offset = (yy_c_buf_p) - (yytext_ptr);
-			++(yy_c_buf_p);
-
-			switch ( yy_get_next_buffer(  ) )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					Configrestart(Configin );
-
-					/*FALLTHROUGH*/
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( Configwrap( ) )
-						return 0;
-
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					(yy_c_buf_p) = (yytext_ptr) + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve Configtext */
-	(yy_hold_char) = *++(yy_c_buf_p);
-
-	return c;
-}
-#endif	/* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-    void Configrestart  (FILE * input_file )
-{
-    
-	if ( ! YY_CURRENT_BUFFER ){
-        Configensure_buffer_stack ();
-		YY_CURRENT_BUFFER_LVALUE =
-            Config_create_buffer(Configin,YY_BUF_SIZE );
-	}
-
-	Config_init_buffer(YY_CURRENT_BUFFER,input_file );
-	Config_load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-    void Config_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
-{
-    
-	/* TODO. We should be able to replace this entire function body
-	 * with
-	 *		Configpop_buffer_state();
-	 *		Configpush_buffer_state(new_buffer);
-     */
-	Configensure_buffer_stack ();
-	if ( YY_CURRENT_BUFFER == new_buffer )
-		return;
-
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	Config_load_buffer_state( );
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (Configwrap()) processing, but the only time this flag
-	 * is looked at is after Configwrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void Config_load_buffer_state  (void)
-{
-    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-	Configin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-	(yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-    YY_BUFFER_STATE Config_create_buffer  (FILE * file, int  size )
-{
-	YY_BUFFER_STATE b;
-    
-	b = (YY_BUFFER_STATE) Configalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in Config_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) Configalloc(b->yy_buf_size + 2  );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in Config_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	Config_init_buffer(b,file );
-
-	return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with Config_create_buffer()
- * 
- */
-    void Config_delete_buffer (YY_BUFFER_STATE  b )
-{
-    
-	if ( ! b )
-		return;
-
-	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		Configfree((void *) b->yy_ch_buf  );
-
-	Configfree((void *) b  );
-}
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a Configrestart() or at EOF.
- */
-    static void Config_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
-
-{
-	int oerrno = errno;
-    
-	Config_flush_buffer(b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then Config_init_buffer was _probably_
-     * called from Configrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-        b->yy_is_interactive = 0;
-    
-	errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-    void Config_flush_buffer (YY_BUFFER_STATE  b )
-{
-    	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == YY_CURRENT_BUFFER )
-		Config_load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-void Configpush_buffer_state (YY_BUFFER_STATE new_buffer )
-{
-    	if (new_buffer == NULL)
-		return;
-
-	Configensure_buffer_stack();
-
-	/* This block is copied from Config_switch_to_buffer. */
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	/* Only push if top exists. Otherwise, replace top. */
-	if (YY_CURRENT_BUFFER)
-		(yy_buffer_stack_top)++;
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-	/* copied from Config_switch_to_buffer. */
-	Config_load_buffer_state( );
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-void Configpop_buffer_state (void)
-{
-    	if (!YY_CURRENT_BUFFER)
-		return;
-
-	Config_delete_buffer(YY_CURRENT_BUFFER );
-	YY_CURRENT_BUFFER_LVALUE = NULL;
-	if ((yy_buffer_stack_top) > 0)
-		--(yy_buffer_stack_top);
-
-	if (YY_CURRENT_BUFFER) {
-		Config_load_buffer_state( );
-		(yy_did_buffer_switch_on_eof) = 1;
-	}
-}
-
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-static void Configensure_buffer_stack (void)
-{
-	int num_to_alloc;
-    
-	if (!(yy_buffer_stack)) {
-
-		/* First allocation is just for 2 elements, since we don't know if this
-		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-		 * immediate realloc on the next call.
-         */
-		num_to_alloc = 1;
-		(yy_buffer_stack) = (struct yy_buffer_state**)Configalloc
-								(num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		
-		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
-		(yy_buffer_stack_max) = num_to_alloc;
-		(yy_buffer_stack_top) = 0;
-		return;
-	}
-
-	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
-
-		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)Configrealloc
-								((yy_buffer_stack),
-								num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-
-		/* zero only the new slots.*/
-		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-		(yy_buffer_stack_max) = num_to_alloc;
-	}
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- * 
- * @return the newly allocated buffer state object. 
- */
-YY_BUFFER_STATE Config_scan_buffer  (char * base, yy_size_t  size )
-{
-	YY_BUFFER_STATE b;
-    
-	if ( size < 2 ||
-	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
-	     base[size-1] != YY_END_OF_BUFFER_CHAR )
-		/* They forgot to leave room for the EOB's. */
-		return 0;
-
-	b = (YY_BUFFER_STATE) Configalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in Config_scan_buffer()" );
-
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
-	b->yy_buf_pos = b->yy_ch_buf = base;
-	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
-	b->yy_n_chars = b->yy_buf_size;
-	b->yy_is_interactive = 0;
-	b->yy_at_bol = 1;
-	b->yy_fill_buffer = 0;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	Config_switch_to_buffer(b  );
-
-	return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to Configlex() will
- * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
- * 
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- *       Config_scan_bytes() instead.
- */
-YY_BUFFER_STATE Config_scan_string (yyconst char * yystr )
-{
-    
-	return Config_scan_bytes(yystr,strlen(yystr) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to Configlex() will
- * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
- * 
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE Config_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
-{
-	YY_BUFFER_STATE b;
-	char *buf;
-	yy_size_t n;
-	int i;
-    
-	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
-	buf = (char *) Configalloc(n  );
-	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in Config_scan_bytes()" );
-
-	for ( i = 0; i < _yybytes_len; ++i )
-		buf[i] = yybytes[i];
-
-	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-
-	b = Config_scan_buffer(buf,n );
-	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in Config_scan_bytes()" );
-
-	/* It's okay to grow etc. this buffer, and we should throw it
-	 * away when we're done.
-	 */
-	b->yy_is_our_buffer = 1;
-
-	return b;
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
-    	(void) fprintf( stderr, "%s\n", msg );
-	exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up Configtext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		Configtext[Configleng] = (yy_hold_char); \
-		(yy_c_buf_p) = Configtext + yyless_macro_arg; \
-		(yy_hold_char) = *(yy_c_buf_p); \
-		*(yy_c_buf_p) = '\0'; \
-		Configleng = yyless_macro_arg; \
-		} \
-	while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- * 
- */
-int Configget_lineno  (void)
-{
-        
-    return Configlineno;
-}
-
-/** Get the input stream.
- * 
- */
-FILE *Configget_in  (void)
-{
-        return Configin;
-}
-
-/** Get the output stream.
- * 
- */
-FILE *Configget_out  (void)
-{
-        return Configout;
-}
-
-/** Get the length of the current token.
- * 
- */
-int Configget_leng  (void)
-{
-        return Configleng;
-}
-
-/** Get the current token.
- * 
- */
-
-char *Configget_text  (void)
-{
-        return Configtext;
-}
-
-/** Set the current line number.
- * @param line_number
- * 
- */
-void Configset_lineno (int  line_number )
-{
-    
-    Configlineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- * 
- * @see Config_switch_to_buffer
- */
-void Configset_in (FILE *  in_str )
-{
-        Configin = in_str ;
-}
-
-void Configset_out (FILE *  out_str )
-{
-        Configout = out_str ;
-}
-
-int Configget_debug  (void)
-{
-        return Config_flex_debug;
-}
-
-void Configset_debug (int  bdebug )
-{
-        Config_flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
-        /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from Configlex_destroy(), so don't allocate here.
-     */
-
-    (yy_buffer_stack) = 0;
-    (yy_buffer_stack_top) = 0;
-    (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
-    (yy_init) = 0;
-    (yy_start) = 0;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
-    Configin = stdin;
-    Configout = stdout;
-#else
-    Configin = (FILE *) 0;
-    Configout = (FILE *) 0;
-#endif
-
-    /* For future reference: Set errno on error, since we are called by
-     * Configlex_init()
-     */
-    return 0;
-}
-
-/* Configlex_destroy is for both reentrant and non-reentrant scanners. */
-int Configlex_destroy  (void)
-{
-    
-    /* Pop the buffer stack, destroying each element. */
-	while(YY_CURRENT_BUFFER){
-		Config_delete_buffer(YY_CURRENT_BUFFER  );
-		YY_CURRENT_BUFFER_LVALUE = NULL;
-		Configpop_buffer_state();
-	}
-
-	/* Destroy the stack itself. */
-	Configfree((yy_buffer_stack) );
-	(yy_buffer_stack) = NULL;
-
-    /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * Configlex() is called, initialization will occur. */
-    yy_init_globals( );
-
-    return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-}
-#endif
-
-void *Configalloc (yy_size_t  size )
-{
-	return (void *) malloc( size );
-}
-
-void *Configrealloc  (void * ptr, yy_size_t  size )
-{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-}
-
-void Configfree (void * ptr )
-{
-	free( (char *) ptr );	/* see Configrealloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
-#line 201 "/Users/sabre/llvm/tools/llvmc/ConfigLexer.l"
-
-
-

Removed: llvm/trunk/tools/llvmc/ConfigLexer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/ConfigLexer.h?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/ConfigLexer.h (original)
+++ llvm/trunk/tools/llvmc/ConfigLexer.h (removed)
@@ -1,113 +0,0 @@
-//===- ConfigLexer.h - ConfigLexer Declarations -----------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file declares the types and data needed by ConfigLexer.l
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMC_CONFIGLEXER_H
-#define LLVM_TOOLS_LLVMC_CONFIGLEXER_H
-
-#include <string>
-#include <istream>
-#include <cassert>
-
-namespace llvm {
-
-struct ConfigLexerInfo
-{
-  int64_t     IntegerVal;
-  std::string StringVal;
-  bool in_value;
-  unsigned lineNum;
-};
-
-extern ConfigLexerInfo ConfigLexerState;
-
-class InputProvider {
-  public:
-    InputProvider(const std::string& nm) {
-      name = nm;
-      errCount = 0;
-    }
-    virtual ~InputProvider();
-    virtual unsigned read(char *buf, unsigned max_size) = 0;
-    virtual void error(const std::string& msg);
-    virtual void checkErrors();
-
-  private:
-    std::string name;
-    unsigned errCount;
-};
-
-extern InputProvider* ConfigLexerInput;
-
-enum ConfigLexerTokens {
-  EOFTOK = 0,        ///< Returned by Configlex when we hit end of file
-  EOLTOK,            ///< End of line
-  ERRORTOK,          ///< Error token
-  ARGS_SUBST,        ///< The substitution item %args%
-  BINDIR_SUBST,      ///< The substitution item %bindir%
-  ASSEMBLY,          ///< The value "assembly" (and variants)
-  ASSEMBLER,         ///< The name "assembler" (and variants)
-  BITCODE,           ///< The value "bitcode" (and variants)
-  COMMAND,           ///< The name "command" (and variants)
-  DEFS_SUBST,        ///< The substitution item %defs%
-  EQUALS,            ///< The equals sign, =
-  FALSETOK,          ///< A boolean false value (false/no/off)
-  FOPTS_SUBST,       ///< The substitution item %fOpts%
-  IN_SUBST,          ///< The substitution item %in%
-  INCLS_SUBST,       ///< The substitution item %incls%
-  INTEGER,           ///< An integer
-  LANG,              ///< The name "lang" (and variants)
-  LIBDIR_SUBST,      ///< The substitution item %libdir%
-  LIBPATHS,          ///< The name "libpaths" (and variants)
-  LIBS,              ///< The name "libs" (and variants)
-  LIBS_SUBST,        ///< The substitution item %libs%
-  LINKER,            ///< The name "linker" (and variants)
-  LLVMGCCDIR_SUBST,  ///< The substitution item %llvmgccdir%
-  LLVMGCCARCH_SUBST, ///< The substitution item %llvmgccarch%
-  LLVMGCC_SUBST,     ///< The substitution item %llvmgcc%
-  LLVMGXX_SUBST,     ///< The substitution item %llvmgxx%
-  LLVMCC1_SUBST,     ///< The substitution item %llvmcc1%
-  LLVMCC1PLUS_SUBST, ///< The substitution item %llvmcc1plus%
-  MOPTS_SUBST,       ///< The substitution item %Mopts%
-  NAME,              ///< The name "name" (and variants)
-  OPT_SUBST,         ///< The substitution item %opt%
-  OPTIMIZER,         ///< The name "optimizer" (and variants)
-  OPTION,            ///< A command line option
-  OPT1,              ///< The name "opt1" (and variants)
-  OPT2,              ///< The name "opt2" (and variants)
-  OPT3,              ///< The name "opt3" (and variants)
-  OPT4,              ///< The name "opt4" (and variants)
-  OPT5,              ///< The name "opt5" (and variants)
-  OUT_SUBST,         ///< The output substitution item %out%
-  OUTPUT,            ///< The name "output" (and variants)
-  PREPROCESSES,      ///< The name "preprocesses" (and variants)
-  PREPROCESSOR,      ///< The name "preprocessor" (and variants)
-  REQUIRED,          ///< The name "required" (and variants)
-  SEPARATOR,         ///< A configuration item separator
-  SPACE,             ///< Space between options
-  STATS_SUBST,       ///< The stats substitution item %stats%
-  STRING,            ///< A quoted string
-  TARGET_SUBST,      ///< The substitition item %target%
-  TIME_SUBST,        ///< The substitution item %time%
-  TRANSLATES,        ///< The name "translates" (and variants)
-  TRANSLATOR,        ///< The name "translator" (and variants)
-  TRUETOK,           ///< A boolean true value (true/yes/on)
-  VERBOSE_SUBST,     ///< The substitution item %verbose%
-  VERSION_TOK,       ///< The name "version" (and variants)
-  WOPTS_SUBST        ///< The %WOpts% substitution
-};
-
-extern ConfigLexerTokens Configlex();
-
-}
-
-#endif

Removed: llvm/trunk/tools/llvmc/ConfigLexer.l
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/ConfigLexer.l?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/ConfigLexer.l (original)
+++ llvm/trunk/tools/llvmc/ConfigLexer.l (removed)
@@ -1,201 +0,0 @@
-/*===- ConfigLexer.l - Scanner for CompilerDriver Config Files -*- C++ -*--===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file implements the flex scanner for configuration files for the
-// llvmc CompilerDriver.
-//
-//===----------------------------------------------------------------------===*/
-
-
-%option prefix="Config"
-%option nostdinit
-%option never-interactive
-%option batch
-%option noyywrap
-%option 8bit
-%option outfile="ConfigLexer.cpp"
-%option ecs
-%option noyymore
-%option noreject
-%pointer
-
-%{
-
-#include "ConfigLexer.h"
-
-#define YY_INPUT(buf,result,max_size) \
-  { \
-    assert(ConfigLexerInput != 0 && "Oops"); \
-    result = ConfigLexerInput->read(buf,max_size); \
-    if (result == 0 ) result = YY_NULL; \
-  }
-
-#define YY_FATAL_ERROR(msg) \
-  { \
-    assert(ConfigLexerInput != 0 && "Oops"); \
-    ConfigLexerInput->error(msg); \
-  }
-
-#define YY_DECL ConfigLexerTokens llvm::Configlex()
-
-#define yyterminate() { return EOFTOK; }
-
-using namespace llvm;
-
-inline llvm::ConfigLexerTokens 
-handleNameContext(llvm::ConfigLexerTokens token) {
-  ConfigLexerState.StringVal = yytext;
-  if (ConfigLexerState.in_value)
-    return OPTION;
-  return token;
-}
-
-inline llvm::ConfigLexerTokens 
-handleSubstitution(llvm::ConfigLexerTokens token) {
-  if (ConfigLexerState.in_value) {
-    ConfigLexerState.StringVal = yytext;
-    return token;
-  }
-  YY_FATAL_ERROR("Substitition tokens not allowed in names" ); 
-  return ERRORTOK;
-}
-
-inline llvm::ConfigLexerTokens handleValueContext(llvm::ConfigLexerTokens token) {
-  ConfigLexerState.StringVal = yytext;
-  if (ConfigLexerState.in_value)
-    return token;
-  return OPTION;
-}
-
-%}
-
-ASSEMBLER       assembler|Assembler|ASSEMBLER
-COMMAND         command|Command|COMMAND
-LANG            lang|Lang|LANG
-LIBS            libs|Libs|LIBS
-LINKER          linker|Linker|LINKER
-NAME            name|Name|NAME
-OPT1            opt1|Opt1|OPT1
-OPT2            opt2|Opt2|OPT2
-OPT3            opt3|Opt3|OPT3
-OPT4            opt4|Opt4|OPT4
-OPT5            opt5|Opt5|OPT5
-OPTIMIZER       optimizer|Optimizer|OPTIMIZER
-OUTPUT          output|Output|OUTPUT
-PREPROCESSES    preprocesses|PreProcesses|PREPROCESSES
-PREPROCESSOR    preprocessor|PreProcessor|PREPROCESSOR
-REQUIRED        required|Required|REQUIRED
-TRANSLATES      translates|Translates|TRANSLATES
-TRANSLATOR      translator|Translator|TRANSLATOR
-VERSION         version|Version|VERSION
-
-True            true|True|TRUE|on|On|ON|yes|Yes|YES
-False           false|False|FALSE|off|Off|OFF|no|No|NO
-Bitcode         bc|BC|bitcode|Bitcode|BITCODE
-Assembly        asm|ASM|assembly|Assembly|ASSEMBLY
-
-BadSubst        \%[a-zA-Z]*\%
-Comment         \#[^\r\n]*\r?\n
-NewLine         \r?\n
-Eq              \=
-EscNewLine      \\\r?\n
-Option          [-A-Za-z0-9_:%+/\\|,][-A-Za-z0-9_:+/\\|,@]*
-Sep             \.
-String          \"[^\"]*\"
-White           [ \t]*
-
-
-%%
-
-{White}         { if (ConfigLexerState.in_value) return SPACE; }
-
-{Comment}       { /* Ignore comments */
-                  ConfigLexerState.in_value = false; 
-                  ConfigLexerState.lineNum++; 
-                  return EOLTOK; 
-                }
-
-{EscNewLine}    { ConfigLexerState.lineNum++; 
-                  /* Don't return EOLTOK! */
-                }
-
-{NewLine}       { ConfigLexerState.in_value = false; 
-                  ConfigLexerState.lineNum++; 
-                  return EOLTOK; 
-                }
-
-{Eq}            { ConfigLexerState.in_value = true; 
-                  return EQUALS; 
-                }
-
-{Sep}           { return SEPARATOR; }
-
-{VERSION}       { return handleNameContext(VERSION_TOK); }
-
-{LANG}          { return handleNameContext(LANG); }
-{LIBS}          { return handleNameContext(LIBS); }
-{NAME}          { return handleNameContext(NAME); }
-{OPT1}          { return handleNameContext(OPT1); }
-{OPT2}          { return handleNameContext(OPT2); }
-{OPT3}          { return handleNameContext(OPT3); }
-{OPT4}          { return handleNameContext(OPT4); }
-{OPT5}          { return handleNameContext(OPT5); }
-
-{PREPROCESSOR}  { return handleNameContext(PREPROCESSOR); }
-{COMMAND}       { return handleNameContext(COMMAND); }
-{REQUIRED}      { return handleNameContext(REQUIRED); }
-
-{TRANSLATOR}    { return handleNameContext(TRANSLATOR); }
-{PREPROCESSES}  { return handleNameContext(PREPROCESSES); }
-{OUTPUT}        { return handleNameContext(OUTPUT); }
-
-{OPTIMIZER}     { return handleNameContext(OPTIMIZER); }
-{TRANSLATES}    { return handleNameContext(TRANSLATES); }
-
-{ASSEMBLER}     { return handleNameContext(ASSEMBLER); }
-
-{LINKER}        { return handleNameContext(LINKER); }
-
-%args%          { return handleSubstitution(ARGS_SUBST); }
-%bindir%        { return handleSubstitution(BINDIR_SUBST); }      
-%defs%          { return handleSubstitution(DEFS_SUBST); }
-%in%            { return handleSubstitution(IN_SUBST); }
-%incls%         { return handleSubstitution(INCLS_SUBST); }
-%libdir%        { return handleSubstitution(LIBDIR_SUBST); }
-%libs%          { return handleSubstitution(LIBS_SUBST); }
-%llvmgccdir%    { return handleSubstitution(LLVMGCCDIR_SUBST); }
-%llvmgccarch%   { return handleSubstitution(LLVMGCCARCH_SUBST); }
-%llvmgcc%       { return handleSubstitution(LLVMGCC_SUBST); }
-%llvmgxx%       { return handleSubstitution(LLVMGXX_SUBST); }
-%llvmcc1%       { return handleSubstitution(LLVMCC1_SUBST); }
-%llvmcc1plus%   { return handleSubstitution(LLVMCC1PLUS_SUBST); }
-%opt%           { return handleSubstitution(OPT_SUBST); }
-%out%           { return handleSubstitution(OUT_SUBST); }
-%stats%         { return handleSubstitution(STATS_SUBST); }
-%target%        { return handleSubstitution(TARGET_SUBST); }
-%time%          { return handleSubstitution(TIME_SUBST); }
-%verbose%       { return handleSubstitution(VERBOSE_SUBST); }
-%fOpts%         { return handleSubstitution(FOPTS_SUBST); }
-%MOpts%         { return handleSubstitution(MOPTS_SUBST); }
-%WOpts%         { return handleSubstitution(WOPTS_SUBST); }
-
-{Assembly}      { return handleValueContext(ASSEMBLY); }
-{Bitcode}       { return handleValueContext(BITCODE); }
-{True}          { return handleValueContext(TRUETOK); }
-{False}         { return handleValueContext(FALSETOK); }
-
-{Option}        { ConfigLexerState.StringVal = yytext; return OPTION; }
-{String}        { ConfigLexerState.StringVal = yytext+1;  // Nuke start quote
-                  ConfigLexerState.StringVal.erase(
-                  --ConfigLexerState.StringVal.end());
-                  return STRING;
-                }
-{BadSubst}      { YY_FATAL_ERROR("Invalid substitution token"); }
-
-%%

Removed: llvm/trunk/tools/llvmc/ConfigLexer.l.cvs
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/ConfigLexer.l.cvs?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/ConfigLexer.l.cvs (original)
+++ llvm/trunk/tools/llvmc/ConfigLexer.l.cvs (removed)
@@ -1,201 +0,0 @@
-/*===- ConfigLexer.l - Scanner for CompilerDriver Config Files -*- C++ -*--===//
-// 
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-// 
-//===----------------------------------------------------------------------===//
-//
-// This file implements the flex scanner for configuration files for the
-// llvmc CompilerDriver.
-//
-//===----------------------------------------------------------------------===*/
-
-
-%option prefix="Config"
-%option nostdinit
-%option never-interactive
-%option batch
-%option noyywrap
-%option 8bit
-%option outfile="ConfigLexer.cpp"
-%option ecs
-%option noyymore
-%option noreject
-%pointer
-
-%{
-
-#include "ConfigLexer.h"
-
-#define YY_INPUT(buf,result,max_size) \
-  { \
-    assert(ConfigLexerInput != 0 && "Oops"); \
-    result = ConfigLexerInput->read(buf,max_size); \
-    if (result == 0 ) result = YY_NULL; \
-  }
-
-#define YY_FATAL_ERROR(msg) \
-  { \
-    assert(ConfigLexerInput != 0 && "Oops"); \
-    ConfigLexerInput->error(msg); \
-  }
-
-#define YY_DECL ConfigLexerTokens llvm::Configlex()
-
-#define yyterminate() { return EOFTOK; }
-
-using namespace llvm;
-
-inline llvm::ConfigLexerTokens 
-handleNameContext(llvm::ConfigLexerTokens token) {
-  ConfigLexerState.StringVal = yytext;
-  if (ConfigLexerState.in_value)
-    return OPTION;
-  return token;
-}
-
-inline llvm::ConfigLexerTokens 
-handleSubstitution(llvm::ConfigLexerTokens token) {
-  if (ConfigLexerState.in_value) {
-    ConfigLexerState.StringVal = yytext;
-    return token;
-  }
-  YY_FATAL_ERROR("Substitition tokens not allowed in names" ); 
-  return ERRORTOK;
-}
-
-inline llvm::ConfigLexerTokens handleValueContext(llvm::ConfigLexerTokens token) {
-  ConfigLexerState.StringVal = yytext;
-  if (ConfigLexerState.in_value)
-    return token;
-  return OPTION;
-}
-
-%}
-
-ASSEMBLER       assembler|Assembler|ASSEMBLER
-COMMAND         command|Command|COMMAND
-LANG            lang|Lang|LANG
-LIBS            libs|Libs|LIBS
-LINKER          linker|Linker|LINKER
-NAME            name|Name|NAME
-OPT1            opt1|Opt1|OPT1
-OPT2            opt2|Opt2|OPT2
-OPT3            opt3|Opt3|OPT3
-OPT4            opt4|Opt4|OPT4
-OPT5            opt5|Opt5|OPT5
-OPTIMIZER       optimizer|Optimizer|OPTIMIZER
-OUTPUT          output|Output|OUTPUT
-PREPROCESSES    preprocesses|PreProcesses|PREPROCESSES
-PREPROCESSOR    preprocessor|PreProcessor|PREPROCESSOR
-REQUIRED        required|Required|REQUIRED
-TRANSLATES      translates|Translates|TRANSLATES
-TRANSLATOR      translator|Translator|TRANSLATOR
-VERSION         version|Version|VERSION
-
-True            true|True|TRUE|on|On|ON|yes|Yes|YES
-False           false|False|FALSE|off|Off|OFF|no|No|NO
-Bitcode         bc|BC|bitcode|Bitcode|BITCODE
-Assembly        asm|ASM|assembly|Assembly|ASSEMBLY
-
-BadSubst        \%[a-zA-Z]*\%
-Comment         \#[^\r\n]*\r?\n
-NewLine         \r?\n
-Eq              \=
-EscNewLine      \\\r?\n
-Option          [-A-Za-z0-9_:%+/\\|,][-A-Za-z0-9_:+/\\|,@]*
-Sep             \.
-String          \"[^\"]*\"
-White           [ \t]*
-
-
-%%
-
-{White}         { if (ConfigLexerState.in_value) return SPACE; }
-
-{Comment}       { /* Ignore comments */
-                  ConfigLexerState.in_value = false; 
-                  ConfigLexerState.lineNum++; 
-                  return EOLTOK; 
-                }
-
-{EscNewLine}    { ConfigLexerState.lineNum++; 
-                  /* Don't return EOLTOK! */
-                }
-
-{NewLine}       { ConfigLexerState.in_value = false; 
-                  ConfigLexerState.lineNum++; 
-                  return EOLTOK; 
-                }
-
-{Eq}            { ConfigLexerState.in_value = true; 
-                  return EQUALS; 
-                }
-
-{Sep}           { return SEPARATOR; }
-
-{VERSION}       { return handleNameContext(VERSION_TOK); }
-
-{LANG}          { return handleNameContext(LANG); }
-{LIBS}          { return handleNameContext(LIBS); }
-{NAME}          { return handleNameContext(NAME); }
-{OPT1}          { return handleNameContext(OPT1); }
-{OPT2}          { return handleNameContext(OPT2); }
-{OPT3}          { return handleNameContext(OPT3); }
-{OPT4}          { return handleNameContext(OPT4); }
-{OPT5}          { return handleNameContext(OPT5); }
-
-{PREPROCESSOR}  { return handleNameContext(PREPROCESSOR); }
-{COMMAND}       { return handleNameContext(COMMAND); }
-{REQUIRED}      { return handleNameContext(REQUIRED); }
-
-{TRANSLATOR}    { return handleNameContext(TRANSLATOR); }
-{PREPROCESSES}  { return handleNameContext(PREPROCESSES); }
-{OUTPUT}        { return handleNameContext(OUTPUT); }
-
-{OPTIMIZER}     { return handleNameContext(OPTIMIZER); }
-{TRANSLATES}    { return handleNameContext(TRANSLATES); }
-
-{ASSEMBLER}     { return handleNameContext(ASSEMBLER); }
-
-{LINKER}        { return handleNameContext(LINKER); }
-
-%args%          { return handleSubstitution(ARGS_SUBST); }
-%bindir%        { return handleSubstitution(BINDIR_SUBST); }      
-%defs%          { return handleSubstitution(DEFS_SUBST); }
-%in%            { return handleSubstitution(IN_SUBST); }
-%incls%         { return handleSubstitution(INCLS_SUBST); }
-%libdir%        { return handleSubstitution(LIBDIR_SUBST); }
-%libs%          { return handleSubstitution(LIBS_SUBST); }
-%llvmgccdir%    { return handleSubstitution(LLVMGCCDIR_SUBST); }
-%llvmgccarch%   { return handleSubstitution(LLVMGCCARCH_SUBST); }
-%llvmgcc%       { return handleSubstitution(LLVMGCC_SUBST); }
-%llvmgxx%       { return handleSubstitution(LLVMGXX_SUBST); }
-%llvmcc1%       { return handleSubstitution(LLVMCC1_SUBST); }
-%llvmcc1plus%   { return handleSubstitution(LLVMCC1PLUS_SUBST); }
-%opt%           { return handleSubstitution(OPT_SUBST); }
-%out%           { return handleSubstitution(OUT_SUBST); }
-%stats%         { return handleSubstitution(STATS_SUBST); }
-%target%        { return handleSubstitution(TARGET_SUBST); }
-%time%          { return handleSubstitution(TIME_SUBST); }
-%verbose%       { return handleSubstitution(VERBOSE_SUBST); }
-%fOpts%         { return handleSubstitution(FOPTS_SUBST); }
-%MOpts%         { return handleSubstitution(MOPTS_SUBST); }
-%WOpts%         { return handleSubstitution(WOPTS_SUBST); }
-
-{Assembly}      { return handleValueContext(ASSEMBLY); }
-{Bitcode}       { return handleValueContext(BITCODE); }
-{True}          { return handleValueContext(TRUETOK); }
-{False}         { return handleValueContext(FALSETOK); }
-
-{Option}        { ConfigLexerState.StringVal = yytext; return OPTION; }
-{String}        { ConfigLexerState.StringVal = yytext+1;  // Nuke start quote
-                  ConfigLexerState.StringVal.erase(
-                  --ConfigLexerState.StringVal.end());
-                  return STRING;
-                }
-{BadSubst}      { YY_FATAL_ERROR("Invalid substitution token"); }
-
-%%

Removed: llvm/trunk/tools/llvmc/Configuration.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/Configuration.cpp?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/Configuration.cpp (original)
+++ llvm/trunk/tools/llvmc/Configuration.cpp (removed)
@@ -1,632 +0,0 @@
-//===- Configuration.cpp - Configuration Data Mgmt --------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the parsing of configuration files for the LLVM Compiler
-// Driver (llvmc).
-//
-//===----------------------------------------------------------------------===//
-
-#include "Configuration.h"
-#include "ConfigLexer.h"
-#include "CompilerDriver.h"
-#include "llvm/Config/config.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/ADT/StringExtras.h"
-#include <iostream>
-#include <fstream>
-
-using namespace llvm;
-
-namespace sys {
-  // From CompilerDriver.cpp (for now)
-  extern bool FileIsReadable(const std::string& fname);
-}
-
-namespace llvm {
-  ConfigLexerInfo ConfigLexerState;
-  InputProvider* ConfigLexerInput = 0;
-
-  InputProvider::~InputProvider() {}
-  void InputProvider::error(const std::string& msg) {
-    std::cerr << name << ":" << ConfigLexerState.lineNum << ": Error: " <<
-      msg << "\n";
-    errCount++;
-  }
-
-  void InputProvider::checkErrors() {
-    if (errCount > 0) {
-      std::cerr << name << " had " << errCount << " errors. Terminating.\n";
-      exit(errCount);
-    }
-  }
-
-}
-
-namespace {
-
-  class FileInputProvider : public InputProvider {
-    public:
-      FileInputProvider(const std::string & fname)
-        : InputProvider(fname)
-        , F(fname.c_str()) {
-        ConfigLexerInput = this;
-      }
-      virtual ~FileInputProvider() { F.close(); ConfigLexerInput = 0; }
-      virtual unsigned read(char *buffer, unsigned max_size) {
-        if (F.good()) {
-          F.read(buffer,max_size);
-          if ( F.gcount() ) return F.gcount() - 1;
-        }
-        return 0;
-      }
-
-      bool okay() { return F.good(); }
-    private:
-      std::ifstream F;
-  };
-
-  cl::opt<bool> DumpTokens("dump-tokens", cl::Optional, cl::Hidden,
-    cl::init(false), cl::desc("Dump lexical tokens (debug use only)."));
-
-  struct Parser
-  {
-    Parser() {
-      token = EOFTOK;
-      provider = 0;
-      confDat = 0;
-      ConfigLexerState.lineNum = 1;
-      ConfigLexerState.in_value = false;
-      ConfigLexerState.StringVal.clear();
-      ConfigLexerState.IntegerVal = 0;
-    };
-
-    ConfigLexerTokens token;
-    InputProvider* provider;
-    CompilerDriver::ConfigData* confDat;
-
-    inline int next() {
-      token = Configlex();
-      if (DumpTokens)
-        std::cerr << token << "\n";
-      return token;
-    }
-
-    inline bool next_is_real() {
-      next();
-      return (token != EOLTOK) && (token != ERRORTOK) && (token != 0);
-    }
-
-    inline void eatLineRemnant() {
-      while (next_is_real()) ;
-    }
-
-    void error(const std::string& msg, bool skip = true) {
-      provider->error(msg);
-      if (skip)
-        eatLineRemnant();
-    }
-
-    bool parseCompleteItem(std::string& result) {
-      result.clear();
-      while (next_is_real()) {
-        switch (token ) {
-        case LLVMGCCDIR_SUBST:
-        case LLVMGCCARCH_SUBST:
-          case STRING :
-          case OPTION :
-            result += ConfigLexerState.StringVal;
-            break;
-          case SEPARATOR:
-            result += ".";
-            break;
-          case SPACE:
-            return true;
-          default:
-            return false;
-        }
-      }
-      return false;
-    }
-
-    std::string parseName() {
-      std::string result;
-      if (next() == EQUALS) {
-        if (parseCompleteItem(result))
-          eatLineRemnant();
-        if (result.empty())
-          error("Name exepected");
-      } else
-        error("Expecting '='");
-      return result;
-    }
-
-    bool parseBoolean() {
-      bool result = true;
-      if (next() == EQUALS) {
-        if (next() == SPACE)
-          next();
-        if (token == FALSETOK) {
-          result = false;
-        } else if (token != TRUETOK) {
-          error("Expecting boolean value");
-          return false;
-        }
-        if (next() != EOLTOK && token != 0) {
-          error("Extraneous tokens after boolean");
-        }
-      }
-      else
-        error("Expecting '='");
-      return result;
-    }
-
-    bool parseSubstitution(CompilerDriver::StringVector& optList) {
-      switch (token) {
-        case ARGS_SUBST:        optList.push_back("%args%"); break;
-        case BINDIR_SUBST:      optList.push_back("%bindir%"); break;
-        case DEFS_SUBST:        optList.push_back("%defs%"); break;
-        case IN_SUBST:          optList.push_back("%in%"); break;
-        case INCLS_SUBST:       optList.push_back("%incls%"); break;
-        case LIBDIR_SUBST:      optList.push_back("%libdir%"); break;
-        case LIBS_SUBST:        optList.push_back("%libs%"); break;
-        case OPT_SUBST:         optList.push_back("%opt%"); break;
-        case OUT_SUBST:         optList.push_back("%out%"); break;
-        case TARGET_SUBST:      optList.push_back("%target%"); break;
-        case STATS_SUBST:       optList.push_back("%stats%"); break;
-        case TIME_SUBST:        optList.push_back("%time%"); break;
-        case VERBOSE_SUBST:     optList.push_back("%verbose%"); break;
-        case FOPTS_SUBST:       optList.push_back("%fOpts%"); break;
-        case MOPTS_SUBST:       optList.push_back("%Mopts%"); break;
-        case WOPTS_SUBST:       optList.push_back("%Wopts%"); break;
-        default:
-          return false;
-      }
-      return true;
-    }
-
-    void parseOptionList(CompilerDriver::StringVector& optList ) {
-      if (next() == EQUALS) {
-        while (next_is_real()) {
-          if (token == STRING || token == OPTION)
-            optList.push_back(ConfigLexerState.StringVal);
-          else if (!parseSubstitution(optList)) {
-            error("Expecting a program argument or substitution", false);
-            break;
-          }
-        }
-      } else
-        error("Expecting '='");
-    }
-
-    void parseVersion() {
-      if (next() != EQUALS)
-        error("Expecting '='");
-      while (next_is_real()) {
-        if (token == STRING || token == OPTION)
-          confDat->version = ConfigLexerState.StringVal;
-        else
-          error("Expecting a version string");
-      }
-    }
-
-    void parseLibs() {
-      if (next() != EQUALS)
-        error("Expecting '='");
-      std::string lib;
-      while (parseCompleteItem(lib)) {
-        if (!lib.empty()) {
-          confDat->libpaths.push_back(lib);
-        }
-      }
-    }
-
-    void parseLang() {
-      if (next() != SEPARATOR)
-        error("Expecting '.'");
-      switch (next() ) {
-        case LIBS:
-          parseLibs();
-          break;
-        case NAME:
-          confDat->langName = parseName();
-          break;
-        case OPT1:
-          parseOptionList(confDat->opts[CompilerDriver::OPT_FAST_COMPILE]);
-          break;
-        case OPT2:
-          parseOptionList(confDat->opts[CompilerDriver::OPT_SIMPLE]);
-          break;
-        case OPT3:
-          parseOptionList(confDat->opts[CompilerDriver::OPT_AGGRESSIVE]);
-          break;
-        case OPT4:
-          parseOptionList(confDat->opts[CompilerDriver::OPT_LINK_TIME]);
-          break;
-        case OPT5:
-          parseOptionList(
-            confDat->opts[CompilerDriver::OPT_AGGRESSIVE_LINK_TIME]);
-          break;
-        default:
-          error("Expecting 'name' or 'optN' after 'lang.'");
-          break;
-      }
-    }
-
-    bool parseProgramName(std::string& str) {
-      str.clear();
-      do {
-        switch (token) {
-        case BINDIR_SUBST:
-        case LLVMGCC_SUBST:
-        case LLVMGXX_SUBST:
-        case LLVMCC1_SUBST:
-        case LLVMCC1PLUS_SUBST:
-          case OPTION:
-          case STRING:
-          case ARGS_SUBST:
-          case DEFS_SUBST:
-          case IN_SUBST:
-          case INCLS_SUBST:
-          case LIBS_SUBST:
-          case OPT_SUBST:
-          case OUT_SUBST:
-          case STATS_SUBST:
-          case TARGET_SUBST:
-          case TIME_SUBST:
-          case VERBOSE_SUBST:
-          case FOPTS_SUBST:
-          case MOPTS_SUBST:
-          case WOPTS_SUBST:
-            str += ConfigLexerState.StringVal;
-            break;
-          case SEPARATOR:
-            str += ".";
-            break;
-          case ASSEMBLY:
-            str += "assembly";
-            break;
-          case BITCODE:
-            str += "bitcode";
-            break;
-          case TRUETOK:
-            str += "true";
-            break;
-          case FALSETOK:
-            str += "false";
-            break;
-          default:
-            break;
-        }
-        next();
-      } while (token != SPACE && token != EOFTOK && token != EOLTOK &&
-               token != ERRORTOK);
-      return !str.empty();
-    }
-
-    void parseCommand(CompilerDriver::Action& action) {
-      if (next() != EQUALS)
-        error("Expecting '='");
-      switch (next()) {
-        case EOLTOK:
-          // no value (valid)
-          action.program.clear();
-          action.args.clear();
-          break;
-        case SPACE:
-          next();
-          /* FALL THROUGH */
-        default:
-        {
-          std::string progname;
-          if (parseProgramName(progname))
-            action.program.set(progname);
-          else
-            error("Expecting a program name");
-
-          // Get the options
-          std::string anOption;
-          while (next_is_real()) {
-            switch (token) {
-              case STRING:
-              case OPTION:
-                anOption += ConfigLexerState.StringVal;
-                break;
-              case ASSEMBLY:
-                anOption += "assembly";
-                break;
-              case BITCODE:
-                anOption += "bitcode";
-                break;
-              case TRUETOK:
-                anOption += "true";
-                break;
-              case FALSETOK:
-                anOption += "false";
-                break;
-              case SEPARATOR:
-                anOption += ".";
-                break;
-              case SPACE:
-                action.args.push_back(anOption);
-                anOption.clear();
-                break;
-              default:
-                if (!parseSubstitution(action.args))
-                  error("Expecting a program argument or substitution", false);
-                break;
-            }
-          }
-        }
-      }
-    }
-
-    void parsePreprocessor() {
-      if (next() != SEPARATOR)
-        error("Expecting '.'");
-      switch (next()) {
-        case COMMAND:
-          parseCommand(confDat->PreProcessor);
-          break;
-        case REQUIRED:
-          if (parseBoolean())
-            confDat->PreProcessor.set(CompilerDriver::REQUIRED_FLAG);
-          else
-            confDat->PreProcessor.clear(CompilerDriver::REQUIRED_FLAG);
-          break;
-        default:
-          error("Expecting 'command' or 'required' but found '" +
-              ConfigLexerState.StringVal);
-          break;
-      }
-    }
-
-    bool parseOutputFlag() {
-      if (next() == EQUALS) {
-        if (next() == SPACE)
-          next();
-        if (token == ASSEMBLY) {
-          return true;
-        } else if (token == BITCODE) {
-          return false;
-        } else {
-          error("Expecting output type value");
-          return false;
-        }
-        if (next() != EOLTOK && token != 0) {
-          error("Extraneous tokens after output value");
-        }
-      }
-      else
-        error("Expecting '='");
-      return false;
-    }
-
-    void parseTranslator() {
-      if (next() != SEPARATOR)
-        error("Expecting '.'");
-      switch (next()) {
-        case COMMAND:
-          parseCommand(confDat->Translator);
-          break;
-        case REQUIRED:
-          if (parseBoolean())
-            confDat->Translator.set(CompilerDriver::REQUIRED_FLAG);
-          else
-            confDat->Translator.clear(CompilerDriver::REQUIRED_FLAG);
-          break;
-        case PREPROCESSES:
-          if (parseBoolean())
-            confDat->Translator.set(CompilerDriver::PREPROCESSES_FLAG);
-          else
-            confDat->Translator.clear(CompilerDriver::PREPROCESSES_FLAG);
-          break;
-        case OUTPUT:
-          if (parseOutputFlag())
-            confDat->Translator.set(CompilerDriver::OUTPUT_IS_ASM_FLAG);
-          else
-            confDat->Translator.clear(CompilerDriver::OUTPUT_IS_ASM_FLAG);
-          break;
-
-        default:
-          error("Expecting 'command', 'required', 'preprocesses', or "
-                "'output' but found '" + ConfigLexerState.StringVal +
-                "' instead");
-          break;
-      }
-    }
-
-    void parseOptimizer() {
-      if (next() != SEPARATOR)
-        error("Expecting '.'");
-      switch (next()) {
-        case COMMAND:
-          parseCommand(confDat->Optimizer);
-          break;
-        case PREPROCESSES:
-          if (parseBoolean())
-            confDat->Optimizer.set(CompilerDriver::PREPROCESSES_FLAG);
-          else
-            confDat->Optimizer.clear(CompilerDriver::PREPROCESSES_FLAG);
-          break;
-        case TRANSLATES:
-          if (parseBoolean())
-            confDat->Optimizer.set(CompilerDriver::TRANSLATES_FLAG);
-          else
-            confDat->Optimizer.clear(CompilerDriver::TRANSLATES_FLAG);
-          break;
-        case REQUIRED:
-          if (parseBoolean())
-            confDat->Optimizer.set(CompilerDriver::REQUIRED_FLAG);
-          else
-            confDat->Optimizer.clear(CompilerDriver::REQUIRED_FLAG);
-          break;
-        case OUTPUT:
-          if (parseOutputFlag())
-            confDat->Translator.set(CompilerDriver::OUTPUT_IS_ASM_FLAG);
-          else
-            confDat->Translator.clear(CompilerDriver::OUTPUT_IS_ASM_FLAG);
-          break;
-        default:
-          error(std::string("Expecting 'command', 'preprocesses', "
-              "'translates' or 'output' but found '") +
-              ConfigLexerState.StringVal + "' instead");
-          break;
-      }
-    }
-
-    void parseAssembler() {
-      if (next() != SEPARATOR)
-        error("Expecting '.'");
-      switch(next()) {
-        case COMMAND:
-          parseCommand(confDat->Assembler);
-          break;
-        default:
-          error("Expecting 'command'");
-          break;
-      }
-    }
-
-    void parseLinker() {
-      if (next() != SEPARATOR)
-        error("Expecting '.'");
-      switch(next()) {
-        case LIBS:
-          break; //FIXME
-        case LIBPATHS:
-          break; //FIXME
-        default:
-          error("Expecting 'libs' or 'libpaths'");
-          break;
-      }
-    }
-
-    void parseAssignment() {
-      switch (token) {
-        case VERSION_TOK:   parseVersion(); break;
-        case LANG:          parseLang(); break;
-        case PREPROCESSOR:  parsePreprocessor(); break;
-        case TRANSLATOR:    parseTranslator(); break;
-        case OPTIMIZER:     parseOptimizer(); break;
-        case ASSEMBLER:     parseAssembler(); break;
-        case LINKER:        parseLinker(); break;
-        case EOLTOK:        break; // just ignore
-        case ERRORTOK:
-        default:
-          error("Invalid top level configuration item");
-          break;
-      }
-    }
-
-    void parseFile() {
-      while ( next() != EOFTOK ) {
-        if (token == ERRORTOK)
-          error("Invalid token");
-        else if (token != EOLTOK)
-          parseAssignment();
-      }
-      provider->checkErrors();
-    }
-  };
-
-void
-ParseConfigData(InputProvider& provider, CompilerDriver::ConfigData& confDat) {
-  Parser p;
-  p.token = EOFTOK;
-  p.provider = &provider;
-  p.confDat = &confDat;
-  p.parseFile();
-  }
-
-}
-
-CompilerDriver::ConfigData*
-LLVMC_ConfigDataProvider::ReadConfigData(const std::string& ftype) {
-  CompilerDriver::ConfigData* result = 0;
-  sys::Path confFile;
-  if (configDir.isEmpty()) {
-    // Try the environment variable
-    const char* conf = getenv("LLVM_CONFIG_DIR");
-    if (conf) {
-      confFile.set(conf);
-      confFile.appendComponent(ftype);
-      if (!confFile.canRead())
-        throw std::string("Configuration file for '") + ftype +
-                          "' is not available.";
-    } else {
-      // Try the user's home directory
-      confFile = sys::Path::GetUserHomeDirectory();
-      if (!confFile.isEmpty()) {
-        confFile.appendComponent(".llvm");
-        confFile.appendComponent("etc");
-        confFile.appendComponent(ftype);
-        if (!confFile.canRead())
-          confFile.clear();
-      }
-      if (confFile.isEmpty()) {
-        // Okay, try the LLVM installation directory
-        confFile = sys::Path::GetLLVMConfigDir();
-        confFile.appendComponent(ftype);
-        if (!confFile.canRead()) {
-          // Okay, try the "standard" place
-          confFile = sys::Path::GetLLVMDefaultConfigDir();
-          confFile.appendComponent(ftype);
-          if (!confFile.canRead()) {
-            throw std::string("Configuration file for '") + ftype +
-                              "' is not available.";
-          }
-        }
-      }
-    }
-  } else {
-    confFile = configDir;
-    confFile.appendComponent(ftype);
-    if (!confFile.canRead())
-      throw std::string("Configuration file for '") + ftype +
-                        "' is not available.";
-  }
-  FileInputProvider fip( confFile.toString() );
-  if (!fip.okay()) {
-    throw std::string("Configuration file for '") + ftype +
-                      "' is not available.";
-  }
-  result = new CompilerDriver::ConfigData();
-  ParseConfigData(fip,*result);
-  return result;
-}
-
-LLVMC_ConfigDataProvider::~LLVMC_ConfigDataProvider()
-{
-  ConfigDataMap::iterator cIt = Configurations.begin();
-  while (cIt != Configurations.end()) {
-    CompilerDriver::ConfigData* cd = cIt->second;
-    ++cIt;
-    delete cd;
-  }
-}
-
-CompilerDriver::ConfigData*
-LLVMC_ConfigDataProvider::ProvideConfigData(const std::string& filetype) {
-  CompilerDriver::ConfigData* result = 0;
-  if (!Configurations.empty()) {
-    ConfigDataMap::iterator cIt = Configurations.find(filetype);
-    if ( cIt != Configurations.end() ) {
-      // We found one in the case, return it.
-      result = cIt->second;
-    }
-  }
-  if (result == 0) {
-    // The configuration data doesn't exist, we have to go read it.
-    result = ReadConfigData(filetype);
-    // If we got one, cache it
-    if (result != 0)
-      Configurations[filetype] = result;
-  }
-  return result; // Might return 0
-}

Removed: llvm/trunk/tools/llvmc/Configuration.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/Configuration.h?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/Configuration.h (original)
+++ llvm/trunk/tools/llvmc/Configuration.h (removed)
@@ -1,62 +0,0 @@
-//===- Configuration.h - Configuration Data Mgmt ----------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file declares the LLVMC_ConfigDataProvider class which implements the
-// generation of ConfigData objects for the CompilerDriver.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMC_CONFIGDATA_H
-#define LLVM_TOOLS_LLVMC_CONFIGDATA_H
-
-#include "llvm/ADT/StringMap.h"
-#include "CompilerDriver.h"
-
-namespace llvm {
-  /// This class provides the high level interface to the LLVM Compiler Driver.
-  /// The driver's purpose is to make it easier for compiler writers and users
-  /// of LLVM to utilize the compiler toolkits and LLVM toolset by learning only
-  /// the interface of one program (llvmc).
-  ///
-  /// @see llvmc.cpp
-  /// @brief The interface to the LLVM Compiler Driver.
-  class LLVMC_ConfigDataProvider : public CompilerDriver::ConfigDataProvider {
-    /// @name Constructor
-    /// @{
-    public:
-      virtual ~LLVMC_ConfigDataProvider();
-
-    /// @name Methods
-    /// @{
-    public:
-      /// @brief Provide the configuration data to the CompilerDriver.
-      virtual CompilerDriver::ConfigData*
-        ProvideConfigData(const std::string& filetype);
-
-      /// @brief Allow the configuration directory to be set
-      virtual void setConfigDir(const sys::Path& dirName) {
-        configDir = dirName;
-      }
-
-    private:
-      CompilerDriver::ConfigData* ReadConfigData(const std::string& ftype);
-
-    /// @}
-    /// @name Data
-    /// @{
-    private:
-      /// @brief This type is used internally to hold the configuration data.
-      typedef StringMap<CompilerDriver::ConfigData*> ConfigDataMap;
-      ConfigDataMap Configurations; ///< The cache of configurations
-      sys::Path configDir;
-    /// @}
-  };
-}
-
-#endif

Removed: llvm/trunk/tools/llvmc/LICENSE.TXT
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/LICENSE.TXT?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/LICENSE.TXT (original)
+++ llvm/trunk/tools/llvmc/LICENSE.TXT (removed)
@@ -1,6 +0,0 @@
-LLVM Compiler Driver (llvmc)
--------------------------------------------------------------------------------
-The LLVM Compiler Driver (llvmc) is licensed under the Illinois Open Source 
-License and has the following additional copyright:
-
-Copyright (C) 2004 eXtensible Systems, Inc.

Removed: llvm/trunk/tools/llvmc/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/Makefile?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/Makefile (original)
+++ llvm/trunk/tools/llvmc/Makefile (removed)
@@ -1,34 +0,0 @@
-##===- tools/llvmc/Makefile --------------------------------*- Makefile -*-===##
-# 
-#                     The LLVM Compiler Infrastructure
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-# 
-##===----------------------------------------------------------------------===##
-LEVEL = ../..
-TOOLNAME = llvmc
-LINK_COMPONENTS = support system core bitreader
-CONFIG_FILES = c cpp ll st
-EXTRA_DIST = c cpp ll ConfigLexer.cpp.cvs ConfigLexer.l.cvs
-REQUIRES_EH := 1
-
-# The CompilerDriver needs to know the locations of several configured
-# directories and paths. We define these as preprocessor symbols so they can 
-# be hard coded into the process based on the configuration. Only those
-# configuration values not available in llvm/include/Config/config.h need to be
-# specified here. These values are used as the replacements for the
-# configuration file substitution variables such as %llvmgccdir%
-CPPFLAGS = -DLLVMGCCDIR="\"$(LLVMGCCDIR)\"" \
-           -DLLVMGCCARCH="\"$(LLVMGCCARCH)\"" \
-	   -DLLVMGCC="\"$(LLVMGCC)\"" \
-	   -DLLVMGXX="\"$(LLVMGXX)\"" \
-	   -DLLVMCC1="\"$(LLVMCC1)\"" \
-	   -DLLVMCC1PLUS="\"$(LLVMCC1PLUS)\""
-
-include $(LEVEL)/Makefile.common
-
-install::
-	$(Echo) Installing additional C++ configuration clones
-	$(Verb)$(DataInstall) $(PROJ_SRC_DIR)/cpp $(PROJ_etcdir)/c++
-	$(Verb)$(DataInstall) $(PROJ_SRC_DIR)/cpp $(PROJ_etcdir)/cxx

Removed: llvm/trunk/tools/llvmc/c
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/c?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/c (original)
+++ llvm/trunk/tools/llvmc/c (removed)
@@ -1,60 +0,0 @@
-# C configuration file for llvmc
-
-##########################################################
-# Language definitions
-##########################################################
-  lang.name=C
-  lang.opt1=-O1
-  lang.opt2=-O2
-  lang.opt3=-O3
-  lang.opt4=-O3
-  lang.opt5=-O3
-  lang.libs=%llvmgccdir%/lib %llvmgccdir%/lib %llvmgccdir%/lib/gcc/%llvmgccarch%
-
-##########################################################
-# Pre-processor definitions
-##########################################################
-
-  # We use gcc as our pre-processor
-  preprocessor.command=gcc -E %in% -o %out% %incls% %defs%
-  preprocessor.required=true
-
-##########################################################
-# Translator definitions
-##########################################################
-
-  # To compile C source, just use llvm-gcc's cc1
-  translator.command=%llvmcc1% -quiet %in% -o %out% \
-    %opt% %incls% %defs% %WOpts% %fOpts% %MOpts% %args% \
-    -D_GNU_SOURCE
-
-  # llvm-gcc does not pre-process
-  translator.preprocesses=false
-
-  # The translator is required to run.
-  translator.required=true
-
-  # Output of the translator is assembly
-  translator.output=assembly
-
-##########################################################
-# Optimizer definitions
-##########################################################
-  
-  # Use gccas to clean up the generated code
-  optimizer.command=%bindir%/gccas %in% -o %out% %args%
-  optimizer.required = true
-
-  # gccas doesn't translate
-  optimizer.translates = false
-
-  # gccas doesn't preprocess
-  optimizer.preprocesses=false
-
-  # gccas produces bytecode
-  optimizer.output = bytecode
-
-##########################################################
-# Assembler definitions
-##########################################################
-  assembler.command=%bindir%/llc %in% -o %out% %target% %time% %stats%

Removed: llvm/trunk/tools/llvmc/cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/cpp?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/cpp (original)
+++ llvm/trunk/tools/llvmc/cpp (removed)
@@ -1,61 +0,0 @@
-# C++ configuration file for llvmc
-
-##########################################################
-# Language definitions
-##########################################################
-  lang.name=C++
-  lang.opt1=-O1
-  lang.opt2=-O2
-  lang.opt3=-O3
-  lang.opt4=-O3
-  lang.opt5=-O3
-  lang.libs=%llvmgccdir%/lib %llvmgccdir%/lib \
-    %llvmgccdir%/lib/gcc/%llvmgccarch%
-
-##########################################################
-# Pre-processor definitions
-##########################################################
-
-  # We use g++ as our pre-processor
-  preprocessor.command=g++ -E %in% -o %out% %incls% %defs%
-  preprocessor.required=true
-
-##########################################################
-# Translator definitions
-##########################################################
-
-  # To compile C++ source, just use llvm-g++'s cc1
-  translator.command=%llvmcc1plus% -quiet %in% -o %out% \
-    %opt% %incls% %defs% %WOpts% %fOpts% %MOpts% %args% \
-    -D_GNU_SOURCE
-
-  # llvm-g++ does not pre-process
-  translator.preprocesses=false
-
-  # The translator is required to run.
-  translator.required=true
-
-  # Output of translator is assembly
-  translator.output=assembly
-
-##########################################################
-# Optimizer definitions
-##########################################################
-  
-  # Use gccas to clean up the generated code
-  optimizer.command=%bindir%/gccas %in% -o %out% %args%
-  optimizer.required = true
-
-  # gccas doesn't translate
-  optimizer.translates = false
-
-  # gccas doesn't preprocess
-  optimizer.preprocesses=false
-
-  # gccas produces bytecode
-  optimizer.output = bytecode
-
-##########################################################
-# Assembler definitions
-##########################################################
-  assembler.command=%bindir%/llc %in% -o %out% %target% %time% %stats%

Removed: llvm/trunk/tools/llvmc/ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/ll?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/ll (original)
+++ llvm/trunk/tools/llvmc/ll (removed)
@@ -1,11 +0,0 @@
-# LLVM Assembly Config File For llvmc
-  version="1.0"
-  lang.name=LLVM Assembly
-  preprocessor.command=
-  preprocessor.required=false
-  translator.command=%bindir%/llvm-as %in% -o %out%
-  translator.preprocesses=true
-  translator.required=TRUE
-  optimizer.command=%bindir%/opt %in% -o %out% %opt% %args%
-  optimizer.translates=no
-  assembler.command=%bindir%/llc %in% -o %out%

Removed: llvm/trunk/tools/llvmc/llvmc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/llvmc.cpp?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/llvmc.cpp (original)
+++ llvm/trunk/tools/llvmc/llvmc.cpp (removed)
@@ -1,374 +0,0 @@
-//===--- llvmc.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  This tool provides a single point of access to the LLVM compilation tools.
-//  It has many options. To discover the options supported please refer to the
-//  tools' manual page (docs/CommandGuide/html/llvmc.html) or run the tool with
-//  the --help option.
-//
-//===----------------------------------------------------------------------===//
-
-#include "CompilerDriver.h"
-#include "Configuration.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/ManagedStatic.h"
-#include "llvm/System/Signals.h"
-#include <iostream>
-#include <cstring>
-using namespace llvm;
-
-//===----------------------------------------------------------------------===//
-//===          PHASE OPTIONS
-//===----------------------------------------------------------------------===//
-static cl::opt<CompilerDriver::Phases> FinalPhase(cl::Optional,
-  cl::desc("Choose final phase of compilation:"),
-  cl::init(CompilerDriver::LINKING),
-  cl::values(
-    clEnumValN(CompilerDriver::PREPROCESSING,"E",
-      "Stop compilation after pre-processing phase"),
-    clEnumValN(CompilerDriver::TRANSLATION, "t",
-      "Stop compilation after translation phase"),
-    clEnumValN(CompilerDriver::OPTIMIZATION,"c",
-      "Stop compilation after optimization phase"),
-    clEnumValN(CompilerDriver::ASSEMBLY,"S",
-      "Stop compilation after assembly phase"),
-    clEnumValEnd
-  )
-);
-
-//===----------------------------------------------------------------------===//
-//===          OPTIMIZATION OPTIONS
-//===----------------------------------------------------------------------===//
-static cl::opt<CompilerDriver::OptimizationLevels> OptLevel(cl::ZeroOrMore,
-  cl::desc("Choose level of optimization to apply:"),
-  cl::init(CompilerDriver::OPT_FAST_COMPILE),
-  cl::values(
-    clEnumValN(CompilerDriver::OPT_FAST_COMPILE,"O0",
-      "An alias for the -O1 option"),
-    clEnumValN(CompilerDriver::OPT_FAST_COMPILE,"O1",
-      "Optimize for compilation speed, not execution speed"),
-    clEnumValN(CompilerDriver::OPT_SIMPLE,"O2",
-      "Perform simple translation time optimizations"),
-    clEnumValN(CompilerDriver::OPT_AGGRESSIVE,"O3",
-      "Perform aggressive translation time optimizations"),
-    clEnumValN(CompilerDriver::OPT_LINK_TIME,"O4",
-      "Perform link time optimizations"),
-    clEnumValN(CompilerDriver::OPT_AGGRESSIVE_LINK_TIME,"O5",
-      "Perform aggressive link time optimizations"),
-    clEnumValEnd
-  )
-);
-
-//===----------------------------------------------------------------------===//
-//===          TOOL OPTIONS
-//===----------------------------------------------------------------------===//
-
-static cl::list<std::string> PreprocessorToolOpts("Tpre", cl::ZeroOrMore,
-  cl::desc("Pass specific options to the pre-processor"),
-  cl::value_desc("option"));
-
-static cl::alias PreprocessorToolOptsAlias("Wp,", cl::ZeroOrMore,
-  cl::desc("Alias for -Tpre"), cl::aliasopt(PreprocessorToolOpts));
-
-static cl::list<std::string> TranslatorToolOpts("Ttrn", cl::ZeroOrMore,
-  cl::desc("Pass specific options to the assembler"),
-  cl::value_desc("option"));
-
-static cl::list<std::string> AssemblerToolOpts("Tasm", cl::ZeroOrMore,
-  cl::desc("Pass specific options to the assembler"),
-  cl::value_desc("option"));
-
-static cl::alias AssemblerToolOptsAlias("Wa,", cl::ZeroOrMore,
-  cl::desc("Alias for -Tasm"), cl::aliasopt(AssemblerToolOpts));
-
-static cl::list<std::string> OptimizerToolOpts("Topt", cl::ZeroOrMore,
-  cl::desc("Pass specific options to the optimizer"),
-  cl::value_desc("option"));
-
-static cl::list<std::string> LinkerToolOpts("Tlnk", cl::ZeroOrMore,
-  cl::desc("Pass specific options to the linker"),
-  cl::value_desc("option"));
-
-static cl::alias LinkerToolOptsAlias("Wl,", cl::ZeroOrMore,
-  cl::desc("Alias for -Tlnk"), cl::aliasopt(LinkerToolOpts));
-
-static cl::list<std::string> fOpts("f", cl::ZeroOrMore, cl::Prefix,
-  cl::desc("Pass through -f options to compiler tools"),
-  cl::value_desc("option"));
-
-static cl::list<std::string> MOpts("M", cl::ZeroOrMore, cl::Prefix,
-  cl::desc("Pass through -M options to compiler tools"),
-  cl::value_desc("option"));
-
-static cl::list<std::string> WOpts("W", cl::ZeroOrMore, cl::Prefix,
-  cl::desc("Pass through -W options to compiler tools"),
-  cl::value_desc("option"));
-
-static cl::list<std::string> BOpt("B", cl::ZeroOrMore, cl::Prefix,
-  cl::desc("Specify path to find llvmc sub-tools"),
-  cl::value_desc("dir"));
-
-//===----------------------------------------------------------------------===//
-//===          INPUT OPTIONS
-//===----------------------------------------------------------------------===//
-
-static cl::list<std::string> LibPaths("L", cl::Prefix,
-  cl::desc("Specify a library search path"), cl::value_desc("dir"));
-
-static cl::list<std::string> Libraries("l", cl::Prefix,
-  cl::desc("Specify base name of libraries to link to"), cl::value_desc("lib"));
-
-static cl::list<std::string> Includes("I", cl::Prefix,
-  cl::desc("Specify location to search for included source"),
-  cl::value_desc("dir"));
-
-static cl::list<std::string> Defines("D", cl::Prefix,
-  cl::desc("Specify a pre-processor symbol to define"),
-  cl::value_desc("symbol"));
-
-//===----------------------------------------------------------------------===//
-//===          OUTPUT OPTIONS
-//===----------------------------------------------------------------------===//
-
-static cl::opt<std::string> OutputFilename("o",
-  cl::desc("Override output filename"), cl::value_desc("file"));
-
-static cl::opt<std::string> OutputMachine("m", cl::Prefix,
-  cl::desc("Specify a target machine"), cl::value_desc("machine"));
-
-static cl::opt<bool> Native("native", cl::init(false),
-  cl::desc("Generative native code instead of bitcode"));
-
-static cl::opt<bool> DebugOutput("g", cl::init(false),
-  cl::desc("Generate objects that include debug symbols"));
-
-static cl::opt<bool> StripOutput("strip", cl::init(false),
-  cl::desc("Strip all symbols from linked output file"));
-
-static cl::opt<std::string> PrintFileName("print-fname", cl::Optional,
-  cl::value_desc("file"),
-  cl::desc("Print the full path for the option's value"));
-
-//===----------------------------------------------------------------------===//
-//===          INFORMATION OPTIONS
-//===----------------------------------------------------------------------===//
-
-static cl::opt<bool> DryRun("dry-run", cl::Optional, cl::init(false),
-  cl::desc("Do everything but perform the compilation actions"));
-
-static cl::alias DryRunAlias("y", cl::Optional,
-  cl::desc("Alias for -dry-run"), cl::aliasopt(DryRun));
-
-static cl::opt<bool> Verbose("verbose", cl::Optional, cl::init(false),
-  cl::desc("Print out each action taken"));
-
-static cl::alias VerboseAlias("v", cl::Optional,
-  cl::desc("Alias for -verbose"), cl::aliasopt(Verbose));
-
-static cl::opt<bool> Debug("debug", cl::Optional, cl::init(false),
-  cl::Hidden, cl::desc("Print out debugging information"));
-
-static cl::alias DebugAlias("d", cl::Optional,
-  cl::desc("Alias for -debug"), cl::aliasopt(Debug));
-
-static cl::opt<bool> TimeActions("time-actions", cl::Optional, cl::init(false),
-  cl::desc("Print execution time for each action taken"));
-
-static cl::opt<bool> ShowStats("stats", cl::Optional, cl::init(false),
-  cl::desc("Print statistics accumulated during optimization"));
-
-//===----------------------------------------------------------------------===//
-//===          ADVANCED OPTIONS
-//===----------------------------------------------------------------------===//
-
-static cl::opt<std::string> ConfigDir("config-dir", cl::Optional,
-  cl::desc("Specify configuration directory to override defaults"),
-  cl::value_desc("dir"));
-
-static cl::opt<bool> EmitRawCode("emit-raw-code", cl::Hidden, cl::Optional,
-  cl::desc("Emit raw, unoptimized code"));
-
-static cl::opt<bool> PipeCommands("pipe", cl::Optional,
-  cl::desc("Invoke sub-commands by linking input/output with pipes"));
-
-static cl::opt<bool> KeepTemps("keep-temps", cl::Optional,
-  cl::desc("Don't delete temporary files created by llvmc"));
-
-//===----------------------------------------------------------------------===//
-//===          POSITIONAL OPTIONS
-//===----------------------------------------------------------------------===//
-
-static cl::list<std::string> Files(cl::Positional, cl::ZeroOrMore,
-  cl::desc("[Sources/objects/libraries]"));
-
-static cl::list<std::string> Languages("x", cl::ZeroOrMore,
-  cl::desc("Specify the source language for subsequent files"),
-  cl::value_desc("language"));
-
-//===----------------------------------------------------------------------===//
-//===          GetFileType - determine type of a file
-//===----------------------------------------------------------------------===//
-static const std::string GetFileType(const std::string& fname, unsigned pos) {
-  static std::vector<std::string>::iterator langIt = Languages.begin();
-  static std::string CurrLang = "";
-
-  // If a -x LANG option has been specified ..
-  if (langIt != Languages.end())
-    // If the -x LANG option came before the current file on command line
-    if (Languages.getPosition( langIt - Languages.begin() ) < pos) {
-      // use that language
-      CurrLang = *langIt++;
-      return CurrLang;
-    }
-
-  // If there's a current language in effect
-  if (!CurrLang.empty())
-    return CurrLang; // use that language
-
-  // otherwise just determine lang from the filename's suffix
-  return fname.substr(fname.rfind('.', fname.size()) + 1);
-}
-
-static void handleTerminatingOptions(CompilerDriver* CD) {
-  if (!PrintFileName.empty()) {
-    sys::Path path = CD->GetPathForLinkageItem(PrintFileName, false);
-    std::string p = path.toString();
-    if (p.empty())
-      std::cout << "Can't locate `" << PrintFileName << "'.\n";
-    else
-      std::cout << p << '\n';
-    exit(0);
-  }
-}
-
-/// @brief The main program for llvmc
-int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
-  // Make sure we print stack trace if we get bad signals
-  sys::PrintStackTraceOnErrorSignal();
-
-  std::cout << "NOTE: llvmc is highly experimental and mostly useless right "
-               "now.\nPlease use llvm-gcc directly instead.\n\n";
-
-  try {
-
-    // Parse the command line options
-    cl::ParseCommandLineOptions(argc, argv,
-      "LLVM Compiler Driver (llvmc)\n\n"
-      "  This program provides easy invocation of the LLVM tool set\n"
-      "  and other compiler tools.\n"
-    );
-
-    // Deal with unimplemented options.
-    if (PipeCommands)
-      throw std::string("Not implemented yet: -pipe");
-
-    if (OutputFilename.empty())
-      if (OptLevel == CompilerDriver::LINKING)
-        OutputFilename = "a.out";
-
-    // Construct the ConfigDataProvider object
-    LLVMC_ConfigDataProvider Provider;
-    Provider.setConfigDir(sys::Path(ConfigDir));
-
-    // Construct the CompilerDriver object
-    CompilerDriver* CD = CompilerDriver::Get(Provider);
-
-    // If the LLVM_LIB_SEARCH_PATH environment variable is
-    // set, append it to the list of places to search for libraries
-    char *srchPath = getenv("LLVM_LIB_SEARCH_PATH");
-    if (srchPath != NULL && strlen(srchPath) != 0)
-      LibPaths.push_back(std::string(srchPath));
-
-    // Set the driver flags based on command line options
-    unsigned flags = 0;
-    if (Verbose)        flags |= CompilerDriver::VERBOSE_FLAG;
-    if (Debug)          flags |= CompilerDriver::DEBUG_FLAG;
-    if (DryRun)         flags |= CompilerDriver::DRY_RUN_FLAG;
-    if (Native)         flags |= CompilerDriver::EMIT_NATIVE_FLAG;
-    if (EmitRawCode)    flags |= CompilerDriver::EMIT_RAW_FLAG;
-    if (KeepTemps)      flags |= CompilerDriver::KEEP_TEMPS_FLAG;
-    if (ShowStats)      flags |= CompilerDriver::SHOW_STATS_FLAG;
-    if (TimeActions)    flags |= CompilerDriver::TIME_ACTIONS_FLAG;
-    if (StripOutput)    flags |= CompilerDriver::STRIP_OUTPUT_FLAG;
-    CD->setDriverFlags(flags);
-
-    // Specify required parameters
-    CD->setFinalPhase(FinalPhase);
-    CD->setOptimization(OptLevel);
-    CD->setOutputMachine(OutputMachine);
-    CD->setIncludePaths(Includes);
-    CD->setSymbolDefines(Defines);
-    CD->setLibraryPaths(LibPaths);
-    CD->setfPassThrough(fOpts);
-    CD->setMPassThrough(MOpts);
-    CD->setWPassThrough(WOpts);
-
-    // Provide additional tool arguments
-    if (!PreprocessorToolOpts.empty())
-        CD->setPhaseArgs(CompilerDriver::PREPROCESSING, PreprocessorToolOpts);
-    if (!TranslatorToolOpts.empty())
-        CD->setPhaseArgs(CompilerDriver::TRANSLATION, TranslatorToolOpts);
-    if (!OptimizerToolOpts.empty())
-        CD->setPhaseArgs(CompilerDriver::OPTIMIZATION, OptimizerToolOpts);
-    if (!AssemblerToolOpts.empty())
-        CD->setPhaseArgs(CompilerDriver::ASSEMBLY,AssemblerToolOpts);
-    if (!LinkerToolOpts.empty())
-        CD->setPhaseArgs(CompilerDriver::LINKING, LinkerToolOpts);
-
-    // Check for options that cause us to terminate before any significant work
-    // is done.
-    handleTerminatingOptions(CD);
-
-    // Prepare the list of files to be compiled by the CompilerDriver.
-    CompilerDriver::InputList InpList;
-    std::vector<std::string>::iterator fileIt = Files.begin();
-    std::vector<std::string>::iterator libIt  = Libraries.begin();
-    unsigned libPos = 0, filePos = 0;
-    while ( 1 ) {
-      if (libIt != Libraries.end())
-        libPos = Libraries.getPosition( libIt - Libraries.begin() );
-      else
-        libPos = 0;
-      if (fileIt != Files.end())
-        filePos = Files.getPosition(fileIt - Files.begin());
-      else
-        filePos = 0;
-
-      if (filePos != 0 && (libPos == 0 || filePos < libPos)) {
-        // Add a source file
-        InpList.push_back(std::make_pair(*fileIt,
-                                         GetFileType(*fileIt, filePos)));
-        ++fileIt;
-      } else if ( libPos != 0 && (filePos == 0 || libPos < filePos) ) {
-        // Add a library
-        InpList.push_back(std::make_pair(*libIt++, ""));
-      }
-      else
-        break; // we're done with the list
-    }
-
-    // Tell the driver to do its thing
-    std::string ErrMsg;
-    int result = CD->execute(InpList, sys::Path(OutputFilename), ErrMsg);
-    if (result != 0) {
-      std::cerr << argv[0] << ": " << ErrMsg << '\n';
-      return result;
-    }
-
-    // All is good, return success
-    return 0;
-  } catch (const std::string& msg) {
-    std::cerr << argv[0] << ": " << msg << '\n';
-  } catch (...) {
-    std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
-  }
-  return 1;
-}

Removed: llvm/trunk/tools/llvmc/st
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/st?rev=50614&view=auto

==============================================================================
--- llvm/trunk/tools/llvmc/st (original)
+++ llvm/trunk/tools/llvmc/st (removed)
@@ -1,63 +0,0 @@
-# Stacker Configuration File For llvmc
-
-##########################################################
-# Language definitions
-##########################################################
-  lang.name=Stacker 
-  lang.opt1=-O1
-  lang.opt2=-O2
-  lang.opt3=-O3
-  lang.opt4=-O4
-  lang.opt5=-O5
-
-##########################################################
-# Pre-processor definitions
-##########################################################
-
-  # Stacker doesn't have a preprocessor but the following
-  # allows the -E option to be supported
-  preprocessor.command=cp %in% %out%
-  preprocessor.required=false
-
-##########################################################
-# Translator definitions
-##########################################################
-
-  # To compile stacker source, we just run the stacker
-  # compiler with a default stack size of 2048 entries.
-  translator.command=stkrc -s 2048 %in% -f -o %out% %opt% \
-    %time% %stats% %args%
-
-  # stkrc doesn't preprocess but we set this to true so
-  # that we don't run the cp command by default.
-  translator.preprocesses=true
-
-  # The translator is required to run.
-  translator.required=false
-
-  # stkrc doesn't handle the -On options
-  translator.output=bytecode
-
-##########################################################
-# Optimizer definitions
-##########################################################
-  
-  # For optimization, we use the LLVM "opt" program
-  optimizer.command=stkrc -s 2048 %in% -f -o %out% %opt% \
-    %time% %stats% %args%
-
-  optimizer.required = yes
-
-  # opt doesn't translate
-  optimizer.translates = yes
-
-  # opt doesn't preprocess
-  optimizer.preprocesses=yes
-
-  # opt produces bytecode
-  optimizer.output = bc
-
-##########################################################
-# Assembler definitions
-##########################################################
-  assembler.command=llc %in% -o %out% %target% %time% %stats%





More information about the llvm-commits mailing list