summaryrefslogtreecommitdiff
path: root/cpp/include/Slice/Parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/include/Slice/Parser.h')
-rw-r--r--cpp/include/Slice/Parser.h61
1 files changed, 49 insertions, 12 deletions
diff --git a/cpp/include/Slice/Parser.h b/cpp/include/Slice/Parser.h
index 6c5a4f5d75b..51fb288b318 100644
--- a/cpp/include/Slice/Parser.h
+++ b/cpp/include/Slice/Parser.h
@@ -68,6 +68,16 @@ SLICE_API enum NodeType
Real
};
+//
+// Format preference for classes and exceptions.
+//
+SLICE_API enum FormatType
+{
+ DefaultFormat, // No preference was specified.
+ CompactFormat, // Minimal format.
+ SlicedFormat // Full format.
+};
+
class GrammarBase;
class SyntaxTreeBase;
class Type;
@@ -146,6 +156,14 @@ struct ConstDef
std::string valueAsLiteral;
};
+struct OptionalDef
+{
+ TypePtr type;
+ std::string name;
+ bool optional;
+ int tag;
+};
+
// ----------------------------------------------------------------------
// CICompare -- function object to do case-insensitive string comparison.
// ----------------------------------------------------------------------
@@ -353,6 +371,8 @@ public:
void setMetaData(const std::list<std::string>&);
void addMetaData(const std::string&); // TODO: remove this method once "cs:" and "vb:" are hard errors.
+ static FormatType parseFormatMetaData(const std::list<std::string>&);
+
enum ContainedType
{
ContainedTypeSequence,
@@ -567,9 +587,11 @@ public:
};
TypePtr returnType() const;
+ bool returnIsOptional() const;
+ int returnTag() const;
Mode mode() const;
Mode sendMode() const;
- ParamDeclPtr createParamDecl(const std::string&, const TypePtr&, bool);
+ ParamDeclPtr createParamDecl(const std::string&, const TypePtr&, bool, bool, int);
ParamDeclList parameters() const;
ExceptionList throws() const;
void setExceptionList(const ExceptionList&);
@@ -579,15 +601,18 @@ public:
bool returnsClasses() const;
bool returnsData() const;
int attributes() const;
+ FormatType format() const;
virtual std::string kindOf() const;
virtual void visit(ParserVisitor*, bool);
protected:
- Operation(const ContainerPtr&, const std::string&, const TypePtr&, Mode);
+ Operation(const ContainerPtr&, const std::string&, const TypePtr&, bool, int, Mode);
friend class ClassDef;
TypePtr _returnType;
+ bool _returnIsOptional;
+ int _returnTag;
ExceptionList _throws;
Mode _mode;
};
@@ -608,15 +633,16 @@ class SLICE_API ClassDef : virtual public Container, virtual public Contained
public:
virtual void destroy();
- OperationPtr createOperation(const std::string&, const TypePtr&, Operation::Mode = Operation::Normal);
- DataMemberPtr createDataMember(const std::string&, const TypePtr&, const SyntaxTreeBasePtr&, const std::string&,
- const std::string&);
+ OperationPtr createOperation(const std::string&, const TypePtr&, bool, int, Operation::Mode = Operation::Normal);
+ DataMemberPtr createDataMember(const std::string&, const TypePtr&, bool, int, const SyntaxTreeBasePtr&,
+ const std::string&, const std::string&);
ClassDeclPtr declaration() const;
ClassList bases() const;
ClassList allBases() const;
OperationList operations() const;
OperationList allOperations() const;
DataMemberList dataMembers() const;
+ DataMemberList orderedOptionalDataMembers() const;
DataMemberList allDataMembers() const;
DataMemberList classDataMembers() const;
DataMemberList allClassDataMembers() const;
@@ -628,6 +654,7 @@ public:
bool hasDataMembers() const;
bool hasOperations() const;
bool hasDefaultValues() const;
+ bool inheritsMetaData(const std::string&) const;
virtual ContainedType containedType() const;
virtual bool uses(const ContainedPtr&) const;
virtual std::string kindOf() const;
@@ -679,9 +706,10 @@ class SLICE_API Exception : virtual public Container, virtual public Contained
public:
virtual void destroy();
- DataMemberPtr createDataMember(const std::string&, const TypePtr&, const SyntaxTreeBasePtr&, const std::string&,
- const std::string&);
+ DataMemberPtr createDataMember(const std::string&, const TypePtr&, bool, int, const SyntaxTreeBasePtr&,
+ const std::string&, const std::string&);
DataMemberList dataMembers() const;
+ DataMemberList orderedOptionalDataMembers() const;
DataMemberList allDataMembers() const;
DataMemberList classDataMembers() const;
DataMemberList allClassDataMembers() const;
@@ -693,6 +721,7 @@ public:
virtual bool uses(const ContainedPtr&) const;
bool usesClasses() const;
bool hasDefaultValues() const;
+ bool inheritsMetaData(const std::string&) const;
virtual std::string kindOf() const;
virtual void visit(ParserVisitor*, bool);
@@ -713,8 +742,8 @@ class SLICE_API Struct : virtual public Container, virtual public Constructed
{
public:
- DataMemberPtr createDataMember(const std::string&, const TypePtr&, const SyntaxTreeBasePtr&, const std::string&,
- const std::string&);
+ DataMemberPtr createDataMember(const std::string&, const TypePtr&, bool, int, const SyntaxTreeBasePtr&,
+ const std::string&, const std::string&);
DataMemberList dataMembers() const;
DataMemberList classDataMembers() const;
virtual ContainedType containedType() const;
@@ -887,6 +916,8 @@ public:
TypePtr type() const;
bool isOutParam() const;
+ bool optional() const;
+ int tag() const;
virtual ContainedType containedType() const;
virtual bool uses(const ContainedPtr&) const;
virtual std::string kindOf() const;
@@ -894,11 +925,13 @@ public:
protected:
- ParamDecl(const ContainerPtr&, const std::string&, const TypePtr&, bool isOutParam);
+ ParamDecl(const ContainerPtr&, const std::string&, const TypePtr&, bool, bool, int);
friend class Operation;
TypePtr _type;
bool _isOutParam;
+ bool _optional;
+ int _tag;
};
// ----------------------------------------------------------------------
@@ -910,6 +943,8 @@ class SLICE_API DataMember : virtual public Contained
public:
TypePtr type() const;
+ bool optional() const;
+ int tag() const;
std::string defaultValue() const;
std::string defaultLiteral() const;
SyntaxTreeBasePtr defaultValueType() const;
@@ -920,13 +955,15 @@ public:
protected:
- DataMember(const ContainerPtr&, const std::string&, const TypePtr&, const SyntaxTreeBasePtr&, const std::string&,
- const std::string&);
+ DataMember(const ContainerPtr&, const std::string&, const TypePtr&, bool, int, const SyntaxTreeBasePtr&,
+ const std::string&, const std::string&);
friend class ClassDef;
friend class Struct;
friend class Exception;
TypePtr _type;
+ bool _optional;
+ int _tag;
SyntaxTreeBasePtr _defaultValueType;
std::string _defaultValue;
std::string _defaultLiteral;