From fb36caee244b9954caf9d4dda73608980e9c45b8 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Wed, 4 Mar 2009 22:37:52 +0000 Subject: [PATCH] Driver: Stub out Arg implementations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66088 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Driver/Arg.h | 72 +++++++++++++++++++++++++++++--------- lib/Driver/Arg.cpp | 72 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 16 deletions(-) create mode 100644 lib/Driver/Arg.cpp diff --git a/include/clang/Driver/Arg.h b/include/clang/Driver/Arg.h index 8d8f0942a0..4bf6be6d56 100644 --- a/include/clang/Driver/Arg.h +++ b/include/clang/Driver/Arg.h @@ -10,6 +10,13 @@ #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 index 0000000000..ad3c16d98a --- /dev/null +++ b/lib/Driver/Arg.cpp @@ -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"); +} -- 2.50.1