#include "Parser.hpp"
-struct CYTypeModifier :
- CYNext<CYTypeModifier>
-{
- CYTypeModifier(CYTypeModifier *next) :
- CYNext<CYTypeModifier>(next)
- {
- }
-
- virtual CYExpression *Replace(CYContext &context) = 0;
-};
-
-struct CYTypeArrayOf :
- CYTypeModifier
-{
- CYExpression *size_;
-
- CYTypeArrayOf(CYExpression *size, CYTypeModifier *next = NULL) :
- CYTypeModifier(next),
- size_(size)
- {
- }
-
- CYPrecedence(2)
-
- virtual CYExpression *Replace(CYContext &context);
-};
-
-struct CYTypeConstant :
- CYTypeModifier
-{
- CYTypeConstant(CYTypeModifier *next = NULL) :
- CYTypeModifier(next)
- {
- }
-
- CYPrecedence(3)
-
- virtual CYExpression *Replace(CYContext &context);
-};
-
-struct CYTypePointerTo :
- CYTypeModifier
-{
- CYTypePointerTo(CYTypeModifier *next = NULL) :
- CYTypeModifier(next)
- {
- }
-
- CYPrecedence(3)
-
- virtual CYExpression *Replace(CYContext &context);
-};
-
-struct CYTypeVariable :
- CYTypeModifier
+struct CYInstanceLiteral :
+ CYExpression
{
- CYExpression *expression_;
+ CYNumber *number_;
- CYTypeVariable(CYExpression *expression) :
- CYTypeModifier(NULL),
- expression_(expression)
+ CYInstanceLiteral(CYNumber *number) :
+ number_(number)
{
}
CYPrecedence(1)
virtual CYExpression *Replace(CYContext &context);
-};
-
-struct CYTypedIdentifier :
- CYNext<CYTypedIdentifier>
-{
- CYIdentifier *identifier_;
- CYTypeModifier *type_;
-
- CYTypedIdentifier(CYIdentifier *identifier) :
- identifier_(identifier),
- type_(NULL)
- {
- }
-};
-
-struct CYTypedParameter :
- CYNext<CYTypedParameter>
-{
- CYTypedIdentifier *typed_;
-
- CYTypedParameter(CYTypedIdentifier *typed, CYTypedParameter *next) :
- CYNext<CYTypedParameter>(next),
- typed_(typed)
- {
- }
-
- CYFunctionParameter *Parameters(CYContext &context);
- CYExpression *TypeSignature(CYContext &context, CYExpression *prefix);
+ virtual void Output(CYOutput &out, CYFlags flags) const;
};
struct CYObjCBlock :
CYExpression
{
- CYTypeModifier *type_;
+ CYTypedIdentifier *typed_;
CYTypedParameter *parameters_;
CYStatement *statements_;
- CYObjCBlock(CYTypeModifier *type, CYTypedParameter *parameters, CYStatement *statements) :
- type_(type),
+ CYObjCBlock(CYTypedIdentifier *typed, CYTypedParameter *parameters, CYStatement *statements) :
+ typed_(typed),
parameters_(parameters),
statements_(statements)
{
virtual void Output(CYOutput &out, CYFlags flags) const;
};
-struct CYEncodedType :
- CYExpression
-{
- CYTypeModifier *type_;
-
- CYEncodedType(CYTypeModifier *type) :
- type_(type)
- {
- }
-
- CYPrecedence(1)
-
- virtual CYExpression *Replace(CYContext &context);
- virtual void Output(CYOutput &out, CYFlags flags) const;
-};
-
struct CYBox :
CYExpression
{
struct CYField :
CYNext<CYField>
{
- CYExpression *type_;
- CYIdentifier *name_;
+ CYTypedIdentifier *typed_;
- CYField(CYExpression *type, CYIdentifier *name, CYField *next = NULL) :
+ CYField(CYTypedIdentifier *typed, CYField *next = NULL) :
CYNext<CYField>(next),
- type_(type),
- name_(name)
+ typed_(typed)
{
}
void Output(CYOutput &out) const;
};
+struct CYModule :
+ CYNext<CYModule>,
+ CYThing
+{
+ CYWord *part_;
+
+ CYModule(CYWord *part, CYModule *next = NULL) :
+ CYNext<CYModule>(next),
+ part_(part)
+ {
+ }
+
+ CYString *Replace(CYContext &context, const char *separator) const;
+ void Output(CYOutput &out) const;
+};
+
struct CYImport :
CYStatement
{
+ CYModule *module_;
+
+ CYImport(CYModule *module) :
+ module_(module)
+ {
+ }
+
virtual CYStatement *Replace(CYContext &context);
virtual void Output(CYOutput &out, CYFlags flags) const;
};