 
 class GCClass
 {
-    function GCClass(tag, attr) {
+    function GCClass(tag, attr, _cond) {
         cls = getAttr(attr, 0);
         base = getAttr(attr, 1);
         hook = tag.match("_WITH_HOOK") != null;
         ifdef = tag.match("_IFDEF") != null ? getAttr(attr,2) : false;
         ifndef = tag.match("_IFNDEF") != null ? getAttr(attr,2) : false;
         if_ = !ifdef && !ifndef && tag.match("_IF") != null ? getAttr(attr,2) : false;
+        cond = _cond;
     }
 
     public function toString() { return printProps(this, ["cls","base","hook","ifdef"]) }


    var cppClassStack = [];       // tracks GC_CPP_EXACT, etc
    var cppDataStack = [];        // tracks GC_DATA_BEGIN / GC_DATA_END

    // TODO: factor regular expressions to avoid duplication?


    var hint = null;
}

class GCCppExact extends GCClass { function GCCppExact(tag,attr,cond) { super(tag,attr,cond) } }
class GCAS3Exact extends GCClass { function GCAS3Exact(tag,attr,cond) { super(tag,attr,cond) } }


// For GC_DATA_BEGIN and GC_DATA_END annotations in C++ classes.
class GCDataSection
{
    function GCDataSection(tag, attr, cond) {
        // ignore cond
        cls = getAttr(attr, 0);
    }

