text: //===-- plugin.cpp -------------------------------------------*- C++ -*-===//
  //
  //                     The LLVM Compiler Infrastructure
  //
  // This file is distributed under the University of Illinois Open Source
  // License. See LICENSE.TXT for details.
  //
  //===----------------------------------------------------------------------===//
  
  /*
  An example plugin for LLDB that provides a new foo command with a child subcommand
  Compile this into a dylib foo.dylib and load by placing in appropriate locations on disk or
  by typing plugin load foo.dylib at the LLDB command line
  */
  
  #if defined (__APPLE__)
  #include <LLDB/SBCommandInterpreter.h>
  #include <LLDB/SBCommandReturnObject.h>
  #include <LLDB/SBDebugger.h>
  #else
  #include <lldb/API/SBCommandInterpreter.h>
  #include <lldb/API/SBCommandReturnObject.h>
  #include <lldb/API/SBDebugger.h>
  #endif
  
  namespace lldb {
      bool
      PluginInitialize (lldb::SBDebugger debugger);
  }
  
  class ChildCommand : public lldb::SBCommandPluginInterface
  {
  public:
      virtual bool
      DoExecute (lldb::SBDebugger debugger,
                 char** command,
                 lldb::SBCommandReturnObject &result)
      {
          if (command)
          {
              const char* arg = *command;
              while (arg)
              {
                  result.Printf("%s ",arg);
                  arg = *(++command);
              }
              result.Printf("\n");
              return true;
          }
          return false;
      }
      
  };
  
  bool
  lldb::PluginInitialize (lldb::SBDebugger debugger)
  {
      lldb::SBCommandInterpreter interpreter = debugger.GetCommandInterpreter();
      lldb::SBCommand foo = interpreter.AddMultiwordCommand("plugin_loaded_command",NULL);
      foo.AddCommand("child",new ChildCommand(),"a child of plugin_loaded_command");
      return true;
  }
  