/* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2012 Jay Freeman (saurik)
+ * Copyright (C) 2009-2013 Jay Freeman (saurik)
*/
-/* GNU Lesser General Public License, Version 3 {{{ */
+/* GNU General Public License, Version 3 {{{ */
/*
- * Cycript is free software: you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or (at your
- * option) any later version.
+ * Cycript is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
*
- * Cycript is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- * License for more details.
+ * Cycript is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with Cycript. If not, see <http://www.gnu.org/licenses/>.
**/
/* }}} */
#include "Parser.hpp"
-struct CYTypeModifier :
- CYNext<CYTypeModifier>
-{
- CYTypeModifier(CYTypeModifier *next) :
- CYNext<CYTypeModifier>(next)
- {
- }
-
- virtual CYExpression *Replace(CYContext &context) = 0;
-};
-
-struct CYTypeArrayOf :
- CYTypeModifier
-{
- size_t size_;
-
- CYTypeArrayOf(size_t 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);
+ virtual void Output(CYOutput &out, CYFlags flags) const;
};
-struct CYTypedIdentifier :
- CYNext<CYTypedIdentifier>
-{
- CYIdentifier *identifier_;
- CYTypeModifier *type_;
-
- CYTypedIdentifier(CYIdentifier *identifier) :
- identifier_(identifier),
- type_(NULL)
- {
- }
-};
-
-struct CYEncodedType :
+struct CYObjCBlock :
CYExpression
{
- CYTypeModifier *type_;
-
- CYEncodedType(CYTypeModifier *type) :
- type_(type)
+ CYTypedIdentifier *typed_;
+ CYTypedParameter *parameters_;
+ CYStatement *statements_;
+
+ CYObjCBlock(CYTypedIdentifier *typed, CYTypedParameter *parameters, CYStatement *statements) :
+ typed_(typed),
+ parameters_(parameters),
+ statements_(statements)
{
}
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;
};