]> granicus.if.org Git - clang/commitdiff
Driver: Stub out Arg implementations.
authorDaniel Dunbar <daniel@zuster.org>
Wed, 4 Mar 2009 22:37:52 +0000 (22:37 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 4 Mar 2009 22:37:52 +0000 (22:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66088 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Arg.h
lib/Driver/Arg.cpp [new file with mode: 0644]

index 8d8f0942a0539d2984de4c423f07b52f6ee28bfc..4bf6be6d56cb32f53396094f3445dace18989224 100644 (file)
 #ifndef CLANG_DRIVER_ARG_H_
 #define CLANG_DRIVER_ARG_H_
 
+#include "llvm/Support/Casting.h"
+using llvm::isa;
+using llvm::cast;
+using llvm::cast_or_null;
+using llvm::dyn_cast;
+using llvm::dyn_cast_or_null;
+
 #include "Util.h"
 
 namespace clang {
@@ -25,15 +32,18 @@ namespace driver {
   /// ArgList to provide efficient iteration over all instances of a
   /// particular option.
   class Arg {
-  private:
+  public:
     enum ArgClass {
-      PositionalArg = 0,
-      JoinedArg,
-      SeparateArg,
-      CommaJoinedArg,
-      JoinedAndSeparateArg
+      PositionalClass = 0,
+      JoinedClass,
+      SeparateClass,
+      CommaJoinedClass,
+      JoinedAndSeparateClass
     };
 
+  private:
+    ArgClass Kind;
+
     /// The option this argument is an instance of.
     const Option *Opt;
     
@@ -46,16 +56,21 @@ namespace driver {
     
   public:
     Arg(const Arg &);
+    virtual ~Arg();
 
-    /// render - Append the argument onto the given array as strings.
-    virtual void render(const ArgList &Args, ArgStringList &Output) const = 0;
-
-    virtual unsigned getNumValues() const = 0;
-    virtual const char *getValue(const ArgList &Args, unsigned N) const = 0;
+    ArgClass getKind() const { return Kind; }
 
     const Option &getOption() const { return *Opt; }
 
     unsigned getIndex() const { return Index; }
+
+    virtual unsigned getNumValues() const = 0;
+    virtual const char *getValue(const ArgList &Args, unsigned N) const = 0;
+    
+    /// render - Append the argument onto the given array as strings.
+    virtual void render(const ArgList &Args, ArgStringList &Output) const = 0;
+
+    static bool classof(const Arg *) { return true; }    
   };
 
   /// PositionalArg - A simple positional argument.
@@ -63,10 +78,15 @@ namespace driver {
   public:
     PositionalArg(const Option *Opt, unsigned Index);
 
-    virtual void render(const ArgList &Args, ArgStringList &Output) const = 0;
+    virtual void render(const ArgList &Args, ArgStringList &Output) const;
 
     virtual unsigned getNumValues() const { return 1; }
     virtual const char *getValue(const ArgList &Args, unsigned N) const;
+
+    static bool classof(const Arg *A) { 
+      return A->getKind() == Arg::PositionalClass; 
+    }
+    static bool classof(const PositionalArg *) { return true; }
   };
 
   /// JoinedArg - A single value argument where the value is joined
@@ -75,10 +95,15 @@ namespace driver {
   public:
     JoinedArg(const Option *Opt, unsigned Index);
 
-    virtual void render(const ArgList &Args, ArgStringList &Output) const = 0;
+    virtual void render(const ArgList &Args, ArgStringList &Output) const;
 
     virtual unsigned getNumValues() const { return 1; }
     virtual const char *getValue(const ArgList &Args, unsigned N) const;
+
+    static bool classof(const Arg *A) { 
+      return A->getKind() == Arg::JoinedClass; 
+    }
+    static bool classof(const PositionalArg *) { return true; }
   };
 
   /// SeparateArg - An argument where one or more values follow the
@@ -89,10 +114,15 @@ namespace driver {
   public:
     SeparateArg(const Option *Opt, unsigned Index, unsigned NumValues);
 
-    virtual void render(const ArgList &Args, ArgStringList &Output) const = 0;
+    virtual void render(const ArgList &Args, ArgStringList &Output) const;
 
     virtual unsigned getNumValues() const { return NumValues; }
     virtual const char *getValue(const ArgList &Args, unsigned N) const;
+
+    static bool classof(const Arg *A) { 
+      return A->getKind() == Arg::SeparateClass; 
+    }
+    static bool classof(const PositionalArg *) { return true; }
   };
 
   /// CommaJoinedArg - An argument with multiple values joined by
@@ -107,10 +137,15 @@ namespace driver {
   public:
     CommaJoinedArg(const Option *Opt, unsigned Index, unsigned NumValues);
 
-    virtual void render(const ArgList &Args, ArgStringList &Output) const = 0;
+    virtual void render(const ArgList &Args, ArgStringList &Output) const;
 
     virtual unsigned getNumValues() const { return NumValues; }
     virtual const char *getValue(const ArgList &Args, unsigned N) const;
+
+    static bool classof(const Arg *A) { 
+      return A->getKind() == Arg::CommaJoinedClass; 
+    }
+    static bool classof(const PositionalArg *) { return true; }
   };
 
   /// JoinedAndSeparateArg - An argument with both joined and separate
@@ -119,10 +154,15 @@ namespace driver {
   public:
     JoinedAndSeparateArg(const Option *Opt, unsigned Index);
 
-    virtual void render(const ArgList &Args, ArgStringList &Output) const = 0;
+    virtual void render(const ArgList &Args, ArgStringList &Output) const;
 
     virtual unsigned getNumValues() const { return 2; }
     virtual const char *getValue(const ArgList &Args, unsigned N) const;
+
+    static bool classof(const Arg *A) { 
+      return A->getKind() == Arg::JoinedAndSeparateClass; 
+    }
+    static bool classof(const PositionalArg *) { return true; }
   };
 } // end namespace driver
 } // end namespace clang
diff --git a/lib/Driver/Arg.cpp b/lib/Driver/Arg.cpp
new file mode 100644 (file)
index 0000000..ad3c16d
--- /dev/null
@@ -0,0 +1,72 @@
+//===--- Arg.cpp - Argument Implementations -----------------------------*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Driver/Arg.h"
+
+using namespace clang::driver;
+
+Arg::Arg(ArgClass _Kind, const Option *_Opt, unsigned _Index) 
+  : Kind(_Kind),
+    Opt(_Opt),
+    Index(_Index)
+{
+}
+
+Arg::~Arg() { }
+
+PositionalArg::PositionalArg(const Option *Opt, unsigned Index)
+  : Arg(PositionalClass, Opt, Index) {
+}
+
+void PositionalArg::render(const ArgList &Args, ArgStringList &Output) const {
+  assert(0 && "FIXME: Implement");
+}
+
+const char *PositionalArg::getValue(const ArgList &Args, unsigned N) const {
+  assert(0 && "FIXME: Implement");
+}
+
+JoinedArg::JoinedArg(const Option *Opt, unsigned Index)
+  : Arg(JoinedClass, Opt, Index) {
+}
+
+void JoinedArg::render(const ArgList &Args, ArgStringList &Output) const {
+  assert(0 && "FIXME: Implement");
+}
+
+const char *JoinedArg::getValue(const ArgList &Args, unsigned N) const {
+  assert(0 && "FIXME: Implement");
+}
+
+CommaJoinedArg::CommaJoinedArg(const Option *Opt, unsigned Index, 
+                               unsigned _NumValues)
+  : Arg(CommaJoinedClass, Opt, Index), NumValues(_NumValues) {
+}
+
+void CommaJoinedArg::render(const ArgList &Args, ArgStringList &Output) const {
+  assert(0 && "FIXME: Implement");
+}
+
+const char *CommaJoinedArg::getValue(const ArgList &Args, unsigned N) const {
+  assert(0 && "FIXME: Implement");
+}
+
+JoinedAndSeparateArg::JoinedAndSeparateArg(const Option *Opt, unsigned Index)
+  : Arg(JoinedAndSeparateClass, Opt, Index) {
+}
+
+void JoinedAndSeparateArg::render(const ArgList &Args, 
+                                  ArgStringList &Output) const {
+  assert(0 && "FIXME: Implement");
+}
+
+const char *JoinedAndSeparateArg::getValue(const ArgList &Args, 
+                                           unsigned N) const {
+  assert(0 && "FIXME: Implement");
+}