Store output and input operands as well as clobber information in the AsmStmt. Ted, could you please review the serialization/deserialization code?

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44266 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/AST/Stmt.cpp b/AST/Stmt.cpp
index ccd27af..9a4d434 100644
--- a/AST/Stmt.cpp
+++ b/AST/Stmt.cpp
@@ -111,6 +111,29 @@
   }
 }
 
+AsmStmt::AsmStmt(SourceLocation asmloc, 
+                 unsigned numoutputs,
+                 unsigned numinputs,
+                 std::string *names,
+                 StringLiteral **constraints,
+                 Expr **exprs,
+                 StringLiteral *asmstr,
+                 unsigned numclobbers,
+                 StringLiteral **clobbers,                 
+                 SourceLocation rparenloc)
+  : Stmt(AsmStmtClass), AsmLoc(asmloc), RParenLoc(rparenloc), AsmStr(asmstr)
+  , NumOutputs(numoutputs), NumInputs(numinputs)
+{
+  for (unsigned i = 0, e = numinputs + numoutputs; i != e; i++) {
+    Names.push_back(names[i]);
+    Exprs.push_back(exprs[i]);
+    Constraints.push_back(constraints[i]);    
+  }
+  
+  for (unsigned i = 0; i != numclobbers; i++)
+    Clobbers.push_back(clobbers[i]);
+}
+
 //===----------------------------------------------------------------------===//
 //  Child Iterators for iterating over subexpressions/substatements
 //===----------------------------------------------------------------------===//