Index: src/IceTypes.h |
diff --git a/src/IceTypes.h b/src/IceTypes.h |
index 6480c2c57bdb8b52326013f5d53559de20c47ff4..83b0ecce3f3b1839551d68b35fc04c8aa43eb7cb 100644 |
--- a/src/IceTypes.h |
+++ b/src/IceTypes.h |
@@ -103,6 +103,54 @@ inline StreamType &operator<<(StreamType &Str, const Type &Ty) { |
return Str; |
} |
+/// Models a type signature for a function. |
+/// TODO(kschimpf): Consider using arena memory allocation for |
+/// the contents of type signatures. |
+class FuncSigType { |
+public: |
+ typedef std::vector<Type> ArgListType; |
+ |
+ // Creates a function signature type with the given return type. |
+ // Parameter types should be added using calls to appendArgType. |
+ explicit FuncSigType() : ReturnType(IceType_void) {} |
+ |
+ FuncSigType(const FuncSigType &Ty) |
+ : ReturnType(Ty.ReturnType), ArgList(Ty.ArgList) {} |
+ |
+ FuncSigType &operator=(const FuncSigType &Ty) { |
+ ReturnType = Ty.ReturnType; |
+ ArgList = Ty.ArgList; |
+ return *this; |
+ } |
+ |
+ void appendArgType(Type ArgType) { ArgList.push_back(ArgType); } |
+ |
+ Type getReturnType() const { return ReturnType; } |
+ void setReturnType(Type NewType) { ReturnType = NewType; } |
+ SizeT getNumArgs() const { return ArgList.size(); } |
+ Type getArgType(SizeT Index) const { |
+ assert(Index < ArgList.size()); |
+ return ArgList[Index]; |
+ } |
+ const ArgListType &getArgList() const { return ArgList; } |
+ void Dump(Ostream &Stream) const; |
Jim Stichnoth
2014/10/06 22:48:51
lowercase dump
Karl
2014/10/07 20:15:58
Done.
|
+ void reset() { |
+ ArgList.clear(); |
+ ArgList.push_back(IceType_void); |
+ } |
+ |
+private: |
+ // The return type. |
+ Type ReturnType; |
+ // The list of parameters. |
+ ArgListType ArgList; |
+}; |
+ |
+inline Ostream &operator<<(Ostream &Stream, const FuncSigType &Sig) { |
+ Sig.Dump(Stream); |
+ return Stream; |
+} |
+ |
} // end of namespace Ice |
#endif // SUBZERO_SRC_ICETYPES_H |