+ CYIdentifier *name_;
+ CYStatement *statement_;
+
+ CYLabel(CYIdentifier *name, CYStatement *statement) :
+ name_(name),
+ statement_(statement)
+ {
+ }
+
+ virtual CYStatement *Replace(CYContext &context);
+ virtual void Output(CYOutput &out, CYFlags flags) const;
+};
+
+struct CYCStringLess :
+ std::binary_function<const char *, const char *, bool>
+{
+ _finline bool operator ()(const char *lhs, const char *rhs) const {
+ return strcmp(lhs, rhs) < 0;
+ }
+};
+
+struct CYIdentifierValueLess :
+ std::binary_function<CYIdentifier *, CYIdentifier *, bool>
+{
+ _finline bool operator ()(CYIdentifier *lhs, CYIdentifier *rhs) const {
+ return CYCStringLess()(lhs->Word(), rhs->Word());
+ }
+};
+
+enum CYIdentifierFlags {
+ CYIdentifierArgument,
+ CYIdentifierVariable,
+ CYIdentifierOther,
+ CYIdentifierMagic,
+ CYIdentifierCatch,
+};
+
+typedef std::set<const char *, CYCStringLess> CYCStringSet;
+typedef std::set<CYIdentifier *, CYIdentifierValueLess> CYIdentifierValueSet;
+typedef std::map<CYIdentifier *, CYIdentifierFlags> CYIdentifierAddressFlagsMap;
+
+struct CYIdentifierUsage {