-/* Cycript - Remote Execution Server and Disassembler
+/* Cycript - Inlining/Optimizing JavaScript Compiler
* Copyright (C) 2009 Jay Freeman (saurik)
*/
};
struct CYThing {
+ virtual ~CYThing() {
+ }
+
virtual void Output(struct CYOutput &out) const = 0;
};
std::ostream &out_;
bool pretty_;
unsigned indent_;
+ bool right_;
enum {
NoMode,
out_(out),
pretty_(false),
indent_(0),
+ right_(false),
mode_(NoMode)
{
}
struct CYPropertyName {
virtual void PropertyName(CYOutput &out) const = 0;
+
+ virtual ~CYPropertyName() {
+ }
};
struct CYExpression;
CYNoCall = (1 << 3),
CYNoRightHand = (1 << 4),
CYNoDangle = (1 << 5),
+ CYNoInteger = (1 << 6),
CYNoBF = (CYNoBrace | CYNoFunction),
};
struct CYStatement :
CYNext<CYStatement>
{
+ virtual ~CYStatement() {
+ }
+
void Single(CYOutput &out, CYFlags flags) const;
void Multiple(CYOutput &out, CYFlags flags = CYNoFlags) const;
};
struct CYClassName {
+ virtual ~CYClassName() {
+ }
+
virtual CYExpression *ClassName(CYContext &context, bool object) = 0;
virtual void ClassName(CYOutput &out, bool object) const = 0;
};
}
};
+struct CYComment :
+ CYStatement
+{
+ const char *value_;
+
+ CYComment(const char *value) :
+ value_(value)
+ {
+ }
+
+ virtual CYStatement *Replace(CYContext &context);
+ virtual void Output(CYOutput &out, CYFlags flags) const;
+};
+
struct CYLabel :
CYStatement
{
};
struct CYForInitialiser {
+ virtual ~CYForInitialiser() {
+ }
+
virtual void For(CYOutput &out) const = 0;
};
struct CYForInInitialiser {
+ virtual ~CYForInInitialiser() {
+ }
+
virtual void ForIn(CYOutput &out, CYFlags flags) const = 0;
virtual const char *ForEachIn() const = 0;
virtual CYExpression *ForEachIn(CYContext &out) = 0;
virtual CYNumber *Number(CYContext &context);
virtual CYString *String(CYContext &context);
- virtual CYString *Concat(CYContext &out, CYString *rhs) const;
+ CYString *Concat(CYContext &out, CYString *rhs) const;
virtual void Output(CYOutput &out, CYFlags flags) const;
virtual void PropertyName(CYOutput &out) const;
};
virtual void Output(CYOutput &out, CYFlags flags) const;
};
+struct CYProperty :
+ CYNext<CYProperty>,
+ CYThing
+{
+ CYPropertyName *name_;
+ CYExpression *value_;
+
+ CYProperty(CYPropertyName *name, CYExpression *value, CYProperty *next = NULL) :
+ CYNext<CYProperty>(next),
+ name_(name),
+ value_(value)
+ {
+ }
+
+ void Replace(CYContext &context);
+ virtual void Output(CYOutput &out) const;
+};
+
struct CYDeclaration :
CYForInInitialiser
{
CYIdentifier *identifier_;
CYExpression *initialiser_;
- CYDeclaration(CYIdentifier *identifier, CYExpression *initialiser) :
+ CYDeclaration(CYIdentifier *identifier, CYExpression *initialiser = NULL) :
identifier_(identifier),
initialiser_(initialiser)
{
virtual void For(CYOutput &out) const;
void Replace(CYContext &context);
+ CYProperty *Property(CYContext &context);
virtual void Output(CYOutput &out) const;
virtual void Output(CYOutput &out, CYFlags flags) const;
virtual void Output(CYOutput &out, CYFlags flags) const;
};
-struct CYProperty :
- CYNext<CYProperty>,
- CYThing
-{
- CYPropertyName *name_;
- CYExpression *value_;
-
- CYProperty(CYPropertyName *name, CYExpression *value, CYProperty *next = NULL) :
- CYNext<CYProperty>(next),
- name_(name),
- value_(value)
- {
- }
-
- void Replace(CYContext &context);
- virtual void Output(CYOutput &out) const;
-};
-
struct CYObject :
CYLiteral
{
{
}
+ virtual ~CYFunction() {
+ }
+
virtual void Replace_(CYContext &context);
virtual void Output(CYOutput &out, CYFlags flags) const;
};
}
virtual const char *Operator() const {
- return "^";
+ return "*";
}
CYAlphabetic(false)