]> granicus.if.org Git - clang/commitdiff
ccc: Refactor so that all accesses to actual input strings go through
authorDaniel Dunbar <daniel@zuster.org>
Wed, 7 Jan 2009 01:29:28 +0000 (01:29 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 7 Jan 2009 01:29:28 +0000 (01:29 +0000)
the ArgList.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61844 91177308-0d34-0410-b5e6-96231b3b80d8

tools/ccc/ccclib/Arguments.py
tools/ccc/ccclib/Driver.py
tools/ccc/ccclib/Jobs.py
tools/ccc/ccclib/Tools.py

index a6bad51d1337fc7556905ea7513aff5d58376d4d..ee234f1a71c7104a3a35ee25dde99cf5cccb1d4d 100644 (file)
@@ -135,17 +135,17 @@ class PositionalArg(ValueArg):
     """PositionalArg - A simple positional argument."""
 
     def getValue(self, args):
-        return args[self.index]
+        return args.getInputString(self.index)
 
     def render(self, args):
-        return [args[self.index]]
+        return [args.getInputString(self.index)]
 
 class JoinedValueArg(ValueArg):
     """JoinedValueArg - A single value argument where the value is
     joined (suffixed) to the option."""
 
     def getValue(self, args):
-        return args[self.index][len(self.opt.name):]
+        return args.getInputString(self.index)[len(self.opt.name):]
 
     def render(self, args):
         return [self.opt.name + self.getValue(args)]
@@ -155,7 +155,7 @@ class SeparateValueArg(ValueArg):
     follows the option in the argument vector."""
 
     def getValue(self, args):
-        return args[self.index+1]
+        return args.getInputString(self.index, offset=1)
 
     def render(self, args):
         return [self.opt.name, self.getValue(args)]
@@ -167,7 +167,8 @@ class MultipleValuesArg(Arg):
     # FIXME: Should we unify this with SeparateValueArg?
 
     def getValues(self, args):
-        return args[self.index + 1:self.index + 1 + self.opt.numArgs]
+        return [args.getInputString(self.index, offset=1+i)
+                for i in range(self.opt.numArgs)]
 
     def render(self, args):
         return [self.opt.name] + self.getValues(args)
@@ -179,17 +180,10 @@ class JoinedAndSeparateValuesArg(Arg):
     separate values."""
 
     def getJoinedValue(self, args):
-        return args[self.index][len(self.opt.name):]
+        return args.getInputString(self.index)[len(self.opt.name):]
 
     def getSeparateValue(self, args):
-        return args[self.index+1]
-
-    def setJoinedValue(self, args, value):
-        assert self.opt.name == args[self.index][:len(self.opt.name)]
-        args[self.index] = self.opt.name + value
-        
-    def setSeparateValue(self, args, vaue):
-        args[self.index+1] = value
+        return args.getInputString(self.index, offset=1)
 
     def render(self, args):
         return ([self.opt.name + self.getJoinedValue(args)] + 
@@ -224,6 +218,9 @@ class ArgList:
     def getLastArg(self, option):
         return self.lastArgs.get(option)
 
+    def getInputString(self, index, offset=0):
+        return self.argv[index + offset]
+
     # Support use as a simple arg list.
 
     def __iter__(self):
@@ -234,18 +231,23 @@ class ArgList:
         self.lastArgs[arg.opt] = arg
 
     # Forwarding methods.
+    #
+    # FIXME: Clean this up once restructuring is done.
+
+    def render(self, arg):
+        return arg.render(self)
 
     def getValue(self, arg):
-        return arg.getValue(self.argv)
+        return arg.getValue(self)
 
     def getValues(self, arg):
-        return arg.getValues(self.argv)
+        return arg.getValues(self)
 
     def getSeparateValue(self, arg):
-        return arg.getSeparateValue(self.argv)
+        return arg.getSeparateValue(self)
 
     def getJoinedValue(self, arg):
-        return arg.getJoinedValue(self.argv)
+        return arg.getJoinedValue(self)
 
 ###
     
index aa617c611eb2506f5ea93c6d720f6b9341b2d436..a8aab6cd26997510dd16d350805be9bc614a23b9 100644 (file)
@@ -104,10 +104,10 @@ class Driver(object):
             self.claim(hasHashHashHash)
             for j in jobs.iterjobs():
                 if isinstance(j, Jobs.Command):
-                    print '"%s"' % '" "'.join(j.render(argv))
+                    print '"%s"' % '" "'.join(j.render(args))
                 elif isinstance(j, Jobs.PipedJob):
                     for c in j.commands:
-                        print '"%s" %c' % ('" "'.join(c.render(argv)),
+                        print '"%s" %c' % ('" "'.join(c.render(args)),
                                            "| "[c is j.commands[-1]])
                 elif not isinstance(j, JobList):
                     raise ValueError,'Encountered unknown job.'
@@ -115,7 +115,7 @@ class Driver(object):
 
         for j in jobs.iterjobs():
             if isinstance(j, Jobs.Command):
-                cmd_args = j.render(argv)
+                cmd_args = j.render(args)
                 res = os.spawnvp(os.P_WAIT, cmd_args[0], cmd_args)
                 if res:
                     sys.exit(res)
index b7d42887882568b0c2b6bf77237e8bbfdeaa8358..1c077caa8ee0dc47834dcdba543c9e3ddf11a956 100644 (file)
@@ -23,7 +23,7 @@ class Command(Job):
     def render(self, args):
         argv = [self.executable]
         for arg in self.args:
-            argv.extend(arg.render(args))
+            argv.extend(args.render(arg))
         return argv
 
     def iterjobs(self):
index 1468fe899c10a7877993f9d930be286f69be9499..779d5d39222f45f8705311fd7fba59eaf5a351fb 100644 (file)
@@ -139,7 +139,7 @@ class Collect2Tool(Tool):
                 if arg.opt.name in ('-framework',):
                     cmd_args.append(arg)
         for input in inputs:
-            cmd_args.append(input.source)            
+            cmd_args.append(input.source)
         if isinstance(output, Arguments.DerivedArg):
             cmd_args.extend([Arguments.DerivedArg('-o'), output])
         else: